| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #include "../all.h"
- typedef struct Amd64Op Amd64Op;
- enum Amd64Reg {
- RAX = RXX+1, /* caller-save */
- RCX, /* caller-save */
- RDX, /* caller-save */
- RSI, /* caller-save on sysv, callee-save on win */
- RDI, /* caller-save on sysv, callee-save on win */
- R8, /* caller-save */
- R9, /* caller-save */
- R10, /* caller-save */
- R11, /* caller-save */
- RBX, /* callee-save */
- R12,
- R13,
- R14,
- R15,
- RBP, /* globally live */
- RSP,
- XMM0, /* sse */
- XMM1,
- XMM2,
- XMM3,
- XMM4,
- XMM5,
- XMM6,
- XMM7,
- XMM8,
- XMM9,
- XMM10,
- XMM11,
- XMM12,
- XMM13,
- XMM14,
- XMM15,
- NFPR = XMM14 - XMM0 + 1, /* reserve XMM15 */
- NGPR = RSP - RAX + 1,
- NFPS = NFPR,
- NGPS_SYSV = R11 - RAX + 1,
- NCLR_SYSV = R15 - RBX + 1,
- NGPS_WIN = R11 - RAX + 1 - 2, /* -2 for RDI/RDI */
- NCLR_WIN = R15 - RBX + 1 + 2, /* +2 for RDI/RDI */
- };
- MAKESURE(reg_not_tmp, XMM15 < (int)Tmp0);
- struct Amd64Op {
- char nmem;
- char zflag;
- char lflag;
- };
- /* targ.c */
- extern Amd64Op amd64_op[];
- /* sysv.c (abi) */
- extern int amd64_sysv_rsave[];
- extern int amd64_sysv_rclob[];
- bits amd64_sysv_retregs(Ref, int[2]);
- bits amd64_sysv_argregs(Ref, int[2]);
- void amd64_sysv_abi(Fn *);
- /* winabi.c */
- extern int amd64_winabi_rsave[];
- extern int amd64_winabi_rclob[];
- bits amd64_winabi_retregs(Ref, int[2]);
- bits amd64_winabi_argregs(Ref, int[2]);
- void amd64_winabi_abi(Fn *);
- /* isel.c */
- void amd64_isel(Fn *);
- /* emit.c */
- void amd64_sysv_emitfn(Fn *, FILE *);
- void amd64_winabi_emitfn(Fn *, FILE *);
|