revert 4bc4c958
[qbe.git] / rv64 / targ.c
blobc0e5e1812b07e12dfce345a49606c337348b226b
1 #include "all.h"
3 Rv64Op rv64_op[NOp] = {
4 #define O(op, t, x) [O##op] =
5 #define V(imm) { imm },
6 #include "../ops.h"
7 };
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,
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,
25 #define RGLOB (BIT(FP) | BIT(SP) | BIT(GP) | BIT(TP) | BIT(RA))
27 static int
28 rv64_memargs(int op)
30 (void)op;
31 return 0;
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",
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));