103ab2e2bSUlrich Weigand//==- SystemZInstrSystem.td - SystemZ system instructions -*- tblgen-*-----==// 203ab2e2bSUlrich Weigand// 32946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 603ab2e2bSUlrich Weigand// 703ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 803ab2e2bSUlrich Weigand// 903ab2e2bSUlrich Weigand// The instructions in this file implement SystemZ system-level instructions. 1003ab2e2bSUlrich Weigand// Most of these instructions are privileged or semi-privileged. They are 1103ab2e2bSUlrich Weigand// not used for code generation, but are provided for use with the assembler 1203ab2e2bSUlrich Weigand// and disassembler only. 1303ab2e2bSUlrich Weigand// 1403ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 1503ab2e2bSUlrich Weigand 1603ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 1703ab2e2bSUlrich Weigand// Program-Status Word Instructions. 1803ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 1903ab2e2bSUlrich Weigand 2003ab2e2bSUlrich Weigand// Extract PSW. 2103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [CC] in 2203ab2e2bSUlrich Weigand def EPSW : InherentDualRRE<"epsw", 0xB98D, GR32>; 2303ab2e2bSUlrich Weigand 2403ab2e2bSUlrich Weigand// Load PSW (extended). 25b5b91cd4SJonas Paulssonlet hasSideEffects = 1, Defs = [CC] in { 2603ab2e2bSUlrich Weigand def LPSW : SideEffectUnaryS<"lpsw", 0x8200, null_frag, 8>; 2703ab2e2bSUlrich Weigand def LPSWE : SideEffectUnaryS<"lpswe", 0xB2B2, null_frag, 16>; 2803ab2e2bSUlrich Weigand} 29*8cd8120aSUlrich Weigandlet Predicates = [FeatureBEAREnhancement], hasSideEffects = 1, Defs = [CC] in 30*8cd8120aSUlrich Weigand def LPSWEY : SideEffectUnarySIY<"lpswey", 0xEB71, 16>; 3103ab2e2bSUlrich Weigand 3203ab2e2bSUlrich Weigand// Insert PSW key. 3303ab2e2bSUlrich Weigandlet Uses = [R2L], Defs = [R2L] in 3403ab2e2bSUlrich Weigand def IPK : SideEffectInherentS<"ipk", 0xB20B, null_frag>; 3503ab2e2bSUlrich Weigand 3603ab2e2bSUlrich Weigand// Set PSW key from address. 3703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 3803ab2e2bSUlrich Weigand def SPKA : SideEffectAddressS<"spka", 0xB20A, null_frag>; 3903ab2e2bSUlrich Weigand 4003ab2e2bSUlrich Weigand// Set system mask. 41b5b91cd4SJonas Paulssonlet hasSideEffects = 1 in 4203ab2e2bSUlrich Weigand def SSM : SideEffectUnaryS<"ssm", 0x8000, null_frag, 1>; 4303ab2e2bSUlrich Weigand 4403ab2e2bSUlrich Weigand// Store then AND/OR system mask. 4503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 4603ab2e2bSUlrich Weigand def STNSM : StoreSI<"stnsm", 0xAC, null_frag, imm32zx8>; 4703ab2e2bSUlrich Weigand def STOSM : StoreSI<"stosm", 0xAD, null_frag, imm32zx8>; 4803ab2e2bSUlrich Weigand} 4903ab2e2bSUlrich Weigand 5003ab2e2bSUlrich Weigand// Insert address space control. 5103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 5203ab2e2bSUlrich Weigand def IAC : InherentRRE<"iac", 0xB224, GR32, null_frag>; 5303ab2e2bSUlrich Weigand 5403ab2e2bSUlrich Weigand// Set address space control (fast). 5503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 5603ab2e2bSUlrich Weigand def SAC : SideEffectAddressS<"sac", 0xB219, null_frag>; 5703ab2e2bSUlrich Weigand def SACF : SideEffectAddressS<"sacf", 0xB279, null_frag>; 5803ab2e2bSUlrich Weigand} 5903ab2e2bSUlrich Weigand 6003ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 6103ab2e2bSUlrich Weigand// Control Register Instructions. 6203ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 6303ab2e2bSUlrich Weigand 64b5b91cd4SJonas Paulssonlet hasSideEffects = 1 in { 6503ab2e2bSUlrich Weigand // Load control. 6603ab2e2bSUlrich Weigand def LCTL : LoadMultipleRS<"lctl", 0xB7, CR64>; 6703ab2e2bSUlrich Weigand def LCTLG : LoadMultipleRSY<"lctlg", 0xEB2F, CR64>; 6803ab2e2bSUlrich Weigand 6903ab2e2bSUlrich Weigand // Store control. 7003ab2e2bSUlrich Weigand def STCTL : StoreMultipleRS<"stctl", 0xB6, CR64>; 7103ab2e2bSUlrich Weigand def STCTG : StoreMultipleRSY<"stctg", 0xEB25, CR64>; 72b5b91cd4SJonas Paulsson} 7303ab2e2bSUlrich Weigand 7403ab2e2bSUlrich Weigand// Extract primary ASN (and instance). 7503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 7603ab2e2bSUlrich Weigand def EPAR : InherentRRE<"epar", 0xB226, GR32, null_frag>; 7703ab2e2bSUlrich Weigand def EPAIR : InherentRRE<"epair", 0xB99A, GR64, null_frag>; 7803ab2e2bSUlrich Weigand} 7903ab2e2bSUlrich Weigand 8003ab2e2bSUlrich Weigand// Extract secondary ASN (and instance). 8103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 8203ab2e2bSUlrich Weigand def ESAR : InherentRRE<"esar", 0xB227, GR32, null_frag>; 8303ab2e2bSUlrich Weigand def ESAIR : InherentRRE<"esair", 0xB99B, GR64, null_frag>; 8403ab2e2bSUlrich Weigand} 8503ab2e2bSUlrich Weigand 8603ab2e2bSUlrich Weigand// Set secondary ASN (and instance). 8703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 8803ab2e2bSUlrich Weigand def SSAR : SideEffectUnaryRRE<"ssar", 0xB225, GR32, null_frag>; 8903ab2e2bSUlrich Weigand def SSAIR : SideEffectUnaryRRE<"ssair", 0xB99F, GR64, null_frag>; 9003ab2e2bSUlrich Weigand} 9103ab2e2bSUlrich Weigand 9203ab2e2bSUlrich Weigand// Extract and set extended authority. 9303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 9403ab2e2bSUlrich Weigand def ESEA : UnaryTiedRRE<"esea", 0xB99D, GR32>; 9503ab2e2bSUlrich Weigand 9603ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 9703ab2e2bSUlrich Weigand// Prefix-Register Instructions. 9803ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 9903ab2e2bSUlrich Weigand 10003ab2e2bSUlrich Weigand// Set prefix. 10103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 10203ab2e2bSUlrich Weigand def SPX : SideEffectUnaryS<"spx", 0xB210, null_frag, 4>; 10303ab2e2bSUlrich Weigand 10403ab2e2bSUlrich Weigand// Store prefix. 10503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 10603ab2e2bSUlrich Weigand def STPX : StoreInherentS<"stpx", 0xB211, null_frag, 4>; 10703ab2e2bSUlrich Weigand 10803ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 109*8cd8120aSUlrich Weigand// Breaking-Event-Address-Register Instructions. 110*8cd8120aSUlrich Weigand//===----------------------------------------------------------------------===// 111*8cd8120aSUlrich Weigand 112*8cd8120aSUlrich Weigandlet Predicates = [FeatureBEAREnhancement] in { 113*8cd8120aSUlrich Weigand // Load BEAR. 114*8cd8120aSUlrich Weigand let hasSideEffects = 1 in 115*8cd8120aSUlrich Weigand def LBEAR : SideEffectUnaryS<"lbear", 0xB200, null_frag, 8>; 116*8cd8120aSUlrich Weigand 117*8cd8120aSUlrich Weigand // Store BEAR. 118*8cd8120aSUlrich Weigand let hasSideEffects = 1 in 119*8cd8120aSUlrich Weigand def STBEAR : StoreInherentS<"stbear", 0xB201, null_frag, 8>; 120*8cd8120aSUlrich Weigand} 121*8cd8120aSUlrich Weigand 122*8cd8120aSUlrich Weigand//===----------------------------------------------------------------------===// 12303ab2e2bSUlrich Weigand// Storage-Key and Real Memory Instructions. 12403ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 12503ab2e2bSUlrich Weigand 12603ab2e2bSUlrich Weigand// Insert storage key extended. 12703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 12803ab2e2bSUlrich Weigand def ISKE : BinaryRRE<"iske", 0xB229, null_frag, GR32, GR64>; 12903ab2e2bSUlrich Weigand 13003ab2e2bSUlrich Weigand// Insert virtual storage key. 13103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 13203ab2e2bSUlrich Weigand def IVSK : BinaryRRE<"ivsk", 0xB223, null_frag, GR32, GR64>; 13303ab2e2bSUlrich Weigand 13403ab2e2bSUlrich Weigand// Set storage key extended. 13503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 13603ab2e2bSUlrich Weigand defm SSKE : SideEffectTernaryRRFcOpt<"sske", 0xB22B, GR32, GR64>; 13703ab2e2bSUlrich Weigand 13803ab2e2bSUlrich Weigand// Reset reference bit extended. 13903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 14003ab2e2bSUlrich Weigand def RRBE : SideEffectBinaryRRE<"rrbe", 0xB22A, GR32, GR64>; 14103ab2e2bSUlrich Weigand 14203ab2e2bSUlrich Weigand// Reset reference bits multiple. 14303ab2e2bSUlrich Weigandlet Predicates = [FeatureResetReferenceBitsMultiple], hasSideEffects = 1 in 14403ab2e2bSUlrich Weigand def RRBM : UnaryRRE<"rrbm", 0xB9AE, null_frag, GR64, GR64>; 14503ab2e2bSUlrich Weigand 1462b3482feSUlrich Weigand// Insert reference bits multiple. 1472b3482feSUlrich Weigandlet Predicates = [FeatureInsertReferenceBitsMultiple], hasSideEffects = 1 in 1482b3482feSUlrich Weigand def IRBM : UnaryRRE<"irbm", 0xB9AC, null_frag, GR64, GR64>; 1492b3482feSUlrich Weigand 15003ab2e2bSUlrich Weigand// Perform frame management function. 15103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 15203ab2e2bSUlrich Weigand def PFMF : SideEffectBinaryMemRRE<"pfmf", 0xB9AF, GR32, GR64>; 15303ab2e2bSUlrich Weigand 15403ab2e2bSUlrich Weigand// Test block. 15503ab2e2bSUlrich Weigandlet hasSideEffects = 1, mayStore = 1, Uses = [R0D], Defs = [R0D, CC] in 15603ab2e2bSUlrich Weigand def TB : SideEffectBinaryRRE<"tb", 0xB22C, GR64, GR64>; 15703ab2e2bSUlrich Weigand 15803ab2e2bSUlrich Weigand// Page in / out. 15903ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Defs = [CC] in { 16003ab2e2bSUlrich Weigand def PGIN : SideEffectBinaryRRE<"pgin", 0xB22E, GR64, GR64>; 16103ab2e2bSUlrich Weigand def PGOUT : SideEffectBinaryRRE<"pgout", 0xB22F, GR64, GR64>; 16203ab2e2bSUlrich Weigand} 16303ab2e2bSUlrich Weigand 16403ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 16503ab2e2bSUlrich Weigand// Dynamic-Address-Translation Instructions. 16603ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 16703ab2e2bSUlrich Weigand 16803ab2e2bSUlrich Weigand// Invalidate page table entry. 16903ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 17003ab2e2bSUlrich Weigand defm IPTE : SideEffectQuaternaryRRFaOptOpt<"ipte", 0xB221, GR64, GR32, GR32>; 17103ab2e2bSUlrich Weigand 17203ab2e2bSUlrich Weigand// Invalidate DAT table entry. 17303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 17403ab2e2bSUlrich Weigand defm IDTE : SideEffectQuaternaryRRFbOpt<"idte", 0xB98E, GR64, GR64, GR64>; 17503ab2e2bSUlrich Weigand 176*8cd8120aSUlrich Weigand// Reset DAT protection. 177*8cd8120aSUlrich Weigandlet Predicates = [FeatureResetDATProtection], hasSideEffects = 1 in 178*8cd8120aSUlrich Weigand defm RDP : SideEffectQuaternaryRRFbOpt<"rdp", 0xB98B, GR64, GR64, GR64>; 179*8cd8120aSUlrich Weigand 18003ab2e2bSUlrich Weigand// Compare and replace DAT table entry. 18103ab2e2bSUlrich Weigandlet Predicates = [FeatureEnhancedDAT2], hasSideEffects = 1, Defs = [CC] in 18203ab2e2bSUlrich Weigand defm CRDTE : SideEffectQuaternaryRRFbOpt<"crdte", 0xB98F, GR128, GR128, GR64>; 18303ab2e2bSUlrich Weigand 18403ab2e2bSUlrich Weigand// Purge TLB. 18503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 18603ab2e2bSUlrich Weigand def PTLB : SideEffectInherentS<"ptlb", 0xB20D, null_frag>; 18703ab2e2bSUlrich Weigand 18803ab2e2bSUlrich Weigand// Compare and swap and purge. 18903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in { 19003ab2e2bSUlrich Weigand def CSP : CmpSwapRRE<"csp", 0xB250, GR128, GR64>; 19103ab2e2bSUlrich Weigand def CSPG : CmpSwapRRE<"cspg", 0xB98A, GR128, GR64>; 19203ab2e2bSUlrich Weigand} 19303ab2e2bSUlrich Weigand 19403ab2e2bSUlrich Weigand// Load page-table-entry address. 19503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 19603ab2e2bSUlrich Weigand def LPTEA : TernaryRRFb<"lptea", 0xB9AA, GR64, GR64, GR64>; 19703ab2e2bSUlrich Weigand 19803ab2e2bSUlrich Weigand// Load real address. 19903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in { 20003ab2e2bSUlrich Weigand defm LRA : LoadAddressRXPair<"lra", 0xB1, 0xE313, null_frag>; 20103ab2e2bSUlrich Weigand def LRAG : LoadAddressRXY<"lrag", 0xE303, null_frag, laaddr20pair>; 20203ab2e2bSUlrich Weigand} 20303ab2e2bSUlrich Weigand 20403ab2e2bSUlrich Weigand// Store real address. 20503ab2e2bSUlrich Weiganddef STRAG : StoreSSE<"strag", 0xE502>; 20603ab2e2bSUlrich Weigand 20703ab2e2bSUlrich Weigand// Load using real address. 20803ab2e2bSUlrich Weigandlet mayLoad = 1 in { 20903ab2e2bSUlrich Weigand def LURA : UnaryRRE<"lura", 0xB24B, null_frag, GR32, GR64>; 21003ab2e2bSUlrich Weigand def LURAG : UnaryRRE<"lurag", 0xB905, null_frag, GR64, GR64>; 21103ab2e2bSUlrich Weigand} 21203ab2e2bSUlrich Weigand 21303ab2e2bSUlrich Weigand// Store using real address. 21403ab2e2bSUlrich Weigandlet mayStore = 1 in { 21503ab2e2bSUlrich Weigand def STURA : SideEffectBinaryRRE<"stura", 0xB246, GR32, GR64>; 21603ab2e2bSUlrich Weigand def STURG : SideEffectBinaryRRE<"sturg", 0xB925, GR64, GR64>; 21703ab2e2bSUlrich Weigand} 21803ab2e2bSUlrich Weigand 21903ab2e2bSUlrich Weigand// Test protection. 22003ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 22103ab2e2bSUlrich Weigand def TPROT : SideEffectBinarySSE<"tprot", 0xE501>; 22203ab2e2bSUlrich Weigand 22303ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 22403ab2e2bSUlrich Weigand// Memory-move Instructions. 22503ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 22603ab2e2bSUlrich Weigand 22703ab2e2bSUlrich Weigand// Move with key. 22803ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Defs = [CC] in 22903ab2e2bSUlrich Weigand def MVCK : MemoryBinarySSd<"mvck", 0xD9, GR64>; 23003ab2e2bSUlrich Weigand 23103ab2e2bSUlrich Weigand// Move to primary / secondary. 23203ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Defs = [CC] in { 23303ab2e2bSUlrich Weigand def MVCP : MemoryBinarySSd<"mvcp", 0xDA, GR64>; 23403ab2e2bSUlrich Weigand def MVCS : MemoryBinarySSd<"mvcs", 0xDB, GR64>; 23503ab2e2bSUlrich Weigand} 23603ab2e2bSUlrich Weigand 23703ab2e2bSUlrich Weigand// Move with source / destination key. 23803ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Uses = [R0L, R1L] in { 23903ab2e2bSUlrich Weigand def MVCSK : SideEffectBinarySSE<"mvcsk", 0xE50E>; 24003ab2e2bSUlrich Weigand def MVCDK : SideEffectBinarySSE<"mvcdk", 0xE50F>; 24103ab2e2bSUlrich Weigand} 24203ab2e2bSUlrich Weigand 24303ab2e2bSUlrich Weigand// Move with optional specifications. 24403ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Uses = [R0L] in 24503ab2e2bSUlrich Weigand def MVCOS : SideEffectTernarySSF<"mvcos", 0xC80, GR64>; 24603ab2e2bSUlrich Weigand 24703ab2e2bSUlrich Weigand// Move page. 24803ab2e2bSUlrich Weigandlet mayLoad = 1, mayStore = 1, Uses = [R0L], Defs = [CC] in 24903ab2e2bSUlrich Weigand def MVPG : SideEffectBinaryRRE<"mvpg", 0xB254, GR64, GR64>; 25003ab2e2bSUlrich Weigand 25103ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 25203ab2e2bSUlrich Weigand// Address-Space Instructions. 25303ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 25403ab2e2bSUlrich Weigand 25503ab2e2bSUlrich Weigand// Load address space parameters. 25603ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 25703ab2e2bSUlrich Weigand def LASP : SideEffectBinarySSE<"lasp", 0xE500>; 25803ab2e2bSUlrich Weigand 25903ab2e2bSUlrich Weigand// Purge ALB. 26003ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 26103ab2e2bSUlrich Weigand def PALB : SideEffectInherentRRE<"palb", 0xB248>; 26203ab2e2bSUlrich Weigand 26303ab2e2bSUlrich Weigand// Program call. 26403ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 26503ab2e2bSUlrich Weigand def PC : SideEffectAddressS<"pc", 0xB218, null_frag>; 26603ab2e2bSUlrich Weigand 26703ab2e2bSUlrich Weigand// Program return. 26803ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 26903ab2e2bSUlrich Weigand def PR : SideEffectInherentE<"pr", 0x0101>; 27003ab2e2bSUlrich Weigand 27103ab2e2bSUlrich Weigand// Program transfer (with instance). 27203ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 27303ab2e2bSUlrich Weigand def PT : SideEffectBinaryRRE<"pt", 0xB228, GR32, GR64>; 27403ab2e2bSUlrich Weigand def PTI : SideEffectBinaryRRE<"pti", 0xB99E, GR64, GR64>; 27503ab2e2bSUlrich Weigand} 27603ab2e2bSUlrich Weigand 27703ab2e2bSUlrich Weigand// Resume program. 27803ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 27903ab2e2bSUlrich Weigand def RP : SideEffectAddressS<"rp", 0xB277, null_frag>; 28003ab2e2bSUlrich Weigand 28103ab2e2bSUlrich Weigand// Branch in subspace group. 28203ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 28303ab2e2bSUlrich Weigand def BSG : UnaryRRE<"bsg", 0xB258, null_frag, GR64, GR64>; 28403ab2e2bSUlrich Weigand 28503ab2e2bSUlrich Weigand// Branch and set authority. 28603ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 28703ab2e2bSUlrich Weigand def BSA : UnaryRRE<"bsa", 0xB25A, null_frag, GR64, GR64>; 28803ab2e2bSUlrich Weigand 28903ab2e2bSUlrich Weigand// Test access. 29003ab2e2bSUlrich Weigandlet Defs = [CC] in 29103ab2e2bSUlrich Weigand def TAR : SideEffectBinaryRRE<"tar", 0xB24C, AR32, GR32>; 29203ab2e2bSUlrich Weigand 29303ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 29403ab2e2bSUlrich Weigand// Linkage-Stack Instructions. 29503ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 29603ab2e2bSUlrich Weigand 29703ab2e2bSUlrich Weigand// Branch and stack. 29803ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 29903ab2e2bSUlrich Weigand def BAKR : SideEffectBinaryRRE<"bakr", 0xB240, GR64, GR64>; 30003ab2e2bSUlrich Weigand 30103ab2e2bSUlrich Weigand// Extract stacked registers. 30203ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 30303ab2e2bSUlrich Weigand def EREG : SideEffectBinaryRRE<"ereg", 0xB249, GR32, GR32>; 30403ab2e2bSUlrich Weigand def EREGG : SideEffectBinaryRRE<"eregg", 0xB90E, GR64, GR64>; 30503ab2e2bSUlrich Weigand} 30603ab2e2bSUlrich Weigand 30703ab2e2bSUlrich Weigand// Extract stacked state. 30803ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 30903ab2e2bSUlrich Weigand def ESTA : UnaryRRE<"esta", 0xB24A, null_frag, GR128, GR32>; 31003ab2e2bSUlrich Weigand 31103ab2e2bSUlrich Weigand// Modify stacked state. 31203ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 31303ab2e2bSUlrich Weigand def MSTA : SideEffectUnaryRRE<"msta", 0xB247, GR128, null_frag>; 31403ab2e2bSUlrich Weigand 31503ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 31603ab2e2bSUlrich Weigand// Time-Related Instructions. 31703ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 31803ab2e2bSUlrich Weigand 31903ab2e2bSUlrich Weigand// Perform timing facility function. 32003ab2e2bSUlrich Weigandlet hasSideEffects = 1, mayLoad = 1, Uses = [R0L, R1D], Defs = [CC] in 32103ab2e2bSUlrich Weigand def PTFF : SideEffectInherentE<"ptff", 0x0104>; 32203ab2e2bSUlrich Weigand 32303ab2e2bSUlrich Weigand// Set clock. 32403ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 32503ab2e2bSUlrich Weigand def SCK : SideEffectUnaryS<"sck", 0xB204, null_frag, 8>; 32603ab2e2bSUlrich Weigand 32703ab2e2bSUlrich Weigand// Set clock programmable field. 32803ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R0L] in 32903ab2e2bSUlrich Weigand def SCKPF : SideEffectInherentE<"sckpf", 0x0107>; 33003ab2e2bSUlrich Weigand 33103ab2e2bSUlrich Weigand// Set clock comparator. 33203ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 33303ab2e2bSUlrich Weigand def SCKC : SideEffectUnaryS<"sckc", 0xB206, null_frag, 8>; 33403ab2e2bSUlrich Weigand 33503ab2e2bSUlrich Weigand// Set CPU timer. 33603ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 33703ab2e2bSUlrich Weigand def SPT : SideEffectUnaryS<"spt", 0xB208, null_frag, 8>; 33803ab2e2bSUlrich Weigand 33903ab2e2bSUlrich Weigand// Store clock (fast / extended). 34003ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in { 34103ab2e2bSUlrich Weigand def STCK : StoreInherentS<"stck", 0xB205, null_frag, 8>; 34203ab2e2bSUlrich Weigand def STCKF : StoreInherentS<"stckf", 0xB27C, null_frag, 8>; 34303ab2e2bSUlrich Weigand def STCKE : StoreInherentS<"stcke", 0xB278, null_frag, 16>; 34403ab2e2bSUlrich Weigand} 34503ab2e2bSUlrich Weigand 34603ab2e2bSUlrich Weigand// Store clock comparator. 34703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 34803ab2e2bSUlrich Weigand def STCKC : StoreInherentS<"stckc", 0xB207, null_frag, 8>; 34903ab2e2bSUlrich Weigand 35003ab2e2bSUlrich Weigand// Store CPU timer. 35103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 35203ab2e2bSUlrich Weigand def STPT : StoreInherentS<"stpt", 0xB209, null_frag, 8>; 35303ab2e2bSUlrich Weigand 35403ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 35503ab2e2bSUlrich Weigand// CPU-Related Instructions. 35603ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 35703ab2e2bSUlrich Weigand 35803ab2e2bSUlrich Weigand// Store CPU address. 35903ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 36003ab2e2bSUlrich Weigand def STAP : StoreInherentS<"stap", 0xB212, null_frag, 2>; 36103ab2e2bSUlrich Weigand 36203ab2e2bSUlrich Weigand// Store CPU ID. 36303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 36403ab2e2bSUlrich Weigand def STIDP : StoreInherentS<"stidp", 0xB202, null_frag, 8>; 36503ab2e2bSUlrich Weigand 36603ab2e2bSUlrich Weigand// Store system information. 36703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R0L, R1L], Defs = [R0L, CC] in 36803ab2e2bSUlrich Weigand def STSI : StoreInherentS<"stsi", 0xB27D, null_frag, 0>; 36903ab2e2bSUlrich Weigand 37003ab2e2bSUlrich Weigand// Store facility list. 37103ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 37203ab2e2bSUlrich Weigand def STFL : StoreInherentS<"stfl", 0xB2B1, null_frag, 4>; 37303ab2e2bSUlrich Weigand 37403ab2e2bSUlrich Weigand// Store facility list extended. 37503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 37603ab2e2bSUlrich Weigand def STFLE : StoreInherentS<"stfle", 0xB2B0, null_frag, 0>; 37703ab2e2bSUlrich Weigand 37803ab2e2bSUlrich Weigand// Extract CPU attribute. 37903ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 38003ab2e2bSUlrich Weigand def ECAG : BinaryRSY<"ecag", 0xEB4C, null_frag, GR64>; 38103ab2e2bSUlrich Weigand 38203ab2e2bSUlrich Weigand// Extract CPU time. 38303ab2e2bSUlrich Weigandlet hasSideEffects = 1, mayLoad = 1, Defs = [R0D, R1D] in 38403ab2e2bSUlrich Weigand def ECTG : SideEffectTernarySSF<"ectg", 0xC81, GR64>; 38503ab2e2bSUlrich Weigand 38603ab2e2bSUlrich Weigand// Perform topology function. 38703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 38803ab2e2bSUlrich Weigand def PTF : UnaryTiedRRE<"ptf", 0xB9A2, GR64>; 38903ab2e2bSUlrich Weigand 39003ab2e2bSUlrich Weigand// Perform cryptographic key management operation. 39103ab2e2bSUlrich Weigandlet Predicates = [FeatureMessageSecurityAssist3], 39203ab2e2bSUlrich Weigand hasSideEffects = 1, Uses = [R0L, R1D] in 39303ab2e2bSUlrich Weigand def PCKMO : SideEffectInherentRRE<"pckmo", 0xB928>; 39403ab2e2bSUlrich Weigand 395*8cd8120aSUlrich Weigand// Query processor activity counter information. 396*8cd8120aSUlrich Weigandlet Predicates = [FeatureProcessorActivityInstrumentation], 397*8cd8120aSUlrich Weigand hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 398*8cd8120aSUlrich Weigand def QPACI : StoreInherentS<"qpaci", 0xB28F, null_frag, 0>; 399*8cd8120aSUlrich Weigand 40003ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 40103ab2e2bSUlrich Weigand// Miscellaneous Instructions. 40203ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 40303ab2e2bSUlrich Weigand 40403ab2e2bSUlrich Weigand// Supervisor call. 40503ab2e2bSUlrich Weigandlet hasSideEffects = 1, isCall = 1, Defs = [CC] in 40603ab2e2bSUlrich Weigand def SVC : SideEffectUnaryI<"svc", 0x0A, imm32zx8>; 40703ab2e2bSUlrich Weigand 40803ab2e2bSUlrich Weigand// Monitor call. 40903ab2e2bSUlrich Weigandlet hasSideEffects = 1, isCall = 1 in 41003ab2e2bSUlrich Weigand def MC : SideEffectBinarySI<"mc", 0xAF, imm32zx8>; 41103ab2e2bSUlrich Weigand 41203ab2e2bSUlrich Weigand// Diagnose. 41303ab2e2bSUlrich Weigandlet hasSideEffects = 1, isCall = 1 in 41403ab2e2bSUlrich Weigand def DIAG : SideEffectTernaryRS<"diag", 0x83, GR32, GR32>; 41503ab2e2bSUlrich Weigand 41603ab2e2bSUlrich Weigand// Trace. 41703ab2e2bSUlrich Weigandlet hasSideEffects = 1, mayLoad = 1 in { 41803ab2e2bSUlrich Weigand def TRACE : SideEffectTernaryRS<"trace", 0x99, GR32, GR32>; 41903ab2e2bSUlrich Weigand def TRACG : SideEffectTernaryRSY<"tracg", 0xEB0F, GR64, GR64>; 42003ab2e2bSUlrich Weigand} 42103ab2e2bSUlrich Weigand 42203ab2e2bSUlrich Weigand// Trap. 42303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in { 42403ab2e2bSUlrich Weigand def TRAP2 : SideEffectInherentE<"trap2", 0x01FF>; 42503ab2e2bSUlrich Weigand def TRAP4 : SideEffectAddressS<"trap4", 0xB2FF, null_frag>; 42603ab2e2bSUlrich Weigand} 42703ab2e2bSUlrich Weigand 42803ab2e2bSUlrich Weigand// Signal processor. 42903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 43003ab2e2bSUlrich Weigand def SIGP : SideEffectTernaryRS<"sigp", 0xAE, GR64, GR64>; 43103ab2e2bSUlrich Weigand 43203ab2e2bSUlrich Weigand// Signal adapter. 43303ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R0D, R1D, R2D, R3D], Defs = [CC] in 43403ab2e2bSUlrich Weigand def SIGA : SideEffectAddressS<"siga", 0xB274, null_frag>; 43503ab2e2bSUlrich Weigand 43603ab2e2bSUlrich Weigand// Start interpretive execution. 43703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 43803ab2e2bSUlrich Weigand def SIE : SideEffectUnaryS<"sie", 0xB214, null_frag, 0>; 43903ab2e2bSUlrich Weigand 44003ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 44103ab2e2bSUlrich Weigand// CPU-Measurement Facility Instructions (SA23-2260). 44203ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 44303ab2e2bSUlrich Weigand 44403ab2e2bSUlrich Weigand// Load program parameter 44503ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 44603ab2e2bSUlrich Weigand def LPP : SideEffectUnaryS<"lpp", 0xB280, null_frag, 8>; 44703ab2e2bSUlrich Weigand 44803ab2e2bSUlrich Weigand// Extract coprocessor-group address. 44903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 45003ab2e2bSUlrich Weigand def ECPGA : UnaryRRE<"ecpga", 0xB2ED, null_frag, GR32, GR64>; 45103ab2e2bSUlrich Weigand 45203ab2e2bSUlrich Weigand// Extract CPU counter. 45303ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 45403ab2e2bSUlrich Weigand def ECCTR : UnaryRRE<"ecctr", 0xB2E4, null_frag, GR64, GR64>; 45503ab2e2bSUlrich Weigand 45603ab2e2bSUlrich Weigand// Extract peripheral counter. 45703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 45803ab2e2bSUlrich Weigand def EPCTR : UnaryRRE<"epctr", 0xB2E5, null_frag, GR64, GR64>; 45903ab2e2bSUlrich Weigand 46003ab2e2bSUlrich Weigand// Load CPU-counter-set controls. 46103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 46203ab2e2bSUlrich Weigand def LCCTL : SideEffectUnaryS<"lcctl", 0xB284, null_frag, 8>; 46303ab2e2bSUlrich Weigand 46403ab2e2bSUlrich Weigand// Load peripheral-counter-set controls. 46503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 46603ab2e2bSUlrich Weigand def LPCTL : SideEffectUnaryS<"lpctl", 0xB285, null_frag, 8>; 46703ab2e2bSUlrich Weigand 46803ab2e2bSUlrich Weigand// Load sampling controls. 46903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 47003ab2e2bSUlrich Weigand def LSCTL : SideEffectUnaryS<"lsctl", 0xB287, null_frag, 0>; 47103ab2e2bSUlrich Weigand 47203ab2e2bSUlrich Weigand// Query sampling information. 47303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 47403ab2e2bSUlrich Weigand def QSI : StoreInherentS<"qsi", 0xB286, null_frag, 0>; 47503ab2e2bSUlrich Weigand 47603ab2e2bSUlrich Weigand// Query counter information. 47703ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 47803ab2e2bSUlrich Weigand def QCTRI : StoreInherentS<"qctri", 0xB28E, null_frag, 0>; 47903ab2e2bSUlrich Weigand 48003ab2e2bSUlrich Weigand// Set CPU counter. 48103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 48203ab2e2bSUlrich Weigand def SCCTR : SideEffectBinaryRRE<"scctr", 0xB2E0, GR64, GR64>; 48303ab2e2bSUlrich Weigand 48403ab2e2bSUlrich Weigand// Set peripheral counter. 48503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 48603ab2e2bSUlrich Weigand def SPCTR : SideEffectBinaryRRE<"spctr", 0xB2E1, GR64, GR64>; 48703ab2e2bSUlrich Weigand 48803ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 48903ab2e2bSUlrich Weigand// I/O Instructions (Principles of Operation, Chapter 14). 49003ab2e2bSUlrich Weigand//===----------------------------------------------------------------------===// 49103ab2e2bSUlrich Weigand 49203ab2e2bSUlrich Weigand// Clear subchannel. 49303ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 49403ab2e2bSUlrich Weigand def CSCH : SideEffectInherentS<"csch", 0xB230, null_frag>; 49503ab2e2bSUlrich Weigand 49603ab2e2bSUlrich Weigand// Halt subchannel. 49703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 49803ab2e2bSUlrich Weigand def HSCH : SideEffectInherentS<"hsch", 0xB231, null_frag>; 49903ab2e2bSUlrich Weigand 50003ab2e2bSUlrich Weigand// Modify subchannel. 50103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 50203ab2e2bSUlrich Weigand def MSCH : SideEffectUnaryS<"msch", 0xB232, null_frag, 0>; 50303ab2e2bSUlrich Weigand 50403ab2e2bSUlrich Weigand// Resume subchannel. 50503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 50603ab2e2bSUlrich Weigand def RSCH : SideEffectInherentS<"rsch", 0xB238, null_frag>; 50703ab2e2bSUlrich Weigand 50803ab2e2bSUlrich Weigand// Start subchannel. 50903ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 51003ab2e2bSUlrich Weigand def SSCH : SideEffectUnaryS<"ssch", 0xB233, null_frag, 0>; 51103ab2e2bSUlrich Weigand 51203ab2e2bSUlrich Weigand// Store subchannel. 51303ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 51403ab2e2bSUlrich Weigand def STSCH : StoreInherentS<"stsch", 0xB234, null_frag, 0>; 51503ab2e2bSUlrich Weigand 51603ab2e2bSUlrich Weigand// Test subchannel. 51703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 51803ab2e2bSUlrich Weigand def TSCH : StoreInherentS<"tsch", 0xB235, null_frag, 0>; 51903ab2e2bSUlrich Weigand 52003ab2e2bSUlrich Weigand// Cancel subchannel. 52103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 52203ab2e2bSUlrich Weigand def XSCH : SideEffectInherentS<"xsch", 0xB276, null_frag>; 52303ab2e2bSUlrich Weigand 52403ab2e2bSUlrich Weigand// Reset channel path. 52503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 52603ab2e2bSUlrich Weigand def RCHP : SideEffectInherentS<"rchp", 0xB23B, null_frag>; 52703ab2e2bSUlrich Weigand 52803ab2e2bSUlrich Weigand// Set channel monitor. 52903ab2e2bSUlrich Weigandlet hasSideEffects = 1, mayLoad = 1, Uses = [R1L, R2D] in 53003ab2e2bSUlrich Weigand def SCHM : SideEffectInherentS<"schm", 0xB23C, null_frag>; 53103ab2e2bSUlrich Weigand 53203ab2e2bSUlrich Weigand// Store channel path status. 53303ab2e2bSUlrich Weigandlet hasSideEffects = 1 in 53403ab2e2bSUlrich Weigand def STCPS : StoreInherentS<"stcps", 0xB23A, null_frag, 0>; 53503ab2e2bSUlrich Weigand 53603ab2e2bSUlrich Weigand// Store channel report word. 53703ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 53803ab2e2bSUlrich Weigand def STCRW : StoreInherentS<"stcrw", 0xB239, null_frag, 0>; 53903ab2e2bSUlrich Weigand 54003ab2e2bSUlrich Weigand// Test pending interruption. 54103ab2e2bSUlrich Weigandlet hasSideEffects = 1, Defs = [CC] in 54203ab2e2bSUlrich Weigand def TPI : StoreInherentS<"tpi", 0xB236, null_frag, 0>; 54303ab2e2bSUlrich Weigand 54403ab2e2bSUlrich Weigand// Set address limit. 54503ab2e2bSUlrich Weigandlet hasSideEffects = 1, Uses = [R1L] in 54603ab2e2bSUlrich Weigand def SAL : SideEffectInherentS<"sal", 0xB237, null_frag>; 54703ab2e2bSUlrich Weigand 548