Kevin Enderby | e3c1346 | 2014-08-04 23:14:37 +0000 | [diff] [blame] | 1 | // RUN: llvm-mc -triple i386-apple-darwin10 %s 2>&1 | FileCheck %s |
Stepan Dyatkovskiy | afc364b | 2014-04-23 06:56:28 +0000 | [diff] [blame] | 2 | |
Kevin Enderby | e3c1346 | 2014-08-04 23:14:37 +0000 | [diff] [blame] | 3 | .macro abc a b:vararg |
| 4 | .globl "\a, \b" |
Stepan Dyatkovskiy | afc364b | 2014-04-23 06:56:28 +0000 | [diff] [blame] | 5 | .endm |
Kevin Enderby | e3c1346 | 2014-08-04 23:14:37 +0000 | [diff] [blame] | 6 | |
| 7 | // CHECK: .globl "zed0, zed1, zed2" |
| 8 | abc zed0, zed1, zed2 |
| 9 | |
| 10 | .purgem abc |
| 11 | |
| 12 | .macro ifcc arg:vararg |
| 13 | .if cc |
| 14 | \arg |
| 15 | .endif |
| 16 | .endm |
| 17 | |
| 18 | .macro ifcc2 arg0 arg1:vararg |
| 19 | .if cc |
| 20 | movl \arg0, \arg1 |
| 21 | .endif |
| 22 | .endm |
| 23 | |
| 24 | .macro ifcc3 arg0, arg1:vararg |
| 25 | .if cc |
| 26 | movl \arg0, \arg1 |
| 27 | .endif |
| 28 | .endm |
| 29 | |
| 30 | .macro ifcc4 arg0, arg1:vararg |
| 31 | .if cc |
| 32 | movl \arg1, \arg0 |
| 33 | .endif |
| 34 | .endm |
| 35 | |
| 36 | .text |
| 37 | |
| 38 | // CHECK: movl %esp, %ebp |
| 39 | // CHECK: subl $0, %esp |
| 40 | // CHECK: movl %eax, %ebx |
| 41 | // CHECK: movl %ecx, %ebx |
| 42 | // CHECK: movl %ecx, %eax |
| 43 | // CHECK: movl %eax, %ecx |
| 44 | // CHECK: movl %ecx, %eax |
| 45 | // CHECK: movl %eax, %ecx |
| 46 | .set cc,1 |
| 47 | ifcc movl %esp, %ebp |
| 48 | subl $0, %esp |
| 49 | |
| 50 | ifcc2 %eax, %ebx |
| 51 | ifcc2 %ecx, %ebx |
| 52 | ifcc3 %ecx, %eax |
| 53 | ifcc3 %eax, %ecx |
| 54 | ifcc4 %eax, %ecx ## test |
| 55 | ifcc4 %ecx, %eax ## test |
| 56 | |
Jonathan Roelofs | 49e46ce | 2015-08-10 19:01:27 +0000 | [diff] [blame] | 57 | // CHECK-NOT: movl |
Kevin Enderby | e3c1346 | 2014-08-04 23:14:37 +0000 | [diff] [blame] | 58 | // CHECK: subl $1, %esp |
| 59 | .set cc,0 |
| 60 | ifcc movl, %esp, %ebp |
| 61 | subl $1, %esp |
| 62 | |
| 63 | .macro abc arg:vararg=nop |
| 64 | \arg |
| 65 | .endm |
| 66 | |
| 67 | .macro abcd arg0=%eax, arg1:vararg=%ebx |
| 68 | movl \arg0, \arg1 |
| 69 | .endm |
| 70 | |
| 71 | .text |
| 72 | |
| 73 | // CHECK: nop |
| 74 | abc |
| 75 | // CHECK: movl %eax, %ebx |
| 76 | abcd , |
| 77 | |
| 78 | .macro .make_macro start, end, name, body:vararg |
| 79 | \start \name |
| 80 | \body |
| 81 | \end |
| 82 | .endmacro |
| 83 | |
| 84 | .make_macro .macro,.endmacro,.mybyte,.byte $0, $2, $1 |
| 85 | |
| 86 | .data |
| 87 | // CHECK: .byte 10 |
| 88 | // CHECK: .byte 12 |
| 89 | // CHECK: .byte 11 |
| 90 | .mybyte 10,11,12 |