diff options
Diffstat (limited to 'test/MC/AsmParser/macros-darwin-vararg.s')
-rw-r--r-- | test/MC/AsmParser/macros-darwin-vararg.s | 92 |
1 files changed, 87 insertions, 5 deletions
diff --git a/test/MC/AsmParser/macros-darwin-vararg.s b/test/MC/AsmParser/macros-darwin-vararg.s index a650c08..4aa2f4c 100644 --- a/test/MC/AsmParser/macros-darwin-vararg.s +++ b/test/MC/AsmParser/macros-darwin-vararg.s @@ -1,8 +1,90 @@ -// RUN: not llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s +// RUN: llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s -// CHECK: error: vararg is not a valid parameter qualifier for 'arg' in macro 'abc' -// CHECK: .macro abc arg:vararg +.macro abc a b:vararg +.globl "\a, \b" +.endm + +// CHECK: .globl "zed0, zed1, zed2" +abc zed0, zed1, zed2 + +.purgem abc + +.macro ifcc arg:vararg +.if cc + \arg +.endif +.endm + +.macro ifcc2 arg0 arg1:vararg +.if cc + movl \arg0, \arg1 +.endif +.endm + +.macro ifcc3 arg0, arg1:vararg +.if cc + movl \arg0, \arg1 +.endif +.endm + +.macro ifcc4 arg0, arg1:vararg +.if cc + movl \arg1, \arg0 +.endif +.endm -.macro abc arg:vararg - \arg +.text + +// CHECK: movl %esp, %ebp +// CHECK: subl $0, %esp +// CHECK: movl %eax, %ebx +// CHECK: movl %ecx, %ebx +// CHECK: movl %ecx, %eax +// CHECK: movl %eax, %ecx +// CHECK: movl %ecx, %eax +// CHECK: movl %eax, %ecx +.set cc,1 + ifcc movl %esp, %ebp + subl $0, %esp + + ifcc2 %eax, %ebx + ifcc2 %ecx, %ebx + ifcc3 %ecx, %eax + ifcc3 %eax, %ecx + ifcc4 %eax, %ecx ## test + ifcc4 %ecx, %eax ## test + +// CHECK-NOT movl +// CHECK: subl $1, %esp +.set cc,0 + ifcc movl, %esp, %ebp + subl $1, %esp + +.macro abc arg:vararg=nop + \arg +.endm + +.macro abcd arg0=%eax, arg1:vararg=%ebx + movl \arg0, \arg1 .endm + +.text + +// CHECK: nop + abc +// CHECK: movl %eax, %ebx + abcd , + +.macro .make_macro start, end, name, body:vararg +\start \name +\body +\end +.endmacro + +.make_macro .macro,.endmacro,.mybyte,.byte $0, $2, $1 + +.data +// CHECK: .byte 10 +// CHECK: .byte 12 +// CHECK: .byte 11 +.mybyte 10,11,12 |