targ.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "all.h"
  2. Amd64Op amd64_op[NOp] = {
  3. #define O(op, t, x) [O##op] =
  4. #define X(nm, zf, lf) { nm, zf, lf, },
  5. #include "../ops.h"
  6. };
  7. static int
  8. amd64_memargs(int op)
  9. {
  10. return amd64_op[op].nmem;
  11. }
  12. #define AMD64_COMMON \
  13. .gpr0 = RAX, \
  14. .ngpr = NGPR, \
  15. .fpr0 = XMM0, \
  16. .nfpr = NFPR, \
  17. .rglob = BIT(RBP) | BIT(RSP), \
  18. .nrglob = 2, \
  19. .memargs = amd64_memargs, \
  20. .abi0 = elimsb, \
  21. .isel = amd64_isel, \
  22. .cansel = 1,
  23. Target T_amd64_sysv = {
  24. .name = "amd64_sysv",
  25. .emitfin = elf_emitfin,
  26. .asloc = ".L",
  27. .abi1 = amd64_sysv_abi,
  28. .rsave = amd64_sysv_rsave,
  29. .nrsave = {NGPS_SYSV, NFPS},
  30. .retregs = amd64_sysv_retregs,
  31. .argregs = amd64_sysv_argregs,
  32. .emitfn = amd64_sysv_emitfn,
  33. AMD64_COMMON
  34. };
  35. Target T_amd64_apple = {
  36. .name = "amd64_apple",
  37. .apple = 1,
  38. .emitfin = macho_emitfin,
  39. .asloc = "L",
  40. .assym = "_",
  41. .abi1 = amd64_sysv_abi,
  42. .rsave = amd64_sysv_rsave,
  43. .nrsave = {NGPS_SYSV, NFPS},
  44. .retregs = amd64_sysv_retregs,
  45. .argregs = amd64_sysv_argregs,
  46. .emitfn = amd64_sysv_emitfn,
  47. AMD64_COMMON
  48. };
  49. Target T_amd64_win = {
  50. .name = "amd64_win",
  51. .windows = 1,
  52. .emitfin = pe_emitfin,
  53. .asloc = "L",
  54. .abi1 = amd64_winabi_abi,
  55. .rsave = amd64_winabi_rsave,
  56. .nrsave = {NGPS_WIN, NFPS},
  57. .retregs = amd64_winabi_retregs,
  58. .argregs = amd64_winabi_argregs,
  59. .emitfn = amd64_winabi_emitfn,
  60. AMD64_COMMON
  61. };