ZHCUAQ1F july 2015 – april 2023
advice #30005: 第5行的循环不能被有效地安排,因为其包含一条 “除法”运算。如果可能的话,使用更简单的运算重写。
编译器可以在运行时支持库 (RTS) 中插入对特殊函数的调用,以支持 ISA 本身不支持的运算。例如,编译器调用 __c6xabi_divi() 函数来执行 32 位整数除法运算。这些函数被称为编译器辅助函数,并在循环主体中生成函数调用。在下面的示例中,编译器将通过调用编译器帮助函数“_divi”来完成除法运算:
void func(float *p, float n)
{
int i;
for (i = 1; i < 1000; i++) {
p[i] /= n;
}
}
但是,如果修改此循环(如下所示),则循环按以下方式执行:
void func_adjusted(float *p, float n)
{
int i;
float inv = 1/n;
for (i = 1; i < 1000; i++) {
p[i] *= inv;
}
}