⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 245496 in webkit


Ignore:
Timestamp:
May 17, 2019, 9:58:36 PM (7 years ago)
Author:
Justin Michaud
Message:

[WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
https://bugs.webkit.org/show_bug.cgi?id=197969

JSTests:

Reviewed by Keith Miller.

Support the anyref type in Builder.js, plus add some extra error logging.
Add new folder for wasm references tests.

  • wasm.yaml:
  • wasm/Builder.js:

(const._isValidValue):

  • wasm/references/anyref_modules.js: Added.

(Call.3.RefIsNull.End.End.WebAssembly.js.ident):
(Call.3.RefIsNull.End.End.WebAssembly.js.make_null):
(Call.3.RefIsNull.End.End.WebAssembly):
(undefined):

  • wasm/references/is_null.js: Added.
  • wasm/references/is_null_error.js: Added.
  • wasm/spec-harness/index.js:
  • wasm/wasm.json:

Source/JavaScriptCore:

Reviewed by Keith Miller.

Add a new runtime option for wasm references.
Add support for Anyref as a value type.
Add support for Anyref in parameters and return types of Wasm functions. JSValues are marshalled into/out of wasm Anyrefs

as a black box, except null which becomes a Nullref value. Nullref is not expressible in the bytecode or in the js API.

Add Ref.null and Ref.is_null for Anyref values. Support for these functions with funcrefs is out of scope.

  • runtime/Options.h:
  • wasm/WasmAirIRGenerator.cpp:

(JSC::Wasm::AirIRGenerator::tmpForType):
(JSC::Wasm::AirIRGenerator::AirIRGenerator):
(JSC::Wasm::AirIRGenerator::addConstant):
(JSC::Wasm::AirIRGenerator::addRefIsNull):
(JSC::Wasm::AirIRGenerator::addReturn):

  • wasm/WasmB3IRGenerator.cpp:

(JSC::Wasm::B3IRGenerator::addRefIsNull):

  • wasm/WasmCallingConvention.h:

(JSC::Wasm::CallingConventionAir::marshallArgument const):
(JSC::Wasm::CallingConventionAir::setupCall const):

  • wasm/WasmFormat.h:

(JSC::Wasm::isValueType):

  • wasm/WasmFunctionParser.h:

(JSC::Wasm::FunctionParser<Context>::FunctionParser):
(JSC::Wasm::FunctionParser<Context>::parseExpression):
(JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):

  • wasm/WasmValidate.cpp:

(JSC::Wasm::Validate::addRefIsNull):

  • wasm/generateWasmOpsHeader.py:

(bitSet):

  • wasm/js/JSToWasm.cpp:

(JSC::Wasm::createJSToWasmWrapper):

  • wasm/js/WasmToJS.cpp:

(JSC::Wasm::wasmToJS):

  • wasm/js/WebAssemblyFunction.cpp:

(JSC::callWebAssemblyFunction):
(JSC::WebAssemblyFunction::jsCallEntrypointSlow):

  • wasm/wasm.json:

Tools:

Run wasm tests additionally with wasmBBQUsesAir=0.

Reviewed by Keith Miller.

  • Scripts/run-jsc-stress-tests:
Location:
trunk
Files:
4 added
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/JSTests/ChangeLog

    r245406 r245496  
     12019-05-17  Justin Michaud  <justin_michaud@apple.com>
     2
     3        [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
     4        https://bugs.webkit.org/show_bug.cgi?id=197969
     5
     6        Reviewed by Keith Miller.
     7
     8        Support the anyref type in Builder.js, plus add some extra error logging.
     9        Add new folder for wasm references tests.
     10
     11        * wasm.yaml:
     12        * wasm/Builder.js:
     13        (const._isValidValue):
     14        * wasm/references/anyref_modules.js: Added.
     15        (Call.3.RefIsNull.End.End.WebAssembly.js.ident):
     16        (Call.3.RefIsNull.End.End.WebAssembly.js.make_null):
     17        (Call.3.RefIsNull.End.End.WebAssembly):
     18        (undefined):
     19        * wasm/references/is_null.js: Added.
     20        * wasm/references/is_null_error.js: Added.
     21        * wasm/spec-harness/index.js:
     22        * wasm/wasm.json:
     23
    1242019-05-16  Ross Kirsling  <ross.kirsling@sony.com>
    225
  • trunk/JSTests/wasm.yaml

    r230763 r245496  
    2929  cmd: runNoJIT unless parseRunCommands
    3030- path: wasm/function-tests
     31  cmd: runWebAssemblySuite unless parseRunCommands
     32- path: wasm/references
    3133  cmd: runWebAssemblySuite unless parseRunCommands
    3234- path: wasm/fuzz
  • trunk/JSTests/wasm/Builder.js

    r232970 r245496  
    3434    // We allow both signed and unsigned numbers.
    3535    case "i32": return Math.round(value) === value && LLB.varint32Min <= value && value <= LLB.varuint32Max;
     36    case "anyref": return true;
    3637    case "i64": return true; // FIXME https://bugs.webkit.org/show_bug.cgi?id=163420 64-bit values
    3738    case "f32": return typeof(value) === "number" && isFinite(value);
  • trunk/JSTests/wasm/spec-harness/index.js

    r218216 r245496  
    191191        uniqueTest(() => {
    192192            let instantiated = err === null;
     193            if (!instantiated) print(err);
    193194            assert_true(instantiated, err);
    194195        }, "module successfully instantiated");
  • trunk/JSTests/wasm/wasm.json

    r243514 r245496  
    1313        "f64":     { "type": "varint7", "value":  -4, "b3type": "B3::Double" },
    1414        "anyfunc": { "type": "varint7", "value": -16, "b3type": "B3::Void" },
     15        "anyref":  { "type": "varint7", "value": -17, "b3type": "B3::Int64" },
    1516        "func":    { "type": "varint7", "value": -32, "b3type": "B3::Void" },
    1617        "void":    { "type": "varint7", "value": -64, "b3type": "B3::Void" }
    1718    },
    18     "value_type": ["i32", "i64", "f32", "f64"],
    19     "block_type": ["i32", "i64", "f32", "f64", "void"],
     19    "value_type": ["i32", "i64", "f32", "f64", "anyref"],
     20    "block_type": ["i32", "i64", "f32", "f64", "void", "anyref"],
    2021    "elem_type": ["anyfunc"],
    2122    "external_kind": {
     
    5960        "f64.const":           { "category": "special",    "value":  68, "return": ["f64"],      "parameter": [],                       "immediate": [{"name": "value",          "type": "double"}],                                               "description": "a constant value interpreted as f64" },
    6061        "f32.const":           { "category": "special",    "value":  67, "return": ["f32"],      "parameter": [],                       "immediate": [{"name": "value",          "type": "float"}],                                                "description": "a constant value interpreted as f32" },
     62        "ref.null":            { "category": "special",    "value": 208, "return": ["anyref"],   "parameter": [],                       "immediate": [],                                                                                           "description": "a constant null reference" },
     63        "ref.is_null":         { "category": "special",    "value": 209, "return": ["i32"],      "parameter": ["anyref"],               "immediate": [],                                                                                           "description": "determine if a reference is null" },
    6164        "get_local":           { "category": "special",    "value":  32, "return": ["any"],      "parameter": [],                       "immediate": [{"name": "local_index",    "type": "varuint32"}],                                            "description": "read a local variable or parameter" },
    6265        "set_local":           { "category": "special",    "value":  33, "return": [],           "parameter": ["any"],                  "immediate": [{"name": "local_index",    "type": "varuint32"}],                                            "description": "write a local variable or parameter" },
  • trunk/Source/JavaScriptCore/ChangeLog

    r245492 r245496  
     12019-05-17  Justin Michaud  <justin_michaud@apple.com>
     2
     3        [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
     4        https://bugs.webkit.org/show_bug.cgi?id=197969
     5
     6        Reviewed by Keith Miller.
     7
     8        Add a new runtime option for wasm references.
     9        Add support for Anyref as a value type.
     10        Add support for Anyref in parameters and return types of Wasm functions. JSValues are marshalled into/out of wasm Anyrefs
     11                as a black box, except null which becomes a Nullref value. Nullref is not expressible in the bytecode or in the js API.
     12        Add Ref.null and Ref.is_null for Anyref values. Support for these functions with funcrefs is out of scope.
     13
     14        * runtime/Options.h:
     15        * wasm/WasmAirIRGenerator.cpp:
     16        (JSC::Wasm::AirIRGenerator::tmpForType):
     17        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
     18        (JSC::Wasm::AirIRGenerator::addConstant):
     19        (JSC::Wasm::AirIRGenerator::addRefIsNull):
     20        (JSC::Wasm::AirIRGenerator::addReturn):
     21        * wasm/WasmB3IRGenerator.cpp:
     22        (JSC::Wasm::B3IRGenerator::addRefIsNull):
     23        * wasm/WasmCallingConvention.h:
     24        (JSC::Wasm::CallingConventionAir::marshallArgument const):
     25        (JSC::Wasm::CallingConventionAir::setupCall const):
     26        * wasm/WasmFormat.h:
     27        (JSC::Wasm::isValueType):
     28        * wasm/WasmFunctionParser.h:
     29        (JSC::Wasm::FunctionParser<Context>::FunctionParser):
     30        (JSC::Wasm::FunctionParser<Context>::parseExpression):
     31        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
     32        * wasm/WasmValidate.cpp:
     33        (JSC::Wasm::Validate::addRefIsNull):
     34        * wasm/generateWasmOpsHeader.py:
     35        (bitSet):
     36        * wasm/js/JSToWasm.cpp:
     37        (JSC::Wasm::createJSToWasmWrapper):
     38        * wasm/js/WasmToJS.cpp:
     39        (JSC::Wasm::wasmToJS):
     40        * wasm/js/WebAssemblyFunction.cpp:
     41        (JSC::callWebAssemblyFunction):
     42        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
     43        * wasm/wasm.json:
     44
    1452019-05-17  Don Olmstead  <don.olmstead@sony.com>
    246
  • trunk/Source/JavaScriptCore/runtime/Options.h

    r245084 r245496  
    503503    v(bool, useCallICsForWebAssemblyToJSCalls, true, Normal, "If true, we will use CallLinkInfo to inline cache Wasm to JS calls.") \
    504504    v(bool, useEagerWebAssemblyModuleHashing, false, Normal, "Unnamed WebAssembly modules are identified in backtraces through their hash, if available.") \
     505    v(bool, useWebAssemblyReferences, true, Normal, "Allow types from the wasm references spec.") \
    505506    v(bool, useBigInt, false, Normal, "If true, we will enable BigInt support.") \
    506507    v(bool, useIntlNumberFormatToParts, enableIntlNumberFormatToParts, Normal, "If true, we will enable Intl.NumberFormat.prototype.formatToParts") \
  • trunk/Source/JavaScriptCore/wasm/WasmAirIRGenerator.cpp

    r245432 r245496  
    4242#include "BinarySwitch.h"
    4343#include "DisallowMacroScratchRegisterUsage.h"
     44#include "JSCInlines.h"
    4445#include "ScratchRegisterAllocator.h"
    4546#include "VirtualRegister.h"
     
    231232    ExpressionType addConstant(BasicBlock*, Type, uint64_t);
    232233
     234    PartialResult WARN_UNUSED_RETURN addRefIsNull(ExpressionType& value, ExpressionType& result);
     235
    233236    // Locals
    234237    PartialResult WARN_UNUSED_RETURN getLocal(uint32_t index, ExpressionType& result);
     
    361364            return g32();
    362365        case Type::I64:
     366        case Type::Anyref:
    363367            return g64();
    364368        case Type::F32:
     
    787791            break;
    788792        case Type::I64:
     793        case Type::Anyref:
    789794            append(Move, arg, m_locals[i]);
    790795            break;
     
    903908    case Type::I32:
    904909    case Type::I64:
     910    case Type::Anyref:
    905911        append(block, Move, Arg::bigImm(value), result);
    906912        break;
     
    923929{
    924930    RELEASE_ASSERT(m_locals.size() == signature.argumentCount()); // We handle arguments in the prologue
     931    return { };
     932}
     933
     934auto AirIRGenerator::addRefIsNull(ExpressionType& value, ExpressionType& result) -> PartialResult
     935{
     936    ASSERT(value.tmp());
     937    result = tmpForType(Type::I32);
     938    auto tmp = g64();
     939
     940    append(Move, Arg::bigImm(JSValue::encode(jsNull())), tmp);
     941    append(Compare64, Arg::relCond(MacroAssembler::Equal), value, tmp, result);
     942
    925943    return { };
    926944}
     
    15101528            break;
    15111529        case Type::I64:
     1530        case Type::Anyref:
    15121531            append(Move, returnValues[0], returnValueGPR);
    15131532            append(Ret64, returnValueGPR);
  • trunk/Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp

    r245432 r245496  
    185185    ExpressionType addConstant(Type, uint64_t);
    186186
     187    PartialResult WARN_UNUSED_RETURN addRefIsNull(ExpressionType& value, ExpressionType& result);
     188
    187189    // Locals
    188190    PartialResult WARN_UNUSED_RETURN getLocal(uint32_t index, ExpressionType& result);
     
    551553}
    552554
     555auto B3IRGenerator::addRefIsNull(ExpressionType& value, ExpressionType& result) -> PartialResult
     556{
     557    result = m_currentBlock->appendNew<Value>(m_proc, B3::Equal, origin(), value, m_currentBlock->appendNew<Const64Value>(m_proc, origin(), JSValue::encode(jsNull())));
     558    return { };
     559}
     560
    553561auto B3IRGenerator::getLocal(uint32_t index, ExpressionType& result) -> PartialResult
    554562{
  • trunk/Source/JavaScriptCore/wasm/WasmCallingConvention.h

    r240752 r245496  
    236236        case Type::I32:
    237237        case Type::I64:
     238        case Type::Anyref:
    238239            marshallArgumentImpl(m_gprArgs, gpArgumentCount, stackOffset, regFunc, stackFunc);
    239240            break;
     
    300301        case Type::I32:
    301302        case Type::I64:
     303        case Type::Anyref:
    302304            patchpoint->resultConstraint = B3::ValueRep::reg(GPRInfo::returnValueGPR);
    303305            break;
  • trunk/Source/JavaScriptCore/wasm/WasmFormat.h

    r239427 r245496  
    6363    case F64:
    6464        return true;
     65    case Anyref:
     66        return Options::useWebAssemblyReferences();
    6567    default:
    6668        break;
  • trunk/Source/JavaScriptCore/wasm/WasmFunctionParser.h

    r241579 r245496  
    106106{
    107107    if (verbose)
    108         dataLogLn("Parsing function starting at: ", (uintptr_t)functionStart, " of length: ", functionLength);
     108        dataLogLn("Parsing function starting at: ", (uintptr_t)functionStart, " of length: ", functionLength, " with signature: ", signature);
    109109    m_context.setParser(this);
    110110}
     
    282282    }
    283283
     284    case RefNull: {
     285        WASM_PARSER_FAIL_IF(!Options::useWebAssemblyReferences(), "references are not enabled");
     286        m_expressionStack.append(m_context.addConstant(Anyref, JSValue::encode(jsNull())));
     287        return { };
     288    }
     289
     290    case RefIsNull: {
     291        WASM_PARSER_FAIL_IF(!Options::useWebAssemblyReferences(), "references are not enabled");
     292        ExpressionType result, value;
     293        WASM_TRY_POP_EXPRESSION_STACK_INTO(value, "ref.is_null");
     294        WASM_TRY_ADD_TO_CONTEXT(addRefIsNull(value, result));
     295        m_expressionStack.append(result);
     296        return { };
     297    }
     298
    284299    case GetLocal: {
    285300        uint32_t index;
     
    640655    }
    641656
     657    case RefNull: {
     658        WASM_PARSER_FAIL_IF(!Options::useWebAssemblyReferences(), "references are not enabled");
     659        return { };
     660    }
     661
     662    case RefIsNull: {
     663        WASM_PARSER_FAIL_IF(!Options::useWebAssemblyReferences(), "references are not enabled");
     664        return { };
     665    }
     666
    642667    case GrowMemory:
    643668    case CurrentMemory: {
  • trunk/Source/JavaScriptCore/wasm/WasmValidate.cpp

    r241579 r245496  
    101101    ExpressionType addConstant(Type type, uint64_t) { return type; }
    102102
     103    Result WARN_UNUSED_RETURN addRefIsNull(ExpressionType& value, ExpressionType& result);
     104
    103105    // Locals
    104106    Result WARN_UNUSED_RETURN getLocal(uint32_t index, ExpressionType& result);
     
    167169    for (size_t i = 0; i < signature.argumentCount(); ++i)
    168170        WASM_FAIL_IF_HELPER_FAILS(addLocal(signature.argument(i), 1));
     171    return { };
     172}
     173
     174auto Validate::addRefIsNull(ExpressionType& value, ExpressionType& result) -> Result
     175{
     176    result = Type::I32;
     177    WASM_VALIDATOR_FAIL_IF(Type::Anyref != value, "ref.is_null to type ", value, " expected ", Type::Anyref);
     178
    169179    return { };
    170180}
  • trunk/Source/JavaScriptCore/wasm/generateWasmOpsHeader.py

    r226395 r245496  
    9696def bitSet():
    9797    v = ""
    98     for i in range(ceilDiv(maxOpValue, 8)):
     98    for i in range(ceilDiv(maxOpValue + 1, 8)):
    9999        entry = 0
    100100        for j in range(8):
  • trunk/Source/JavaScriptCore/wasm/js/JSToWasm.cpp

    r245432 r245496  
    8383            FALLTHROUGH;
    8484        case Wasm::I32:
     85        case Wasm::Anyref:
    8586            if (numGPRs >= wasmCallingConvention().m_gprArgs.size())
    8687                totalFrameSize += sizeof(void*);
     
    165166            case Wasm::I32:
    166167            case Wasm::I64:
     168            case Wasm::Anyref:
    167169                if (numGPRs >= wasmCallingConvention().m_gprArgs.size()) {
    168170                    if (signature.argument(i) == Wasm::I32) {
     
    248250        jit.moveTrustedValue(jsUndefined(), JSValueRegs { GPRInfo::returnValueGPR });
    249251        break;
     252    case Wasm::Anyref:
     253        // FIXME: We need to box wasm Funcrefs once they are supported here.
     254        break;
    250255    case Wasm::I32:
    251256        jit.zeroExtend32ToPtr(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR);
  • trunk/Source/JavaScriptCore/wasm/js/WasmToJS.cpp

    r243051 r245496  
    166166            case I64:
    167167                RELEASE_ASSERT_NOT_REACHED();
     168            case Anyref:
    168169            case I32: {
    169170                GPRReg gprReg;
     
    176177                    frOffset += sizeof(Register);
    177178                }
    178                 jit.zeroExtend32ToPtr(gprReg, gprReg);
     179                if (argType == I32)
     180                    jit.zeroExtend32ToPtr(gprReg, gprReg);
    179181                jit.store64(gprReg, buffer + bufferOffset);
    180182                ++marshalledGPRs;
     
    242244                        arg = jsNumber(static_cast<int32_t>(buffer[argNum]));
    243245                        break;
     246                    case Anyref:
     247                        // FIXME: We need to box wasm Funcrefs once they are supported here.
     248                        arg = JSValue::decode(buffer[argNum]);
     249                        break;
    244250                    case F32:
    245251                    case F64:
     
    271277                case I32: {
    272278                    realResult = static_cast<uint64_t>(static_cast<uint32_t>(result.toInt32(exec)));
     279                    break;
     280                }
     281                case Anyref: {
     282                    realResult = JSValue::encode(result);
    273283                    break;
    274284                }
     
    365375            case I64:
    366376                RELEASE_ASSERT_NOT_REACHED(); // Handled above.
     377            case Anyref:
    367378            case I32: {
    368379                GPRReg gprReg;
     
    376387                }
    377388                ++marshalledGPRs;
    378                 jit.zeroExtend32ToPtr(gprReg, gprReg); // Clear non-int32 and non-tag bits.
    379                 jit.boxInt32(gprReg, JSValueRegs(gprReg), DoNotHaveTagRegisters);
     389                if (argType == I32) {
     390                    jit.zeroExtend32ToPtr(gprReg, gprReg); // Clear non-int32 and non-tag bits.
     391                    jit.boxInt32(gprReg, JSValueRegs(gprReg), DoNotHaveTagRegisters);
     392                }
     393                // FIXME: We need to box wasm Funcrefs once they are supported here.
    380394                jit.store64(gprReg, calleeFrame.withOffset(calleeFrameOffset));
    381395                calleeFrameOffset += sizeof(Register);
     
    431445            case I64:
    432446                RELEASE_ASSERT_NOT_REACHED(); // Handled above.
     447            case Anyref:
    433448            case I32:
    434449                // Skipped: handled above.
     
    539554        break;
    540555    }
     556    case Anyref:
     557        break;
    541558    case F32: {
    542559        CCallHelpers::JumpList done;
  • trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp

    r245432 r245496  
    8585            arg = JSValue::decode(arg.toInt32(exec));
    8686            break;
     87        case Wasm::Anyref:
     88            break;
    8789        case Wasm::I64:
    8890            arg = JSValue();
     
    226228            argumentsIncludeI64 = true;
    227229            break;
     230        case Wasm::Anyref:
    228231        case Wasm::I32:
    229232            if (numGPRs >= Wasm::wasmCallingConvention().m_gprArgs.size())
     
    301304                }
    302305                break;
     306            case Wasm::Anyref: {
     307                jit.load64(CCallHelpers::Address(GPRInfo::callFrameRegister, jsOffset), scratchGPR);
     308
     309                if (numGPRs >= Wasm::wasmCallingConvention().m_gprArgs.size()) {
     310                    jit.store64(scratchGPR, calleeFrame.withOffset(wasmOffset));
     311                    wasmOffset += sizeof(CPURegister);
     312                } else {
     313                    jit.move(scratchGPR, Wasm::wasmCallingConvention().m_gprArgs[numGPRs].gpr());
     314                    ++numGPRs;
     315                }
     316                break;
     317            }
    303318            case Wasm::F32:
    304319            case Wasm::F64:
     
    452467        break;
    453468    }
     469    case Wasm::Anyref: {
     470        // FIXME: We need to box wasm Funcrefs once they are supported here.
     471        break;
     472    }
    454473    case Wasm::I64:
    455474    case Wasm::Func:
  • trunk/Source/JavaScriptCore/wasm/wasm.json

    r243514 r245496  
    1313        "f64":     { "type": "varint7", "value":  -4, "b3type": "B3::Double" },
    1414        "anyfunc": { "type": "varint7", "value": -16, "b3type": "B3::Void" },
     15        "anyref":  { "type": "varint7", "value": -17, "b3type": "B3::Int64" },
    1516        "func":    { "type": "varint7", "value": -32, "b3type": "B3::Void" },
    1617        "void":    { "type": "varint7", "value": -64, "b3type": "B3::Void" }
    1718    },
    18     "value_type": ["i32", "i64", "f32", "f64"],
    19     "block_type": ["i32", "i64", "f32", "f64", "void"],
     19    "value_type": ["i32", "i64", "f32", "f64", "anyref"],
     20    "block_type": ["i32", "i64", "f32", "f64", "void", "anyref"],
    2021    "elem_type": ["anyfunc"],
    2122    "external_kind": {
     
    5960        "f64.const":           { "category": "special",    "value":  68, "return": ["f64"],      "parameter": [],                       "immediate": [{"name": "value",          "type": "double"}],                                               "description": "a constant value interpreted as f64" },
    6061        "f32.const":           { "category": "special",    "value":  67, "return": ["f32"],      "parameter": [],                       "immediate": [{"name": "value",          "type": "float"}],                                                "description": "a constant value interpreted as f32" },
     62        "ref.null":            { "category": "special",    "value": 208, "return": ["anyref"],   "parameter": [],                       "immediate": [],                                                                                           "description": "a constant null reference" },
     63        "ref.is_null":         { "category": "special",    "value": 209, "return": ["i32"],      "parameter": ["anyref"],               "immediate": [],                                                                                           "description": "determine if a reference is null" },
    6164        "get_local":           { "category": "special",    "value":  32, "return": ["any"],      "parameter": [],                       "immediate": [{"name": "local_index",    "type": "varuint32"}],                                            "description": "read a local variable or parameter" },
    6265        "set_local":           { "category": "special",    "value":  33, "return": [],           "parameter": ["any"],                  "immediate": [{"name": "local_index",    "type": "varuint32"}],                                            "description": "write a local variable or parameter" },
  • trunk/Tools/ChangeLog

    r245492 r245496  
     12019-05-17  Justin Michaud  <justin_michaud@apple.com>
     2
     3        [WASM-References] Add support for Anyref in parameters and return types, Ref.null and Ref.is_null for Anyref values.
     4        https://bugs.webkit.org/show_bug.cgi?id=197969
     5
     6        Run wasm tests additionally with wasmBBQUsesAir=0.
     7
     8        Reviewed by Keith Miller.
     9
     10        * Scripts/run-jsc-stress-tests:
     11
    1122019-05-17  Don Olmstead  <don.olmstead@sony.com>
    213
  • trunk/Tools/Scripts/run-jsc-stress-tests

    r244915 r245496  
    10811081        run("wasm-no-tls-context", "-m", "--useFastTLSForWasmContext=false", *FTL_OPTIONS)
    10821082        run("wasm-slow-memory", "-m", "--useWebAssemblyFastMemory=false", *FTL_OPTIONS)
     1083        run("wasm-no-air", "-m", "--wasmBBQUsesAir=false", *FTL_OPTIONS)
    10831084    end
    10841085end
     
    10971098        run("wasm-no-tls-context", "-m", "--useFastTLSForWasmContext=false", *FTL_OPTIONS)
    10981099        run("wasm-slow-memory", "-m", "--useWebAssemblyFastMemory=false", *FTL_OPTIONS)
     1100        run("wasm-no-air", "-m", "--wasmBBQUsesAir=false", *FTL_OPTIONS)
    10991101    end
    11001102end
     
    11151117        run("wasm-no-call-ic", "--useCallICsForWebAssemblyToJSCalls=false", *FTL_OPTIONS)
    11161118        run("wasm-no-tls-context", "--useFastTLSForWasmContext=false", *FTL_OPTIONS)
     1119        run("wasm-no-air", "--wasmBBQUsesAir=false", *FTL_OPTIONS)
    11171120    end
    11181121end
     
    11391142      runWithOutputHandler("wasm-no-call-ic", noisyOutputHandler, "../spec-harness.js", "--useCallICsForWebAssemblyToJSCalls=false", *FTL_OPTIONS)
    11401143      runWithOutputHandler("wasm-no-tls-context", noisyOutputHandler, "../spec-harness.js", "--useFastTLSForWasmContext=false", *FTL_OPTIONS)
     1144      runWithOutputHandler("wasm-no-air", noisyOutputHandler, "../spec-harness.js", "--wasmBBQUsesAir=false", *FTL_OPTIONS)
    11411145    end
    11421146end
Note: See TracChangeset for help on using the changeset viewer.