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