“__cpp”和 gcc 内联 ARM 汇编器
`__cpp` and gcc inline ARM assembler
asm("ldr r6, [r0, #__cpp(offsetof(X, y))]tn");
我无法使用以下命令编译上述在线装配线:
arm-linux-gnueabi-gcc -c -lm -pg -O1 -g -pipe -fno-common
-fno-builtin -Wall -march=armv7-a -mfpu=neon -mfloat-abi=softfp
-mthumb-interwork -mtune=cortex-a9
错误日志是:
{standard input}: Assembler messages:
{standard input}:74: Error: ']' expected --
`ldr r6,[r0,#__cpp(offsetof(VP8BitReader,buf_))]'
显然__cpp
是无法识别的。有什么建议吗?
似乎
__cpp
是RealView汇编程序可用的关键字。GNU工具链没有它,我建议使用扩展的Asm语法将一些东西从C传递到内联程序集。
有关可能的解决方案,请参阅下面的代码,但是您可能需要查看扩展 Asm 文档(或其他一些教程)以使用 GCC 编写正确的内联程序集。
GCC 的offsetof
称为 __builtin_offsetof,但是您使用 -fno-builtin 调用 GCC,在这种情况下,您的意图不明确(这不会禁用偏移量)。
$ cat foo.c
typedef struct {
int pad[32];
void *buf_;
} VP8BitReader;
void bar() {
asm volatile("ldr r6, [r0, %[offset]]tn" : /* output */ : /* input */ [offset] "J" (__builtin_offsetof(VP8BitReader, buf_)) : /* clobber */ "r6", "r0");
}
$ arm-linux-gnueabi-gcc -O2 -S -fno-common -fno-builtin -Wall foo.c
$ cat foo.s
<skipped>
#APP
@ 7 "foo.c" 1
ldr r6, [r0, #128]
<skipped>
相关文章:
- 内联映射初始化的动态atexit析构函数崩溃
- 不同翻译单元中不可重载的非内联函数定义
- 头文件、宏和内联函数c++
- 内联函数中具有内部链接的全局变量
- 内联程序集printf将整数解释为地址
- 内联如何影响模块接口中的成员函数
- 检测 COFF 对象文件中C++内联符号
- 在C++中使用内联方法时出现未定义的符号错误
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 同时具有"外部"和"内联"说明符的变量
- 如何将内联匿名函数分配给C++函数指针
- GCC 会优化内联访问器吗?
- COUT 无法提供输出可能是由于内联组装
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- LDSET ARM指令作为内联装配
- “__cpp”和 gcc 内联 ARM 汇编器
- 用于32位字旋转的ARM内联汇编
- 在Android NDK项目中使用内联ARM asm