2017-08-29 7 views
2

-O2でコンパイルしているときに、別の場所で次のエラーが発生しています。gcc-4.9.1.を使用して64ビットCライブラリをコンパイルしようとしています。 -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

はgccバグのように聞こえます。グーグル:https://sourceforge.net/p/covered/bugs/171/ –

+0

誰も '-fno-omit-frame-pointer'を使用するべきではありません。 – 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

関連する問題