Changeset 246134 in webkit
- Timestamp:
- Jun 5, 2019 5:28:53 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r246075 r246134 1 2019-06-05 Justin Michaud <justin_michaud@apple.com> 2 3 WebAssembly: pow functions returns 0 when exponent 1.0 or -1.0 4 https://bugs.webkit.org/show_bug.cgi?id=198106 5 6 Reviewed by Saam Barati. 7 8 * wasm/regress/selectf64.js: Added. 9 * wasm/regress/selectf64.wasm: Added. 10 * wasm/regress/selectf64.wat: Added. 11 1 12 2019-06-04 Tadeu Zagallo <tzagallo@apple.com> 2 13 -
trunk/Source/JavaScriptCore/ChangeLog
r246126 r246134 1 2019-06-05 Justin Michaud <justin_michaud@apple.com> 2 3 WebAssembly: pow functions returns 0 when exponent 1.0 or -1.0 4 https://bugs.webkit.org/show_bug.cgi?id=198106 5 6 Reviewed by Saam Barati. 7 8 Fix bug caused by using fcsel sX instead of fcsel dX on an f64 value in moveDoubleConditionally32. 9 10 * assembler/MacroAssemblerARM64.h: 11 (JSC::MacroAssemblerARM64::moveDoubleConditionally32): 12 1 13 2019-06-05 Alex Christensen <achristensen@webkit.org> 2 14 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
r242252 r246134 2460 2460 { 2461 2461 m_assembler.cmp<32>(left, right); 2462 m_assembler.fcsel< 32>(dest, thenCase, elseCase, ARM64Condition(cond));2462 m_assembler.fcsel<64>(dest, thenCase, elseCase, ARM64Condition(cond)); 2463 2463 } 2464 2464 -
trunk/Source/JavaScriptCore/assembler/testmasm.cpp
r244694 r246134 936 936 } 937 937 938 void testMoveDoubleConditionally32() 939 { 940 #if CPU(X86_64) | CPU(ARM64) 941 double arg1 = 0; 942 double arg2 = 0; 943 const double zero = -0; 944 945 const double chosenDouble = 6.00000059604644775390625; 946 CHECK_EQ(static_cast<double>(static_cast<float>(chosenDouble)) == chosenDouble, false); 947 948 auto sel = compile([&] (CCallHelpers& jit) { 949 jit.emitFunctionPrologue(); 950 jit.loadDouble(CCallHelpers::TrustedImmPtr(&zero), FPRInfo::returnValueFPR); 951 jit.loadDouble(CCallHelpers::TrustedImmPtr(&arg1), FPRInfo::fpRegT1); 952 jit.loadDouble(CCallHelpers::TrustedImmPtr(&arg2), FPRInfo::fpRegT2); 953 954 jit.move(MacroAssembler::TrustedImm32(-1), GPRInfo::regT0); 955 jit.moveDoubleConditionally32(MacroAssembler::Equal, GPRInfo::regT0, GPRInfo::regT0, FPRInfo::fpRegT1, FPRInfo::fpRegT2, FPRInfo::returnValueFPR); 956 957 jit.emitFunctionEpilogue(); 958 jit.ret(); 959 }); 960 961 arg1 = chosenDouble; 962 arg2 = 43; 963 CHECK_EQ(invoke<double>(sel), chosenDouble); 964 965 arg1 = 43; 966 arg2 = chosenDouble; 967 CHECK_EQ(invoke<double>(sel), 43.0); 968 969 #endif 970 } 971 972 void testMoveDoubleConditionally64() 973 { 974 #if CPU(X86_64) | CPU(ARM64) 975 double arg1 = 0; 976 double arg2 = 0; 977 const double zero = -0; 978 979 const double chosenDouble = 6.00000059604644775390625; 980 CHECK_EQ(static_cast<double>(static_cast<float>(chosenDouble)) == chosenDouble, false); 981 982 auto sel = compile([&] (CCallHelpers& jit) { 983 jit.emitFunctionPrologue(); 984 jit.loadDouble(CCallHelpers::TrustedImmPtr(&zero), FPRInfo::returnValueFPR); 985 jit.loadDouble(CCallHelpers::TrustedImmPtr(&arg1), FPRInfo::fpRegT1); 986 jit.loadDouble(CCallHelpers::TrustedImmPtr(&arg2), FPRInfo::fpRegT2); 987 988 jit.move(MacroAssembler::TrustedImm64(-1), GPRInfo::regT0); 989 jit.moveDoubleConditionally64(MacroAssembler::Equal, GPRInfo::regT0, GPRInfo::regT0, FPRInfo::fpRegT1, FPRInfo::fpRegT2, FPRInfo::returnValueFPR); 990 991 jit.emitFunctionEpilogue(); 992 jit.ret(); 993 }); 994 995 arg1 = chosenDouble; 996 arg2 = 43; 997 CHECK_EQ(invoke<double>(sel), chosenDouble); 998 999 arg1 = 43; 1000 arg2 = chosenDouble; 1001 CHECK_EQ(invoke<double>(sel), 43.0); 1002 1003 #endif 1004 } 1005 938 1006 #define RUN(test) do { \ 939 1007 if (!shouldRun(#test)) \ … … 1018 1086 1019 1087 RUN(testByteSwap()); 1088 RUN(testMoveDoubleConditionally32()); 1089 RUN(testMoveDoubleConditionally64()); 1020 1090 1021 1091 if (tasks.isEmpty())
Note: See TracChangeset
for help on using the changeset viewer.