summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC/AsmParser/at-pseudo-variable.s
diff options
context:
space:
mode:
authorToma Tabacu <toma.tabacu@imgtec.com>2015-04-27 10:50:29 +0000
committerToma Tabacu <toma.tabacu@imgtec.com>2015-04-27 10:50:29 +0000
commit217116e684550545f88e45a0c7411153dcccf1ee (patch)
tree32937d7b8dc6e21fce4772a2013c155415c487a8 /llvm/test/MC/AsmParser/at-pseudo-variable.s
parent6325cd2fcdd72678e6b856d55e9fadcb9fa61feb (diff)
downloadbcm5719-llvm-217116e684550545f88e45a0c7411153dcccf1ee.tar.gz
bcm5719-llvm-217116e684550545f88e45a0c7411153dcccf1ee.zip
[MC] [IAS] Add support for the \@ .macro pseudo-variable.
Summary: When used, it is substituted with the number of .macro instantiations we've done up to that point in time. So if this is the 1st time we've instantiated a .macro (any .macro, regardless of name), \@ will instantiate to 0, if it's the 2nd .macro instantiation, it will instantiate to 1 etc. It can only be used inside a .macro definition, an .irp definition or an .irpc definition (those last 2 uses are undocumented). Reviewers: echristo, rafael Reviewed By: rafael Subscribers: dsanders, llvm-commits Differential Revision: http://reviews.llvm.org/D9197 llvm-svn: 235862
Diffstat (limited to 'llvm/test/MC/AsmParser/at-pseudo-variable.s')
-rw-r--r--llvm/test/MC/AsmParser/at-pseudo-variable.s64
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/MC/AsmParser/at-pseudo-variable.s b/llvm/test/MC/AsmParser/at-pseudo-variable.s
new file mode 100644
index 00000000000..b0966e13717
--- /dev/null
+++ b/llvm/test/MC/AsmParser/at-pseudo-variable.s
@@ -0,0 +1,64 @@
+# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+
+.macro A
+ add $1\@, %eax
+.endm
+
+.macro B
+ sub $1\@, %eax
+.endm
+
+ A
+# CHECK: addl $10, %eax
+ A
+# CHECK: addl $11, %eax
+ B
+# CHECK: subl $12, %eax
+ B
+# CHECK: subl $13, %eax
+
+# The following uses of \@ are undocumented, but valid:
+.irpc foo,234
+ add $\foo\@, %eax
+.endr
+# CHECK: addl $24, %eax
+# CHECK: addl $34, %eax
+# CHECK: addl $44, %eax
+
+.irp reg,%eax,%ebx
+ sub $2\@, \reg
+.endr
+# CHECK: subl $24, %eax
+# CHECK: subl $24, %ebx
+
+# Test that .irp(c) and .rep(t) do not increase \@.
+# Only the use of A should increase \@, so we can test that it increases by 1
+# each time.
+
+.irpc foo,123
+ sub $\foo, %eax
+.endr
+
+ A
+# CHECK: addl $14, %eax
+
+.irp reg,%eax,%ebx
+ sub $4, \reg
+.endr
+
+ A
+# CHECK: addl $15, %eax
+
+.rept 2
+ sub $5, %eax
+.endr
+
+ A
+# CHECK: addl $16, %eax
+
+.rep 3
+ sub $6, %eax
+.endr
+
+ A
+# CHECK: addl $17, %eax
OpenPOWER on IntegriCloud