1#include "../all.h"
2
3typedef struct Amd64Op Amd64Op;
4
5enum Amd64Reg {
6 RAX = RXX+1, /* caller-save */
7 RCX,
8 RDX,
9 RSI,
10 RDI,
11 R8,
12 R9,
13 R10,
14 R11,
15
16 RBX, /* callee-save */
17 R12,
18 R13,
19 R14,
20 R15,
21
22 RBP, /* globally live */
23 RSP,
24
25 XMM0, /* sse */
26 XMM1,
27 XMM2,
28 XMM3,
29 XMM4,
30 XMM5,
31 XMM6,
32 XMM7,
33 XMM8,
34 XMM9,
35 XMM10,
36 XMM11,
37 XMM12,
38 XMM13,
39 XMM14,
40 XMM15,
41
42 NFPR = XMM14 - XMM0 + 1, /* reserve XMM15 */
43 NGPR = RSP - RAX + 1,
44 NGPS = R11 - RAX + 1,
45 NFPS = NFPR,
46 NCLR = R15 - RBX + 1,
47};
48MAKESURE(reg_not_tmp, XMM15 < (int)Tmp0);
49
50struct Amd64Op {
51 char nmem;
52 char zflag;
53 char lflag;
54};
55
56/* targ.c */
57extern Amd64Op amd64_op[];
58
59/* sysv.c (abi) */
60extern int amd64_sysv_rsave[];
61extern int amd64_sysv_rclob[];
62bits amd64_sysv_retregs(Ref, int[2]);
63bits amd64_sysv_argregs(Ref, int[2]);
64void amd64_sysv_abi(Fn *);
65
66/* isel.c */
67void amd64_isel(Fn *);
68
69/* emit.c */
70void amd64_emitfn(Fn *, FILE *);
71