all.h 994 B

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