diff options
author | Toma Tabacu <toma.tabacu@imgtec.com> | 2015-04-27 10:50:29 +0000 |
---|---|---|
committer | Toma Tabacu <toma.tabacu@imgtec.com> | 2015-04-27 10:50:29 +0000 |
commit | 217116e684550545f88e45a0c7411153dcccf1ee (patch) | |
tree | 32937d7b8dc6e21fce4772a2013c155415c487a8 /llvm/test/MC/AsmParser/at-pseudo-variable.s | |
parent | 6325cd2fcdd72678e6b856d55e9fadcb9fa61feb (diff) | |
download | bcm5719-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.s | 64 |
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 |