#define 在 GCC 中的内联汇编
#define in inline assembly in GCC
我正在尝试在 GCC 中编写内联汇编,它将 #define 中的值写入寄存器。
#define SOME_VALUE 0xDEADBEEF
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
但是,我编译的时候报错:
undefined reference to `SOME_VALUE'
有没有办法让汇编程序在内联汇编中看到 #define
?
我已经通过执行以下操作解决了它:
#define SOME_VALUE 0xDEADBEEF
__asm__(".equ SOME_VALUE, 0xDEADBEEF");
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
但是,我真的不想复制这个值。
在 C:
中使用一些预处理器魔术对值和字符串延续进行字符串化
#define SOME_VALUE 0xDEADBEEF
#define STR(x) #x
#define XSTR(s) STR(s)
void foo(void)
{
__asm__("lis r5, " XSTR(SOME_VALUE) "@ha");
__asm__("ori r5, r5, " XSTR(SOME_VALUE) "@l");
}
XSTR
将扩展为字符串 "0xDEADBEEF"
,它将与它周围的字符串连接起来。
我正在尝试在 GCC 中编写内联汇编,它将 #define 中的值写入寄存器。
#define SOME_VALUE 0xDEADBEEF
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
但是,我编译的时候报错:
undefined reference to `SOME_VALUE'
有没有办法让汇编程序在内联汇编中看到 #define
?
我已经通过执行以下操作解决了它:
#define SOME_VALUE 0xDEADBEEF
__asm__(".equ SOME_VALUE, 0xDEADBEEF");
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
但是,我真的不想复制这个值。
在 C:
中使用一些预处理器魔术对值和字符串延续进行字符串化#define SOME_VALUE 0xDEADBEEF
#define STR(x) #x
#define XSTR(s) STR(s)
void foo(void)
{
__asm__("lis r5, " XSTR(SOME_VALUE) "@ha");
__asm__("ori r5, r5, " XSTR(SOME_VALUE) "@l");
}
XSTR
将扩展为字符串 "0xDEADBEEF"
,它将与它周围的字符串连接起来。