Changeset 220871 in webkit
- Timestamp:
- Aug 17, 2017, 12:57:46 PM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r220870 r220871 1 2017-08-17 Mark Lam <mark.lam@apple.com> 2 3 Only use 16 VFP registers if !CPU(ARM_NEON). 4 https://bugs.webkit.org/show_bug.cgi?id=175514 5 6 Reviewed by JF Bastien. 7 8 Deleted q16-q31 FPQuadRegisterID enums in ARMv7Assembler.h. The NEON spec 9 says that there are only 16 128-bit NEON registers. This change is merely to 10 correct the code documentation of these registers. The FPQuadRegisterID are 11 currently unused. 12 13 * assembler/ARMAssembler.h: 14 (JSC::ARMAssembler::lastFPRegister): 15 (JSC::ARMAssembler::fprName): 16 * assembler/ARMv7Assembler.h: 17 (JSC::ARMv7Assembler::lastFPRegister): 18 (JSC::ARMv7Assembler::fprName): 19 * assembler/MacroAssemblerARM.cpp: 20 * assembler/MacroAssemblerARMv7.cpp: 21 1 22 2017-08-17 Andreas Kling <akling@apple.com> 2 23 -
trunk/Source/JavaScriptCore/assembler/ARMAssembler.h
r219740 r220871 88 88 d14, 89 89 d15, 90 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 90 91 d16, 91 92 d17, … … 104 105 d30, 105 106 d31, 107 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 106 108 107 109 // Pseudonyms for some of the registers. … … 135 137 136 138 static constexpr FPRegisterID firstFPRegister() { return ARMRegisters::d0; } 139 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 137 140 static constexpr FPRegisterID lastFPRegister() { return ARMRegisters::d31; } 141 #else 142 static constexpr FPRegisterID lastFPRegister() { return ARMRegisters::d15; } 143 #endif 138 144 static constexpr unsigned numberOfFPRegisters() { return lastFPRegister() - firstFPRegister() + 1; } 139 145 … … 167 173 "d8", "d9", "d10", "d11", 168 174 "d12", "d13", "d14", "d15", 175 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 169 176 "d16", "d17", "d18", "d19", 170 177 "d20", "d21", "d22", "d23", 171 178 "d24", "d25", "d26", "d27", 172 179 "d28", "d29", "d30", "d31" 180 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 173 181 }; 174 182 return nameForRegister[id]; -
trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h
r219740 r220871 124 124 d14, 125 125 d15, 126 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 126 127 d16, 127 128 d17, … … 140 141 d30, 141 142 d31, 143 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 142 144 } FPDoubleRegisterID; 143 145 146 #if CPU(ARM_NEON) 144 147 typedef enum { 145 148 q0, … … 159 162 q14, 160 163 q15, 161 q16,162 q17,163 q18,164 q19,165 q20,166 q21,167 q22,168 q23,169 q24,170 q25,171 q26,172 q27,173 q28,174 q29,175 q30,176 q31,177 164 } FPQuadRegisterID; 165 #endif // CPU(ARM_NEON) 178 166 179 167 inline FPSingleRegisterID asSingle(FPDoubleRegisterID reg) … … 434 422 typedef ARMRegisters::FPSingleRegisterID FPSingleRegisterID; 435 423 typedef ARMRegisters::FPDoubleRegisterID FPDoubleRegisterID; 424 #if CPU(ARM_NEON) 436 425 typedef ARMRegisters::FPQuadRegisterID FPQuadRegisterID; 426 #endif 437 427 typedef ARMRegisters::SPRegisterID SPRegisterID; 438 428 typedef FPDoubleRegisterID FPRegisterID; … … 447 437 448 438 static constexpr FPRegisterID firstFPRegister() { return ARMRegisters::d0; } 439 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 449 440 static constexpr FPRegisterID lastFPRegister() { return ARMRegisters::d31; } 441 #else 442 static constexpr FPRegisterID lastFPRegister() { return ARMRegisters::d15; } 443 #endif 450 444 static constexpr unsigned numberOfFPRegisters() { return lastFPRegister() - firstFPRegister() + 1; } 451 445 … … 479 473 "d8", "d9", "d10", "d11", 480 474 "d12", "d13", "d14", "d15", 475 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 481 476 "d16", "d17", "d18", "d19", 482 477 "d20", "d21", "d22", "d23", 483 478 "d24", "d25", "d26", "d27", 484 479 "d28", "d29", "d30", "d31" 480 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 485 481 }; 486 482 return nameForRegister[id]; -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp
r220850 r220871 154 154 #define PROBE_CPU_D14_OFFSET (PROBE_FIRST_FPREG_OFFSET + (14 * FPREG_SIZE)) 155 155 #define PROBE_CPU_D15_OFFSET (PROBE_FIRST_FPREG_OFFSET + (15 * FPREG_SIZE)) 156 157 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 156 158 #define PROBE_CPU_D16_OFFSET (PROBE_FIRST_FPREG_OFFSET + (16 * FPREG_SIZE)) 157 159 #define PROBE_CPU_D17_OFFSET (PROBE_FIRST_FPREG_OFFSET + (17 * FPREG_SIZE)) … … 172 174 173 175 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (32 * FPREG_SIZE)) 176 #else 177 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (16 * FPREG_SIZE)) 178 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 174 179 175 180 #define OUT_SIZE GPREG_SIZE … … 223 228 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d14]) == PROBE_CPU_D14_OFFSET, ProbeContext_cpu_d14_offset_matches_ctiMasmProbeTrampoline); 224 229 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d15]) == PROBE_CPU_D15_OFFSET, ProbeContext_cpu_d15_offset_matches_ctiMasmProbeTrampoline); 230 231 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 225 232 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d16]) == PROBE_CPU_D16_OFFSET, ProbeContext_cpu_d16_offset_matches_ctiMasmProbeTrampoline); 226 233 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d17]) == PROBE_CPU_D17_OFFSET, ProbeContext_cpu_d17_offset_matches_ctiMasmProbeTrampoline); … … 239 246 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d30]) == PROBE_CPU_D30_OFFSET, ProbeContext_cpu_d30_offset_matches_ctiMasmProbeTrampoline); 240 247 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d31]) == PROBE_CPU_D31_OFFSET, ProbeContext_cpu_d31_offset_matches_ctiMasmProbeTrampoline); 248 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 241 249 242 250 COMPILE_ASSERT(sizeof(ProbeContext) == PROBE_SIZE, ProbeContext_size_matches_ctiMasmProbeTrampoline); … … 292 300 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D0_OFFSET) "\n" 293 301 "vstmia.64 ip!, { d0-d15 }" "\n" 302 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 294 303 "vstmia.64 ip!, { d16-d31 }" "\n" 295 304 #endif 296 305 "mov fp, sp" "\n" // Save the ProbeContext*. 297 306 … … 350 359 // out of the ProbeContext before returning. 351 360 361 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 352 362 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D31_OFFSET + FPREG_SIZE) "\n" 353 363 "vldmdb.64 ip!, { d16-d31 }" "\n" 354 364 "vldmdb.64 ip!, { d0-d15 }" "\n" 365 #else 366 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D15_OFFSET + FPREG_SIZE) "\n" 367 "vldmdb.64 ip!, { d0-d15 }" "\n" 368 #endif 369 355 370 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R11_OFFSET + GPREG_SIZE) "\n" 356 371 "ldmdb ip, { r0-r11 }" "\n" -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.cpp
r220823 r220871 90 90 #define PROBE_CPU_D14_OFFSET (PROBE_FIRST_FPREG_OFFSET + (14 * FPREG_SIZE)) 91 91 #define PROBE_CPU_D15_OFFSET (PROBE_FIRST_FPREG_OFFSET + (15 * FPREG_SIZE)) 92 93 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 92 94 #define PROBE_CPU_D16_OFFSET (PROBE_FIRST_FPREG_OFFSET + (16 * FPREG_SIZE)) 93 95 #define PROBE_CPU_D17_OFFSET (PROBE_FIRST_FPREG_OFFSET + (17 * FPREG_SIZE)) … … 108 110 109 111 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (32 * FPREG_SIZE)) 112 #else 113 #define PROBE_SIZE (PROBE_FIRST_FPREG_OFFSET + (16 * FPREG_SIZE)) 114 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 110 115 111 116 #define OUT_SIZE GPREG_SIZE … … 160 165 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d15]) == PROBE_CPU_D15_OFFSET, ProbeContext_cpu_d15_offset_matches_ctiMasmProbeTrampoline); 161 166 167 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 162 168 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d16]) == PROBE_CPU_D16_OFFSET, ProbeContext_cpu_d16_offset_matches_ctiMasmProbeTrampoline); 163 169 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d17]) == PROBE_CPU_D17_OFFSET, ProbeContext_cpu_d17_offset_matches_ctiMasmProbeTrampoline); … … 176 182 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d30]) == PROBE_CPU_D30_OFFSET, ProbeContext_cpu_d30_offset_matches_ctiMasmProbeTrampoline); 177 183 COMPILE_ASSERT(PROBE_OFFSETOF(cpu.fprs[ARMRegisters::d31]) == PROBE_CPU_D31_OFFSET, ProbeContext_cpu_d31_offset_matches_ctiMasmProbeTrampoline); 184 #endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 178 185 179 186 COMPILE_ASSERT(sizeof(ProbeContext) == PROBE_SIZE, ProbeContext_size_matches_ctiMasmProbeTrampoline); 180 187 #undef PROBE_OFFSETOF 181 188 182 189 asm ( 183 190 ".text" "\n" … … 231 238 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D0_OFFSET) "\n" 232 239 "vstmia.64 ip!, { d0-d15 }" "\n" 240 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 233 241 "vstmia.64 ip!, { d16-d31 }" "\n" 234 242 #endif 235 243 "mov fp, sp" "\n" // Save the ProbeContext*. 236 244 … … 290 298 // out of the ProbeContext before returning. 291 299 300 #if CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32) 292 301 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D31_OFFSET + FPREG_SIZE) "\n" 293 302 "vldmdb.64 ip!, { d16-d31 }" "\n" 294 303 "vldmdb.64 ip!, { d0-d15 }" "\n" 304 #else 305 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_D15_OFFSET + FPREG_SIZE) "\n" 306 "vldmdb.64 ip!, { d0-d15 }" "\n" 307 #endif 295 308 296 309 "add ip, sp, #" STRINGIZE_VALUE_OF(PROBE_CPU_R11_OFFSET + GPREG_SIZE) "\n" -
trunk/Source/WTF/ChangeLog
r220823 r220871 1 2017-08-17 Mark Lam <mark.lam@apple.com> 2 3 Only use 16 VFP registers if !CPU(ARM_NEON). 4 https://bugs.webkit.org/show_bug.cgi?id=175514 5 6 Reviewed by JF Bastien. 7 8 If CPU(ARM_NEON) is not enabled, we'll conservatively assume only VFP2 support is 9 available. Hence, we'll only the first 16 FPDoubleRegisterIDs are available. 10 11 For reference, see: 12 NEON registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJACABEJ.html 13 VFP2 and VFP3 registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CIHDIBDG.html 14 NEON to VFP register mapping: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJAIJHFC.html 15 16 This is mostly for GTK toolchains which may target older ARM CPUs which only have 17 VFP2 support. 18 19 * wtf/Platform.h: 20 1 21 2017-08-16 Mark Lam <mark.lam@apple.com> 2 22 -
trunk/Source/WTF/wtf/Platform.h
r220823 r220871 340 340 #endif 341 341 342 /* If CPU(ARM_NEON) is not enabled, we'll conservatively assume only VFP2 or VFPv3D16 343 support is available. Hence, only the first 16 64-bit floating point registers 344 are available. See: 345 NEON registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJACABEJ.html 346 VFP2 and VFP3 registers: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CIHDIBDG.html 347 NEON to VFP register mapping: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/CJAIJHFC.html 348 */ 349 #if CPU(ARM_NEON) 350 #define WTF_CPU_ARM_VFP_V3_D32 1 351 #else 352 #define WTF_CPU_ARM_VFP_V2 1 353 #endif 354 342 355 #if defined(__ARM_ARCH_7K__) 343 356 #define WTF_CPU_APPLE_ARMV7K 1
Note:
See TracChangeset
for help on using the changeset viewer.