| Index: src/wasm/wasm-opcodes.h
|
| diff --git a/src/wasm/wasm-opcodes.h b/src/wasm/wasm-opcodes.h
|
| index 764c5030f5f735554273c8f52780c6dfb805990a..bd9154501d0bb4b547bd6e25fef30046c1bc0404 100644
|
| --- a/src/wasm/wasm-opcodes.h
|
| +++ b/src/wasm/wasm-opcodes.h
|
| @@ -18,7 +18,8 @@ enum LocalTypeCode {
|
| kLocalI32 = 1,
|
| kLocalI64 = 2,
|
| kLocalF32 = 3,
|
| - kLocalF64 = 4
|
| + kLocalF64 = 4,
|
| + kLocalS128 = 5
|
| };
|
|
|
| // Binary encoding of memory types.
|
| @@ -32,7 +33,8 @@ enum MemTypeCode {
|
| kMemI64 = 6,
|
| kMemU64 = 7,
|
| kMemF32 = 8,
|
| - kMemF64 = 9
|
| + kMemF64 = 9,
|
| + kMemS128 = 10
|
| };
|
|
|
| // We reuse the internal machine type to represent WebAssembly AST types.
|
| @@ -43,6 +45,7 @@ const LocalType kAstI32 = MachineRepresentation::kWord32;
|
| const LocalType kAstI64 = MachineRepresentation::kWord64;
|
| const LocalType kAstF32 = MachineRepresentation::kFloat32;
|
| const LocalType kAstF64 = MachineRepresentation::kFloat64;
|
| +const LocalType kAstS128 = MachineRepresentation::kSimd128;
|
| // We use kTagged here because kNone is already used by kAstStmt.
|
| const LocalType kAstEnd = MachineRepresentation::kTagged;
|
|
|
| @@ -120,6 +123,7 @@ const WasmCodePosition kNoCodePosition = -1;
|
|
|
| // Expressions with signatures.
|
| #define FOREACH_SIMPLE_OPCODE(V) \
|
| + FOREACH_SIMD_OPCODE(V) \
|
| V(I32Add, 0x40, i_ii) \
|
| V(I32Sub, 0x41, i_ii) \
|
| V(I32Mul, 0x42, i_ii) \
|
| @@ -278,6 +282,11 @@ const WasmCodePosition kNoCodePosition = -1;
|
| V(I32AsmjsSConvertF64, 0xe2, i_d) \
|
| V(I32AsmjsUConvertF64, 0xe3, i_d)
|
|
|
| +// Simd opcodes
|
| +#define FOREACH_SIMD_OPCODE(V) \
|
| + V(Int32x4Splat, 0xe4, s_i) \
|
| + V(Int32x4ExtractLane, 0xe5, i_si)
|
| +
|
| // All opcodes.
|
| #define FOREACH_OPCODE(V) \
|
| FOREACH_CONTROL_OPCODE(V) \
|
| @@ -316,7 +325,9 @@ const WasmCodePosition kNoCodePosition = -1;
|
| V(d_l, kAstF64, kAstI64) \
|
| V(d_id, kAstF64, kAstI32, kAstF64) \
|
| V(f_if, kAstF32, kAstI32, kAstF32) \
|
| - V(l_il, kAstI64, kAstI32, kAstI64)
|
| + V(l_il, kAstI64, kAstI32, kAstI64) \
|
| + V(s_i, kAstS128, kAstI32) \
|
| + V(i_si, kAstI32, kAstS128, kAstI32)
|
|
|
| enum WasmOpcode {
|
| // Declare expression opcodes.
|
| @@ -349,6 +360,7 @@ class WasmOpcodes {
|
| static const char* OpcodeName(WasmOpcode opcode);
|
| static const char* ShortOpcodeName(WasmOpcode opcode);
|
| static FunctionSig* Signature(WasmOpcode opcode);
|
| + static bool IsSimd(WasmOpcode opcode);
|
|
|
| static int TrapReasonToMessageId(TrapReason reason);
|
| static const char* TrapReasonMessage(TrapReason reason);
|
| @@ -369,6 +381,8 @@ class WasmOpcodes {
|
| return kLocalF64;
|
| case kAstStmt:
|
| return kLocalVoid;
|
| + case kAstS128:
|
| + return kLocalS128;
|
| default:
|
| UNREACHABLE();
|
| return kLocalVoid;
|
| @@ -396,6 +410,8 @@ class WasmOpcodes {
|
| return kMemF32;
|
| } else if (type == MachineType::Float64()) {
|
| return kMemF64;
|
| + } else if (type == MachineType::Simd128()) {
|
| + return kMemS128;
|
| } else {
|
| UNREACHABLE();
|
| return kMemI32;
|
| @@ -412,6 +428,8 @@ class WasmOpcodes {
|
| return MachineType::Float32();
|
| case kAstF64:
|
| return MachineType::Float64();
|
| + case kAstS128:
|
| + return MachineType::Simd128();
|
| case kAstStmt:
|
| return MachineType::None();
|
| default:
|
| @@ -441,6 +459,8 @@ class WasmOpcodes {
|
| return kAstF32;
|
| } else if (type == MachineType::Float64()) {
|
| return kAstF64;
|
| + } else if (type == MachineType::Simd128()) {
|
| + return kAstS128;
|
| } else {
|
| UNREACHABLE();
|
| return kAstI32;
|
| @@ -484,6 +504,8 @@ class WasmOpcodes {
|
| return 'f';
|
| case kAstF64:
|
| return 'd';
|
| + case kAstS128:
|
| + return 's';
|
| case kAstStmt:
|
| return 'v';
|
| case kAstEnd:
|
| @@ -504,6 +526,8 @@ class WasmOpcodes {
|
| return "f32";
|
| case kAstF64:
|
| return "f64";
|
| + case kAstS128:
|
| + return "s128";
|
| case kAstStmt:
|
| return "<stmt>";
|
| case kAstEnd:
|
|
|