| // RUN: llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s | |
| .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 | |
| .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 |