10b57cec5SDimitry Andric//==- SystemZInstrSystem.td - SystemZ system instructions -*- tblgen-*-----==// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// The instructions in this file implement SystemZ system-level instructions. 100b57cec5SDimitry Andric// Most of these instructions are privileged or semi-privileged. They are 110b57cec5SDimitry Andric// not used for code generation, but are provided for use with the assembler 120b57cec5SDimitry Andric// and disassembler only. 130b57cec5SDimitry Andric// 140b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 170b57cec5SDimitry Andric// Program-Status Word Instructions. 180b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric// Extract PSW. 210b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [CC] in 220b57cec5SDimitry Andric def EPSW : InherentDualRRE<"epsw", 0xB98D, GR32>; 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric// Load PSW (extended). 250b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 260b57cec5SDimitry Andric def LPSW : SideEffectUnaryS<"lpsw", 0x8200, null_frag, 8>; 270b57cec5SDimitry Andric def LPSWE : SideEffectUnaryS<"lpswe", 0xB2B2, null_frag, 16>; 280b57cec5SDimitry Andric} 29fe6060f1SDimitry Andriclet Predicates = [FeatureBEAREnhancement], hasSideEffects = 1, Defs = [CC] in 30fe6060f1SDimitry Andric def LPSWEY : SideEffectUnarySIY<"lpswey", 0xEB71, 16>; 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric// Insert PSW key. 330b57cec5SDimitry Andriclet Uses = [R2L], Defs = [R2L] in 340b57cec5SDimitry Andric def IPK : SideEffectInherentS<"ipk", 0xB20B, null_frag>; 350b57cec5SDimitry Andric 360b57cec5SDimitry Andric// Set PSW key from address. 370b57cec5SDimitry Andriclet hasSideEffects = 1 in 380b57cec5SDimitry Andric def SPKA : SideEffectAddressS<"spka", 0xB20A, null_frag>; 390b57cec5SDimitry Andric 400b57cec5SDimitry Andric// Set system mask. 410b57cec5SDimitry Andriclet hasSideEffects = 1 in 420b57cec5SDimitry Andric def SSM : SideEffectUnaryS<"ssm", 0x8000, null_frag, 1>; 430b57cec5SDimitry Andric 440b57cec5SDimitry Andric// Store then AND/OR system mask. 450b57cec5SDimitry Andriclet hasSideEffects = 1 in { 460b57cec5SDimitry Andric def STNSM : StoreSI<"stnsm", 0xAC, null_frag, imm32zx8>; 470b57cec5SDimitry Andric def STOSM : StoreSI<"stosm", 0xAD, null_frag, imm32zx8>; 480b57cec5SDimitry Andric} 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric// Insert address space control. 510b57cec5SDimitry Andriclet hasSideEffects = 1 in 520b57cec5SDimitry Andric def IAC : InherentRRE<"iac", 0xB224, GR32, null_frag>; 530b57cec5SDimitry Andric 540b57cec5SDimitry Andric// Set address space control (fast). 550b57cec5SDimitry Andriclet hasSideEffects = 1 in { 560b57cec5SDimitry Andric def SAC : SideEffectAddressS<"sac", 0xB219, null_frag>; 570b57cec5SDimitry Andric def SACF : SideEffectAddressS<"sacf", 0xB279, null_frag>; 580b57cec5SDimitry Andric} 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 610b57cec5SDimitry Andric// Control Register Instructions. 620b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 630b57cec5SDimitry Andric 640b57cec5SDimitry Andriclet hasSideEffects = 1 in { 650b57cec5SDimitry Andric // Load control. 660b57cec5SDimitry Andric def LCTL : LoadMultipleRS<"lctl", 0xB7, CR64>; 670b57cec5SDimitry Andric def LCTLG : LoadMultipleRSY<"lctlg", 0xEB2F, CR64>; 680b57cec5SDimitry Andric 690b57cec5SDimitry Andric // Store control. 700b57cec5SDimitry Andric def STCTL : StoreMultipleRS<"stctl", 0xB6, CR64>; 710b57cec5SDimitry Andric def STCTG : StoreMultipleRSY<"stctg", 0xEB25, CR64>; 720b57cec5SDimitry Andric} 730b57cec5SDimitry Andric 740b57cec5SDimitry Andric// Extract primary ASN (and instance). 750b57cec5SDimitry Andriclet hasSideEffects = 1 in { 760b57cec5SDimitry Andric def EPAR : InherentRRE<"epar", 0xB226, GR32, null_frag>; 770b57cec5SDimitry Andric def EPAIR : InherentRRE<"epair", 0xB99A, GR64, null_frag>; 780b57cec5SDimitry Andric} 790b57cec5SDimitry Andric 800b57cec5SDimitry Andric// Extract secondary ASN (and instance). 810b57cec5SDimitry Andriclet hasSideEffects = 1 in { 820b57cec5SDimitry Andric def ESAR : InherentRRE<"esar", 0xB227, GR32, null_frag>; 830b57cec5SDimitry Andric def ESAIR : InherentRRE<"esair", 0xB99B, GR64, null_frag>; 840b57cec5SDimitry Andric} 850b57cec5SDimitry Andric 860b57cec5SDimitry Andric// Set secondary ASN (and instance). 870b57cec5SDimitry Andriclet hasSideEffects = 1 in { 880b57cec5SDimitry Andric def SSAR : SideEffectUnaryRRE<"ssar", 0xB225, GR32, null_frag>; 890b57cec5SDimitry Andric def SSAIR : SideEffectUnaryRRE<"ssair", 0xB99F, GR64, null_frag>; 900b57cec5SDimitry Andric} 910b57cec5SDimitry Andric 920b57cec5SDimitry Andric// Extract and set extended authority. 930b57cec5SDimitry Andriclet hasSideEffects = 1 in 940b57cec5SDimitry Andric def ESEA : UnaryTiedRRE<"esea", 0xB99D, GR32>; 950b57cec5SDimitry Andric 960b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 970b57cec5SDimitry Andric// Prefix-Register Instructions. 980b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 990b57cec5SDimitry Andric 1000b57cec5SDimitry Andric// Set prefix. 1010b57cec5SDimitry Andriclet hasSideEffects = 1 in 1020b57cec5SDimitry Andric def SPX : SideEffectUnaryS<"spx", 0xB210, null_frag, 4>; 1030b57cec5SDimitry Andric 1040b57cec5SDimitry Andric// Store prefix. 1050b57cec5SDimitry Andriclet hasSideEffects = 1 in 1060b57cec5SDimitry Andric def STPX : StoreInherentS<"stpx", 0xB211, null_frag, 4>; 1070b57cec5SDimitry Andric 1080b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 109fe6060f1SDimitry Andric// Breaking-Event-Address-Register Instructions. 110fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 111fe6060f1SDimitry Andric 112fe6060f1SDimitry Andriclet Predicates = [FeatureBEAREnhancement] in { 113fe6060f1SDimitry Andric // Load BEAR. 114fe6060f1SDimitry Andric let hasSideEffects = 1 in 115fe6060f1SDimitry Andric def LBEAR : SideEffectUnaryS<"lbear", 0xB200, null_frag, 8>; 116fe6060f1SDimitry Andric 117fe6060f1SDimitry Andric // Store BEAR. 118fe6060f1SDimitry Andric let hasSideEffects = 1 in 119fe6060f1SDimitry Andric def STBEAR : StoreInherentS<"stbear", 0xB201, null_frag, 8>; 120fe6060f1SDimitry Andric} 121fe6060f1SDimitry Andric 122fe6060f1SDimitry Andric//===----------------------------------------------------------------------===// 1230b57cec5SDimitry Andric// Storage-Key and Real Memory Instructions. 1240b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1250b57cec5SDimitry Andric 1260b57cec5SDimitry Andric// Insert storage key extended. 1270b57cec5SDimitry Andriclet hasSideEffects = 1 in 1280b57cec5SDimitry Andric def ISKE : BinaryRRE<"iske", 0xB229, null_frag, GR32, GR64>; 1290b57cec5SDimitry Andric 1300b57cec5SDimitry Andric// Insert virtual storage key. 1310b57cec5SDimitry Andriclet hasSideEffects = 1 in 1320b57cec5SDimitry Andric def IVSK : BinaryRRE<"ivsk", 0xB223, null_frag, GR32, GR64>; 1330b57cec5SDimitry Andric 1340b57cec5SDimitry Andric// Set storage key extended. 1350b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1360b57cec5SDimitry Andric defm SSKE : SideEffectTernaryRRFcOpt<"sske", 0xB22B, GR32, GR64>; 1370b57cec5SDimitry Andric 1380b57cec5SDimitry Andric// Reset reference bit extended. 1390b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1400b57cec5SDimitry Andric def RRBE : SideEffectBinaryRRE<"rrbe", 0xB22A, GR32, GR64>; 1410b57cec5SDimitry Andric 1420b57cec5SDimitry Andric// Reset reference bits multiple. 1430b57cec5SDimitry Andriclet Predicates = [FeatureResetReferenceBitsMultiple], hasSideEffects = 1 in 1440b57cec5SDimitry Andric def RRBM : UnaryRRE<"rrbm", 0xB9AE, null_frag, GR64, GR64>; 1450b57cec5SDimitry Andric 1460b57cec5SDimitry Andric// Insert reference bits multiple. 1470b57cec5SDimitry Andriclet Predicates = [FeatureInsertReferenceBitsMultiple], hasSideEffects = 1 in 1480b57cec5SDimitry Andric def IRBM : UnaryRRE<"irbm", 0xB9AC, null_frag, GR64, GR64>; 1490b57cec5SDimitry Andric 1500b57cec5SDimitry Andric// Perform frame management function. 1510b57cec5SDimitry Andriclet hasSideEffects = 1 in 1520b57cec5SDimitry Andric def PFMF : SideEffectBinaryMemRRE<"pfmf", 0xB9AF, GR32, GR64>; 1530b57cec5SDimitry Andric 1540b57cec5SDimitry Andric// Test block. 1550b57cec5SDimitry Andriclet hasSideEffects = 1, mayStore = 1, Uses = [R0D], Defs = [R0D, CC] in 1560b57cec5SDimitry Andric def TB : SideEffectBinaryRRE<"tb", 0xB22C, GR64, GR64>; 1570b57cec5SDimitry Andric 1580b57cec5SDimitry Andric// Page in / out. 1590b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 1600b57cec5SDimitry Andric def PGIN : SideEffectBinaryRRE<"pgin", 0xB22E, GR64, GR64>; 1610b57cec5SDimitry Andric def PGOUT : SideEffectBinaryRRE<"pgout", 0xB22F, GR64, GR64>; 1620b57cec5SDimitry Andric} 1630b57cec5SDimitry Andric 1640b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1650b57cec5SDimitry Andric// Dynamic-Address-Translation Instructions. 1660b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1670b57cec5SDimitry Andric 1680b57cec5SDimitry Andric// Invalidate page table entry. 1690b57cec5SDimitry Andriclet hasSideEffects = 1 in 1700b57cec5SDimitry Andric defm IPTE : SideEffectQuaternaryRRFaOptOpt<"ipte", 0xB221, GR64, GR32, GR32>; 1710b57cec5SDimitry Andric 1720b57cec5SDimitry Andric// Invalidate DAT table entry. 1730b57cec5SDimitry Andriclet hasSideEffects = 1 in 1740b57cec5SDimitry Andric defm IDTE : SideEffectQuaternaryRRFbOpt<"idte", 0xB98E, GR64, GR64, GR64>; 1750b57cec5SDimitry Andric 176fe6060f1SDimitry Andric// Reset DAT protection. 177fe6060f1SDimitry Andriclet Predicates = [FeatureResetDATProtection], hasSideEffects = 1 in 178fe6060f1SDimitry Andric defm RDP : SideEffectQuaternaryRRFbOpt<"rdp", 0xB98B, GR64, GR64, GR64>; 179fe6060f1SDimitry Andric 1800b57cec5SDimitry Andric// Compare and replace DAT table entry. 1810b57cec5SDimitry Andriclet Predicates = [FeatureEnhancedDAT2], hasSideEffects = 1, Defs = [CC] in 1820b57cec5SDimitry Andric defm CRDTE : SideEffectQuaternaryRRFbOpt<"crdte", 0xB98F, GR128, GR128, GR64>; 1830b57cec5SDimitry Andric 1840b57cec5SDimitry Andric// Purge TLB. 1850b57cec5SDimitry Andriclet hasSideEffects = 1 in 1860b57cec5SDimitry Andric def PTLB : SideEffectInherentS<"ptlb", 0xB20D, null_frag>; 1870b57cec5SDimitry Andric 1880b57cec5SDimitry Andric// Compare and swap and purge. 1890b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 1900b57cec5SDimitry Andric def CSP : CmpSwapRRE<"csp", 0xB250, GR128, GR64>; 1910b57cec5SDimitry Andric def CSPG : CmpSwapRRE<"cspg", 0xB98A, GR128, GR64>; 1920b57cec5SDimitry Andric} 1930b57cec5SDimitry Andric 1940b57cec5SDimitry Andric// Load page-table-entry address. 1950b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1960b57cec5SDimitry Andric def LPTEA : TernaryRRFb<"lptea", 0xB9AA, GR64, GR64, GR64>; 1970b57cec5SDimitry Andric 1980b57cec5SDimitry Andric// Load real address. 1990b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 2000b57cec5SDimitry Andric defm LRA : LoadAddressRXPair<"lra", 0xB1, 0xE313, null_frag>; 2010b57cec5SDimitry Andric def LRAG : LoadAddressRXY<"lrag", 0xE303, null_frag, laaddr20pair>; 2020b57cec5SDimitry Andric} 2030b57cec5SDimitry Andric 2040b57cec5SDimitry Andric// Store real address. 2050b57cec5SDimitry Andricdef STRAG : StoreSSE<"strag", 0xE502>; 2060b57cec5SDimitry Andric 2070b57cec5SDimitry Andric// Load using real address. 2080b57cec5SDimitry Andriclet mayLoad = 1 in { 2090b57cec5SDimitry Andric def LURA : UnaryRRE<"lura", 0xB24B, null_frag, GR32, GR64>; 2100b57cec5SDimitry Andric def LURAG : UnaryRRE<"lurag", 0xB905, null_frag, GR64, GR64>; 2110b57cec5SDimitry Andric} 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andric// Store using real address. 2140b57cec5SDimitry Andriclet mayStore = 1 in { 2150b57cec5SDimitry Andric def STURA : SideEffectBinaryRRE<"stura", 0xB246, GR32, GR64>; 2160b57cec5SDimitry Andric def STURG : SideEffectBinaryRRE<"sturg", 0xB925, GR64, GR64>; 2170b57cec5SDimitry Andric} 2180b57cec5SDimitry Andric 2190b57cec5SDimitry Andric// Test protection. 2200b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2210b57cec5SDimitry Andric def TPROT : SideEffectBinarySSE<"tprot", 0xE501>; 2220b57cec5SDimitry Andric 2230b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2240b57cec5SDimitry Andric// Memory-move Instructions. 2250b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2260b57cec5SDimitry Andric 2270b57cec5SDimitry Andric// Move with key. 2280b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in 2290b57cec5SDimitry Andric def MVCK : MemoryBinarySSd<"mvck", 0xD9, GR64>; 2300b57cec5SDimitry Andric 2310b57cec5SDimitry Andric// Move to primary / secondary. 2320b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 2330b57cec5SDimitry Andric def MVCP : MemoryBinarySSd<"mvcp", 0xDA, GR64>; 2340b57cec5SDimitry Andric def MVCS : MemoryBinarySSd<"mvcs", 0xDB, GR64>; 2350b57cec5SDimitry Andric} 2360b57cec5SDimitry Andric 2370b57cec5SDimitry Andric// Move with source / destination key. 2380b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L, R1L] in { 2390b57cec5SDimitry Andric def MVCSK : SideEffectBinarySSE<"mvcsk", 0xE50E>; 2400b57cec5SDimitry Andric def MVCDK : SideEffectBinarySSE<"mvcdk", 0xE50F>; 2410b57cec5SDimitry Andric} 2420b57cec5SDimitry Andric 2430b57cec5SDimitry Andric// Move with optional specifications. 2440b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L] in 2450b57cec5SDimitry Andric def MVCOS : SideEffectTernarySSF<"mvcos", 0xC80, GR64>; 2460b57cec5SDimitry Andric 2470b57cec5SDimitry Andric// Move page. 2480b57cec5SDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L], Defs = [CC] in 2490b57cec5SDimitry Andric def MVPG : SideEffectBinaryRRE<"mvpg", 0xB254, GR64, GR64>; 2500b57cec5SDimitry Andric 2510b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2520b57cec5SDimitry Andric// Address-Space Instructions. 2530b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2540b57cec5SDimitry Andric 2550b57cec5SDimitry Andric// Load address space parameters. 2560b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2570b57cec5SDimitry Andric def LASP : SideEffectBinarySSE<"lasp", 0xE500>; 2580b57cec5SDimitry Andric 2590b57cec5SDimitry Andric// Purge ALB. 2600b57cec5SDimitry Andriclet hasSideEffects = 1 in 2610b57cec5SDimitry Andric def PALB : SideEffectInherentRRE<"palb", 0xB248>; 2620b57cec5SDimitry Andric 2630b57cec5SDimitry Andric// Program call. 2640b57cec5SDimitry Andriclet hasSideEffects = 1 in 2650b57cec5SDimitry Andric def PC : SideEffectAddressS<"pc", 0xB218, null_frag>; 2660b57cec5SDimitry Andric 2670b57cec5SDimitry Andric// Program return. 2680b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2690b57cec5SDimitry Andric def PR : SideEffectInherentE<"pr", 0x0101>; 2700b57cec5SDimitry Andric 2710b57cec5SDimitry Andric// Program transfer (with instance). 2720b57cec5SDimitry Andriclet hasSideEffects = 1 in { 2730b57cec5SDimitry Andric def PT : SideEffectBinaryRRE<"pt", 0xB228, GR32, GR64>; 2740b57cec5SDimitry Andric def PTI : SideEffectBinaryRRE<"pti", 0xB99E, GR64, GR64>; 2750b57cec5SDimitry Andric} 2760b57cec5SDimitry Andric 2770b57cec5SDimitry Andric// Resume program. 2780b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2790b57cec5SDimitry Andric def RP : SideEffectAddressS<"rp", 0xB277, null_frag>; 2800b57cec5SDimitry Andric 2810b57cec5SDimitry Andric// Branch in subspace group. 2820b57cec5SDimitry Andriclet hasSideEffects = 1 in 2830b57cec5SDimitry Andric def BSG : UnaryRRE<"bsg", 0xB258, null_frag, GR64, GR64>; 2840b57cec5SDimitry Andric 2850b57cec5SDimitry Andric// Branch and set authority. 2860b57cec5SDimitry Andriclet hasSideEffects = 1 in 2870b57cec5SDimitry Andric def BSA : UnaryRRE<"bsa", 0xB25A, null_frag, GR64, GR64>; 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andric// Test access. 2900b57cec5SDimitry Andriclet Defs = [CC] in 2910b57cec5SDimitry Andric def TAR : SideEffectBinaryRRE<"tar", 0xB24C, AR32, GR32>; 2920b57cec5SDimitry Andric 2930b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2940b57cec5SDimitry Andric// Linkage-Stack Instructions. 2950b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2960b57cec5SDimitry Andric 2970b57cec5SDimitry Andric// Branch and stack. 2980b57cec5SDimitry Andriclet hasSideEffects = 1 in 2990b57cec5SDimitry Andric def BAKR : SideEffectBinaryRRE<"bakr", 0xB240, GR64, GR64>; 3000b57cec5SDimitry Andric 3010b57cec5SDimitry Andric// Extract stacked registers. 3020b57cec5SDimitry Andriclet hasSideEffects = 1 in { 3030b57cec5SDimitry Andric def EREG : SideEffectBinaryRRE<"ereg", 0xB249, GR32, GR32>; 3040b57cec5SDimitry Andric def EREGG : SideEffectBinaryRRE<"eregg", 0xB90E, GR64, GR64>; 3050b57cec5SDimitry Andric} 3060b57cec5SDimitry Andric 3070b57cec5SDimitry Andric// Extract stacked state. 3080b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 3090b57cec5SDimitry Andric def ESTA : UnaryRRE<"esta", 0xB24A, null_frag, GR128, GR32>; 3100b57cec5SDimitry Andric 3110b57cec5SDimitry Andric// Modify stacked state. 3120b57cec5SDimitry Andriclet hasSideEffects = 1 in 3130b57cec5SDimitry Andric def MSTA : SideEffectUnaryRRE<"msta", 0xB247, GR128, null_frag>; 3140b57cec5SDimitry Andric 3150b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3160b57cec5SDimitry Andric// Time-Related Instructions. 3170b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3180b57cec5SDimitry Andric 3190b57cec5SDimitry Andric// Perform timing facility function. 3200b57cec5SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R0L, R1D], Defs = [CC] in 3210b57cec5SDimitry Andric def PTFF : SideEffectInherentE<"ptff", 0x0104>; 3220b57cec5SDimitry Andric 3230b57cec5SDimitry Andric// Set clock. 3240b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 3250b57cec5SDimitry Andric def SCK : SideEffectUnaryS<"sck", 0xB204, null_frag, 8>; 3260b57cec5SDimitry Andric 3270b57cec5SDimitry Andric// Set clock programmable field. 3280b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R0L] in 3290b57cec5SDimitry Andric def SCKPF : SideEffectInherentE<"sckpf", 0x0107>; 3300b57cec5SDimitry Andric 3310b57cec5SDimitry Andric// Set clock comparator. 3320b57cec5SDimitry Andriclet hasSideEffects = 1 in 3330b57cec5SDimitry Andric def SCKC : SideEffectUnaryS<"sckc", 0xB206, null_frag, 8>; 3340b57cec5SDimitry Andric 3350b57cec5SDimitry Andric// Set CPU timer. 3360b57cec5SDimitry Andriclet hasSideEffects = 1 in 3370b57cec5SDimitry Andric def SPT : SideEffectUnaryS<"spt", 0xB208, null_frag, 8>; 3380b57cec5SDimitry Andric 3390b57cec5SDimitry Andric// Store clock (fast / extended). 3400b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 3410b57cec5SDimitry Andric def STCK : StoreInherentS<"stck", 0xB205, null_frag, 8>; 342*0fca6ea1SDimitry Andric def STCKF : StoreInherentS<"stckf", 0xB27C, z_stckf, 8>; 3430b57cec5SDimitry Andric def STCKE : StoreInherentS<"stcke", 0xB278, null_frag, 16>; 3440b57cec5SDimitry Andric} 3450b57cec5SDimitry Andric 3460b57cec5SDimitry Andric// Store clock comparator. 3470b57cec5SDimitry Andriclet hasSideEffects = 1 in 3480b57cec5SDimitry Andric def STCKC : StoreInherentS<"stckc", 0xB207, null_frag, 8>; 3490b57cec5SDimitry Andric 3500b57cec5SDimitry Andric// Store CPU timer. 3510b57cec5SDimitry Andriclet hasSideEffects = 1 in 3520b57cec5SDimitry Andric def STPT : StoreInherentS<"stpt", 0xB209, null_frag, 8>; 3530b57cec5SDimitry Andric 3540b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3550b57cec5SDimitry Andric// CPU-Related Instructions. 3560b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3570b57cec5SDimitry Andric 3580b57cec5SDimitry Andric// Store CPU address. 3590b57cec5SDimitry Andriclet hasSideEffects = 1 in 3600b57cec5SDimitry Andric def STAP : StoreInherentS<"stap", 0xB212, null_frag, 2>; 3610b57cec5SDimitry Andric 3620b57cec5SDimitry Andric// Store CPU ID. 3630b57cec5SDimitry Andriclet hasSideEffects = 1 in 3640b57cec5SDimitry Andric def STIDP : StoreInherentS<"stidp", 0xB202, null_frag, 8>; 3650b57cec5SDimitry Andric 3660b57cec5SDimitry Andric// Store system information. 3670b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R0L, R1L], Defs = [R0L, CC] in 3680b57cec5SDimitry Andric def STSI : StoreInherentS<"stsi", 0xB27D, null_frag, 0>; 3690b57cec5SDimitry Andric 3700b57cec5SDimitry Andric// Store facility list. 3710b57cec5SDimitry Andriclet hasSideEffects = 1 in 3720b57cec5SDimitry Andric def STFL : StoreInherentS<"stfl", 0xB2B1, null_frag, 4>; 3730b57cec5SDimitry Andric 3740b57cec5SDimitry Andric// Store facility list extended. 3750b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 3760b57cec5SDimitry Andric def STFLE : StoreInherentS<"stfle", 0xB2B0, null_frag, 0>; 3770b57cec5SDimitry Andric 3780b57cec5SDimitry Andric// Extract CPU attribute. 3790b57cec5SDimitry Andriclet hasSideEffects = 1 in 3800b57cec5SDimitry Andric def ECAG : BinaryRSY<"ecag", 0xEB4C, null_frag, GR64>; 3810b57cec5SDimitry Andric 3820b57cec5SDimitry Andric// Extract CPU time. 3830b57cec5SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Defs = [R0D, R1D] in 3840b57cec5SDimitry Andric def ECTG : SideEffectTernarySSF<"ectg", 0xC81, GR64>; 3850b57cec5SDimitry Andric 3860b57cec5SDimitry Andric// Perform topology function. 3870b57cec5SDimitry Andriclet hasSideEffects = 1 in 3880b57cec5SDimitry Andric def PTF : UnaryTiedRRE<"ptf", 0xB9A2, GR64>; 3890b57cec5SDimitry Andric 3900b57cec5SDimitry Andric// Perform cryptographic key management operation. 3910b57cec5SDimitry Andriclet Predicates = [FeatureMessageSecurityAssist3], 3920b57cec5SDimitry Andric hasSideEffects = 1, Uses = [R0L, R1D] in 3930b57cec5SDimitry Andric def PCKMO : SideEffectInherentRRE<"pckmo", 0xB928>; 3940b57cec5SDimitry Andric 395fe6060f1SDimitry Andric// Query processor activity counter information. 396fe6060f1SDimitry Andriclet Predicates = [FeatureProcessorActivityInstrumentation], 397fe6060f1SDimitry Andric hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 398fe6060f1SDimitry Andric def QPACI : StoreInherentS<"qpaci", 0xB28F, null_frag, 0>; 399fe6060f1SDimitry Andric 4000b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4010b57cec5SDimitry Andric// Miscellaneous Instructions. 4020b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4030b57cec5SDimitry Andric 4040b57cec5SDimitry Andric// Supervisor call. 4050b57cec5SDimitry Andriclet hasSideEffects = 1, isCall = 1, Defs = [CC] in 4060b57cec5SDimitry Andric def SVC : SideEffectUnaryI<"svc", 0x0A, imm32zx8>; 4070b57cec5SDimitry Andric 4080b57cec5SDimitry Andric// Monitor call. 4090b57cec5SDimitry Andriclet hasSideEffects = 1, isCall = 1 in 4100b57cec5SDimitry Andric def MC : SideEffectBinarySI<"mc", 0xAF, imm32zx8>; 4110b57cec5SDimitry Andric 4120b57cec5SDimitry Andric// Diagnose. 4130b57cec5SDimitry Andriclet hasSideEffects = 1, isCall = 1 in 4140b57cec5SDimitry Andric def DIAG : SideEffectTernaryRS<"diag", 0x83, GR32, GR32>; 4150b57cec5SDimitry Andric 4160b57cec5SDimitry Andric// Trace. 4170b57cec5SDimitry Andriclet hasSideEffects = 1, mayLoad = 1 in { 4180b57cec5SDimitry Andric def TRACE : SideEffectTernaryRS<"trace", 0x99, GR32, GR32>; 4190b57cec5SDimitry Andric def TRACG : SideEffectTernaryRSY<"tracg", 0xEB0F, GR64, GR64>; 4200b57cec5SDimitry Andric} 4210b57cec5SDimitry Andric 4220b57cec5SDimitry Andric// Trap. 4230b57cec5SDimitry Andriclet hasSideEffects = 1 in { 4240b57cec5SDimitry Andric def TRAP2 : SideEffectInherentE<"trap2", 0x01FF>; 4250b57cec5SDimitry Andric def TRAP4 : SideEffectAddressS<"trap4", 0xB2FF, null_frag>; 4260b57cec5SDimitry Andric} 4270b57cec5SDimitry Andric 4280b57cec5SDimitry Andric// Signal processor. 4290b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4300b57cec5SDimitry Andric def SIGP : SideEffectTernaryRS<"sigp", 0xAE, GR64, GR64>; 4310b57cec5SDimitry Andric 4320b57cec5SDimitry Andric// Signal adapter. 4330b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R0D, R1D, R2D, R3D], Defs = [CC] in 4340b57cec5SDimitry Andric def SIGA : SideEffectAddressS<"siga", 0xB274, null_frag>; 4350b57cec5SDimitry Andric 4360b57cec5SDimitry Andric// Start interpretive execution. 4370b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4380b57cec5SDimitry Andric def SIE : SideEffectUnaryS<"sie", 0xB214, null_frag, 0>; 4390b57cec5SDimitry Andric 4400b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4410b57cec5SDimitry Andric// CPU-Measurement Facility Instructions (SA23-2260). 4420b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4430b57cec5SDimitry Andric 4440b57cec5SDimitry Andric// Load program parameter 4450b57cec5SDimitry Andriclet hasSideEffects = 1 in 4460b57cec5SDimitry Andric def LPP : SideEffectUnaryS<"lpp", 0xB280, null_frag, 8>; 4470b57cec5SDimitry Andric 4480b57cec5SDimitry Andric// Extract coprocessor-group address. 4490b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4500b57cec5SDimitry Andric def ECPGA : UnaryRRE<"ecpga", 0xB2ED, null_frag, GR32, GR64>; 4510b57cec5SDimitry Andric 4520b57cec5SDimitry Andric// Extract CPU counter. 4530b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4540b57cec5SDimitry Andric def ECCTR : UnaryRRE<"ecctr", 0xB2E4, null_frag, GR64, GR64>; 4550b57cec5SDimitry Andric 4560b57cec5SDimitry Andric// Extract peripheral counter. 4570b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4580b57cec5SDimitry Andric def EPCTR : UnaryRRE<"epctr", 0xB2E5, null_frag, GR64, GR64>; 4590b57cec5SDimitry Andric 4600b57cec5SDimitry Andric// Load CPU-counter-set controls. 4610b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4620b57cec5SDimitry Andric def LCCTL : SideEffectUnaryS<"lcctl", 0xB284, null_frag, 8>; 4630b57cec5SDimitry Andric 4640b57cec5SDimitry Andric// Load peripheral-counter-set controls. 4650b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4660b57cec5SDimitry Andric def LPCTL : SideEffectUnaryS<"lpctl", 0xB285, null_frag, 8>; 4670b57cec5SDimitry Andric 4680b57cec5SDimitry Andric// Load sampling controls. 4690b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4700b57cec5SDimitry Andric def LSCTL : SideEffectUnaryS<"lsctl", 0xB287, null_frag, 0>; 4710b57cec5SDimitry Andric 4720b57cec5SDimitry Andric// Query sampling information. 4730b57cec5SDimitry Andriclet hasSideEffects = 1 in 4740b57cec5SDimitry Andric def QSI : StoreInherentS<"qsi", 0xB286, null_frag, 0>; 4750b57cec5SDimitry Andric 4760b57cec5SDimitry Andric// Query counter information. 4770b57cec5SDimitry Andriclet hasSideEffects = 1 in 4780b57cec5SDimitry Andric def QCTRI : StoreInherentS<"qctri", 0xB28E, null_frag, 0>; 4790b57cec5SDimitry Andric 4800b57cec5SDimitry Andric// Set CPU counter. 4810b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4820b57cec5SDimitry Andric def SCCTR : SideEffectBinaryRRE<"scctr", 0xB2E0, GR64, GR64>; 4830b57cec5SDimitry Andric 4840b57cec5SDimitry Andric// Set peripheral counter. 4850b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4860b57cec5SDimitry Andric def SPCTR : SideEffectBinaryRRE<"spctr", 0xB2E1, GR64, GR64>; 4870b57cec5SDimitry Andric 4880b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4890b57cec5SDimitry Andric// I/O Instructions (Principles of Operation, Chapter 14). 4900b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4910b57cec5SDimitry Andric 4920b57cec5SDimitry Andric// Clear subchannel. 4930b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 4940b57cec5SDimitry Andric def CSCH : SideEffectInherentS<"csch", 0xB230, null_frag>; 4950b57cec5SDimitry Andric 4960b57cec5SDimitry Andric// Halt subchannel. 4970b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 4980b57cec5SDimitry Andric def HSCH : SideEffectInherentS<"hsch", 0xB231, null_frag>; 4990b57cec5SDimitry Andric 5000b57cec5SDimitry Andric// Modify subchannel. 5010b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5020b57cec5SDimitry Andric def MSCH : SideEffectUnaryS<"msch", 0xB232, null_frag, 0>; 5030b57cec5SDimitry Andric 5040b57cec5SDimitry Andric// Resume subchannel. 5050b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5060b57cec5SDimitry Andric def RSCH : SideEffectInherentS<"rsch", 0xB238, null_frag>; 5070b57cec5SDimitry Andric 5080b57cec5SDimitry Andric// Start subchannel. 5090b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5100b57cec5SDimitry Andric def SSCH : SideEffectUnaryS<"ssch", 0xB233, null_frag, 0>; 5110b57cec5SDimitry Andric 5120b57cec5SDimitry Andric// Store subchannel. 5130b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5140b57cec5SDimitry Andric def STSCH : StoreInherentS<"stsch", 0xB234, null_frag, 0>; 5150b57cec5SDimitry Andric 5160b57cec5SDimitry Andric// Test subchannel. 5170b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5180b57cec5SDimitry Andric def TSCH : StoreInherentS<"tsch", 0xB235, null_frag, 0>; 5190b57cec5SDimitry Andric 5200b57cec5SDimitry Andric// Cancel subchannel. 5210b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5220b57cec5SDimitry Andric def XSCH : SideEffectInherentS<"xsch", 0xB276, null_frag>; 5230b57cec5SDimitry Andric 5240b57cec5SDimitry Andric// Reset channel path. 5250b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5260b57cec5SDimitry Andric def RCHP : SideEffectInherentS<"rchp", 0xB23B, null_frag>; 5270b57cec5SDimitry Andric 5280b57cec5SDimitry Andric// Set channel monitor. 5290b57cec5SDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R1L, R2D] in 5300b57cec5SDimitry Andric def SCHM : SideEffectInherentS<"schm", 0xB23C, null_frag>; 5310b57cec5SDimitry Andric 5320b57cec5SDimitry Andric// Store channel path status. 5330b57cec5SDimitry Andriclet hasSideEffects = 1 in 5340b57cec5SDimitry Andric def STCPS : StoreInherentS<"stcps", 0xB23A, null_frag, 0>; 5350b57cec5SDimitry Andric 5360b57cec5SDimitry Andric// Store channel report word. 5370b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 5380b57cec5SDimitry Andric def STCRW : StoreInherentS<"stcrw", 0xB239, null_frag, 0>; 5390b57cec5SDimitry Andric 5400b57cec5SDimitry Andric// Test pending interruption. 5410b57cec5SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 5420b57cec5SDimitry Andric def TPI : StoreInherentS<"tpi", 0xB236, null_frag, 0>; 5430b57cec5SDimitry Andric 544*0fca6ea1SDimitry Andric// Test pending external interruption. 545*0fca6ea1SDimitry Andriclet hasSideEffects = 1, Defs = [CC], Predicates = [FeatureTestPendingExternalInterruption] in 546*0fca6ea1SDimitry Andric def TPEI : UnaryRRE<"tpei", 0xB9A1, null_frag, GR64, GR64>; 547*0fca6ea1SDimitry Andric 5480b57cec5SDimitry Andric// Set address limit. 5490b57cec5SDimitry Andriclet hasSideEffects = 1, Uses = [R1L] in 5500b57cec5SDimitry Andric def SAL : SideEffectInherentS<"sal", 0xB237, null_frag>; 5510b57cec5SDimitry Andric 552