Changed semantics of JUMPDEST so that *the next* instruction is a jump destination

This commit is contained in:
artur-zawlocki 2014-10-28 22:29:00 +00:00
parent 6bf994de4d
commit 25ccd49acb

View file

@ -91,9 +91,12 @@ void Compiler::createBasicBlocks(bytesConstRef bytecode)
case Instruction::JUMPDEST:
{
// A basic block starts here.
splitPoints.insert(currentPC);
indirectJumpTargets.push_back(currentPC);
// A basic block starts at the next instruction.
if (currentPC + 1 < bytecode.size())
{
splitPoints.insert(currentPC + 1);
indirectJumpTargets.push_back(currentPC + 1);
}
break;
}
@ -653,8 +656,7 @@ void Compiler::compileBasicBlock(BasicBlock& basicBlock, bytesConstRef bytecode,
case Instruction::JUMPDEST:
{
// Extra asserts just in case.
assert(currentPC == basicBlock.begin());
// Nothing to do
break;
}