C++ `__cpp`和gcc内联ARM汇编程序
我无法使用以下命令编译上述在线装配线:C++ `__cpp`和gcc内联ARM汇编程序,c++,assembly,arm,C++,Assembly,Arm,我无法使用以下命令编译上述在线装配线: asm("ldr r6, [r0, #__cpp(offsetof(X, y))]\t\n"); 错误日志为: 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 显然,\u
asm("ldr r6, [r0, #__cpp(offsetof(X, y))]\t\n");
错误日志为:
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
显然,
\uu cpp
无法识别。有什么建议吗?似乎\uu cpp
是一个关键词。
GNU toolchain没有它,我建议使用语法将某些东西从C传递到内联汇编。似乎
\uuu cpp
是一个关键字。
GNU toolchain没有它,我建议使用语法将某些内容从C传递到内联程序集。请参阅下面的代码以获得可能的解决方案,但是您可能需要查看文档(或其他文档)以使用GCC编写正确的内联程序集 调用GCC的offsetof,但是调用GCC会使您的意图在本例中不清楚(这不会禁用offsetof)
$cat foo.c
类型定义结构{
int-pad[32];
void*buf_;
}VP8BitReader;
空条(){
asm volatile(“ldr r6,[r0,%[offset]]]\t\n”:/*输出*/:/*输入*/[offset]“J”((VP8BitReader,buf)):/*clobber*/“r6”,“r0”);
}
$armlinux gnueabi gcc-O2-S-fno common-fno builtin-Wall foo.c
$cat foo.s
#应用程序
@7“foo.c”1
ldr r6[r0,#128]
有关可能的解决方案,请参见下面的代码,但是您可能需要查看文档(或其他文档),以便使用GCC编写正确的内联程序集
调用GCC的offsetof,但是调用GCC会使您的意图在本例中不清楚(这不会禁用offsetof)
$cat foo.c
类型定义结构{
int-pad[32];
void*buf_;
}VP8BitReader;
空条(){
asm volatile(“ldr r6,[r0,%[offset]]]\t\n”:/*输出*/:/*输入*/[offset]“J”((VP8BitReader,buf)):/*clobber*/“r6”,“r0”);
}
$armlinux gnueabi gcc-O2-S-fno common-fno builtin-Wall foo.c
$cat foo.s
#应用程序
@7“foo.c”1
ldr r6[r0,#128]
asm(“ldr r6,[r0,%0]\n:“J”(偏移量(X,y)):“r6”,“r0”)
虽然可能最好让编译器通过注释来分配r0
和r6
值。我的观点是,“J”是这个的说明符。asm(“ldr r6,[r0,%0]\n):“J”(偏移量(X,y))::“r6”,“r0”)
虽然可能最好让编译器通过注释来分配r0
和r6
值。我的观点是“J”是这个的说明符。
{standard input}: Assembler messages:
{standard input}:74: Error: ']' expected -- \
`ldr r6,[r0,#__cpp(offsetof(VP8BitReader,buf_))]'
$ cat foo.c
typedef struct {
int pad[32];
void *buf_;
} VP8BitReader;
void bar() {
asm volatile("ldr r6, [r0, %[offset]]\t\n" : /* 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>