[wasm-simd] Surface V128 in inspector

For now, V128 values are converted to String16 (since they are not
serializable). It is shown as a list of 16 uint8_t (hex). This
description can be tweaked as necessary.

Some updates to ARM64 required to push/pop the full Q register.

Bug: v8:10347
Bug: chromium:1130474
Change-Id: I1bffbb49f47c06da3cd26d830addae0416a4441a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2422082
Reviewed-by: Kim-Anh Tran <kimanh@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70096}
This commit is contained in:
Ng Zhi An 2020-09-22 12:33:11 -07:00 committed by Commit Bot
parent f20230afd1
commit ebe43399b1
12 changed files with 275 additions and 72 deletions

View File

@ -3464,7 +3464,7 @@ void Builtins::Generate_WasmDebugBreak(MacroAssembler* masm) {
// Save all parameter registers. They might hold live values, we restore
// them after the runtime call.
__ PushXRegList(WasmDebugBreakFrameConstants::kPushedGpRegs);
__ PushDRegList(WasmDebugBreakFrameConstants::kPushedFpRegs);
__ PushQRegList(WasmDebugBreakFrameConstants::kPushedFpRegs);
// Initialize the JavaScript context with 0. CEntry will use it to
// set the current context on the isolate.
@ -3472,7 +3472,7 @@ void Builtins::Generate_WasmDebugBreak(MacroAssembler* masm) {
__ CallRuntime(Runtime::kWasmDebugBreak, 0);
// Restore registers.
__ PopDRegList(WasmDebugBreakFrameConstants::kPushedFpRegs);
__ PopQRegList(WasmDebugBreakFrameConstants::kPushedFpRegs);
__ PopXRegList(WasmDebugBreakFrameConstants::kPushedGpRegs);
}
__ Ret();

View File

@ -1714,6 +1714,12 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler {
inline void PopWRegList(RegList regs) {
PopSizeRegList(regs, kWRegSizeInBits);
}
inline void PushQRegList(RegList regs) {
PushSizeRegList(regs, kQRegSizeInBits, CPURegister::kVRegister);
}
inline void PopQRegList(RegList regs) {
PopSizeRegList(regs, kQRegSizeInBits, CPURegister::kVRegister);
}
inline void PushDRegList(RegList regs) {
PushSizeRegList(regs, kDRegSizeInBits, CPURegister::kVRegister);
}

View File

@ -110,7 +110,7 @@ class WasmDebugBreakFrameConstants : public TypedFrameConstants {
-RoundUp<16>(TypedFrameConstants::kFixedFrameSizeFromFp) -
kSystemPointerSize * kNumPushedGpRegisters;
static constexpr int kLastPushedFpRegisterOffset =
kLastPushedGpRegisterOffset - kDoubleSize * kNumPushedFpRegisters;
kLastPushedGpRegisterOffset - kSimd128Size * kNumPushedFpRegisters;
// Offsets are fp-relative.
static int GetPushedGpRegisterOffset(int reg_code) {
@ -124,7 +124,7 @@ class WasmDebugBreakFrameConstants : public TypedFrameConstants {
DCHECK_NE(0, kPushedFpRegs & (1 << reg_code));
uint32_t lower_regs = kPushedFpRegs & ((uint32_t{1} << reg_code) - 1);
return kLastPushedFpRegisterOffset +
base::bits::CountPopulation(lower_regs) * kDoubleSize;
base::bits::CountPopulation(lower_regs) * kSimd128Size;
}
};

View File

@ -196,6 +196,14 @@ void String16Builder::appendUnsignedAsHex(uint32_t number) {
m_buffer.insert(m_buffer.end(), buffer, buffer + chars);
}
void String16Builder::appendUnsignedAsHex(uint8_t number) {
constexpr int kBufferSize = 3;
char buffer[kBufferSize];
int chars = v8::base::OS::SNPrintF(buffer, kBufferSize, "%02" PRIx8, number);
DCHECK_LE(0, chars);
m_buffer.insert(m_buffer.end(), buffer, buffer + chars);
}
String16 String16Builder::toString() {
return String16(m_buffer.data(), m_buffer.size());
}

View File

@ -128,6 +128,7 @@ class String16Builder {
void appendNumber(size_t);
void appendUnsignedAsHex(uint64_t);
void appendUnsignedAsHex(uint32_t);
void appendUnsignedAsHex(uint8_t);
String16 toString();
void reserveCapacity(size_t);

View File

@ -54,6 +54,15 @@ ResultType unpackWasmValue(v8::Local<v8::Context> context,
return result;
}
String16 descriptionForWasmS128(std::array<uint8_t, 16> arr) {
String16Builder builder;
for (int i = 0; i < 16; i++) {
builder.appendUnsignedAsHex(arr.at(i));
builder.append(" ");
}
return builder.toString();
}
// Partial list of Wasm's ValueType, copied here to avoid including internal
// header. Using an unscoped enumeration here to allow implicit conversions from
// int. Keep in sync with ValueType::Kind in wasm/value-type.h.
@ -176,6 +185,14 @@ Response toProtocolValue(v8::Local<v8::Context> context,
unpackWasmValue<double>(context, wasmValue->bytes()));
break;
}
case kS128: {
auto bytes = wasmValue->bytes();
DCHECK_EQ(16, bytes->Length());
auto s128 = unpackWasmValue<std::array<uint8_t, 16>>(context, bytes);
String16 desc = descriptionForWasmS128(s128);
*result = protocol::StringValue::create(desc);
break;
}
case kExternRef: {
std::unique_ptr<protocol::Value> externrefValue;
Response response = toProtocolValue(context, wasmValue->ref(), maxDepth,
@ -525,6 +542,8 @@ class WasmValueMirror final : public ValueMirror {
return RemoteObject::SubtypeEnum::F32;
case kF64:
return RemoteObject::SubtypeEnum::F64;
case kS128:
return RemoteObject::SubtypeEnum::V128;
case kExternRef:
return RemoteObject::SubtypeEnum::Externref;
default:
@ -553,6 +572,13 @@ class WasmValueMirror final : public ValueMirror {
return String16::fromDouble(
unpackWasmValue<double>(context, m_value->bytes()));
}
case kS128: {
*serializable = false;
auto bytes = m_value->bytes();
DCHECK_EQ(16, bytes->Length());
auto s128 = unpackWasmValue<std::array<uint8_t, 16>>(context, bytes);
return descriptionForWasmS128(s128);
}
case kExternRef: {
return descriptionForObject(context->GetIsolate(),
m_value->ref().As<v8::Object>());

View File

@ -19,6 +19,7 @@
#include "src/wasm/baseline/liftoff-compiler.h"
#include "src/wasm/baseline/liftoff-register.h"
#include "src/wasm/module-decoder.h"
#include "src/wasm/value-type.h"
#include "src/wasm/wasm-code-manager.h"
#include "src/wasm/wasm-limits.h"
#include "src/wasm/wasm-module.h"
@ -131,6 +132,12 @@ Handle<Object> WasmValueToValueObject(Isolate* isolate, WasmValue value) {
memcpy(bytes->GetDataStartAddress(), &val, sizeof(val));
break;
}
case ValueType::kS128: {
Simd128 s128 = value.to_s128();
bytes = isolate->factory()->NewByteArray(kSimd128Size);
memcpy(bytes->GetDataStartAddress(), s128.bytes(), kSimd128Size);
break;
}
case ValueType::kOptRef: {
if (value.type().is_reference_to(HeapType::kExtern)) {
return isolate->factory()->NewWasmValue(
@ -758,16 +765,26 @@ class DebugInfoImpl {
? WasmValue(ReadUnalignedValue<uint32_t>(gp_addr(reg.gp())))
: WasmValue(ReadUnalignedValue<uint64_t>(gp_addr(reg.gp())));
}
// TODO(clemensb/zhin): Fix this for SIMD.
DCHECK(reg.is_fp() || reg.is_fp_pair());
if (reg.is_fp_pair()) UNIMPLEMENTED();
// ifdef here to workaround unreachable code for is_fp_pair.
#ifdef V8_TARGET_ARCH_ARM
int code = reg.is_fp_pair() ? reg.low_fp().code() : reg.fp().code();
#else
int code = reg.fp().code();
#endif
Address spilled_addr =
debug_break_fp +
WasmDebugBreakFrameConstants::GetPushedFpRegisterOffset(
reg.fp().code());
return type == kWasmF32
? WasmValue(ReadUnalignedValue<float>(spilled_addr))
: WasmValue(ReadUnalignedValue<double>(spilled_addr));
WasmDebugBreakFrameConstants::GetPushedFpRegisterOffset(code);
if (type == kWasmF32) {
return WasmValue(ReadUnalignedValue<float>(spilled_addr));
} else if (type == kWasmF64) {
return WasmValue(ReadUnalignedValue<double>(spilled_addr));
} else if (type == kWasmS128) {
return WasmValue(Simd128(ReadUnalignedValue<int16>(spilled_addr)));
} else {
// All other cases should have been handled above.
UNREACHABLE();
}
}
// Otherwise load the value from the stack.
@ -782,6 +799,9 @@ class DebugInfoImpl {
return WasmValue(ReadUnalignedValue<float>(stack_address));
case ValueType::kF64:
return WasmValue(ReadUnalignedValue<double>(stack_address));
case ValueType::kS128: {
return WasmValue(Simd128(ReadUnalignedValue<int16>(stack_address)));
}
default:
UNIMPLEMENTED();
}

View File

@ -44,6 +44,8 @@ class Simd128 {
FOREACH_SIMD_TYPE(DEFINE_SIMD_TYPE_SPECIFIC_METHODS)
#undef DEFINE_SIMD_TYPE_SPECIFIC_METHODS
const uint8_t* bytes() { return val_; }
private:
uint8_t val_[16] = {0};
};

View File

@ -4,14 +4,14 @@ Waiting for wasm script to be parsed.
Got wasm script!
Setting breakpoint on first instruction of second function
{
columnNumber : 143
columnNumber : 145
lineNumber : 0
scriptId : <scriptId>
}
Paused:
Script wasm://wasm/e7879e16 byte offset 143: Wasm opcode 0x41
Script wasm://wasm/e1bff2da byte offset 145: Wasm opcode 0x41
Scope:
at func (0:143):
at func (0:145):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -24,6 +24,7 @@ at func (0:143):
var1: 0 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -41,9 +42,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 145: Wasm opcode 0x21
Script wasm://wasm/e1bff2da byte offset 147: Wasm opcode 0x21
Scope:
at func (0:145):
at func (0:147):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -56,6 +57,7 @@ at func (0:145):
var1: 0 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 11 (i32)
at call_func (0:132):
@ -74,9 +76,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 147: Wasm opcode 0x41
Script wasm://wasm/e1bff2da byte offset 149: Wasm opcode 0x41
Scope:
at func (0:147):
at func (0:149):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -89,6 +91,7 @@ at func (0:147):
var1: 0 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -106,9 +109,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 149: Wasm opcode 0x21
Script wasm://wasm/e1bff2da byte offset 151: Wasm opcode 0x21
Scope:
at func (0:149):
at func (0:151):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -121,6 +124,7 @@ at func (0:149):
var1: 0 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 47 (i32)
at call_func (0:132):
@ -139,9 +143,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 151: Wasm opcode 0x42
Script wasm://wasm/e1bff2da byte offset 153: Wasm opcode 0x42
Scope:
at func (0:151):
at func (0:153):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -154,6 +158,7 @@ at func (0:151):
var1: 47 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -171,9 +176,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 162: Wasm opcode 0x21
Script wasm://wasm/e1bff2da byte offset 164: Wasm opcode 0x21
Scope:
at func (0:162):
at func (0:164):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -186,6 +191,7 @@ at func (0:162):
var1: 47 (i32)
i64_local: 0 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 9223372036854775807 (i64)
at call_func (0:132):
@ -204,9 +210,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 164: Wasm opcode 0x42
Script wasm://wasm/e1bff2da byte offset 166: Wasm opcode 0x42
Scope:
at func (0:164):
at func (0:166):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -219,6 +225,7 @@ at func (0:164):
var1: 47 (i32)
i64_local: 9223372036854775807 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -236,9 +243,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 175: Wasm opcode 0x21
Script wasm://wasm/e1bff2da byte offset 177: Wasm opcode 0x21
Scope:
at func (0:175):
at func (0:177):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -251,6 +258,7 @@ at func (0:175):
var1: 47 (i32)
i64_local: 9223372036854775807 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: -9223372036854775808 (i64)
at call_func (0:132):
@ -269,9 +277,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 177: Wasm opcode 0x41
Script wasm://wasm/e1bff2da byte offset 179: Wasm opcode 0x41
Scope:
at func (0:177):
at func (0:179):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -284,6 +292,7 @@ at func (0:177):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -301,9 +310,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 179: Wasm opcode 0xb8
Script wasm://wasm/e1bff2da byte offset 181: Wasm opcode 0xb8
Scope:
at func (0:179):
at func (0:181):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -316,6 +325,7 @@ at func (0:179):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 1 (i32)
at call_func (0:132):
@ -334,9 +344,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 180: Wasm opcode 0x41
Script wasm://wasm/e1bff2da byte offset 182: Wasm opcode 0x41
Scope:
at func (0:180):
at func (0:182):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -349,6 +359,7 @@ at func (0:180):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 1 (f64)
at call_func (0:132):
@ -367,9 +378,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 182: Wasm opcode 0xb8
Script wasm://wasm/e1bff2da byte offset 184: Wasm opcode 0xb8
Scope:
at func (0:182):
at func (0:184):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -382,6 +393,7 @@ at func (0:182):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 1 (f64)
1: 7 (i32)
@ -401,9 +413,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 183: Wasm opcode 0xa3
Script wasm://wasm/e1bff2da byte offset 185: Wasm opcode 0xa3
Scope:
at func (0:183):
at func (0:185):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -416,6 +428,7 @@ at func (0:183):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 1 (f64)
1: 7 (f64)
@ -435,9 +448,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 184: Wasm opcode 0x21
Script wasm://wasm/e1bff2da byte offset 186: Wasm opcode 0x21
Scope:
at func (0:184):
at func (0:186):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -450,6 +463,7 @@ at func (0:184):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 0.14285714285714285 (f64)
at call_func (0:132):
@ -468,9 +482,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 186: Wasm opcode 0x41
Script wasm://wasm/e1bff2da byte offset 188: Wasm opcode 0x41
Scope:
at func (0:186):
at func (0:188):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -483,6 +497,7 @@ at func (0:186):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -500,9 +515,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 188: Wasm opcode 0x24
Script wasm://wasm/e1bff2da byte offset 190: Wasm opcode 0xfd
Scope:
at func (0:188):
at func (0:190):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -515,6 +530,108 @@ at func (0:188):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 23 (i32)
at call_func (0:132):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
var0: 4 (i32)
var1: 7.199999809265137 (f32)
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
Paused:
Script wasm://wasm/e1bff2da byte offset 192: Wasm opcode 0x21
Scope:
at func (0:192):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
0: 0 (f64)
i32Arg: 11 (i32)
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
at call_func (0:132):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
var0: 4 (i32)
var1: 7.199999809265137 (f32)
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
Paused:
Script wasm://wasm/e1bff2da byte offset 194: Wasm opcode 0x41
Scope:
at func (0:194):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
0: 0 (f64)
i32Arg: 11 (i32)
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
var0: 4 (i32)
var1: 7.199999809265137 (f32)
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
Paused:
Script wasm://wasm/e1bff2da byte offset 196: Wasm opcode 0x24
Scope:
at func (0:196):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
function tables:
exported_table: js_func: function js_func() { [native code] }, anonymous: function () { [native code] }, call_func: function 0() { [native code] }
globals: "exported_global": 0 (i32)
- scope (local):
0: 0 (f64)
i32Arg: 11 (i32)
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 15 (i32)
at call_func (0:132):
@ -533,9 +650,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 190: Wasm opcode 0x0b
Script wasm://wasm/e1bff2da byte offset 198: Wasm opcode 0x0b
Scope:
at func (0:190):
at func (0:198):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -548,6 +665,7 @@ at func (0:190):
var1: 47 (i32)
i64_local: -9223372036854775808 (i64)
unicode☼f64: 0.14285714285714285 (f64)
var6: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
at call_func (0:132):
- scope (module):
@ -565,7 +683,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/e7879e16 byte offset 134: Wasm opcode 0x0b
Script wasm://wasm/e1bff2da byte offset 134: Wasm opcode 0x0b
Scope:
at call_func (0:134):
- scope (module):

View File

@ -4,14 +4,14 @@ Waiting for wasm script to be parsed.
Got wasm script!
Setting breakpoint on line 2 (first instruction) of third function
{
columnNumber : 159
columnNumber : 167
lineNumber : 0
scriptId : <scriptId>
}
Paused:
Script wasm://wasm/7f06385e byte offset 159: Wasm opcode 0x20
Script wasm://wasm/ed01bcee byte offset 167: Wasm opcode 0x20
Scope:
at C (interpreted) (0:159):
at C (interpreted) (0:167):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -22,7 +22,7 @@ at C (interpreted) (0:159):
i32_arg: 42 (i32)
i32_local: 0 (i32)
- scope (wasm-expression-stack):
at B (liftoff) (0:150):
at B (liftoff) (0:158):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -35,6 +35,7 @@ at B (liftoff) (0:150):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -53,9 +54,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 161: Wasm opcode 0x24
Script wasm://wasm/ed01bcee byte offset 169: Wasm opcode 0x24
Scope:
at C (interpreted) (0:161):
at C (interpreted) (0:169):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -67,7 +68,7 @@ at C (interpreted) (0:161):
i32_local: 0 (i32)
- scope (wasm-expression-stack):
0: 42 (i32)
at B (liftoff) (0:150):
at B (liftoff) (0:158):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -80,6 +81,7 @@ at B (liftoff) (0:150):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -98,9 +100,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 163: Wasm opcode 0x41
Script wasm://wasm/ed01bcee byte offset 171: Wasm opcode 0x41
Scope:
at C (interpreted) (0:163):
at C (interpreted) (0:171):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -111,7 +113,7 @@ at C (interpreted) (0:163):
i32_arg: 42 (i32)
i32_local: 0 (i32)
- scope (wasm-expression-stack):
at B (liftoff) (0:150):
at B (liftoff) (0:158):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -124,6 +126,7 @@ at B (liftoff) (0:150):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -142,9 +145,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 165: Wasm opcode 0x21
Script wasm://wasm/ed01bcee byte offset 173: Wasm opcode 0x21
Scope:
at C (interpreted) (0:165):
at C (interpreted) (0:173):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -156,7 +159,7 @@ at C (interpreted) (0:165):
i32_local: 0 (i32)
- scope (wasm-expression-stack):
0: 47 (i32)
at B (liftoff) (0:150):
at B (liftoff) (0:158):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -169,6 +172,7 @@ at B (liftoff) (0:150):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -187,9 +191,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 167: Wasm opcode 0x0b
Script wasm://wasm/ed01bcee byte offset 175: Wasm opcode 0x0b
Scope:
at C (interpreted) (0:167):
at C (interpreted) (0:175):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -200,7 +204,7 @@ at C (interpreted) (0:167):
i32_arg: 42 (i32)
i32_local: 47 (i32)
- scope (wasm-expression-stack):
at B (liftoff) (0:150):
at B (liftoff) (0:158):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -213,6 +217,7 @@ at B (liftoff) (0:150):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -231,9 +236,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 152: Wasm opcode 0x1a
Script wasm://wasm/ed01bcee byte offset 160: Wasm opcode 0x1a
Scope:
at B (liftoff) (0:152):
at B (liftoff) (0:160):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -246,6 +251,7 @@ at B (liftoff) (0:152):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
1: 3 (i32)
@ -264,9 +270,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 153: Wasm opcode 0x1a
Script wasm://wasm/ed01bcee byte offset 161: Wasm opcode 0x1a
Scope:
at B (liftoff) (0:153):
at B (liftoff) (0:161):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -279,6 +285,7 @@ at B (liftoff) (0:153):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
0: 42 (i32)
at A (liftoff) (0:128):
@ -296,9 +303,9 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 154: Wasm opcode 0x0b
Script wasm://wasm/ed01bcee byte offset 162: Wasm opcode 0x0b
Scope:
at B (liftoff) (0:154):
at B (liftoff) (0:162):
- scope (module):
instance: exports: "exported_global" (Global), "exported_memory" (Memory), "exported_table" (Table), "main" (Function)
exported_memory: Uint8Array(65536)
@ -311,6 +318,7 @@ at B (liftoff) (0:154):
i32_local: 0 (i32)
f32_local: 7.199999809265137 (f32)
var5: 0 (f32)
v128_local: 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 (v128)
- scope (wasm-expression-stack):
at A (liftoff) (0:128):
- scope (module):
@ -327,7 +335,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/7f06385e byte offset 130: Wasm opcode 0x0b
Script wasm://wasm/ed01bcee byte offset 130: Wasm opcode 0x0b
Scope:
at A (liftoff) (0:130):
- scope (module):

View File

@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --experimental-wasm-type-reflection
// Flags: --experimental-wasm-type-reflection --experimental-wasm-simd
// SIMD in Liftoff only works with these cpu features, force them on.
// Flags: --enable-sse3 --enable-ssse3 --enable-sse4-1
utils.load('test/inspector/wasm-inspector-test.js');
@ -83,9 +85,14 @@ async function instantiateWasm() {
builder.addFunction('B (liftoff)', kSig_v_i, ['i32_arg'])
.addLocals(kWasmI32, 1, ['i32_local'])
.addLocals(kWasmF32, 4, ['f32_local', '0', '0'])
.addLocals(kWasmS128, 1, ['v128_local'])
.addBody([
// Load a parameter and a constant onto the operand stack.
kExprLocalGet, 0, kExprI32Const, 3,
// Set local 6 to v128 i32.x4 23, 23, 23, 23.
kExprI32Const, 23,
kSimdPrefix, kExprI32x4Splat,
kExprLocalSet, 6,
// Set local 2 to 7.2.
...wasmF32Const(7.2), kExprLocalSet, 2,
// Call function 'C', forwarding param 0.

View File

@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --experimental-wasm-type-reflection
// Flags: --experimental-wasm-type-reflection --experimental-wasm-simd
// SIMD in Liftoff only works with these cpu features, force them on.
// Flags: --enable-sse3 --enable-ssse3 --enable-sse4-1
utils.load('test/inspector/wasm-inspector-test.js');
@ -87,6 +89,7 @@ async function instantiateWasm() {
.addLocals(kWasmI32, 1)
.addLocals(kWasmI64, 1, ['i64_local'])
.addLocals(kWasmF64, 3, ['unicode☼f64', '0', '0'])
.addLocals(kWasmS128, 1)
.addBody([
// Set param 0 to 11.
kExprI32Const, 11, kExprLocalSet, 0,
@ -101,6 +104,10 @@ async function instantiateWasm() {
// Set local 3 to 1/7.
kExprI32Const, 1, kExprF64UConvertI32, kExprI32Const, 7,
kExprF64UConvertI32, kExprF64Div, kExprLocalSet, 3,
// Set local 6 to [23, 23, 23, 23]
kExprI32Const, 23,
kSimdPrefix, kExprI32x4Splat,
kExprLocalSet, 6,
// Set global 0 to 15
kExprI32Const, 15, kExprGlobalSet, 0,