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.

  1. Takes a 16-bit signed immediate value
  2. Sign-extends it to 32 bits
  3. Shifts it left by 16 positions (into upper half)
  4. 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)

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)

Back to Index