ARM Cortex-m3的llsr和llsl(64位移位)

时间:2014-03-31 06:00:08

标签: arm 64-bit bit-manipulation bit-shift cortex-m3

我试图将一些代码(tweetnacl)交叉编译为arm-none-eabi(裸机皮质-m3)

它具有64位旋转功能:

static u64 R(u64 x,int c) { return (x >> c) | (x << (64 - c)); }

链接器抱怨它无法找到执行64位左移和右移的例程:

tweetnacl.c:487: undefined reference to `__aeabi_llsr'
tweetnacl.c:487: undefined reference to `__aeabi_llsl'

我无法找到有关这些例程的更多信息。 auselen提供了对定义这些函数的正确文档的引用。我正在使用的工具链版本:

arm-none-eabi-gcc (Sourcery G++ Lite 2010q1-188) 4.4.1

此工具链中是否存在实施?哪些可能的标志可能导致构建过程排除任何编译器提供的实现?


解决方案:结果我需要链接到libgcc.a

1 个答案:

答案 0 :(得分:1)

请参阅Run-time ABI for the ARM4.2 The long long helper functions,了解它们的含义以及定义方式。

这些辅助函数由编译器(非标准库)提供,在您调用编译器或安装不完整(错误的路径,缺少文件等)时,您的情况看起来很像< / p>