targ.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "all.h"
  2. int arm64_rsave[] = {
  3. R0, R1, R2, R3, R4, R5, R6, R7,
  4. R8, R9, R10, R11, R12, R13, R14, R15,
  5. IP0, IP1, R18, LR,
  6. V0, V1, V2, V3, V4, V5, V6, V7,
  7. V16, V17, V18, V19, V20, V21, V22, V23,
  8. V24, V25, V26, V27, V28, V29, V30,
  9. -1
  10. };
  11. int arm64_rclob[] = {
  12. R19, R20, R21, R22, R23, R24, R25, R26,
  13. R27, R28,
  14. V8, V9, V10, V11, V12, V13, V14, V15,
  15. -1
  16. };
  17. #define RGLOB (BIT(FP) | BIT(SP) | BIT(IP1) | BIT(R18))
  18. static int
  19. arm64_memargs(int op)
  20. {
  21. (void)op;
  22. return 0;
  23. }
  24. #define ARM64_COMMON \
  25. .gpr0 = R0, \
  26. .ngpr = NGPR, \
  27. .fpr0 = V0, \
  28. .nfpr = NFPR, \
  29. .rglob = RGLOB, \
  30. .nrglob = 4, \
  31. .rsave = arm64_rsave, \
  32. .nrsave = {NGPS, NFPS}, \
  33. .retregs = arm64_retregs, \
  34. .argregs = arm64_argregs, \
  35. .memargs = arm64_memargs, \
  36. .isel = arm64_isel, \
  37. .abi1 = arm64_abi, \
  38. .emitfn = arm64_emitfn, \
  39. .cansel = 0, \
  40. Target T_arm64 = {
  41. .name = "arm64",
  42. .abi0 = elimsb,
  43. .emitfin = elf_emitfin,
  44. .asloc = ".L",
  45. ARM64_COMMON
  46. };
  47. Target T_arm64_apple = {
  48. .name = "arm64_apple",
  49. .apple = 1,
  50. .abi0 = apple_extsb,
  51. .emitfin = macho_emitfin,
  52. .asloc = "L",
  53. .assym = "_",
  54. ARM64_COMMON
  55. };
  56. MAKESURE(globals_are_not_arguments,
  57. (RGLOB & (BIT(R8+1) - 1)) == 0
  58. );
  59. MAKESURE(arrays_size_ok,
  60. sizeof arm64_rsave == (NGPS+NFPS+1) * sizeof(int) &&
  61. sizeof arm64_rclob == (NCLR+1) * sizeof(int)
  62. );