OSDN Git Service

[SystemZ] Add MC support for LEDBRA, LEXBRA and LDXBRA
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Thu, 10 Jul 2014 11:00:55 +0000 (11:00 +0000)
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Thu, 10 Jul 2014 11:00:55 +0000 (11:00 +0000)
These instructions aren't used for codegen since the original L*DB instructions
are suitable for fround.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212703 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SystemZ/SystemZInstrFP.td
test/MC/Disassembler/SystemZ/insns.txt
test/MC/SystemZ/insn-bad-z196.s
test/MC/SystemZ/insn-bad.s
test/MC/SystemZ/insn-good-z196.s

index a1e782c..e8841e1 100644 (file)
@@ -133,6 +133,13 @@ def LEDBR : UnaryRRE<"ledb", 0xB344, fround,    FP32,  FP64>;
 def LEXBR : UnaryRRE<"lexb", 0xB346, null_frag, FP128, FP128>;
 def LDXBR : UnaryRRE<"ldxb", 0xB345, null_frag, FP128, FP128>;
 
+def LEDBRA : UnaryRRF4<"ledbra", 0xB344, FP32,  FP64>,
+             Requires<[FeatureFPExtension]>;
+def LEXBRA : UnaryRRF4<"lexbra", 0xB346, FP128, FP128>,
+             Requires<[FeatureFPExtension]>;
+def LDXBRA : UnaryRRF4<"ldxbra", 0xB345, FP128, FP128>,
+             Requires<[FeatureFPExtension]>;
+
 def : Pat<(f32 (fround FP128:$src)),
           (EXTRACT_SUBREG (LEXBR FP128:$src), subreg_hh32)>;
 def : Pat<(f64 (fround FP128:$src)),
index 1a5634d..54a3c5b 100644 (file)
 # CHECK: ldxbr %f13, %f13
 0xb3 0x45 0x00 0xdd
 
+# CHECK: ldxbra        %f0, 0, %f0, 1
+0xb3 0x45 0x01 0x00
+
+# CHECK: ldxbra        %f0, 0, %f0, 15
+0xb3 0x45 0x0f 0x00
+
+# CHECK: ldxbra        %f0, 0, %f13, 1
+0xb3 0x45 0x01 0x0d
+
+# CHECK: ldxbra        %f0, 15, %f0, 1
+0xb3 0x45 0xf1 0x00
+
+# CHECK: ldxbra        %f4, 5, %f8, 9
+0xb3 0x45 0x59 0x48
+
+# CHECK: ldxbra        %f13, 0, %f0, 1
+0xb3 0x45 0x01 0xd0
+
 # CHECK: ldy %f0, -524288
 0xed 0x00 0x00 0x00 0x80 0x65
 
 # CHECK: ledbr %f15, %f15
 0xb3 0x44 0x00 0xff
 
+# CHECK: ledbra        %f0, 0, %f0, 1
+0xb3 0x44 0x01 0x00
+
+# CHECK: ledbra        %f0, 0, %f0, 15
+0xb3 0x44 0x0f 0x00
+
+# CHECK: ledbra        %f0, 0, %f15, 1
+0xb3 0x44 0x01 0x0f
+
+# CHECK: ledbra        %f0, 15, %f0, 1
+0xb3 0x44 0xf1 0x00
+
+# CHECK: ledbra        %f4, 5, %f6, 7
+0xb3 0x44 0x57 0x46
+
+# CHECK: ledbra        %f15, 0, %f0, 1
+0xb3 0x44 0x01 0xf0
+
 # CHECK: ler %f0, %f9
 0x38 0x09
 
 # CHECK: lexbr %f13, %f13
 0xb3 0x46 0x00 0xdd
 
+# CHECK: lexbra        %f0, 0, %f0, 1
+0xb3 0x46 0x01 0x00
+
+# CHECK: lexbra        %f0, 0, %f0, 15
+0xb3 0x46 0x0f 0x00
+
+# CHECK: lexbra        %f0, 0, %f13, 1
+0xb3 0x46 0x01 0x0d
+
+# CHECK: lexbra        %f0, 15, %f0, 1
+0xb3 0x46 0xf1 0x00
+
+# CHECK: lexbra        %f4, 5, %f8, 9
+0xb3 0x46 0x59 0x48
+
+# CHECK: lexbra        %f13, 0, %f0, 1
+0xb3 0x46 0x01 0xd0
+
 # CHECK: ley %f0, -524288
 0xed 0x00 0x00 0x00 0x80 0x64
 
index da23a4b..47dbe08 100644 (file)
        lbh     %r0, 524288
 
 #CHECK: error: invalid operand
+#CHECK: ldxbra %f0, 0, %f0, -1
+#CHECK: error: invalid operand
+#CHECK: ldxbra %f0, 0, %f0, 16
+#CHECK: error: invalid operand
+#CHECK: ldxbra %f0, -1, %f0, 0
+#CHECK: error: invalid operand
+#CHECK: ldxbra %f0, 16, %f0, 0
+#CHECK: error: invalid register pair
+#CHECK: ldxbra %f0, 0, %f2, 0
+#CHECK: error: invalid register pair
+#CHECK: ldxbra %f2, 0, %f0, 0
+
+       ldxbra  %f0, 0, %f0, -1
+       ldxbra  %f0, 0, %f0, 16
+       ldxbra  %f0, -1, %f0, 0
+       ldxbra  %f0, 16, %f0, 0
+       ldxbra  %f0, 0, %f2, 0
+       ldxbra  %f2, 0, %f0, 0
+
+#CHECK: error: invalid operand
+#CHECK: ledbra %f0, 0, %f0, -1
+#CHECK: error: invalid operand
+#CHECK: ledbra %f0, 0, %f0, 16
+#CHECK: error: invalid operand
+#CHECK: ledbra %f0, -1, %f0, 0
+#CHECK: error: invalid operand
+#CHECK: ledbra %f0, 16, %f0, 0
+
+       ledbra  %f0, 0, %f0, -1
+       ledbra  %f0, 0, %f0, 16
+       ledbra  %f0, -1, %f0, 0
+       ledbra  %f0, 16, %f0, 0
+
+#CHECK: error: invalid operand
+#CHECK: lexbra %f0, 0, %f0, -1
+#CHECK: error: invalid operand
+#CHECK: lexbra %f0, 0, %f0, 16
+#CHECK: error: invalid operand
+#CHECK: lexbra %f0, -1, %f0, 0
+#CHECK: error: invalid operand
+#CHECK: lexbra %f0, 16, %f0, 0
+#CHECK: error: invalid register pair
+#CHECK: lexbra %f0, 0, %f2, 0
+#CHECK: error: invalid register pair
+#CHECK: lexbra %f2, 0, %f0, 0
+
+       lexbra  %f0, 0, %f0, -1
+       lexbra  %f0, 0, %f0, 16
+       lexbra  %f0, -1, %f0, 0
+       lexbra  %f0, 16, %f0, 0
+       lexbra  %f0, 0, %f2, 0
+       lexbra  %f2, 0, %f0, 0
+
+#CHECK: error: invalid operand
 #CHECK: lfh    %r0, -524289
 #CHECK: error: invalid operand
 #CHECK: lfh    %r0, 524288
index 8004168..a08cb34 100644 (file)
        ldxbr   %f0, %f2
        ldxbr   %f2, %f0
 
+#CHECK: error: {{(instruction requires: fp-extension)?}}
+#CHECK: ldxbra %f0, 0, %f0, 0
+
+       ldxbra  %f0, 0, %f0, 0
+
 #CHECK: error: invalid operand
 #CHECK: ldy    %f0, -524289
 #CHECK: error: invalid operand
        le      %f0, -1
        le      %f0, 4096
 
+#CHECK: error: {{(instruction requires: fp-extension)?}}
+#CHECK: ledbra %f0, 0, %f0, 0
+
+       ledbra  %f0, 0, %f0, 0
+
 #CHECK: error: invalid register pair
 #CHECK: lexbr  %f0, %f2
 #CHECK: error: invalid register pair
        lexbr   %f0, %f2
        lexbr   %f2, %f0
 
+#CHECK: error: {{(instruction requires: fp-extension)?}}
+#CHECK: lexbra %f0, 0, %f0, 0
+
+       lexbra  %f0, 0, %f0, 0
+
 #CHECK: error: invalid operand
 #CHECK: ley    %f0, -524289
 #CHECK: error: invalid operand
index 834bdad..db5ecdd 100644 (file)
        lbh     %r0, 524287(%r15,%r1)
        lbh     %r15, 0
 
+#CHECK: ldxbra %f0, 0, %f0, 0          # encoding: [0xb3,0x45,0x00,0x00]
+#CHECK: ldxbra %f0, 0, %f0, 15         # encoding: [0xb3,0x45,0x0f,0x00]
+#CHECK: ldxbra %f0, 0, %f13, 0         # encoding: [0xb3,0x45,0x00,0x0d]
+#CHECK: ldxbra %f0, 15, %f0, 0         # encoding: [0xb3,0x45,0xf0,0x00]
+#CHECK: ldxbra %f4, 5, %f8, 9          # encoding: [0xb3,0x45,0x59,0x48]
+#CHECK: ldxbra %f13, 0, %f0, 0         # encoding: [0xb3,0x45,0x00,0xd0]
+
+       ldxbra  %f0, 0, %f0, 0
+       ldxbra  %f0, 0, %f0, 15
+       ldxbra  %f0, 0, %f13, 0
+       ldxbra  %f0, 15, %f0, 0
+       ldxbra  %f4, 5, %f8, 9
+       ldxbra  %f13, 0, %f0, 0
+
+#CHECK: ledbra %f0, 0, %f0, 0          # encoding: [0xb3,0x44,0x00,0x00]
+#CHECK: ledbra %f0, 0, %f0, 15         # encoding: [0xb3,0x44,0x0f,0x00]
+#CHECK: ledbra %f0, 0, %f15, 0         # encoding: [0xb3,0x44,0x00,0x0f]
+#CHECK: ledbra %f0, 15, %f0, 0         # encoding: [0xb3,0x44,0xf0,0x00]
+#CHECK: ledbra %f4, 5, %f6, 7          # encoding: [0xb3,0x44,0x57,0x46]
+#CHECK: ledbra %f15, 0, %f0, 0         # encoding: [0xb3,0x44,0x00,0xf0]
+
+       ledbra  %f0, 0, %f0, 0
+       ledbra  %f0, 0, %f0, 15
+       ledbra  %f0, 0, %f15, 0
+       ledbra  %f0, 15, %f0, 0
+       ledbra  %f4, 5, %f6, 7
+       ledbra  %f15, 0, %f0, 0
+
+#CHECK: lexbra %f0, 0, %f0, 0          # encoding: [0xb3,0x46,0x00,0x00]
+#CHECK: lexbra %f0, 0, %f0, 15         # encoding: [0xb3,0x46,0x0f,0x00]
+#CHECK: lexbra %f0, 0, %f13, 0         # encoding: [0xb3,0x46,0x00,0x0d]
+#CHECK: lexbra %f0, 15, %f0, 0         # encoding: [0xb3,0x46,0xf0,0x00]
+#CHECK: lexbra %f4, 5, %f8, 9          # encoding: [0xb3,0x46,0x59,0x48]
+#CHECK: lexbra %f13, 0, %f0, 0         # encoding: [0xb3,0x46,0x00,0xd0]
+
+       lexbra  %f0, 0, %f0, 0
+       lexbra  %f0, 0, %f0, 15
+       lexbra  %f0, 0, %f13, 0
+       lexbra  %f0, 15, %f0, 0
+       lexbra  %f4, 5, %f8, 9
+       lexbra  %f13, 0, %f0, 0
+
 #CHECK: lfh    %r0, -524288            # encoding: [0xe3,0x00,0x00,0x00,0x80,0xca]
 #CHECK: lfh    %r0, -1                 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0xca]
 #CHECK: lfh    %r0, 0                  # encoding: [0xe3,0x00,0x00,0x00,0x00,0xca]