RISC-V MCU中文社区

【分享】 通过内联汇编调用乘法指令mulh\mulhsu\mulhu

发表于 全国大学生集成电路创新创业大赛 2023-05-24 14:47:52
0
2028
0

队伍介绍:报名编号:CICC3941 团队名称: 蜡笔小新

这是我们队伍的第2篇帖子

1.    蜂鸟E203内核支持的乘法指令有四种(不含融合指令),分别为mulmulhmulhumulhsu。它们的汇编语言格式如下:

              mul      rd,  rs1,  rs2   

          将两个32位整数相乘,取低32位(32位有符号数相乘与无符号数相乘低32位相同)

              mulh     rd,  rs1,  rs2  

           将两个32位有符号整数相乘,取高32

              mulhu    rd,  rs1,  rs2  

           将两个32位无符号整数相乘,取高32

              mulhsu   rd,  rs1,  rs2  

          将rs1当作有符号数,rs2当作无符号数相乘,取高32

2.    由于C语言中的乘法符号,在经过软件编译后生成的汇编指令位mul指令,因此,想要验证mulhmulhumulhsu指令,不能直接验证,需要其他方法。因此,我们想到了在C语言中嵌入内联汇编,分别生成三条指令的接口函数,之后便只需在C语言中调用者三中函数便可执行mulhmulhumulhsu指令。在C语言中嵌入内联汇编的过程如下:

首先,需要遵循GCC内联汇编的语法规则,格式如下:

asm volatile (

汇编指令列表

:输出操作数                       //非必需

:输入操作数                       //非必需

:可能影响的寄存器或存储器         //非必需

)

对于常见的R型指令,汇编指令列表,即.insn 的使用格式如下:

      .insn  r  opcode,    func3,    func7,    rd,    rs1,   rs2

因此,三条指令的内联汇编如下图所示:




其中指令中%后的数字含义如下:数字从0开始,依次表示输出操作数和输入操作数,如果输出操作数比较多则数字依次增加,输入操作数同理。

 

 

喜欢0
用户评论
明明是我

明明是我 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板