我们在默认配置中使用Clang。在默认配置中,使用Clang的集成汇编程序(而不是系统汇编程序,如GAS)。我无法确定确切的问题(并修复):
rdi
我 认为 上述错误可能与Inline Assembly and Compatibility有关。但据我所知,xmm1
为64位,movd
为128位,git clone https://github.com/weidai11/cryptopp.git cryptopp-asm
cd cryptopp-asm
export CXX=clang++
make GAS210_OR_LATER=1 GAS219_OR_LATER=1 GAS219_OR_LATER=1
指定操作数大小,因此兼容性问题不适用。
上面的代码有什么问题?
您可以在Crypto++ gcm.cpp Source File在线检查源文件。如果安装了Clang,问题应该很容易复制:
# Try to make just gcm.o
make GAS210_OR_LATER=1 GAS219_OR_LATER=1 GAS219_OR_LATER=1 gcm.o
或者:
make
奇怪的DateTimeFormat format = DateTimeFormat.getFormat("c");
String dayOfWeek = format.format(new Date());
E12CommonUtils.printOnConsole("dayOfWeek ="+dayOfWeek);
行归于LLVM Bug 24200 - With integrated assembler enabled, failed to fetch version string of assembler。
答案 0 :(得分:2)
r/m64, xmm
未列为英特尔软件开发人员MOVD
指令的有效操作数组合。手册。但是,支持以下两种形式:
MOVD r/m32, xmm
SSE2 Move doubleword from xmm register to r/m32.
MOVQ r/m64, xmm
SSE2 Move quadword from xmm register to r/m64.
这使我怀疑在为64位目标构建时MOVD
指令需要MOVQ
,或者rdi
应该被edi
替换(尽管这可能会影响依赖于rdi
的前32位的代码的其他部分。)