我必须生成冗余的asm代码,它不断调用不同的C函数
我正在尝试做类似
的事情#define CODE_GEN(func) push a \
call func
pop a
调用类似
的内容CODE_GEN(foo)
将生成
bash-4.1$ gcc -E mk.S
# 1 "mk.S"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "mk.S"
# 1 "asm_gen.h" 1
# 2 "mk.S" 2
# 13 "mk.S"
pusha call foo popa iret
但这在编译中失败
bash-4.1$ gcc -m32 mk.S
mk.S: Assembler messages:
mk.S:13: Error: junk `foo popa iret' after expression
mk.S:13: Error: suffix or operands invalid for `pusha'
有没有办法在.S文件中用单行划分asm代码?
答案 0 :(得分:1)
简答:不,C宏扩展为单个字符串,没有换行符。
如果您想坚持使用.s文件,可以使用GNU Assembler macros。
这完全未经测试,可能是错误的:
.macro CODEGEN func
push a
call \func
pop a
.endm
答案 1 :(得分:0)
分号';'可以用来代替换行符。
类似
#define CODE_GEN(func) push a; \
call func; \
pop a;
将编译并运作