1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

[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

llvm-svn: 288525
This commit is contained in:
Ulrich Weigand 2016-12-02 18:21:53 +00:00
parent 479e55b0a2
commit 3319b28944
14 changed files with 480 additions and 11 deletions

View File

@ -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]>;
}

View File

@ -478,6 +478,26 @@ let Defs = [CC], CCValues = 0xC in {
def TCXB : TestRXE<"tcxb", 0xED12, z_tdc, FP128>;
}
//===----------------------------------------------------------------------===//
// 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
//===----------------------------------------------------------------------===//

View File

@ -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<16> opcode, bits<16> value>
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, bits<8>opcode, RegisterOperand cls>
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>

View File

@ -1632,7 +1632,7 @@ let hasSideEffects = 1, Predicates = [FeatureTransactionalExecution] in {
// 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 = [CC] in
// 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

View File

@ -570,6 +570,12 @@ class storeu<SDPatternOperator operator, SDPatternOperator store = store>
: 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))))>;

View File

@ -802,6 +802,17 @@ def : InstRW<[VecDF, VecDF, Lat20, GroupAlone], (instregex "CXBR$")>;
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 --------------------------------- //

View File

@ -731,5 +731,17 @@ def : InstRW<[FPU, FPU, Lat30], (instregex "CXBR$")>;
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)?$")>;
}

View File

@ -769,5 +769,17 @@ def : InstRW<[FPU, FPU, Lat30], (instregex "CXBR$")>;
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)?$")>;
}

View File

@ -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
}

View File

@ -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

View File

@ -873,6 +873,17 @@
srlk %r0,%r0,0(%r0)
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

View File

@ -2007,6 +2007,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
@ -3537,6 +3559,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
@ -3617,6 +3666,17 @@
stey %f0, -524289
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

View File

@ -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]

View File

@ -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]