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();
    }
Example #2
0
		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();
 }