targ.c 851 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. .cansel = 1, \
  29. Target T_amd64_sysv = {
  30. .name = "amd64_sysv",
  31. .emitfin = elf_emitfin,
  32. .asloc = ".L",
  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. AMD64_COMMON
  42. };