如果有一个函数指针表,并且索引作为 volatile 变量提供,生成的代码是否会被认为是无分支的,这样可以避免推测执行,还是处理器仍会尝试推测最可能的分支?
作为一个简单的例子,考虑:
if (input_value > thresh) {
do_this();
} else {
do_that();
}
我预测具有推测执行的 CPU 会尝试它认为最有可能执行上述代码的分支。
但是,如果转换成跳转表:
this_or_that[input > thresh]();
上面的代码还会触发推测执行吗?