在Cygwin中注册.seh_savexmm无效

时间:2017-04-01 03:51:19

标签: gcc assembly cygwin avx512

$ make 我曾与cygwin合作,但编译错误。 我不确定.seh_savexmm的无效寄存器是什么 请帮我。 我在谷歌搜索这个问题,但没有找到 有许多问题,但没有灵魂。 请帮帮我。

perl ./generate-functions.pl -file operationMetadata.csv
g++ -std=c++14 -O3 -Wall -g -mavx512vl -mavx512f -mavx512pf -mavx512er -mavx512cd -fno-common -c int-test.c -o int-test.o
g++ -std=c++14 -O3 -Wall -g -mavx512vl -mavx512f -mavx512pf -mavx512er -mavx512cd -fno-common -c generated-functions.c -o generated-functions.o
/tmp/cczD9mlv.s: Assembler messages:
/tmp/cczD9mlv.s:39: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:41: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:43: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:45: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:47: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:49: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:51: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:53: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:55: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:57: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:59: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:61: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:63: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:65: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:67: Error: invalid register for .seh_savexmm
/tmp/cczD9mlv.s:69: Error: invalid register for .seh_savexmm

2 个答案:

答案 0 :(得分:3)

罗斯里奇是对的。我解决了只添加-fno-asynchronous-unwind-tables的问题。谢谢罗斯。

答案 1 :(得分:1)

我最近也遇到了这个错误。我发现了另一种方法:使用-ffixed-reg选项禁用xmm16..31寄存器的使用。您必须分别为每个寄存器指定它。这是您必须使用的选项的完整列表:

-ffixed-xmm16 -ffixed-xmm17 -ffixed-xmm18 -ffixed-xmm19
-ffixed-xmm20 -ffixed-xmm21 -ffixed-xmm22 -ffixed-xmm23
-ffixed-xmm24 -ffixed-xmm25 -ffixed-xmm26 -ffixed-xmm27
-ffixed-xmm28 -ffixed-xmm29 -ffixed-xmm30 -ffixed-xmm31

这样做之后,编译器将无法使用它们,因此它将必须在堆栈中存储一些数据而不是寄存器。这很可能会导致代码变慢。

您也可以尝试使用-flto标志,有人报告说它也有帮助。就我而言,它仅减少了错误数量,因此请检查它是否对您有用。