2017-08-29 42 views
2

我想编译一个64位C库使用gcc-4.9.1.编译时与-O2,我在不同的地方得到以下错误。 -O0汇编工作正常。GCC错误:扩展寄存器没有高一半

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

听起来像一个海湾合作委员会的错误。谷歌搜索:https://sourceforge.net/p/covered/bugs/171/ –

+0

没有人应该使用'-fno-omit-frame-pointer',CFI指令可以更好地展开。 – o11c

回答

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重新编译。

+0

这是不是说你应该使用不同的约束模式? – o11c

+0

那么,我的第一个猜测是默认架构会自行纠正问题......但这只是一个猜测。 – perror