19df3605dSDimitry Andric//==- SystemZInstrSystem.td - SystemZ system instructions -*- tblgen-*-----==// 29df3605dSDimitry Andric// 3e6d15924SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e6d15924SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5e6d15924SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 69df3605dSDimitry Andric// 79df3605dSDimitry Andric//===----------------------------------------------------------------------===// 89df3605dSDimitry Andric// 99df3605dSDimitry Andric// The instructions in this file implement SystemZ system-level instructions. 109df3605dSDimitry Andric// Most of these instructions are privileged or semi-privileged. They are 119df3605dSDimitry Andric// not used for code generation, but are provided for use with the assembler 129df3605dSDimitry Andric// and disassembler only. 139df3605dSDimitry Andric// 149df3605dSDimitry Andric//===----------------------------------------------------------------------===// 159df3605dSDimitry Andric 169df3605dSDimitry Andric//===----------------------------------------------------------------------===// 179df3605dSDimitry Andric// Program-Status Word Instructions. 189df3605dSDimitry Andric//===----------------------------------------------------------------------===// 199df3605dSDimitry Andric 209df3605dSDimitry Andric// Extract PSW. 219df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [CC] in 229df3605dSDimitry Andric def EPSW : InherentDualRRE<"epsw", 0xB98D, GR32>; 239df3605dSDimitry Andric 249df3605dSDimitry Andric// Load PSW (extended). 25044eb2f6SDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 269df3605dSDimitry Andric def LPSW : SideEffectUnaryS<"lpsw", 0x8200, null_frag, 8>; 279df3605dSDimitry Andric def LPSWE : SideEffectUnaryS<"lpswe", 0xB2B2, null_frag, 16>; 289df3605dSDimitry Andric} 29344a3780SDimitry Andriclet Predicates = [FeatureBEAREnhancement], hasSideEffects = 1, Defs = [CC] in 30344a3780SDimitry Andric def LPSWEY : SideEffectUnarySIY<"lpswey", 0xEB71, 16>; 319df3605dSDimitry Andric 329df3605dSDimitry Andric// Insert PSW key. 339df3605dSDimitry Andriclet Uses = [R2L], Defs = [R2L] in 349df3605dSDimitry Andric def IPK : SideEffectInherentS<"ipk", 0xB20B, null_frag>; 359df3605dSDimitry Andric 369df3605dSDimitry Andric// Set PSW key from address. 379df3605dSDimitry Andriclet hasSideEffects = 1 in 389df3605dSDimitry Andric def SPKA : SideEffectAddressS<"spka", 0xB20A, null_frag>; 399df3605dSDimitry Andric 409df3605dSDimitry Andric// Set system mask. 41044eb2f6SDimitry Andriclet hasSideEffects = 1 in 429df3605dSDimitry Andric def SSM : SideEffectUnaryS<"ssm", 0x8000, null_frag, 1>; 439df3605dSDimitry Andric 449df3605dSDimitry Andric// Store then AND/OR system mask. 459df3605dSDimitry Andriclet hasSideEffects = 1 in { 469df3605dSDimitry Andric def STNSM : StoreSI<"stnsm", 0xAC, null_frag, imm32zx8>; 479df3605dSDimitry Andric def STOSM : StoreSI<"stosm", 0xAD, null_frag, imm32zx8>; 489df3605dSDimitry Andric} 499df3605dSDimitry Andric 509df3605dSDimitry Andric// Insert address space control. 519df3605dSDimitry Andriclet hasSideEffects = 1 in 529df3605dSDimitry Andric def IAC : InherentRRE<"iac", 0xB224, GR32, null_frag>; 539df3605dSDimitry Andric 549df3605dSDimitry Andric// Set address space control (fast). 559df3605dSDimitry Andriclet hasSideEffects = 1 in { 569df3605dSDimitry Andric def SAC : SideEffectAddressS<"sac", 0xB219, null_frag>; 579df3605dSDimitry Andric def SACF : SideEffectAddressS<"sacf", 0xB279, null_frag>; 589df3605dSDimitry Andric} 599df3605dSDimitry Andric 609df3605dSDimitry Andric//===----------------------------------------------------------------------===// 619df3605dSDimitry Andric// Control Register Instructions. 629df3605dSDimitry Andric//===----------------------------------------------------------------------===// 639df3605dSDimitry Andric 64044eb2f6SDimitry Andriclet hasSideEffects = 1 in { 659df3605dSDimitry Andric // Load control. 669df3605dSDimitry Andric def LCTL : LoadMultipleRS<"lctl", 0xB7, CR64>; 679df3605dSDimitry Andric def LCTLG : LoadMultipleRSY<"lctlg", 0xEB2F, CR64>; 689df3605dSDimitry Andric 699df3605dSDimitry Andric // Store control. 709df3605dSDimitry Andric def STCTL : StoreMultipleRS<"stctl", 0xB6, CR64>; 719df3605dSDimitry Andric def STCTG : StoreMultipleRSY<"stctg", 0xEB25, CR64>; 72044eb2f6SDimitry Andric} 739df3605dSDimitry Andric 749df3605dSDimitry Andric// Extract primary ASN (and instance). 759df3605dSDimitry Andriclet hasSideEffects = 1 in { 769df3605dSDimitry Andric def EPAR : InherentRRE<"epar", 0xB226, GR32, null_frag>; 779df3605dSDimitry Andric def EPAIR : InherentRRE<"epair", 0xB99A, GR64, null_frag>; 789df3605dSDimitry Andric} 799df3605dSDimitry Andric 809df3605dSDimitry Andric// Extract secondary ASN (and instance). 819df3605dSDimitry Andriclet hasSideEffects = 1 in { 829df3605dSDimitry Andric def ESAR : InherentRRE<"esar", 0xB227, GR32, null_frag>; 839df3605dSDimitry Andric def ESAIR : InherentRRE<"esair", 0xB99B, GR64, null_frag>; 849df3605dSDimitry Andric} 859df3605dSDimitry Andric 869df3605dSDimitry Andric// Set secondary ASN (and instance). 879df3605dSDimitry Andriclet hasSideEffects = 1 in { 889df3605dSDimitry Andric def SSAR : SideEffectUnaryRRE<"ssar", 0xB225, GR32, null_frag>; 899df3605dSDimitry Andric def SSAIR : SideEffectUnaryRRE<"ssair", 0xB99F, GR64, null_frag>; 909df3605dSDimitry Andric} 919df3605dSDimitry Andric 929df3605dSDimitry Andric// Extract and set extended authority. 939df3605dSDimitry Andriclet hasSideEffects = 1 in 949df3605dSDimitry Andric def ESEA : UnaryTiedRRE<"esea", 0xB99D, GR32>; 959df3605dSDimitry Andric 969df3605dSDimitry Andric//===----------------------------------------------------------------------===// 979df3605dSDimitry Andric// Prefix-Register Instructions. 989df3605dSDimitry Andric//===----------------------------------------------------------------------===// 999df3605dSDimitry Andric 1009df3605dSDimitry Andric// Set prefix. 1019df3605dSDimitry Andriclet hasSideEffects = 1 in 1029df3605dSDimitry Andric def SPX : SideEffectUnaryS<"spx", 0xB210, null_frag, 4>; 1039df3605dSDimitry Andric 1049df3605dSDimitry Andric// Store prefix. 1059df3605dSDimitry Andriclet hasSideEffects = 1 in 1069df3605dSDimitry Andric def STPX : StoreInherentS<"stpx", 0xB211, null_frag, 4>; 1079df3605dSDimitry Andric 1089df3605dSDimitry Andric//===----------------------------------------------------------------------===// 109344a3780SDimitry Andric// Breaking-Event-Address-Register Instructions. 110344a3780SDimitry Andric//===----------------------------------------------------------------------===// 111344a3780SDimitry Andric 112344a3780SDimitry Andriclet Predicates = [FeatureBEAREnhancement] in { 113344a3780SDimitry Andric // Load BEAR. 114344a3780SDimitry Andric let hasSideEffects = 1 in 115344a3780SDimitry Andric def LBEAR : SideEffectUnaryS<"lbear", 0xB200, null_frag, 8>; 116344a3780SDimitry Andric 117344a3780SDimitry Andric // Store BEAR. 118344a3780SDimitry Andric let hasSideEffects = 1 in 119344a3780SDimitry Andric def STBEAR : StoreInherentS<"stbear", 0xB201, null_frag, 8>; 120344a3780SDimitry Andric} 121344a3780SDimitry Andric 122344a3780SDimitry Andric//===----------------------------------------------------------------------===// 1239df3605dSDimitry Andric// Storage-Key and Real Memory Instructions. 1249df3605dSDimitry Andric//===----------------------------------------------------------------------===// 1259df3605dSDimitry Andric 1269df3605dSDimitry Andric// Insert storage key extended. 1279df3605dSDimitry Andriclet hasSideEffects = 1 in 1289df3605dSDimitry Andric def ISKE : BinaryRRE<"iske", 0xB229, null_frag, GR32, GR64>; 1299df3605dSDimitry Andric 1309df3605dSDimitry Andric// Insert virtual storage key. 1319df3605dSDimitry Andriclet hasSideEffects = 1 in 1329df3605dSDimitry Andric def IVSK : BinaryRRE<"ivsk", 0xB223, null_frag, GR32, GR64>; 1339df3605dSDimitry Andric 1349df3605dSDimitry Andric// Set storage key extended. 1359df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1369df3605dSDimitry Andric defm SSKE : SideEffectTernaryRRFcOpt<"sske", 0xB22B, GR32, GR64>; 1379df3605dSDimitry Andric 1389df3605dSDimitry Andric// Reset reference bit extended. 1399df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1409df3605dSDimitry Andric def RRBE : SideEffectBinaryRRE<"rrbe", 0xB22A, GR32, GR64>; 1419df3605dSDimitry Andric 1429df3605dSDimitry Andric// Reset reference bits multiple. 1439df3605dSDimitry Andriclet Predicates = [FeatureResetReferenceBitsMultiple], hasSideEffects = 1 in 1449df3605dSDimitry Andric def RRBM : UnaryRRE<"rrbm", 0xB9AE, null_frag, GR64, GR64>; 1459df3605dSDimitry Andric 14693c91e39SDimitry Andric// Insert reference bits multiple. 14793c91e39SDimitry Andriclet Predicates = [FeatureInsertReferenceBitsMultiple], hasSideEffects = 1 in 14893c91e39SDimitry Andric def IRBM : UnaryRRE<"irbm", 0xB9AC, null_frag, GR64, GR64>; 14993c91e39SDimitry Andric 1509df3605dSDimitry Andric// Perform frame management function. 1519df3605dSDimitry Andriclet hasSideEffects = 1 in 1529df3605dSDimitry Andric def PFMF : SideEffectBinaryMemRRE<"pfmf", 0xB9AF, GR32, GR64>; 1539df3605dSDimitry Andric 1549df3605dSDimitry Andric// Test block. 1559df3605dSDimitry Andriclet hasSideEffects = 1, mayStore = 1, Uses = [R0D], Defs = [R0D, CC] in 1569df3605dSDimitry Andric def TB : SideEffectBinaryRRE<"tb", 0xB22C, GR64, GR64>; 1579df3605dSDimitry Andric 1589df3605dSDimitry Andric// Page in / out. 1599df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 1609df3605dSDimitry Andric def PGIN : SideEffectBinaryRRE<"pgin", 0xB22E, GR64, GR64>; 1619df3605dSDimitry Andric def PGOUT : SideEffectBinaryRRE<"pgout", 0xB22F, GR64, GR64>; 1629df3605dSDimitry Andric} 1639df3605dSDimitry Andric 1649df3605dSDimitry Andric//===----------------------------------------------------------------------===// 1659df3605dSDimitry Andric// Dynamic-Address-Translation Instructions. 1669df3605dSDimitry Andric//===----------------------------------------------------------------------===// 1679df3605dSDimitry Andric 1689df3605dSDimitry Andric// Invalidate page table entry. 1699df3605dSDimitry Andriclet hasSideEffects = 1 in 1709df3605dSDimitry Andric defm IPTE : SideEffectQuaternaryRRFaOptOpt<"ipte", 0xB221, GR64, GR32, GR32>; 1719df3605dSDimitry Andric 1729df3605dSDimitry Andric// Invalidate DAT table entry. 1739df3605dSDimitry Andriclet hasSideEffects = 1 in 1749df3605dSDimitry Andric defm IDTE : SideEffectQuaternaryRRFbOpt<"idte", 0xB98E, GR64, GR64, GR64>; 1759df3605dSDimitry Andric 176344a3780SDimitry Andric// Reset DAT protection. 177344a3780SDimitry Andriclet Predicates = [FeatureResetDATProtection], hasSideEffects = 1 in 178344a3780SDimitry Andric defm RDP : SideEffectQuaternaryRRFbOpt<"rdp", 0xB98B, GR64, GR64, GR64>; 179344a3780SDimitry Andric 1809df3605dSDimitry Andric// Compare and replace DAT table entry. 1819df3605dSDimitry Andriclet Predicates = [FeatureEnhancedDAT2], hasSideEffects = 1, Defs = [CC] in 1829df3605dSDimitry Andric defm CRDTE : SideEffectQuaternaryRRFbOpt<"crdte", 0xB98F, GR128, GR128, GR64>; 1839df3605dSDimitry Andric 1849df3605dSDimitry Andric// Purge TLB. 1859df3605dSDimitry Andriclet hasSideEffects = 1 in 1869df3605dSDimitry Andric def PTLB : SideEffectInherentS<"ptlb", 0xB20D, null_frag>; 1879df3605dSDimitry Andric 1889df3605dSDimitry Andric// Compare and swap and purge. 1899df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 1909df3605dSDimitry Andric def CSP : CmpSwapRRE<"csp", 0xB250, GR128, GR64>; 1919df3605dSDimitry Andric def CSPG : CmpSwapRRE<"cspg", 0xB98A, GR128, GR64>; 1929df3605dSDimitry Andric} 1939df3605dSDimitry Andric 1949df3605dSDimitry Andric// Load page-table-entry address. 1959df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 1969df3605dSDimitry Andric def LPTEA : TernaryRRFb<"lptea", 0xB9AA, GR64, GR64, GR64>; 1979df3605dSDimitry Andric 1989df3605dSDimitry Andric// Load real address. 1999df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 2009df3605dSDimitry Andric defm LRA : LoadAddressRXPair<"lra", 0xB1, 0xE313, null_frag>; 2019df3605dSDimitry Andric def LRAG : LoadAddressRXY<"lrag", 0xE303, null_frag, laaddr20pair>; 2029df3605dSDimitry Andric} 2039df3605dSDimitry Andric 2049df3605dSDimitry Andric// Store real address. 2059df3605dSDimitry Andricdef STRAG : StoreSSE<"strag", 0xE502>; 2069df3605dSDimitry Andric 2079df3605dSDimitry Andric// Load using real address. 2089df3605dSDimitry Andriclet mayLoad = 1 in { 2099df3605dSDimitry Andric def LURA : UnaryRRE<"lura", 0xB24B, null_frag, GR32, GR64>; 2109df3605dSDimitry Andric def LURAG : UnaryRRE<"lurag", 0xB905, null_frag, GR64, GR64>; 2119df3605dSDimitry Andric} 2129df3605dSDimitry Andric 2139df3605dSDimitry Andric// Store using real address. 2149df3605dSDimitry Andriclet mayStore = 1 in { 2159df3605dSDimitry Andric def STURA : SideEffectBinaryRRE<"stura", 0xB246, GR32, GR64>; 2169df3605dSDimitry Andric def STURG : SideEffectBinaryRRE<"sturg", 0xB925, GR64, GR64>; 2179df3605dSDimitry Andric} 2189df3605dSDimitry Andric 2199df3605dSDimitry Andric// Test protection. 2209df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2219df3605dSDimitry Andric def TPROT : SideEffectBinarySSE<"tprot", 0xE501>; 2229df3605dSDimitry Andric 2239df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2249df3605dSDimitry Andric// Memory-move Instructions. 2259df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2269df3605dSDimitry Andric 2279df3605dSDimitry Andric// Move with key. 2289df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in 2299df3605dSDimitry Andric def MVCK : MemoryBinarySSd<"mvck", 0xD9, GR64>; 2309df3605dSDimitry Andric 2319df3605dSDimitry Andric// Move to primary / secondary. 2329df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Defs = [CC] in { 2339df3605dSDimitry Andric def MVCP : MemoryBinarySSd<"mvcp", 0xDA, GR64>; 2349df3605dSDimitry Andric def MVCS : MemoryBinarySSd<"mvcs", 0xDB, GR64>; 2359df3605dSDimitry Andric} 2369df3605dSDimitry Andric 2379df3605dSDimitry Andric// Move with source / destination key. 2389df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L, R1L] in { 2399df3605dSDimitry Andric def MVCSK : SideEffectBinarySSE<"mvcsk", 0xE50E>; 2409df3605dSDimitry Andric def MVCDK : SideEffectBinarySSE<"mvcdk", 0xE50F>; 2419df3605dSDimitry Andric} 2429df3605dSDimitry Andric 2439df3605dSDimitry Andric// Move with optional specifications. 2449df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L] in 2459df3605dSDimitry Andric def MVCOS : SideEffectTernarySSF<"mvcos", 0xC80, GR64>; 2469df3605dSDimitry Andric 2479df3605dSDimitry Andric// Move page. 2489df3605dSDimitry Andriclet mayLoad = 1, mayStore = 1, Uses = [R0L], Defs = [CC] in 2499df3605dSDimitry Andric def MVPG : SideEffectBinaryRRE<"mvpg", 0xB254, GR64, GR64>; 2509df3605dSDimitry Andric 2519df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2529df3605dSDimitry Andric// Address-Space Instructions. 2539df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2549df3605dSDimitry Andric 2559df3605dSDimitry Andric// Load address space parameters. 2569df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2579df3605dSDimitry Andric def LASP : SideEffectBinarySSE<"lasp", 0xE500>; 2589df3605dSDimitry Andric 2599df3605dSDimitry Andric// Purge ALB. 2609df3605dSDimitry Andriclet hasSideEffects = 1 in 2619df3605dSDimitry Andric def PALB : SideEffectInherentRRE<"palb", 0xB248>; 2629df3605dSDimitry Andric 2639df3605dSDimitry Andric// Program call. 2649df3605dSDimitry Andriclet hasSideEffects = 1 in 2659df3605dSDimitry Andric def PC : SideEffectAddressS<"pc", 0xB218, null_frag>; 2669df3605dSDimitry Andric 2679df3605dSDimitry Andric// Program return. 2689df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2699df3605dSDimitry Andric def PR : SideEffectInherentE<"pr", 0x0101>; 2709df3605dSDimitry Andric 2719df3605dSDimitry Andric// Program transfer (with instance). 2729df3605dSDimitry Andriclet hasSideEffects = 1 in { 2739df3605dSDimitry Andric def PT : SideEffectBinaryRRE<"pt", 0xB228, GR32, GR64>; 2749df3605dSDimitry Andric def PTI : SideEffectBinaryRRE<"pti", 0xB99E, GR64, GR64>; 2759df3605dSDimitry Andric} 2769df3605dSDimitry Andric 2779df3605dSDimitry Andric// Resume program. 2789df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 2799df3605dSDimitry Andric def RP : SideEffectAddressS<"rp", 0xB277, null_frag>; 2809df3605dSDimitry Andric 2819df3605dSDimitry Andric// Branch in subspace group. 2829df3605dSDimitry Andriclet hasSideEffects = 1 in 2839df3605dSDimitry Andric def BSG : UnaryRRE<"bsg", 0xB258, null_frag, GR64, GR64>; 2849df3605dSDimitry Andric 2859df3605dSDimitry Andric// Branch and set authority. 2869df3605dSDimitry Andriclet hasSideEffects = 1 in 2879df3605dSDimitry Andric def BSA : UnaryRRE<"bsa", 0xB25A, null_frag, GR64, GR64>; 2889df3605dSDimitry Andric 2899df3605dSDimitry Andric// Test access. 2909df3605dSDimitry Andriclet Defs = [CC] in 2919df3605dSDimitry Andric def TAR : SideEffectBinaryRRE<"tar", 0xB24C, AR32, GR32>; 2929df3605dSDimitry Andric 2939df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2949df3605dSDimitry Andric// Linkage-Stack Instructions. 2959df3605dSDimitry Andric//===----------------------------------------------------------------------===// 2969df3605dSDimitry Andric 2979df3605dSDimitry Andric// Branch and stack. 2989df3605dSDimitry Andriclet hasSideEffects = 1 in 2999df3605dSDimitry Andric def BAKR : SideEffectBinaryRRE<"bakr", 0xB240, GR64, GR64>; 3009df3605dSDimitry Andric 3019df3605dSDimitry Andric// Extract stacked registers. 3029df3605dSDimitry Andriclet hasSideEffects = 1 in { 3039df3605dSDimitry Andric def EREG : SideEffectBinaryRRE<"ereg", 0xB249, GR32, GR32>; 3049df3605dSDimitry Andric def EREGG : SideEffectBinaryRRE<"eregg", 0xB90E, GR64, GR64>; 3059df3605dSDimitry Andric} 3069df3605dSDimitry Andric 3079df3605dSDimitry Andric// Extract stacked state. 3089df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 3099df3605dSDimitry Andric def ESTA : UnaryRRE<"esta", 0xB24A, null_frag, GR128, GR32>; 3109df3605dSDimitry Andric 3119df3605dSDimitry Andric// Modify stacked state. 3129df3605dSDimitry Andriclet hasSideEffects = 1 in 3139df3605dSDimitry Andric def MSTA : SideEffectUnaryRRE<"msta", 0xB247, GR128, null_frag>; 3149df3605dSDimitry Andric 3159df3605dSDimitry Andric//===----------------------------------------------------------------------===// 3169df3605dSDimitry Andric// Time-Related Instructions. 3179df3605dSDimitry Andric//===----------------------------------------------------------------------===// 3189df3605dSDimitry Andric 3199df3605dSDimitry Andric// Perform timing facility function. 3209df3605dSDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R0L, R1D], Defs = [CC] in 3219df3605dSDimitry Andric def PTFF : SideEffectInherentE<"ptff", 0x0104>; 3229df3605dSDimitry Andric 3239df3605dSDimitry Andric// Set clock. 3249df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 3259df3605dSDimitry Andric def SCK : SideEffectUnaryS<"sck", 0xB204, null_frag, 8>; 3269df3605dSDimitry Andric 3279df3605dSDimitry Andric// Set clock programmable field. 3289df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R0L] in 3299df3605dSDimitry Andric def SCKPF : SideEffectInherentE<"sckpf", 0x0107>; 3309df3605dSDimitry Andric 3319df3605dSDimitry Andric// Set clock comparator. 3329df3605dSDimitry Andriclet hasSideEffects = 1 in 3339df3605dSDimitry Andric def SCKC : SideEffectUnaryS<"sckc", 0xB206, null_frag, 8>; 3349df3605dSDimitry Andric 3359df3605dSDimitry Andric// Set CPU timer. 3369df3605dSDimitry Andriclet hasSideEffects = 1 in 3379df3605dSDimitry Andric def SPT : SideEffectUnaryS<"spt", 0xB208, null_frag, 8>; 3389df3605dSDimitry Andric 3399df3605dSDimitry Andric// Store clock (fast / extended). 3409df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in { 3419df3605dSDimitry Andric def STCK : StoreInherentS<"stck", 0xB205, null_frag, 8>; 342ac9a064cSDimitry Andric def STCKF : StoreInherentS<"stckf", 0xB27C, z_stckf, 8>; 3439df3605dSDimitry Andric def STCKE : StoreInherentS<"stcke", 0xB278, null_frag, 16>; 3449df3605dSDimitry Andric} 3459df3605dSDimitry Andric 3469df3605dSDimitry Andric// Store clock comparator. 3479df3605dSDimitry Andriclet hasSideEffects = 1 in 3489df3605dSDimitry Andric def STCKC : StoreInherentS<"stckc", 0xB207, null_frag, 8>; 3499df3605dSDimitry Andric 3509df3605dSDimitry Andric// Store CPU timer. 3519df3605dSDimitry Andriclet hasSideEffects = 1 in 3529df3605dSDimitry Andric def STPT : StoreInherentS<"stpt", 0xB209, null_frag, 8>; 3539df3605dSDimitry Andric 3549df3605dSDimitry Andric//===----------------------------------------------------------------------===// 3559df3605dSDimitry Andric// CPU-Related Instructions. 3569df3605dSDimitry Andric//===----------------------------------------------------------------------===// 3579df3605dSDimitry Andric 3589df3605dSDimitry Andric// Store CPU address. 3599df3605dSDimitry Andriclet hasSideEffects = 1 in 3609df3605dSDimitry Andric def STAP : StoreInherentS<"stap", 0xB212, null_frag, 2>; 3619df3605dSDimitry Andric 3629df3605dSDimitry Andric// Store CPU ID. 3639df3605dSDimitry Andriclet hasSideEffects = 1 in 3649df3605dSDimitry Andric def STIDP : StoreInherentS<"stidp", 0xB202, null_frag, 8>; 3659df3605dSDimitry Andric 3669df3605dSDimitry Andric// Store system information. 3679df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R0L, R1L], Defs = [R0L, CC] in 3689df3605dSDimitry Andric def STSI : StoreInherentS<"stsi", 0xB27D, null_frag, 0>; 3699df3605dSDimitry Andric 3709df3605dSDimitry Andric// Store facility list. 3719df3605dSDimitry Andriclet hasSideEffects = 1 in 3729df3605dSDimitry Andric def STFL : StoreInherentS<"stfl", 0xB2B1, null_frag, 4>; 3739df3605dSDimitry Andric 3749df3605dSDimitry Andric// Store facility list extended. 3759df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 3769df3605dSDimitry Andric def STFLE : StoreInherentS<"stfle", 0xB2B0, null_frag, 0>; 3779df3605dSDimitry Andric 3789df3605dSDimitry Andric// Extract CPU attribute. 3799df3605dSDimitry Andriclet hasSideEffects = 1 in 3809df3605dSDimitry Andric def ECAG : BinaryRSY<"ecag", 0xEB4C, null_frag, GR64>; 3819df3605dSDimitry Andric 3829df3605dSDimitry Andric// Extract CPU time. 3839df3605dSDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Defs = [R0D, R1D] in 3849df3605dSDimitry Andric def ECTG : SideEffectTernarySSF<"ectg", 0xC81, GR64>; 3859df3605dSDimitry Andric 3869df3605dSDimitry Andric// Perform topology function. 3879df3605dSDimitry Andriclet hasSideEffects = 1 in 3889df3605dSDimitry Andric def PTF : UnaryTiedRRE<"ptf", 0xB9A2, GR64>; 3899df3605dSDimitry Andric 3909df3605dSDimitry Andric// Perform cryptographic key management operation. 3919df3605dSDimitry Andriclet Predicates = [FeatureMessageSecurityAssist3], 3929df3605dSDimitry Andric hasSideEffects = 1, Uses = [R0L, R1D] in 3939df3605dSDimitry Andric def PCKMO : SideEffectInherentRRE<"pckmo", 0xB928>; 3949df3605dSDimitry Andric 395344a3780SDimitry Andric// Query processor activity counter information. 396344a3780SDimitry Andriclet Predicates = [FeatureProcessorActivityInstrumentation], 397344a3780SDimitry Andric hasSideEffects = 1, Uses = [R0D], Defs = [R0D, CC] in 398344a3780SDimitry Andric def QPACI : StoreInherentS<"qpaci", 0xB28F, null_frag, 0>; 399344a3780SDimitry Andric 4009df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4019df3605dSDimitry Andric// Miscellaneous Instructions. 4029df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4039df3605dSDimitry Andric 4049df3605dSDimitry Andric// Supervisor call. 4059df3605dSDimitry Andriclet hasSideEffects = 1, isCall = 1, Defs = [CC] in 4069df3605dSDimitry Andric def SVC : SideEffectUnaryI<"svc", 0x0A, imm32zx8>; 4079df3605dSDimitry Andric 4089df3605dSDimitry Andric// Monitor call. 4099df3605dSDimitry Andriclet hasSideEffects = 1, isCall = 1 in 4109df3605dSDimitry Andric def MC : SideEffectBinarySI<"mc", 0xAF, imm32zx8>; 4119df3605dSDimitry Andric 4129df3605dSDimitry Andric// Diagnose. 4139df3605dSDimitry Andriclet hasSideEffects = 1, isCall = 1 in 4149df3605dSDimitry Andric def DIAG : SideEffectTernaryRS<"diag", 0x83, GR32, GR32>; 4159df3605dSDimitry Andric 4169df3605dSDimitry Andric// Trace. 4179df3605dSDimitry Andriclet hasSideEffects = 1, mayLoad = 1 in { 4189df3605dSDimitry Andric def TRACE : SideEffectTernaryRS<"trace", 0x99, GR32, GR32>; 4199df3605dSDimitry Andric def TRACG : SideEffectTernaryRSY<"tracg", 0xEB0F, GR64, GR64>; 4209df3605dSDimitry Andric} 4219df3605dSDimitry Andric 4229df3605dSDimitry Andric// Trap. 4239df3605dSDimitry Andriclet hasSideEffects = 1 in { 4249df3605dSDimitry Andric def TRAP2 : SideEffectInherentE<"trap2", 0x01FF>; 4259df3605dSDimitry Andric def TRAP4 : SideEffectAddressS<"trap4", 0xB2FF, null_frag>; 4269df3605dSDimitry Andric} 4279df3605dSDimitry Andric 4289df3605dSDimitry Andric// Signal processor. 4299df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4309df3605dSDimitry Andric def SIGP : SideEffectTernaryRS<"sigp", 0xAE, GR64, GR64>; 4319df3605dSDimitry Andric 4329df3605dSDimitry Andric// Signal adapter. 4339df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R0D, R1D, R2D, R3D], Defs = [CC] in 4349df3605dSDimitry Andric def SIGA : SideEffectAddressS<"siga", 0xB274, null_frag>; 4359df3605dSDimitry Andric 4369df3605dSDimitry Andric// Start interpretive execution. 4379df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4389df3605dSDimitry Andric def SIE : SideEffectUnaryS<"sie", 0xB214, null_frag, 0>; 4399df3605dSDimitry Andric 4409df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4419df3605dSDimitry Andric// CPU-Measurement Facility Instructions (SA23-2260). 4429df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4439df3605dSDimitry Andric 4449df3605dSDimitry Andric// Load program parameter 4459df3605dSDimitry Andriclet hasSideEffects = 1 in 4469df3605dSDimitry Andric def LPP : SideEffectUnaryS<"lpp", 0xB280, null_frag, 8>; 4479df3605dSDimitry Andric 4489df3605dSDimitry Andric// Extract coprocessor-group address. 4499df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4509df3605dSDimitry Andric def ECPGA : UnaryRRE<"ecpga", 0xB2ED, null_frag, GR32, GR64>; 4519df3605dSDimitry Andric 4529df3605dSDimitry Andric// Extract CPU counter. 4539df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4549df3605dSDimitry Andric def ECCTR : UnaryRRE<"ecctr", 0xB2E4, null_frag, GR64, GR64>; 4559df3605dSDimitry Andric 4569df3605dSDimitry Andric// Extract peripheral counter. 4579df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4589df3605dSDimitry Andric def EPCTR : UnaryRRE<"epctr", 0xB2E5, null_frag, GR64, GR64>; 4599df3605dSDimitry Andric 4609df3605dSDimitry Andric// Load CPU-counter-set controls. 4619df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4629df3605dSDimitry Andric def LCCTL : SideEffectUnaryS<"lcctl", 0xB284, null_frag, 8>; 4639df3605dSDimitry Andric 4649df3605dSDimitry Andric// Load peripheral-counter-set controls. 4659df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4669df3605dSDimitry Andric def LPCTL : SideEffectUnaryS<"lpctl", 0xB285, null_frag, 8>; 4679df3605dSDimitry Andric 4689df3605dSDimitry Andric// Load sampling controls. 4699df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4709df3605dSDimitry Andric def LSCTL : SideEffectUnaryS<"lsctl", 0xB287, null_frag, 0>; 4719df3605dSDimitry Andric 4729df3605dSDimitry Andric// Query sampling information. 4739df3605dSDimitry Andriclet hasSideEffects = 1 in 4749df3605dSDimitry Andric def QSI : StoreInherentS<"qsi", 0xB286, null_frag, 0>; 4759df3605dSDimitry Andric 4769df3605dSDimitry Andric// Query counter information. 4779df3605dSDimitry Andriclet hasSideEffects = 1 in 4789df3605dSDimitry Andric def QCTRI : StoreInherentS<"qctri", 0xB28E, null_frag, 0>; 4799df3605dSDimitry Andric 4809df3605dSDimitry Andric// Set CPU counter. 4819df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4829df3605dSDimitry Andric def SCCTR : SideEffectBinaryRRE<"scctr", 0xB2E0, GR64, GR64>; 4839df3605dSDimitry Andric 4849df3605dSDimitry Andric// Set peripheral counter. 4859df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 4869df3605dSDimitry Andric def SPCTR : SideEffectBinaryRRE<"spctr", 0xB2E1, GR64, GR64>; 4879df3605dSDimitry Andric 4889df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4899df3605dSDimitry Andric// I/O Instructions (Principles of Operation, Chapter 14). 4909df3605dSDimitry Andric//===----------------------------------------------------------------------===// 4919df3605dSDimitry Andric 4929df3605dSDimitry Andric// Clear subchannel. 4939df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 4949df3605dSDimitry Andric def CSCH : SideEffectInherentS<"csch", 0xB230, null_frag>; 4959df3605dSDimitry Andric 4969df3605dSDimitry Andric// Halt subchannel. 4979df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 4989df3605dSDimitry Andric def HSCH : SideEffectInherentS<"hsch", 0xB231, null_frag>; 4999df3605dSDimitry Andric 5009df3605dSDimitry Andric// Modify subchannel. 5019df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5029df3605dSDimitry Andric def MSCH : SideEffectUnaryS<"msch", 0xB232, null_frag, 0>; 5039df3605dSDimitry Andric 5049df3605dSDimitry Andric// Resume subchannel. 5059df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5069df3605dSDimitry Andric def RSCH : SideEffectInherentS<"rsch", 0xB238, null_frag>; 5079df3605dSDimitry Andric 5089df3605dSDimitry Andric// Start subchannel. 5099df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5109df3605dSDimitry Andric def SSCH : SideEffectUnaryS<"ssch", 0xB233, null_frag, 0>; 5119df3605dSDimitry Andric 5129df3605dSDimitry Andric// Store subchannel. 5139df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5149df3605dSDimitry Andric def STSCH : StoreInherentS<"stsch", 0xB234, null_frag, 0>; 5159df3605dSDimitry Andric 5169df3605dSDimitry Andric// Test subchannel. 5179df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5189df3605dSDimitry Andric def TSCH : StoreInherentS<"tsch", 0xB235, null_frag, 0>; 5199df3605dSDimitry Andric 5209df3605dSDimitry Andric// Cancel subchannel. 5219df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5229df3605dSDimitry Andric def XSCH : SideEffectInherentS<"xsch", 0xB276, null_frag>; 5239df3605dSDimitry Andric 5249df3605dSDimitry Andric// Reset channel path. 5259df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L], Defs = [CC] in 5269df3605dSDimitry Andric def RCHP : SideEffectInherentS<"rchp", 0xB23B, null_frag>; 5279df3605dSDimitry Andric 5289df3605dSDimitry Andric// Set channel monitor. 5299df3605dSDimitry Andriclet hasSideEffects = 1, mayLoad = 1, Uses = [R1L, R2D] in 5309df3605dSDimitry Andric def SCHM : SideEffectInherentS<"schm", 0xB23C, null_frag>; 5319df3605dSDimitry Andric 5329df3605dSDimitry Andric// Store channel path status. 5339df3605dSDimitry Andriclet hasSideEffects = 1 in 5349df3605dSDimitry Andric def STCPS : StoreInherentS<"stcps", 0xB23A, null_frag, 0>; 5359df3605dSDimitry Andric 5369df3605dSDimitry Andric// Store channel report word. 5379df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 5389df3605dSDimitry Andric def STCRW : StoreInherentS<"stcrw", 0xB239, null_frag, 0>; 5399df3605dSDimitry Andric 5409df3605dSDimitry Andric// Test pending interruption. 5419df3605dSDimitry Andriclet hasSideEffects = 1, Defs = [CC] in 5429df3605dSDimitry Andric def TPI : StoreInherentS<"tpi", 0xB236, null_frag, 0>; 5439df3605dSDimitry Andric 544ac9a064cSDimitry Andric// Test pending external interruption. 545ac9a064cSDimitry Andriclet hasSideEffects = 1, Defs = [CC], Predicates = [FeatureTestPendingExternalInterruption] in 546ac9a064cSDimitry Andric def TPEI : UnaryRRE<"tpei", 0xB9A1, null_frag, GR64, GR64>; 547ac9a064cSDimitry Andric 5489df3605dSDimitry Andric// Set address limit. 5499df3605dSDimitry Andriclet hasSideEffects = 1, Uses = [R1L] in 5509df3605dSDimitry Andric def SAL : SideEffectInherentS<"sal", 0xB237, null_frag>; 5519df3605dSDimitry Andric 552