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