Risc-V定义了可选的RV32M,它定义了整数乘法除法指令。

总共8条指令。

Category Fmt RV32I base machine code(bin) comment
mul 整数乘法 R mul rd, rs1, rs2 0000001[24-20,rs2][19-15,rs1]000[11-7,rd]0110011 rd=rs1*rs2,
将结果的低32位写入rd,对于有符号数和无符号数相乘,结果低32位是相同的,所以只有一条指令,取低32位
整数乘法 R mulh rd, rs1, rs3 0000001[24-20,rs2][19-15,rs1]001[11-7,rd]0110011 rd=rs1*rs2, rs1,rs2被当作有符号数,结果高32位写入rd
整数乘法 R mulhu rd, rs1, rs4 0000001[24-20,rs2][19-15,rs1]010[11-7,rd]0110011 rd=rs1*rs2, rs1,rs2被当作无符号数,结果高32位写入rd
整数乘法 R mulhsu rd, rs1, rs5 0000001[24-20,rs2][19-15,rs1]011[11-7,rd]0110011 rd=rs1*rs2,
rs1当作有符号数,rs2被当作无符号数,结果高32位写入rd
div 整数除法 R div rd, rs1, rs2 0000001[24-20,rs2][19-15,rs1]100[11-7,rd]0110011 rd=rs1/rs2,rs1,rs2都被当作有符号数,将除法的商写回寄存器rd中。
整数除法 R divu rd, rs1, rs3 0000001[24-20,rs2][19-15,rs1]101[11-7,rd]0110011 rd=rs1/rs2,rs1,rs2都被当作无符号数,将除法的商写回寄存器rd中。
整数除法 R rem rd, rs1, rs4 0000001[24-20,rs2][19-15,rs1]110[11-7,rd]0110011 rd=rs1/rs2,rs1,rs2都被当作有符号数,将除法的余数写回寄存器rd中。
整数除法 R remu rd, rs1, rs5 0000001[24-20,rs2][19-15,rs1]111[11-7,rd]0110011 rd=rs1/rs2,rs1,rs2都被当作无符号数,将除法的余数写回寄存器rd中。

如果希望得到两个32位整数相乘;的完整的64位结果,Risc-V推荐使用下面的指令:

mulh[s|u] rdh,rs1, rs2;

mul rdl rs1,rs2

其中要求:两条指令的源操作数索引号和顺序必须完全相同。第一条指令的rdh索引必须不能与rs1,rs2索引号相同。处理器实现的微架构可以把两条指令融合成一条指令执行,从而提高性能。

如果希望同时得到两个32位数相除的商和余数,Risc-V推荐用以下指令:

div[u] rdq, rs1, rs2;

rem[u] rdr,rs1,rs2;

其中要求:两条指令的源操作数索引号和顺序必须完全相同。第一条指令的rdh索引必须不能与rs1,rs2索引号相同。处理器实现的微架构可以把两条指令融合成一条指令执行,从而提高性能。

Risv-V中除以0,并不会产生异常,仍会产生一个特殊的结果。

RV32M指令集的更多相关文章

  1. Risc-V指令集

    https://riscv.org/specifications/ Risc-V文档包括:用户层指令集文档和特权架构文档,下面这两个文件的官网链接. User-Level ISA Specificat ...

  2. SSE指令集学习:Compiler Intrinsic

    大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...

  3. ARM-汇编指令集(总结)

    ARM汇编指令集 指令.伪指令 (汇编)指令:   是机器码的助记符,经过汇编器编译后,由CPU执行. (汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码. 有两种不同风格的ARM指 ...

  4. iOS------苹果设备处理器指令集(iPhone初代到iPhone5s)

    (via 雅香小筑) Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色. Armv6.armv7.armv7 ...

  5. SSE指令集优化学习:双线性插值

    对SSE的学习总算迈出了第一步,用2天时间对双线性插值的代码进行了优化,现将实现的过程梳理以下,算是对这段学习的一个总结. 1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数 ...

  6. RISC指令集的五个周期

    RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...

  7. x86指令集同频性能提升

    x86近5000条指令,迄今为止最复杂的指令集.这里不研究CISC & RISC,也不考虑process制程变化,主要是看最近几代IA架构对于同频率下性能的提升. x86指令集nasm文档 h ...

  8. CPU指令集

    cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...

  9. 在UWP应用中加入Cortana语音指令集

    本文介绍小娜语音指令集的使用场景,如何将UWP应用接入小娜的语音指令集,使用户直接通过小娜启动应用并使用应用中 一些轻量级的功能.文中以必应词典作为实例讲解必应词典UWP版本是如何接入小娜语音功能的. ...

随机推荐

  1. jQuery中click(),bind(),live()的区别(转)

    原文:http://www.jquery001.com/click%28%29-bind%28%29-live%28%29-delegate%28%29.html click(),bind(),liv ...

  2. 008.Zabbix多图展示

    一 Screen介绍 Screen能将某个主机多个图形,或者多个主机的同一种信息放在一起展示. 二 创建多主机监控图形 依次添加VMware-Win7和VMware-CentOS7两台主机的监控图形. ...

  3. Spring重复扫描导致事务失败的解决方案及深入分析

    问题及日志使用Spring和mybatis,然后配置事务,出现SqlSession was not registered for synchronization because synchroniza ...

  4. [ 转载 ] Android JNI(一)——NDK与JNI基础

    Android JNI(一)——NDK与JNI基础 隔壁老李头 关注  4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Androi ...

  5. BZOJ 3621: 我想那还真是令人高兴啊 计算几何 复数

    https://www.lydsy.com/JudgeOnline/problem.php?id=3621 给定两个三角形,其中一个可以通过以某点为中心旋转并放缩的方式得到另一个,求这个中心 http ...

  6. python基础之return,参数

    函数的返回值 1.什么是返回值: 返回值是一个函数的处理结果 2.为什么要有返回值 如果需要在程序中拿到函数的处理结果,做进一步的处理,则需要函数必须有返回值 3.函数返回值的应用: 函数的返回值用r ...

  7. GDI 泄漏检测方法

    方法一 1.打开电脑的[任务管理器],选择[进程]页,点击菜单项的[查看]项,选择[选择列]: 2.勾选[GDI对象(J)]即可. 3.此时,用户就可以在进程中看到每个进程对应的GDI对象,每个进程的 ...

  8. 如何利用Reveal神器查看各大APP UI搭建层级

    作者 乔同X2016.08.22 19:45 写了3195字,被42人关注,获得了73个喜欢 如何利用Reveal神器查看各大APP UI搭建层级 字数413 阅读110 评论0 喜欢5 title: ...

  9. Booting LPC-Link2, Updating LPCXpresso firmware

    Booting LPC-Link2 The recommended way to use LPC-Link2 with the LPCXpresso IDE is to boot and soft l ...

  10. 【Go命令教程】13. go tool cgo

    cgo 也是一个 Go 语言自带的特殊工具.一般情况下,我们使用命令 go tool cgo 来运行它.这个工具可以使我们创建能够调用 C 语言代码的 Go 语言源码文件.这使得我们可以使用 Go 语 ...