We'd do this:
while (true) {
auto const* instruction_handler = jump_table[*instruction_ptr];
instruction_ptr++;
[[assume(instruction_handler != nullptr]];
goto* instruction_handler;
// etc.
and we need to see if this nets us any benefit. I remember, in the past, seeing goto perform a nullptr check prior to performing the goto. The hope is that the assume will guide GCC to skip the nullptr check.