qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

targ.c (1110B)


      1 #include "all.h"
      2 
      3 Rv64Op rv64_op[NOp] = {
      4 #define O(op, t, x) [O##op] =
      5 #define V(imm) { imm },
      6 #include "../ops.h"
      7 };
      8 
      9 int rv64_rsave[] = {
     10 	T0, T1, T2, T3, T4, T5,
     11 	A0, A1, A2, A3, A4, A5, A6, A7,
     12 	FA0, FA1, FA2,  FA3,  FA4, FA5, FA6, FA7,
     13 	FT0, FT1, FT2,  FT3,  FT4, FT5, FT6, FT7,
     14 	FT8, FT9, FT10,
     15 	-1
     16 };
     17 int rv64_rclob[] = {
     18 	     S1,  S2,   S3,   S4,  S5,  S6,  S7,
     19 	S8,  S9,  S10,  S11,
     20 	FS0, FS1, FS2,  FS3,  FS4, FS5, FS6, FS7,
     21 	FS8, FS9, FS10, FS11,
     22 	-1
     23 };
     24 
     25 #define RGLOB (BIT(FP) | BIT(SP) | BIT(GP) | BIT(TP) | BIT(RA))
     26 
     27 static int
     28 rv64_memargs(int op)
     29 {
     30 	(void)op;
     31 	return 0;
     32 }
     33 
     34 Target T_rv64 = {
     35 	.name = "rv64",
     36 	.gpr0 = T0,
     37 	.ngpr = NGPR,
     38 	.fpr0 = FT0,
     39 	.nfpr = NFPR,
     40 	.rglob = RGLOB,
     41 	.nrglob = 5,
     42 	.rsave = rv64_rsave,
     43 	.nrsave = {NGPS, NFPS},
     44 	.retregs = rv64_retregs,
     45 	.argregs = rv64_argregs,
     46 	.memargs = rv64_memargs,
     47 	.abi0 = elimsb,
     48 	.abi1 = rv64_abi,
     49 	.isel = rv64_isel,
     50 	.emitfn = rv64_emitfn,
     51 	.emitfin = elf_emitfin,
     52 	.asloc = ".L",
     53 };
     54 
     55 MAKESURE(rsave_size_ok, sizeof rv64_rsave == (NGPS+NFPS+1) * sizeof(int));
     56 MAKESURE(rclob_size_ok, sizeof rv64_rclob == (NCLR+1) * sizeof(int));