Alpha 通用64位立即数装载
·
hev
Alpha 立即数装载方式
- 使用立即数装载指令
- 使用访存指令从内存装载
Alpha 立即数装载指令
lda
- 格式:lda ra, imm16(rb)
- 功能:val(ra) = val(rb) + sign_extend_to_64bit(imm16)
ldah
- 格式:ldah ra, imm16(rb)
- 功能:val(ra) = val(rb) + sign_extend_to_64bit(imm16 * 65536)
通用64位立即数装载代码生成
# li64.S
.text
.globl li64
.enty li64
.type li64, @function
.set noreorder
.set nomacro
.set nomove
.set volatile
li64:
ldah v0, 0(zero) # highest
lda v0, 0(v0) # higher
sll v0, 32, v0
ldah v0, 0(v0) # high
lda v0, 0(v0) # low
ret zero, (ra)
.end li64
.size li64, .-li64
unsigned long imm64;
if ((short) (imm64 >> 0) < 0)
imm64 += 0x10000ul;
if ((short) (imm64 >> 16) < 0)
imm64 += 0x100000000ul;
if ((short) (imm64 >> 32) < 0)
imm64 += 0x1000000000000ul;
short highest = (short) (imm64 >> 48);
short higher = (short) (imm64 >> 32);
short highe = (short) (imm64 >> 16);
short low = (short) imm64;