lis
Load Immediate Shifted - 3C 00 00 00
lis
Instruction Syntax
Mnemonic | Format | Flags |
lis | rD,SIMM | None |
Instruction Encoding
0
0
1
1
1
1
D
D
D
D
D
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
Field | Bits | Description |
Primary Opcode | 0-5 | 001111 (0x0F) |
rD | 6-10 | Destination register |
SIMM | 16-31 | Signed immediate value (16-bit) |
Operation
rD ← EXTS(SIMM) << 16
LIS loads a 16-bit signed immediate value into the upper 16 bits of a register, leaving the lower 16 bits as zero.
- Takes a 16-bit signed immediate value
- Sign-extends it to 32 bits
- Shifts it left by 16 positions (into upper half)
- Stores the result in the destination register
Note: LIS is used to load the upper 16 bits of a 32-bit value. Often followed by ori to set the lower 16 bits, allowing you to load any 32-bit constant.
Affected Registers
General Purpose Registers (GPRs)
- rD (Destination register) - Loaded with shifted immediate value
Examples
Basic Load Immediate Shifted
# Load upper 16 bits of a value lis r3, 0x1234 # r3 = 0x12340000 lis r4, 0xFFFF # r4 = 0xFFFF0000 lis r5, 0x0000 # r5 = 0x00000000
Loading Full 32-bit Constants
# Load complete 32-bit value using lis + ori lis r3, 0x1234 # Load upper 16 bits: 0x12340000 ori r3, r3, 0x5678 # Set lower 16 bits: 0x12345678 # r3 now contains 0x12345678
Loading Addresses
# Load high part of address lis r3, data@ha # Load high-adjusted address addi r3, r3, data@l # Add low part of address # r3 now points to 'data'
Loading Large Numbers
# Load large constants lis r3, 0x8000 # r3 = 0x80000000 (negative number) lis r4, 0x7FFF # r4 = 0x7FFF0000 (large positive) lis r5, 0x0001 # r5 = 0x00010000
Setting Register to Zero
# Clear upper 16 bits (lower bits remain unchanged) lis r3, 0 # r3 = 0x00000000 (if r3 was 0) # or r3 = 0x0000XXXX (if r3 had lower bits set)
Loading Immediate Values for Comparison
# Load threshold values lis r3, 0x0001 # r3 = 0x00010000 (65536) cmpw r4, r3 # Compare r4 with 65536 blt small_value # Branch if r4 < 65536
Loading Constants for Calculations
# Load constants for mathematical operations lis r3, 0x0001 # r3 = 0x00010000 (65536) add r4, r4, r3 # Add 65536 to r4 lis r5, 0xFFFF # r5 = 0xFFFF0000 (-65536) sub r6, r6, r5 # Subtract -65536 (add 65536)
Related Instructions
li (Load Immediate), ori (OR Immediate), addis (Add Immediate Shifted), andi (AND Immediate)