1e837bb5cSDimitry Andric//=- AArch64SchedThunderX3T110.td - Marvell ThunderX3 T110 ---*- tablegen -*-=// 2e837bb5cSDimitry Andric// 3e837bb5cSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e837bb5cSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5e837bb5cSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e837bb5cSDimitry Andric// 7e837bb5cSDimitry Andric//===----------------------------------------------------------------------===// 8e837bb5cSDimitry Andric// 9e837bb5cSDimitry Andric// This file defines the scheduling model for Marvell ThunderX3T110 10e837bb5cSDimitry Andric// family of processors. 11e837bb5cSDimitry Andric// 12e837bb5cSDimitry Andric//===----------------------------------------------------------------------===// 13e837bb5cSDimitry Andric 14e837bb5cSDimitry Andric//===----------------------------------------------------------------------===// 15e837bb5cSDimitry Andric// Pipeline Description. 16e837bb5cSDimitry Andric 17e837bb5cSDimitry Andricdef ThunderX3T110Model : SchedMachineModel { 18e837bb5cSDimitry Andric let IssueWidth = 4; // 4 micro-ops dispatched at a time. 19e837bb5cSDimitry Andric let MicroOpBufferSize = 70; // 70 entries in micro-op re-order buffer. 20e837bb5cSDimitry Andric let LoadLatency = 4; // Optimistic load latency. 21e837bb5cSDimitry Andric let MispredictPenalty = 12; // Extra cycles for mispredicted branch. 22e837bb5cSDimitry Andric // Determined via a mix of micro-arch details and experimentation. 23e837bb5cSDimitry Andric let LoopMicroOpBufferSize = 128; // FIXME: might be much bigger in TX3. 24e837bb5cSDimitry Andric let PostRAScheduler = 1; // Using PostRA sched. 25e837bb5cSDimitry Andric let CompleteModel = 1; 26e837bb5cSDimitry Andric 27e837bb5cSDimitry Andric list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F, 28753f127fSDimitry Andric PAUnsupported.F, 29bdd1243dSDimitry Andric SMEUnsupported.F, 30*4c2d3b02SDimitry Andric [HasMTE, HasCSSC]); 31e837bb5cSDimitry Andric // FIXME: Remove when all errors have been fixed. 32e837bb5cSDimitry Andric let FullInstRWOverlapCheck = 0; 33e837bb5cSDimitry Andric} 34e837bb5cSDimitry Andric 35e837bb5cSDimitry Andriclet SchedModel = ThunderX3T110Model in { 36e837bb5cSDimitry Andric 37e837bb5cSDimitry Andric// Issue ports. 38e837bb5cSDimitry Andric 39e837bb5cSDimitry Andric// Port 0: ALU. 40e837bb5cSDimitry Andricdef THX3T110P0 : ProcResource<1>; 41e837bb5cSDimitry Andric 42e837bb5cSDimitry Andric// Port 1: ALU. 43e837bb5cSDimitry Andricdef THX3T110P1 : ProcResource<1>; 44e837bb5cSDimitry Andric 45e837bb5cSDimitry Andric// Port 2: ALU/Branch. 46e837bb5cSDimitry Andricdef THX3T110P2 : ProcResource<1>; 47e837bb5cSDimitry Andric 48e837bb5cSDimitry Andric// Port 3: ALU/Branch. 49e837bb5cSDimitry Andricdef THX3T110P3 : ProcResource<1>; 50e837bb5cSDimitry Andric 51e837bb5cSDimitry Andric// Port 4: Load/Store. 52e837bb5cSDimitry Andricdef THX3T110P4 : ProcResource<1>; 53e837bb5cSDimitry Andric 54e837bb5cSDimitry Andric// Port 5: Load/store. 55e837bb5cSDimitry Andricdef THX3T110P5 : ProcResource<1>; 56e837bb5cSDimitry Andric 57e837bb5cSDimitry Andric// Port 6: FP/Neon/SIMD/Crypto. 58e837bb5cSDimitry Andricdef THX3T110P6FP0 : ProcResource<1>; 59e837bb5cSDimitry Andric 60e837bb5cSDimitry Andric// Port 7: FP/Neon/SIMD/Crypto. 61e837bb5cSDimitry Andricdef THX3T110P7FP1 : ProcResource<1>; 62e837bb5cSDimitry Andric 63e837bb5cSDimitry Andric// Port 8: FP/Neon/SIMD/Crypto. 64e837bb5cSDimitry Andricdef THX3T110P8FP2 : ProcResource<1>; 65e837bb5cSDimitry Andric 66e837bb5cSDimitry Andric// Port 9: FP/Neon/SIMD/Crypto. 67e837bb5cSDimitry Andricdef THX3T110P9FP3 : ProcResource<1>; 68e837bb5cSDimitry Andric 69e837bb5cSDimitry Andric// Port 10: Store Data Unit. 70e837bb5cSDimitry Andricdef THX3T110SD0 : ProcResource<1>; 71e837bb5cSDimitry Andric 72e837bb5cSDimitry Andric// Define groups for the functional units on each issue port. Each group 73e837bb5cSDimitry Andric// created will be used by a WriteRes. 74e837bb5cSDimitry Andric 75e837bb5cSDimitry Andric// Integer divide/mulhi micro-ops only on port I1. 76e837bb5cSDimitry Andricdef THX3T110I1 : ProcResGroup<[THX3T110P1]>; 77e837bb5cSDimitry Andric 78e837bb5cSDimitry Andric// Branch micro-ops on ports I2/I3. 79e837bb5cSDimitry Andricdef THX3T110I23 : ProcResGroup<[THX3T110P2, THX3T110P3]>; 80e837bb5cSDimitry Andric 81e837bb5cSDimitry Andric// Branch micro-ops on ports I1/I2/I3. 82e837bb5cSDimitry Andricdef THX3T110I123 : ProcResGroup<[THX3T110P1, THX3T110P2, THX3T110P3]>; 83e837bb5cSDimitry Andric 84e837bb5cSDimitry Andric// Integer micro-ops on ports I0/I1/I2. 85e837bb5cSDimitry Andricdef THX3T110I012 : ProcResGroup<[THX3T110P0, THX3T110P1, THX3T110P2]>; 86e837bb5cSDimitry Andric 87e837bb5cSDimitry Andric// Integer micro-ops on ports I0/I1/I2/I3. 88e837bb5cSDimitry Andricdef THX3T110I0123 : ProcResGroup<[THX3T110P0, THX3T110P1, 89e837bb5cSDimitry Andric THX3T110P2, THX3T110P3]>; 90e837bb5cSDimitry Andric 91e837bb5cSDimitry Andric// FP micro-ops on ports FP0/FP1/FP2/FP3. 92e837bb5cSDimitry Andricdef THX3T110FP0123 : ProcResGroup<[THX3T110P6FP0, THX3T110P7FP1, 93e837bb5cSDimitry Andric THX3T110P8FP2, THX3T110P9FP3]>; 94e837bb5cSDimitry Andric 95e837bb5cSDimitry Andric// FP micro-ops on ports FP2/FP3. 96e837bb5cSDimitry Andricdef THX3T110FP23 : ProcResGroup<[THX3T110P8FP2, THX3T110P9FP3]>; 97e837bb5cSDimitry Andric 98e837bb5cSDimitry Andric// ASIMD micro-ops on ports FP0/FP1/FP2/FP3. 99e837bb5cSDimitry Andricdef THX3T110SIMD : ProcResGroup<[THX3T110P6FP0, THX3T110P7FP1, 100e837bb5cSDimitry Andric THX3T110P8FP2, THX3T110P9FP3]>; 101e837bb5cSDimitry Andric 102e837bb5cSDimitry Andric// Store data micro-ops only on port 10. 103e837bb5cSDimitry Andricdef THX3T110SD : ProcResGroup<[THX3T110SD0]>; 104e837bb5cSDimitry Andric 105e837bb5cSDimitry Andric// Load/store micro-ops on ports P4/P5. 106e837bb5cSDimitry Andricdef THX3T110LS : ProcResGroup<[THX3T110P4, THX3T110P5]>; 107e837bb5cSDimitry Andric 108e837bb5cSDimitry Andric// 70 entry unified scheduler. 109e837bb5cSDimitry Andricdef THX3T110ANY: ProcResGroup<[THX3T110P0, THX3T110P1, THX3T110P2, 110e837bb5cSDimitry Andric THX3T110P3, THX3T110P4, THX3T110P5, 111e837bb5cSDimitry Andric THX3T110P6FP0, THX3T110P7FP1, 112e837bb5cSDimitry Andric THX3T110P8FP2, THX3T110P9FP3]> { 113e837bb5cSDimitry Andric let BufferSize = 70; 114e837bb5cSDimitry Andric} 115e837bb5cSDimitry Andric 116e837bb5cSDimitry Andric// Define commonly used write types for InstRW specializations. 117e837bb5cSDimitry Andric// All definitions follow the format: THX3T110Write_<NumCycles>Cyc_<Resources>. 118e837bb5cSDimitry Andric 119e837bb5cSDimitry Andric// 3 cycles on I1. 120e837bb5cSDimitry Andricdef THX3T110Write_3Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 121e837bb5cSDimitry Andric let Latency = 3; 122e837bb5cSDimitry Andric let NumMicroOps = 2; 123e837bb5cSDimitry Andric} 124e837bb5cSDimitry Andric 125e837bb5cSDimitry Andric// 4 cycles on I1. 126e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 127e837bb5cSDimitry Andric let Latency = 4; 128e837bb5cSDimitry Andric let NumMicroOps = 2; 129e837bb5cSDimitry Andric} 130e837bb5cSDimitry Andric 131e837bb5cSDimitry Andric// 5 cycles on I1. 132e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 133e837bb5cSDimitry Andric let Latency = 5; 134e837bb5cSDimitry Andric let NumMicroOps = 2; 135e837bb5cSDimitry Andric} 136e837bb5cSDimitry Andric 137e837bb5cSDimitry Andric// 7 cycles on I1. 138e837bb5cSDimitry Andricdef THX3T110Write_7Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 139e837bb5cSDimitry Andric let Latency = 7; 140e837bb5cSDimitry Andric let NumMicroOps = 3; 141e837bb5cSDimitry Andric} 142e837bb5cSDimitry Andric 143e837bb5cSDimitry Andric// 23 cycles on I1. 144e837bb5cSDimitry Andricdef THX3T110Write_23Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 145e837bb5cSDimitry Andric let Latency = 23; 1465f757f3fSDimitry Andric let ReleaseAtCycles = [13, 23]; 147e837bb5cSDimitry Andric let NumMicroOps = 4; 148e837bb5cSDimitry Andric} 149e837bb5cSDimitry Andric 150e837bb5cSDimitry Andric// 39 cycles on I1. 151e837bb5cSDimitry Andricdef THX3T110Write_39Cyc_I1 : SchedWriteRes<[THX3T110I1]> { 152e837bb5cSDimitry Andric let Latency = 39; 1535f757f3fSDimitry Andric let ReleaseAtCycles = [13, 39]; 154e837bb5cSDimitry Andric let NumMicroOps = 4; 155e837bb5cSDimitry Andric} 156e837bb5cSDimitry Andric 157e837bb5cSDimitry Andric// 1 cycle on I2/I3 158e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_I23 : SchedWriteRes<[THX3T110I23]> { 159e837bb5cSDimitry Andric let Latency = 1; 160e837bb5cSDimitry Andric let NumMicroOps = 2; 161e837bb5cSDimitry Andric} 162e837bb5cSDimitry Andric 163e837bb5cSDimitry Andric// 8 cycles on I2/I3 164e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_I23 : SchedWriteRes<[THX3T110I23]> { 165e837bb5cSDimitry Andric let Latency = 8; 166e837bb5cSDimitry Andric let NumMicroOps = 3; 167e837bb5cSDimitry Andric} 168e837bb5cSDimitry Andric 169e837bb5cSDimitry Andric// 1 cycle on I1/I2/I3 170e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_I123 : SchedWriteRes<[THX3T110I123]> { 171e837bb5cSDimitry Andric let Latency = 1; 172e837bb5cSDimitry Andric let NumMicroOps = 2; 173e837bb5cSDimitry Andric} 174e837bb5cSDimitry Andric 175e837bb5cSDimitry Andric// 8 cycles on I1/I2/I3 176e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_I123 : SchedWriteRes<[THX3T110I123]> { 177e837bb5cSDimitry Andric let Latency = 8; 178e837bb5cSDimitry Andric let NumMicroOps = 3; 179e837bb5cSDimitry Andric} 180e837bb5cSDimitry Andric 181e837bb5cSDimitry Andric// 1 cycle on I0/I1/I2/I3. 182e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 183e837bb5cSDimitry Andric let Latency = 1; 184e837bb5cSDimitry Andric let NumMicroOps = 2; 185e837bb5cSDimitry Andric} 186e837bb5cSDimitry Andric 187e837bb5cSDimitry Andric// 2 cycles on I0/I1/I2/I3. 188e837bb5cSDimitry Andricdef THX3T110Write_2Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 189e837bb5cSDimitry Andric let Latency = 2; 190e837bb5cSDimitry Andric let NumMicroOps = 2; 191e837bb5cSDimitry Andric} 192e837bb5cSDimitry Andric 193e837bb5cSDimitry Andric// 3 cycles on I0/I1/I2/I3. 194e837bb5cSDimitry Andricdef THX3T110Write_3Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 195e837bb5cSDimitry Andric let Latency = 3; 196e837bb5cSDimitry Andric let NumMicroOps = 2; 197e837bb5cSDimitry Andric} 198e837bb5cSDimitry Andric 199e837bb5cSDimitry Andric// 4 cycles on I0/I1/I2/I3. 200e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 201e837bb5cSDimitry Andric let Latency = 4; 202e837bb5cSDimitry Andric let NumMicroOps = 3; 203e837bb5cSDimitry Andric} 204e837bb5cSDimitry Andric 205e837bb5cSDimitry Andric// 5 cycles on I0/I1/I2/I3. 206e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 207e837bb5cSDimitry Andric let Latency = 5; 208e837bb5cSDimitry Andric let NumMicroOps = 3; 209e837bb5cSDimitry Andric} 210e837bb5cSDimitry Andric 211e837bb5cSDimitry Andric// 6 cycles on I0/I1/I2/I3. 212e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 213e837bb5cSDimitry Andric let Latency = 6; 214e837bb5cSDimitry Andric let NumMicroOps = 3; 215e837bb5cSDimitry Andric} 216e837bb5cSDimitry Andric 217e837bb5cSDimitry Andric// 8 cycles on I0/I1/I2/I3. 218e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 219e837bb5cSDimitry Andric let Latency = 8; 220e837bb5cSDimitry Andric let NumMicroOps = 4; 221e837bb5cSDimitry Andric} 222e837bb5cSDimitry Andric 223e837bb5cSDimitry Andric// 13 cycles on I0/I1/I2/I3. 224e837bb5cSDimitry Andricdef THX3T110Write_13Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 225e837bb5cSDimitry Andric let Latency = 13; 226e837bb5cSDimitry Andric let NumMicroOps = 3; 227e837bb5cSDimitry Andric} 228e837bb5cSDimitry Andric 229e837bb5cSDimitry Andric// 23 cycles on I0/I1/I2/I3. 230e837bb5cSDimitry Andricdef THX3T110Write_23Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 231e837bb5cSDimitry Andric let Latency = 23; 232e837bb5cSDimitry Andric let NumMicroOps = 3; 233e837bb5cSDimitry Andric} 234e837bb5cSDimitry Andric 235e837bb5cSDimitry Andric// 39 cycles on I0/I1/I2/I3. 236e837bb5cSDimitry Andricdef THX3T110Write_39Cyc_I0123 : SchedWriteRes<[THX3T110I0123]> { 237e837bb5cSDimitry Andric let Latency = 39; 238e837bb5cSDimitry Andric let NumMicroOps = 3; 239e837bb5cSDimitry Andric} 240e837bb5cSDimitry Andric 241e837bb5cSDimitry Andric// 4 cycles on F2/F3. 242e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_F23 : SchedWriteRes<[THX3T110FP23]> { 243e837bb5cSDimitry Andric let Latency = 4; 244e837bb5cSDimitry Andric let NumMicroOps = 2; 245e837bb5cSDimitry Andric} 246e837bb5cSDimitry Andric 247e837bb5cSDimitry Andric// 5 cycles on F0/F1/F2/F3. 248e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 249e837bb5cSDimitry Andric let Latency = 5; 250e837bb5cSDimitry Andric let NumMicroOps = 2; 251e837bb5cSDimitry Andric} 252e837bb5cSDimitry Andric 253e837bb5cSDimitry Andric// 6 cycles on F0/F1/F2/F3. 254e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 255e837bb5cSDimitry Andric let Latency = 6; 256e837bb5cSDimitry Andric let NumMicroOps = 3; 257e837bb5cSDimitry Andric} 258e837bb5cSDimitry Andric 259e837bb5cSDimitry Andric// 7 cycles on F0/F1/F2/F3. 260e837bb5cSDimitry Andricdef THX3T110Write_7Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 261e837bb5cSDimitry Andric let Latency = 7; 262e837bb5cSDimitry Andric let NumMicroOps = 3; 263e837bb5cSDimitry Andric} 264e837bb5cSDimitry Andric 265e837bb5cSDimitry Andric// 8 cycles on F0/F1/F2/F3. 266e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 267e837bb5cSDimitry Andric let Latency = 8; 268e837bb5cSDimitry Andric let NumMicroOps = 3; 269e837bb5cSDimitry Andric} 270e837bb5cSDimitry Andric 271e837bb5cSDimitry Andric// 10 cycles on F0/F1/F2/F3. 272e837bb5cSDimitry Andricdef THX3T110Write_10Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 273e837bb5cSDimitry Andric let Latency = 10; 274e837bb5cSDimitry Andric let NumMicroOps = 3; 275e837bb5cSDimitry Andric} 276e837bb5cSDimitry Andric 277e837bb5cSDimitry Andric// 16 cycles on F0/F1/F2/F3. 278e837bb5cSDimitry Andricdef THX3T110Write_16Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 279e837bb5cSDimitry Andric let Latency = 16; 280e837bb5cSDimitry Andric let NumMicroOps = 3; 2815f757f3fSDimitry Andric let ReleaseAtCycles = [8]; 282e837bb5cSDimitry Andric} 283e837bb5cSDimitry Andric 284e837bb5cSDimitry Andric// 23 cycles on F0/F1/F2/F3. 285e837bb5cSDimitry Andricdef THX3T110Write_23Cyc_F01 : SchedWriteRes<[THX3T110FP0123]> { 286e837bb5cSDimitry Andric let Latency = 23; 287e837bb5cSDimitry Andric let NumMicroOps = 3; 2885f757f3fSDimitry Andric let ReleaseAtCycles = [11]; 289e837bb5cSDimitry Andric} 290e837bb5cSDimitry Andric 291e837bb5cSDimitry Andric// 1 cycle on LS0/LS1. 292e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 293e837bb5cSDimitry Andric let Latency = 1; 294e837bb5cSDimitry Andric let NumMicroOps = 1; 295e837bb5cSDimitry Andric} 296e837bb5cSDimitry Andric 297e837bb5cSDimitry Andric// 2 cycles on LS0/LS1. 298e837bb5cSDimitry Andricdef THX3T110Write_2Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 299e837bb5cSDimitry Andric let Latency = 2; 300e837bb5cSDimitry Andric let NumMicroOps = 2; 301e837bb5cSDimitry Andric} 302e837bb5cSDimitry Andric 303e837bb5cSDimitry Andric// 4 cycles on LS0/LS1. 304e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 305e837bb5cSDimitry Andric let Latency = 4; 306e837bb5cSDimitry Andric let NumMicroOps = 2; 3075f757f3fSDimitry Andric let ReleaseAtCycles = [2]; 308e837bb5cSDimitry Andric} 309e837bb5cSDimitry Andric 310e837bb5cSDimitry Andric// 5 cycles on LS0/LS1. 311e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 312e837bb5cSDimitry Andric let Latency = 5; 313e837bb5cSDimitry Andric let NumMicroOps = 3; 314e837bb5cSDimitry Andric} 315e837bb5cSDimitry Andric 316e837bb5cSDimitry Andric// 6 cycles on LS0/LS1. 317e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 318e837bb5cSDimitry Andric let Latency = 6; 319e837bb5cSDimitry Andric let NumMicroOps = 3; 320e837bb5cSDimitry Andric} 321e837bb5cSDimitry Andric 322e837bb5cSDimitry Andric// 4 + 5 cycles on LS0/LS1. 323e837bb5cSDimitry Andric// First resource is available after 4 cycles. 324e837bb5cSDimitry Andric// Second resource is available after 5 cycles. 325e837bb5cSDimitry Andric// Load vector pair, immed offset, Q-form [LDP/LDNP]. 326e837bb5cSDimitry Andricdef THX3T110Write_4_5Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 327e837bb5cSDimitry Andric let Latency = 4; 328e837bb5cSDimitry Andric let NumMicroOps = 2; 3295f757f3fSDimitry Andric let ReleaseAtCycles = [4, 5]; 330e837bb5cSDimitry Andric} 331e837bb5cSDimitry Andric 332e837bb5cSDimitry Andric// 4 + 8 cycles on LS0/LS1. 333e837bb5cSDimitry Andric// First resource is available after 4 cycles. 334e837bb5cSDimitry Andric// Second resource is available after 8 cycles. 335e837bb5cSDimitry Andric// Load vector pair, immed offset, S/D-form [LDP/LDNP]. 336e837bb5cSDimitry Andricdef THX3T110Write_4_8Cyc_LS01 : SchedWriteRes<[THX3T110LS]> { 337e837bb5cSDimitry Andric let Latency = 4; 338e837bb5cSDimitry Andric let NumMicroOps = 2; 3395f757f3fSDimitry Andric let ReleaseAtCycles = [4, 8]; 340e837bb5cSDimitry Andric} 341e837bb5cSDimitry Andric 342e837bb5cSDimitry Andric// 11 cycles on LS0/LS1 and I1. 343e837bb5cSDimitry Andricdef THX3T110Write_11Cyc_LS01_I1 : 344e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I1]> { 345e837bb5cSDimitry Andric let Latency = 11; 346e837bb5cSDimitry Andric let NumMicroOps = 4; 347e837bb5cSDimitry Andric} 348e837bb5cSDimitry Andric 349e837bb5cSDimitry Andric// 1 cycles on LS0/LS1 and I0/I1/I2/I3. 350e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01_I0123 : 351e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 352e837bb5cSDimitry Andric let Latency = 1; 353e837bb5cSDimitry Andric let NumMicroOps = 2; 354e837bb5cSDimitry Andric} 355e837bb5cSDimitry Andric 356e837bb5cSDimitry Andric// 1 cycles on LS0/LS1 and 2 of I0/I1/I2/I3. 357e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01_I0123_I0123 : 358e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123, THX3T110I0123]> { 359e837bb5cSDimitry Andric let Latency = 1; 360e837bb5cSDimitry Andric let NumMicroOps = 3; 361e837bb5cSDimitry Andric} 362e837bb5cSDimitry Andric 363e837bb5cSDimitry Andric// 4 cycles on LS0/LS1 and I0/I1/I2/I3. 364e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_LS01_I0123 : 365e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 366e837bb5cSDimitry Andric let Latency = 4; 367e837bb5cSDimitry Andric let NumMicroOps = 3; 368e837bb5cSDimitry Andric} 369e837bb5cSDimitry Andric 370e837bb5cSDimitry Andric// 4 cycles on LS0/LS1 and 2 of I0/I1/I2/I3. 371e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_LS01_I0123_I0123 : 372e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123, THX3T110I0123]> { 373e837bb5cSDimitry Andric let Latency = 4; 374e837bb5cSDimitry Andric let NumMicroOps = 3; 375e837bb5cSDimitry Andric} 376e837bb5cSDimitry Andric 377e837bb5cSDimitry Andric// 5 cycles on LS0/LS1 and I0/I1/I2/I3. 378e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01_I0123 : 379e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 380e837bb5cSDimitry Andric let Latency = 5; 381e837bb5cSDimitry Andric let NumMicroOps = 3; 382e837bb5cSDimitry Andric} 383e837bb5cSDimitry Andric 384e837bb5cSDimitry Andric// 5 cycles on LS0/LS1 and 2 of I0/I1/I2/I3. 385e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01_I0123_I0123 : 386e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123, THX3T110I0123]> { 387e837bb5cSDimitry Andric let Latency = 5; 388e837bb5cSDimitry Andric let NumMicroOps = 3; 389e837bb5cSDimitry Andric} 390e837bb5cSDimitry Andric 391e837bb5cSDimitry Andric// 6 cycles on LS0/LS1 and I0/I1/I2/I3. 392e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01_I012 : 393e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 394e837bb5cSDimitry Andric let Latency = 6; 395e837bb5cSDimitry Andric let NumMicroOps = 4; 396e837bb5cSDimitry Andric} 397e837bb5cSDimitry Andric 398e837bb5cSDimitry Andric// 6 cycles on LS0/LS1 and 2 of I0/I1/I2/I3. 399e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01_I0123_I0123 : 400e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123, THX3T110I0123]> { 401e837bb5cSDimitry Andric let Latency = 6; 402e837bb5cSDimitry Andric let NumMicroOps = 3; 403e837bb5cSDimitry Andric} 404e837bb5cSDimitry Andric 405e837bb5cSDimitry Andric// 1 cycle on LS0/LS1 and SD. 406e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01_SD : 407e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD]> { 408e837bb5cSDimitry Andric let Latency = 1; 409e837bb5cSDimitry Andric let NumMicroOps = 2; 410e837bb5cSDimitry Andric} 411e837bb5cSDimitry Andric 412e837bb5cSDimitry Andric// 2 cycles on LS0/LS1 and SD. 413e837bb5cSDimitry Andricdef THX3T110Write_2Cyc_LS01_SD : 414e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD]> { 415e837bb5cSDimitry Andric let Latency = 2; 416e837bb5cSDimitry Andric let NumMicroOps = 2; 417e837bb5cSDimitry Andric} 418e837bb5cSDimitry Andric 419e837bb5cSDimitry Andric// 4 cycles on LS0/LS1 and SD. 420e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_LS01_SD : 421e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD]> { 422e837bb5cSDimitry Andric let Latency = 4; 423e837bb5cSDimitry Andric let NumMicroOps = 3; 424e837bb5cSDimitry Andric} 425e837bb5cSDimitry Andric 426e837bb5cSDimitry Andric// 5 cycles on LS0/LS1 and SD. 427e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01_SD : 428e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD]> { 429e837bb5cSDimitry Andric let Latency = 5; 430e837bb5cSDimitry Andric let NumMicroOps = 4; 431e837bb5cSDimitry Andric} 432e837bb5cSDimitry Andric 433e837bb5cSDimitry Andric// 6 cycles on LS0/LS1 and SD. 434e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01_SD : 435e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD]> { 436e837bb5cSDimitry Andric let Latency = 6; 437e837bb5cSDimitry Andric let NumMicroOps = 5; 438e837bb5cSDimitry Andric} 439e837bb5cSDimitry Andric 440e837bb5cSDimitry Andric// 1 cycle on LS0/LS1, SD and I0/I1/I2/I3. 441e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01_SD_I0123 : 442e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD, THX3T110I0123]> { 443e837bb5cSDimitry Andric let Latency = 1; 444e837bb5cSDimitry Andric let NumMicroOps = 2; 445e837bb5cSDimitry Andric} 446e837bb5cSDimitry Andric 447e837bb5cSDimitry Andric// 2 cycles on LS0/LS1, SD and I0/I1/I2/I3. 448e837bb5cSDimitry Andricdef THX3T110Write_2Cyc_LS01_SD_I0123 : 449e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD, THX3T110I0123]> { 450e837bb5cSDimitry Andric let Latency = 2; 451e837bb5cSDimitry Andric let NumMicroOps = 2; 452e837bb5cSDimitry Andric} 453e837bb5cSDimitry Andric 454e837bb5cSDimitry Andric// 4 cycles on LS0/LS1, SD and I0/I1/I2/I3. 455e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_LS01_SD_I0123 : 456e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD, THX3T110I0123]> { 457e837bb5cSDimitry Andric let Latency = 4; 458e837bb5cSDimitry Andric let NumMicroOps = 3; 459e837bb5cSDimitry Andric} 460e837bb5cSDimitry Andric 461e837bb5cSDimitry Andric// 5 cycles on LS0/LS1, SD and I0/I1/I2/I3. 462e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01_SD_I0123 : 463e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD, THX3T110I0123]> { 464e837bb5cSDimitry Andric let Latency = 5; 465e837bb5cSDimitry Andric let NumMicroOps = 4; 466e837bb5cSDimitry Andric} 467e837bb5cSDimitry Andric 468e837bb5cSDimitry Andric// 6 cycles on LS0/LS1, SD and I0/I1/I2/I3. 469e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01_SD_I0123 : 470e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110SD, THX3T110I0123]> { 471e837bb5cSDimitry Andric let Latency = 6; 472e837bb5cSDimitry Andric let NumMicroOps = 5; 473e837bb5cSDimitry Andric} 474e837bb5cSDimitry Andric 475e837bb5cSDimitry Andric// 1 cycles on LS0/LS1 and F0/F1/F2/F3. 476e837bb5cSDimitry Andricdef THX3T110Write_1Cyc_LS01_F0123 : 477e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110FP0123]> { 478e837bb5cSDimitry Andric let Latency = 1; 479e837bb5cSDimitry Andric let NumMicroOps = 2; 480e837bb5cSDimitry Andric} 481e837bb5cSDimitry Andric 482e837bb5cSDimitry Andric// 5 cycles on LS0/LS1 and F0/F1/F2/F3. 483e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_LS01_F0123 : 484e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110FP0123]> { 485e837bb5cSDimitry Andric let Latency = 5; 486e837bb5cSDimitry Andric let NumMicroOps = 3; 487e837bb5cSDimitry Andric} 488e837bb5cSDimitry Andric 489e837bb5cSDimitry Andric// 6 cycles on LS0/LS1 and F0/F1/F2/F3. 490e837bb5cSDimitry Andricdef THX3T110Write_6Cyc_LS01_F0123 : 491e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110FP0123]> { 492e837bb5cSDimitry Andric let Latency = 6; 493e837bb5cSDimitry Andric let NumMicroOps = 3; 494e837bb5cSDimitry Andric} 495e837bb5cSDimitry Andric 496e837bb5cSDimitry Andric// 7 cycles on LS0/LS1 and F0/F1/F2/F3. 497e837bb5cSDimitry Andricdef THX3T110Write_7Cyc_LS01_F0123 : 498e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110FP0123]> { 499e837bb5cSDimitry Andric let Latency = 7; 500e837bb5cSDimitry Andric let NumMicroOps = 3; 501e837bb5cSDimitry Andric} 502e837bb5cSDimitry Andric 503e837bb5cSDimitry Andric// 8 cycles on LS0/LS1 and F0/F1/F2/F3. 504e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_LS01_F0123 : 505e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110FP0123]> { 506e837bb5cSDimitry Andric let Latency = 8; 507e837bb5cSDimitry Andric let NumMicroOps = 3; 508e837bb5cSDimitry Andric} 509e837bb5cSDimitry Andric 510e837bb5cSDimitry Andric// 8 cycles on LS0/LS1 and I0/I1/I2/I3. 511e837bb5cSDimitry Andricdef THX3T110Write_8Cyc_LS01_I0123 : 512e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 513e837bb5cSDimitry Andric let Latency = 8; 514e837bb5cSDimitry Andric let NumMicroOps = 3; 515e837bb5cSDimitry Andric} 516e837bb5cSDimitry Andric 517e837bb5cSDimitry Andric// 12 cycles on LS0/LS1 and I0/I1/I2/I3. 518e837bb5cSDimitry Andricdef THX3T110Write_12Cyc_LS01_I0123 : 519e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 520e837bb5cSDimitry Andric let Latency = 12; 521e837bb5cSDimitry Andric let NumMicroOps = 4; 522e837bb5cSDimitry Andric} 523e837bb5cSDimitry Andric 524e837bb5cSDimitry Andric// 16 cycles on LS0/LS1 and I0/I1/I2/I3. 525e837bb5cSDimitry Andricdef THX3T110Write_16Cyc_LS01_I0123 : 526e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 527e837bb5cSDimitry Andric let Latency = 16; 528e837bb5cSDimitry Andric let NumMicroOps = 5; 529e837bb5cSDimitry Andric} 530e837bb5cSDimitry Andric 531e837bb5cSDimitry Andric// 24 cycles on LS0/LS1 and I0/I1/I2/I3. 532e837bb5cSDimitry Andricdef THX3T110Write_24Cyc_LS01_I0123 : 533e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 534e837bb5cSDimitry Andric let Latency = 24; 535e837bb5cSDimitry Andric let NumMicroOps = 10; 536e837bb5cSDimitry Andric} 537e837bb5cSDimitry Andric 538e837bb5cSDimitry Andric// 32 cycles on LS0/LS1 and I0/I1/I2/I3. 539e837bb5cSDimitry Andricdef THX3T110Write_32Cyc_LS01_I0123 : 540e837bb5cSDimitry Andric SchedWriteRes<[THX3T110LS, THX3T110I0123]> { 541e837bb5cSDimitry Andric let Latency = 32; 542e837bb5cSDimitry Andric let NumMicroOps = 14; 543e837bb5cSDimitry Andric} 544e837bb5cSDimitry Andric 545e837bb5cSDimitry Andric// 3 cycles on F0/F1/F2/F3. 546e837bb5cSDimitry Andricdef THX3T110Write_3Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 547e837bb5cSDimitry Andric let Latency = 3; 548e837bb5cSDimitry Andric let NumMicroOps = 2; 549e837bb5cSDimitry Andric} 550e837bb5cSDimitry Andric 551e837bb5cSDimitry Andric// 4 cycles on F0/F1/F2/F3. 552e837bb5cSDimitry Andricdef THX3T110Write_4Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 553e837bb5cSDimitry Andric let Latency = 4; 554e837bb5cSDimitry Andric let NumMicroOps = 2; 555e837bb5cSDimitry Andric} 556e837bb5cSDimitry Andric 557e837bb5cSDimitry Andric// 5 cycles on F0/F1/F2/F3. 558e837bb5cSDimitry Andricdef THX3T110Write_5Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 559e837bb5cSDimitry Andric let Latency = 5; 560e837bb5cSDimitry Andric let NumMicroOps = 2; 561e837bb5cSDimitry Andric} 562e837bb5cSDimitry Andric 563e837bb5cSDimitry Andric// 10 cycles on F0/F1/F2/F3. 564e837bb5cSDimitry Andricdef THX3T110Write_10Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 565e837bb5cSDimitry Andric let Latency = 10; 566e837bb5cSDimitry Andric let NumMicroOps = 4; 567e837bb5cSDimitry Andric} 568e837bb5cSDimitry Andric 569e837bb5cSDimitry Andric// 15 cycles on F0/F1/F2/F3. 570e837bb5cSDimitry Andricdef THX3T110Write_15Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 571e837bb5cSDimitry Andric let Latency = 15; 572e837bb5cSDimitry Andric let NumMicroOps = 7; 573e837bb5cSDimitry Andric} 574e837bb5cSDimitry Andric 575e837bb5cSDimitry Andric// 16 cycles on F0/F1/F2/F3. 576e837bb5cSDimitry Andricdef THX3T110Write_16Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 577e837bb5cSDimitry Andric let Latency = 16; 578e837bb5cSDimitry Andric let NumMicroOps = 3; 579e837bb5cSDimitry Andric} 580e837bb5cSDimitry Andric 581e837bb5cSDimitry Andric// 18 cycles on F0/F1/F2/F3. 582e837bb5cSDimitry Andricdef THX3T110Write_18Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 583e837bb5cSDimitry Andric let Latency = 18; 584e837bb5cSDimitry Andric let NumMicroOps = 3; 585e837bb5cSDimitry Andric} 586e837bb5cSDimitry Andric 587e837bb5cSDimitry Andric// 19 cycles on F0/F1/F2/F3. 588e837bb5cSDimitry Andricdef THX3T110Write_19Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 589e837bb5cSDimitry Andric let Latency = 19; 590e837bb5cSDimitry Andric let NumMicroOps = 4; 591e837bb5cSDimitry Andric} 592e837bb5cSDimitry Andric 593e837bb5cSDimitry Andric// 20 cycles on F0/F1/F2/F3. 594e837bb5cSDimitry Andricdef THX3T110Write_20Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 595e837bb5cSDimitry Andric let Latency = 20; 596e837bb5cSDimitry Andric let NumMicroOps = 4; 597e837bb5cSDimitry Andric} 598e837bb5cSDimitry Andric 599e837bb5cSDimitry Andric// 23 cycles on F0/F1/F2/F3. 600e837bb5cSDimitry Andricdef THX3T110Write_23Cyc_F0123 : SchedWriteRes<[THX3T110FP0123]> { 601e837bb5cSDimitry Andric let Latency = 23; 602e837bb5cSDimitry Andric let NumMicroOps = 4; 603e837bb5cSDimitry Andric} 604e837bb5cSDimitry Andric 605e837bb5cSDimitry Andric// 3 cycles on F2/F3 and 4 cycles on F0/F1/F2/F3. 606e837bb5cSDimitry Andricdef THX3T110Write_3_4Cyc_F23_F0123 : 607e837bb5cSDimitry Andric SchedWriteRes<[THX3T110FP23, THX3T110FP0123]> { 608e837bb5cSDimitry Andric let Latency = 3; 609e837bb5cSDimitry Andric let NumMicroOps = 2; 6105f757f3fSDimitry Andric let ReleaseAtCycles = [3, 4]; 611e837bb5cSDimitry Andric} 612e837bb5cSDimitry Andric 613e837bb5cSDimitry Andric 614e837bb5cSDimitry Andric// Define commonly used read types. 615e837bb5cSDimitry Andric 616e837bb5cSDimitry Andric// No forwarding is provided for these types. 617e837bb5cSDimitry Andricdef : ReadAdvance<ReadI, 0>; 618e837bb5cSDimitry Andricdef : ReadAdvance<ReadISReg, 0>; 619e837bb5cSDimitry Andricdef : ReadAdvance<ReadIEReg, 0>; 620e837bb5cSDimitry Andricdef : ReadAdvance<ReadIM, 0>; 621e837bb5cSDimitry Andricdef : ReadAdvance<ReadIMA, 0>; 622e837bb5cSDimitry Andricdef : ReadAdvance<ReadID, 0>; 623e837bb5cSDimitry Andricdef : ReadAdvance<ReadExtrHi, 0>; 624e837bb5cSDimitry Andricdef : ReadAdvance<ReadAdrBase, 0>; 625e837bb5cSDimitry Andricdef : ReadAdvance<ReadVLD, 0>; 626349cc55cSDimitry Andricdef : ReadAdvance<ReadST, 0>; 627e837bb5cSDimitry Andric 628e837bb5cSDimitry Andric//===----------------------------------------------------------------------===// 629e837bb5cSDimitry Andric// 3. Instruction Tables. 630e837bb5cSDimitry Andric 631e837bb5cSDimitry Andric//--- 632e837bb5cSDimitry Andric// 3.1 Branch Instructions 633e837bb5cSDimitry Andric//--- 634e837bb5cSDimitry Andric 635e837bb5cSDimitry Andric// Branch, immed 636e837bb5cSDimitry Andric// Branch and link, immed 637e837bb5cSDimitry Andric// Compare and branch 638e837bb5cSDimitry Andricdef : WriteRes<WriteBr, [THX3T110I23]> { 639e837bb5cSDimitry Andric let Latency = 1; 640e837bb5cSDimitry Andric let NumMicroOps = 2; 641e837bb5cSDimitry Andric} 642e837bb5cSDimitry Andric 643e837bb5cSDimitry Andric// Branch, register 644e837bb5cSDimitry Andric// Branch and link, register != LR 645e837bb5cSDimitry Andric// Branch and link, register = LR 646e837bb5cSDimitry Andricdef : WriteRes<WriteBrReg, [THX3T110I23]> { 647e837bb5cSDimitry Andric let Latency = 1; 648e837bb5cSDimitry Andric let NumMicroOps = 2; 649e837bb5cSDimitry Andric} 650e837bb5cSDimitry Andric 651e837bb5cSDimitry Andricdef : WriteRes<WriteSys, []> { let Latency = 1; } 652e837bb5cSDimitry Andricdef : WriteRes<WriteBarrier, []> { let Latency = 1; } 653e837bb5cSDimitry Andricdef : WriteRes<WriteHint, []> { let Latency = 1; } 654e837bb5cSDimitry Andric 655e837bb5cSDimitry Andricdef : WriteRes<WriteAtomic, []> { 656e837bb5cSDimitry Andric let Latency = 4; 657e837bb5cSDimitry Andric let NumMicroOps = 2; 658e837bb5cSDimitry Andric} 659e837bb5cSDimitry Andric 660e837bb5cSDimitry Andric//--- 661e837bb5cSDimitry Andric// Branch 662e837bb5cSDimitry Andric//--- 663e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I23], (instrs B, BL, BR, BLR)>; 664e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I23], (instrs Bcc)>; 665e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I23], (instrs RET)>; 666e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I23], 667e837bb5cSDimitry Andric (instrs CBZW, CBZX, CBNZW, CBNZX, TBZW, TBZX, TBNZW, TBNZX)>; 668e837bb5cSDimitry Andric 669e837bb5cSDimitry Andric//--- 670e837bb5cSDimitry Andric// 3.2 Arithmetic and Logical Instructions 671e837bb5cSDimitry Andric// 3.3 Move and Shift Instructions 672e837bb5cSDimitry Andric//--- 673e837bb5cSDimitry Andric 674e837bb5cSDimitry Andric 675e837bb5cSDimitry Andric// ALU, basic 676e837bb5cSDimitry Andric// Conditional compare 677e837bb5cSDimitry Andric// Conditional select 678e837bb5cSDimitry Andric// Address generation 679e837bb5cSDimitry Andricdef : WriteRes<WriteI, [THX3T110I0123]> { 680e837bb5cSDimitry Andric let Latency = 1; 6815f757f3fSDimitry Andric let ReleaseAtCycles = [1]; 682e837bb5cSDimitry Andric let NumMicroOps = 2; 683e837bb5cSDimitry Andric} 684e837bb5cSDimitry Andric 685e837bb5cSDimitry Andricdef : InstRW<[WriteI], 686e837bb5cSDimitry Andric (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 687e837bb5cSDimitry Andric "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 688e837bb5cSDimitry Andric "ADC(W|X)r", 689e837bb5cSDimitry Andric "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 690e837bb5cSDimitry Andric "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 691e837bb5cSDimitry Andric "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 692e837bb5cSDimitry Andric "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 693e837bb5cSDimitry Andric "SBCS(W|X)r", "CCMN(W|X)(i|r)", 694e837bb5cSDimitry Andric "CCMP(W|X)(i|r)", "CSEL(W|X)r", 695e837bb5cSDimitry Andric "CSINC(W|X)r", "CSINV(W|X)r", 696e837bb5cSDimitry Andric "CSNEG(W|X)r")>; 697e837bb5cSDimitry Andric 698e837bb5cSDimitry Andricdef : InstRW<[WriteI], (instrs COPY)>; 699e837bb5cSDimitry Andric 700e837bb5cSDimitry Andric// ALU, extend and/or shift 701e837bb5cSDimitry Andricdef : WriteRes<WriteISReg, [THX3T110I0123]> { 702e837bb5cSDimitry Andric let Latency = 2; 7035f757f3fSDimitry Andric let ReleaseAtCycles = [2]; 704e837bb5cSDimitry Andric let NumMicroOps = 2; 705e837bb5cSDimitry Andric} 706e837bb5cSDimitry Andric 707e837bb5cSDimitry Andricdef : InstRW<[WriteISReg], 708e837bb5cSDimitry Andric (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 709e837bb5cSDimitry Andric "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 710e837bb5cSDimitry Andric "ADC(W|X)r", 711e837bb5cSDimitry Andric "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 712e837bb5cSDimitry Andric "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 713e837bb5cSDimitry Andric "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 714e837bb5cSDimitry Andric "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 715e837bb5cSDimitry Andric "SBCS(W|X)r", "CCMN(W|X)(i|r)", 716e837bb5cSDimitry Andric "CCMP(W|X)(i|r)", "CSEL(W|X)r", 717e837bb5cSDimitry Andric "CSINC(W|X)r", "CSINV(W|X)r", 718e837bb5cSDimitry Andric "CSNEG(W|X)r")>; 719e837bb5cSDimitry Andric 720e837bb5cSDimitry Andricdef : WriteRes<WriteIEReg, [THX3T110I0123]> { 721e837bb5cSDimitry Andric let Latency = 1; 7225f757f3fSDimitry Andric let ReleaseAtCycles = [1]; 723e837bb5cSDimitry Andric let NumMicroOps = 2; 724e837bb5cSDimitry Andric} 725e837bb5cSDimitry Andric 726e837bb5cSDimitry Andricdef : InstRW<[WriteIEReg], 727e837bb5cSDimitry Andric (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 728e837bb5cSDimitry Andric "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 729e837bb5cSDimitry Andric "ADC(W|X)r", 730e837bb5cSDimitry Andric "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 731e837bb5cSDimitry Andric "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 732e837bb5cSDimitry Andric "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 733e837bb5cSDimitry Andric "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 734e837bb5cSDimitry Andric "SBCS(W|X)r", "CCMN(W|X)(i|r)", 735e837bb5cSDimitry Andric "CCMP(W|X)(i|r)", "CSEL(W|X)r", 736e837bb5cSDimitry Andric "CSINC(W|X)r", "CSINV(W|X)r", 737e837bb5cSDimitry Andric "CSNEG(W|X)r")>; 738e837bb5cSDimitry Andric 739e837bb5cSDimitry Andric// Move immed 740e837bb5cSDimitry Andricdef : WriteRes<WriteImm, [THX3T110I0123]> { 741e837bb5cSDimitry Andric let Latency = 1; 742e837bb5cSDimitry Andric let NumMicroOps = 2; 743e837bb5cSDimitry Andric} 744e837bb5cSDimitry Andric 745e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], 746e837bb5cSDimitry Andric (instrs MOVKWi, MOVKXi, MOVNWi, MOVNXi, MOVZWi, MOVZXi)>; 747e837bb5cSDimitry Andric 748e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], 749e837bb5cSDimitry Andric (instrs ASRVWr, ASRVXr, LSLVWr, LSLVXr, RORVWr, RORVXr)>; 750e837bb5cSDimitry Andric 751e837bb5cSDimitry Andric// Variable shift 752e837bb5cSDimitry Andricdef : WriteRes<WriteIS, [THX3T110I0123]> { 753e837bb5cSDimitry Andric let Latency = 1; 754e837bb5cSDimitry Andric let NumMicroOps = 2; 755e837bb5cSDimitry Andric} 756e837bb5cSDimitry Andric 757e837bb5cSDimitry Andric//--- 758e837bb5cSDimitry Andric// 3.4 Divide and Multiply Instructions 759e837bb5cSDimitry Andric//--- 760e837bb5cSDimitry Andric 761e837bb5cSDimitry Andric// Divide, W-form 762e837bb5cSDimitry Andric// Latency range of 13-23/13-39. 763e837bb5cSDimitry Andricdef : WriteRes<WriteID32, [THX3T110I1]> { 764e837bb5cSDimitry Andric let Latency = 39; 7655f757f3fSDimitry Andric let ReleaseAtCycles = [39]; 766e837bb5cSDimitry Andric let NumMicroOps = 4; 767e837bb5cSDimitry Andric} 768e837bb5cSDimitry Andric 769e837bb5cSDimitry Andric// Divide, X-form 770e837bb5cSDimitry Andricdef : WriteRes<WriteID64, [THX3T110I1]> { 771e837bb5cSDimitry Andric let Latency = 23; 7725f757f3fSDimitry Andric let ReleaseAtCycles = [23]; 773e837bb5cSDimitry Andric let NumMicroOps = 4; 774e837bb5cSDimitry Andric} 775e837bb5cSDimitry Andric 776e837bb5cSDimitry Andric// Multiply accumulate, W-form 777e837bb5cSDimitry Andricdef : WriteRes<WriteIM32, [THX3T110I0123]> { 778e837bb5cSDimitry Andric let Latency = 5; 779e837bb5cSDimitry Andric let NumMicroOps = 3; 780e837bb5cSDimitry Andric} 781e837bb5cSDimitry Andric 782e837bb5cSDimitry Andric// Multiply accumulate, X-form 783e837bb5cSDimitry Andricdef : WriteRes<WriteIM64, [THX3T110I0123]> { 784e837bb5cSDimitry Andric let Latency = 5; 785e837bb5cSDimitry Andric let NumMicroOps = 3; 786e837bb5cSDimitry Andric} 787e837bb5cSDimitry Andric 788e837bb5cSDimitry Andric//def : InstRW<[WriteIM32, ReadIM, ReadIM, ReadIMA, THX3T110Write_5Cyc_I012], 789e837bb5cSDimitry Andric// (instrs MADDWrrr, MSUBWrrr)>; 790e837bb5cSDimitry Andricdef : InstRW<[WriteIM32], (instrs MADDWrrr, MSUBWrrr)>; 791e837bb5cSDimitry Andricdef : InstRW<[WriteIM32], (instrs MADDXrrr, MSUBXrrr)>; 792e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_I0123], 793e837bb5cSDimitry Andric (instregex "(S|U)(MADDL|MSUBL)rrr")>; 794e837bb5cSDimitry Andric 795e837bb5cSDimitry Andricdef : InstRW<[WriteID32], (instrs SDIVWr, UDIVWr)>; 796e837bb5cSDimitry Andricdef : InstRW<[WriteID64], (instrs SDIVXr, UDIVXr)>; 797e837bb5cSDimitry Andric 798e837bb5cSDimitry Andric// Bitfield extract, two reg 799e837bb5cSDimitry Andricdef : WriteRes<WriteExtr, [THX3T110I0123]> { 800e837bb5cSDimitry Andric let Latency = 1; 801e837bb5cSDimitry Andric let NumMicroOps = 2; 802e837bb5cSDimitry Andric} 803e837bb5cSDimitry Andric 804e837bb5cSDimitry Andric// Multiply high 805e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I1], (instrs SMULHrr, UMULHrr)>; 806e837bb5cSDimitry Andric 807e837bb5cSDimitry Andric// Miscellaneous Data-Processing Instructions 808e837bb5cSDimitry Andric// Bitfield extract 809e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], (instrs EXTRWrri, EXTRXrri)>; 810e837bb5cSDimitry Andric 811e837bb5cSDimitry Andric// Bitifield move - basic 812e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], 813e837bb5cSDimitry Andric (instrs SBFMWri, SBFMXri, UBFMWri, UBFMXri)>; 814e837bb5cSDimitry Andric 815e837bb5cSDimitry Andric// Bitfield move, insert 816e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], (instregex "^BFM")>; 817e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_I0123], (instregex "(S|U)?BFM.*")>; 818e837bb5cSDimitry Andric 819e837bb5cSDimitry Andric// Count leading 820e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], 821e837bb5cSDimitry Andric (instregex "^CLS(W|X)r$", "^CLZ(W|X)r$")>; 822e837bb5cSDimitry Andric 823e837bb5cSDimitry Andric// Reverse bits 824e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], (instrs RBITWr, RBITXr)>; 825e837bb5cSDimitry Andric 826e837bb5cSDimitry Andric// Cryptography Extensions 827e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_F0123], (instregex "^AES[DE]")>; 828e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_F0123], (instregex "^AESI?MC")>; 829e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_F0123], (instregex "^PMULL")>; 830e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SHA1SU0")>; 831e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SHA1(H|SU1)")>; 832e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SHA1[CMP]")>; 833e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SHA256SU0")>; 834e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SHA256(H|H2|SU1)")>; 835e837bb5cSDimitry Andric 836e837bb5cSDimitry Andric// CRC Instructions 837e837bb5cSDimitry Andric// def : InstRW<[THX3T110Write_4Cyc_I1], (instregex "^CRC32", "^CRC32C")>; 838e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I1], 839e837bb5cSDimitry Andric (instrs CRC32Brr, CRC32Hrr, CRC32Wrr, CRC32Xrr)>; 840e837bb5cSDimitry Andric 841e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I1], 842e837bb5cSDimitry Andric (instrs CRC32CBrr, CRC32CHrr, CRC32CWrr, CRC32CXrr)>; 843e837bb5cSDimitry Andric 844e837bb5cSDimitry Andric// Reverse bits/bytes 845e837bb5cSDimitry Andric// NOTE: Handled by WriteI. 846e837bb5cSDimitry Andric 847e837bb5cSDimitry Andric//--- 848e837bb5cSDimitry Andric// 3.6 Load Instructions 849e837bb5cSDimitry Andric// 3.10 FP Load Instructions 850e837bb5cSDimitry Andric//--- 851e837bb5cSDimitry Andric 852e837bb5cSDimitry Andric// Load register, literal 853e837bb5cSDimitry Andric// Load register, unscaled immed 854e837bb5cSDimitry Andric// Load register, immed unprivileged 855e837bb5cSDimitry Andric// Load register, unsigned immed 856e837bb5cSDimitry Andricdef : WriteRes<WriteLD, [THX3T110LS]> { 857e837bb5cSDimitry Andric let Latency = 4; 858e837bb5cSDimitry Andric let NumMicroOps = 4; 859e837bb5cSDimitry Andric} 860e837bb5cSDimitry Andric 861e837bb5cSDimitry Andric// Load register, immed post-index 862e837bb5cSDimitry Andric// NOTE: Handled by WriteLD, WriteI. 863e837bb5cSDimitry Andric// Load register, immed pre-index 864e837bb5cSDimitry Andric// NOTE: Handled by WriteLD, WriteAdr. 865e837bb5cSDimitry Andricdef : WriteRes<WriteAdr, [THX3T110I0123]> { 866e837bb5cSDimitry Andric let Latency = 1; 867e837bb5cSDimitry Andric let NumMicroOps = 2; 868e837bb5cSDimitry Andric} 869e837bb5cSDimitry Andric 870e837bb5cSDimitry Andric// Load pair, immed offset, normal 871e837bb5cSDimitry Andric// Load pair, immed offset, signed words, base != SP 872e837bb5cSDimitry Andric// Load pair, immed offset signed words, base = SP 873e837bb5cSDimitry Andric// LDP only breaks into *one* LS micro-op. Thus 874e837bb5cSDimitry Andric// the resources are handled by WriteLD. 875e837bb5cSDimitry Andricdef : WriteRes<WriteLDHi, []> { 876e837bb5cSDimitry Andric let Latency = 4; 877e837bb5cSDimitry Andric let NumMicroOps = 4; 878e837bb5cSDimitry Andric} 879e837bb5cSDimitry Andric 880e837bb5cSDimitry Andric// Load register offset, basic 881e837bb5cSDimitry Andric// Load register, register offset, scale by 4/8 882e837bb5cSDimitry Andric// Load register, register offset, scale by 2 883e837bb5cSDimitry Andric// Load register offset, extend 884e837bb5cSDimitry Andric// Load register, register offset, extend, scale by 4/8 885e837bb5cSDimitry Andric// Load register, register offset, extend, scale by 2 886e837bb5cSDimitry Andricdef THX3T110WriteLDIdx : SchedWriteVariant<[ 887e837bb5cSDimitry Andric SchedVar<ScaledIdxPred, [THX3T110Write_4Cyc_LS01_I0123_I0123]>, 888e837bb5cSDimitry Andric SchedVar<NoSchedPred, [THX3T110Write_4Cyc_LS01_I0123]>]>; 889e837bb5cSDimitry Andricdef : SchedAlias<WriteLDIdx, THX3T110WriteLDIdx>; 890e837bb5cSDimitry Andric 891e837bb5cSDimitry Andricdef THX3T110ReadAdrBase : SchedReadVariant<[ 892e837bb5cSDimitry Andric SchedVar<ScaledIdxPred, [ReadDefault]>, 893e837bb5cSDimitry Andric SchedVar<NoSchedPred, [ReadDefault]>]>; 894e837bb5cSDimitry Andricdef : SchedAlias<ReadAdrBase, THX3T110ReadAdrBase>; 895e837bb5cSDimitry Andric 896e837bb5cSDimitry Andric// Load pair, immed pre-index, normal 897e837bb5cSDimitry Andric// Load pair, immed pre-index, signed words 898e837bb5cSDimitry Andric// Load pair, immed post-index, normal 899e837bb5cSDimitry Andric// Load pair, immed post-index, signed words 900e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDNPDi)>; 901e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDNPQi)>; 902e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDNPSi)>; 903e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDNPWi)>; 904e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDNPXi)>; 905e837bb5cSDimitry Andric 906e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPDi)>; 907e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPQi)>; 908e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPSi)>; 909e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPSWi)>; 910e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPWi)>; 911e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, WriteLDHi], (instrs LDPXi)>; 912e837bb5cSDimitry Andric 913e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRBui)>; 914e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRDui)>; 915e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRHui)>; 916e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01], (instrs LDRQui)>; 917e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01], (instrs LDRSui)>; 918e837bb5cSDimitry Andric 919e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRDl)>; 920e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRQl)>; 921e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRWl)>; 922e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDRXl)>; 923e837bb5cSDimitry Andric 924e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRBi)>; 925e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRHi)>; 926e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRWi)>; 927e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRXi)>; 928e837bb5cSDimitry Andric 929e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRSBWi)>; 930e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRSBXi)>; 931e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRSHWi)>; 932e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRSHXi)>; 933e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDTRSWi)>; 934e837bb5cSDimitry Andric 935e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 936e837bb5cSDimitry Andric (instrs LDPDpre)>; 937e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 938e837bb5cSDimitry Andric (instrs LDPQpre)>; 939e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 940e837bb5cSDimitry Andric (instrs LDPSpre)>; 941e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 942e837bb5cSDimitry Andric (instrs LDPWpre)>; 943e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 944e837bb5cSDimitry Andric (instrs LDPWpre)>; 945e837bb5cSDimitry Andric 946e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01, WriteAdr], 947e837bb5cSDimitry Andric (instrs LDRBpre, LDRDpre, LDRHpre, LDRQpre, 948e837bb5cSDimitry Andric LDRSpre, LDRWpre, LDRXpre, 949e837bb5cSDimitry Andric LDRSBWpre, LDRSBXpre, LDRSBWpost, LDRSBXpost, 950e837bb5cSDimitry Andric LDRSHWpre, LDRSHXpre, LDRSHWpost, LDRSHXpost, 951e837bb5cSDimitry Andric LDRBBpre, LDRBBpost, LDRHHpre, LDRHHpost)>; 952e837bb5cSDimitry Andric 953e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteLDHi, WriteAdr], 954e837bb5cSDimitry Andric (instrs LDPDpost, LDPQpost, LDPSpost, LDPWpost, LDPXpost)>; 955e837bb5cSDimitry Andric 956e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_I0123, WriteI], 957e837bb5cSDimitry Andric (instrs LDRBpost, LDRDpost, LDRHpost, 958e837bb5cSDimitry Andric LDRQpost, LDRSpost, LDRWpost, LDRXpost)>; 959e837bb5cSDimitry Andric 960e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123_I0123, WriteLDHi, WriteAdr], 961e837bb5cSDimitry Andric (instrs LDPDpre, LDPQpre, LDPSpre, LDPWpre, LDPXpre)>; 962e837bb5cSDimitry Andric 963e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123_I0123, WriteAdr], 964e837bb5cSDimitry Andric (instrs LDRBpre, LDRDpre, LDRHpre, LDRQpre, 965e837bb5cSDimitry Andric LDRSpre, LDRWpre, LDRXpre)>; 966e837bb5cSDimitry Andric 967e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123_I0123, WriteLDHi, WriteAdr], 968e837bb5cSDimitry Andric (instrs LDPDpost, LDPQpost, LDPSpost, LDPWpost, LDPXpost)>; 969e837bb5cSDimitry Andric 970e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123_I0123, WriteI], 971e837bb5cSDimitry Andric (instrs LDRBpost, LDRDpost, LDRHpost, LDRQpost, 972e837bb5cSDimitry Andric LDRSpost, LDRWpost, LDRXpost)>; 973e837bb5cSDimitry Andric 974e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRBroW)>; 975e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRDroW)>; 976e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRHroW)>; 977e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRHHroW)>; 978e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRQroW)>; 979e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSroW)>; 980e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSHWroW)>; 981e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSHXroW)>; 982e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRWroW)>; 983e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRXroW)>; 984e837bb5cSDimitry Andric 985e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRBroX)>; 986e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRDroX)>; 987e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRHHroX)>; 988e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRHroX)>; 989e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRQroX)>; 990e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSroX)>; 991e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSHWroX)>; 992e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRSHXroX)>; 993e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRWroX)>; 994e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_I0123, ReadAdrBase], (instrs LDRXroX)>; 995e837bb5cSDimitry Andric 996e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURBi)>; 997e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURBBi)>; 998e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURDi)>; 999e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURHi)>; 1000e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURHHi)>; 1001e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURQi)>; 1002e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSi)>; 1003e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURXi)>; 1004e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSBWi)>; 1005e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSBXi)>; 1006e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSHWi)>; 1007e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSHXi)>; 1008e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instrs LDURSWi)>; 1009e837bb5cSDimitry Andric 1010e837bb5cSDimitry Andric// Load exclusive 1011e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instregex "^LDAR(B|H|W|X)$")>; 1012e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instregex "^LDAXR(B|H|W|X)$")>; 1013e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instregex "^LDXR(B|H|W|X)$")>; 1014e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instregex "^LDAXP(W|X)$")>; 1015e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], (instregex "^LDXP(W|X)$")>; 1016e837bb5cSDimitry Andric 1017e837bb5cSDimitry Andric//--- 1018e837bb5cSDimitry Andric// Prefetch 1019e837bb5cSDimitry Andric//--- 1020e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_I012], (instrs PRFMl)>; 1021e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_I012], (instrs PRFUMi)>; 1022e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_I012], (instrs PRFMui)>; 1023e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_I012], (instrs PRFMroW)>; 1024e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_I012], (instrs PRFMroX)>; 1025e837bb5cSDimitry Andric 1026e837bb5cSDimitry Andric//-- 1027e837bb5cSDimitry Andric// 3.7 Store Instructions 1028e837bb5cSDimitry Andric// 3.11 FP Store Instructions 1029e837bb5cSDimitry Andric//-- 1030e837bb5cSDimitry Andric 1031e837bb5cSDimitry Andric// Store register, unscaled immed 1032e837bb5cSDimitry Andric// Store register, immed unprivileged 1033e837bb5cSDimitry Andric// Store register, unsigned immed 1034e837bb5cSDimitry Andricdef : WriteRes<WriteST, [THX3T110LS, THX3T110SD]> { 1035e837bb5cSDimitry Andric let Latency = 1; 1036e837bb5cSDimitry Andric let NumMicroOps = 2; 1037e837bb5cSDimitry Andric} 1038e837bb5cSDimitry Andric 1039e837bb5cSDimitry Andric// Store register, immed post-index 1040e837bb5cSDimitry Andric// NOTE: Handled by WriteAdr, WriteST, ReadAdrBase 1041e837bb5cSDimitry Andric 1042e837bb5cSDimitry Andric// Store register, immed pre-index 1043e837bb5cSDimitry Andric// NOTE: Handled by WriteAdr, WriteST 1044e837bb5cSDimitry Andric 1045e837bb5cSDimitry Andric// Store register, register offset, basic 1046e837bb5cSDimitry Andric// Store register, register offset, scaled by 4/8 1047e837bb5cSDimitry Andric// Store register, register offset, scaled by 2 1048e837bb5cSDimitry Andric// Store register, register offset, extend 1049e837bb5cSDimitry Andric// Store register, register offset, extend, scale by 4/8 1050e837bb5cSDimitry Andric// Store register, register offset, extend, scale by 1 1051e837bb5cSDimitry Andricdef : WriteRes<WriteSTIdx, [THX3T110LS, THX3T110SD, THX3T110I0123]> { 1052e837bb5cSDimitry Andric let Latency = 1; 1053e837bb5cSDimitry Andric let NumMicroOps = 2; 1054e837bb5cSDimitry Andric} 1055e837bb5cSDimitry Andric 1056e837bb5cSDimitry Andric// Store pair, immed offset, W-form 1057e837bb5cSDimitry Andric// Store pair, immed offset, X-form 1058e837bb5cSDimitry Andricdef : WriteRes<WriteSTP, [THX3T110LS, THX3T110SD]> { 1059e837bb5cSDimitry Andric let Latency = 1; 1060e837bb5cSDimitry Andric let NumMicroOps = 2; 1061e837bb5cSDimitry Andric} 1062e837bb5cSDimitry Andric 1063e837bb5cSDimitry Andric// Store pair, immed post-index, W-form 1064e837bb5cSDimitry Andric// Store pair, immed post-index, X-form 1065e837bb5cSDimitry Andric// Store pair, immed pre-index, W-form 1066e837bb5cSDimitry Andric// Store pair, immed pre-index, X-form 1067e837bb5cSDimitry Andric// NOTE: Handled by WriteAdr, WriteSTP. 1068e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURBi)>; 1069e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURBBi)>; 1070e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURDi)>; 1071e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURHi)>; 1072e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURHHi)>; 1073e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURQi)>; 1074e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURSi)>; 1075e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURWi)>; 1076e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STURXi)>; 1077e837bb5cSDimitry Andric 1078e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_SD], (instrs STTRBi)>; 1079e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_SD], (instrs STTRHi)>; 1080e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_SD], (instrs STTRWi)>; 1081e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_SD], (instrs STTRXi)>; 1082e837bb5cSDimitry Andric 1083e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STNPDi)>; 1084e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STNPQi)>; 1085e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STNPXi)>; 1086e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STNPWi)>; 1087e837bb5cSDimitry Andric 1088e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STPDi)>; 1089e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STPQi)>; 1090e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STPXi)>; 1091e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_SD], (instrs STPWi)>; 1092e837bb5cSDimitry Andric 1093e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRBui)>; 1094e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRDui)>; 1095e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRHui)>; 1096e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRQui)>; 1097e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRXui)>; 1098e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_I0123], (instrs STRWui)>; 1099e837bb5cSDimitry Andric 1100e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRBui)>; 1101e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRDui)>; 1102e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRHui)>; 1103e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRQui)>; 1104e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRXui)>; 1105e837bb5cSDimitry Andricdef : InstRW<[WriteSTP, THX3T110Write_1Cyc_LS01_SD], (instrs STRWui)>; 1106e837bb5cSDimitry Andric 1107e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRBui)>; 1108e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRDui)>; 1109e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRHui)>; 1110e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRQui)>; 1111e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRXui)>; 1112e837bb5cSDimitry Andricdef : InstRW<[WriteSTIdx, THX3T110Write_1Cyc_LS01_SD_I0123], (instrs STRWui)>; 1113e837bb5cSDimitry Andric 1114e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1115e837bb5cSDimitry Andric (instrs STPDpre, STPDpost)>; 1116e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1117e837bb5cSDimitry Andric (instrs STPDpre, STPDpost)>; 1118e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1119e837bb5cSDimitry Andric (instrs STPQpre, STPQpost)>; 1120e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1121e837bb5cSDimitry Andric (instrs STPQpre, STPQpost)>; 1122e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1123e837bb5cSDimitry Andric (instrs STPSpre, STPSpost)>; 1124e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1125e837bb5cSDimitry Andric (instrs STPSpre, STPSpost)>; 1126e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1127e837bb5cSDimitry Andric (instrs STPWpre, STPWpost)>; 1128e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1129e837bb5cSDimitry Andric (instrs STPWpre, STPWpost)>; 1130e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1131e837bb5cSDimitry Andric (instrs STPXpre, STPXpost)>; 1132e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1133e837bb5cSDimitry Andric (instrs STPXpre, STPXpost)>; 1134e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1135e837bb5cSDimitry Andric (instrs STRBpre, STRBpost)>; 1136e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1137e837bb5cSDimitry Andric (instrs STRBpre, STRBpost)>; 1138e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1139e837bb5cSDimitry Andric (instrs STRBBpre, STRBBpost)>; 1140e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1141e837bb5cSDimitry Andric (instrs STRBBpre, STRBBpost)>; 1142e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1143e837bb5cSDimitry Andric (instrs STRDpre, STRDpost)>; 1144e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1145e837bb5cSDimitry Andric (instrs STRDpre, STRDpost)>; 1146e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1147e837bb5cSDimitry Andric (instrs STRHpre, STRHpost)>; 1148e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1149e837bb5cSDimitry Andric (instrs STRHpre, STRHpost)>; 1150e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1151e837bb5cSDimitry Andric (instrs STRHHpre, STRHHpost)>; 1152e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1153e837bb5cSDimitry Andric (instrs STRHHpre, STRHHpost)>; 1154e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1155e837bb5cSDimitry Andric (instrs STRQpre, STRQpost)>; 1156e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1157e837bb5cSDimitry Andric (instrs STRQpre, STRQpost)>; 1158e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1159e837bb5cSDimitry Andric (instrs STRSpre, STRSpost)>; 1160e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1161e837bb5cSDimitry Andric (instrs STRSpre, STRSpost)>; 1162e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1163e837bb5cSDimitry Andric (instrs STRWpre, STRWpost)>; 1164e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1165e837bb5cSDimitry Andric (instrs STRWpre, STRWpost)>; 1166e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123], 1167e837bb5cSDimitry Andric (instrs STRXpre, STRXpost)>; 1168e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1169e837bb5cSDimitry Andric (instrs STRXpre, STRXpost)>; 1170e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1171e837bb5cSDimitry Andric (instrs STRBroW, STRBroX)>; 1172e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1173e837bb5cSDimitry Andric (instrs STRBBroW, STRBBroX)>; 1174e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1175e837bb5cSDimitry Andric (instrs STRDroW, STRDroX)>; 1176e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1177e837bb5cSDimitry Andric (instrs STRHroW, STRHroX)>; 1178e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1179e837bb5cSDimitry Andric (instrs STRHHroW, STRHHroX)>; 1180e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1181e837bb5cSDimitry Andric (instrs STRQroW, STRQroX)>; 1182e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1183e837bb5cSDimitry Andric (instrs STRSroW, STRSroX)>; 1184e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1185e837bb5cSDimitry Andric (instrs STRWroW, STRWroX)>; 1186e837bb5cSDimitry Andricdef : InstRW<[WriteAdr, THX3T110Write_1Cyc_LS01_I0123, ReadAdrBase], 1187e837bb5cSDimitry Andric (instrs STRXroW, STRXroX)>; 1188e837bb5cSDimitry Andric 1189e837bb5cSDimitry Andric// Store exclusive 1190e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instrs STNPWi, STNPXi)>; 1191e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instregex "^STLR(B|H|W|X)$")>; 1192e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instregex "^STXP(W|X)$")>; 1193e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instregex "^STXR(B|H|W|X)$")>; 1194e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instregex "^STLXP(W|X)$")>; 1195e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01_SD], (instregex "^STLXR(B|H|W|X)$")>; 1196e837bb5cSDimitry Andric 1197e837bb5cSDimitry Andric//--- 1198e837bb5cSDimitry Andric// 3.8 FP Data Processing Instructions 1199e837bb5cSDimitry Andric//--- 1200e837bb5cSDimitry Andric 1201e837bb5cSDimitry Andric// FP absolute value 1202e837bb5cSDimitry Andric// FP min/max 1203e837bb5cSDimitry Andric// FP negate 1204e837bb5cSDimitry Andricdef : WriteRes<WriteF, [THX3T110FP0123]> { 1205e837bb5cSDimitry Andric let Latency = 5; 1206e837bb5cSDimitry Andric let NumMicroOps = 2; 1207e837bb5cSDimitry Andric} 1208e837bb5cSDimitry Andric 1209e837bb5cSDimitry Andric// FP arithmetic 1210e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_F01], (instregex "^FADD", "^FSUB")>; 1211e837bb5cSDimitry Andric 1212e837bb5cSDimitry Andric// FP compare 1213e837bb5cSDimitry Andricdef : WriteRes<WriteFCmp, [THX3T110FP0123]> { 1214e837bb5cSDimitry Andric let Latency = 5; 1215e837bb5cSDimitry Andric let NumMicroOps = 2; 1216e837bb5cSDimitry Andric} 1217e837bb5cSDimitry Andric 1218e837bb5cSDimitry Andric// FP Mul, Div, Sqrt 1219e837bb5cSDimitry Andricdef : WriteRes<WriteFDiv, [THX3T110FP0123]> { 1220e837bb5cSDimitry Andric let Latency = 22; 12215f757f3fSDimitry Andric let ReleaseAtCycles = [19]; 1222e837bb5cSDimitry Andric} 1223e837bb5cSDimitry Andric 1224e837bb5cSDimitry Andricdef THX3T110XWriteFDiv : SchedWriteRes<[THX3T110FP0123]> { 1225e837bb5cSDimitry Andric let Latency = 16; 12265f757f3fSDimitry Andric let ReleaseAtCycles = [8]; 1227e837bb5cSDimitry Andric let NumMicroOps = 4; 1228e837bb5cSDimitry Andric} 1229e837bb5cSDimitry Andric 1230e837bb5cSDimitry Andricdef THX3T110XWriteFDivSP : SchedWriteRes<[THX3T110FP0123]> { 1231e837bb5cSDimitry Andric let Latency = 16; 12325f757f3fSDimitry Andric let ReleaseAtCycles = [8]; 1233e837bb5cSDimitry Andric let NumMicroOps = 4; 1234e837bb5cSDimitry Andric} 1235e837bb5cSDimitry Andric 1236e837bb5cSDimitry Andricdef THX3T110XWriteFDivDP : SchedWriteRes<[THX3T110FP0123]> { 1237e837bb5cSDimitry Andric let Latency = 23; 12385f757f3fSDimitry Andric let ReleaseAtCycles = [12]; 1239e837bb5cSDimitry Andric let NumMicroOps = 4; 1240e837bb5cSDimitry Andric} 1241e837bb5cSDimitry Andric 1242e837bb5cSDimitry Andricdef THX3T110XWriteFSqrtSP : SchedWriteRes<[THX3T110FP0123]> { 1243e837bb5cSDimitry Andric let Latency = 16; 12445f757f3fSDimitry Andric let ReleaseAtCycles = [8]; 1245e837bb5cSDimitry Andric let NumMicroOps = 4; 1246e837bb5cSDimitry Andric} 1247e837bb5cSDimitry Andric 1248e837bb5cSDimitry Andricdef THX3T110XWriteFSqrtDP : SchedWriteRes<[THX3T110FP0123]> { 1249e837bb5cSDimitry Andric let Latency = 23; 12505f757f3fSDimitry Andric let ReleaseAtCycles = [12]; 1251e837bb5cSDimitry Andric let NumMicroOps = 4; 1252e837bb5cSDimitry Andric} 1253e837bb5cSDimitry Andric 1254e837bb5cSDimitry Andric// FP divide, S-form 1255e837bb5cSDimitry Andric// FP square root, S-form 1256e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFDivSP], (instrs FDIVSrr)>; 1257e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFSqrtSP], (instrs FSQRTSr)>; 1258e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFDivSP], (instregex "^FDIVv.*32$")>; 1259e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFSqrtSP], (instregex "^.*SQRT.*32$")>; 1260e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_16Cyc_F01], (instregex "^FDIVSrr", "^FSQRTSr")>; 1261e837bb5cSDimitry Andric 1262e837bb5cSDimitry Andric// FP divide, D-form 1263e837bb5cSDimitry Andric// FP square root, D-form 1264e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFDivDP], (instrs FDIVDrr)>; 1265e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFSqrtDP], (instrs FSQRTDr)>; 1266e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFDivDP], (instregex "^FDIVv.*64$")>; 1267e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFSqrtDP], (instregex "^.*SQRT.*64$")>; 1268e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_23Cyc_F01], (instregex "^FDIVDrr", "^FSQRTDr")>; 1269e837bb5cSDimitry Andric 1270e837bb5cSDimitry Andric// FP multiply 1271e837bb5cSDimitry Andric// FP multiply accumulate 1272e837bb5cSDimitry Andricdef : WriteRes<WriteFMul, [THX3T110FP0123]> { 1273e837bb5cSDimitry Andric let Latency = 6; 12745f757f3fSDimitry Andric let ReleaseAtCycles = [2]; 1275e837bb5cSDimitry Andric let NumMicroOps = 3; 1276e837bb5cSDimitry Andric} 1277e837bb5cSDimitry Andric 1278e837bb5cSDimitry Andricdef THX3T110XWriteFMul : SchedWriteRes<[THX3T110FP0123]> { 1279e837bb5cSDimitry Andric let Latency = 6; 12805f757f3fSDimitry Andric let ReleaseAtCycles = [2]; 1281e837bb5cSDimitry Andric let NumMicroOps = 3; 1282e837bb5cSDimitry Andric} 1283e837bb5cSDimitry Andric 1284e837bb5cSDimitry Andricdef THX3T110XWriteFMulAcc : SchedWriteRes<[THX3T110FP0123]> { 1285e837bb5cSDimitry Andric let Latency = 6; 12865f757f3fSDimitry Andric let ReleaseAtCycles = [2]; 1287e837bb5cSDimitry Andric let NumMicroOps = 3; 1288e837bb5cSDimitry Andric} 1289e837bb5cSDimitry Andric 1290e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFMul], (instregex "^FMUL", "^FNMUL")>; 1291e837bb5cSDimitry Andricdef : InstRW<[THX3T110XWriteFMulAcc], 1292e837bb5cSDimitry Andric (instregex "^FMADD", "^FMSUB", "^FNMADD", "^FNMSUB")>; 1293e837bb5cSDimitry Andric 1294e837bb5cSDimitry Andric// FP round to integral 1295e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_7Cyc_F01], 1296e837bb5cSDimitry Andric (instregex "^FRINT(A|I|M|N|P|X|Z)(Sr|Dr)")>; 1297e837bb5cSDimitry Andric 1298e837bb5cSDimitry Andric// FP select 1299e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], (instregex "^FCSEL")>; 1300e837bb5cSDimitry Andric 1301e837bb5cSDimitry Andric//--- 1302e837bb5cSDimitry Andric// 3.9 FP Miscellaneous Instructions 1303e837bb5cSDimitry Andric//--- 1304e837bb5cSDimitry Andric 1305e837bb5cSDimitry Andric// FP convert, from vec to vec reg 1306e837bb5cSDimitry Andric// FP convert, from gen to vec reg 1307e837bb5cSDimitry Andric// FP convert, from vec to gen reg 1308e837bb5cSDimitry Andricdef : WriteRes<WriteFCvt, [THX3T110FP0123]> { 1309e837bb5cSDimitry Andric let Latency = 7; 1310e837bb5cSDimitry Andric let NumMicroOps = 3; 1311e837bb5cSDimitry Andric} 1312e837bb5cSDimitry Andric 1313e837bb5cSDimitry Andric// FP move, immed 1314e837bb5cSDimitry Andric// FP move, register 1315e837bb5cSDimitry Andricdef : WriteRes<WriteFImm, [THX3T110FP0123]> { 1316e837bb5cSDimitry Andric let Latency = 4; 1317e837bb5cSDimitry Andric let NumMicroOps = 2; 1318e837bb5cSDimitry Andric} 1319e837bb5cSDimitry Andric 1320e837bb5cSDimitry Andric// FP transfer, from gen to vec reg 1321e837bb5cSDimitry Andric// FP transfer, from vec to gen reg 1322e837bb5cSDimitry Andricdef : WriteRes<WriteFCopy, [THX3T110FP0123]> { 1323e837bb5cSDimitry Andric let Latency = 4; 1324e837bb5cSDimitry Andric let NumMicroOps = 2; 1325e837bb5cSDimitry Andric} 1326e837bb5cSDimitry Andric 1327e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F01], (instrs FMOVXDHighr, FMOVDXHighr)>; 1328e837bb5cSDimitry Andric 1329e837bb5cSDimitry Andric//--- 1330e837bb5cSDimitry Andric// 3.12 ASIMD Integer Instructions 1331e837bb5cSDimitry Andric//--- 1332e837bb5cSDimitry Andric 1333e837bb5cSDimitry Andric// ASIMD absolute diff, D-form 1334e837bb5cSDimitry Andric// ASIMD absolute diff, Q-form 1335e837bb5cSDimitry Andric// ASIMD absolute diff accum, D-form 1336e837bb5cSDimitry Andric// ASIMD absolute diff accum, Q-form 1337e837bb5cSDimitry Andric// ASIMD absolute diff accum long 1338e837bb5cSDimitry Andric// ASIMD absolute diff long 1339e837bb5cSDimitry Andric// ASIMD arith, basic 1340e837bb5cSDimitry Andric// ASIMD arith, complex 1341e837bb5cSDimitry Andric// ASIMD compare 1342e837bb5cSDimitry Andric// ASIMD logical (AND, BIC, EOR) 1343e837bb5cSDimitry Andric// ASIMD max/min, basic 1344e837bb5cSDimitry Andric// ASIMD max/min, reduce, 4H/4S 1345e837bb5cSDimitry Andric// ASIMD max/min, reduce, 8B/8H 1346e837bb5cSDimitry Andric// ASIMD max/min, reduce, 16B 1347e837bb5cSDimitry Andric// ASIMD multiply, D-form 1348e837bb5cSDimitry Andric// ASIMD multiply, Q-form 1349e837bb5cSDimitry Andric// ASIMD multiply accumulate long 1350e837bb5cSDimitry Andric// ASIMD multiply accumulate saturating long 1351e837bb5cSDimitry Andric// ASIMD multiply long 1352e837bb5cSDimitry Andric// ASIMD pairwise add and accumulate 1353e837bb5cSDimitry Andric// ASIMD shift accumulate 1354e837bb5cSDimitry Andric// ASIMD shift by immed, basic 1355e837bb5cSDimitry Andric// ASIMD shift by immed and insert, basic, D-form 1356e837bb5cSDimitry Andric// ASIMD shift by immed and insert, basic, Q-form 1357e837bb5cSDimitry Andric// ASIMD shift by immed, complex 1358e837bb5cSDimitry Andric// ASIMD shift by register, basic, D-form 1359e837bb5cSDimitry Andric// ASIMD shift by register, basic, Q-form 1360e837bb5cSDimitry Andric// ASIMD shift by register, complex, D-form 1361e837bb5cSDimitry Andric// ASIMD shift by register, complex, Q-form 1362349cc55cSDimitry Andricdef : WriteRes<WriteVd, [THX3T110FP0123]> { 1363349cc55cSDimitry Andric let Latency = 5; 1364349cc55cSDimitry Andric let NumMicroOps = 4; 13655f757f3fSDimitry Andric let ReleaseAtCycles = [4]; 1366349cc55cSDimitry Andric} 1367349cc55cSDimitry Andricdef : WriteRes<WriteVq, [THX3T110FP0123]> { 1368e837bb5cSDimitry Andric let Latency = 5; 1369e837bb5cSDimitry Andric let NumMicroOps = 4; 13705f757f3fSDimitry Andric let ReleaseAtCycles = [4]; 1371e837bb5cSDimitry Andric} 1372e837bb5cSDimitry Andric 1373e837bb5cSDimitry Andric// ASIMD arith, reduce, 4H/4S 1374e837bb5cSDimitry Andric// ASIMD arith, reduce, 8B/8H 1375e837bb5cSDimitry Andric// ASIMD arith, reduce, 16B 1376e837bb5cSDimitry Andric 1377e837bb5cSDimitry Andric// ASIMD logical (MVN (alias for NOT), ORN, ORR) 1378e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1379e837bb5cSDimitry Andric (instregex "^ANDv", "^BICv", "^EORv", "^ORRv", "^ORNv", "^NOTv")>; 1380e837bb5cSDimitry Andric 1381e837bb5cSDimitry Andric// ASIMD arith, reduce 1382e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1383e837bb5cSDimitry Andric (instregex "^ADDVv", "^SADDLVv", "^UADDLVv")>; 1384e837bb5cSDimitry Andric 1385e837bb5cSDimitry Andric// ASIMD polynomial (8x8) multiply long 1386e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^(S|U|SQD)MULL")>; 1387e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1388e837bb5cSDimitry Andric (instregex "(S|U|SQD)(MLAL|MLSL|MULL)v.*")>; 1389e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^PMULL(v8i8|v16i8)")>; 1390e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^PMULL(v1i64|v2i64)")>; 1391e837bb5cSDimitry Andric 1392e837bb5cSDimitry Andric// ASIMD absolute diff accum, D-form 1393e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1394e837bb5cSDimitry Andric (instregex "^[SU]ABA(v8i8|v4i16|v2i32)$")>; 1395e837bb5cSDimitry Andric// ASIMD absolute diff accum, Q-form 1396e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1397e837bb5cSDimitry Andric (instregex "^[SU]ABA(v16i8|v8i16|v4i32)$")>; 1398e837bb5cSDimitry Andric// ASIMD absolute diff accum long 1399e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1400e837bb5cSDimitry Andric (instregex "^[SU]ABAL")>; 1401e837bb5cSDimitry Andric// ASIMD arith, reduce, 4H/4S 1402e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1403e837bb5cSDimitry Andric (instregex "^[SU]?ADDL?V(v8i8|v4i16|v2i32)v$")>; 1404e837bb5cSDimitry Andric// ASIMD arith, reduce, 8B 1405e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1406e837bb5cSDimitry Andric (instregex "^[SU]?ADDL?V(v8i16|v4i32)v$")>; 1407e837bb5cSDimitry Andric// ASIMD arith, reduce, 16B/16H 1408e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_10Cyc_F0123], 1409e837bb5cSDimitry Andric (instregex "^[SU]?ADDL?Vv16i8v$")>; 1410e837bb5cSDimitry Andric// ASIMD max/min, reduce, 4H/4S 1411e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1412e837bb5cSDimitry Andric (instregex "^[SU](MIN|MAX)V(v4i16|v4i32)v$")>; 1413e837bb5cSDimitry Andric// ASIMD max/min, reduce, 8B/8H 1414e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1415e837bb5cSDimitry Andric (instregex "^[SU](MIN|MAX)V(v8i8|v8i16)v$")>; 1416e837bb5cSDimitry Andric// ASIMD max/min, reduce, 16B/16H 1417e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1418e837bb5cSDimitry Andric (instregex "^[SU](MIN|MAX)Vv16i8v$")>; 1419e837bb5cSDimitry Andric// ASIMD multiply, D-form 1420e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1421e837bb5cSDimitry Andric (instregex "^(P?MUL|SQR?DMULH)" # 1422e837bb5cSDimitry Andric "(v8i8|v4i16|v2i32|v1i8|v1i16|v1i32|v1i64)" # 1423e837bb5cSDimitry Andric "(_indexed)?$")>; 1424e837bb5cSDimitry Andric// ASIMD multiply, Q-form 1425e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1426e837bb5cSDimitry Andric (instregex "^(P?MUL|SQR?DMULH)(v16i8|v8i16|v4i32)(_indexed)?$")>; 1427e837bb5cSDimitry Andric// ASIMD multiply accumulate, D-form 1428e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1429e837bb5cSDimitry Andric (instregex "^ML[AS](v8i8|v4i16|v2i32)(_indexed)?$")>; 1430e837bb5cSDimitry Andric// ASIMD multiply accumulate, Q-form 1431e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1432e837bb5cSDimitry Andric (instregex "^ML[AS](v16i8|v8i16|v4i32)(_indexed)?$")>; 1433e837bb5cSDimitry Andric// ASIMD shift accumulate 1434e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1435e837bb5cSDimitry Andric (instregex "SRSRAv","SSRAv","URSRAv","USRAv")>; 1436e837bb5cSDimitry Andric 1437e837bb5cSDimitry Andric// ASIMD shift by immed, basic 1438e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1439e837bb5cSDimitry Andric (instregex "RSHRNv","SHRNv", "SQRSHRNv","SQRSHRUNv", 1440e837bb5cSDimitry Andric "SQSHRNv","SQSHRUNv", "UQRSHRNv", 1441e837bb5cSDimitry Andric "UQSHRNv","SQXTNv","SQXTUNv","UQXTNv")>; 1442e837bb5cSDimitry Andric// ASIMD shift by immed, complex 1443e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^[SU]?(Q|R){1,2}SHR")>; 1444e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SQSHLU")>; 1445e837bb5cSDimitry Andric// ASIMD shift by register, basic, Q-form 1446e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F01], 1447e837bb5cSDimitry Andric (instregex "^[SU]SHL(v16i8|v8i16|v4i32|v2i64)")>; 1448e837bb5cSDimitry Andric// ASIMD shift by register, complex, D-form 1449e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1450e837bb5cSDimitry Andric (instregex "^[SU][QR]{1,2}SHL" # 1451e837bb5cSDimitry Andric "(v1i8|v1i16|v1i32|v1i64|v8i8|v4i16|v2i32|b|d|h|s)")>; 1452e837bb5cSDimitry Andric// ASIMD shift by register, complex, Q-form 1453e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1454e837bb5cSDimitry Andric (instregex "^[SU][QR]{1,2}SHL(v16i8|v8i16|v4i32|v2i64)")>; 1455e837bb5cSDimitry Andric 1456e837bb5cSDimitry Andric// ASIMD Arithmetic 1457e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1458e837bb5cSDimitry Andric (instregex "(ADD|SUB)(v8i8|v4i16|v2i32|v1i64)")>; 1459e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1460e837bb5cSDimitry Andric (instregex "(ADD|SUB)(v16i8|v8i16|v4i32|v2i64)")>; 1461e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "(ADD|SUB)HNv.*")>; 1462e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "(RADD|RSUB)HNv.*")>; 1463e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1464e837bb5cSDimitry Andric (instregex "^SQADD", "^SQNEG", "^SQSUB", "^SRHADD", 1465e837bb5cSDimitry Andric "^SUQADD", "^UQADD", "^UQSUB", "^URHADD", "^USQADD")>; 1466e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1467e837bb5cSDimitry Andric (instregex "ADDP(v16i8|v8i16|v4i32|v2i64)")>; 1468e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1469e837bb5cSDimitry Andric (instregex "((AND|ORN|EOR|EON)S?(Xr[rsi]|v16i8|v8i16|v4i32)|" # 1470e837bb5cSDimitry Andric "(ORR|BIC)S?(Xr[rs]|v16i8|v8i16|v4i32))")>; 1471e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1472e837bb5cSDimitry Andric (instregex "(CLS|CLZ|CNT)(v4i32|v8i16|v16i8)")>; 1473e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SADALP","^UADALP")>; 1474e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SADDLPv","^UADDLPv")>; 1475e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SADDLV","^UADDLV")>; 1476e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1477e837bb5cSDimitry Andric (instregex "^ADDVv","^SMAXVv","^UMAXVv","^SMINVv","^UMINVv")>; 1478e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1479e837bb5cSDimitry Andric (instregex "^SABAv","^UABAv","^SABALv","^UABALv")>; 1480e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1481e837bb5cSDimitry Andric (instregex "^SQADDv","^SQSUBv","^UQADDv","^UQSUBv")>; 1482e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^SUQADDv","^USQADDv")>; 1483e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1484e837bb5cSDimitry Andric (instregex "^ADDHNv","^RADDHNv", "^RSUBHNv", 1485e837bb5cSDimitry Andric "^SQABS", "^SQADD", "^SQNEG", "^SQSUB", 1486e837bb5cSDimitry Andric "^SRHADD", "^SUBHNv", "^SUQADD", 1487e837bb5cSDimitry Andric "^UQADD", "^UQSUB", "^URHADD", "^USQADD")>; 1488e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1489e837bb5cSDimitry Andric (instregex "^CMEQv","^CMGEv","^CMGTv", 1490e837bb5cSDimitry Andric "^CMLEv","^CMLTv", "^CMHIv","^CMHSv")>; 1491e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1492e837bb5cSDimitry Andric (instregex "^SMAXv","^SMINv","^UMAXv","^UMINv", 1493e837bb5cSDimitry Andric "^SMAXPv","^SMINPv","^UMAXPv","^UMINPv")>; 1494e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1495e837bb5cSDimitry Andric (instregex "^SABDv","^UABDv", "^SABDLv","^UABDLv")>; 1496e837bb5cSDimitry Andric 1497e837bb5cSDimitry Andric//--- 1498e837bb5cSDimitry Andric// 3.13 ASIMD Floating-point Instructions 1499e837bb5cSDimitry Andric//--- 1500e837bb5cSDimitry Andric 1501e837bb5cSDimitry Andric// ASIMD FP absolute value 1502e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FABSv")>; 1503e837bb5cSDimitry Andric 1504e837bb5cSDimitry Andric// ASIMD FP arith, normal, D-form 1505e837bb5cSDimitry Andric// ASIMD FP arith, normal, Q-form 1506e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], 1507e837bb5cSDimitry Andric (instregex "^FABDv", "^FADDv", "^FSUBv")>; 1508e837bb5cSDimitry Andric 1509e837bb5cSDimitry Andric// ASIMD FP arith,pairwise, D-form 1510e837bb5cSDimitry Andric// ASIMD FP arith, pairwise, Q-form 1511e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], (instregex "^FADDPv")>; 1512e837bb5cSDimitry Andric 1513e837bb5cSDimitry Andric// ASIMD FP compare, D-form 1514e837bb5cSDimitry Andric// ASIMD FP compare, Q-form 1515e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FACGEv", "^FACGTv")>; 1516e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FCMEQv", "^FCMGEv", 1517e837bb5cSDimitry Andric "^FCMGTv", "^FCMLEv", 1518e837bb5cSDimitry Andric "^FCMLTv")>; 1519e837bb5cSDimitry Andric 1520e837bb5cSDimitry Andric// ASIMD FP round, D-form 1521e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1522e837bb5cSDimitry Andric (instregex "^FRINT[AIMNPXZ](v2f32)")>; 1523e837bb5cSDimitry Andric// ASIMD FP round, Q-form 1524e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1525e837bb5cSDimitry Andric (instregex "^FRINT[AIMNPXZ](v4f32|v2f64)")>; 1526e837bb5cSDimitry Andric 1527e837bb5cSDimitry Andric// ASIMD FP convert, long 1528e837bb5cSDimitry Andric// ASIMD FP convert, narrow 1529e837bb5cSDimitry Andric// ASIMD FP convert, other, D-form 1530e837bb5cSDimitry Andric// ASIMD FP convert, other, Q-form 1531e837bb5cSDimitry Andric// NOTE: Handled by WriteV. 1532e837bb5cSDimitry Andric 1533e837bb5cSDimitry Andric// ASIMD FP convert, long and narrow 1534e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F01], (instregex "^FCVT(L|N|XN)v")>; 1535e837bb5cSDimitry Andric// ASIMD FP convert, other, D-form 1536e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F01], 1537e837bb5cSDimitry Andric (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v2f32|v1i32|v2i32|v1i64)")>; 1538e837bb5cSDimitry Andric// ASIMD FP convert, other, Q-form 1539e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F01], 1540e837bb5cSDimitry Andric (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v4f32|v2f64|v4i32|v2i64)")>; 1541e837bb5cSDimitry Andric 1542e837bb5cSDimitry Andric// ASIMD FP divide, D-form, F32 1543e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_16Cyc_F0123], (instrs FDIVv2f32)>; 1544e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_16Cyc_F0123], (instregex "FDIVv2f32")>; 1545e837bb5cSDimitry Andric 1546e837bb5cSDimitry Andric// ASIMD FP divide, Q-form, F32 1547e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_16Cyc_F0123], (instrs FDIVv4f32)>; 1548e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_16Cyc_F0123], (instregex "FDIVv4f32")>; 1549e837bb5cSDimitry Andric 1550e837bb5cSDimitry Andric// ASIMD FP divide, Q-form, F64 1551e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_23Cyc_F0123], (instrs FDIVv2f64)>; 1552e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_23Cyc_F0123], (instregex "FDIVv2f64")>; 1553e837bb5cSDimitry Andric 1554e837bb5cSDimitry Andric// ASIMD FP max/min, normal, D-form 1555e837bb5cSDimitry Andric// ASIMD FP max/min, normal, Q-form 1556e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FMAXv", "^FMAXNMv", 1557e837bb5cSDimitry Andric "^FMINv", "^FMINNMv")>; 1558e837bb5cSDimitry Andric 1559e837bb5cSDimitry Andric// ASIMD FP max/min, pairwise, D-form 1560e837bb5cSDimitry Andric// ASIMD FP max/min, pairwise, Q-form 1561e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FMAXPv", "^FMAXNMPv", 1562e837bb5cSDimitry Andric "^FMINPv", "^FMINNMPv")>; 1563e837bb5cSDimitry Andric 1564e837bb5cSDimitry Andric// ASIMD FP max/min, reduce 1565e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FMAXVv", "^FMAXNMVv", 1566e837bb5cSDimitry Andric "^FMINVv", "^FMINNMVv")>; 1567e837bb5cSDimitry Andric 1568e837bb5cSDimitry Andric// ASIMD FP multiply, D-form, FZ 1569e837bb5cSDimitry Andric// ASIMD FP multiply, D-form, no FZ 1570e837bb5cSDimitry Andric// ASIMD FP multiply, Q-form, FZ 1571e837bb5cSDimitry Andric// ASIMD FP multiply, Q-form, no FZ 1572e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1573e837bb5cSDimitry Andric (instregex "^FMULv", "^FMULXv")>; 1574e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1575e837bb5cSDimitry Andric (instregex "^FMULX?(v2f32|v1i32|v2i32|v1i64|32|64)")>; 1576e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1577e837bb5cSDimitry Andric (instregex "^FMULX?(v4f32|v2f64|v4i32|v2i64)")>; 1578e837bb5cSDimitry Andric 1579e837bb5cSDimitry Andric// ASIMD FP multiply accumulate, Dform, FZ 1580e837bb5cSDimitry Andric// ASIMD FP multiply accumulate, Dform, no FZ 1581e837bb5cSDimitry Andric// ASIMD FP multiply accumulate, Qform, FZ 1582e837bb5cSDimitry Andric// ASIMD FP multiply accumulate, Qform, no FZ 1583e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1584e837bb5cSDimitry Andric (instregex "^FMLAv", "^FMLSv")>; 1585e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1586e837bb5cSDimitry Andric (instregex "^FML[AS](v2f32|v1i32|v2i32|v1i64)")>; 1587e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1588e837bb5cSDimitry Andric (instregex "^FML[AS](v4f32|v2f64|v4i32|v2i64)")>; 1589e837bb5cSDimitry Andric 1590e837bb5cSDimitry Andric// ASIMD FP negate 1591e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^FNEGv")>; 1592e837bb5cSDimitry Andric 1593e837bb5cSDimitry Andric//-- 1594e837bb5cSDimitry Andric// 3.14 ASIMD Miscellaneous Instructions 1595e837bb5cSDimitry Andric//-- 1596e837bb5cSDimitry Andric 1597e837bb5cSDimitry Andric// ASIMD bit reverse 1598e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^RBITv")>; 1599e837bb5cSDimitry Andric 1600e837bb5cSDimitry Andric// ASIMD bitwise insert, D-form 1601e837bb5cSDimitry Andric// ASIMD bitwise insert, Q-form 1602e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], 1603e837bb5cSDimitry Andric (instregex "^BIFv", "^BITv", "^BSLv")>; 1604e837bb5cSDimitry Andric 1605e837bb5cSDimitry Andric// ASIMD count, D-form 1606e837bb5cSDimitry Andric// ASIMD count, Q-form 1607e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], 1608e837bb5cSDimitry Andric (instregex "^CLSv", "^CLZv", "^CNTv")>; 1609e837bb5cSDimitry Andric 1610e837bb5cSDimitry Andric// ASIMD duplicate, gen reg 1611e837bb5cSDimitry Andric// ASIMD duplicate, element 1612e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^DUPv")>; 161304eeddc0SDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^DUP(i8|i16|i32|i64)$")>; 1614e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^DUPv.+gpr")>; 1615e837bb5cSDimitry Andric 1616e837bb5cSDimitry Andric// ASIMD extract 1617e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^EXTv")>; 1618e837bb5cSDimitry Andric 1619e837bb5cSDimitry Andric// ASIMD extract narrow 1620e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^XTNv")>; 1621e837bb5cSDimitry Andric 1622e837bb5cSDimitry Andric// ASIMD extract narrow, saturating 1623e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1624e837bb5cSDimitry Andric (instregex "^SQXTNv", "^SQXTUNv", "^UQXTNv")>; 1625e837bb5cSDimitry Andric 1626e837bb5cSDimitry Andric// ASIMD insert, element to element 1627e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^INSv")>; 1628e837bb5cSDimitry Andric 1629e837bb5cSDimitry Andric// ASIMD transfer, element to gen reg 1630e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^[SU]MOVv")>; 1631e837bb5cSDimitry Andric 1632e837bb5cSDimitry Andric// ASIMD move, integer immed 1633e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], (instregex "^MOVIv")>; 1634e837bb5cSDimitry Andric 1635e837bb5cSDimitry Andric// ASIMD move, FP immed 1636e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_3_4Cyc_F23_F0123], (instregex "^FMOVv")>; 1637e837bb5cSDimitry Andric 1638e837bb5cSDimitry Andric// ASIMD transpose 1639e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^TRN1", "^TRN2")>; 1640e837bb5cSDimitry Andric 1641e837bb5cSDimitry Andric// ASIMD unzip/zip 1642e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1643e837bb5cSDimitry Andric (instregex "^UZP1", "^UZP2", "^ZIP1", "^ZIP2")>; 1644e837bb5cSDimitry Andric 1645e837bb5cSDimitry Andric// ASIMD reciprocal estimate, D-form 1646e837bb5cSDimitry Andric// ASIMD reciprocal estimate, Q-form 1647e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1648e837bb5cSDimitry Andric (instregex "^FRECPEv", "^FRECPXv", "^URECPEv", 1649e837bb5cSDimitry Andric "^FRSQRTEv", "^URSQRTEv")>; 1650e837bb5cSDimitry Andric 1651e837bb5cSDimitry Andric// ASIMD reciprocal step, D-form, FZ 1652e837bb5cSDimitry Andric// ASIMD reciprocal step, D-form, no FZ 1653e837bb5cSDimitry Andric// ASIMD reciprocal step, Q-form, FZ 1654e837bb5cSDimitry Andric// ASIMD reciprocal step, Q-form, no FZ 1655e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1656e837bb5cSDimitry Andric (instregex "^FRECPSv", "^FRSQRTSv")>; 1657e837bb5cSDimitry Andric 1658e837bb5cSDimitry Andric// ASIMD reverse 1659e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1660e837bb5cSDimitry Andric (instregex "^REV16v", "^REV32v", "^REV64v")>; 1661e837bb5cSDimitry Andric 1662e837bb5cSDimitry Andric// ASIMD table lookup, D-form 1663e837bb5cSDimitry Andric// ASIMD table lookup, Q-form 1664e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1665e837bb5cSDimitry Andric (instrs TBLv8i8One, TBLv16i8One, TBXv8i8One, TBXv16i8One)>; 1666e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_10Cyc_F0123], 1667e837bb5cSDimitry Andric (instrs TBLv8i8Two, TBLv16i8Two, TBXv8i8Two, TBXv16i8Two)>; 1668e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_15Cyc_F0123], 1669e837bb5cSDimitry Andric (instrs TBLv8i8Three, TBLv16i8Three, TBXv8i8Three, TBXv16i8Three)>; 1670e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_20Cyc_F0123], 1671e837bb5cSDimitry Andric (instrs TBLv8i8Four, TBLv16i8Four, TBXv8i8Four, TBXv16i8Four)>; 1672e837bb5cSDimitry Andric 1673e837bb5cSDimitry Andric// ASIMD transfer, element to word or word 1674e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^[SU]MOVv")>; 1675e837bb5cSDimitry Andric 1676e837bb5cSDimitry Andric// ASIMD transfer, element to gen reg 1677e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "(S|U)MOVv.*")>; 1678e837bb5cSDimitry Andric 1679e837bb5cSDimitry Andric// ASIMD transfer gen reg to element 1680e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^INSv")>; 1681e837bb5cSDimitry Andric 1682e837bb5cSDimitry Andric// ASIMD transpose 1683e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], 1684e837bb5cSDimitry Andric (instregex "^TRN1v", "^TRN2v", "^UZP1v", "^UZP2v")>; 1685e837bb5cSDimitry Andric 1686e837bb5cSDimitry Andric// ASIMD unzip/zip 1687e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_F0123], (instregex "^ZIP1v", "^ZIP2v")>; 1688e837bb5cSDimitry Andric 1689e837bb5cSDimitry Andric//-- 1690e837bb5cSDimitry Andric// 3.15 ASIMD Load Instructions 1691e837bb5cSDimitry Andric//-- 1692e837bb5cSDimitry Andric 1693e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 1 reg, D-form 1694e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 1 reg, Q-form 1695e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], 1696e837bb5cSDimitry Andric (instregex "^LD1Onev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1697e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01, WriteAdr], 1698e837bb5cSDimitry Andric (instregex "^LD1Onev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1699e837bb5cSDimitry Andric 1700e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 2 reg, D-form 1701e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 2 reg, Q-form 1702e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01], 1703e837bb5cSDimitry Andric (instregex "^LD1Twov(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1704e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_LS01, WriteAdr], 1705e837bb5cSDimitry Andric (instregex "^LD1Twov(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1706e837bb5cSDimitry Andric 1707e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 3 reg, D-form 1708e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 3 reg, Q-form 1709e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01], 1710e837bb5cSDimitry Andric (instregex "^LD1Threev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1711e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01, WriteAdr], 1712e837bb5cSDimitry Andric (instregex "^LD1Threev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1713e837bb5cSDimitry Andric 1714e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 4 reg, D-form 1715e837bb5cSDimitry Andric// ASIMD load, 1 element, multiple, 4 reg, Q-form 1716e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01], 1717e837bb5cSDimitry Andric (instregex "^LD1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1718e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01, WriteAdr], 1719e837bb5cSDimitry Andric (instregex "^LD1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1720e837bb5cSDimitry Andric 1721e837bb5cSDimitry Andric// ASIMD load, 1 element, one lane, B/H/S 1722e837bb5cSDimitry Andric// ASIMD load, 1 element, one lane, D 1723e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123], 1724e837bb5cSDimitry Andric (instregex "^LD1i(8|16|32|64)$")>; 1725e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123, WriteAdr], 1726e837bb5cSDimitry Andric (instregex "^LD1i(8|16|32|64)_POST$")>; 1727e837bb5cSDimitry Andric 1728e837bb5cSDimitry Andric// ASIMD load, 1 element, all lanes, D-form, B/H/S 1729e837bb5cSDimitry Andric// ASIMD load, 1 element, all lanes, D-form, D 1730e837bb5cSDimitry Andric// ASIMD load, 1 element, all lanes, Q-form 1731e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123], 1732e837bb5cSDimitry Andric (instregex "^LD1Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1733e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123, WriteAdr], 1734e837bb5cSDimitry Andric (instregex "^LD1Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1735e837bb5cSDimitry Andric 1736e837bb5cSDimitry Andric// ASIMD load, 2 element, multiple, D-form, B/H/S 1737e837bb5cSDimitry Andric// ASIMD load, 2 element, multiple, Q-form, D 1738e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123], 1739e837bb5cSDimitry Andric (instregex "^LD2Twov(8b|4h|2s|16b|8h|4s|2d)$")>; 1740e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123, WriteAdr], 1741e837bb5cSDimitry Andric (instregex "^LD2Twov(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1742e837bb5cSDimitry Andric 1743e837bb5cSDimitry Andric// ASIMD load, 2 element, one lane, B/H 1744e837bb5cSDimitry Andric// ASIMD load, 2 element, one lane, S 1745e837bb5cSDimitry Andric// ASIMD load, 2 element, one lane, D 1746e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123], 1747e837bb5cSDimitry Andric (instregex "^LD2i(8|16|32|64)$")>; 1748e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123, WriteAdr], 1749e837bb5cSDimitry Andric (instregex "^LD2i(8|16|32|64)_POST$")>; 1750e837bb5cSDimitry Andric 1751e837bb5cSDimitry Andric// ASIMD load, 2 element, all lanes, D-form, B/H/S 1752e837bb5cSDimitry Andric// ASIMD load, 2 element, all lanes, D-form, D 1753e837bb5cSDimitry Andric// ASIMD load, 2 element, all lanes, Q-form 1754e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123], 1755e837bb5cSDimitry Andric (instregex "^LD2Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1756e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_5Cyc_LS01_F0123, WriteAdr], 1757e837bb5cSDimitry Andric (instregex "^LD2Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1758e837bb5cSDimitry Andric 1759e837bb5cSDimitry Andric// ASIMD load, 3 element, multiple, D-form, B/H/S 1760e837bb5cSDimitry Andric// ASIMD load, 3 element, multiple, Q-form, B/H/S 1761e837bb5cSDimitry Andric// ASIMD load, 3 element, multiple, Q-form, D 1762e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_LS01_F0123], 1763e837bb5cSDimitry Andric (instregex "^LD3Threev(8b|4h|2s|16b|8h|4s|2d)$")>; 1764e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_LS01_F0123, WriteAdr], 1765e837bb5cSDimitry Andric (instregex "^LD3Threev(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1766e837bb5cSDimitry Andric 1767e837bb5cSDimitry Andric// ASIMD load, 3 element, one lone, B/H 1768e837bb5cSDimitry Andric// ASIMD load, 3 element, one lane, S 1769e837bb5cSDimitry Andric// ASIMD load, 3 element, one lane, D 1770e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_7Cyc_LS01_F0123], 1771e837bb5cSDimitry Andric (instregex "^LD3i(8|16|32|64)$")>; 1772e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_7Cyc_LS01_F0123, WriteAdr], 1773e837bb5cSDimitry Andric (instregex "^LD3i(8|16|32|64)_POST$")>; 1774e837bb5cSDimitry Andric 1775e837bb5cSDimitry Andric// ASIMD load, 3 element, all lanes, D-form, B/H/S 1776e837bb5cSDimitry Andric// ASIMD load, 3 element, all lanes, D-form, D 1777e837bb5cSDimitry Andric// ASIMD load, 3 element, all lanes, Q-form, B/H/S 1778e837bb5cSDimitry Andric// ASIMD load, 3 element, all lanes, Q-form, D 1779e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_7Cyc_LS01_F0123], 1780e837bb5cSDimitry Andric (instregex "^LD3Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1781e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_7Cyc_LS01_F0123, WriteAdr], 1782e837bb5cSDimitry Andric (instregex "^LD3Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1783e837bb5cSDimitry Andric 1784e837bb5cSDimitry Andric// ASIMD load, 4 element, multiple, D-form, B/H/S 1785e837bb5cSDimitry Andric// ASIMD load, 4 element, multiple, Q-form, B/H/S 1786e837bb5cSDimitry Andric// ASIMD load, 4 element, multiple, Q-form, D 1787e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_LS01_F0123], 1788e837bb5cSDimitry Andric (instregex "^LD4Fourv(8b|4h|2s|16b|8h|4s|2d)$")>; 1789e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_LS01_F0123, WriteAdr], 1790e837bb5cSDimitry Andric (instregex "^LD4Fourv(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1791e837bb5cSDimitry Andric 1792e837bb5cSDimitry Andric// ASIMD load, 4 element, one lane, B/H 1793e837bb5cSDimitry Andric// ASIMD load, 4 element, one lane, S 1794e837bb5cSDimitry Andric// ASIMD load, 4 element, one lane, D 1795e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_F0123], 1796e837bb5cSDimitry Andric (instregex "^LD4i(8|16|32|64)$")>; 1797e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_F0123, WriteAdr], 1798e837bb5cSDimitry Andric (instregex "^LD4i(8|16|32|64)_POST$")>; 1799e837bb5cSDimitry Andric 1800e837bb5cSDimitry Andric// ASIMD load, 4 element, all lanes, D-form, B/H/S 1801e837bb5cSDimitry Andric// ASIMD load, 4 element, all lanes, D-form, D 1802e837bb5cSDimitry Andric// ASIMD load, 4 element, all lanes, Q-form, B/H/S 1803e837bb5cSDimitry Andric// ASIMD load, 4 element, all lanes, Q-form, D 1804e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_F0123], 1805e837bb5cSDimitry Andric (instregex "^LD4Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1806e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_LS01_F0123, WriteAdr], 1807e837bb5cSDimitry Andric (instregex "^LD4Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1808e837bb5cSDimitry Andric 1809e837bb5cSDimitry Andric//-- 1810e837bb5cSDimitry Andric// 3.16 ASIMD Store Instructions 1811e837bb5cSDimitry Andric//-- 1812e837bb5cSDimitry Andric 1813e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 1 reg, D-form 1814e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 1 reg, Q-form 1815e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01], 1816e837bb5cSDimitry Andric (instregex "^ST1Onev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1817e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01, WriteAdr], 1818e837bb5cSDimitry Andric (instregex "^ST1Onev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1819e837bb5cSDimitry Andric 1820e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 2 reg, D-form 1821e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 2 reg, Q-form 1822e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01], 1823e837bb5cSDimitry Andric (instregex "^ST1Twov(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1824e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01, WriteAdr], 1825e837bb5cSDimitry Andric (instregex "^ST1Twov(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1826e837bb5cSDimitry Andric 1827e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 3 reg, D-form 1828e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 3 reg, Q-form 1829e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01], 1830e837bb5cSDimitry Andric (instregex "^ST1Threev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1831e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01, WriteAdr], 1832e837bb5cSDimitry Andric (instregex "^ST1Threev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1833e837bb5cSDimitry Andric 1834e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 4 reg, D-form 1835e837bb5cSDimitry Andric// ASIMD store, 1 element, multiple, 4 reg, Q-form 1836e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01], 1837e837bb5cSDimitry Andric (instregex "^ST1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 1838e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01, WriteAdr], 1839e837bb5cSDimitry Andric (instregex "^ST1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 1840e837bb5cSDimitry Andric 1841e837bb5cSDimitry Andric// ASIMD store, 1 element, one lane, B/H/S 1842e837bb5cSDimitry Andric// ASIMD store, 1 element, one lane, D 1843e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1844e837bb5cSDimitry Andric (instregex "^ST1i(8|16|32|64)$")>; 1845e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1846e837bb5cSDimitry Andric (instregex "^ST1i(8|16|32|64)_POST$")>; 1847e837bb5cSDimitry Andric 1848e837bb5cSDimitry Andric// ASIMD store, 2 element, multiple, D-form, B/H/S 1849e837bb5cSDimitry Andric// ASIMD store, 2 element, multiple, Q-form, B/H/S 1850e837bb5cSDimitry Andric// ASIMD store, 2 element, multiple, Q-form, D 1851e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1852e837bb5cSDimitry Andric (instregex "^ST2Twov(8b|4h|2s|16b|8h|4s|2d)$")>; 1853e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1854e837bb5cSDimitry Andric (instregex "^ST2Twov(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1855e837bb5cSDimitry Andric 1856e837bb5cSDimitry Andric// ASIMD store, 2 element, one lane, B/H/S 1857e837bb5cSDimitry Andric// ASIMD store, 2 element, one lane, D 1858e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1859e837bb5cSDimitry Andric (instregex "^ST2i(8|16|32|64)$")>; 1860e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1861e837bb5cSDimitry Andric (instregex "^ST2i(8|16|32|64)_POST$")>; 1862e837bb5cSDimitry Andric 1863e837bb5cSDimitry Andric// ASIMD store, 3 element, multiple, D-form, B/H/S 1864e837bb5cSDimitry Andric// ASIMD store, 3 element, multiple, Q-form, B/H/S 1865e837bb5cSDimitry Andric// ASIMD store, 3 element, multiple, Q-form, D 1866e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1867e837bb5cSDimitry Andric (instregex "^ST3Threev(8b|4h|2s|16b|8h|4s|2d)$")>; 1868e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1869e837bb5cSDimitry Andric (instregex "^ST3Threev(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1870e837bb5cSDimitry Andric 1871e837bb5cSDimitry Andric// ASIMD store, 3 element, one lane, B/H 1872e837bb5cSDimitry Andric// ASIMD store, 3 element, one lane, S 1873e837bb5cSDimitry Andric// ASIMD store, 3 element, one lane, D 1874e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1875e837bb5cSDimitry Andric (instregex "^ST3i(8|16|32|64)$")>; 1876e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1877e837bb5cSDimitry Andric (instregex "^ST3i(8|16|32|64)_POST$")>; 1878e837bb5cSDimitry Andric 1879e837bb5cSDimitry Andric// ASIMD store, 4 element, multiple, D-form, B/H/S 1880e837bb5cSDimitry Andric// ASIMD store, 4 element, multiple, Q-form, B/H/S 1881e837bb5cSDimitry Andric// ASIMD store, 4 element, multiple, Q-form, D 1882e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1883e837bb5cSDimitry Andric (instregex "^ST4Fourv(8b|4h|2s|16b|8h|4s|2d)$")>; 1884e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1885e837bb5cSDimitry Andric (instregex "^ST4Fourv(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 1886e837bb5cSDimitry Andric 1887e837bb5cSDimitry Andric// ASIMD store, 4 element, one lane, B/H 1888e837bb5cSDimitry Andric// ASIMD store, 4 element, one lane, S 1889e837bb5cSDimitry Andric// ASIMD store, 4 element, one lane, D 1890e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123], 1891e837bb5cSDimitry Andric (instregex "^ST4i(8|16|32|64)$")>; 1892e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_1Cyc_LS01_F0123, WriteAdr], 1893e837bb5cSDimitry Andric (instregex "^ST4i(8|16|32|64)_POST$")>; 1894e837bb5cSDimitry Andric 1895e837bb5cSDimitry Andric// V8.1a Atomics (LSE) 1896e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1897e837bb5cSDimitry Andric (instrs CASB, CASH, CASW, CASX)>; 1898e837bb5cSDimitry Andric 1899e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1900e837bb5cSDimitry Andric (instrs CASAB, CASAH, CASAW, CASAX)>; 1901e837bb5cSDimitry Andric 1902e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1903e837bb5cSDimitry Andric (instrs CASLB, CASLH, CASLW, CASLX)>; 1904e837bb5cSDimitry Andric 1905e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1906e837bb5cSDimitry Andric (instrs CASALB, CASALH, CASALW, CASALX)>; 1907e837bb5cSDimitry Andric 1908e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1909e837bb5cSDimitry Andric (instrs LDLARB, LDLARH, LDLARW, LDLARX)>; 1910e837bb5cSDimitry Andric 1911e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1912e837bb5cSDimitry Andric (instrs LDADDB, LDADDH, LDADDW, LDADDX)>; 1913e837bb5cSDimitry Andric 1914e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1915e837bb5cSDimitry Andric (instrs LDADDAB, LDADDAH, LDADDAW, LDADDAX)>; 1916e837bb5cSDimitry Andric 1917e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1918e837bb5cSDimitry Andric (instrs LDADDLB, LDADDLH, LDADDLW, LDADDLX)>; 1919e837bb5cSDimitry Andric 1920e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1921e837bb5cSDimitry Andric (instrs LDADDALB, LDADDALH, LDADDALW, LDADDALX)>; 1922e837bb5cSDimitry Andric 1923e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1924e837bb5cSDimitry Andric (instrs LDCLRB, LDCLRH, LDCLRW, LDCLRX)>; 1925e837bb5cSDimitry Andric 1926e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1927e837bb5cSDimitry Andric (instrs LDCLRAB, LDCLRAH, LDCLRAW, LDCLRAX)>; 1928e837bb5cSDimitry Andric 1929e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1930e837bb5cSDimitry Andric (instrs LDCLRLB, LDCLRLH, LDCLRLW, LDCLRLX)>; 1931e837bb5cSDimitry Andric 1932e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1933e837bb5cSDimitry Andric (instrs LDCLRALB, LDCLRALH, LDCLRALW, LDCLRALX)>; 1934e837bb5cSDimitry Andric 1935e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1936e837bb5cSDimitry Andric (instrs LDEORB, LDEORH, LDEORW, LDEORX)>; 1937e837bb5cSDimitry Andric 1938e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1939e837bb5cSDimitry Andric (instrs LDEORAB, LDEORAH, LDEORAW, LDEORAX)>; 1940e837bb5cSDimitry Andric 1941e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1942e837bb5cSDimitry Andric (instrs LDEORLB, LDEORLH, LDEORLW, LDEORLX)>; 1943e837bb5cSDimitry Andric 1944e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1945e837bb5cSDimitry Andric (instrs LDEORALB, LDEORALH, LDEORALW, LDEORALX)>; 1946e837bb5cSDimitry Andric 1947e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1948e837bb5cSDimitry Andric (instrs LDSETB, LDSETH, LDSETW, LDSETX)>; 1949e837bb5cSDimitry Andric 1950e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1951e837bb5cSDimitry Andric (instrs LDSETAB, LDSETAH, LDSETAW, LDSETAX)>; 1952e837bb5cSDimitry Andric 1953e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1954e837bb5cSDimitry Andric (instrs LDSETLB, LDSETLH, LDSETLW, LDSETLX)>; 1955e837bb5cSDimitry Andric 1956e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1957e837bb5cSDimitry Andric (instrs LDSETALB, LDSETALH, LDSETALW, LDSETALX)>; 1958e837bb5cSDimitry Andric 1959e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1960e837bb5cSDimitry Andric (instrs LDSMAXB, LDSMAXH, LDSMAXW, LDSMAXX, 1961e837bb5cSDimitry Andric LDSMAXAB, LDSMAXAH, LDSMAXAW, LDSMAXAX, 1962e837bb5cSDimitry Andric LDSMAXLB, LDSMAXLH, LDSMAXLW, LDSMAXLX, 1963e837bb5cSDimitry Andric LDSMAXALB, LDSMAXALH, LDSMAXALW, LDSMAXALX)>; 1964e837bb5cSDimitry Andric 1965e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1966e837bb5cSDimitry Andric (instrs LDSMINB, LDSMINH, LDSMINW, LDSMINX, 1967e837bb5cSDimitry Andric LDSMINAB, LDSMINAH, LDSMINAW, LDSMINAX, 1968e837bb5cSDimitry Andric LDSMINLB, LDSMINLH, LDSMINLW, LDSMINLX, 1969e837bb5cSDimitry Andric LDSMINALB, LDSMINALH, LDSMINALW, LDSMINALX)>; 1970e837bb5cSDimitry Andric 1971e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1972e837bb5cSDimitry Andric (instrs LDUMAXB, LDUMAXH, LDUMAXW, LDUMAXX, 1973e837bb5cSDimitry Andric LDUMAXAB, LDUMAXAH, LDUMAXAW, LDUMAXAX, 1974e837bb5cSDimitry Andric LDUMAXLB, LDUMAXLH, LDUMAXLW, LDUMAXLX, 1975e837bb5cSDimitry Andric LDUMAXALB, LDUMAXALH, LDUMAXALW, LDUMAXALX)>; 1976e837bb5cSDimitry Andric 1977e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1978e837bb5cSDimitry Andric (instrs LDUMINB, LDUMINH, LDUMINW, LDUMINX, 1979e837bb5cSDimitry Andric LDUMINAB, LDUMINAH, LDUMINAW, LDUMINAX, 1980e837bb5cSDimitry Andric LDUMINLB, LDUMINLH, LDUMINLW, LDUMINLX, 1981e837bb5cSDimitry Andric LDUMINALB, LDUMINALH, LDUMINALW, LDUMINALX)>; 1982e837bb5cSDimitry Andric 1983e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1984e837bb5cSDimitry Andric (instrs SWPB, SWPH, SWPW, SWPX)>; 1985e837bb5cSDimitry Andric 1986e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1987e837bb5cSDimitry Andric (instrs SWPAB, SWPAH, SWPAW, SWPAX)>; 1988e837bb5cSDimitry Andric 1989e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_6Cyc_I0123, WriteAtomic], 1990e837bb5cSDimitry Andric (instrs SWPLB, SWPLH, SWPLW, SWPLX)>; 1991e837bb5cSDimitry Andric 1992e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I0123, WriteAtomic], 1993e837bb5cSDimitry Andric (instrs SWPALB, SWPALH, SWPALW, SWPALX)>; 1994e837bb5cSDimitry Andric 1995e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_4Cyc_I0123, WriteAtomic], 1996e837bb5cSDimitry Andric (instrs STLLRB, STLLRH, STLLRW, STLLRX)>; 1997e837bb5cSDimitry Andric 1998e837bb5cSDimitry Andric// V8.3a PAC 1999e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_11Cyc_LS01_I1], (instregex "^LDRAA", "^LDRAB")>; 2000e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I123], 2001e837bb5cSDimitry Andric (instrs BLRAA, BLRAAZ, BLRAB, BLRABZ, 2002e837bb5cSDimitry Andric BRAA, BRAAZ, BRAB, BRABZ)>; 2003e837bb5cSDimitry Andricdef : InstRW<[THX3T110Write_8Cyc_I123], (instrs RETAA, RETAB)>; 2004e837bb5cSDimitry Andric 2005e837bb5cSDimitry Andric} // SchedModel = ThunderX3T110Model 2006