Why is JUMP_ABSOLUTE quickened?

so, I saw that JUMP_ABSOLUTE was being quickened into JUMP_ABSOLUTE_QUICK.

Other than incrementing the code object warmup count field and quickening (replacing JUMP_ABSOLUTE with JUMP_ABSOLUTE_QUICK when it’s warmed up), there isn’t a difference in TARGET(JUMP_ABSOLUTE) and TARGET(JUMP_ABSOLUTE_QUICK) in ceval.c

Then why does the quickened bytecode for jump absolute exist?

If you look at the c code now, it looks like it takes the opportunity to potentially specialize/quicken the current code object at each jump_absolute instruction. This should occur at the backwards-pointing edge of every loop, so that the hottest loops should have every opportunity to prove that they ought to be quickened, even if the function they live in is only called once.

After the code object has been quickened, there’s no need to ever quicken it again, so instead of checking again at every jump, the instruction that tries to quicken (JUMP_ABSOLUTE) is replaced with a version that avoids that step (JUMP_ABSOLUTE_QUICK).

So yes, JUMP_ABSOLUTE_QUICK looks just like JUMP_ABSOLUTE used to. When the quickening check was added to JUMP_ABSOLUTE, the new opcode was added to avoid that overhead in the hottest loops.