[wasm-gc] Implement StackEffect for GC instructions
Bug: v8:7748 Change-Id: I1c844768e09095ad85396f1752420b616048ec36 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2278473 Commit-Queue: Manos Koukoutos <manoskouk@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#68665}
This commit is contained in:
parent
ecfbc749b7
commit
0215fd7232
@ -1827,10 +1827,53 @@ class WasmDecoder : public Decoder {
|
|||||||
sig = WasmOpcodes::Signature(opcode);
|
sig = WasmOpcodes::Signature(opcode);
|
||||||
if (sig) {
|
if (sig) {
|
||||||
return {sig->parameter_count(), sig->return_count()};
|
return {sig->parameter_count(), sig->return_count()};
|
||||||
|
} else {
|
||||||
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
V8_FALLTHROUGH;
|
}
|
||||||
|
case kGCPrefix: {
|
||||||
|
opcode = this->read_prefixed_opcode<validate>(pc);
|
||||||
|
switch (opcode) {
|
||||||
|
case kExprStructGet:
|
||||||
|
case kExprStructGetS:
|
||||||
|
case kExprStructGetU:
|
||||||
|
case kExprI31New:
|
||||||
|
case kExprI31GetS:
|
||||||
|
case kExprI31GetU:
|
||||||
|
case kExprArrayLen:
|
||||||
|
case kExprRttSub:
|
||||||
|
return {1, 1};
|
||||||
|
case kExprStructSet:
|
||||||
|
return {2, 0};
|
||||||
|
case kExprArrayNew:
|
||||||
|
case kExprArrayGet:
|
||||||
|
case kExprArrayGetS:
|
||||||
|
case kExprArrayGetU:
|
||||||
|
case kExprRefTest:
|
||||||
|
case kExprRefCast:
|
||||||
|
case kExprBrOnCast:
|
||||||
|
return {2, 1};
|
||||||
|
case kExprArraySet:
|
||||||
|
return {3, 0};
|
||||||
|
case kExprRttCanon:
|
||||||
|
return {0, 1};
|
||||||
|
case kExprArrayNewSub:
|
||||||
|
return {3, 1};
|
||||||
|
case kExprStructNew: {
|
||||||
|
StructIndexImmediate<validate> imm(this, this->pc_ + 2);
|
||||||
|
this->Complete(imm);
|
||||||
|
return {imm.struct_type->field_count(), 1};
|
||||||
|
}
|
||||||
|
case kExprStructNewWithRtt: {
|
||||||
|
StructIndexImmediate<validate> imm(this, this->pc_ + 2);
|
||||||
|
this->Complete(imm);
|
||||||
|
return {imm.struct_type->field_count() + 1, 1};
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
UNREACHABLE();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
FATAL("unimplemented opcode: %x (%s)", opcode,
|
FATAL("unimplemented opcode: %x (%s)", opcode,
|
||||||
|
Loading…
Reference in New Issue
Block a user