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指令集的更多相关文章

  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. ElasticSearch 入门总结

    ElasticSearch 入门 本篇为 ElasticSearch 入门学习总结笔记,课程视频地址:ElasticSearch 入门 一.ElasticSearch 简介 1.1.什么是Elasti ...

  2. Android-认识Service

    Android-认识Service 学习自 郭霖的博客 https://developer.android.google.cn/reference/android/app/Service#WhatIs ...

  3. java并发基础(五)--- 线程池的使用

    第8章介绍的是线程池的使用,直接进入正题. 一.线程饥饿死锁和饱和策略 1.线程饥饿死锁 在线程池中,如果任务依赖其他任务,那么可能产生死锁.举个极端的例子,在单线程的Executor中,如果一个任务 ...

  4. spring cloud 学习(9) - turbine stream无法在eureka注册的解决办法

    turbine是啥就不多解释了,初次接触的可以移步spring cloud 学习(4) - hystrix 服务熔断处理 拉到最后看一下,turbine stream默认情况下启动成功后,eureka ...

  5. js获取鼠标点击事件的相对位置

    <html><head><title>位置</title><script language="javascript" type ...

  6. MongoDB 那些坑(转)

    MongoDB 是目前炙手可热的 NoSQL 文档型数据库,它提供的一些特性很棒:如自动 failover 机制,自动 sharding,无模式 schemaless,大部分情况下性能也很棒.但是薄荷 ...

  7. STM32 F4 GPIO Modes

    STM32 F4 GPIO Modes Goal: creating a visual summary of GPIO configuration modes. The summary at the ...

  8. LPCScrypt, DFUSec : USB FLASH download, programming, and security tool, LPC-Link 2 Configuration tool, Firmware Programming

    What does this tool do? The LPC18xx/43xx DFUSec utility is a Windows PC tool that provides support f ...

  9. Eclipse Mark Occurrences

    Mark Occurrences The Mark Occurrences feature enables you to see where an element is referenced by s ...

  10. FindWindow用法

    函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配.这个函数不查找子窗口.在查找时不区分大小写. 函数型:HWND FindWindow(LPCTSTR IpClassN ...