SlideShare a Scribd company logo
8 2 301 C
-
1
• ) ),
• ) ( ( , (
2
-
•
•
•
3
(
• - - ( ) ) -
• ( - - ) - - - - )
• ) - - - -
• - - ) - - - - ) -
4
1 2 3
• B
• F B IS VDMA
• E F B
• 13 4 : 8 : 6 : 2
• 13 , 4 : 8 : 6 : 2
• 13 4 : 8 : 6 : 2
• 13 4 : 8 : 6 : 2
• QR C B
• -
5
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
6https://github.com/lowRISC/riscv-llvm
3 M CL M
• 0 1 0 - . 1
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
7https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• - 3.206- 06 2 06 02 04 - 4 602 4
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
8https://github.com/lowRISC/riscv-llvm
6GA 4 E DAIAED
• //80 6GA
• 4 -.6 674 8 1 4 4 6.1 6 0
• L C EHL
• AD C 6 6GA
9
class Triple {
public:
enum ArchType {
...,
riscv32, // RISC-V (32-bit): riscv32
riscv64, // RISC-V (64-bit): riscv64
...,
};
...
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• -- -. . 3 0
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
10https://github.com/lowRISC/riscv-llvm
3 BEBIBFEH
• D =ABE
• 4 718, )
• 718, 8 =B B= C H
• 718, 7 ,
• 718, 36 1
• 718, 36 1 86
•
• 7 CF= IBFE IJ
• 3 7 36, 7 718, 7 ,
• 3 7 36, 7 718, 2 3
• 3 7 36, 7 718, , 33 (
• 11
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• . 0 -
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
12https://github.com/lowRISC/riscv-llvm
• ..
13
RISCVTargetMachine::RISCVTargetMachine(
const Target &T, // riscv32
const Triple &TT, // riscv32---elf
StringRef CPU, // generic-rv32
StringRef FS, // Feature String: +a,+m, …
const TargetOptions &Options, // FloatABIType = FloatABI::Default
Optional<Reloc::Model> RM, // Static, PIC_, etc.
Optional<CodeModel::Model> CM, // Small, Large, Medlow, Medany, Pic
CodeGenOpt::Level OL, // -O0 -O1 -O2 -Os -O3
bool JIT)
: LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options,
getEffectiveRelocModel(TT, RM),
getEffectiveCodeModel(CM), OL),
TLOF(make_unique<TargetLoweringObjectFileELF>()) {
initAsmInfo();
}
F 2 C - 1 MDI
• B) E) ) ) C 4 ( DF F
• ) A A C: C
• B) ) .1 B C A C ) 3F MB8DA 1 EF L
• E) ) ) 8 ED C F 8 A CB C
• ) ) A CB C D 8
• C ) D C C F : DF F
36 C 8
• 4 ( ) C IF A A CB C D ( 8 14
static std::string computeDataLayout(const Triple &TT) {
if (TT.isArch64Bit()) {
return "e-m:e-p:64:64-i64:64-i128:128-n64-S128";
} else {
assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported");
return "e-m:e-p:32:32-i64:64-n32-S128";
}
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• . - - 5 0
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
15https://github.com/lowRISC/riscv-llvm
+ .
•
• ) + ( .
16
------------- Classes -----------------
class ALU<bits<5> ALU:opcode = { ?, ?, ?, ?, ? }, string ALU:op = ?> {
bits<5> Opcode = { ALU:opcode{4}, ALU:opcode{3}, ALU:opcode{2}, ALU:opcode{1},
ALU:opcode{0} };
string Op = ALU:op;
string NAME = ?;
}
------------- Defs -----------------
def ADD { // ALU
bits<5> Opcode = { 1, 0, 1, 0, 1 };
string Op = "add";
string NAME = ?;
}
def SUB { // ALU
bits<5> Opcode = { 1, 0, 1, 1, 1 };
string Op = "sub";
string NAME = ?;
}
class ALU<bits<5> opcode, string op> {
bits<5> Opcode = opcode;
string Op = op;
}
def ADD : ALU<0b10101, "add">;
def SUB : ALU<0b10111, "sub">;
- / .
• B . . /
• . . . / -
• B
• . -
• B /
• . / -
17
RISCV.td
Assembler
Disassembler
Compiler
- -.
• -
18
let Namespace = "RISCV" in {
class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
let HWEncoding{4-0} = Enc;
let AltNames = alt;
}
def ABIRegAltName : RegAltNameIndex;
} // Namespace = "RISCV"
// Integer registers
let RegAltNameIndices = [ABIRegAltName] in {
// RegNum RegName ABIName
def X0 : RISCVReg<0, "x0", ["zero"]>, DwarfRegNum<[0]>;
def X1 : RISCVReg<1, "x1", ["ra"]>, DwarfRegNum<[1]>;
def X2 : RISCVReg<2, "x2", ["sp"]>, DwarfRegNum<[2]>;
...
def X31 : RISCVReg<31, "x31", ["t6"]>, DwarfRegNum<[31]>;
}
// GPR: {X0, X1, …, X31}
def GPR : RegisterClass< "RISCV", [i32],
32, (add (sequence "X%u", 0, 31))>
. -
19
// R-type (e.g. add rd, rs1, rs2) I-type, S-type, etc.
class RVInstR<bits<7> funct7, bits<3> funct3, RISCVOpcode opcode, dag outs,
dag ins, string opcodestr, string argstr>
: RVInst<outs, ins, opcodestr, argstr, []> {
bits<5> rs2; //
bits<5> rs1;
bits<5> rd;
let Inst{31-25} = funct7; //
let Inst{24-20} = rs2;
let Inst{19-15} = rs1;
let Inst{14-12} = funct3;
let Inst{11-7} = rd;
let Opcode = opcode.Value;
}
-
• . .
20
include "RISCVInstrFormats.td"
// Instruction Class Templates
class ALU_rr<bits<7> funct7, bits<3> funct3, string opcodestr>
: RVInstR<funct7, funct3, OPC_OP, (outs GPR:$rd),
(ins GPR:$rs1, GPR:$rs2),
opcodestr, "$rd, $rs1, $rs2">;
def ADD : ALU_rr<0b0000000, 0b000, "add">; // add rd, rs1, rs2
.-
• $ llvm-tblgen ./RISCV.td -I ../../../include/
21
def ADD { // Instruction RVInst RVInstR ALU_rr
field bits<32> Inst = { 0, 0, 0, 0, 0, 0, 0, // funct7
rs2{4}, rs2{3}, rs2{2}, rs2{1}, rs2{0}, // rs2
rs1{4}, rs1{3}, rs1{2}, rs1{1}, rs1{0}, // rs1
0, 0, 0, // funct3
rd{4}, rd{3}, rd{2}, rd{1}, rd{0}, // rd
0, 1, 1, 0, 0, 1, 1 }; // opcode
string Namespace = "RISCV";
dag OutOperandList = (outs GPR:$rd);
dag InOperandList = (ins GPR:$rs1, GPR:$rs2);
string AsmString = "add $rd, $rs1, $rs2"; // AsmParser, InstrPrinter
list<dag> Pattern = []; // pattern
...
int Size = 4; // 4-byte
bit isReturn = 0; // return
bit isBranch = 0; // branch
bits<7> Opcode = { 0, 1, 1, 0, 0, 1, 1 };
bits<5> rs2 = { ?, ?, ?, ?, ? };
bits<5> rs1 = { ?, ?, ?, ?, ? };
bits<5> rd = { ?, ?, ?, ?, ? };
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• .. 6 0 6- -
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
22https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• .. 7 - 7 7 8-0
• .. 78 8 . 7 - 77 8 8-0
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
23https://github.com/lowRISC/riscv-llvm
& . & .
• &
• .
• add x1, x2, x3 -> MCInst
• . & .
• .
• MCInst -> add x1, x2, x3
•
•
• [0xb3,0x00,0x31,0x00] -> MCInst
•
• MCInst -> [0xb3,0x00,0x31,0x00]
24
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 332 -2 00 2 3 .
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
25https://github.com/lowRISC/riscv-llvm
- 3
• 3 -3
• 3 3 - 3
• /
• 3 3 - 3
• / /
• - 3
• - 3 3
•
• 3 3 -2
• /
• - 3
•
•
•
• 26
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• - 1 0 .
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
27https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 00 1 . 1 . 1 -
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
28https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 221 1 2 - 00 - .- 2 2 .
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
29https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 3 -.0. . 1
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
30https://github.com/lowRISC/riscv-llvm
(( ) ) )- )
• (( ) ) )- ) a
e C a
• :
• :
•
((
•
((
31
// Callee-save
callee:
sw s0, 12(sp)
...
mv s0, a1 # s0
...
lw s0, 12(sp)
// Caller-save
caller:
sw ra, 12(sp)
...
call callee
...
lw ra, 12(sp)
.
• . .
32
// x10(a0) x11(a1)
int add(int a, int b) {
return a + b; // x10(a0)
}
void caller() {
// x10(a0) x11(a1)
int result = add(3, 5);
} // x10(a0)
.
33
• .
// X10 X11
def RetCC_RISCV32 : CallingConv<[CCIfType<[i32], CCAssignToReg<[X10, X11]>>]>;
// RISCV 32-bit C Calling convention.
def CC_RISCV32 : CallingConv<[
// Promote i1/i8/i16 args to i32
CCIfType<[ i1, i8, i16 ], CCPromoteToType<i32>>,
// X10~X17
CCIfType<[i32], CCAssignToReg<[ X10, X11, X12, X13, X14, X15, X16, X17]>>,
// size 4 bytes, alignment 4 bytes
CCAssignToStack<4, 4>
]>;
// Callee-save
def CSR : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;
34
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
))- ( :
• :
• ))- ( :
• : :
• : :
35
a
add
b
c
add
36
int add(int a, int b) {
return a + b;
}
define i32 @add(i32 signext %a,
i32 signext %b) #0 {
entry:
%add = add nsw i32 %a, %b
ret i32 %add
}
t0: ch = EntryToken
t4: i32,ch = CopyFromReg t0, Register:i32 %1
t2: i32,ch = CopyFromReg t0, Register:i32 %0
t5: i32 = add nsw t4, t2
t7: ch,glue = CopyToReg t0, Register:i32 %x10_32, t5
t8: ch = RISCVISD::RET_FLAG t7, Register:i32 %x10_32, t7:1
37
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
) 3 - 2 -3
• ) 3 - SI T
) 3 - SI
• ) 3 - S
• ) 3 -
• 4 36 2 (- - 2
) 3 - SI
• void setOperationAction(
unsigned Op, // S
MVT VT, //
LegalizeAction Action) // TL Target
// I S
38
3
• 3
• O T
• L T
• 3 LA T PC L
• L
• 3
39
setOperationAction(ISD::ADD, MVT::i32, Legal)
setOperationAction(ISD::ADD, MVT::i8, Promote)
AddPromotedToType(ISD::ADD, MVT::i8, MVT::i32)
// P T L shift T PC L E
setOperationAction(ISD::MUL, MVT::i32, Expand);
setOperationAction(ISD::GlobalAddress, i32, Custom);
.
• .
40
RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
const RISCVSubtarget &STI)
: TargetLowering(TM), Subtarget(STI) {
// Set up the register classes.
addRegisterClass(MVT::i32, &RISCV::GPRRegClass);
// 32-bit promote 32-bit
// 32-bit 32-bit
computeRegisterProperties(STI.getRegisterInfo());
setStackPointerRegisterToSaveRestore(RISCV::X2);
// TODO: add all necessary setOperationAction calls.
setOperationAction(ISD::MUL, XLenVT, Expand);
...
setOperationAction(ISD::GlobalAddress, i32, Custom);
...
}
•
•
•
41
SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
bool IsVarArg,
const SmallVectorImpl<ISD::InputArg> &Ins,
const SDLoc &DL, SelectionDAG &DAG,
SmallVectorImpl<SDValue> &InVals) const override;
SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
const SmallVectorImpl<ISD::OutputArg> &Outs,
const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL,
SelectionDAG &DAG) const override;
SDValue LowerCall(TargetLowering::CallLoweringInfo &CLI,
SmallVectorImpl<SDValue> &InVals) const override;
42
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
• -
• -
43
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
- - - -
44
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, simm12:$imm12), (ADDI GPR:$rs1, simm12:$imm12)>;
. . - .
• -
45
void RISCVDAGToDAGISel::Select(SDNode *Node) {
// If we have a custom node, we have already selected
if (Node->isMachineOpcode()) {
DEBUG(dbgs() << "== "; Node->dump(CurDAG); dbgs() << "n");
Node->setNodeId(-1);
return;
}
// C
if (Node->getOpcode() == ISD::AND) {
...
return;
}
// A .td pattern
SelectCode(Node);
}
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• - 44 1 0 - 4 .
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
46https://github.com/lowRISC/riscv-llvm
• 2 3
- -
47
// 3 12-bit sign-extension
def LO12Sext : SDNodeXForm<imm, [{
return CurDAG->getTargetConstant(SignExtend64<12>(N->getZExtValue()),
SDLoc(N), N->getValueType(0));
}]>;
// 32-bit 20-bit 11 1 1
def HI20 : SDNodeXForm<imm, [{
return CurDAG->getTargetConstant(((N->getZExtValue()+0x800) >> 12) & 0xfffff,
SDLoc(N), N->getValueType(0));
}]>;
def simm32 : ImmLeaf<XLenVT, [{return isInt<32>(Imm);}]>;
// simm12 -> addi rd, x0, simm12
def : Pat<(simm12:$imm), (ADDI X0, simm12:$imm)>;
// simm32 -> lui rd, uimm20 + addi rd, rd, simm12
def : Pat<(simm32:$imm), (ADDI (LUI (HI20 imm:$imm)), (LO12Sext imm:$imm))>;
# 0xabcd5566 a0, simm32 = (uimm20 << 12) + simm12
lui a0, 0xabcd5 # a0 = 0xabcd5
addi a0, a0, 0x566 # a0 = 0xabcd5566
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• - 1 5 0 0 15 .
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
48https://github.com/lowRISC/riscv-llvm
49
def : Pat<(load (add GPR:$rs1, simm12:$imm12)), (LW GPR:$rs1, simm12:$imm12)>;
LW rd, rs, simm12
50
/// Loads
multiclass LdPat<PatFrag LoadOp, RVInst Inst> {
def : Pat<(LoadOp GPR:$rs1), (Inst GPR:$rs1, 0)>;
def : Pat<(LoadOp (add GPR:$rs1, simm12:$imm12)),
(Inst GPR:$rs1, simm12:$imm12)>;
}
defm : LdPat<sextloadi8, LB>;
defm : LdPat<extloadi8, LB>;
defm : LdPat<sextloadi16, LH>;
defm : LdPat<extloadi16, LH>;
defm : LdPat<load, LW>;
defm : LdPat<zextloadi8, LBU>;
defm : LdPat<zextloadi16, LHU>;
/// Stores
multiclass StPat<PatFrag StoreOp, RVInst Inst> {
def : Pat<(StoreOp GPR:$rs2, GPR:$rs1), (Inst GPR:$rs2, GPR:$rs1, 0)>;
def : Pat<(StoreOp GPR:$rs2, (add GPR:$rs1, simm12:$imm12)),
(Inst GPR:$rs2, GPR:$rs1, simm12:$imm12)>;
}
defm : StPat<truncstorei8, SB>;
defm : StPat<truncstorei16, SH>;
defm : StPat<store, SW>;
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• . 6 - 6 6 6 0 .1
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
51https://github.com/lowRISC/riscv-llvm
:
52
@G = global i32 0
define i32 @lw_global(i32 %a) {
%1 = load volatile i32, i32* @G
ret i32 %1
}
lui a0, %hi(G)
addi a0, a0, %lo(G)
lw a0, 0(a0)
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• . - 070 1 7
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
53https://github.com/lowRISC/riscv-llvm
54
define void @condbr(i32 %a, i32 %b, i32 *%c) {
%tst = icmp ne i32 %a, %b
br i1 %tst, label %end, label %equal
equal:
store i32 1, i32* %c
br label %end
end:
ret void
}
def : Pat<(brcond (i32 (setne GPR:$rs1, GPR:$rs2)), bb:$imm12)
(BEQ GPR:$rs1, GPR:$rs2, simm13_lsb0:$imm12)>;
BEQ rs1, rs2, simm13_lsb0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 00 1 1 . . -- 0
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
55https://github.com/lowRISC/riscv-llvm
• RISCVTargetLowering::LowerCall
• 0
• 7
• 0
56
57
let isCall = 1, Defs=[X1] in
def PseudoCALL : Pseudo<(outs), (ins GPR:$rs1), [(Call GPR:$rs1)]>,
PseudoInstExpansion<(JALR X1, GPR:$rs1, 0)>;
lui a0, %hi(external_function)
addi a3, a0, %lo(external_function)
// a0~a7
addi a0, zero, 1
addi a1, zero, 2
addi a2, zero, 3
// /
jalr ra, a3, 0
declare i32 @external_function(i32, i32, i32)
define i32 @test_call_external() nounwind {
%1 = call i32 @external_function(i32 1, i32 2, i32 3)
ret i32 %1
}
JALR rd, rs1, simm12
• target address: rs1 + simm12
• rd = pc + 4
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• . . 9 . 0 9-1
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
58https://github.com/lowRISC/riscv-llvm
59
:
define i32 @bare_select(i1 %a, i32 %b, i32 %c) {
%1 = select i1 %a, i32 %b, i32 %c
ret i32 %1
}
bare_select:
# %bb.0:
andi a0, a0, 1
addi a3, zero, 0
bne a0, a3, .LBB0_2
# %bb.1:
addi a1, a2, 0
.LBB0_2:
addi a0, a1, 0
jalr zero, ra, 0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 02 02 2- 0 - -0 .
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
60https://github.com/lowRISC/riscv-llvm
29 I
• 3 L I 9D 3 4 7 9E I 9
• 3 4 7 3 F EAI AI L 9E AI L AE A C 9 IAE 9
• 3 4 7 3 4 7 -0. AE I 9
• 3 4 7 I 9 E 9
• 3 4 7 9IA 3 4 7 EI .F D9 I EI E F 3 AI 9
• 3 4 7 9 FE I 3 4 7 1 59 I 9
• 3 4 7 9IA 3 4 7 ID29 I 9
• 3 4 7 3 4 7 EI 2 AE 9E 9IA 1 9II D C 9
• 3 4 7 I F F 9CC 37 AEI AFEI 9
• 3 4 7 I F F AI9II D C 9
• 3 4 7 FDDFE A I 9E CF 9 AFEI 9
• 3 4 7 I F F 9 8CC 8 I 8 I 9
• 3 4 7 EA A9C F E I F F 06 F 9 AFEI 9
• 3 4 7 F E I F F D9 A9CAPAE FEI 9E I 9
• 3 4 7 F E I F F D DF F 9 AFEI 9
• 3 4 7 F E I F F D DF F 9 AFEI FE CF 9 9
• 3 4 7 F E F FE A AFE9C 9E I 9
• 3 4 7 4 F F E AFE 9CCI 9
• 3 4 7 D C D E CFM AE F 4 4-0- 5 9
• 3 4 7 4 F 9E I I F 9 L9 A F 9 A AFE9C 9
• 1 0 . - - .2
• 3 4 7 4 F CFM AE . 9D E 9
• 3 4 7 D C D E FCF 9E ACF AEI AFE 9
• 3 4 7 CCFM CFM AE F E9DA 8I 9 9CCF I 9 I9L 9
• 3 4 7 I FD 83 4 7 9CCAE FEL E AFE 9E AD 9
• 3 4 7 4 F F L9 9 I 9
• 3 4 7 4 F I 9 9D I 9E F I I F A I 9
• 3 4 7 9IA I F F AECAE 9ID FEI 9AE I 9
• 3 4 7 I F F CCLD 9D 9 II E9 9
• 3 4 7 D C D E 9E 9E9C IAI 9
61https://github.com/lowRISC/riscv-llvm
addi a1, zero, 0
sub a0, a1, a0
sub a0, zero, a0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 2 2 . 0 -
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
62https://github.com/lowRISC/riscv-llvm
63
// Replace FrameIndex with Offset
void RISCVRegisterInfo::eliminateFrameIndex
// Calculate Offset by FrameIndex
int RISCVFrameLowering::getFrameIndexReference
OffsetHigh Address
Low Address
fp/s0
sp
ra
s0/fp
s1
s2
s3
.
.
.
FrameIndex
0
1
2
3
4
sp + 12
sp + 16
sp + 20
sp + 24
sp + 28
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 03 0 3 2 2 3. 2 . .2 3 -
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
64https://github.com/lowRISC/riscv-llvm
0 / 0 / ) -/
• /
• I
• ( - ( //
•
• P ( // -
E (
• I
• -/
• ( ( //
- P E
•
•
•
65
func:
// Prologue
addi sp, sp, -32
sw ra, 28(sp)
sw s0/fp, 24(sp)
sw s1, 20(sp)
sw s2, 16(sp)
sw s3, 12(sp)
addi s0/fp, sp, 32
...
// callee-save
// register
...
// Epilog
lw s3, 12(sp)
lw s2, 16(sp)
lw s1, 20(sp)
lw s0/fp, 24(sp)
lw ra, 28(sp)
addi sp, sp, 32
ret
. .
• .
66
void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
MachineBasicBlock &MBB) const {
...
uint64_t StackSize = MFI.getStackSize();
...
// addi sp, sp, -StackSize
adjustReg(MBB, MBBI, DL, SPReg, SPReg, -StackSize, MachineInstr::FrameSetup);
...
// addi fp, sp, StackSize
adjustReg(MBB, MBBI, DL, FPReg, SPReg, StackSize, MachineInstr::FrameSetup);
}
void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
MachineBasicBlock &MBB) const {
...
uint64_t StackSize = MFI.getStackSize();
...
// Deallocate stack: addi sp, sp, StackSize
adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackSize, MachineInstr::FrameDestroy);
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• - . 4 2 2 - 0
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
67https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 2 0 . - 0 025 5
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
68https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 2..- - 0 .
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
69https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 7 . 2-7 3 ..7- 7 0 7
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
70https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 0 8 . 0 0 - 2 8 0 8 8
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
71https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 2 -2 0 - 0 .
• 4 5 8 F M C FRLDL M C
72https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• .0- . 3 - 0 3
73https://github.com/lowRISC/riscv-llvm
: .
• :
• : . :
• : / .
• : / : -: :
•
74
Ad

More Related Content

What's hot (20)

BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
Brendan Gregg
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介
Akira Maruoka
 
New Ways to Find Latency in Linux Using Tracing
New Ways to Find Latency in Linux Using TracingNew Ways to Find Latency in Linux Using Tracing
New Ways to Find Latency in Linux Using Tracing
ScyllaDB
 
eBPF Perf Tools 2019
eBPF Perf Tools 2019eBPF Perf Tools 2019
eBPF Perf Tools 2019
Brendan Gregg
 
COSCUP2023 RSA256 Verilator.pdf
COSCUP2023 RSA256 Verilator.pdfCOSCUP2023 RSA256 Verilator.pdf
COSCUP2023 RSA256 Verilator.pdf
Yodalee
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
Angel Boy
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtKernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Anne Nicolas
 
Introduction to Modern U-Boot
Introduction to Modern U-BootIntroduction to Modern U-Boot
Introduction to Modern U-Boot
GlobalLogic Ukraine
 
DWARF Data Representation
DWARF Data RepresentationDWARF Data Representation
DWARF Data Representation
Wang Hsiangkai
 
Linux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewLinux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver Overview
RajKumar Rampelli
 
Staring into the eBPF Abyss
Staring into the eBPF AbyssStaring into the eBPF Abyss
Staring into the eBPF Abyss
Sasha Goldshtein
 
Tips of Malloc & Free
Tips of Malloc & FreeTips of Malloc & Free
Tips of Malloc & Free
Tetsuyuki Kobayashi
 
Sigreturn Oriented Programming
Sigreturn Oriented ProgrammingSigreturn Oriented Programming
Sigreturn Oriented Programming
Angel Boy
 
Instruction Combine in LLVM
Instruction Combine in LLVMInstruction Combine in LLVM
Instruction Combine in LLVM
Wang Hsiangkai
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
Emertxe Information Technologies Pvt Ltd
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
Alex Maestretti
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
Adrian Huang
 
Introduction to open_sbi
Introduction to open_sbiIntroduction to open_sbi
Introduction to open_sbi
Nylon
 
LAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
LAS16-501: Introduction to LLVM - Projects, Components, Integration, InternalsLAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
LAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
Linaro
 
malloc & vmalloc in Linux
malloc & vmalloc in Linuxmalloc & vmalloc in Linux
malloc & vmalloc in Linux
Adrian Huang
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
Brendan Gregg
 
LLVM Backend の紹介
LLVM Backend の紹介LLVM Backend の紹介
LLVM Backend の紹介
Akira Maruoka
 
New Ways to Find Latency in Linux Using Tracing
New Ways to Find Latency in Linux Using TracingNew Ways to Find Latency in Linux Using Tracing
New Ways to Find Latency in Linux Using Tracing
ScyllaDB
 
eBPF Perf Tools 2019
eBPF Perf Tools 2019eBPF Perf Tools 2019
eBPF Perf Tools 2019
Brendan Gregg
 
COSCUP2023 RSA256 Verilator.pdf
COSCUP2023 RSA256 Verilator.pdfCOSCUP2023 RSA256 Verilator.pdf
COSCUP2023 RSA256 Verilator.pdf
Yodalee
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
Angel Boy
 
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven RostedtKernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Kernel Recipes 2017 - Understanding the Linux kernel via ftrace - Steven Rostedt
Anne Nicolas
 
DWARF Data Representation
DWARF Data RepresentationDWARF Data Representation
DWARF Data Representation
Wang Hsiangkai
 
Linux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver OverviewLinux Kernel MMC Storage driver Overview
Linux Kernel MMC Storage driver Overview
RajKumar Rampelli
 
Staring into the eBPF Abyss
Staring into the eBPF AbyssStaring into the eBPF Abyss
Staring into the eBPF Abyss
Sasha Goldshtein
 
Sigreturn Oriented Programming
Sigreturn Oriented ProgrammingSigreturn Oriented Programming
Sigreturn Oriented Programming
Angel Boy
 
Instruction Combine in LLVM
Instruction Combine in LLVMInstruction Combine in LLVM
Instruction Combine in LLVM
Wang Hsiangkai
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
Alex Maestretti
 
Memory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux KernelMemory Mapping Implementation (mmap) in Linux Kernel
Memory Mapping Implementation (mmap) in Linux Kernel
Adrian Huang
 
Introduction to open_sbi
Introduction to open_sbiIntroduction to open_sbi
Introduction to open_sbi
Nylon
 
LAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
LAS16-501: Introduction to LLVM - Projects, Components, Integration, InternalsLAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
LAS16-501: Introduction to LLVM - Projects, Components, Integration, Internals
Linaro
 
malloc & vmalloc in Linux
malloc & vmalloc in Linuxmalloc & vmalloc in Linux
malloc & vmalloc in Linux
Adrian Huang
 

Similar to llvm basic porting for risc v (11)

Hackarade #05 IoT tutorial
Hackarade #05 IoT tutorialHackarade #05 IoT tutorial
Hackarade #05 IoT tutorial
Ayaka Sato
 
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
VirtualTech Japan Inc.
 
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
交通事故削減支援サービスDRIVE CHARTにおけるAI技術交通事故削減支援サービスDRIVE CHARTにおけるAI技術
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
Hirohito Okuda
 
CVPR 2020 報告
CVPR 2020 報告CVPR 2020 報告
CVPR 2020 報告
cvpaper. challenge
 
Makinarocks demoday (2019.05.30)
Makinarocks demoday (2019.05.30)Makinarocks demoday (2019.05.30)
Makinarocks demoday (2019.05.30)
NAVER D2 STARTUP FACTORY
 
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
Deep Learning JP
 
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたことArgoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Shinsaku Kono
 
Facilities for Agile
Facilities for AgileFacilities for Agile
Facilities for Agile
Pierre E. NEIS
 
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozucommunity
 
Power transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat BeltingPower transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat Belting
Anil Gupta
 
Google Polymer in Action
Google Polymer in ActionGoogle Polymer in Action
Google Polymer in Action
Jeongkyu Shin
 
Hackarade #05 IoT tutorial
Hackarade #05 IoT tutorialHackarade #05 IoT tutorial
Hackarade #05 IoT tutorial
Ayaka Sato
 
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
VirtualTech Japan Inc.
 
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
交通事故削減支援サービスDRIVE CHARTにおけるAI技術交通事故削減支援サービスDRIVE CHARTにおけるAI技術
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
Hirohito Okuda
 
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
Deep Learning JP
 
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたことArgoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Shinsaku Kono
 
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozu Days 2017 Osaka「サイボウズ Office 活用事例 2017 ―挑戦し続ける中小企業―」
Cybozucommunity
 
Power transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat BeltingPower transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat Belting
Anil Gupta
 
Google Polymer in Action
Google Polymer in ActionGoogle Polymer in Action
Google Polymer in Action
Jeongkyu Shin
 
Ad

Recently uploaded (20)

How can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptxHow can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptx
laravinson24
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
DVDFab Crack FREE Download Latest Version 2025
DVDFab Crack FREE Download Latest Version 2025DVDFab Crack FREE Download Latest Version 2025
DVDFab Crack FREE Download Latest Version 2025
younisnoman75
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
saimabibi60507
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Implementing promises with typescripts, step by step
Implementing promises with typescripts, step by stepImplementing promises with typescripts, step by step
Implementing promises with typescripts, step by step
Ran Wahle
 
Apple Logic Pro X Crack FRESH Version 2025
Apple Logic Pro X Crack FRESH Version 2025Apple Logic Pro X Crack FRESH Version 2025
Apple Logic Pro X Crack FRESH Version 2025
fs4635986
 
Societal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainabilitySocietal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainability
Jordi Cabot
 
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Microsoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptxMicrosoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptx
Mekonnen
 
The Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdfThe Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdf
drewplanas10
 
Tools of the Trade: Linux and SQL - Google Certificate
Tools of the Trade: Linux and SQL - Google CertificateTools of the Trade: Linux and SQL - Google Certificate
Tools of the Trade: Linux and SQL - Google Certificate
VICTOR MAESTRE RAMIREZ
 
Innovative Approaches to Software Dev no good at all
Innovative Approaches to Software Dev no good at allInnovative Approaches to Software Dev no good at all
Innovative Approaches to Software Dev no good at all
ayeshakanwal75
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
How can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptxHow can one start with crypto wallet development.pptx
How can one start with crypto wallet development.pptx
laravinson24
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)Who Watches the Watchmen (SciFiDevCon 2025)
Who Watches the Watchmen (SciFiDevCon 2025)
Allon Mureinik
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AIScaling GraphRAG:  Efficient Knowledge Retrieval for Enterprise AI
Scaling GraphRAG: Efficient Knowledge Retrieval for Enterprise AI
danshalev
 
DVDFab Crack FREE Download Latest Version 2025
DVDFab Crack FREE Download Latest Version 2025DVDFab Crack FREE Download Latest Version 2025
DVDFab Crack FREE Download Latest Version 2025
younisnoman75
 
Not So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java WebinarNot So Common Memory Leaks in Java Webinar
Not So Common Memory Leaks in Java Webinar
Tier1 app
 
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
PRTG Network Monitor Crack Latest Version & Serial Key 2025 [100% Working]
saimabibi60507
 
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025Why Orangescrum Is a Game Changer for Construction Companies in 2025
Why Orangescrum Is a Game Changer for Construction Companies in 2025
Orangescrum
 
Landscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature ReviewLandscape of Requirements Engineering for/by AI through Literature Review
Landscape of Requirements Engineering for/by AI through Literature Review
Hironori Washizaki
 
Implementing promises with typescripts, step by step
Implementing promises with typescripts, step by stepImplementing promises with typescripts, step by step
Implementing promises with typescripts, step by step
Ran Wahle
 
Apple Logic Pro X Crack FRESH Version 2025
Apple Logic Pro X Crack FRESH Version 2025Apple Logic Pro X Crack FRESH Version 2025
Apple Logic Pro X Crack FRESH Version 2025
fs4635986
 
Societal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainabilitySocietal challenges of AI: biases, multilinguism and sustainability
Societal challenges of AI: biases, multilinguism and sustainability
Jordi Cabot
 
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
What Do Contribution Guidelines Say About Software Testing? (MSR 2025)
Andre Hora
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Microsoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptxMicrosoft Excel Core Points Training.pptx
Microsoft Excel Core Points Training.pptx
Mekonnen
 
The Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdfThe Significance of Hardware in Information Systems.pdf
The Significance of Hardware in Information Systems.pdf
drewplanas10
 
Tools of the Trade: Linux and SQL - Google Certificate
Tools of the Trade: Linux and SQL - Google CertificateTools of the Trade: Linux and SQL - Google Certificate
Tools of the Trade: Linux and SQL - Google Certificate
VICTOR MAESTRE RAMIREZ
 
Innovative Approaches to Software Dev no good at all
Innovative Approaches to Software Dev no good at allInnovative Approaches to Software Dev no good at all
Innovative Approaches to Software Dev no good at all
ayeshakanwal75
 
Automation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath CertificateAutomation Techniques in RPA - UiPath Certificate
Automation Techniques in RPA - UiPath Certificate
VICTOR MAESTRE RAMIREZ
 
Ad

llvm basic porting for risc v

  • 1. 8 2 301 C - 1
  • 2. • ) ), • ) ( ( , ( 2
  • 4. ( • - - ( ) ) - • ( - - ) - - - - ) • ) - - - - • - - ) - - - - ) - 4
  • 5. 1 2 3 • B • F B IS VDMA • E F B • 13 4 : 8 : 6 : 2 • 13 , 4 : 8 : 6 : 2 • 13 4 : 8 : 6 : 2 • 13 4 : 8 : 6 : 2 • QR C B • - 5
  • 6. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 6https://github.com/lowRISC/riscv-llvm
  • 7. 3 M CL M • 0 1 0 - . 1 • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 7https://github.com/lowRISC/riscv-llvm
  • 8. 3 M CL M • 4 O M LM 4 5 8 C L M C • - 3.206- 06 2 06 02 04 - 4 602 4 • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 8https://github.com/lowRISC/riscv-llvm
  • 9. 6GA 4 E DAIAED • //80 6GA • 4 -.6 674 8 1 4 4 6.1 6 0 • L C EHL • AD C 6 6GA 9 class Triple { public: enum ArchType { ..., riscv32, // RISC-V (32-bit): riscv32 riscv64, // RISC-V (64-bit): riscv64 ..., }; ...
  • 10. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • -- -. . 3 0 • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 10https://github.com/lowRISC/riscv-llvm
  • 11. 3 BEBIBFEH • D =ABE • 4 718, ) • 718, 8 =B B= C H • 718, 7 , • 718, 36 1 • 718, 36 1 86 • • 7 CF= IBFE IJ • 3 7 36, 7 718, 7 , • 3 7 36, 7 718, 2 3 • 3 7 36, 7 718, , 33 ( • 11
  • 12. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • . 0 - • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 12https://github.com/lowRISC/riscv-llvm
  • 13. • .. 13 RISCVTargetMachine::RISCVTargetMachine( const Target &T, // riscv32 const Triple &TT, // riscv32---elf StringRef CPU, // generic-rv32 StringRef FS, // Feature String: +a,+m, … const TargetOptions &Options, // FloatABIType = FloatABI::Default Optional<Reloc::Model> RM, // Static, PIC_, etc. Optional<CodeModel::Model> CM, // Small, Large, Medlow, Medany, Pic CodeGenOpt::Level OL, // -O0 -O1 -O2 -Os -O3 bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), getEffectiveCodeModel(CM), OL), TLOF(make_unique<TargetLoweringObjectFileELF>()) { initAsmInfo(); }
  • 14. F 2 C - 1 MDI • B) E) ) ) C 4 ( DF F • ) A A C: C • B) ) .1 B C A C ) 3F MB8DA 1 EF L • E) ) ) 8 ED C F 8 A CB C • ) ) A CB C D 8 • C ) D C C F : DF F 36 C 8 • 4 ( ) C IF A A CB C D ( 8 14 static std::string computeDataLayout(const Triple &TT) { if (TT.isArch64Bit()) { return "e-m:e-p:64:64-i64:64-i128:128-n64-S128"; } else { assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported"); return "e-m:e-p:32:32-i64:64-n32-S128"; } }
  • 15. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • . - - 5 0 • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 15https://github.com/lowRISC/riscv-llvm
  • 16. + . • • ) + ( . 16 ------------- Classes ----------------- class ALU<bits<5> ALU:opcode = { ?, ?, ?, ?, ? }, string ALU:op = ?> { bits<5> Opcode = { ALU:opcode{4}, ALU:opcode{3}, ALU:opcode{2}, ALU:opcode{1}, ALU:opcode{0} }; string Op = ALU:op; string NAME = ?; } ------------- Defs ----------------- def ADD { // ALU bits<5> Opcode = { 1, 0, 1, 0, 1 }; string Op = "add"; string NAME = ?; } def SUB { // ALU bits<5> Opcode = { 1, 0, 1, 1, 1 }; string Op = "sub"; string NAME = ?; } class ALU<bits<5> opcode, string op> { bits<5> Opcode = opcode; string Op = op; } def ADD : ALU<0b10101, "add">; def SUB : ALU<0b10111, "sub">;
  • 17. - / . • B . . / • . . . / - • B • . - • B / • . / - 17 RISCV.td Assembler Disassembler Compiler
  • 18. - -. • - 18 let Namespace = "RISCV" in { class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> { let HWEncoding{4-0} = Enc; let AltNames = alt; } def ABIRegAltName : RegAltNameIndex; } // Namespace = "RISCV" // Integer registers let RegAltNameIndices = [ABIRegAltName] in { // RegNum RegName ABIName def X0 : RISCVReg<0, "x0", ["zero"]>, DwarfRegNum<[0]>; def X1 : RISCVReg<1, "x1", ["ra"]>, DwarfRegNum<[1]>; def X2 : RISCVReg<2, "x2", ["sp"]>, DwarfRegNum<[2]>; ... def X31 : RISCVReg<31, "x31", ["t6"]>, DwarfRegNum<[31]>; } // GPR: {X0, X1, …, X31} def GPR : RegisterClass< "RISCV", [i32], 32, (add (sequence "X%u", 0, 31))>
  • 19. . - 19 // R-type (e.g. add rd, rs1, rs2) I-type, S-type, etc. class RVInstR<bits<7> funct7, bits<3> funct3, RISCVOpcode opcode, dag outs, dag ins, string opcodestr, string argstr> : RVInst<outs, ins, opcodestr, argstr, []> { bits<5> rs2; // bits<5> rs1; bits<5> rd; let Inst{31-25} = funct7; // let Inst{24-20} = rs2; let Inst{19-15} = rs1; let Inst{14-12} = funct3; let Inst{11-7} = rd; let Opcode = opcode.Value; }
  • 20. - • . . 20 include "RISCVInstrFormats.td" // Instruction Class Templates class ALU_rr<bits<7> funct7, bits<3> funct3, string opcodestr> : RVInstR<funct7, funct3, OPC_OP, (outs GPR:$rd), (ins GPR:$rs1, GPR:$rs2), opcodestr, "$rd, $rs1, $rs2">; def ADD : ALU_rr<0b0000000, 0b000, "add">; // add rd, rs1, rs2
  • 21. .- • $ llvm-tblgen ./RISCV.td -I ../../../include/ 21 def ADD { // Instruction RVInst RVInstR ALU_rr field bits<32> Inst = { 0, 0, 0, 0, 0, 0, 0, // funct7 rs2{4}, rs2{3}, rs2{2}, rs2{1}, rs2{0}, // rs2 rs1{4}, rs1{3}, rs1{2}, rs1{1}, rs1{0}, // rs1 0, 0, 0, // funct3 rd{4}, rd{3}, rd{2}, rd{1}, rd{0}, // rd 0, 1, 1, 0, 0, 1, 1 }; // opcode string Namespace = "RISCV"; dag OutOperandList = (outs GPR:$rd); dag InOperandList = (ins GPR:$rs1, GPR:$rs2); string AsmString = "add $rd, $rs1, $rs2"; // AsmParser, InstrPrinter list<dag> Pattern = []; // pattern ... int Size = 4; // 4-byte bit isReturn = 0; // return bit isBranch = 0; // branch bits<7> Opcode = { 0, 1, 1, 0, 0, 1, 1 }; bits<5> rs2 = { ?, ?, ?, ?, ? }; bits<5> rs1 = { ?, ?, ?, ?, ? }; bits<5> rd = { ?, ?, ?, ?, ? }; }
  • 22. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • .. 6 0 6- - • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 22https://github.com/lowRISC/riscv-llvm
  • 23. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • .. 7 - 7 7 8-0 • .. 78 8 . 7 - 77 8 8-0 • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 23https://github.com/lowRISC/riscv-llvm
  • 24. & . & . • & • . • add x1, x2, x3 -> MCInst • . & . • . • MCInst -> add x1, x2, x3 • • • [0xb3,0x00,0x31,0x00] -> MCInst • • MCInst -> [0xb3,0x00,0x31,0x00] 24
  • 25. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 332 -2 00 2 3 . • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 25https://github.com/lowRISC/riscv-llvm
  • 26. - 3 • 3 -3 • 3 3 - 3 • / • 3 3 - 3 • / / • - 3 • - 3 3 • • 3 3 -2 • / • - 3 • • • • 26
  • 27. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • - 1 0 . • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 27https://github.com/lowRISC/riscv-llvm
  • 28. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 00 1 . 1 . 1 - • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 28https://github.com/lowRISC/riscv-llvm
  • 29. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 221 1 2 - 00 - .- 2 2 . • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 29https://github.com/lowRISC/riscv-llvm
  • 30. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 3 -.0. . 1 • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 30https://github.com/lowRISC/riscv-llvm
  • 31. (( ) ) )- ) • (( ) ) )- ) a e C a • : • : • (( • (( 31 // Callee-save callee: sw s0, 12(sp) ... mv s0, a1 # s0 ... lw s0, 12(sp) // Caller-save caller: sw ra, 12(sp) ... call callee ... lw ra, 12(sp)
  • 32. . • . . 32 // x10(a0) x11(a1) int add(int a, int b) { return a + b; // x10(a0) } void caller() { // x10(a0) x11(a1) int result = add(3, 5); } // x10(a0)
  • 33. . 33 • . // X10 X11 def RetCC_RISCV32 : CallingConv<[CCIfType<[i32], CCAssignToReg<[X10, X11]>>]>; // RISCV 32-bit C Calling convention. def CC_RISCV32 : CallingConv<[ // Promote i1/i8/i16 args to i32 CCIfType<[ i1, i8, i16 ], CCPromoteToType<i32>>, // X10~X17 CCIfType<[i32], CCAssignToReg<[ X10, X11, X12, X13, X14, X15, X16, X17]>>, // size 4 bytes, alignment 4 bytes CCAssignToStack<4, 4> ]>; // Callee-save def CSR : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;
  • 34. 34 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 35. ))- ( : • : • ))- ( : • : : • : : 35 a add b c add
  • 36. 36 int add(int a, int b) { return a + b; } define i32 @add(i32 signext %a, i32 signext %b) #0 { entry: %add = add nsw i32 %a, %b ret i32 %add } t0: ch = EntryToken t4: i32,ch = CopyFromReg t0, Register:i32 %1 t2: i32,ch = CopyFromReg t0, Register:i32 %0 t5: i32 = add nsw t4, t2 t7: ch,glue = CopyToReg t0, Register:i32 %x10_32, t5 t8: ch = RISCVISD::RET_FLAG t7, Register:i32 %x10_32, t7:1
  • 37. 37 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 38. ) 3 - 2 -3 • ) 3 - SI T ) 3 - SI • ) 3 - S • ) 3 - • 4 36 2 (- - 2 ) 3 - SI • void setOperationAction( unsigned Op, // S MVT VT, // LegalizeAction Action) // TL Target // I S 38
  • 39. 3 • 3 • O T • L T • 3 LA T PC L • L • 3 39 setOperationAction(ISD::ADD, MVT::i32, Legal) setOperationAction(ISD::ADD, MVT::i8, Promote) AddPromotedToType(ISD::ADD, MVT::i8, MVT::i32) // P T L shift T PC L E setOperationAction(ISD::MUL, MVT::i32, Expand); setOperationAction(ISD::GlobalAddress, i32, Custom);
  • 40. . • . 40 RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, const RISCVSubtarget &STI) : TargetLowering(TM), Subtarget(STI) { // Set up the register classes. addRegisterClass(MVT::i32, &RISCV::GPRRegClass); // 32-bit promote 32-bit // 32-bit 32-bit computeRegisterProperties(STI.getRegisterInfo()); setStackPointerRegisterToSaveRestore(RISCV::X2); // TODO: add all necessary setOperationAction calls. setOperationAction(ISD::MUL, XLenVT, Expand); ... setOperationAction(ISD::GlobalAddress, i32, Custom); ... }
  • 41. • • • 41 SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl<ISD::InputArg> &Ins, const SDLoc &DL, SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const override; SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl<ISD::OutputArg> &Outs, const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL, SelectionDAG &DAG) const override; SDValue LowerCall(TargetLowering::CallLoweringInfo &CLI, SmallVectorImpl<SDValue> &InVals) const override;
  • 42. 42 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 43. • - • - 43 // RISCVInstrInto.td def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
  • 44. - - - - 44 // RISCVInstrInto.td def Pat<(add GPR:$rs1, simm12:$imm12), (ADDI GPR:$rs1, simm12:$imm12)>;
  • 45. . . - . • - 45 void RISCVDAGToDAGISel::Select(SDNode *Node) { // If we have a custom node, we have already selected if (Node->isMachineOpcode()) { DEBUG(dbgs() << "== "; Node->dump(CurDAG); dbgs() << "n"); Node->setNodeId(-1); return; } // C if (Node->getOpcode() == ISD::AND) { ... return; } // A .td pattern SelectCode(Node); } // RISCVInstrInto.td def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
  • 46. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • - 44 1 0 - 4 . • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 46https://github.com/lowRISC/riscv-llvm
  • 47. • 2 3 - - 47 // 3 12-bit sign-extension def LO12Sext : SDNodeXForm<imm, [{ return CurDAG->getTargetConstant(SignExtend64<12>(N->getZExtValue()), SDLoc(N), N->getValueType(0)); }]>; // 32-bit 20-bit 11 1 1 def HI20 : SDNodeXForm<imm, [{ return CurDAG->getTargetConstant(((N->getZExtValue()+0x800) >> 12) & 0xfffff, SDLoc(N), N->getValueType(0)); }]>; def simm32 : ImmLeaf<XLenVT, [{return isInt<32>(Imm);}]>; // simm12 -> addi rd, x0, simm12 def : Pat<(simm12:$imm), (ADDI X0, simm12:$imm)>; // simm32 -> lui rd, uimm20 + addi rd, rd, simm12 def : Pat<(simm32:$imm), (ADDI (LUI (HI20 imm:$imm)), (LO12Sext imm:$imm))>; # 0xabcd5566 a0, simm32 = (uimm20 << 12) + simm12 lui a0, 0xabcd5 # a0 = 0xabcd5 addi a0, a0, 0x566 # a0 = 0xabcd5566
  • 48. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • - 1 5 0 0 15 . • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 48https://github.com/lowRISC/riscv-llvm
  • 49. 49 def : Pat<(load (add GPR:$rs1, simm12:$imm12)), (LW GPR:$rs1, simm12:$imm12)>; LW rd, rs, simm12
  • 50. 50 /// Loads multiclass LdPat<PatFrag LoadOp, RVInst Inst> { def : Pat<(LoadOp GPR:$rs1), (Inst GPR:$rs1, 0)>; def : Pat<(LoadOp (add GPR:$rs1, simm12:$imm12)), (Inst GPR:$rs1, simm12:$imm12)>; } defm : LdPat<sextloadi8, LB>; defm : LdPat<extloadi8, LB>; defm : LdPat<sextloadi16, LH>; defm : LdPat<extloadi16, LH>; defm : LdPat<load, LW>; defm : LdPat<zextloadi8, LBU>; defm : LdPat<zextloadi16, LHU>; /// Stores multiclass StPat<PatFrag StoreOp, RVInst Inst> { def : Pat<(StoreOp GPR:$rs2, GPR:$rs1), (Inst GPR:$rs2, GPR:$rs1, 0)>; def : Pat<(StoreOp GPR:$rs2, (add GPR:$rs1, simm12:$imm12)), (Inst GPR:$rs2, GPR:$rs1, simm12:$imm12)>; } defm : StPat<truncstorei8, SB>; defm : StPat<truncstorei16, SH>; defm : StPat<store, SW>;
  • 51. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • . 6 - 6 6 6 0 .1 • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 51https://github.com/lowRISC/riscv-llvm
  • 52. : 52 @G = global i32 0 define i32 @lw_global(i32 %a) { %1 = load volatile i32, i32* @G ret i32 %1 } lui a0, %hi(G) addi a0, a0, %lo(G) lw a0, 0(a0)
  • 53. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • . - 070 1 7 • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 53https://github.com/lowRISC/riscv-llvm
  • 54. 54 define void @condbr(i32 %a, i32 %b, i32 *%c) { %tst = icmp ne i32 %a, %b br i1 %tst, label %end, label %equal equal: store i32 1, i32* %c br label %end end: ret void } def : Pat<(brcond (i32 (setne GPR:$rs1, GPR:$rs2)), bb:$imm12) (BEQ GPR:$rs1, GPR:$rs2, simm13_lsb0:$imm12)>; BEQ rs1, rs2, simm13_lsb0
  • 55. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 00 1 1 . . -- 0 • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 55https://github.com/lowRISC/riscv-llvm
  • 57. 57 let isCall = 1, Defs=[X1] in def PseudoCALL : Pseudo<(outs), (ins GPR:$rs1), [(Call GPR:$rs1)]>, PseudoInstExpansion<(JALR X1, GPR:$rs1, 0)>; lui a0, %hi(external_function) addi a3, a0, %lo(external_function) // a0~a7 addi a0, zero, 1 addi a1, zero, 2 addi a2, zero, 3 // / jalr ra, a3, 0 declare i32 @external_function(i32, i32, i32) define i32 @test_call_external() nounwind { %1 = call i32 @external_function(i32 1, i32 2, i32 3) ret i32 %1 } JALR rd, rs1, simm12 • target address: rs1 + simm12 • rd = pc + 4
  • 58. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • . . 9 . 0 9-1 • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 58https://github.com/lowRISC/riscv-llvm
  • 59. 59 : define i32 @bare_select(i1 %a, i32 %b, i32 %c) { %1 = select i1 %a, i32 %b, i32 %c ret i32 %1 } bare_select: # %bb.0: andi a0, a0, 1 addi a3, zero, 0 bne a0, a3, .LBB0_2 # %bb.1: addi a1, a2, 0 .LBB0_2: addi a0, a1, 0 jalr zero, ra, 0
  • 60. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 02 02 2- 0 - -0 . • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 60https://github.com/lowRISC/riscv-llvm
  • 61. 29 I • 3 L I 9D 3 4 7 9E I 9 • 3 4 7 3 F EAI AI L 9E AI L AE A C 9 IAE 9 • 3 4 7 3 4 7 -0. AE I 9 • 3 4 7 I 9 E 9 • 3 4 7 9IA 3 4 7 EI .F D9 I EI E F 3 AI 9 • 3 4 7 9 FE I 3 4 7 1 59 I 9 • 3 4 7 9IA 3 4 7 ID29 I 9 • 3 4 7 3 4 7 EI 2 AE 9E 9IA 1 9II D C 9 • 3 4 7 I F F 9CC 37 AEI AFEI 9 • 3 4 7 I F F AI9II D C 9 • 3 4 7 FDDFE A I 9E CF 9 AFEI 9 • 3 4 7 I F F 9 8CC 8 I 8 I 9 • 3 4 7 EA A9C F E I F F 06 F 9 AFEI 9 • 3 4 7 F E I F F D9 A9CAPAE FEI 9E I 9 • 3 4 7 F E I F F D DF F 9 AFEI 9 • 3 4 7 F E I F F D DF F 9 AFEI FE CF 9 9 • 3 4 7 F E F FE A AFE9C 9E I 9 • 3 4 7 4 F F E AFE 9CCI 9 • 3 4 7 D C D E CFM AE F 4 4-0- 5 9 • 3 4 7 4 F 9E I I F 9 L9 A F 9 A AFE9C 9 • 1 0 . - - .2 • 3 4 7 4 F CFM AE . 9D E 9 • 3 4 7 D C D E FCF 9E ACF AEI AFE 9 • 3 4 7 CCFM CFM AE F E9DA 8I 9 9CCF I 9 I9L 9 • 3 4 7 I FD 83 4 7 9CCAE FEL E AFE 9E AD 9 • 3 4 7 4 F F L9 9 I 9 • 3 4 7 4 F I 9 9D I 9E F I I F A I 9 • 3 4 7 9IA I F F AECAE 9ID FEI 9AE I 9 • 3 4 7 I F F CCLD 9D 9 II E9 9 • 3 4 7 D C D E 9E 9E9C IAI 9 61https://github.com/lowRISC/riscv-llvm addi a1, zero, 0 sub a0, a1, a0 sub a0, zero, a0
  • 62. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 2 2 . 0 - • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 62https://github.com/lowRISC/riscv-llvm
  • 63. 63 // Replace FrameIndex with Offset void RISCVRegisterInfo::eliminateFrameIndex // Calculate Offset by FrameIndex int RISCVFrameLowering::getFrameIndexReference OffsetHigh Address Low Address fp/s0 sp ra s0/fp s1 s2 s3 . . . FrameIndex 0 1 2 3 4 sp + 12 sp + 16 sp + 20 sp + 24 sp + 28
  • 64. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 03 0 3 2 2 3. 2 . .2 3 - • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 64https://github.com/lowRISC/riscv-llvm
  • 65. 0 / 0 / ) -/ • / • I • ( - ( // • • P ( // - E ( • I • -/ • ( ( // - P E • • • 65 func: // Prologue addi sp, sp, -32 sw ra, 28(sp) sw s0/fp, 24(sp) sw s1, 20(sp) sw s2, 16(sp) sw s3, 12(sp) addi s0/fp, sp, 32 ... // callee-save // register ... // Epilog lw s3, 12(sp) lw s2, 16(sp) lw s1, 20(sp) lw s0/fp, 24(sp) lw ra, 28(sp) addi sp, sp, 32 ret
  • 66. . . • . 66 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const { ... uint64_t StackSize = MFI.getStackSize(); ... // addi sp, sp, -StackSize adjustReg(MBB, MBBI, DL, SPReg, SPReg, -StackSize, MachineInstr::FrameSetup); ... // addi fp, sp, StackSize adjustReg(MBB, MBBI, DL, FPReg, SPReg, StackSize, MachineInstr::FrameSetup); } void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const { ... uint64_t StackSize = MFI.getStackSize(); ... // Deallocate stack: addi sp, sp, StackSize adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackSize, MachineInstr::FrameDestroy); }
  • 67. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • - . 4 2 2 - 0 • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 67https://github.com/lowRISC/riscv-llvm
  • 68. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 2 0 . - 0 025 5 • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 68https://github.com/lowRISC/riscv-llvm
  • 69. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 2..- - 0 . • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 69https://github.com/lowRISC/riscv-llvm
  • 70. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 7 . 2-7 3 ..7- 7 0 7 • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 70https://github.com/lowRISC/riscv-llvm
  • 71. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 0 8 . 0 0 - 2 8 0 8 8 • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 71https://github.com/lowRISC/riscv-llvm
  • 72. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 2 -2 0 - 0 . • 4 5 8 F M C FRLDL M C 72https://github.com/lowRISC/riscv-llvm
  • 73. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • .0- . 3 - 0 3 73https://github.com/lowRISC/riscv-llvm
  • 74. : . • : • : . : • : / . • : / : -: : • 74