Changeset 225664 in webkit
- Timestamp:
- Dec 7, 2017 6:08:03 PM (6 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r225663 r225664 1 2017-12-07 Saam Barati <sbarati@apple.com> 2 3 Modify our dollar VM clflush intrinsic to aid in some perf testing 4 https://bugs.webkit.org/show_bug.cgi?id=180559 5 6 Reviewed by Mark Lam. 7 8 * tools/JSDollarVM.cpp: 9 (JSC::functionCpuClflush): 10 (JSC::functionDeltaBetweenButterflies): 11 (JSC::JSDollarVM::finishCreation): 12 1 13 2017-12-07 Eric Carlson <eric.carlson@apple.com> 2 14 -
trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp
r225129 r225664 1108 1108 }; 1109 1109 1110 Vector<void*> toFlush; 1111 1110 1112 uint32_t offset = exec->argument(1).asUInt32(); 1111 1113 1112 char* ptr = nullptr; 1113 if (JSArrayBuffer* buffer = jsDynamicCast<JSArrayBuffer*>(vm, exec->argument(0))) { 1114 if (ArrayBuffer* impl = buffer->impl()) { 1115 if (offset < impl->byteLength()) { 1116 clflush(impl); 1117 ptr = bitwise_cast<char*>(impl) + offset; 1118 } 1119 } 1120 } else if (JSArrayBufferView* view = jsDynamicCast<JSArrayBufferView*>(vm, exec->argument(0))) 1121 ptr = bitwise_cast<char*>(view); 1114 if (JSArrayBufferView* view = jsDynamicCast<JSArrayBufferView*>(vm, exec->argument(0))) 1115 toFlush.append(bitwise_cast<char*>(view->vector()) + offset); 1122 1116 else if (JSObject* object = jsDynamicCast<JSObject*>(vm, exec->argument(0))) { 1123 1117 switch (object->indexingType()) { … … 1125 1119 case ALL_CONTIGUOUS_INDEXING_TYPES: 1126 1120 case ALL_DOUBLE_INDEXING_TYPES: 1127 clflush(object); 1128 ptr = bitwise_cast<char*>(object->butterfly()) + offset; 1121 toFlush.append(bitwise_cast<char*>(object) + JSObject::butterflyOffset()); 1122 toFlush.append(bitwise_cast<char*>(object->butterfly()) + Butterfly::offsetOfVectorLength()); 1123 toFlush.append(bitwise_cast<char*>(object->butterfly()) + Butterfly::offsetOfPublicLength()); 1129 1124 } 1130 1125 } 1131 1126 1132 if (! ptr)1127 if (!toFlush.size()) 1133 1128 return JSValue::encode(jsBoolean(false)); 1134 1129 1135 clflush(ptr); 1130 for (void* ptr : toFlush) 1131 clflush(ptr); 1136 1132 return JSValue::encode(jsBoolean(true)); 1137 1133 #else … … 1699 1695 } 1700 1696 1697 static EncodedJSValue JSC_HOST_CALL functionDeltaBetweenButterflies(ExecState* exec) 1698 { 1699 VM& vm = exec->vm(); 1700 JSObject* a = jsDynamicCast<JSObject*>(vm, exec->argument(0)); 1701 JSObject* b = jsDynamicCast<JSObject*>(vm, exec->argument(1)); 1702 if (!a || !b) 1703 return JSValue::encode(jsNumber(PNaN)); 1704 1705 ptrdiff_t delta = bitwise_cast<char*>(a->butterfly()) - bitwise_cast<char*>(b->butterfly()); 1706 if (delta < 0) 1707 return JSValue::encode(jsNumber(PNaN)); 1708 if (delta > std::numeric_limits<int32_t>::max()) 1709 return JSValue::encode(jsNumber(PNaN)); 1710 return JSValue::encode(jsNumber(static_cast<int32_t>(delta))); 1711 } 1712 1701 1713 void JSDollarVM::finishCreation(VM& vm) 1702 1714 { … … 1780 1792 addFunction(vm, "loadGetterFromGetterSetter", functionLoadGetterFromGetterSetter, 1); 1781 1793 addFunction(vm, "createCustomTestGetterSetter", functionCreateCustomTestGetterSetter, 1); 1794 1795 addFunction(vm, "deltaBetweenButterflies", functionDeltaBetweenButterflies, 2); 1782 1796 } 1783 1797
Note: See TracChangeset
for help on using the changeset viewer.