xref: /aosp_15_r20/external/swiftshader/third_party/subzero/src/IceInstX8664.def (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker//===- subzero/src/IceInstX8664.def - X-macros for x86-64 insts -*- C++ -*-===//
2*03ce13f7SAndroid Build Coastguard Worker//
3*03ce13f7SAndroid Build Coastguard Worker//                        The Subzero Code Generator
4*03ce13f7SAndroid Build Coastguard Worker//
5*03ce13f7SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*03ce13f7SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*03ce13f7SAndroid Build Coastguard Worker//
8*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*03ce13f7SAndroid Build Coastguard Worker//
10*03ce13f7SAndroid Build Coastguard Worker// This file defines properties of lowered x86-64 instructions in the
11*03ce13f7SAndroid Build Coastguard Worker// form of x-macros.
12*03ce13f7SAndroid Build Coastguard Worker//
13*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
14*03ce13f7SAndroid Build Coastguard Worker
15*03ce13f7SAndroid Build Coastguard Worker#ifndef SUBZERO_SRC_ICEINSTX8664_DEF
16*03ce13f7SAndroid Build Coastguard Worker#define SUBZERO_SRC_ICEINSTX8664_DEF
17*03ce13f7SAndroid Build Coastguard Worker
18*03ce13f7SAndroid Build Coastguard Worker#include "IceRegList.h"
19*03ce13f7SAndroid Build Coastguard Worker
20*03ce13f7SAndroid Build Coastguard Worker// System V AMD64 ABI:
21*03ce13f7SAndroid Build Coastguard Worker//   Scratch GPRs: rax, rcx, rdx, rsi, rdi, r8, r9, r10, r11
22*03ce13f7SAndroid Build Coastguard Worker//   Callee-save GPRs: rbx, rbp, r12, r13, r14, r15
23*03ce13f7SAndroid Build Coastguard Worker//   Scratch XMMs: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
24*03ce13f7SAndroid Build Coastguard Worker//                 xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15
25*03ce13f7SAndroid Build Coastguard Worker// Microsoft x86-64 ABI:
26*03ce13f7SAndroid Build Coastguard Worker//   Scratch GPRs: rax, rcx, rdx, r8, r9, r10, r11
27*03ce13f7SAndroid Build Coastguard Worker//   Callee-save GPRs: rbx, rbp, rsi, rdi, r12, r13, r14, r15
28*03ce13f7SAndroid Build Coastguard Worker//   Scratch XMMs: xmm0, xmm1, xmm2, xmm3, xmm4, xmm5
29*03ce13f7SAndroid Build Coastguard Worker//   Callee-save XMMs: xmm6-xmm15
30*03ce13f7SAndroid Build Coastguard Worker//   Scratch registers are listed first, followed by preserved registers, so
31*03ce13f7SAndroid Build Coastguard Worker//   that the register allocator will favor scratch registers.
32*03ce13f7SAndroid Build Coastguard Worker// Key to table columns:
33*03ce13f7SAndroid Build Coastguard Worker//   val: Enum value, when a specific register is needed during lowering.
34*03ce13f7SAndroid Build Coastguard Worker//   encode: Encoding in the integrated assembler.
35*03ce13f7SAndroid Build Coastguard Worker//   name: Name used for the external assembler.
36*03ce13f7SAndroid Build Coastguard Worker//   scratch: Scratch (caller-save) register.
37*03ce13f7SAndroid Build Coastguard Worker//   preserved: Preserved (callee-save) register.
38*03ce13f7SAndroid Build Coastguard Worker//   stackptr: This register is used as the stack pointer.
39*03ce13f7SAndroid Build Coastguard Worker//   frameptr: This register is used as the frame pointer if needed.
40*03ce13f7SAndroid Build Coastguard Worker//   sboxres: This register is reserved in sandboxing.
41*03ce13f7SAndroid Build Coastguard Worker//   isGPR: This is a GPR (integer-type).
42*03ce13f7SAndroid Build Coastguard Worker//   is64: This is a 64-bit GPR.
43*03ce13f7SAndroid Build Coastguard Worker//   is32: This is a 32-bit GPR.
44*03ce13f7SAndroid Build Coastguard Worker//   is16: This is a 16-bit GPR.
45*03ce13f7SAndroid Build Coastguard Worker//   is8: This is an 8-bit GPR.
46*03ce13f7SAndroid Build Coastguard Worker//   isXmm: This is an XMM register for FP and vector ops.
47*03ce13f7SAndroid Build Coastguard Worker//   is64To8: A 64-bit GPR truncable to 8-bit.
48*03ce13f7SAndroid Build Coastguard Worker//   is32To8: A 32-bit GPR truncable to 8-bit.
49*03ce13f7SAndroid Build Coastguard Worker//   is16To8: A 16-bit GPR truncable to 8-bit.
50*03ce13f7SAndroid Build Coastguard Worker//   isTrunc8Rcvr: An 8-bit GPR that a wider GPR trivially truncates to.
51*03ce13f7SAndroid Build Coastguard Worker//   isAhRcvr: An 8-bit GPR that register "ah" can be assigned to.
52*03ce13f7SAndroid Build Coastguard Worker//   aliases: List of register aliases, which need not include this register.
53*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_BYTEREG_TABLE2(U, W)                                          \
54*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, base, scratch,preserved,stackptr,frameptr,sboxres,     \
55*03ce13f7SAndroid Build Coastguard Worker     isGPR,is64,is32,is16,is8, isXmm,                                          \
56*03ce13f7SAndroid Build Coastguard Worker     is64To8,is32To8,is16To8,isTrunc8Rcvr,isAhRcvr, aliases */                 \
57*03ce13f7SAndroid Build Coastguard Worker  /* 8-bit registers */                                                        \
58*03ce13f7SAndroid Build Coastguard Worker  X(Reg_al,    0, "al",   Reg_rax, 1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,1,         \
59*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rax, eax, ax))                                          \
60*03ce13f7SAndroid Build Coastguard Worker  X(Reg_cl,    1, "cl",   Reg_rcx, 1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,1,         \
61*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rcx, ecx, cx))                                          \
62*03ce13f7SAndroid Build Coastguard Worker  X(Reg_dl,    2, "dl",   Reg_rdx, 1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,1,         \
63*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rdx, edx, dx))                                          \
64*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r8l,   8, "r8b",  Reg_r8,  1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
65*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r8, r8d, r8w))                                          \
66*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r9l,   9, "r9b",  Reg_r9,  1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
67*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r9, r9d, r9w))                                          \
68*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r10l, 10, "r10b", Reg_r10, 1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
69*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r10, r10d, r10w))                                       \
70*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r11l, 11, "r11b", Reg_r11, 1,0,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
71*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r11, r11d, r11w))                                       \
72*03ce13f7SAndroid Build Coastguard Worker  X(Reg_sil,   6, "sil",  Reg_rsi, U,W,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
73*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsi, esi, si))                                          \
74*03ce13f7SAndroid Build Coastguard Worker  X(Reg_dil,   7, "dil",  Reg_rdi, U,W,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
75*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rdi, edi, di))                                          \
76*03ce13f7SAndroid Build Coastguard Worker  X(Reg_bl,    3, "bl",   Reg_rbx, 0,1,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,1,         \
77*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rbx, ebx, bx))                                          \
78*03ce13f7SAndroid Build Coastguard Worker  X(Reg_spl,   4, "spl",  Reg_rsp, 0,0,1,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,         \
79*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsp, esp, sp))                                          \
80*03ce13f7SAndroid Build Coastguard Worker  X(Reg_bpl,   5, "bpl",  Reg_rbp, 0,1,0,1,1, 1,0,0,0,1, 0, 0,0,0,1,0,         \
81*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rbp, ebp, bp))                                          \
82*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r12l, 12, "r12b", Reg_r12, 0,1,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
83*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r12, r12d, r12w))                                       \
84*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r13l, 13, "r13b", Reg_r13, 0,1,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
85*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r13, r13d, r13w))                                       \
86*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r14l, 14, "r14b", Reg_r14, 0,1,0,0,0, 1,0,0,0,1, 0, 0,0,0,1,0,         \
87*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r14, r14d, r14w))                                       \
88*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r15l, 15, "r15b", Reg_r15, 0,1,0,0,1, 1,0,0,0,1, 0, 0,0,0,1,0,         \
89*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r15, r15d, r15w))                                       \
90*03ce13f7SAndroid Build Coastguard Worker  /* High 8-bit registers.  None are allowed for register allocation. */       \
91*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ah, 4, "ah", Reg_rax, 1,0,0,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,              \
92*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rax, eax, ax))                                          \
93*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ch, 5, "ch", Reg_rcx, 1,0,0,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,              \
94*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rcx, ecx, cx))                                          \
95*03ce13f7SAndroid Build Coastguard Worker  X(Reg_dh, 6, "dh", Reg_rdx, 1,0,0,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,              \
96*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rdx, edx, dx))                                          \
97*03ce13f7SAndroid Build Coastguard Worker  X(Reg_bh, 7, "bh", Reg_rbx, 0,1,0,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,              \
98*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rbx, ebx, bx))                                          \
99*03ce13f7SAndroid Build Coastguard Worker  /* End of 8-bit register set */
100*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, base, scratch, preserved, stackptr, frameptr,
101*03ce13f7SAndroid Build Coastguard Worker//          sboxres, isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8,
102*03ce13f7SAndroid Build Coastguard Worker//          is16To8, isTrunc8Rcvr, isAhRcvr, aliases)
103*03ce13f7SAndroid Build Coastguard Worker
104*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_GPR_TABLE2(U, W)                                              \
105*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, base, scratch,preserved,stackptr,frameptr,             \
106*03ce13f7SAndroid Build Coastguard Worker     isGPR,is64,is32,is16,is8, isXmm,                                          \
107*03ce13f7SAndroid Build Coastguard Worker     is64To8,is32To8,is16To8,isTrunc8Rcvr,isAhRcvr, aliases */                 \
108*03ce13f7SAndroid Build Coastguard Worker  /* 64-bit registers */                                                       \
109*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rax, 0,  "rax", Reg_rax, 1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
110*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, eax, ax, al, ah))                                       \
111*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rcx, 1,  "rcx", Reg_rcx, 1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
112*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, ecx, cx, cl, ch))                                       \
113*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rdx, 2,  "rdx", Reg_rdx, 1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
114*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, edx, dx, dl, dh))                                       \
115*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r8,  8,  "r8",  Reg_r8,  1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
116*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r8d, r8w, r8l))                                         \
117*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r9,  9,  "r9",  Reg_r9,  1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
118*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r9d, r9w, r9l))                                         \
119*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r10, 10, "r10", Reg_r10, 1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
120*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r10d, r10w, r10l))                                      \
121*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r11, 11, "r11", Reg_r11, 1,0,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
122*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r11d, r11w, r11l))                                      \
123*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rsi, 6,  "rsi", Reg_rsi, U,W,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
124*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, esi, si, sil))                                          \
125*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rdi, 7,  "rdi", Reg_rdi, U,W,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
126*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, edi, di, dil))                                          \
127*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rbx, 3,  "rbx", Reg_rbx, 0,1,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
128*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, ebx, bx, bl, bh))                                       \
129*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rsp, 4,  "rsp", Reg_rsp, 0,0,1,0,0, 1,0,0,0,0, 0, 1,0,0,0,0,           \
130*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, esp, sp, spl))                                          \
131*03ce13f7SAndroid Build Coastguard Worker  X(Reg_rbp, 5,  "rbp", Reg_rbp, 0,1,0,1,1, 1,1,0,0,0, 0, 1,0,0,0,0,           \
132*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, ebp, bp, bpl))                                          \
133*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r12, 12, "r12", Reg_r12, 0,1,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
134*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r12d, r12w, r12l))                                      \
135*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r13, 13, "r13", Reg_r13, 0,1,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
136*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r13d, r13w, r13l))                                      \
137*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r14, 14, "r14", Reg_r14, 0,1,0,0,0, 1,1,0,0,0, 0, 1,0,0,0,0,           \
138*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r14d, r14w, r14l))                                      \
139*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r15, 15, "r15", Reg_r15, 0,1,0,0,1, 1,1,0,0,0, 0, 1,0,0,0,0,           \
140*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r15d, r15w, r15l))                                      \
141*03ce13f7SAndroid Build Coastguard Worker  /* 32-bit registers */                                                       \
142*03ce13f7SAndroid Build Coastguard Worker  X(Reg_eax,   0, "eax",  Reg_rax, 1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
143*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rax, ax, al, ah))                                       \
144*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ecx,   1, "ecx",  Reg_rcx, 1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
145*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rcx, cx, cl, ch))                                       \
146*03ce13f7SAndroid Build Coastguard Worker  X(Reg_edx,   2, "edx",  Reg_rdx, 1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
147*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rdx, dx, dl, dh))                                       \
148*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r8d,   8, "r8d",  Reg_r8,  1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
149*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r8, r8w, r8l))                                          \
150*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r9d,   9, "r9d",  Reg_r9,  1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
151*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r9, r9w, r9l))                                          \
152*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r10d, 10, "r10d", Reg_r10, 1,0,0,1,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
153*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r10, r10w, r10l))                                       \
154*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r11d, 11, "r11d", Reg_r11, 1,0,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
155*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r11, r11w, r11l))                                       \
156*03ce13f7SAndroid Build Coastguard Worker  X(Reg_esi,   6, "esi",  Reg_rsi, U,W,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
157*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsi, si, sil))                                          \
158*03ce13f7SAndroid Build Coastguard Worker  X(Reg_edi,   7, "edi",  Reg_rdi, U,W,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
159*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rdi, di, dil))                                          \
160*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ebx,   3, "ebx",  Reg_rbx, 0,1,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
161*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rbx, bx, bl, bh))                                       \
162*03ce13f7SAndroid Build Coastguard Worker  X(Reg_esp,   4, "esp",  Reg_rsp, 0,0,1,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,         \
163*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsp, sp, spl))                                          \
164*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ebp,   5, "ebp",  Reg_rbp, 0,1,0,1,1, 1,0,1,0,0, 0, 0,1,0,0,0,         \
165*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rbp, bp, bpl))                                          \
166*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r12d, 12, "r12d", Reg_r12, 0,1,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
167*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r12, r12w, r12l))                                       \
168*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r13d, 13, "r13d", Reg_r13, 0,1,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
169*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r13, r13w, r13l))                                       \
170*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r14d, 14, "r14d", Reg_r14, 0,1,0,0,0, 1,0,1,0,0, 0, 0,1,0,0,0,         \
171*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r14, r14w, r14l))                                       \
172*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r15d, 15, "r15d", Reg_r15, 0,1,0,0,1, 1,0,1,0,0, 0, 0,1,0,0,0,         \
173*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r15, r15w, r15l))                                       \
174*03ce13f7SAndroid Build Coastguard Worker  /* 16-bit registers */                                                       \
175*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ax,    0, "ax",   Reg_rax, 1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
176*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rax, eax, al, ah))                                      \
177*03ce13f7SAndroid Build Coastguard Worker  X(Reg_cx,    1, "cx",   Reg_rcx, 1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
178*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rcx, ecx, cl, ch))                                      \
179*03ce13f7SAndroid Build Coastguard Worker  X(Reg_dx,    2, "dx",   Reg_rdx, 1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
180*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rdx, edx, dl, dh))                                      \
181*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r8w,   8, "r8w",  Reg_r8,  1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
182*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r8, r8d, r8l))                                          \
183*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r9w,   9, "r9w",  Reg_r9,  1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
184*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r9, r9d, r9l))                                          \
185*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r10w, 10, "r10w", Reg_r10, 1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
186*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r10, r10d, r10l))                                       \
187*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r11w, 11, "r11w", Reg_r11, 1,0,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
188*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r11, r11d, r11l))                                       \
189*03ce13f7SAndroid Build Coastguard Worker  X(Reg_si,    6, "si",   Reg_rsi, U,W,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
190*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsi, esi, sil))                                         \
191*03ce13f7SAndroid Build Coastguard Worker  X(Reg_di,    7, "di",   Reg_rdi, U,W,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
192*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rdi, edi, dil))                                         \
193*03ce13f7SAndroid Build Coastguard Worker  X(Reg_bx,    3, "bx",   Reg_rbx, 0,1,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
194*03ce13f7SAndroid Build Coastguard Worker    REGLIST4(RegX8664, rbx, ebx, bl, bh))                                      \
195*03ce13f7SAndroid Build Coastguard Worker  X(Reg_sp,    4, "sp",   Reg_rsp, 0,0,1,0,0, 1,0,0,0,0, 0, 0,0,0,0,0,         \
196*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rsp, esp, spl))                                         \
197*03ce13f7SAndroid Build Coastguard Worker  X(Reg_bp,    5, "bp",   Reg_rbp, 0,1,0,1,1, 1,0,0,1,0, 0, 0,0,1,0,0,         \
198*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, rbp, ebp, bpl))                                         \
199*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r12w, 12, "r12w", Reg_r12, 0,1,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
200*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r12, r12d, r12l))                                       \
201*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r13w, 13, "r13w", Reg_r13, 0,1,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
202*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r13, r13d, r13l))                                       \
203*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r14w, 14, "r14w", Reg_r14, 0,1,0,0,0, 1,0,0,1,0, 0, 0,0,1,0,0,         \
204*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r14, r14d, r14l))                                       \
205*03ce13f7SAndroid Build Coastguard Worker  X(Reg_r15w, 15, "r15w", Reg_r15, 0,1,0,0,1, 1,0,0,1,0, 0, 0,0,1,0,0,         \
206*03ce13f7SAndroid Build Coastguard Worker    REGLIST3(RegX8664, r15, r15d, r15l))                                       \
207*03ce13f7SAndroid Build Coastguard Worker  /* 8-bit registers */                                                        \
208*03ce13f7SAndroid Build Coastguard Worker  REGX8664_BYTEREG_TABLE                                                       \
209*03ce13f7SAndroid Build Coastguard Worker  /* End of GPR register set */
210*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, base, scratch, preserved, stackptr, frameptr,
211*03ce13f7SAndroid Build Coastguard Worker//          sboxres, isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8,
212*03ce13f7SAndroid Build Coastguard Worker//          is16To8, isTrunc8Rcvr, isAhRcvr, aliases)
213*03ce13f7SAndroid Build Coastguard Worker
214*03ce13f7SAndroid Build Coastguard Worker#if defined(_WIN64)  // Microsoft x86-64 ABI
215*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_BYTEREG_TABLE REGX8664_BYTEREG_TABLE2(0, 1)
216*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_GPR_TABLE REGX8664_GPR_TABLE2(0, 1)
217*03ce13f7SAndroid Build Coastguard Worker#else  // System V AMD64 ABI
218*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_BYTEREG_TABLE REGX8664_BYTEREG_TABLE2(1, 0)
219*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_GPR_TABLE REGX8664_GPR_TABLE2(1, 0)
220*03ce13f7SAndroid Build Coastguard Worker#endif
221*03ce13f7SAndroid Build Coastguard Worker
222*03ce13f7SAndroid Build Coastguard Worker// Note: It would be more appropriate to list the xmm register aliases as
223*03ce13f7SAndroid Build Coastguard Worker// REGLIST0(), but the corresponding empty initializer gives a syntax error, so
224*03ce13f7SAndroid Build Coastguard Worker// we use REGLIST1() to redundantly assign the register itself as an alias.
225*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_XMM_TABLE2(U, W)                                              \
226*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, base, scratch,preserved,stackptr,frameptr,sboxres,     \
227*03ce13f7SAndroid Build Coastguard Worker     isGPR,is64,is32,is16,is8, isXmm,                                          \
228*03ce13f7SAndroid Build Coastguard Worker     is64To8,is32To8,is16To8,isTrunc8Rcvr,isAhRcvr, aliases */                 \
229*03ce13f7SAndroid Build Coastguard Worker  /* xmm registers */                                                          \
230*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm0,   0, "xmm0",  Reg_xmm0,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
231*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
232*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm1,   1, "xmm1",  Reg_xmm1,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
233*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
234*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm2,   2, "xmm2",  Reg_xmm2,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
235*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
236*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm3,   3, "xmm3",  Reg_xmm3,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
237*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
238*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm4,   4, "xmm4",  Reg_xmm4,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
239*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
240*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm5,   5, "xmm5",  Reg_xmm5,  1,0,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
241*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
242*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm6,   6, "xmm6",  Reg_xmm6,  U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
243*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
244*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm7,   7, "xmm7",  Reg_xmm7,  U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
245*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
246*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm8,   8, "xmm8",  Reg_xmm8,  U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
247*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
248*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm9,   9, "xmm9",  Reg_xmm9,  U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
249*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
250*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm10, 10, "xmm10", Reg_xmm10, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
251*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
252*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm11, 11, "xmm11", Reg_xmm11, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
253*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
254*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm12, 12, "xmm12", Reg_xmm12, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
255*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
256*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm13, 13, "xmm13", Reg_xmm13, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
257*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
258*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm14, 14, "xmm14", Reg_xmm14, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
259*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
260*03ce13f7SAndroid Build Coastguard Worker  X(Reg_xmm15, 15, "xmm15", Reg_xmm15, U,W,0,0,0, 0,0,0,0,0, 1, 0,0,0,0,0,     \
261*03ce13f7SAndroid Build Coastguard Worker    NO_ALIASES())                                                              \
262*03ce13f7SAndroid Build Coastguard Worker  /* End of xmm register set */
263*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, base, scratch, preserved, stackptr, frameptr,
264*03ce13f7SAndroid Build Coastguard Worker//          sboxres, isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8,
265*03ce13f7SAndroid Build Coastguard Worker//          is16To8, isTrunc8Rcvr, isAhRcvr, aliases)
266*03ce13f7SAndroid Build Coastguard Worker
267*03ce13f7SAndroid Build Coastguard Worker#if defined(_WIN64)  // Microsoft x86-64 ABI
268*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_XMM_TABLE REGX8664_XMM_TABLE2(0, 1)
269*03ce13f7SAndroid Build Coastguard Worker#else  // System V AMD64 ABI
270*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_XMM_TABLE REGX8664_XMM_TABLE2(1, 0)
271*03ce13f7SAndroid Build Coastguard Worker#endif
272*03ce13f7SAndroid Build Coastguard Worker
273*03ce13f7SAndroid Build Coastguard Worker// We also provide a combined table, so that there is a namespace where
274*03ce13f7SAndroid Build Coastguard Worker// all of the registers are considered and have distinct numberings.
275*03ce13f7SAndroid Build Coastguard Worker// This is in contrast to the above, where the "encode" is based on how
276*03ce13f7SAndroid Build Coastguard Worker// the register numbers will be encoded in binaries and values can overlap.
277*03ce13f7SAndroid Build Coastguard Worker#define REGX8664_TABLE                                                         \
278*03ce13f7SAndroid Build Coastguard Worker  REGX8664_GPR_TABLE                                                           \
279*03ce13f7SAndroid Build Coastguard Worker  REGX8664_XMM_TABLE
280*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, base, scratch, preserved, stackptr, frameptr,
281*03ce13f7SAndroid Build Coastguard Worker//          sboxres, isGPR, is64, is32, is16, is8, isXmm, is64To8, is32To8,
282*03ce13f7SAndroid Build Coastguard Worker//          is16To8, isTrunc8Rcvr, isAhRcvr, aliases)
283*03ce13f7SAndroid Build Coastguard Worker
284*03ce13f7SAndroid Build Coastguard Worker#endif // SUBZERO_SRC_ICEINSTX8664_DEF
285