IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Alpha 通用64位立即数装载

    hev发表于 2018-06-26 14:41:54
    love 0

    Alpha 立即数装载方式
    1. 使用立即数装载指令
    2. 使用访存指令从内存装载

    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;
    

    Over!



沪ICP备19023445号-2号
友情链接