RISC-V ISA Explorer · Single-Letter Extensions
C: Compressed
Ratified 2019-12 · version 2.0.0
Short 16-bit encodings of common instructions, typically cutting program size by 25 to 30 percent.
Typical use: 16-bit instruction encodings
Open C in the explorerDependencies
Requires
Instructions (34)
| Mnemonic | Name | Encoding | Match | Mask |
|---|---|---|---|---|
C.ADD | Add | ----------------1001----------10 | 0x9002 | 0xf003 |
C.ADDI | Add a sign-extended non-zero immediate | ----------------000-----------01 | 0x1 | 0xe003 |
C.ADDI16SP | Add a sign-extended non-zero immediate | ----------------011-00010-----01 | 0x6101 | 0xef83 |
C.ADDI4SPN | Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer | ----------------000-----------00 | 0x0 | 0xe003 |
C.ADDIW | Add a sign-extended non-zero immediate | ----------------001-----------01 | 0x2001 | 0xe003 |
C.ADDW | Add word | ----------------100111---01---01 | 0x9c21 | 0xfc63 |
C.AND | And | ----------------100011---11---01 | 0x8c61 | 0xfc63 |
C.ANDI | And immediate | ----------------100-10--------01 | 0x8801 | 0xec03 |
C.BEQZ | Branch if Equal Zero | ----------------110-----------01 | 0xc001 | 0xe003 |
C.BNEZ | Branch if NOT Equal Zero | ----------------111-----------01 | 0xe001 | 0xe003 |
C.EBREAK | Breakpoint exception | ----------------1001000000000010 | 0x9002 | 0xffff |
C.J | Jump | ----------------101-----------01 | 0xa001 | 0xe003 |
C.JAL | Jump and Link | ----------------001-----------01 | 0x2001 | 0xe003 |
C.JALR | Jump and Link Register | ----------------1001-----0000010 | 0x9002 | 0xf07f |
C.JR | Jump Register | ----------------1000-----0000010 | 0x8002 | 0xf07f |
C.LD | Load double | ----------------011-----------00 | 0x6000 | 0xe003 |
C.LDSP | Load doubleword from stack pointer | ----------------011-----------10 | 0x6002 | 0xe003 |
C.LI | Load the sign-extended 6-bit immediate | ----------------010-----------01 | 0x4001 | 0xe003 |
C.LUI | Load Upper Immediate | ----------------011-----------01 | 0x6001 | 0xe003 |
C.LW | Load word | ----------------010-----------00 | 0x4000 | 0xe003 |
C.LWSP | Load word from stack pointer | ----------------010-----------10 | 0x4002 | 0xe003 |
C.MV | Move Register | ----------------1000----------10 | 0x8002 | 0xf003 |
C.NOP | Non-operation | ----------------000-00000-----01 | 0x1 | 0xef83 |
C.OR | Or | ----------------100011---10---01 | 0x8c41 | 0xfc63 |
C.SD | Store double | ----------------111-----------00 | 0xe000 | 0xe003 |
C.SDSP | Store doubleword to stack | ----------------111-----------10 | 0xe002 | 0xe003 |
C.SLLI | Shift left logical immediate | ----------------000-----------10 | 0x2 | 0xe003 |
C.SRAI | Shift right arithmetical immediate | ----------------100-01--------01 | 0x8401 | 0xec03 |
C.SRLI | Shift right logical immediate | ----------------100-00--------01 | 0x8001 | 0xec03 |
C.SUB | Subtract | ----------------100011---00---01 | 0x8c01 | 0xfc63 |
C.SUBW | Subtract word | ----------------100111---00---01 | 0x9c01 | 0xfc63 |
C.SW | Store word | ----------------110-----------00 | 0xc000 | 0xe003 |
C.SWSP | Store word to stack | ----------------110-----------10 | 0xc002 | 0xe003 |
C.XOR | Exclusive Or | ----------------100011---01---01 | 0x8c21 | 0xfc63 |