RV32C指令集
Risc-V支持16位压缩格式,压缩格式立即数位数更少,能使用的寄存器也比较少,有些指令只能用常用8个整数寄存器(x8-x15)或者(f8-f15)。
每个RVC指令都有对应的32位指令,下表列出所有的RV32C指令。
| 指令分组 | Fmt | 16位指令 | 对应32位指令 | 机器码 |
| stack-point based loads and stores,这些指令可以使用所有的通用寄存器作为操作数 |
c.lwsp rd, offset[7:2] | lw rd, offset[7:2](x2) | 010[12,uimm[5]][11-7,rd!=0][6-2,uimm[4:2|7:6]10 | |
| c.flwsp rd, offset[7:2] | flw rd, offset[7:2](x2) | 011[12,uimm[5]][11-7,rd][6-2,uimm[4:2|7:6]10 | ||
| c.fldsp rd, offset[8:3] | fld rd, offset[8:3](x2) | 001[12,uimm[5]][11-7,rd][6-2,uimm[4:3|8:6]10 | ||
| c.swsp rd, offset[7:2] | sw rs2, offset[7:2](x2) | 110[12-7,uimm[5:2][7:6]][6-2,rs2]10 | ||
| c.fswsp rd, offset[7:2] | fsw rs2, offset[7:2](x2) | 111[12-7,uimm[5:2][7:6]][6-2,rs2]10 | ||
| c.fsdsp rd, offset[8:3] | fsd rs2, offset[8:3](x2) | 101[12-7,uimm[5:3][8:6]][6-2,rs2]10 | ||
| register-based loads and stores,此指令只能使用常用的8个寄存器作为操作数,其中c.flw/c.fld的rd和c.fsw/c.fsd 的rs2位通用浮点寄存器 |
c.lw rd, offset[6:2](rs1) | lw rd, offset[6:2](rs1) | 010[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[2|6]][4-2,rd']00 | |
| c.flw rd, offset[6:2](rs1) | flw rd, offset[6:2](rs1) | 011[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[2|6]][4-2,rd']00 | ||
| c.fld rd, offset[7:3](rs1) | fld rd, offset[7:3](rs1) | 001[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[7:6]][4-2,rd']00 | ||
| c.sw rs2, offset[6:2](rs1) | sw rs2, offset[6:2](rs1) | 110[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[2|6]][4-2,rd']00 | ||
| c.fsw rs2, offset[6:2](rs1) | fsw rs2, offset[6:2](rs1) | 111[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[2|6]][4-2,rd']00 | ||
| c.fsd rs2, offset[7:3](rs1) | fsd rs2, offset[7:3](rs1) | 101[12-10,uimm[5:3]][9-7,rs1'][6-5,uimm[7:6]][4-2,rd']00 | ||
| control transfer instruction |
c.j offset[11:1] | jal x0,offset[11:1] | 101[12-2,imm[11|4|9:8|10|6|7|3:1|5]01 | |
| c.jal offset[11:1] | jal x1,offset[11:1] | 001[imm[11]4|9:8|10|6|7|3:1|5]01 | ||
| 可以使用所有通用寄存器作为操作数 | c.jr rs1 | jalr x0, rs1, 0 | 1000[11-7,rs1!=0]0000010 | |
| c.jalr rs1 | jalr x1,rs1,0 | 1001[11-7,rs1!=0]0000010 | ||
| 只能使用8个最为常用的通用寄存器作为操作数 | c.beqz rs1 offset[8:1] | beq rs1, x0, offset[8:1] | 110[12-10,imm[8:4:3][9-7,rs1'][6-2,imm[7:6|2:1|5]01 | |
| c.bnez rs1 offset[8:1] | bne rs1, x0, offset[8:1] | 111[12-10,imm[8:4:3][9-7,rs1'][6-2,imm[7:6|2:1|5]01 | ||
| 整数计算指令 | 可以使用所有通用寄存器作为操作数 | c.li rd, imm[5:0] | addi rd, x0, imm[5:0] | 010[12,imm[5]][11-7,rd!=0][6-2,imm[4:0]]01 |
| c.lui rd, nzuimm[17:12] | lui rd, nzuimm[17:12] | 011[12,imm[17]][11-7,rd!=0,2][6-2,nzimm[16:12]]01 | ||
| c.addi rd, nzimm[5:0] | addi rd, rd, nzimm[5:0] | ’000[12,nzimm[5]][11-7,rs1/rd!=0][6-2, nzimm[4:0]]01 |
||
| c.addi16sp nzimm[9:4] | addi x2, x2, nzimm[9:4] | ’011[12,nzimm[9]][11-7,2][6-2, nzimm[4|6|8:7|5]]01 |
||
| 只能使用8个最为常用的通用寄存器作为操作数 | c.addi4spn rd, nzuimm[9:2] | addi rd, x2, nzuimm[9:2] | 000[12-5,nzuimm[5:4|9:6|2|3][4-2,rd']00 | |
| 可以使用所有通用寄存器作为操作数 | c.slli rd, shamt[5:0] | slli rd, rd, shamt[5:0] | 000[12,nxuimm[5]][11-7,rs1/rd!=0][6-2,nzuimm[4:0]]10 | |
| 只能使用8个最为常用的通用寄存器作为操作数 | c.srli rd,rd, shamt[5:0] | srli rd, rd,shamt[5:0] | ’100[12,nzimm[5]]00[9-7,rs'/rd'][6-2, nzimm[4:0]]01 |
|
| c.srai rd,shamt[5:0] | srai rd, rd,shamt[5:0] | ’100[12,nzimm[5]]01[9-7,rs'/rd'][6-2, nzimm[4:0]]01 |
||
| c.andi rd, imm[5:0] | andi rd, rd,shamt[5:0] | ’100[12,nzimm[5]]10[9-7,rs'/rd'][6-2, nzimm[4:0]]01 |
||
| 可以使用所有通用寄存器作为操作数 | c.mv rd rs2 | add rd, x0, rs2 | 1000[11-7,rd!=0][6-2,rs2!=0]10 | |
| c.add rd rs2 | add rd, rd, rs2 | 1001[11-7,rs1/rd!=0][6-2,rs2!=0]10 | ||
| 只能使用8个最为常用的通用寄存器作为操作数 | c.and rd rs2 | and rd, rd, rs2 | 100011[9-7,rs1'/rd']11[4-2,rs2']01 | |
| c.or rd rs2 | or rd, rd, rs2 | 100011[9-7,rs1'/rd']10[4-2,rs2']01 | ||
| c.xor rd rs2 | xor rd, rd, rs2 | 100011[9-7,rs1'/rd']01[4-2,rs2']01 | ||
| c.sub rd rs2 | sub rd, rd, rs2 | 100011[9-7,rs1'/rd']00[4-2,rs2']01 | ||
| NOP指令 | 和32位对应的一样 | c.nop | add x0, x0, 0 | ‘0000000000000001 |
| 断点指令 | c.ebreak | ebreak | 1001000000000010 |




RV32C指令集的更多相关文章
- Risc-V指令集
https://riscv.org/specifications/ Risc-V文档包括:用户层指令集文档和特权架构文档,下面这两个文件的官网链接. User-Level ISA Specificat ...
- SSE指令集学习:Compiler Intrinsic
大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...
- ARM-汇编指令集(总结)
ARM汇编指令集 指令.伪指令 (汇编)指令: 是机器码的助记符,经过汇编器编译后,由CPU执行. (汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码. 有两种不同风格的ARM指 ...
- iOS------苹果设备处理器指令集(iPhone初代到iPhone5s)
(via 雅香小筑) Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色. Armv6.armv7.armv7 ...
- SSE指令集优化学习:双线性插值
对SSE的学习总算迈出了第一步,用2天时间对双线性插值的代码进行了优化,现将实现的过程梳理以下,算是对这段学习的一个总结. 1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数 ...
- RISC指令集的五个周期
RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...
- x86指令集同频性能提升
x86近5000条指令,迄今为止最复杂的指令集.这里不研究CISC & RISC,也不考虑process制程变化,主要是看最近几代IA架构对于同频率下性能的提升. x86指令集nasm文档 h ...
- CPU指令集
cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...
- 在UWP应用中加入Cortana语音指令集
本文介绍小娜语音指令集的使用场景,如何将UWP应用接入小娜的语音指令集,使用户直接通过小娜启动应用并使用应用中 一些轻量级的功能.文中以必应词典作为实例讲解必应词典UWP版本是如何接入小娜语音功能的. ...
随机推荐
- 高能天气——团队Scrum冲刺阶段-Day 5
高能天气--团队Scrum冲刺阶段-Day 5 今日完成任务 于欣月:基本实现计步器功能:现阶段实现了每天进行步数统计并显示,计划实现历史步数统计和设置锻炼计划功能,并实现可视化图形界面 余坤澎:实现 ...
- 001.SMB简介
一 简介 samba基于NetBIOS协议开发,能和windows通信,但只能在局域网通信. 二 Samba主要应用 文件共享 打印服务器 Samba登录时身份验证 进行windows主机名解析 三 ...
- 【GO基础】main redeclared in this block问题的排查与解决
之前的GO练习环境放在虚拟机内,方便了不少.不过在liteIDE打开的情况下,我迁移了虚拟机,刚好两台机子的VMware版本还不同,这就导致了无法恢复挂起状态,我放弃了挂起. 重新启动后,为了继续练习 ...
- 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
分为4个步骤: 1) 当发送一个 URL 请求时,不管这个 URL 是 Web 页面的 URL 还是 Web 页面上每个资源的 URL,浏览器都会开启一个线程来处理这个请求,同时在远程 DNS 服务 ...
- httpclient的并发连接问题
昨天的搜索系统又出状况了,几个库同时重建索引变得死慢.经过一个上午的复现分析,确定问题出现httpclient的使用上(我使用的是3.1这个被广泛使用的遗留版本).搜索系统在重建索引时,是并发多个线程 ...
- Bootstrap入门学习(三)——简单项目
此样例来自Bootstrap官网提供的入门级模版.仅仅有主要的东西:引入了预编译版的 CSS 和 JavaScript 文件,页面仅仅包括了一个 container 元素. 引入Bootstrap 创 ...
- flashsim配置2015最新版本
http://blog.csdn.net/Eidosper/article/details/46458469 http://www.doc88.com/p-7314277317013.html htt ...
- [转]Twemproxy 介绍与使用
Twemproxy是一种代理分片机制,由Twitter开源.Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回.该方案很好的解决了单个Re ...
- Java Web乱码分析及解决方式(一)——GET请求乱码
引言: 在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...
- asp.net core读取appsettings.json,如何读取多环境开发配置
摘要 在读取appsettings.json文件中配置的时候,觉得最简单的方式就是使用asp.net core注入的方式进行读取了. 步骤 首先根据配置项的结构定义一个配置类,比如叫AppSettin ...