Changeset 219740 in webkit for trunk/Source/JavaScriptCore/assembler/X86Assembler.h
- Timestamp:
- Jul 21, 2017, 1:44:33 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/X86Assembler.h
r218782 r219740 42 42 namespace X86Registers { 43 43 44 #define FOR_EACH_CPU_REGISTER(V) \45 FOR_EACH_CPU_GPREGISTER(V) \46 FOR_EACH_CPU_SPECIAL_REGISTER(V) \47 FOR_EACH_CPU_FPREGISTER(V)48 49 // The following are defined as pairs of the following value:50 // 1. type of the storage needed to save the register value by the JIT probe.51 // 2. name of the register.52 #define FOR_EACH_CPU_GPREGISTER(V) \53 V(void*, eax) \54 V(void*, ecx) \55 V(void*, edx) \56 V(void*, ebx) \57 V(void*, esp) \58 V(void*, ebp) \59 V(void*, esi) \60 V(void*, edi) \61 FOR_EACH_X86_64_CPU_GPREGISTER(V)62 63 #define FOR_EACH_CPU_SPECIAL_REGISTER(V) \64 V(void*, eip) \65 V(void*, eflags) \66 67 // Note: the JITs only stores double values in the FP registers.68 #define FOR_EACH_CPU_FPREGISTER(V) \69 V(double, xmm0) \70 V(double, xmm1) \71 V(double, xmm2) \72 V(double, xmm3) \73 V(double, xmm4) \74 V(double, xmm5) \75 V(double, xmm6) \76 V(double, xmm7) \77 FOR_EACH_X86_64_CPU_FPREGISTER(V)78 79 #if CPU(X86)80 81 #define FOR_EACH_X86_64_CPU_GPREGISTER(V) // Nothing to add.82 #define FOR_EACH_X86_64_CPU_FPREGISTER(V) // Nothing to add.83 84 #elif CPU(X86_64)85 86 #define FOR_EACH_X86_64_CPU_GPREGISTER(V) \87 V(void*, r8) \88 V(void*, r9) \89 V(void*, r10) \90 V(void*, r11) \91 V(void*, r12) \92 V(void*, r13) \93 V(void*, r14) \94 V(void*, r15)95 96 #define FOR_EACH_X86_64_CPU_FPREGISTER(V) \97 V(double, xmm8) \98 V(double, xmm9) \99 V(double, xmm10) \100 V(double, xmm11) \101 V(double, xmm12) \102 V(double, xmm13) \103 V(double, xmm14) \104 V(double, xmm15)105 106 #endif // CPU(X86_64)107 108 44 typedef enum { 109 #define DECLARE_REGISTER(_type, _regName) _regName, 110 FOR_EACH_CPU_GPREGISTER(DECLARE_REGISTER) 111 #undef DECLARE_REGISTER 45 eax, 46 ecx, 47 edx, 48 ebx, 49 esp, 50 ebp, 51 esi, 52 edi, 53 #if CPU(X86_64) 54 r8, 55 r9, 56 r10, 57 r11, 58 r12, 59 r13, 60 r14, 61 r15 62 #endif 112 63 } RegisterID; 113 64 114 65 typedef enum { 115 #define DECLARE_REGISTER(_type, _regName) _regName, 116 FOR_EACH_CPU_FPREGISTER(DECLARE_REGISTER) 117 #undef DECLARE_REGISTER 66 eip, 67 eflags 68 } SPRegisterID; 69 70 typedef enum { 71 xmm0, 72 xmm1, 73 xmm2, 74 xmm3, 75 xmm4, 76 xmm5, 77 xmm6, 78 xmm7, 79 #if CPU(X86_64) 80 xmm8, 81 xmm9, 82 xmm10, 83 xmm11, 84 xmm12, 85 xmm13, 86 xmm14, 87 xmm15 88 #endif 118 89 } XMMRegisterID; 119 90 … … 133 104 #endif 134 105 } 106 static constexpr unsigned numberOfRegisters() { return lastRegister() - firstRegister() + 1; } 107 108 typedef X86Registers::SPRegisterID SPRegisterID; 109 110 static constexpr SPRegisterID firstSPRegister() { return X86Registers::eip; } 111 static constexpr SPRegisterID lastSPRegister() { return X86Registers::eflags; } 112 static constexpr unsigned numberOfSPRegisters() { return lastSPRegister() - firstSPRegister() + 1; } 135 113 136 114 typedef X86Registers::XMMRegisterID XMMRegisterID; … … 146 124 #endif 147 125 } 148 126 static constexpr unsigned numberOfFPRegisters() { return lastFPRegister() - firstFPRegister() + 1; } 127 128 static const char* gprName(RegisterID id) 129 { 130 ASSERT(id >= firstRegister() && id <= lastRegister()); 131 static const char* const nameForRegister[numberOfRegisters()] = { 132 #if CPU(X86_64) 133 "rax", "rcx", "rdx", "rbx", 134 "rsp", "rbp", "rsi", "rdi", 135 "r8", "r9", "r10", "r11", 136 "r12", "r13", "r14", "r15" 137 #else 138 "eax", "ecx", "edx", "ebx", 139 "esp", "ebp", "esi", "edi", 140 #endif 141 }; 142 return nameForRegister[id]; 143 } 144 145 static const char* sprName(SPRegisterID id) 146 { 147 ASSERT(id >= firstSPRegister() && id <= lastSPRegister()); 148 static const char* const nameForRegister[numberOfSPRegisters()] = { 149 #if CPU(X86_64) 150 "rip", "rflags" 151 #else 152 "eip", "eflags" 153 #endif 154 }; 155 return nameForRegister[id]; 156 } 157 158 static const char* fprName(FPRegisterID reg) 159 { 160 ASSERT(reg >= firstFPRegister() && reg <= lastFPRegister()); 161 static const char* const nameForRegister[numberOfFPRegisters()] = { 162 "xmm0", "xmm1", "xmm2", "xmm3", 163 "xmm4", "xmm5", "xmm6", "xmm7", 164 #if CPU(X86_64) 165 "xmm8", "xmm9", "xmm10", "xmm11", 166 "xmm12", "xmm13", "xmm14", "xmm15" 167 #endif 168 }; 169 return nameForRegister[reg]; 170 } 171 149 172 typedef enum { 150 173 ConditionO,
Note:
See TracChangeset
for help on using the changeset viewer.