Changeset 225664 in webkit


Ignore:
Timestamp:
Dec 7, 2017 6:08:03 PM (6 years ago)
Author:
sbarati@apple.com
Message:

Modify our dollar VM clflush intrinsic to aid in some perf testing
https://bugs.webkit.org/show_bug.cgi?id=180559

Reviewed by Mark Lam.

  • tools/JSDollarVM.cpp:

(JSC::functionCpuClflush):
(JSC::functionDeltaBetweenButterflies):
(JSC::JSDollarVM::finishCreation):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r225663 r225664  
     12017-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
    1132017-12-07  Eric Carlson  <eric.carlson@apple.com>
    214
  • trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp

    r225129 r225664  
    11081108    };
    11091109
     1110    Vector<void*> toFlush;
     1111
    11101112    uint32_t offset = exec->argument(1).asUInt32();
    11111113
    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);
    11221116    else if (JSObject* object = jsDynamicCast<JSObject*>(vm, exec->argument(0))) {
    11231117        switch (object->indexingType()) {
     
    11251119        case ALL_CONTIGUOUS_INDEXING_TYPES:
    11261120        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());
    11291124        }
    11301125    }
    11311126
    1132     if (!ptr)
     1127    if (!toFlush.size())
    11331128        return JSValue::encode(jsBoolean(false));
    11341129
    1135     clflush(ptr);
     1130    for (void* ptr : toFlush)
     1131        clflush(ptr);
    11361132    return JSValue::encode(jsBoolean(true));
    11371133#else
     
    16991695}
    17001696
     1697static 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
    17011713void JSDollarVM::finishCreation(VM& vm)
    17021714{
     
    17801792    addFunction(vm, "loadGetterFromGetterSetter", functionLoadGetterFromGetterSetter, 1);
    17811793    addFunction(vm, "createCustomTestGetterSetter", functionCreateCustomTestGetterSetter, 1);
     1794
     1795    addFunction(vm, "deltaBetweenButterflies", functionDeltaBetweenButterflies, 2);
    17821796}
    17831797
Note: See TracChangeset for help on using the changeset viewer.