Diff
Modified: trunk/Source/_javascript_Core/CMakeLists.txt (207359 => 207360)
--- trunk/Source/_javascript_Core/CMakeLists.txt 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/CMakeLists.txt 2016-10-14 23:22:07 UTC (rev 207360)
@@ -172,6 +172,7 @@
b3/B3ValueRep.cpp
b3/B3Variable.cpp
b3/B3VariableValue.cpp
+ b3/B3WasmAddressValue.cpp
b3/B3WasmBoundsCheckValue.cpp
bindings/ScriptFunctionCall.cpp
Modified: trunk/Source/_javascript_Core/ChangeLog (207359 => 207360)
--- trunk/Source/_javascript_Core/ChangeLog 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/ChangeLog 2016-10-14 23:22:07 UTC (rev 207360)
@@ -1,3 +1,49 @@
+2016-10-14 Keith Miller <keith_mil...@apple.com>
+
+ B3 needs a special WasmAddress Opcode
+ https://bugs.webkit.org/show_bug.cgi?id=163394
+
+ Reviewed by Filip Pizlo.
+
+ This patch adds support for WasmAddress. WasmAddress will be used by
+ Wasm to compute the address of a memory operation from the pinned
+ base pointer. WasmAddress takes an IntPtr so we can avoid emitting
+ unnecessary Move32s in Air. This could happen in the following case:
+
+ @ptr = Trunc(...)
+ WasmAddress(@ptr, pinnedGPR)
+ ...
+ PatchPoint(...) // Do Wasm call
+ WasmAddress(@ptr, pinnedGPR)
+ ...
+
+ In this case we will not be able to CSE the WasmAddresses since the
+ call writes to pinnedGPR. Thus if WasmAddress took an Int32 we would need
+ to emit an extra Move32 at the second WasmAddress to ensure it saw a proper
+ 32-bit value. If Wasm ensures that there there is a leading ZExt32 then
+ the duplicated moves become unnecessary.
+
+ * CMakeLists.txt:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * b3/B3LowerToAir.cpp:
+ (JSC::B3::Air::LowerToAir::effectiveAddr):
+ (JSC::B3::Air::LowerToAir::lower):
+ * b3/B3Opcode.cpp:
+ (WTF::printInternal):
+ * b3/B3Opcode.h:
+ * b3/B3Validate.cpp:
+ * b3/B3Value.cpp:
+ (JSC::B3::Value::effects):
+ * b3/B3WasmAddressValue.cpp: Added.
+ (JSC::B3::WasmAddressValue::~WasmAddressValue):
+ (JSC::B3::WasmAddressValue::dumpMeta):
+ (JSC::B3::WasmAddressValue::cloneImpl):
+ (JSC::B3::WasmAddressValue::WasmAddressValue):
+ * b3/B3WasmAddressValue.h: Added.
+ * b3/testb3.cpp:
+ (JSC::B3::testWasmAddress):
+ (JSC::B3::run):
+
2016-10-14 Joseph Pecoraro <pecor...@apple.com>
test262: @isConstructor incorrectly thinks Math.cos is a constructor
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (207359 => 207360)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2016-10-14 23:22:07 UTC (rev 207360)
@@ -1221,6 +1221,8 @@
539EB07A1D55607000C82EF7 /* _javascript_Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 932F5BD90822A1C700736975 /* _javascript_Core.framework */; };
539EB0811D55608A00C82EF7 /* testWASM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 539EB0711D553DF800C82EF7 /* testWASM.cpp */; };
539FB8BA1C99DA7C00940FA1 /* JSArrayInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 539FB8B91C99DA7C00940FA1 /* JSArrayInlines.h */; };
+ 53D444DC1DAF08AB00B92784 /* B3WasmAddressValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 53D444DB1DAF08AB00B92784 /* B3WasmAddressValue.h */; };
+ 53D444DE1DAF09A000B92784 /* B3WasmAddressValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53D444DD1DAF09A000B92784 /* B3WasmAddressValue.cpp */; };
53F40E851D58F9770099A1B6 /* WASMSections.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F40E841D58F9770099A1B6 /* WASMSections.h */; };
53F40E8B1D5901BB0099A1B6 /* WASMFunctionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F40E8A1D5901BB0099A1B6 /* WASMFunctionParser.h */; };
53F40E8D1D5901F20099A1B6 /* WASMParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F40E8C1D5901F20099A1B6 /* WASMParser.h */; };
@@ -3461,6 +3463,8 @@
539EB0711D553DF800C82EF7 /* testWASM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = testWASM.cpp; sourceTree = "<group>"; };
539EB0801D55607000C82EF7 /* testWASM */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testWASM; sourceTree = BUILT_PRODUCTS_DIR; };
539FB8B91C99DA7C00940FA1 /* JSArrayInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayInlines.h; sourceTree = "<group>"; };
+ 53D444DB1DAF08AB00B92784 /* B3WasmAddressValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = B3WasmAddressValue.h; path = b3/B3WasmAddressValue.h; sourceTree = "<group>"; };
+ 53D444DD1DAF09A000B92784 /* B3WasmAddressValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = B3WasmAddressValue.cpp; path = b3/B3WasmAddressValue.cpp; sourceTree = "<group>"; };
53F256E11B87E28000B4B768 /* JSTypedArrayViewPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTypedArrayViewPrototype.cpp; sourceTree = "<group>"; };
53F40E841D58F9770099A1B6 /* WASMSections.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMSections.h; sourceTree = "<group>"; };
53F40E8A1D5901BB0099A1B6 /* WASMFunctionParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WASMFunctionParser.h; sourceTree = "<group>"; };
@@ -5005,6 +5009,8 @@
0F2BBD931C5FF3F50023EF23 /* B3Variable.h */,
0F2BBD941C5FF3F50023EF23 /* B3VariableValue.cpp */,
0F2BBD951C5FF3F50023EF23 /* B3VariableValue.h */,
+ 53D444DD1DAF09A000B92784 /* B3WasmAddressValue.cpp */,
+ 53D444DB1DAF08AB00B92784 /* B3WasmAddressValue.h */,
0FEC85AE1BDB5D5E0080FF74 /* testb3.cpp */,
);
name = b3;
@@ -7248,6 +7254,7 @@
0F3730931C0D67EE00052BFA /* AirUseCounts.h in Headers */,
0F4570391BE44C910062A629 /* AirEliminateDeadCode.h in Headers */,
79B00CBD1C6AB07E0088C65D /* ProxyConstructor.h in Headers */,
+ 53D444DC1DAF08AB00B92784 /* B3WasmAddressValue.h in Headers */,
990DA67F1C8E316A00295159 /* generate_objc_protocol_type_conversions_implementation.py in Headers */,
DC17E8191C9C91DB008A6AB3 /* ShadowChickenInlines.h in Headers */,
DC17E8181C9C91D9008A6AB3 /* ShadowChicken.h in Headers */,
@@ -9786,6 +9793,7 @@
0F919D2515853CE0004A4E7D /* Watchpoint.cpp in Sources */,
1ACF7377171CA6FB00C9BB1E /* Weak.cpp in Sources */,
14E84F9E14EE1ACC00D6D5D4 /* WeakBlock.cpp in Sources */,
+ 53D444DE1DAF09A000B92784 /* B3WasmAddressValue.cpp in Sources */,
14F7256514EE265E00B1652B /* WeakHandleOwner.cpp in Sources */,
A7CA3AE317DA41AE006538AF /* WeakMapConstructor.cpp in Sources */,
0F338DF91BE96AA80013C88F /* B3CCallValue.cpp in Sources */,
Modified: trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/B3LowerToAir.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -54,6 +54,7 @@
#include "B3ValueInlines.h"
#include "B3Variable.h"
#include "B3VariableValue.h"
+#include "B3WasmAddressValue.h"
#include <wtf/IndexMap.h>
#include <wtf/IndexSet.h>
#include <wtf/ListDump.h>
@@ -508,6 +509,21 @@
case SlotBase:
return Arg::stack(m_stackToStack.get(address->as<SlotBaseValue>()->slot()), offset);
+ case WasmAddress: {
+ WasmAddressValue* wasmAddress = address->as<WasmAddressValue>();
+ Value* pointer = wasmAddress->child(0);
+ ASSERT(Arg::isValidIndexForm(1, offset, width));
+ if (m_locked.contains(pointer))
+ return fallback();
+
+ // FIXME: We should support ARM64 LDR 32-bit addressing, which will
+ // allow us to fuse a Shl ptr, 2 into the address. Additionally, and
+ // perhaps more importantly, it would allow us to avoid a truncating
+ // move. See: https://bugs.webkit.org/show_bug.cgi?id=163465
+
+ return Arg::index(Tmp(wasmAddress->pinnedGPR()), tmp(pointer), 1, offset);
+ }
+
default:
return fallback();
}
@@ -2276,7 +2292,14 @@
appendStore(Air::Store16, valueToStore, addr(m_value));
return;
}
-
+
+ case WasmAddress: {
+ WasmAddressValue* address = m_value->as<WasmAddressValue>();
+
+ append(Add64, Arg(address->pinnedGPR()), tmp(address));
+ return;
+ }
+
case Fence: {
FenceValue* fence = m_value->as<FenceValue>();
if (!fence->write && !fence->read)
Modified: trunk/Source/_javascript_Core/b3/B3Opcode.cpp (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/B3Opcode.cpp 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/B3Opcode.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -251,6 +251,9 @@
case Store:
out.print("Store");
return;
+ case WasmAddress:
+ out.print("WasmAddress");
+ return;
case Fence:
out.print("Fence");
return;
Modified: trunk/Source/_javascript_Core/b3/B3Opcode.h (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/B3Opcode.h 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/B3Opcode.h 2016-10-14 23:22:07 UTC (rev 207360)
@@ -157,6 +157,12 @@
Store16,
// This is a polymorphic store for Int32, Int64, Float, and Double.
Store,
+
+ // This is used to compute the actual address of a Wasm memory operation. It takes an IntPtr
+ // and a pinned register then computes the appropriate IntPtr address. For the use-case of
+ // Wasm it is important that the first child initially be a ZExt32 so the top bits are cleared.
+ // We do WasmAddress(ZExt32(ptr), ...) so that we can avoid generating extraneous moves in Air.
+ WasmAddress,
// This is used to represent standalone fences - i.e. fences that are not part of other
// instructions. It's expressive enough to expose mfence on x86 and dmb ish/ishst on ARM. On
Modified: trunk/Source/_javascript_Core/b3/B3Validate.cpp (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/B3Validate.cpp 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/B3Validate.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -371,6 +371,12 @@
VALIDATE(value->type() == Void, ("At ", *value));
validateStackAccess(value);
break;
+ case WasmAddress:
+ VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
+ VALIDATE(value->numChildren() == 1, ("At ", *value));
+ VALIDATE(value->child(0)->type() == pointerType(), ("At ", *value));
+ VALIDATE(value->type() == pointerType(), ("At ", *value));
+ break;
case CCall:
VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
VALIDATE(value->numChildren() >= 1, ("At ", *value));
Modified: trunk/Source/_javascript_Core/b3/B3Value.cpp (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/B3Value.cpp 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/B3Value.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -586,6 +586,9 @@
result.writes = as<MemoryValue>()->range();
result.controlDependent = true;
break;
+ case WasmAddress:
+ result.readsPinned = true;
+ break;
case Fence: {
const FenceValue* fence = as<FenceValue>();
result.reads = fence->read;
Added: trunk/Source/_javascript_Core/b3/B3WasmAddressValue.cpp (0 => 207360)
--- trunk/Source/_javascript_Core/b3/B3WasmAddressValue.cpp (rev 0)
+++ trunk/Source/_javascript_Core/b3/B3WasmAddressValue.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "B3WasmAddressValue.h"
+
+#if ENABLE(B3_JIT)
+
+namespace JSC { namespace B3 {
+
+WasmAddressValue::~WasmAddressValue()
+{
+}
+
+void WasmAddressValue::dumpMeta(CommaPrinter& comma, PrintStream& out) const
+{
+ out.print(comma, m_pinnedGPR);
+}
+
+Value* WasmAddressValue::cloneImpl() const
+{
+ return new WasmAddressValue(*this);
+}
+
+WasmAddressValue::WasmAddressValue(Origin origin, Value* value, GPRReg pinnedGPR)
+ : Value(CheckedOpcode, WasmAddress, Int64, origin, value)
+ , m_pinnedGPR(pinnedGPR)
+{
+}
+
+} } // namespace JSC::B3
+
+#endif // ENABLE(B3_JIT)
+
Added: trunk/Source/_javascript_Core/b3/B3WasmAddressValue.h (0 => 207360)
--- trunk/Source/_javascript_Core/b3/B3WasmAddressValue.h (rev 0)
+++ trunk/Source/_javascript_Core/b3/B3WasmAddressValue.h 2016-10-14 23:22:07 UTC (rev 207360)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(B3_JIT)
+
+#include "B3Value.h"
+
+namespace JSC { namespace B3 {
+
+class JS_EXPORT_PRIVATE WasmAddressValue : public Value {
+public:
+ static bool accepts(Kind kind) { return kind == WasmAddress; }
+
+ ~WasmAddressValue();
+
+ GPRReg pinnedGPR() const { return m_pinnedGPR; }
+
+protected:
+ void dumpMeta(CommaPrinter&, PrintStream&) const override;
+
+ Value* cloneImpl() const override;
+
+private:
+ friend class Procedure;
+
+ WasmAddressValue(Origin, Value*, GPRReg);
+
+ GPRReg m_pinnedGPR;
+};
+
+} } // namespace JSC::B3
+
+
+#endif // ENABLE(B3_JIT)
Modified: trunk/Source/_javascript_Core/b3/testb3.cpp (207359 => 207360)
--- trunk/Source/_javascript_Core/b3/testb3.cpp 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Source/_javascript_Core/b3/testb3.cpp 2016-10-14 23:22:07 UTC (rev 207360)
@@ -54,6 +54,7 @@
#include "B3Validate.h"
#include "B3ValueInlines.h"
#include "B3VariableValue.h"
+#include "B3WasmAddressValue.h"
#include "B3WasmBoundsCheckValue.h"
#include "CCallHelpers.h"
#include "FPRInfo.h"
@@ -13761,6 +13762,57 @@
CHECK_EQ(invoke<int32_t>(*code, 2, 2 + offset), 42);
}
+void testWasmAddress()
+{
+ Procedure proc;
+ GPRReg pinnedGPR = GPRInfo::argumentGPR2;
+ proc.pinRegister(pinnedGPR);
+
+ unsigned loopCount = 100;
+ Vector<unsigned> values(loopCount);
+ unsigned numToStore = 42;
+
+ BasicBlock* root = proc.addBlock();
+ BasicBlock* header = proc.addBlock();
+ BasicBlock* body = proc.addBlock();
+ BasicBlock* continuation = proc.addBlock();
+
+ // Root
+ Value* loopCountValue = root->appendNew<Value>(proc, Trunc, Origin(), root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0));
+ Value* valueToStore = root->appendNew<Value>(proc, Trunc, Origin(), root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1));
+ UpsilonValue* beginUpsilon = root->appendNew<UpsilonValue>(proc, Origin(), root->appendNew<Const32Value>(proc, Origin(), 0));
+ root->appendNewControlValue(proc, Jump, Origin(), header);
+
+ // Header
+ Value* indexPhi = header->appendNew<Value>(proc, Phi, Int32, Origin());
+ header->appendNewControlValue(proc, Branch, Origin(),
+ header->appendNew<Value>(proc, Below, Origin(), indexPhi, loopCountValue),
+ body, continuation);
+
+ // Body
+ Value* pointer = body->appendNew<Value>(proc, Mul, Origin(), indexPhi,
+ body->appendNew<Const32Value>(proc, Origin(), sizeof(unsigned)));
+ pointer = body->appendNew<Value>(proc, ZExt32, Origin(), pointer);
+ body->appendNew<MemoryValue>(proc, Store, Origin(), valueToStore,
+ body->appendNew<WasmAddressValue>(proc, Origin(), pointer, pinnedGPR));
+ UpsilonValue* incUpsilon = body->appendNew<UpsilonValue>(proc, Origin(),
+ body->appendNew<Value>(proc, Add, Origin(), indexPhi,
+ body->appendNew<Const32Value>(proc, Origin(), 1)));
+ body->appendNewControlValue(proc, Jump, Origin(), header);
+
+ // Continuation
+ continuation->appendNewControlValue(proc, Return, Origin());
+
+ beginUpsilon->setPhi(indexPhi);
+ incUpsilon->setPhi(indexPhi);
+
+
+ auto code = compile(proc);
+ invoke<void>(*code, loopCount, numToStore, values.data());
+ for (unsigned value : values)
+ CHECK_EQ(numToStore, value);
+}
+
// Make sure the compiler does not try to optimize anything out.
NEVER_INLINE double zero()
{
@@ -15205,6 +15257,7 @@
RUN(testWasmBoundsCheck(100));
RUN(testWasmBoundsCheck(10000));
RUN(testWasmBoundsCheck(std::numeric_limits<unsigned>::max() - 5));
+ RUN(testWasmAddress());
if (isX86()) {
RUN(testBranchBitAndImmFusion(Identity, Int64, 1, Air::BranchTest32, Air::Arg::Tmp));
Modified: trunk/Websites/webkit.org/ChangeLog (207359 => 207360)
--- trunk/Websites/webkit.org/ChangeLog 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Websites/webkit.org/ChangeLog 2016-10-14 23:22:07 UTC (rev 207360)
@@ -1,3 +1,14 @@
+2016-10-14 Keith Miller <keith_mil...@apple.com>
+
+ B3 needs a special WasmAddress Opcode
+ https://bugs.webkit.org/show_bug.cgi?id=163394
+
+ Reviewed by Filip Pizlo.
+
+ Update the b3 docs for the new WasmAddress opcode.
+
+ * docs/b3/intermediate-representation.html:
+
2016-10-14 Simon Fraser <simon.fra...@apple.com>
Annotate bots in contributors.json and don't show them on webkit.org/team
Modified: trunk/Websites/webkit.org/docs/b3/intermediate-representation.html (207359 => 207360)
--- trunk/Websites/webkit.org/docs/b3/intermediate-representation.html 2016-10-14 23:10:34 UTC (rev 207359)
+++ trunk/Websites/webkit.org/docs/b3/intermediate-representation.html 2016-10-14 23:22:07 UTC (rev 207360)
@@ -423,7 +423,12 @@
<dd>Stores the value in the first child into the address computed by adding the
compile-time 32-bit signed integer offset to the second child. Misaligned stores are
not penalized. Must use the MemoryValue class. May have the Traps flag set.</dd>
-
+
+ <dt>IntPtr WasmAddress(IntPtr, pinnedGPR)</dt>
+ <dd>This is used to compute the address of a wasm memory load from a pinned base GPR.
+ Must use the WasmAddressValue class.</dd>
+
+
<dt>Void Fence()</dt>
<dd>Abstracts standalone data fences on x86 and ARM. Must use the FenceValue class, which has
two additional members that configure the precise meaning of the fence: