查看: 1653|回复: 0
收起左侧

RISC-V 整数寄存器(x0~x31)与浮点寄存器(f0~f31)数据交换

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-10-1 12:12:10 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 新ちゃん 于 2020-10-1 13:01 编辑

    RV32F

    32位整数和32位浮点数的转换:


    fmv.s.x rd, rs1 f[rd] = x[rs1][31:0]
    fmv.x.s rd, rs1 x[rd] = f[rs1][31:0]


    RV32D

    32位整数和64位浮点数的交换,需要两个x寄存器来存储一个f寄存器的值,没有直接指令可以用。


    首先将f寄存器存储到堆栈,然后从堆栈读到两个x寄存器:

    1. fsd f8, 0(x2)
    2. lw x8, 0(x2)
    3. lw x9, 4(x2)
    复制代码

    假设64位浮点数保存在 f8 ,用两个32位整数寄存器 x8、x9 组合表示64位。


    反过来也类似:

    1. sw x8, 0(x2)
    2. sw x9, 4(x2)
    3. fld f8, 0(x2)
    复制代码

    RV64F

    64位整数和32位浮点数的交换,64位整数寄存器仅使用低32位:


    fmv.s.x rd, rs1 f[rd] = x[rs1][31:0]

    fmv.x.s rd, rs1 x[rd] = sext(f[rs1][31:0])


    RV64D

    64位整数和64位浮点数的交换:


    fmv.d.x rd, rs1 f[rd] = x[rs1][63:0]
    fmv.x.d rd, rs1 x[rd] = f[rs1][63:0]







    上一篇:可以跑Linux的RISC-V微型电脑:PicoRio,对标树莓派
    下一篇:RISC-V GCC:-specs=nano.specs 的作用
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-3-29 23:30 , Processed in 0.376286 second(s), 46 queries .

    快速回复 返回顶部 返回列表