summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorTom Stellard <tstellar@redhat.com>2017-11-14 20:49:34 +0000
committerTom Stellard <tstellar@redhat.com>2017-11-14 20:49:34 +0000
commit165d008209e92bb78a094110ba202e3f2da289b1 (patch)
tree155b053bafd09f7e395a59419c1c8480a054765a /test
parentd27dcd32900c6675b1fa40e128802bb85d34a462 (diff)
Merging r315310:
------------------------------------------------------------------------ r315310 | sdardis | 2017-10-10 06:34:45 -0700 (Tue, 10 Oct 2017) | 22 lines [mips] Partially fix PR34391 Previously, the parsing of the 'subu $reg, ($reg,) imm' relied on a parser which also rendered the operand to the instruction. In some cases the general parser could construct an MCExpr which was not a MCConstantExpr which MipsAsmParser was expecting. Address this by altering the special handling to cope with unexpected inputs and fine-tune the handling of cases where an register name that is not available in the current ABI is regarded as not a match for the custom parser but also not as an outright error. Also enforces the binutils restriction that only constants are accepted. This partially resolves PR34391. Thanks to Ed Maste for reporting the issue! Reviewers: nitesh.jain, arichardson Differential Revision: https://reviews.llvm.org/D37476 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_50@318192 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/MC/Mips/macro-aliases-invalid-wrong-error.s38
-rw-r--r--test/MC/Mips/macro-aliases.s35
2 files changed, 73 insertions, 0 deletions
diff --git a/test/MC/Mips/macro-aliases-invalid-wrong-error.s b/test/MC/Mips/macro-aliases-invalid-wrong-error.s
new file mode 100644
index 000000000000..b87646d0b09a
--- /dev/null
+++ b/test/MC/Mips/macro-aliases-invalid-wrong-error.s
@@ -0,0 +1,38 @@
+# RUN: not llvm-mc -arch=mips %s 2>%t1
+# RUN: FileCheck --check-prefix=O32 %s < %t1
+
+# RUN: not llvm-mc -arch=mips64 %s 2>%t1
+# RUN: FileCheck --check-prefix=N64 %s < %t1
+
+# Check that subu only rejects any non-constant values.
+
+.globl end
+ subu $4, $4, %lo($start) # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $4, $start # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $a4, $a4 # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $4, %hi(end) # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $4, end + 4 # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $4, end # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $4, sp # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+
+ subu $4, %lo($start) # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $start # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, $a4 # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, %hi(end) # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, end + 4 # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, end # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+ subu $4, sp # O32: [[@LINE]]:{{[0-9]+}}: error: unexpected token in argument list
+ # N64: [[@LINE-1]]:{{[0-9]+}}: error: unexpected token in argument list
+
+$start:
diff --git a/test/MC/Mips/macro-aliases.s b/test/MC/Mips/macro-aliases.s
new file mode 100644
index 000000000000..daa1d8b2437c
--- /dev/null
+++ b/test/MC/Mips/macro-aliases.s
@@ -0,0 +1,35 @@
+# RUN: llvm-mc -arch=mips -mcpu=mips32r2 %s -show-inst | FileCheck %s
+
+# Test that subu accepts constant operands and inverts them when
+# rendering the operand.
+
+ subu $4, $4, 4 # CHECK: ADDiu
+ # CHECK; Imm:-4
+ subu $gp, $gp, 4 # CHECK: ADDiu
+ # CHECK; Imm:-4
+ subu $sp, $sp, 4 # CHECK: ADDiu
+ # CHECK; Imm:-4
+ subu $4, $4, -4 # CHECK: ADDiu
+ # CHECK; Imm:4
+ subu $gp, $gp, -4 # CHECK: ADDiu
+ # CHECK; Imm:4
+ subu $sp, $sp, -4 # CHECK: ADDiu
+ # CHECK; Imm:4
+ subu $sp, $sp, -(4 + 4) # CHECK: ADDiu
+ # CHECK: Imm:8
+
+ subu $4, 8 # CHECK: ADDiu
+ # CHECK; Imm:-8
+ subu $gp, 8 # CHECK: ADDiu
+ # CHECK; Imm:-8
+ subu $sp, 8 # CHECK: ADDiu
+ # CHECK; Imm:-8
+ subu $4, -8 # CHECK: ADDiu
+ # CHECK; Imm:8
+ subu $gp, -8 # CHECK: ADDiu
+ # CHECK; Imm:8
+ subu $sp, -8 # CHECK: ADDiu
+ # CHECK; Imm:8
+ subu $sp, -(4 + 4) # CHECK: ADDiu
+ # CHECK: Imm:8
+