工具/软件:TI C/C++编译器
查找有关如何使用具有32位无符号数学运算的 SUBL 编译器的帮助。
这 是一个系统、在该系统中、需要为所有有符号数学运算全局设置 OVM 一次。 然而、令人惊讶 的是、SUBL 正与无符号运算一同使用、而有符号饱和被应用于无符号数学运算。
例如
unsigned long global_a、global_B、global_C;
MAIN ()
{
ASM (" SETC OVM");
global_a = 0x7fffffffUL;
GLOBAL_B = 0x80000000UL;
GLOBAL_C = GLOBAL_B-GLOBAL_A;
}
该操作将使用 SUBL 而不是 SUBUL、并由于带有无符号变量的符号上下文而产生错误结果。 使用 SUBL 时、溢出将被视为饱和值为0x7ffffffff 和0x80000000的有符号数学运算。 这似乎很奇怪。 由于内核不支持0xffffffff 和0x00000000饱和的无符号 OVM 模式、编译器为什么会为这些操作选择 SUBL 而不是 SUBUL?
了解到 Subul 具有64位数学运算的预期用途(SUBL/SUBBL)、并且用户必须适当地管理 OVM ( 这可以通过选择性地应用 OVM 来解决)。 但是、我们需要了解这背后的原理。 这些文档未提供有关此潜在案例的任何明确警告。
v16.9.1.LTS。 未尝试17.9
此致、
Eric