我正在尝试使用gcc-4.9.1.
编译64位C库在使用-O2
进行编译时,我在不同的地方收到以下错误。 -O0
编译工作正常。
Error:
error: extended registers have no high halves
知道为什么会出现此错误消息以及如何解决此问题。它指向的行号是函数的结尾。
编译器选项是:
-march=x86-64 -fno-omit-frame-pointer -m64 -Wno-pointer-sign
-Wno-error=address -ggdb -gdwarf-2 -g2 -feliminate-unused-debug-types
答案 0 :(得分:0)
此patch中已添加此错误:
+ /* Irritantingly AMD extended registers use different naming convention
+ from the normal registers. */
+ if (REX_INT_REG_P (x))
+ {
+ switch (code)
+ {
+ case 5:
+ error ("Extended registers have no high halves\n");
+ break;
+ case 1:
+ fprintf (file, "r%ib", REGNO (x) - FIRST_REX_INT_REG + 8);
+ break;
+ case 2:
+ fprintf (file, "r%iw", REGNO (x) - FIRST_REX_INT_REG + 8);
+ break;
+ case 4:
+ fprintf (file, "r%id", REGNO (x) - FIRST_REX_INT_REG + 8);
+ break;
+ case 8:
+ fprintf (file, "r%i", REGNO (x) - FIRST_REX_INT_REG + 8);
+ break;
+ default:
+ error ("Unsupported operand size for extended register.\n");
+ break;
+ }
+ return;
+ }
尝试重新编译时不使用-march=x86-64
选项。