1a580b014SDimitry Andric//==- SystemZInstrSystem.td - SystemZ system instructions -*- tblgen-*-----==// 2a580b014SDimitry Andric// 3a580b014SDimitry Andric// The LLVM Compiler Infrastructure 4a580b014SDimitry Andric// 5a580b014SDimitry Andric// This file is distributed under the University of Illinois Open Source 6a580b014SDimitry Andric// License. See LICENSE.TXT for details. 7a580b014SDimitry Andric// 8a580b014SDimitry Andric//===----------------------------------------------------------------------===// 9a580b014SDimitry Andric// 10a580b014SDimitry Andric// The instructions in this file implement SystemZ system-level instructions. 11a580b014SDimitry Andric// Most of these instructions are privileged or semi-privileged. They are 12a580b014SDimitry Andric// not used for code generation, but are provided for use with the assembler 13a580b014SDimitry Andric// and disassembler only. 14a580b014SDimitry Andric// 15a580b014SDimitry Andric//===----------------------------------------------------------------------===// 16a580b014SDimitry Andric 17a580b014SDimitry Andric//===----------------------------------------------------------------------===// 18a580b014SDimitry Andric// Program-Status Word Instructions. 19a580b014SDimitry Andric//===----------------------------------------------------------------------===// 20a580b014SDimitry Andric 21a580b014SDimitry Andric// Extract PSW. 22a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [CC] in 23a580b014SDimitry Andric def EPSW : InherentDualRRE<"epsw", 0xB98D, GR32>; 24a580b014SDimitry Andric 25a580b014SDimitry Andric// Load PSW (extended). 26*2cab237bSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 27a580b014SDimitry Andric def LPSW : SideEffectUnaryS<"lpsw", 0x8200, null_frag, 8>; 28a580b014SDimitry Andric def LPSWE : SideEffectUnaryS<"lpswe", 0xB2B2, null_frag, 16>; 29a580b014SDimitry Andric} 30a580b014SDimitry Andric 31a580b014SDimitry Andric// Insert PSW key. 32a580b014SDimitry Andriclet Uses = [R2L], Defs = [R2L] in 33a580b014SDimitry Andric def IPK : SideEffectInherentS<"ipk", 0xB20B, null_frag>; 34a580b014SDimitry Andric 35a580b014SDimitry Andric// Set PSW key from address. 36a580b014SDimitry Andriclet hasSideEffects = 1 in 37a580b014SDimitry Andric def SPKA : SideEffectAddressS<"spka", 0xB20A, null_frag>; 38a580b014SDimitry Andric 39a580b014SDimitry Andric// Set system mask. 40*2cab237bSDimitry Andriclet hasSideEffects = 1 in 41a580b014SDimitry Andric def SSM : SideEffectUnaryS<"ssm", 0x8000, null_frag, 1>; 42a580b014SDimitry Andric 43a580b014SDimitry Andric// Store then AND/OR system mask. 44a580b014SDimitry Andriclet hasSideEffects = 1 in { 45a580b014SDimitry Andric def STNSM : StoreSI<"stnsm", 0xAC, null_frag, imm32zx8>; 46a580b014SDimitry Andric def STOSM : StoreSI<"stosm", 0xAD, null_frag, imm32zx8>; 47a580b014SDimitry Andric} 48a580b014SDimitry Andric 49a580b014SDimitry Andric// Insert address space control. 50a580b014SDimitry Andriclet hasSideEffects = 1 in 51a580b014SDimitry Andric def IAC : InherentRRE<"iac", 0xB224, GR32, null_frag>; 52a580b014SDimitry Andric 53a580b014SDimitry Andric// Set address space control (fast). 54a580b014SDimitry Andriclet hasSideEffects = 1 in { 55a580b014SDimitry Andric def SAC : SideEffectAddressS<"sac", 0xB219, null_frag>; 56a580b014SDimitry Andric def SACF : SideEffectAddressS<"sacf", 0xB279, null_frag>; 57a580b014SDimitry Andric} 58a580b014SDimitry Andric 59a580b014SDimitry Andric//===----------------------------------------------------------------------===// 60a580b014SDimitry Andric// Control Register Instructions. 61a580b014SDimitry Andric//===----------------------------------------------------------------------===// 62a580b014SDimitry Andric 63*2cab237bSDimitry Andriclet hasSideEffects = 1 in { 64a580b014SDimitry Andric // Load control. 65a580b014SDimitry Andric def LCTL : LoadMultipleRS<"lctl", 0xB7, CR64>; 66a580b014SDimitry Andric def LCTLG : LoadMultipleRSY<"lctlg", 0xEB2F, CR64>; 67a580b014SDimitry Andric 68a580b014SDimitry Andric // Store control. 69a580b014SDimitry Andric def STCTL : StoreMultipleRS<"stctl", 0xB6, CR64>; 70a580b014SDimitry Andric def STCTG : StoreMultipleRSY<"stctg", 0xEB25, CR64>; 71*2cab237bSDimitry Andric} 72a580b014SDimitry Andric 73a580b014SDimitry Andric// Extract primary ASN (and instance). 74a580b014SDimitry Andriclet hasSideEffects = 1 in { 75a580b014SDimitry Andric def EPAR : InherentRRE<"epar", 0xB226, GR32, null_frag>; 76a580b014SDimitry Andric def EPAIR : InherentRRE<"epair", 0xB99A, GR64, null_frag>; 77a580b014SDimitry Andric} 78a580b014SDimitry Andric 79a580b014SDimitry Andric// Extract secondary ASN (and instance). 80a580b014SDimitry Andriclet hasSideEffects = 1 in { 81a580b014SDimitry Andric def ESAR : InherentRRE<"esar", 0xB227, GR32, null_frag>; 82a580b014SDimitry Andric def ESAIR : InherentRRE<"esair", 0xB99B, GR64, null_frag>; 83a580b014SDimitry Andric} 84a580b014SDimitry Andric 85a580b014SDimitry Andric// Set secondary ASN (and instance). 86a580b014SDimitry Andriclet hasSideEffects = 1 in { 87a580b014SDimitry Andric def SSAR : SideEffectUnaryRRE<"ssar", 0xB225, GR32, null_frag>; 88a580b014SDimitry Andric def SSAIR : SideEffectUnaryRRE<"ssair", 0xB99F, GR64, null_frag>; 89a580b014SDimitry Andric} 90a580b014SDimitry Andric 91a580b014SDimitry Andric// Extract and set extended authority. 92a580b014SDimitry Andriclet hasSideEffects = 1 in 93a580b014SDimitry Andric def ESEA : UnaryTiedRRE<"esea", 0xB99D, GR32>; 94a580b014SDimitry Andric 95a580b014SDimitry Andric//===----------------------------------------------------------------------===// 96a580b014SDimitry Andric// Prefix-Register Instructions. 97a580b014SDimitry Andric//===----------------------------------------------------------------------===// 98a580b014SDimitry Andric 99a580b014SDimitry Andric// Set prefix. 100a580b014SDimitry Andriclet hasSideEffects = 1 in 101a580b014SDimitry Andric def SPX : SideEffectUnaryS<"spx", 0xB210, null_frag, 4>; 102a580b014SDimitry Andric 103a580b014SDimitry Andric// Store prefix. 104a580b014SDimitry Andriclet hasSideEffects = 1 in 105a580b014SDimitry Andric def STPX : StoreInherentS<"stpx", 0xB211, null_frag, 4>; 106a580b014SDimitry Andric 107a580b014SDimitry Andric//===----------------------------------------------------------------------===// 108a580b014SDimitry Andric// Storage-Key and Real Memory Instructions. 109a580b014SDimitry Andric//===----------------------------------------------------------------------===// 110a580b014SDimitry Andric 111a580b014SDimitry Andric// Insert storage key extended. 112a580b014SDimitry Andriclet hasSideEffects = 1 in 113a580b014SDimitry Andric def ISKE : BinaryRRE<"iske", 0xB229, null_frag, GR32, GR64>; 114a580b014SDimitry Andric 115a580b014SDimitry Andric// Insert virtual storage key. 116a580b014SDimitry Andriclet hasSideEffects = 1 in 117a580b014SDimitry Andric def IVSK : BinaryRRE<"ivsk", 0xB223, null_frag, GR32, GR64>; 118a580b014SDimitry Andric 119a580b014SDimitry Andric// Set storage key extended. 120a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 121a580b014SDimitry Andric defm SSKE : SideEffectTernaryRRFcOpt<"sske", 0xB22B, GR32, GR64>; 122a580b014SDimitry Andric 123a580b014SDimitry Andric// Reset reference bit extended. 124a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 125a580b014SDimitry Andric def RRBE : SideEffectBinaryRRE<"rrbe", 0xB22A, GR32, GR64>; 126a580b014SDimitry Andric 127a580b014SDimitry Andric// Reset reference bits multiple. 128a580b014SDimitry Andriclet Predicates = [FeatureResetReferenceBitsMultiple], hasSideEffects = 1 in 129a580b014SDimitry Andric def RRBM : UnaryRRE<"rrbm", 0xB9AE, null_frag, GR64, GR64>; 130a580b014SDimitry Andric 131b40b48b8SDimitry Andric// Insert reference bits multiple. 132b40b48b8SDimitry Andriclet Predicates = [FeatureInsertReferenceBitsMultiple], hasSideEffects = 1 in 133b40b48b8SDimitry Andric def IRBM : UnaryRRE<"irbm", 0xB9AC, null_frag, GR64, GR64>; 134b40b48b8SDimitry Andric 135a580b014SDimitry Andric// Perform frame management function. 136a580b014SDimitry Andriclet hasSideEffects = 1 in 137a580b014SDimitry Andric def PFMF : SideEffectBinaryMemRRE<"pfmf", 0xB9AF, GR32, GR64>; 138a580b014SDimitry Andric 139a580b014SDimitry Andric// Test block. 140a580b014SDimitry Andriclet hasSideEffects = 1, mayStore = 1, Uses = [R0D], Defs = [R0D, CC] in 141a580b014SDimitry Andric def TB : SideEffectBinaryRRE<"tb", 0xB22C, GR64, GR64>; 142a580b014SDimitry Andric 143a580b014SDimitry Andric// Page in / out. 144a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 145a580b014SDimitry Andric def PGIN : SideEffectBinaryRRE<"pgin", 0xB22E, GR64, GR64>; 146a580b014SDimitry Andric def PGOUT : SideEffectBinaryRRE<"pgout", 0xB22F, GR64, GR64>; 147a580b014SDimitry Andric} 148a580b014SDimitry Andric 149a580b014SDimitry Andric//===----------------------------------------------------------------------===// 150a580b014SDimitry Andric// Dynamic-Address-Translation Instructions. 151a580b014SDimitry Andric//===----------------------------------------------------------------------===// 152a580b014SDimitry Andric 153a580b014SDimitry Andric// Invalidate page table entry. 154a580b014SDimitry Andriclet hasSideEffects = 1 in 155a580b014SDimitry Andric defm IPTE : SideEffectQuaternaryRRFaOptOpt<"ipte", 0xB221, GR64, GR32, GR32>; 156a580b014SDimitry Andric 157a580b014SDimitry Andric// Invalidate DAT table entry. 158a580b014SDimitry Andriclet hasSideEffects = 1 in 159a580b014SDimitry Andric defm IDTE : SideEffectQuaternaryRRFbOpt<"idte", 0xB98E, GR64, GR64, GR64>; 160a580b014SDimitry Andric 161a580b014SDimitry Andric// Compare and replace DAT table entry. 162a580b014SDimitry Andriclet Predicates = [FeatureEnhancedDAT2], hasSideEffects = 1, Defs = [CC] in 163a580b014SDimitry Andric defm CRDTE : SideEffectQuaternaryRRFbOpt<"crdte", 0xB98F, GR128, GR128, GR64>; 164a580b014SDimitry Andric 165a580b014SDimitry Andric// Purge TLB. 166a580b014SDimitry Andriclet hasSideEffects = 1 in 167a580b014SDimitry Andric def PTLB : SideEffectInherentS<"ptlb", 0xB20D, null_frag>; 168a580b014SDimitry Andric 169a580b014SDimitry Andric// Compare and swap and purge. 170a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 171a580b014SDimitry Andric def CSP : CmpSwapRRE<"csp", 0xB250, GR128, GR64>; 172a580b014SDimitry Andric def CSPG : CmpSwapRRE<"cspg", 0xB98A, GR128, GR64>; 173a580b014SDimitry Andric} 174a580b014SDimitry Andric 175a580b014SDimitry Andric// Load page-table-entry address. 176a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 177a580b014SDimitry Andric def LPTEA : TernaryRRFb<"lptea", 0xB9AA, GR64, GR64, GR64>; 178a580b014SDimitry Andric 179a580b014SDimitry Andric// Load real address. 180a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 181a580b014SDimitry Andric defm LRA : LoadAddressRXPair<"lra", 0xB1, 0xE313, null_frag>; 182a580b014SDimitry Andric def LRAG : LoadAddressRXY<"lrag", 0xE303, null_frag, laaddr20pair>; 183a580b014SDimitry Andric} 184a580b014SDimitry Andric 185a580b014SDimitry Andric// Store real address. 186a580b014SDimitry Andricdef STRAG : StoreSSE<"strag", 0xE502>; 187a580b014SDimitry Andric 188a580b014SDimitry Andric// Load using real address. 189a580b014SDimitry Andriclet mayLoad = 1 in { 190a580b014SDimitry Andric def LURA : UnaryRRE<"lura", 0xB24B, null_frag, GR32, GR64>; 191a580b014SDimitry Andric def LURAG : UnaryRRE<"lurag", 0xB905, null_frag, GR64, GR64>; 192a580b014SDimitry Andric} 193a580b014SDimitry Andric 194a580b014SDimitry Andric// Store using real address. 195a580b014SDimitry Andriclet mayStore = 1 in { 196a580b014SDimitry Andric def STURA : SideEffectBinaryRRE<"stura", 0xB246, GR32, GR64>; 197a580b014SDimitry Andric def STURG : SideEffectBinaryRRE<"sturg", 0xB925, GR64, GR64>; 198a580b014SDimitry Andric} 199a580b014SDimitry Andric 200a580b014SDimitry Andric// Test protection. 201a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 202a580b014SDimitry Andric def TPROT : SideEffectBinarySSE<"tprot", 0xE501>; 203a580b014SDimitry Andric 204a580b014SDimitry Andric//===----------------------------------------------------------------------===// 205a580b014SDimitry Andric// Memory-move Instructions. 206a580b014SDimitry Andric//===----------------------------------------------------------------------===// 207a580b014SDimitry Andric 208a580b014SDimitry Andric// Move with key. 209a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in 210a580b014SDimitry Andric def MVCK : MemoryBinarySSd<"mvck", 0xD9, GR64>; 211a580b014SDimitry Andric 212a580b014SDimitry Andric// Move to primary / secondary. 213a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 214a580b014SDimitry Andric def MVCP : MemoryBinarySSd<"mvcp", 0xDA, GR64>; 215a580b014SDimitry Andric def MVCS : MemoryBinarySSd<"mvcs", 0xDB, GR64>; 216a580b014SDimitry Andric} 217a580b014SDimitry Andric 218a580b014SDimitry Andric// Move with source / destination key. 219a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L, R1L] in { 220a580b014SDimitry Andric def MVCSK : SideEffectBinarySSE<"mvcsk", 0xE50E>; 221a580b014SDimitry Andric def MVCDK : SideEffectBinarySSE<"mvcdk", 0xE50F>; 222a580b014SDimitry Andric} 223a580b014SDimitry Andric 224a580b014SDimitry Andric// Move with optional specifications. 225a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L] in 226a580b014SDimitry Andric def MVCOS : SideEffectTernarySSF<"mvcos", 0xC80, GR64>; 227a580b014SDimitry Andric 228a580b014SDimitry Andric// Move page. 229a580b014SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L], Defs = [CC] in 230a580b014SDimitry Andric def MVPG : SideEffectBinaryRRE<"mvpg", 0xB254, GR64, GR64>; 231a580b014SDimitry Andric 232a580b014SDimitry Andric//===----------------------------------------------------------------------===// 233a580b014SDimitry Andric// Address-Space Instructions. 234a580b014SDimitry Andric//===----------------------------------------------------------------------===// 235a580b014SDimitry Andric 236a580b014SDimitry Andric// Load address space parameters. 237a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 238a580b014SDimitry Andric def LASP : SideEffectBinarySSE<"lasp", 0xE500>; 239a580b014SDimitry Andric 240a580b014SDimitry Andric// Purge ALB. 241a580b014SDimitry Andriclet hasSideEffects = 1 in 242a580b014SDimitry Andric def PALB : SideEffectInherentRRE<"palb", 0xB248>; 243a580b014SDimitry Andric 244a580b014SDimitry Andric// Program call. 245a580b014SDimitry Andriclet hasSideEffects = 1 in 246a580b014SDimitry Andric def PC : SideEffectAddressS<"pc", 0xB218, null_frag>; 247a580b014SDimitry Andric 248a580b014SDimitry Andric// Program return. 249a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 250a580b014SDimitry Andric def PR : SideEffectInherentE<"pr", 0x0101>; 251a580b014SDimitry Andric 252a580b014SDimitry Andric// Program transfer (with instance). 253a580b014SDimitry Andriclet hasSideEffects = 1 in { 254a580b014SDimitry Andric def PT : SideEffectBinaryRRE<"pt", 0xB228, GR32, GR64>; 255a580b014SDimitry Andric def PTI : SideEffectBinaryRRE<"pti", 0xB99E, GR64, GR64>; 256a580b014SDimitry Andric} 257a580b014SDimitry Andric 258a580b014SDimitry Andric// Resume program. 259a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 260a580b014SDimitry Andric def RP : SideEffectAddressS<"rp", 0xB277, null_frag>; 261a580b014SDimitry Andric 262a580b014SDimitry Andric// Branch in subspace group. 263a580b014SDimitry Andriclet hasSideEffects = 1 in 264a580b014SDimitry Andric def BSG : UnaryRRE<"bsg", 0xB258, null_frag, GR64, GR64>; 265a580b014SDimitry Andric 266a580b014SDimitry Andric// Branch and set authority. 267a580b014SDimitry Andriclet hasSideEffects = 1 in 268a580b014SDimitry Andric def BSA : UnaryRRE<"bsa", 0xB25A, null_frag, GR64, GR64>; 269a580b014SDimitry Andric 270a580b014SDimitry Andric// Test access. 271a580b014SDimitry Andriclet Defs = [CC] in 272a580b014SDimitry Andric def TAR : SideEffectBinaryRRE<"tar", 0xB24C, AR32, GR32>; 273a580b014SDimitry Andric 274a580b014SDimitry Andric//===----------------------------------------------------------------------===// 275a580b014SDimitry Andric// Linkage-Stack Instructions. 276a580b014SDimitry Andric//===----------------------------------------------------------------------===// 277a580b014SDimitry Andric 278a580b014SDimitry Andric// Branch and stack. 279a580b014SDimitry Andriclet hasSideEffects = 1 in 280a580b014SDimitry Andric def BAKR : SideEffectBinaryRRE<"bakr", 0xB240, GR64, GR64>; 281a580b014SDimitry Andric 282a580b014SDimitry Andric// Extract stacked registers. 283a580b014SDimitry Andriclet hasSideEffects = 1 in { 284a580b014SDimitry Andric def EREG : SideEffectBinaryRRE<"ereg", 0xB249, GR32, GR32>; 285a580b014SDimitry Andric def EREGG : SideEffectBinaryRRE<"eregg", 0xB90E, GR64, GR64>; 286a580b014SDimitry Andric} 287a580b014SDimitry Andric 288a580b014SDimitry Andric// Extract stacked state. 289a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 290a580b014SDimitry Andric def ESTA : UnaryRRE<"esta", 0xB24A, null_frag, GR128, GR32>; 291a580b014SDimitry Andric 292a580b014SDimitry Andric// Modify stacked state. 293a580b014SDimitry Andriclet hasSideEffects = 1 in 294a580b014SDimitry Andric def MSTA : SideEffectUnaryRRE<"msta", 0xB247, GR128, null_frag>; 295a580b014SDimitry Andric 296a580b014SDimitry Andric//===----------------------------------------------------------------------===// 297a580b014SDimitry Andric// Time-Related Instructions. 298a580b014SDimitry Andric//===----------------------------------------------------------------------===// 299a580b014SDimitry Andric 300a580b014SDimitry Andric// Perform timing facility function. 301a580b014SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R0L, R1D], Defs = [CC] in 302a580b014SDimitry Andric def PTFF : SideEffectInherentE<"ptff", 0x0104>; 303a580b014SDimitry Andric 304a580b014SDimitry Andric// Set clock. 305a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 306a580b014SDimitry Andric def SCK : SideEffectUnaryS<"sck", 0xB204, null_frag, 8>; 307a580b014SDimitry Andric 308a580b014SDimitry Andric// Set clock programmable field. 309a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R0L] in 310a580b014SDimitry Andric def SCKPF : SideEffectInherentE<"sckpf", 0x0107>; 311a580b014SDimitry Andric 312a580b014SDimitry Andric// Set clock comparator. 313a580b014SDimitry Andriclet hasSideEffects = 1 in 314a580b014SDimitry Andric def SCKC : SideEffectUnaryS<"sckc", 0xB206, null_frag, 8>; 315a580b014SDimitry Andric 316a580b014SDimitry Andric// Set CPU timer. 317a580b014SDimitry Andriclet hasSideEffects = 1 in 318a580b014SDimitry Andric def SPT : SideEffectUnaryS<"spt", 0xB208, null_frag, 8>; 319a580b014SDimitry Andric 320a580b014SDimitry Andric// Store clock (fast / extended). 321a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 322a580b014SDimitry Andric def STCK : StoreInherentS<"stck", 0xB205, null_frag, 8>; 323a580b014SDimitry Andric def STCKF : StoreInherentS<"stckf", 0xB27C, null_frag, 8>; 324a580b014SDimitry Andric def STCKE : StoreInherentS<"stcke", 0xB278, null_frag, 16>; 325a580b014SDimitry Andric} 326a580b014SDimitry Andric 327a580b014SDimitry Andric// Store clock comparator. 328a580b014SDimitry Andriclet hasSideEffects = 1 in 329a580b014SDimitry Andric def STCKC : StoreInherentS<"stckc", 0xB207, null_frag, 8>; 330a580b014SDimitry Andric 331a580b014SDimitry Andric// Store CPU timer. 332a580b014SDimitry Andriclet hasSideEffects = 1 in 333a580b014SDimitry Andric def STPT : StoreInherentS<"stpt", 0xB209, null_frag, 8>; 334a580b014SDimitry Andric 335a580b014SDimitry Andric//===----------------------------------------------------------------------===// 336a580b014SDimitry Andric// CPU-Related Instructions. 337a580b014SDimitry Andric//===----------------------------------------------------------------------===// 338a580b014SDimitry Andric 339a580b014SDimitry Andric// Store CPU address. 340a580b014SDimitry Andriclet hasSideEffects = 1 in 341a580b014SDimitry Andric def STAP : StoreInherentS<"stap", 0xB212, null_frag, 2>; 342a580b014SDimitry Andric 343a580b014SDimitry Andric// Store CPU ID. 344a580b014SDimitry Andriclet hasSideEffects = 1 in 345a580b014SDimitry Andric def STIDP : StoreInherentS<"stidp", 0xB202, null_frag, 8>; 346a580b014SDimitry Andric 347a580b014SDimitry Andric// Store system information. 348a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R0L, R1L], Defs = [R0L, CC] in 349a580b014SDimitry Andric def STSI : StoreInherentS<"stsi", 0xB27D, null_frag, 0>; 350a580b014SDimitry Andric 351a580b014SDimitry Andric// Store facility list. 352a580b014SDimitry Andriclet hasSideEffects = 1 in 353a580b014SDimitry Andric def STFL : StoreInherentS<"stfl", 0xB2B1, null_frag, 4>; 354a580b014SDimitry Andric 355a580b014SDimitry Andric// Store facility list extended. 356a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 357a580b014SDimitry Andric def STFLE : StoreInherentS<"stfle", 0xB2B0, null_frag, 0>; 358a580b014SDimitry Andric 359a580b014SDimitry Andric// Extract CPU attribute. 360a580b014SDimitry Andriclet hasSideEffects = 1 in 361a580b014SDimitry Andric def ECAG : BinaryRSY<"ecag", 0xEB4C, null_frag, GR64>; 362a580b014SDimitry Andric 363a580b014SDimitry Andric// Extract CPU time. 364a580b014SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Defs = [R0D, R1D] in 365a580b014SDimitry Andric def ECTG : SideEffectTernarySSF<"ectg", 0xC81, GR64>; 366a580b014SDimitry Andric 367a580b014SDimitry Andric// Perform topology function. 368a580b014SDimitry Andriclet hasSideEffects = 1 in 369a580b014SDimitry Andric def PTF : UnaryTiedRRE<"ptf", 0xB9A2, GR64>; 370a580b014SDimitry Andric 371a580b014SDimitry Andric// Perform cryptographic key management operation. 372a580b014SDimitry Andriclet Predicates = [FeatureMessageSecurityAssist3], 373a580b014SDimitry Andric hasSideEffects = 1, Uses = [R0L, R1D] in 374a580b014SDimitry Andric def PCKMO : SideEffectInherentRRE<"pckmo", 0xB928>; 375a580b014SDimitry Andric 376a580b014SDimitry Andric//===----------------------------------------------------------------------===// 377a580b014SDimitry Andric// Miscellaneous Instructions. 378a580b014SDimitry Andric//===----------------------------------------------------------------------===// 379a580b014SDimitry Andric 380a580b014SDimitry Andric// Supervisor call. 381a580b014SDimitry Andriclet hasSideEffects = 1, isCall = 1, Defs = [CC] in 382a580b014SDimitry Andric def SVC : SideEffectUnaryI<"svc", 0x0A, imm32zx8>; 383a580b014SDimitry Andric 384a580b014SDimitry Andric// Monitor call. 385a580b014SDimitry Andriclet hasSideEffects = 1, isCall = 1 in 386a580b014SDimitry Andric def MC : SideEffectBinarySI<"mc", 0xAF, imm32zx8>; 387a580b014SDimitry Andric 388a580b014SDimitry Andric// Diagnose. 389a580b014SDimitry Andriclet hasSideEffects = 1, isCall = 1 in 390a580b014SDimitry Andric def DIAG : SideEffectTernaryRS<"diag", 0x83, GR32, GR32>; 391a580b014SDimitry Andric 392a580b014SDimitry Andric// Trace. 393a580b014SDimitry Andriclet hasSideEffects = 1, mayLoad = 1 in { 394a580b014SDimitry Andric def TRACE : SideEffectTernaryRS<"trace", 0x99, GR32, GR32>; 395a580b014SDimitry Andric def TRACG : SideEffectTernaryRSY<"tracg", 0xEB0F, GR64, GR64>; 396a580b014SDimitry Andric} 397a580b014SDimitry Andric 398a580b014SDimitry Andric// Trap. 399a580b014SDimitry Andriclet hasSideEffects = 1 in { 400a580b014SDimitry Andric def TRAP2 : SideEffectInherentE<"trap2", 0x01FF>; 401a580b014SDimitry Andric def TRAP4 : SideEffectAddressS<"trap4", 0xB2FF, null_frag>; 402a580b014SDimitry Andric} 403a580b014SDimitry Andric 404a580b014SDimitry Andric// Signal processor. 405a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 406a580b014SDimitry Andric def SIGP : SideEffectTernaryRS<"sigp", 0xAE, GR64, GR64>; 407a580b014SDimitry Andric 408a580b014SDimitry Andric// Signal adapter. 409a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R0D, R1D, R2D, R3D], Defs = [CC] in 410a580b014SDimitry Andric def SIGA : SideEffectAddressS<"siga", 0xB274, null_frag>; 411a580b014SDimitry Andric 412a580b014SDimitry Andric// Start interpretive execution. 413a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 414a580b014SDimitry Andric def SIE : SideEffectUnaryS<"sie", 0xB214, null_frag, 0>; 415a580b014SDimitry Andric 416a580b014SDimitry Andric//===----------------------------------------------------------------------===// 417a580b014SDimitry Andric// CPU-Measurement Facility Instructions (SA23-2260). 418a580b014SDimitry Andric//===----------------------------------------------------------------------===// 419a580b014SDimitry Andric 420a580b014SDimitry Andric// Load program parameter 421a580b014SDimitry Andriclet hasSideEffects = 1 in 422a580b014SDimitry Andric def LPP : SideEffectUnaryS<"lpp", 0xB280, null_frag, 8>; 423a580b014SDimitry Andric 424a580b014SDimitry Andric// Extract coprocessor-group address. 425a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 426a580b014SDimitry Andric def ECPGA : UnaryRRE<"ecpga", 0xB2ED, null_frag, GR32, GR64>; 427a580b014SDimitry Andric 428a580b014SDimitry Andric// Extract CPU counter. 429a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 430a580b014SDimitry Andric def ECCTR : UnaryRRE<"ecctr", 0xB2E4, null_frag, GR64, GR64>; 431a580b014SDimitry Andric 432a580b014SDimitry Andric// Extract peripheral counter. 433a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 434a580b014SDimitry Andric def EPCTR : UnaryRRE<"epctr", 0xB2E5, null_frag, GR64, GR64>; 435a580b014SDimitry Andric 436a580b014SDimitry Andric// Load CPU-counter-set controls. 437a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 438a580b014SDimitry Andric def LCCTL : SideEffectUnaryS<"lcctl", 0xB284, null_frag, 8>; 439a580b014SDimitry Andric 440a580b014SDimitry Andric// Load peripheral-counter-set controls. 441a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 442a580b014SDimitry Andric def LPCTL : SideEffectUnaryS<"lpctl", 0xB285, null_frag, 8>; 443a580b014SDimitry Andric 444a580b014SDimitry Andric// Load sampling controls. 445a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 446a580b014SDimitry Andric def LSCTL : SideEffectUnaryS<"lsctl", 0xB287, null_frag, 0>; 447a580b014SDimitry Andric 448a580b014SDimitry Andric// Query sampling information. 449a580b014SDimitry Andriclet hasSideEffects = 1 in 450a580b014SDimitry Andric def QSI : StoreInherentS<"qsi", 0xB286, null_frag, 0>; 451a580b014SDimitry Andric 452a580b014SDimitry Andric// Query counter information. 453a580b014SDimitry Andriclet hasSideEffects = 1 in 454a580b014SDimitry Andric def QCTRI : StoreInherentS<"qctri", 0xB28E, null_frag, 0>; 455a580b014SDimitry Andric 456a580b014SDimitry Andric// Set CPU counter. 457a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 458a580b014SDimitry Andric def SCCTR : SideEffectBinaryRRE<"scctr", 0xB2E0, GR64, GR64>; 459a580b014SDimitry Andric 460a580b014SDimitry Andric// Set peripheral counter. 461a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 462a580b014SDimitry Andric def SPCTR : SideEffectBinaryRRE<"spctr", 0xB2E1, GR64, GR64>; 463a580b014SDimitry Andric 464a580b014SDimitry Andric//===----------------------------------------------------------------------===// 465a580b014SDimitry Andric// I/O Instructions (Principles of Operation, Chapter 14). 466a580b014SDimitry Andric//===----------------------------------------------------------------------===// 467a580b014SDimitry Andric 468a580b014SDimitry Andric// Clear subchannel. 469a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 470a580b014SDimitry Andric def CSCH : SideEffectInherentS<"csch", 0xB230, null_frag>; 471a580b014SDimitry Andric 472a580b014SDimitry Andric// Halt subchannel. 473a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 474a580b014SDimitry Andric def HSCH : SideEffectInherentS<"hsch", 0xB231, null_frag>; 475a580b014SDimitry Andric 476a580b014SDimitry Andric// Modify subchannel. 477a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 478a580b014SDimitry Andric def MSCH : SideEffectUnaryS<"msch", 0xB232, null_frag, 0>; 479a580b014SDimitry Andric 480a580b014SDimitry Andric// Resume subchannel. 481a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 482a580b014SDimitry Andric def RSCH : SideEffectInherentS<"rsch", 0xB238, null_frag>; 483a580b014SDimitry Andric 484a580b014SDimitry Andric// Start subchannel. 485a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 486a580b014SDimitry Andric def SSCH : SideEffectUnaryS<"ssch", 0xB233, null_frag, 0>; 487a580b014SDimitry Andric 488a580b014SDimitry Andric// Store subchannel. 489a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 490a580b014SDimitry Andric def STSCH : StoreInherentS<"stsch", 0xB234, null_frag, 0>; 491a580b014SDimitry Andric 492a580b014SDimitry Andric// Test subchannel. 493a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 494a580b014SDimitry Andric def TSCH : StoreInherentS<"tsch", 0xB235, null_frag, 0>; 495a580b014SDimitry Andric 496a580b014SDimitry Andric// Cancel subchannel. 497a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 498a580b014SDimitry Andric def XSCH : SideEffectInherentS<"xsch", 0xB276, null_frag>; 499a580b014SDimitry Andric 500a580b014SDimitry Andric// Reset channel path. 501a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 502a580b014SDimitry Andric def RCHP : SideEffectInherentS<"rchp", 0xB23B, null_frag>; 503a580b014SDimitry Andric 504a580b014SDimitry Andric// Set channel monitor. 505a580b014SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R1L, R2D] in 506a580b014SDimitry Andric def SCHM : SideEffectInherentS<"schm", 0xB23C, null_frag>; 507a580b014SDimitry Andric 508a580b014SDimitry Andric// Store channel path status. 509a580b014SDimitry Andriclet hasSideEffects = 1 in 510a580b014SDimitry Andric def STCPS : StoreInherentS<"stcps", 0xB23A, null_frag, 0>; 511a580b014SDimitry Andric 512a580b014SDimitry Andric// Store channel report word. 513a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 514a580b014SDimitry Andric def STCRW : StoreInherentS<"stcrw", 0xB239, null_frag, 0>; 515a580b014SDimitry Andric 516a580b014SDimitry Andric// Test pending interruption. 517a580b014SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 518a580b014SDimitry Andric def TPI : StoreInherentS<"tpi", 0xB236, null_frag, 0>; 519a580b014SDimitry Andric 520a580b014SDimitry Andric// Set address limit. 521a580b014SDimitry Andriclet hasSideEffects = 1, Uses = [R1L] in 522a580b014SDimitry Andric def SAL : SideEffectInherentS<"sal", 0xB237, null_frag>; 523a580b014SDimitry Andric 524