Changeset 226461 in webkit for trunk/Source/JavaScriptCore/b3/testb3.cpp
- Timestamp:
- Jan 5, 2018, 2:02:31 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/b3/testb3.cpp
r225778 r226461 15866 15866 } 15867 15867 15868 void testWasmBoundsCheck(unsigned offset) 15868 enum class UseIndexingMaskGPR { No, Yes }; 15869 void testWasmBoundsCheck(unsigned offset, UseIndexingMaskGPR useIndexingMask) 15869 15870 { 15870 15871 Procedure proc; 15871 15872 GPRReg pinned = GPRInfo::argumentGPR1; 15873 GPRReg indexingMask = InvalidGPRReg; 15872 15874 proc.pinRegister(pinned); 15875 15876 if (useIndexingMask == UseIndexingMaskGPR::Yes) { 15877 indexingMask = GPRInfo::argumentGPR2; 15878 proc.pinRegister(indexingMask); 15879 } 15873 15880 15874 15881 proc.setWasmBoundsCheckGenerator([=] (CCallHelpers& jit, GPRReg pinnedGPR) { … … 15886 15893 if (pointerType() != Int32) 15887 15894 left = root->appendNew<Value>(proc, Trunc, Origin(), left); 15888 root->appendNew<WasmBoundsCheckValue>(proc, Origin(), pinned, left, offset);15895 root->appendNew<WasmBoundsCheckValue>(proc, Origin(), pinned, indexingMask, left, offset); 15889 15896 Value* result = root->appendNew<Const32Value>(proc, Origin(), 0x42); 15890 15897 root->appendNewControlValue(proc, Return, Origin(), result); 15891 15898 15892 15899 auto code = compileProc(proc); 15893 CHECK_EQ(invoke<int32_t>(*code, 1, 2 + offset), 0x42); 15894 CHECK_EQ(invoke<int32_t>(*code, 3, 2 + offset), 42); 15895 CHECK_EQ(invoke<int32_t>(*code, 2, 2 + offset), 42); 15900 uint32_t bound = 2 + offset; 15901 uint32_t mask = WTF::computeIndexingMask(bound); 15902 auto computeResult = [&] (uint32_t input) { 15903 return input + offset < bound ? 0x42 : 42; 15904 }; 15905 15906 CHECK_EQ(invoke<int32_t>(*code, 1, bound, mask), computeResult(1)); 15907 CHECK_EQ(invoke<int32_t>(*code, 3, bound, mask), computeResult(3)); 15908 CHECK_EQ(invoke<int32_t>(*code, 2, bound, mask), computeResult(2)); 15896 15909 } 15897 15910 … … 17746 17759 RUN(testDepend64()); 17747 17760 17748 RUN(testWasmBoundsCheck(0)); 17749 RUN(testWasmBoundsCheck(100)); 17750 RUN(testWasmBoundsCheck(10000)); 17751 RUN(testWasmBoundsCheck(std::numeric_limits<unsigned>::max() - 5)); 17761 RUN(testWasmBoundsCheck(0, UseIndexingMaskGPR::No)); 17762 RUN(testWasmBoundsCheck(100, UseIndexingMaskGPR::No)); 17763 RUN(testWasmBoundsCheck(10000, UseIndexingMaskGPR::No)); 17764 RUN(testWasmBoundsCheck(std::numeric_limits<unsigned>::max() - 5, UseIndexingMaskGPR::No)); 17765 RUN(testWasmBoundsCheck(0, UseIndexingMaskGPR::Yes)); 17766 RUN(testWasmBoundsCheck(100, UseIndexingMaskGPR::Yes)); 17767 RUN(testWasmBoundsCheck(10000, UseIndexingMaskGPR::Yes)); 17768 RUN(testWasmBoundsCheck(std::numeric_limits<unsigned>::max() - 5, UseIndexingMaskGPR::Yes)); 17769 17752 17770 RUN(testWasmAddress()); 17753 17771
Note:
See TracChangeset
for help on using the changeset viewer.