| 1 | #include "../all.h" | 
|---|
| 2 |  | 
|---|
| 3 | typedef struct Rv64Op Rv64Op; | 
|---|
| 4 |  | 
|---|
| 5 | enum Rv64Reg { | 
|---|
| 6 | /* caller-save */ | 
|---|
| 7 | T0 = RXX + 1, T1, T2, T3, T4, T5, | 
|---|
| 8 | A0, A1, A2, A3, A4, A5, A6, A7, | 
|---|
| 9 |  | 
|---|
| 10 | /* callee-save */ | 
|---|
| 11 | S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, | 
|---|
| 12 |  | 
|---|
| 13 | /* globally live */ | 
|---|
| 14 | FP, SP, GP, TP, RA, | 
|---|
| 15 |  | 
|---|
| 16 | /* FP caller-save */ | 
|---|
| 17 | FT0, FT1, FT2, FT3, FT4, FT5, FT6, FT7, FT8, FT9, FT10, | 
|---|
| 18 | FA0, FA1, FA2, FA3, FA4, FA5, FA6, FA7, | 
|---|
| 19 |  | 
|---|
| 20 | /* FP callee-save */ | 
|---|
| 21 | FS0, FS1, FS2, FS3, FS4, FS5, FS6, FS7, FS8, FS9, FS10, FS11, | 
|---|
| 22 |  | 
|---|
| 23 | /* reserved (see rv64/emit.c) */ | 
|---|
| 24 | T6, FT11, | 
|---|
| 25 |  | 
|---|
| 26 | NFPR = FS11 - FT0 + 1, | 
|---|
| 27 | NGPR = RA - T0 + 1, | 
|---|
| 28 | NGPS = A7 - T0 + 1, | 
|---|
| 29 | NFPS = FA7 - FT0 + 1, | 
|---|
| 30 | NCLR = (S11 - S1 + 1) + (FS11 - FS0 + 1), | 
|---|
| 31 | }; | 
|---|
| 32 | MAKESURE(reg_not_tmp, FT11 < (int)Tmp0); | 
|---|
| 33 |  | 
|---|
| 34 | struct Rv64Op { | 
|---|
| 35 | char imm; | 
|---|
| 36 | }; | 
|---|
| 37 |  | 
|---|
| 38 | /* targ.c */ | 
|---|
| 39 | extern int rv64_rsave[]; | 
|---|
| 40 | extern int rv64_rclob[]; | 
|---|
| 41 | extern Rv64Op rv64_op[]; | 
|---|
| 42 |  | 
|---|
| 43 | /* abi.c */ | 
|---|
| 44 | bits rv64_retregs(Ref, int[2]); | 
|---|
| 45 | bits rv64_argregs(Ref, int[2]); | 
|---|
| 46 | void rv64_abi(Fn *); | 
|---|
| 47 |  | 
|---|
| 48 | /* isel.c */ | 
|---|
| 49 | void rv64_isel(Fn *); | 
|---|
| 50 |  | 
|---|
| 51 | /* emit.c */ | 
|---|
| 52 | void rv64_emitfn(Fn *, FILE *); | 
|---|
| 53 |  | 
|---|