targ.c 835 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. .rsave = amd64_sysv_rsave, \
  20. .nrsave = {NGPS, NFPS}, \
  21. .retregs = amd64_sysv_retregs, \
  22. .argregs = amd64_sysv_argregs, \
  23. .memargs = amd64_memargs, \
  24. .abi0 = elimsb, \
  25. .abi1 = amd64_sysv_abi, \
  26. .isel = amd64_isel, \
  27. .emitfn = amd64_emitfn, \
  28. Target T_amd64_sysv = {
  29. .name = "amd64_sysv",
  30. .emitfin = elf_emitfin,
  31. .asloc = ".L",
  32. AMD64_COMMON
  33. };
  34. Target T_amd64_apple = {
  35. .name = "amd64_apple",
  36. .apple = 1,
  37. .emitfin = macho_emitfin,
  38. .asloc = "L",
  39. .assym = "_",
  40. AMD64_COMMON
  41. };