[llvm] r288525 - [SystemZ] Support floating-point control register instructions
Ulrich Weigand via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 2 10:21:53 PST 2016
Author: uweigand
Date: Fri Dec 2 12:21:53 2016
New Revision: 288525
URL: http://llvm.org/viewvc/llvm-project?rev=288525&view=rev
Log:
[SystemZ] Support floating-point control register instructions
Add assembler support for instructions manipulating the FPC.
Also add codegen support via the GCC compatibility builtins:
__builtin_s390_sfpc
__builtin_s390_efpc
Added:
llvm/trunk/test/CodeGen/SystemZ/fpc-intrinsics.ll
Modified:
llvm/trunk/include/llvm/IR/IntrinsicsSystemZ.td
llvm/trunk/lib/Target/SystemZ/SystemZInstrFP.td
llvm/trunk/lib/Target/SystemZ/SystemZInstrFormats.td
llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td
llvm/trunk/lib/Target/SystemZ/SystemZOperators.td
llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ13.td
llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ196.td
llvm/trunk/lib/Target/SystemZ/SystemZScheduleZEC12.td
llvm/trunk/test/MC/Disassembler/SystemZ/insns.txt
llvm/trunk/test/MC/SystemZ/insn-bad-z196.s
llvm/trunk/test/MC/SystemZ/insn-bad.s
llvm/trunk/test/MC/SystemZ/insn-good-z196.s
llvm/trunk/test/MC/SystemZ/insn-good.s
Modified: llvm/trunk/include/llvm/IR/IntrinsicsSystemZ.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicsSystemZ.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/IntrinsicsSystemZ.td (original)
+++ llvm/trunk/include/llvm/IR/IntrinsicsSystemZ.td Fri Dec 2 12:21:53 2016
@@ -382,6 +382,11 @@ let TargetPrefix = "s390" in {
//===----------------------------------------------------------------------===//
let TargetPrefix = "s390" in {
+ def int_s390_sfpc : GCCBuiltin<"__builtin_s390_sfpc">,
+ Intrinsic<[], [llvm_i32_ty], []>;
+ def int_s390_efpc : GCCBuiltin<"__builtin_s390_efpc">,
+ Intrinsic<[llvm_i32_ty], [], []>;
+
def int_s390_tdc : Intrinsic<[llvm_i32_ty], [llvm_anyfloat_ty, llvm_i64_ty],
[IntrNoMem]>;
}
Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrFP.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrFP.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZInstrFP.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZInstrFP.td Fri Dec 2 12:21:53 2016
@@ -479,6 +479,26 @@ let Defs = [CC], CCValues = 0xC in {
}
//===----------------------------------------------------------------------===//
+// Floating-point control register instructions
+//===----------------------------------------------------------------------===//
+
+let hasSideEffects = 1 in {
+ def EFPC : InherentRRE<"efpc", 0xB38C, GR32, int_s390_efpc>;
+ def STFPC : StoreInherentS<"stfpc", 0xB29C, storei<int_s390_efpc>, 4>;
+
+ def SFPC : SideEffectUnaryRRE<"sfpc", 0xB384, GR32, int_s390_sfpc>;
+ def LFPC : SideEffectUnaryS<"lfpc", 0xB29D, loadu<int_s390_sfpc>, 4>;
+
+ def SFASR : SideEffectUnaryRRE<"sfasr", 0xB385, GR32, null_frag>;
+ def LFAS : SideEffectUnaryS<"lfas", 0xB2BD, null_frag, 4>;
+
+ def SRNMB : SideEffectAddressS<"srnmb", 0xB2B8, null_frag, shift12only>,
+ Requires<[FeatureFPExtension]>;
+ def SRNM : SideEffectAddressS<"srnm", 0xB299, null_frag, shift12only>;
+ def SRNMT : SideEffectAddressS<"srnmt", 0xB2B9, null_frag, shift12only>;
+}
+
+//===----------------------------------------------------------------------===//
// Peepholes
//===----------------------------------------------------------------------===//
Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrFormats.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrFormats.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZInstrFormats.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZInstrFormats.td Fri Dec 2 12:21:53 2016
@@ -1598,6 +1598,9 @@ class ICV<string name>
// LoadAddress:
// One register output operand and one address operand.
//
+// SideEffectAddress:
+// One address operand. No output operands, but causes some side effect.
+//
// Unary:
// One register output operand and one input operand.
//
@@ -1677,10 +1680,12 @@ class InherentVRIa<string mnemonic, bits
let M3 = 0;
}
-class StoreInherentS<string mnemonic, bits<16> opcode>
+class StoreInherentS<string mnemonic, bits<16> opcode,
+ SDPatternOperator operator, bits<5> bytes>
: InstS<opcode, (outs), (ins bdaddr12only:$BD2),
- mnemonic#"\t$BD2", []> {
+ mnemonic#"\t$BD2", [(operator bdaddr12only:$BD2)]> {
let mayStore = 1;
+ let AccessBytes = bytes;
}
class SideEffectInherentE<string mnemonic, bits<16>opcode>
@@ -2265,10 +2270,27 @@ class SideEffectUnaryRR<string mnemonic,
let R2 = 0;
}
+class SideEffectUnaryRRE<string mnemonic, bits<16> opcode, RegisterOperand cls,
+ SDPatternOperator operator>
+ : InstRRE<opcode, (outs), (ins cls:$R1),
+ mnemonic#"\t$R1", [(operator cls:$R1)]> {
+ let R2 = 0;
+}
+
class SideEffectUnaryS<string mnemonic, bits<16> opcode,
- SDPatternOperator operator>
- : InstS<opcode, (outs), (ins bdaddr12only:$BD2),
- mnemonic#"\t$BD2", [(operator bdaddr12only:$BD2)]>;
+ SDPatternOperator operator, bits<5> bytes,
+ AddressingMode mode = bdaddr12only>
+ : InstS<opcode, (outs), (ins mode:$BD2),
+ mnemonic#"\t$BD2", [(operator mode:$BD2)]> {
+ let mayLoad = 1;
+ let AccessBytes = bytes;
+}
+
+class SideEffectAddressS<string mnemonic, bits<16> opcode,
+ SDPatternOperator operator,
+ AddressingMode mode = bdaddr12only>
+ : InstS<opcode, (outs), (ins mode:$BD2),
+ mnemonic#"\t$BD2", [(operator mode:$BD2)]>;
class LoadAddressRX<string mnemonic, bits<8> opcode,
SDPatternOperator operator, AddressingMode mode>
Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td Fri Dec 2 12:21:53 2016
@@ -1632,7 +1632,7 @@ let hasSideEffects = 1, Predicates = [Fe
// Transaction Abort
let isTerminator = 1, isBarrier = 1 in
- def TABORT : SideEffectUnaryS<"tabort", 0xB2FC, int_s390_tabort>;
+ def TABORT : SideEffectAddressS<"tabort", 0xB2FC, int_s390_tabort>;
// Nontransactional Store
def NTSTG : StoreRXY<"ntstg", 0xE325, int_s390_ntstg, GR64, 8>;
@@ -1691,14 +1691,14 @@ let hasSideEffects = 1, isCall = 1, Defs
// Store clock.
let hasSideEffects = 1, Defs = [CC] in {
- def STCK : StoreInherentS<"stck", 0xB205>;
- def STCKF : StoreInherentS<"stckf", 0xB27C>;
- def STCKE : StoreInherentS<"stcke", 0xB278>;
+ def STCK : StoreInherentS<"stck", 0xB205, null_frag, 8>;
+ def STCKF : StoreInherentS<"stckf", 0xB27C, null_frag, 8>;
+ def STCKE : StoreInherentS<"stcke", 0xB278, null_frag, 16>;
}
// Store facility list.
-let hasSideEffects = 1, Defs = [CC] in
- def STFLE : StoreInherentS<"stfle", 0xB2B0>;
+let hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in
+ def STFLE : StoreInherentS<"stfle", 0xB2B0, null_frag, 0>;
// Extract CPU time.
let Defs = [R0D, R1D], hasSideEffects = 1, mayLoad = 1 in
Modified: llvm/trunk/lib/Target/SystemZ/SystemZOperators.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZOperators.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZOperators.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZOperators.td Fri Dec 2 12:21:53 2016
@@ -570,6 +570,12 @@ class storeu<SDPatternOperator operator,
: PatFrag<(ops node:$value, node:$addr),
(store (operator node:$value), node:$addr)>;
+// Create a store operator that performs the given inherent operation
+// and stores the resulting value.
+class storei<SDPatternOperator operator, SDPatternOperator store = store>
+ : PatFrag<(ops node:$addr),
+ (store (operator), node:$addr)>;
+
// Vector representation of all-zeros and all-ones.
def z_vzero : PatFrag<(ops), (bitconvert (v16i8 (z_byte_mask (i32 0))))>;
def z_vones : PatFrag<(ops), (bitconvert (v16i8 (z_byte_mask (i32 65535))))>;
Modified: llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ13.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ13.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ13.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ13.td Fri Dec 2 12:21:53 2016
@@ -802,6 +802,17 @@ def : InstRW<[VecDF, VecDF, Lat20, Group
def : InstRW<[LSU, VecXsPm, Lat9], (instregex "TC(E|D)B$")>;
def : InstRW<[LSU, VecDF2, VecDF2, Lat15, GroupAlone], (instregex "TCXB$")>;
+//===----------------------------------------------------------------------===//
+// FP: Floating-point control register instructions
+//===----------------------------------------------------------------------===//
+
+def : InstRW<[FXa, LSU, Lat4, GroupAlone], (instregex "EFPC$")>;
+def : InstRW<[FXb, LSU, Lat5, GroupAlone], (instregex "STFPC$")>;
+def : InstRW<[LSU, Lat3, GroupAlone], (instregex "SFPC$")>;
+def : InstRW<[LSU, LSU, Lat6, GroupAlone], (instregex "LFPC$")>;
+def : InstRW<[FXa, Lat30, GroupAlone], (instregex "SFASR$")>;
+def : InstRW<[FXa, LSU, Lat30, GroupAlone], (instregex "LFAS$")>;
+def : InstRW<[FXb, Lat3, GroupAlone], (instregex "SRNM(B|T)?$")>;
// --------------------------------- Vector --------------------------------- //
Modified: llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ196.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ196.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ196.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZScheduleZ196.td Fri Dec 2 12:21:53 2016
@@ -731,5 +731,17 @@ def : InstRW<[FPU, FPU, Lat30], (instreg
def : InstRW<[FPU, LSU, Lat15], (instregex "TC(E|D)B$")>;
def : InstRW<[FPU2, FPU2, LSU, Lat15, GroupAlone], (instregex "TCXB$")>;
+//===----------------------------------------------------------------------===//
+// FP: Floating-point control register instructions
+//===----------------------------------------------------------------------===//
+
+def : InstRW<[FXU, LSU, Lat4, GroupAlone], (instregex "EFPC$")>;
+def : InstRW<[LSU, Lat3, GroupAlone], (instregex "SFPC$")>;
+def : InstRW<[LSU, LSU, Lat6, GroupAlone], (instregex "LFPC$")>;
+def : InstRW<[LSU, Lat3, GroupAlone], (instregex "STFPC$")>;
+def : InstRW<[FXU, Lat30, GroupAlone], (instregex "SFASR$")>;
+def : InstRW<[FXU, LSU, Lat30, GroupAlone], (instregex "LFAS$")>;
+def : InstRW<[FXU, Lat2, GroupAlone], (instregex "SRNM(B|T)?$")>;
+
}
Modified: llvm/trunk/lib/Target/SystemZ/SystemZScheduleZEC12.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZScheduleZEC12.td?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZScheduleZEC12.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZScheduleZEC12.td Fri Dec 2 12:21:53 2016
@@ -769,5 +769,17 @@ def : InstRW<[FPU, FPU, Lat30], (instreg
def : InstRW<[FPU, LSU, Lat15], (instregex "TC(E|D)B$")>;
def : InstRW<[FPU2, FPU2, LSU, Lat15, GroupAlone], (instregex "TCXB$")>;
+//===----------------------------------------------------------------------===//
+// FP: Floating-point control register instructions
+//===----------------------------------------------------------------------===//
+
+def : InstRW<[FXU, LSU, Lat4, GroupAlone], (instregex "EFPC$")>;
+def : InstRW<[LSU, Lat3, GroupAlone], (instregex "SFPC$")>;
+def : InstRW<[LSU, LSU, Lat6, GroupAlone], (instregex "LFPC$")>;
+def : InstRW<[LSU, Lat3, GroupAlone], (instregex "STFPC$")>;
+def : InstRW<[FXU, Lat30, GroupAlone], (instregex "SFASR$")>;
+def : InstRW<[FXU, LSU, Lat30, GroupAlone], (instregex "LFAS$")>;
+def : InstRW<[FXU, Lat2, GroupAlone], (instregex "SRNM(B|T)?$")>;
+
}
Added: llvm/trunk/test/CodeGen/SystemZ/fpc-intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/fpc-intrinsics.ll?rev=288525&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/fpc-intrinsics.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/fpc-intrinsics.ll Fri Dec 2 12:21:53 2016
@@ -0,0 +1,67 @@
+; Test floating-point control register intrinsics.
+;
+; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
+
+declare void @llvm.s390.sfpc(i32)
+declare i32 @llvm.s390.efpc()
+
+; SFPC.
+define void @test_sfpc(i32 %fpc) {
+; CHECK-LABEL: test_sfpc:
+; CHECK: sfpc %r2
+; CHECK: br %r14
+ call void @llvm.s390.sfpc(i32 %fpc)
+ ret void
+}
+
+; EFPC.
+define i32 @test_efpc() {
+; CHECK-LABEL: test_efpc:
+; CHECK: efpc %r2
+; CHECK: br %r14
+ %res = call i32 @llvm.s390.efpc()
+ ret i32 %res
+}
+
+; LFPC.
+define void @test_lfpc1(i32 *%ptr) {
+; CHECK-LABEL: test_lfpc1:
+; CHECK: lfpc 0(%r2)
+; CHECK: br %r14
+ %fpc = load i32, i32 *%ptr
+ call void @llvm.s390.sfpc(i32 %fpc)
+ ret void
+}
+
+; LFPC with offset.
+define void @test_lfpc2(i32 *%ptr) {
+; CHECK-LABEL: test_lfpc2:
+; CHECK: lfpc 4092(%r2)
+; CHECK: br %r14
+ %ptr1 = getelementptr i32, i32 *%ptr, i32 1023
+ %fpc = load i32, i32 *%ptr1
+ call void @llvm.s390.sfpc(i32 %fpc)
+ ret void
+}
+
+; STFPC.
+define void @test_stfpc1(i32 *%ptr) {
+; CHECK-LABEL: test_stfpc1:
+; CHECK: stfpc 0(%r2)
+; CHECK: br %r14
+ %fpc = call i32 @llvm.s390.efpc()
+ store i32 %fpc, i32 *%ptr
+ ret void
+}
+
+; STFPC with offset.
+define void @test_stfpc2(i32 *%ptr) {
+; CHECK-LABEL: test_stfpc2:
+; CHECK: stfpc 4092(%r2)
+; CHECK: br %r14
+ %fpc = call i32 @llvm.s390.efpc()
+ %ptr1 = getelementptr i32, i32 *%ptr, i32 1023
+ store i32 %fpc, i32 *%ptr1
+ ret void
+}
+
Modified: llvm/trunk/test/MC/Disassembler/SystemZ/insns.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/SystemZ/insns.txt?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/SystemZ/insns.txt (original)
+++ llvm/trunk/test/MC/Disassembler/SystemZ/insns.txt Fri Dec 2 12:21:53 2016
@@ -3898,6 +3898,15 @@
# CHECK: ectg 4095(%r1), 0(%r15), %r2
0xc8 0x21 0x1f 0xff 0xf0 0x00
+# CHECK: efpc %r0
+0xb3 0x8c 0x00 0x00
+
+# CHECK: efpc %r1
+0xb3 0x8c 0x00 0x10
+
+# CHECK: efpc %r15
+0xb3 0x8c 0x00 0xf0
+
# CHECK: etnd %r0
0xb2 0xec 0x00 0x00
@@ -5218,6 +5227,42 @@
# CHECK: lfhat %r15, 0
0xe3 0xf0 0x00 0x00 0x00 0xc8
+# CHECK: lfas 0
+0xb2 0xbd 0x00 0x00
+
+# CHECK: lfas 0(%r1)
+0xb2 0xbd 0x10 0x00
+
+# CHECK: lfas 0(%r15)
+0xb2 0xbd 0xf0 0x00
+
+# CHECK: lfas 4095
+0xb2 0xbd 0x0f 0xff
+
+# CHECK: lfas 4095(%r1)
+0xb2 0xbd 0x1f 0xff
+
+# CHECK: lfas 4095(%r15)
+0xb2 0xbd 0xff 0xff
+
+# CHECK: lfpc 0
+0xb2 0x9d 0x00 0x00
+
+# CHECK: lfpc 0(%r1)
+0xb2 0x9d 0x10 0x00
+
+# CHECK: lfpc 0(%r15)
+0xb2 0x9d 0xf0 0x00
+
+# CHECK: lfpc 4095
+0xb2 0x9d 0x0f 0xff
+
+# CHECK: lfpc 4095(%r1)
+0xb2 0x9d 0x1f 0xff
+
+# CHECK: lfpc 4095(%r15)
+0xb2 0x9d 0xff 0xff
+
# CHECK: lgbr %r0, %r15
0xb9 0x06 0x00 0x0f
@@ -8689,6 +8734,24 @@
# CHECK: seb %f15, 0
0xed 0xf0 0x00 0x00 0x00 0x0b
+# CHECK: sfasr %r0
+0xb3 0x85 0x00 0x00
+
+# CHECK: sfasr %r1
+0xb3 0x85 0x00 0x10
+
+# CHECK: sfasr %r15
+0xb3 0x85 0x00 0xf0
+
+# CHECK: sfpc %r0
+0xb3 0x84 0x00 0x00
+
+# CHECK: sfpc %r1
+0xb3 0x84 0x00 0x10
+
+# CHECK: sfpc %r15
+0xb3 0x84 0x00 0xf0
+
# CHECK: sgfr %r0, %r0
0xb9 0x19 0x00 0x00
@@ -9544,6 +9607,60 @@
# CHECK: srk %r2, %r3, %r4
0xb9 0xf9 0x40 0x23
+# CHECK: srnm 0
+0xb2 0x99 0x00 0x00
+
+# CHECK: srnm 0(%r1)
+0xb2 0x99 0x10 0x00
+
+# CHECK: srnm 0(%r15)
+0xb2 0x99 0xf0 0x00
+
+# CHECK: srnm 4095
+0xb2 0x99 0x0f 0xff
+
+# CHECK: srnm 4095(%r1)
+0xb2 0x99 0x1f 0xff
+
+# CHECK: srnm 4095(%r15)
+0xb2 0x99 0xff 0xff
+
+# CHECK: srnmb 0
+0xb2 0xb8 0x00 0x00
+
+# CHECK: srnmb 0(%r1)
+0xb2 0xb8 0x10 0x00
+
+# CHECK: srnmb 0(%r15)
+0xb2 0xb8 0xf0 0x00
+
+# CHECK: srnmb 4095
+0xb2 0xb8 0x0f 0xff
+
+# CHECK: srnmb 4095(%r1)
+0xb2 0xb8 0x1f 0xff
+
+# CHECK: srnmb 4095(%r15)
+0xb2 0xb8 0xff 0xff
+
+# CHECK: srnmt 0
+0xb2 0xb9 0x00 0x00
+
+# CHECK: srnmt 0(%r1)
+0xb2 0xb9 0x10 0x00
+
+# CHECK: srnmt 0(%r15)
+0xb2 0xb9 0xf0 0x00
+
+# CHECK: srnmt 4095
+0xb2 0xb9 0x0f 0xff
+
+# CHECK: srnmt 4095(%r1)
+0xb2 0xb9 0x1f 0xff
+
+# CHECK: srnmt 4095(%r15)
+0xb2 0xb9 0xff 0xff
+
# CHECK: srst %r0, %r0
0xb2 0x5e 0x00 0x00
@@ -9880,6 +9997,24 @@
# CHECK: stey %f15, 0
0xed 0xf0 0x00 0x00 0x00 0x66
+# CHECK: stfpc 0
+0xb2 0x9c 0x00 0x00
+
+# CHECK: stfpc 0(%r1)
+0xb2 0x9c 0x10 0x00
+
+# CHECK: stfpc 0(%r15)
+0xb2 0x9c 0xf0 0x00
+
+# CHECK: stfpc 4095
+0xb2 0x9c 0x0f 0xff
+
+# CHECK: stfpc 4095(%r1)
+0xb2 0x9c 0x1f 0xff
+
+# CHECK: stfpc 4095(%r15)
+0xb2 0x9c 0xff 0xff
+
# CHECK: stg %r0, -524288
0xe3 0x00 0x00 0x00 0x80 0x24
Modified: llvm/trunk/test/MC/SystemZ/insn-bad-z196.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/SystemZ/insn-bad-z196.s?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/test/MC/SystemZ/insn-bad-z196.s (original)
+++ llvm/trunk/test/MC/SystemZ/insn-bad-z196.s Fri Dec 2 12:21:53 2016
@@ -874,6 +874,17 @@
srlk %r0,%r0,0(%r1,%r2)
#CHECK: error: invalid operand
+#CHECK: srnmb -1
+#CHECK: error: invalid operand
+#CHECK: srnmb 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: srnmb 0(%r1,%r2)
+
+ srnmb -1
+ srnmb 4096
+ srnmb 0(%r1,%r2)
+
+#CHECK: error: invalid operand
#CHECK: stch %r0, -524289
#CHECK: error: invalid operand
#CHECK: stch %r0, 524288
Modified: llvm/trunk/test/MC/SystemZ/insn-bad.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/SystemZ/insn-bad.s?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/test/MC/SystemZ/insn-bad.s (original)
+++ llvm/trunk/test/MC/SystemZ/insn-bad.s Fri Dec 2 12:21:53 2016
@@ -2008,6 +2008,28 @@
lfh %r0, 0
#CHECK: error: invalid operand
+#CHECK: lfas -1
+#CHECK: error: invalid operand
+#CHECK: lfas 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: lfas 0(%r1,%r2)
+
+ lfas -1
+ lfas 4096
+ lfas 0(%r1,%r2)
+
+#CHECK: error: invalid operand
+#CHECK: lfpc -1
+#CHECK: error: invalid operand
+#CHECK: lfpc 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: lfpc 0(%r1,%r2)
+
+ lfpc -1
+ lfpc 4096
+ lfpc 0(%r1,%r2)
+
+#CHECK: error: invalid operand
#CHECK: lg %r0, -524289
#CHECK: error: invalid operand
#CHECK: lg %r0, 524288
@@ -3538,6 +3560,33 @@
srlk %r2,%r3,4(%r5)
#CHECK: error: invalid operand
+#CHECK: srnm -1
+#CHECK: error: invalid operand
+#CHECK: srnm 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: srnm 0(%r1,%r2)
+
+ srnm -1
+ srnm 4096
+ srnm 0(%r1,%r2)
+
+#CHECK: error: instruction requires: fp-extension
+#CHECK: srnmb 0(%r1)
+
+ srnmb 0(%r1)
+
+#CHECK: error: invalid operand
+#CHECK: srnmt -1
+#CHECK: error: invalid operand
+#CHECK: srnmt 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: srnmt 0(%r1,%r2)
+
+ srnmt -1
+ srnmt 4096
+ srnmt 0(%r1,%r2)
+
+#CHECK: error: invalid operand
#CHECK: st %r0, -1
#CHECK: error: invalid operand
#CHECK: st %r0, 4096
@@ -3618,6 +3667,17 @@
stey %f0, 524288
#CHECK: error: invalid operand
+#CHECK: stfpc -1
+#CHECK: error: invalid operand
+#CHECK: stfpc 4096
+#CHECK: error: invalid use of indexed addressing
+#CHECK: stfpc 0(%r1,%r2)
+
+ stfpc -1
+ stfpc 4096
+ stfpc 0(%r1,%r2)
+
+#CHECK: error: invalid operand
#CHECK: stg %r0, -524289
#CHECK: error: invalid operand
#CHECK: stg %r0, 524288
Modified: llvm/trunk/test/MC/SystemZ/insn-good-z196.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/SystemZ/insn-good-z196.s?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/test/MC/SystemZ/insn-good-z196.s (original)
+++ llvm/trunk/test/MC/SystemZ/insn-good-z196.s Fri Dec 2 12:21:53 2016
@@ -1469,6 +1469,20 @@
srlk %r0,%r0,524287(%r1)
srlk %r0,%r0,524287(%r15)
+#CHECK: srnmb 0 # encoding: [0xb2,0xb8,0x00,0x00]
+#CHECK: srnmb 0(%r1) # encoding: [0xb2,0xb8,0x10,0x00]
+#CHECK: srnmb 0(%r15) # encoding: [0xb2,0xb8,0xf0,0x00]
+#CHECK: srnmb 4095 # encoding: [0xb2,0xb8,0x0f,0xff]
+#CHECK: srnmb 4095(%r1) # encoding: [0xb2,0xb8,0x1f,0xff]
+#CHECK: srnmb 4095(%r15) # encoding: [0xb2,0xb8,0xff,0xff]
+
+ srnmb 0
+ srnmb 0(%r1)
+ srnmb 0(%r15)
+ srnmb 4095
+ srnmb 4095(%r1)
+ srnmb 4095(%r15)
+
#CHECK: stch %r0, -524288 # encoding: [0xe3,0x00,0x00,0x00,0x80,0xc3]
#CHECK: stch %r0, -1 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0xc3]
#CHECK: stch %r0, 0 # encoding: [0xe3,0x00,0x00,0x00,0x00,0xc3]
Modified: llvm/trunk/test/MC/SystemZ/insn-good.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/SystemZ/insn-good.s?rev=288525&r1=288524&r2=288525&view=diff
==============================================================================
--- llvm/trunk/test/MC/SystemZ/insn-good.s (original)
+++ llvm/trunk/test/MC/SystemZ/insn-good.s Fri Dec 2 12:21:53 2016
@@ -5853,6 +5853,14 @@
ectg 0(%r1),1(%r15),%r2
ectg 0(%r1),4095(%r15),%r2
+#CHECK: efpc %r0 # encoding: [0xb3,0x8c,0x00,0x00]
+#CHECK: efpc %r1 # encoding: [0xb3,0x8c,0x00,0x10]
+#CHECK: efpc %r15 # encoding: [0xb3,0x8c,0x00,0xf0]
+
+ efpc %r0
+ efpc %r1
+ efpc %r15
+
#CHECK: ex %r0, 0 # encoding: [0x44,0x00,0x00,0x00]
#CHECK: ex %r0, 4095 # encoding: [0x44,0x00,0x0f,0xff]
#CHECK: ex %r0, 0(%r1) # encoding: [0x44,0x00,0x10,0x00]
@@ -6551,6 +6559,34 @@
ley %f0, 524287(%r15,%r1)
ley %f15, 0
+#CHECK: lfas 0 # encoding: [0xb2,0xbd,0x00,0x00]
+#CHECK: lfas 0(%r1) # encoding: [0xb2,0xbd,0x10,0x00]
+#CHECK: lfas 0(%r15) # encoding: [0xb2,0xbd,0xf0,0x00]
+#CHECK: lfas 4095 # encoding: [0xb2,0xbd,0x0f,0xff]
+#CHECK: lfas 4095(%r1) # encoding: [0xb2,0xbd,0x1f,0xff]
+#CHECK: lfas 4095(%r15) # encoding: [0xb2,0xbd,0xff,0xff]
+
+ lfas 0
+ lfas 0(%r1)
+ lfas 0(%r15)
+ lfas 4095
+ lfas 4095(%r1)
+ lfas 4095(%r15)
+
+#CHECK: lfpc 0 # encoding: [0xb2,0x9d,0x00,0x00]
+#CHECK: lfpc 0(%r1) # encoding: [0xb2,0x9d,0x10,0x00]
+#CHECK: lfpc 0(%r15) # encoding: [0xb2,0x9d,0xf0,0x00]
+#CHECK: lfpc 4095 # encoding: [0xb2,0x9d,0x0f,0xff]
+#CHECK: lfpc 4095(%r1) # encoding: [0xb2,0x9d,0x1f,0xff]
+#CHECK: lfpc 4095(%r15) # encoding: [0xb2,0x9d,0xff,0xff]
+
+ lfpc 0
+ lfpc 0(%r1)
+ lfpc 0(%r15)
+ lfpc 4095
+ lfpc 4095(%r1)
+ lfpc 4095(%r15)
+
#CHECK: lg %r0, -524288 # encoding: [0xe3,0x00,0x00,0x00,0x80,0x04]
#CHECK: lg %r0, -1 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0x04]
#CHECK: lg %r0, 0 # encoding: [0xe3,0x00,0x00,0x00,0x00,0x04]
@@ -9153,6 +9189,22 @@
sebr %f7, %f8
sebr %f15, %f0
+#CHECK: sfasr %r0 # encoding: [0xb3,0x85,0x00,0x00]
+#CHECK: sfasr %r1 # encoding: [0xb3,0x85,0x00,0x10]
+#CHECK: sfasr %r15 # encoding: [0xb3,0x85,0x00,0xf0]
+
+ sfasr %r0
+ sfasr %r1
+ sfasr %r15
+
+#CHECK: sfpc %r0 # encoding: [0xb3,0x84,0x00,0x00]
+#CHECK: sfpc %r1 # encoding: [0xb3,0x84,0x00,0x10]
+#CHECK: sfpc %r15 # encoding: [0xb3,0x84,0x00,0xf0]
+
+ sfpc %r0
+ sfpc %r1
+ sfpc %r15
+
#CHECK: sg %r0, -524288 # encoding: [0xe3,0x00,0x00,0x00,0x80,0x09]
#CHECK: sg %r0, -1 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0x09]
#CHECK: sg %r0, 0 # encoding: [0xe3,0x00,0x00,0x00,0x00,0x09]
@@ -9677,6 +9729,34 @@
srlg %r0,%r0,524287(%r1)
srlg %r0,%r0,524287(%r15)
+#CHECK: srnm 0 # encoding: [0xb2,0x99,0x00,0x00]
+#CHECK: srnm 0(%r1) # encoding: [0xb2,0x99,0x10,0x00]
+#CHECK: srnm 0(%r15) # encoding: [0xb2,0x99,0xf0,0x00]
+#CHECK: srnm 4095 # encoding: [0xb2,0x99,0x0f,0xff]
+#CHECK: srnm 4095(%r1) # encoding: [0xb2,0x99,0x1f,0xff]
+#CHECK: srnm 4095(%r15) # encoding: [0xb2,0x99,0xff,0xff]
+
+ srnm 0
+ srnm 0(%r1)
+ srnm 0(%r15)
+ srnm 4095
+ srnm 4095(%r1)
+ srnm 4095(%r15)
+
+#CHECK: srnmt 0 # encoding: [0xb2,0xb9,0x00,0x00]
+#CHECK: srnmt 0(%r1) # encoding: [0xb2,0xb9,0x10,0x00]
+#CHECK: srnmt 0(%r15) # encoding: [0xb2,0xb9,0xf0,0x00]
+#CHECK: srnmt 4095 # encoding: [0xb2,0xb9,0x0f,0xff]
+#CHECK: srnmt 4095(%r1) # encoding: [0xb2,0xb9,0x1f,0xff]
+#CHECK: srnmt 4095(%r15) # encoding: [0xb2,0xb9,0xff,0xff]
+
+ srnmt 0
+ srnmt 0(%r1)
+ srnmt 0(%r15)
+ srnmt 4095
+ srnmt 4095(%r1)
+ srnmt 4095(%r15)
+
#CHECK: srst %r0, %r0 # encoding: [0xb2,0x5e,0x00,0x00]
#CHECK: srst %r0, %r15 # encoding: [0xb2,0x5e,0x00,0x0f]
#CHECK: srst %r15, %r0 # encoding: [0xb2,0x5e,0x00,0xf0]
@@ -9923,6 +10003,20 @@
stey %f0, 524287(%r15,%r1)
stey %f15, 0
+#CHECK: stfpc 0 # encoding: [0xb2,0x9c,0x00,0x00]
+#CHECK: stfpc 0(%r1) # encoding: [0xb2,0x9c,0x10,0x00]
+#CHECK: stfpc 0(%r15) # encoding: [0xb2,0x9c,0xf0,0x00]
+#CHECK: stfpc 4095 # encoding: [0xb2,0x9c,0x0f,0xff]
+#CHECK: stfpc 4095(%r1) # encoding: [0xb2,0x9c,0x1f,0xff]
+#CHECK: stfpc 4095(%r15) # encoding: [0xb2,0x9c,0xff,0xff]
+
+ stfpc 0
+ stfpc 0(%r1)
+ stfpc 0(%r15)
+ stfpc 4095
+ stfpc 4095(%r1)
+ stfpc 4095(%r15)
+
#CHECK: stg %r0, -524288 # encoding: [0xe3,0x00,0x00,0x00,0x80,0x24]
#CHECK: stg %r0, -1 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0x24]
#CHECK: stg %r0, 0 # encoding: [0xe3,0x00,0x00,0x00,0x00,0x24]
More information about the llvm-commits
mailing list