void br_table(BranchTableImm imm) { popAndValidateOperand(ValueType::i32); const ResultType defaultTargetArgumentType = getBranchTargetByDepth(imm.defaultTargetDepth).branchArgumentType; popAndValidateResultType(defaultTargetArgumentType); for(uintp targetIndex = 0; targetIndex < imm.targetDepths.size(); ++targetIndex) { const ResultType targetArgumentType = getBranchTargetByDepth(imm.targetDepths[targetIndex]).branchArgumentType; VALIDATE_UNLESS("br_table target argument must match default target argument: ",targetArgumentType != defaultTargetArgumentType); } enterUnreachable(); }
void br_table(BranchTableImm imm) { popAndValidateOperand("br_table index",ValueType::i32); const ResultType defaultTargetArgumentType = getBranchTargetByDepth(imm.defaultTargetDepth).branchArgumentType; popAndValidateResultType("br_table argument",defaultTargetArgumentType); assert(imm.branchTableIndex < functionDef.branchTables.size()); const std::vector<U32>& targetDepths = functionDef.branchTables[imm.branchTableIndex]; for(Uptr targetIndex = 0;targetIndex < targetDepths.size();++targetIndex) { const ResultType targetArgumentType = getBranchTargetByDepth(targetDepths[targetIndex]).branchArgumentType; VALIDATE_UNLESS("br_table target argument must match default target argument: ",targetArgumentType != defaultTargetArgumentType); } enterUnreachable(); }
void unreachable(NoImm) { enterUnreachable(); }
void br(BranchImm imm) { popAndValidateResultType(getBranchTargetByDepth(imm.targetDepth).branchArgumentType); enterUnreachable(); }
void ret(NoImm) { popAndValidateResultType(functionType->ret); enterUnreachable(); }