Changeset 291745 in webkit
- Timestamp:
- Mar 23, 2022, 7:12:54 AM (5 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
assembler/MacroAssembler.h (modified) (2 diffs)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
wasm/js/WasmToJS.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r291736 r291745 1 2022-03-23 Xan Lopez <xan@igalia.com> 2 3 [JSC] Add DoNotHaveTagRegisters mode to unboxDouble 4 https://bugs.webkit.org/show_bug.cgi?id=238018 5 6 Reviewed by Yusuke Suzuki. 7 8 Wasm cannot use unboxDouble as-is because 9 GPRInfo::numberTagRegister is not available. Add a 10 DoNotHaveTagRegister mode so we can get rid of some duplicated 11 code. 12 13 * assembler/MacroAssembler.h: 14 (JSC::MacroAssembler::add64): 15 * jit/AssemblyHelpers.h: 16 (JSC::AssemblyHelpers::unboxDoubleWithoutAssertions): 17 (JSC::AssemblyHelpers::unboxDouble): 18 * wasm/js/WasmToJS.cpp: 19 (JSC::Wasm::wasmToJS): 20 1 21 2022-03-22 Yusuke Suzuki <ysuzuki@apple.com> 2 22 -
trunk/Source/JavaScriptCore/assembler/MacroAssembler.h
r290647 r291745 154 154 155 155 #if CPU(ARM64) || CPU(X86_64) || CPU(RISCV64) 156 using MacroAssemblerBase::add64; 156 157 using MacroAssemblerBase::and64; 157 158 using MacroAssemblerBase::convertInt32ToDouble; … … 1461 1462 } 1462 1463 1464 void add64(TrustedImm64 imm, RegisterID src, RegisterID dest) 1465 { 1466 RegisterID scratch = scratchRegister(); 1467 move(imm, scratch); 1468 add64(scratch, src, dest); 1469 } 1463 1470 #endif // USE(JSVALUE64) 1464 1471 -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r291217 r291745 1379 1379 return gpr; 1380 1380 } 1381 FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr) 1382 { 1383 add64(GPRInfo::numberTagRegister, gpr, resultGPR); 1381 FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters) 1382 { 1383 if (mode == DoNotHaveTagRegisters) 1384 add64(TrustedImm64(JSValue::NumberTag), gpr, resultGPR); 1385 else 1386 add64(GPRInfo::numberTagRegister, gpr, resultGPR); 1384 1387 move64ToDouble(resultGPR, fpr); 1385 1388 return fpr; 1386 1389 } 1387 FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr )1390 FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters) 1388 1391 { 1389 1392 jitAssertIsJSDouble(gpr); 1390 return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr );1393 return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr, mode); 1391 1394 } 1392 1395 -
trunk/Source/JavaScriptCore/wasm/js/WasmToJS.cpp
r286769 r291745 329 329 330 330 isDouble.link(&jit); 331 jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2); 332 jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR); 333 jit.move64ToDouble(GPRInfo::returnValueGPR, dest); 331 jit.unboxDouble(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters); 334 332 jit.convertDoubleToFloat(dest, dest); 335 333 done.append(jit.jump()); … … 360 358 361 359 isDouble.link(&jit); 362 jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2); 363 jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR); 364 jit.move64ToDouble(GPRInfo::returnValueGPR, dest); 360 jit.unboxDouble(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters); 365 361 done.append(jit.jump()); 366 362
Note:
See TracChangeset
for help on using the changeset viewer.