Changeset 224843 in webkit for trunk/Source/JavaScriptCore/assembler/testmasm.cpp
- Timestamp:
- Nov 14, 2017, 1:53:41 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/assembler/testmasm.cpp
r222058 r224843 33 33 #include "LinkBuffer.h" 34 34 #include "ProbeContext.h" 35 #include <limits> 35 36 #include <wtf/Compiler.h> 36 37 #include <wtf/DataLog.h> … … 170 171 }), 42); 171 172 } 173 174 // branchTruncateDoubleToInt32(), when encountering Infinity, -Infinity or a 175 // Nan, should either yield 0 in dest or fail. 176 void testBranchTruncateDoubleToInt32(double val, int32_t expected) 177 { 178 const uint64_t valAsUInt = *reinterpret_cast<uint64_t*>(&val); 179 #if CPU(BIG_ENDIAN) 180 const bool isBigEndian = true; 181 #else 182 const bool isBigEndian = false; 183 #endif 184 CHECK_EQ(compileAndRun<int>([&] (CCallHelpers& jit) { 185 jit.emitFunctionPrologue(); 186 jit.subPtr(CCallHelpers::TrustedImm32(8), MacroAssembler::stackPointerRegister); 187 if (isBigEndian) { 188 jit.store32(CCallHelpers::TrustedImm32(valAsUInt >> 32), 189 MacroAssembler::stackPointerRegister); 190 jit.store32(CCallHelpers::TrustedImm32(valAsUInt & 0xffffffff), 191 MacroAssembler::Address(MacroAssembler::stackPointerRegister, 4)); 192 } else { 193 jit.store32(CCallHelpers::TrustedImm32(valAsUInt & 0xffffffff), 194 MacroAssembler::stackPointerRegister); 195 jit.store32(CCallHelpers::TrustedImm32(valAsUInt >> 32), 196 MacroAssembler::Address(MacroAssembler::stackPointerRegister, 4)); 197 } 198 jit.loadDouble(MacroAssembler::stackPointerRegister, FPRInfo::fpRegT0); 199 200 MacroAssembler::Jump done; 201 done = jit.branchTruncateDoubleToInt32(FPRInfo::fpRegT0, GPRInfo::returnValueGPR, MacroAssembler::BranchIfTruncateSuccessful); 202 203 jit.move(CCallHelpers::TrustedImm32(0), GPRInfo::returnValueGPR); 204 205 done.link(&jit); 206 jit.addPtr(CCallHelpers::TrustedImm32(8), MacroAssembler::stackPointerRegister); 207 jit.emitFunctionEpilogue(); 208 jit.ret(); 209 }), expected); 210 } 211 172 212 173 213 #if ENABLE(MASM_PROBE) … … 691 731 692 732 RUN(testSimple()); 733 RUN(testBranchTruncateDoubleToInt32(0, 0)); 734 RUN(testBranchTruncateDoubleToInt32(42, 42)); 735 RUN(testBranchTruncateDoubleToInt32(42.7, 42)); 736 RUN(testBranchTruncateDoubleToInt32(-1234, -1234)); 737 RUN(testBranchTruncateDoubleToInt32(-1234.56, -1234)); 738 RUN(testBranchTruncateDoubleToInt32(std::numeric_limits<double>::infinity(), 0)); 739 RUN(testBranchTruncateDoubleToInt32(-std::numeric_limits<double>::infinity(), 0)); 740 RUN(testBranchTruncateDoubleToInt32(std::numeric_limits<double>::quiet_NaN(), 0)); 741 RUN(testBranchTruncateDoubleToInt32(std::numeric_limits<double>::signaling_NaN(), 0)); 742 RUN(testBranchTruncateDoubleToInt32(std::numeric_limits<double>::max(), 0)); 743 RUN(testBranchTruncateDoubleToInt32(-std::numeric_limits<double>::max(), 0)); 744 // We run this last one to make sure that we don't use flags that were not 745 // reset to check a conversion result 746 RUN(testBranchTruncateDoubleToInt32(123, 123)); 693 747 694 748 #if ENABLE(MASM_PROBE)
Note:
See TracChangeset
for help on using the changeset viewer.