Changeset 192857 in webkit
- Timestamp:
- Nov 30, 2015, 8:59:02 PM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r192856 r192857 1 2015-11-30 Benjamin Poulain <bpoulain@apple.com> 2 3 [JSC] Add Sqrt to B3 4 https://bugs.webkit.org/show_bug.cgi?id=151692 5 6 Reviewed by Geoffrey Garen. 7 8 * assembler/MacroAssemblerX86Common.h: 9 (JSC::MacroAssemblerX86Common::sqrtDouble): 10 * assembler/X86Assembler.h: 11 (JSC::X86Assembler::sqrtsd_mr): 12 * b3/B3LowerToAir.cpp: 13 (JSC::B3::Air::LowerToAir::lower): 14 * b3/B3Opcode.cpp: 15 (WTF::printInternal): 16 * b3/B3Opcode.h: 17 * b3/B3Validate.cpp: 18 * b3/B3Value.cpp: 19 (JSC::B3::Value::effects): 20 (JSC::B3::Value::key): 21 (JSC::B3::Value::typeFor): 22 * b3/air/AirOpcode.opcodes: 23 * b3/testb3.cpp: 24 (JSC::B3::testSqrtArg): 25 (JSC::B3::testSqrtImm): 26 (JSC::B3::testSqrtMem): 27 (JSC::B3::run): 28 * ftl/FTLB3Output.h: 29 (JSC::FTL::Output::doubleSqrt): 30 1 31 2015-11-30 Filip Pizlo <fpizlo@apple.com> 2 32 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r192812 r192857 506 506 } 507 507 508 void sqrtDouble(Address src, FPRegisterID dst) 509 { 510 m_assembler.sqrtsd_mr(src.offset, src.base, dst); 511 } 512 508 513 void absDouble(FPRegisterID src, FPRegisterID dst) 509 514 { -
trunk/Source/JavaScriptCore/assembler/X86Assembler.h
r192699 r192857 2138 2138 m_formatter.twoByteOp(OP2_SQRTSD_VsdWsd, (RegisterID)dst, (RegisterID)src); 2139 2139 } 2140 2140 2141 void sqrtsd_mr(int offset, RegisterID base, XMMRegisterID dst) 2142 { 2143 m_formatter.prefix(PRE_SSE_F2); 2144 m_formatter.twoByteOp(OP2_SQRTSD_VsdWsd, (RegisterID)dst, base, offset); 2145 } 2146 2141 2147 // Misc instructions: 2142 2148 -
trunk/Source/JavaScriptCore/b3/B3LowerToAir.cpp
r192856 r192857 1464 1464 } 1465 1465 1466 case Sqrt: { 1467 appendUnOp<Air::Oops, Air::Oops, SqrtDouble>(m_value->child(0)); 1468 return; 1469 } 1470 1466 1471 case BitwiseCast: { 1467 1472 appendUnOp<Air::Oops, Move64ToDouble, MoveDoubleTo64>(m_value->child(0)); -
trunk/Source/JavaScriptCore/b3/B3Opcode.cpp
r192699 r192857 138 138 out.print("ZShr"); 139 139 return; 140 case Sqrt: 141 out.print("Sqrt"); 142 return; 140 143 case BitwiseCast: 141 144 out.print("BitwiseCast"); -
trunk/Source/JavaScriptCore/b3/B3Opcode.h
r192699 r192857 82 82 ZShr, // Logical Shift. 83 83 84 // Double math. 85 Sqrt, 86 84 87 // Casts and such. 85 88 // Bitwise Cast of Double->Int64 or Int64->Double -
trunk/Source/JavaScriptCore/b3/B3Validate.cpp
r192699 r192857 198 198 VALIDATE(value->type() == Int32, ("At ", *value)); 199 199 break; 200 case Sqrt: 200 201 case FRound: 201 202 VALIDATE(value->numChildren() == 1, ("At ", *value)); -
trunk/Source/JavaScriptCore/b3/B3Value.cpp
r192699 r192857 326 326 case SShr: 327 327 case ZShr: 328 case Sqrt: 328 329 case BitwiseCast: 329 330 case SExt8: … … 401 402 return ValueKey(opcode(), type()); 402 403 case Identity: 404 case Sqrt: 403 405 case SExt8: 404 406 case SExt16: … … 497 499 case SShr: 498 500 case ZShr: 501 case Sqrt: 499 502 case CheckAdd: 500 503 case CheckSub: -
trunk/Source/JavaScriptCore/b3/air/AirOpcode.opcodes
r192699 r192857 204 204 Addr 205 205 206 SqrtDouble U:F, UD:F 207 Tmp, Tmp 208 Addr, Tmp 209 206 210 ConvertInt32ToDouble U:G, D:F 207 211 Tmp, Tmp -
trunk/Source/JavaScriptCore/b3/testb3.cpp
r192841 r192857 1883 1883 1884 1884 CHECK(compileAndRun<uint32_t>(proc, a) == (a >> b)); 1885 } 1886 1887 void testSqrtArg(double a) 1888 { 1889 Procedure proc; 1890 BasicBlock* root = proc.addBlock(); 1891 root->appendNew<ControlValue>( 1892 proc, Return, Origin(), 1893 root->appendNew<Value>( 1894 proc, Sqrt, Origin(), 1895 root->appendNew<ArgumentRegValue>(proc, Origin(), FPRInfo::argumentFPR0))); 1896 1897 CHECK(isIdentical(compileAndRun<double>(proc, a), sqrt(a))); 1898 } 1899 1900 void testSqrtImm(double a) 1901 { 1902 Procedure proc; 1903 BasicBlock* root = proc.addBlock(); 1904 Value* argument = root->appendNew<ConstDoubleValue>(proc, Origin(), a); 1905 root->appendNew<ControlValue>( 1906 proc, Return, Origin(), 1907 root->appendNew<Value>(proc, Sqrt, Origin(), argument)); 1908 1909 CHECK(isIdentical(compileAndRun<double>(proc), sqrt(a))); 1910 } 1911 1912 void testSqrtMem(double a) 1913 { 1914 Procedure proc; 1915 BasicBlock* root = proc.addBlock(); 1916 Value* address = root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0); 1917 MemoryValue* loadDouble = root->appendNew<MemoryValue>(proc, Load, Double, Origin(), address); 1918 root->appendNew<ControlValue>( 1919 proc, Return, Origin(), 1920 root->appendNew<Value>(proc, Sqrt, Origin(), loadDouble)); 1921 1922 CHECK(isIdentical(compileAndRun<double>(proc, &a), sqrt(a))); 1885 1923 } 1886 1924 … … 5683 5721 RUN(testZShrArgImm32(0xffffffff, 63)); 5684 5722 5723 RUN_UNARY(testSqrtArg, doubleOperands()); 5724 RUN_UNARY(testSqrtImm, doubleOperands()); 5725 RUN_UNARY(testSqrtMem, doubleOperands()); 5726 5685 5727 RUN_UNARY(testDoubleArgToInt64BitwiseCast, doubleOperands()); 5686 5728 RUN_UNARY(testDoubleImmToInt64BitwiseCast, doubleOperands()); -
trunk/Source/JavaScriptCore/ftl/FTLB3Output.h
r192699 r192857 167 167 LValue doublePowi(LValue xOperand, LValue yOperand) { CRASH(); } 168 168 169 LValue doubleSqrt(LValue value) { CRASH(); }169 LValue doubleSqrt(LValue value) { return m_block->appendNew<B3::Value>(m_proc, B3::Sqrt, origin(), value); } 170 170 171 171 LValue doubleLog(LValue value) { CRASH(); }
Note:
See TracChangeset
for help on using the changeset viewer.