all.h 903 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "../all.h"
  2. typedef struct Amd64Op Amd64Op;
  3. enum Amd64Reg {
  4. RAX = RXX+1, /* caller-save */
  5. RCX,
  6. RDX,
  7. RSI,
  8. RDI,
  9. R8,
  10. R9,
  11. R10,
  12. R11,
  13. RBX, /* callee-save */
  14. R12,
  15. R13,
  16. R14,
  17. R15,
  18. RBP, /* globally live */
  19. RSP,
  20. XMM0, /* sse */
  21. XMM1,
  22. XMM2,
  23. XMM3,
  24. XMM4,
  25. XMM5,
  26. XMM6,
  27. XMM7,
  28. XMM8,
  29. XMM9,
  30. XMM10,
  31. XMM11,
  32. XMM12,
  33. XMM13,
  34. XMM14,
  35. XMM15,
  36. NFPR = XMM14 - XMM0 + 1, /* reserve XMM15 */
  37. NGPR = RSP - RAX + 1,
  38. NGPS = R11 - RAX + 1,
  39. NFPS = NFPR,
  40. NCLR = R15 - RBX + 1,
  41. };
  42. MAKESURE(reg_not_tmp, XMM15 < (int)Tmp0);
  43. struct Amd64Op {
  44. char nmem;
  45. char zflag;
  46. char lflag;
  47. };
  48. /* targ.c */
  49. extern Amd64Op amd64_op[];
  50. /* sysv.c (abi) */
  51. extern int amd64_sysv_rsave[];
  52. extern int amd64_sysv_rclob[];
  53. bits amd64_sysv_retregs(Ref, int[2]);
  54. bits amd64_sysv_argregs(Ref, int[2]);
  55. void amd64_sysv_abi(Fn *);
  56. /* isel.c */
  57. void amd64_isel(Fn *);
  58. /* emit.c */
  59. void amd64_emitfn(Fn *, FILE *);