Pass VM instead of ExecState to JSCell::fastGetOwnProperty().
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 Feb 2014 21:33:17 +0000 (21:33 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 9 Feb 2014 21:33:17 +0000 (21:33 +0000)
<https://webkit.org/b/128497>

Knocks off a couple of instructions.

Reviewed by Anders Carlsson.

* dfg/DFGOperations.cpp:
* jit/JITOperations.cpp:
(JSC::getByVal):
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::getByVal):
* runtime/JSCell.h:
* runtime/JSCellInlines.h:
(JSC::JSCell::fastGetOwnProperty):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@163755 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/dfg/DFGOperations.cpp
Source/JavaScriptCore/jit/JITOperations.cpp
Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
Source/JavaScriptCore/runtime/JSCell.h
Source/JavaScriptCore/runtime/JSCellInlines.h

index 39f6fbcb6010390a93f2b77ed02be1284d32a3b3..e876a4b8b8ffde714bbdfb4edee1fea130cdaed0 100644 (file)
@@ -1,3 +1,21 @@
+2014-02-09  Andreas Kling  <akling@apple.com>
+
+        Pass VM instead of ExecState to JSCell::fastGetOwnProperty().
+        <https://webkit.org/b/128497>
+
+        Knocks off a couple of instructions.
+
+        Reviewed by Anders Carlsson.
+
+        * dfg/DFGOperations.cpp:
+        * jit/JITOperations.cpp:
+        (JSC::getByVal):
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::getByVal):
+        * runtime/JSCell.h:
+        * runtime/JSCellInlines.h:
+        (JSC::JSCell::fastGetOwnProperty):
+
 2014-02-09  Anders Carlsson  <andersca@apple.com>
 
         Convert some JSC code over to std::mutex
index ca5e0ca97942f122ef59b4bf3529283a4214388b..17ac09987bf995adbc6f4fb719a02e67186f7761 100644 (file)
@@ -278,8 +278,8 @@ static inline EncodedJSValue getByVal(ExecState* exec, JSCell* base, uint32_t in
 
 EncodedJSValue JIT_OPERATION operationGetByVal(ExecState* exec, EncodedJSValue encodedBase, EncodedJSValue encodedProperty)
 {
-    VM* vm = &exec->vm();
-    NativeCallFrameTracer tracer(vm, exec);
+    VM& vm = exec->vm();
+    NativeCallFrameTracer tracer(&vm, exec);
     
     JSValue baseValue = JSValue::decode(encodedBase);
     JSValue property = JSValue::decode(encodedProperty);
@@ -295,7 +295,7 @@ EncodedJSValue JIT_OPERATION operationGetByVal(ExecState* exec, EncodedJSValue e
             if (propertyAsUInt32 == propertyAsDouble)
                 return getByVal(exec, base, propertyAsUInt32);
         } else if (property.isString()) {
-            if (JSValue result = base->fastGetOwnProperty(exec, asString(property)->value(exec)))
+            if (JSValue result = base->fastGetOwnProperty(vm, asString(property)->value(exec)))
                 return JSValue::encode(result);
         }
     }
@@ -309,8 +309,8 @@ EncodedJSValue JIT_OPERATION operationGetByVal(ExecState* exec, EncodedJSValue e
 
 EncodedJSValue JIT_OPERATION operationGetByValCell(ExecState* exec, JSCell* base, EncodedJSValue encodedProperty)
 {
-    VM* vm = &exec->vm();
-    NativeCallFrameTracer tracer(vm, exec);
+    VM& vm = exec->vm();
+    NativeCallFrameTracer tracer(&vm, exec);
     
     JSValue property = JSValue::decode(encodedProperty);
 
@@ -322,7 +322,7 @@ EncodedJSValue JIT_OPERATION operationGetByValCell(ExecState* exec, JSCell* base
         if (propertyAsUInt32 == propertyAsDouble)
             return getByVal(exec, base, propertyAsUInt32);
     } else if (property.isString()) {
-        if (JSValue result = base->fastGetOwnProperty(exec, asString(property)->value(exec)))
+        if (JSValue result = base->fastGetOwnProperty(vm, asString(property)->value(exec)))
             return JSValue::encode(result);
     }
 
index a28857ff41a6a86296042b0a0d5235b74c6d8511..e135a281680af368593cec191dab6d4a2a03aa8a 100644 (file)
@@ -1401,7 +1401,7 @@ EncodedJSValue JIT_OPERATION operationGetArgumentsLength(ExecState* exec, int32_
 static JSValue getByVal(ExecState* exec, JSValue baseValue, JSValue subscript, ReturnAddressPtr returnAddress)
 {
     if (LIKELY(baseValue.isCell() && subscript.isString())) {
-        if (JSValue result = baseValue.asCell()->fastGetOwnProperty(exec, asString(subscript)->value(exec)))
+        if (JSValue result = baseValue.asCell()->fastGetOwnProperty(exec->vm(), asString(subscript)->value(exec)))
             return result;
     }
 
index fc757658cdcfd72a958f85cea130fb47f7ad69ec..1d09bdae2f31f6d3324e9b1d861083811ad17334 100644 (file)
@@ -707,7 +707,7 @@ LLINT_SLOW_PATH_DECL(slow_path_del_by_id)
 inline JSValue getByVal(ExecState* exec, JSValue baseValue, JSValue subscript)
 {
     if (LIKELY(baseValue.isCell() && subscript.isString())) {
-        if (JSValue result = baseValue.asCell()->fastGetOwnProperty(exec, asString(subscript)->value(exec)))
+        if (JSValue result = baseValue.asCell()->fastGetOwnProperty(exec->vm(), asString(subscript)->value(exec)))
             return result;
     }
     
index de85a4bdcce6d3e2fe9f8d9c1f8ea15c93102d54..e51268aa39840e81ca75a3105bec00c6e2f00009 100644 (file)
@@ -133,7 +133,7 @@ public:
     void zap() { *reinterpret_cast<uintptr_t**>(this) = 0; }
     bool isZapped() const { return !*reinterpret_cast<uintptr_t* const*>(this); }
 
-    JSValue fastGetOwnProperty(ExecState*, const String&);
+    JSValue fastGetOwnProperty(VM&, const String&);
 
     static ptrdiff_t structureOffset()
     {
index f7c844645092b250805e6e8d4832c998bdb89b54..e7dbb479008aeeb4ca73de09b0f7c52a8c3a9601 100644 (file)
@@ -171,12 +171,12 @@ inline bool JSCell::inherits(const ClassInfo* info) const
 // identifier. The first time we perform a property access with a given string, try
 // performing the property map lookup without forming an identifier. We detect this
 // case by checking whether the hash has yet been set for this string.
-ALWAYS_INLINE JSValue JSCell::fastGetOwnProperty(ExecState* exec, const String& name)
+ALWAYS_INLINE JSValue JSCell::fastGetOwnProperty(VM& vm, const String& name)
 {
     if (!structure()->typeInfo().overridesGetOwnPropertySlot() && !structure()->hasGetterSetterProperties()) {
         PropertyOffset offset = name.impl()->hasHash()
-            ? structure()->get(exec->vm(), Identifier(exec, name))
-            : structure()->get(exec->vm(), name);
+            ? structure()->get(vm, Identifier(&vm, name))
+            : structure()->get(vm, name);
         if (offset != invalidOffset)
             return asObject(this)->locationForOffset(offset)->get();
     }