blob: 52530c2f136cea914ba01a27abd9e685c9277e3a [file] [log] [blame]
Alex Bradbury24d9b132016-11-01 23:40:28 +00001//===-- RISCVInstrInfo.td - Target Description for RISCV ---*- tablegen -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file describes the RISC-V instructions in TableGen format.
11//
12//===----------------------------------------------------------------------===//
13
14include "RISCVInstrFormats.td"
15
16def simm12 : Operand<i32>;
17
18// As noted in RISCVRegisterInfo.td, the hope is that support for
19// variable-sized register classes will mean that instruction definitions do
20// not need to be duplicated for 32-bit and 64-bit register classes. For now
21// we use 'GPR', which is 32-bit. When codegen for both RV32 and RV64 is
22// added, we will need to duplicate instruction definitions unless a proposal
23// like <http://lists.llvm.org/pipermail/llvm-dev/2016-September/105027.html>
24// is adopted.
25
26class ALU_ri<bits<3> funct3, string OpcodeStr> :
27 FI<funct3, 0b0010011, (outs GPR:$rd), (ins GPR:$rs1, simm12:$imm12),
28 OpcodeStr#"\t$rd, $rs1, $imm12", []>
29{
30}
31
32def ADDI : ALU_ri<0b000, "addi">;
33def SLTI : ALU_ri<0b010, "slti">;
34def SLTIU : ALU_ri<0b011, "sltiu">;
35def XORI : ALU_ri<0b100, "xori">;
36def ORI : ALU_ri<0b110, "ori">;
37def ANDI : ALU_ri<0b111, "andi">;
38
39class ALU_rr<bits<7> funct7, bits<3> funct3, string OpcodeStr> :
40 FR<funct7, funct3, 0b0110011, (outs GPR:$rd), (ins GPR:$rs1, GPR:$rs2),
41 OpcodeStr#"\t$rd, $rs1, $rs2", []>
42{
43}
44
45def ADD : ALU_rr<0b0000000, 0b000, "add">;
46def SUB : ALU_rr<0b0100000, 0b000, "sub">;
47def SLL : ALU_rr<0b0000000, 0b001, "sll">;
48def SLT : ALU_rr<0b0000000, 0b010, "slt">;
49def SLTU : ALU_rr<0b0000000, 0b011, "sltu">;
50def XOR : ALU_rr<0b0000000, 0b100, "xor">;
51def SRL : ALU_rr<0b0000000, 0b101, "srl">;
52def SRA : ALU_rr<0b0100000, 0b101, "sra">;
53def OR : ALU_rr<0b0000000, 0b110, "or">;
54def AND : ALU_rr<0b0000000, 0b111, "and">;
55