summaryrefslogtreecommitdiff
path: root/test/MC/AsmParser
diff options
context:
space:
mode:
authorStepan Dyatkovskiy <stpworld@narod.ru>2014-04-23 06:56:28 +0000
committerStepan Dyatkovskiy <stpworld@narod.ru>2014-04-23 06:56:28 +0000
commit8c5b3146ed3a73f20a7c20f359188e43771d241a (patch)
tree56be4a96ce4008e8d6ade4fa8dd44de20cc9e7d0 /test/MC/AsmParser
parent81ea345894636edc6dc016b6b93ecb7d259b4ae6 (diff)
Integrated assbemler, macros: added 'vararg' argument qualifier support.
Note, currently we have no 'vararg' support for darwin macros. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206951 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/AsmParser')
-rw-r--r--test/MC/AsmParser/macros-darwin-vararg.s8
-rw-r--r--test/MC/AsmParser/vararg-default-value.s15
-rw-r--r--test/MC/AsmParser/vararg.s41
3 files changed, 64 insertions, 0 deletions
diff --git a/test/MC/AsmParser/macros-darwin-vararg.s b/test/MC/AsmParser/macros-darwin-vararg.s
new file mode 100644
index 00000000000..a650c0871d2
--- /dev/null
+++ b/test/MC/AsmParser/macros-darwin-vararg.s
@@ -0,0 +1,8 @@
+// RUN: not 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 arg:vararg
+ \arg
+.endm
diff --git a/test/MC/AsmParser/vararg-default-value.s b/test/MC/AsmParser/vararg-default-value.s
new file mode 100644
index 00000000000..77cd1e8817e
--- /dev/null
+++ b/test/MC/AsmParser/vararg-default-value.s
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -triple x86_64-linux-gnu %s | FileCheck %s
+.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 ,
diff --git a/test/MC/AsmParser/vararg.s b/test/MC/AsmParser/vararg.s
new file mode 100644
index 00000000000..b27668ea337
--- /dev/null
+++ b/test/MC/AsmParser/vararg.s
@@ -0,0 +1,41 @@
+// RUN: llvm-mc -triple x86_64-linux-gnu %s | FileCheck %s
+.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
+
+.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
+.set cc,1
+ ifcc movl %esp, %ebp
+ subl $0, %esp
+
+ ifcc2 %eax %ebx
+ ifcc2 %ecx, %ebx
+ ifcc3 %ecx %eax
+ ifcc3 %eax, %ecx
+
+// CHECK-NOT movl
+// CHECK: subl $1, %esp
+.set cc,0
+ ifcc movl %esp, %ebp
+ subl $1, %esp