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