2014-08-05 07:14:37 +08:00
|
|
|
// RUN: llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s
|
2014-04-23 14:56:28 +08:00
|
|
|
|
2014-08-05 07:14:37 +08:00
|
|
|
.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
|
2014-04-23 14:56:28 +08:00
|
|
|
|
2014-08-05 07:14:37 +08:00
|
|
|
.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
|
|
|
|
|
2015-08-11 03:01:27 +08:00
|
|
|
// CHECK-NOT: movl
|
2014-08-05 07:14:37 +08:00
|
|
|
// 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
|
2014-04-23 14:56:28 +08:00
|
|
|
.endm
|
2014-08-05 07:14:37 +08:00
|
|
|
|
|
|
|
.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
|