summaryrefslogtreecommitdiff
path: root/test/MC/SystemZ/regs-bad.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/MC/SystemZ/regs-bad.s')
-rw-r--r--test/MC/SystemZ/regs-bad.s267
1 files changed, 267 insertions, 0 deletions
diff --git a/test/MC/SystemZ/regs-bad.s b/test/MC/SystemZ/regs-bad.s
new file mode 100644
index 0000000000000..65720578ff8fa
--- /dev/null
+++ b/test/MC/SystemZ/regs-bad.s
@@ -0,0 +1,267 @@
+# RUN: not llvm-mc -triple s390x-linux-gnu < %s 2> %t
+# RUN: FileCheck < %t %s
+
+# Test GR32 operands
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %a0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %r0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %r0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: lr %r0,0(%r1)
+
+ lr %f0,%r1
+ lr %a0,%r1
+ lr %r0,%f1
+ lr %r0,%a1
+ lr %r0,0
+ lr %r0,0(%r1)
+
+# Test GR64 operands
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %a0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %r0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %r0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: lgr %r0,0(%r1)
+
+ lgr %f0,%r1
+ lgr %a0,%r1
+ lgr %r0,%f1
+ lgr %r0,%a1
+ lgr %r0,0
+ lgr %r0,0(%r1)
+
+# Test GR128 operands
+#
+#CHECK: error: invalid register pair
+#CHECK: dlr %r1,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r3,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r5,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r7,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r9,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r11,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r13,%r0
+#CHECK: error: invalid register pair
+#CHECK: dlr %r15,%r0
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %a0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %r0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %r0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: dlr %r0,0(%r1)
+
+ dlr %r1,%r0
+ dlr %r3,%r0
+ dlr %r5,%r0
+ dlr %r7,%r0
+ dlr %r9,%r0
+ dlr %r11,%r0
+ dlr %r13,%r0
+ dlr %r15,%r0
+ dlr %f0,%r1
+ dlr %a0,%r1
+ dlr %r0,%f1
+ dlr %r0,%a1
+ dlr %r0,0
+ dlr %r0,0(%r1)
+
+# Test FP32 operands
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %a0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %f0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %f0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: ler %f0,0(%r1)
+
+ ler %r0,%f1
+ ler %a0,%f1
+ ler %f0,%r1
+ ler %f0,%a1
+ ler %f0,0
+ ler %f0,0(%r1)
+
+# Test FP64 operands
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %a0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %f0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %f0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: ldr %f0,0(%r1)
+
+ ldr %r0,%f1
+ ldr %a0,%f1
+ ldr %f0,%r1
+ ldr %f0,%a1
+ ldr %f0,0
+ ldr %f0,0(%r1)
+
+# Test FP128 operands
+#
+#CHECK: error: invalid register pair
+#CHECK: lxr %f2,%f0
+#CHECK: error: invalid register pair
+#CHECK: lxr %f0,%f3
+#CHECK: error: invalid register pair
+#CHECK: lxr %f6,%f0
+#CHECK: error: invalid register pair
+#CHECK: lxr %f0,%f7
+#CHECK: error: invalid register pair
+#CHECK: lxr %f10,%f0
+#CHECK: error: invalid register pair
+#CHECK: lxr %f0,%f11
+#CHECK: error: invalid register pair
+#CHECK: lxr %f14,%f0
+#CHECK: error: invalid register pair
+#CHECK: lxr %f0,%f15
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %r0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %a0,%f1
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %f0,%r1
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %f0,%a1
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %f0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: lxr %f0,0(%r1)
+
+ lxr %f2,%f0
+ lxr %f0,%f3
+ lxr %f6,%f0
+ lxr %f0,%f7
+ lxr %f10,%f0
+ lxr %f0,%f11
+ lxr %f14,%f0
+ lxr %f0,%f15
+ lxr %r0,%f1
+ lxr %a0,%f1
+ lxr %f0,%r1
+ lxr %f0,%a1
+ lxr %f0,0
+ lxr %f0,0(%r1)
+
+# Test access register operands
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: ear %r0,%r0
+#CHECK: error: invalid operand for instruction
+#CHECK: ear %r0,%f0
+#CHECK: error: invalid operand for instruction
+#CHECK: ear %r0,0
+#CHECK: error: invalid operand for instruction
+#CHECK: ear %r0,0(%r1)
+
+ ear %r0,%r0
+ ear %r0,%f0
+ ear %r0,0
+ ear %r0,0(%r1)
+
+ .cfi_startproc
+
+# Test general register parsing, with no predetermined class in mind.
+#
+#CHECK: error: register expected
+#CHECK: .cfi_offset r0,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %r,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %f,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %a,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %0,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %c0,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %r16,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %f16,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %a16,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %reef,0
+#CHECK: error: invalid register
+#CHECK: .cfi_offset %arid,0
+
+ .cfi_offset r0,0
+ .cfi_offset %,0
+ .cfi_offset %r,0
+ .cfi_offset %f,0
+ .cfi_offset %a,0
+ .cfi_offset %0,0
+ .cfi_offset %c0,0
+ .cfi_offset %r16,0
+ .cfi_offset %f16,0
+ .cfi_offset %a16,0
+ .cfi_offset %reef,0
+ .cfi_offset %arid,0
+
+# Test invalid CFI registers. Will need to be updated once access
+# registers are modelled as LLVM registers.
+#
+#CHECK: error: invalid operand for instruction
+#CHECK: .cfi_offset %a0,0
+
+ .cfi_offset %a0,0
+
+ .cfi_endproc
+
+#CHECK: error: %r0 used in an address
+#CHECK: sll %r2,8(%r0)
+#CHECK: error: %r0 used in an address
+#CHECK: br %r0
+#CHECK: error: %r0 used in an address
+#CHECK: l %r1,8(%r0)
+#CHECK: error: %r0 used in an address
+#CHECK: l %r1,8(%r0,%r15)
+#CHECK: error: %r0 used in an address
+#CHECK: l %r1,8(%r15,%r0)
+
+ sll %r2,8(%r0)
+ br %r0
+ l %r1,8(%r0)
+ l %r1,8(%r0,%r15)
+ l %r1,8(%r15,%r0)