cheaper mul by small constants on amd64
[qbe.git] / arm64 / targ.c
blob232376d44d7859da1ee584e0a412cd0370e38902
1 #include "all.h"
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,
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,
19 #define RGLOB (BIT(FP) | BIT(SP) | BIT(R18))
21 static int
22 arm64_memargs(int op)
24 (void)op;
25 return 0;
28 #define ARM64_COMMON \
29 .gpr0 = R0, \
30 .ngpr = NGPR, \
31 .fpr0 = V0, \
32 .nfpr = NFPR, \
33 .rglob = RGLOB, \
34 .nrglob = 3, \
35 .rsave = arm64_rsave, \
36 .nrsave = {NGPS, NFPS}, \
37 .retregs = arm64_retregs, \
38 .argregs = arm64_argregs, \
39 .memargs = arm64_memargs, \
40 .isel = arm64_isel, \
41 .abi1 = arm64_abi, \
42 .emitfn = arm64_emitfn, \
44 Target T_arm64 = {
45 .name = "arm64",
46 .abi0 = elimsb,
47 .emitfin = elf_emitfin,
48 .asloc = ".L",
49 ARM64_COMMON
52 Target T_arm64_apple = {
53 .name = "arm64_apple",
54 .apple = 1,
55 .abi0 = apple_extsb,
56 .emitfin = macho_emitfin,
57 .asloc = "L",
58 .assym = "_",
59 ARM64_COMMON
62 MAKESURE(globals_are_not_arguments,
63 (RGLOB & (BIT(R8+1) - 1)) == 0
65 MAKESURE(arrays_size_ok,
66 sizeof arm64_rsave == (NGPS+NFPS+1) * sizeof(int) &&
67 sizeof arm64_rclob == (NCLR+1) * sizeof(int)