1234285Sdim//===-- HexagonIntrinsics.td - Instruction intrinsics ------*- tablegen -*-===// 2234285Sdim// 3234285Sdim// The LLVM Compiler Infrastructure 4234285Sdim// 5234285Sdim// This file is distributed under the University of Illinois Open Source 6234285Sdim// License. See LICENSE.TXT for details. 7234285Sdim// 8234285Sdim//===----------------------------------------------------------------------===// 9234285Sdim// This is populated based on the following specs: 10234285Sdim// Hexagon V2 Architecture 11234285Sdim// Application-Level Specification 12234285Sdim// 80-V9418-8 Rev. B 13234285Sdim// March 4, 2008 14234285Sdim//===----------------------------------------------------------------------===// 15234285Sdim 16234285Sdim// 17234285Sdim// ALU 32 types. 18234285Sdim// 19234285Sdim 20234285Sdimclass qi_ALU32_sisi<string opc, Intrinsic IntID> 21234285Sdim : ALU32_rr<(outs PredRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 22234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 23234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 24234285Sdim 25234285Sdimclass qi_ALU32_sis10<string opc, Intrinsic IntID> 26234285Sdim : ALU32_rr<(outs PredRegs:$dst), (ins IntRegs:$src1, s10Imm:$src2), 27234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 28234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 29234285Sdim 30234285Sdimclass qi_ALU32_sis8<string opc, Intrinsic IntID> 31234285Sdim : ALU32_rr<(outs PredRegs:$dst), (ins IntRegs:$src1, s8Imm:$src2), 32234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 33234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 34234285Sdim 35234285Sdimclass qi_ALU32_siu8<string opc, Intrinsic IntID> 36234285Sdim : ALU32_rr<(outs PredRegs:$dst), (ins IntRegs:$src1, u8Imm:$src2), 37234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 38234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 39234285Sdim 40234285Sdimclass qi_ALU32_siu9<string opc, Intrinsic IntID> 41234285Sdim : ALU32_rr<(outs PredRegs:$dst), (ins IntRegs:$src1, u9Imm:$src2), 42234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 43234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 44234285Sdim 45234285Sdimclass si_ALU32_qisisi<string opc, Intrinsic IntID> 46234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2, 47234285Sdim IntRegs:$src3), 48234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, $src3)")), 49234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2, 50234285Sdim IntRegs:$src3))]>; 51234285Sdim 52234285Sdimclass si_ALU32_qis8si<string opc, Intrinsic IntID> 53234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, s8Imm:$src2, 54234285Sdim IntRegs:$src3), 55234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2, $src3)")), 56234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2, 57234285Sdim IntRegs:$src3))]>; 58234285Sdim 59234285Sdimclass si_ALU32_qisis8<string opc, Intrinsic IntID> 60234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2, 61234285Sdim s8Imm:$src3), 62234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, #$src3)")), 63234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2, 64234285Sdim imm:$src3))]>; 65234285Sdim 66234285Sdimclass si_ALU32_qis8s8<string opc, Intrinsic IntID> 67234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, s8Imm:$src2, s8Imm:$src3), 68234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2, #$src3)")), 69234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2, imm:$src3))]>; 70234285Sdim 71234285Sdimclass si_ALU32_sisi<string opc, Intrinsic IntID> 72234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 73234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 74234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 75234285Sdim 76234285Sdimclass si_ALU32_sisi_sat<string opc, Intrinsic IntID> 77234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 78234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 79234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 80234285Sdim 81234285Sdimclass si_ALU32_sisi_rnd<string opc, Intrinsic IntID> 82234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 83234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):rnd")), 84234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 85234285Sdim 86234285Sdimclass si_ALU32_sis16<string opc, Intrinsic IntID> 87234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, s16Imm:$src2), 88234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 89234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 90234285Sdim 91234285Sdimclass si_ALU32_sis10<string opc, Intrinsic IntID> 92234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, s10Imm:$src2), 93234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 94234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 95234285Sdim 96234285Sdimclass si_ALU32_s10si<string opc, Intrinsic IntID> 97234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins s10Imm:$src1, IntRegs:$src2), 98234285Sdim !strconcat("$dst = ", !strconcat(opc , "(#$src1, $src2)")), 99234285Sdim [(set IntRegs:$dst, (IntID imm:$src1, IntRegs:$src2))]>; 100234285Sdim 101234285Sdimclass si_lo_ALU32_siu16<string opc, Intrinsic IntID> 102234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, u16Imm:$src2), 103234285Sdim !strconcat("$dst.l = ", !strconcat(opc , "#$src2")), 104234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 105234285Sdim 106234285Sdimclass si_hi_ALU32_siu16<string opc, Intrinsic IntID> 107234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, u16Imm:$src2), 108234285Sdim !strconcat("$dst.h = ", !strconcat(opc , "#$src2")), 109234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 110234285Sdim 111234285Sdimclass si_ALU32_s16<string opc, Intrinsic IntID> 112234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins s16Imm:$src1), 113234285Sdim !strconcat("$dst = ", !strconcat(opc , "#$src1")), 114234285Sdim [(set IntRegs:$dst, (IntID imm:$src1))]>; 115234285Sdim 116234285Sdimclass di_ALU32_s8<string opc, Intrinsic IntID> 117234285Sdim : ALU32_rr<(outs DoubleRegs:$dst), (ins s8Imm:$src1), 118234285Sdim !strconcat("$dst = ", !strconcat(opc , "#$src1")), 119234285Sdim [(set DoubleRegs:$dst, (IntID imm:$src1))]>; 120234285Sdim 121234285Sdimclass di_ALU64_di<string opc, Intrinsic IntID> 122234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src), 123234285Sdim !strconcat("$dst = ", !strconcat(opc , "$src")), 124234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src))]>; 125234285Sdim 126234285Sdimclass si_ALU32_si<string opc, Intrinsic IntID> 127234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src), 128234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 129234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 130234285Sdim 131234285Sdimclass si_ALU32_si_tfr<string opc, Intrinsic IntID> 132234285Sdim : ALU32_rr<(outs IntRegs:$dst), (ins IntRegs:$src), 133234285Sdim !strconcat("$dst = ", !strconcat(opc , "$src")), 134234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 135234285Sdim 136234285Sdim// 137234285Sdim// ALU 64 types. 138234285Sdim// 139234285Sdim 140234285Sdimclass si_ALU64_si_sat<string opc, Intrinsic IntID> 141234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src), 142234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src):sat")), 143234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 144234285Sdim 145234285Sdimclass si_ALU64_didi<string opc, Intrinsic IntID> 146234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 147234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 148234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 149234285Sdim 150234285Sdimclass di_ALU64_sidi<string opc, Intrinsic IntID> 151234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins IntRegs:$src1, DoubleRegs:$src2), 152234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 153234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, DoubleRegs:$src2))]>; 154234285Sdim 155234285Sdimclass di_ALU64_didi<string opc, Intrinsic IntID> 156234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 157234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 158234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 159234285Sdim DoubleRegs:$src2))]>; 160234285Sdim 161234285Sdimclass di_ALU64_qididi<string opc, Intrinsic IntID> 162234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins IntRegs:$src1, DoubleRegs:$src2, 163234285Sdim DoubleRegs:$src3), 164234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, $src3)")), 165234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, DoubleRegs:$src2, 166234285Sdim DoubleRegs:$src3))]>; 167234285Sdim 168234285Sdimclass di_ALU64_sisi<string opc, Intrinsic IntID> 169234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 170234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 171234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 172234285Sdim 173234285Sdimclass di_ALU64_didi_sat<string opc, Intrinsic IntID> 174234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 175234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 176234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 177234285Sdim DoubleRegs:$src2))]>; 178234285Sdim 179234285Sdimclass di_ALU64_didi_rnd<string opc, Intrinsic IntID> 180234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 181234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):rnd")), 182234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 183234285Sdim DoubleRegs:$src2))]>; 184234285Sdim 185234285Sdimclass di_ALU64_didi_crnd<string opc, Intrinsic IntID> 186234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 187234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):crnd")), 188234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 189234285Sdim DoubleRegs:$src2))]>; 190234285Sdim 191234285Sdimclass di_ALU64_didi_rnd_sat<string opc, Intrinsic IntID> 192234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 193234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):rnd:sat")), 194234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 195234285Sdim DoubleRegs:$src2))]>; 196234285Sdim 197234285Sdimclass di_ALU64_didi_crnd_sat<string opc, Intrinsic IntID> 198234285Sdim : ALU64_rr<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 199234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):crnd:sat")), 200234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 201234285Sdim DoubleRegs:$src2))]>; 202234285Sdim 203234285Sdimclass qi_ALU64_didi<string opc, Intrinsic IntID> 204234285Sdim : ALU64_rr<(outs PredRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 205234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 206234285Sdim [(set PredRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 207234285Sdim 208234285Sdimclass si_ALU64_sisi<string opc, Intrinsic IntID> 209234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 210234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 211234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 212234285Sdim 213234285Sdimclass si_ALU64_sisi_sat_lh<string opc, Intrinsic IntID> 214234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 215234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):sat")), 216234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 217234285Sdim 218234285Sdimclass si_ALU64_sisi_l16_sat_hh<string opc, Intrinsic IntID> 219234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 220234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H):sat")), 221234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 222234285Sdim 223234285Sdimclass si_ALU64_sisi_l16_sat_lh<string opc, Intrinsic IntID> 224234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 225234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):sat")), 226234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 227234285Sdim 228234285Sdimclass si_ALU64_sisi_l16_sat_hl<string opc, Intrinsic IntID> 229234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 230234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L):sat")), 231234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 232234285Sdim 233234285Sdimclass si_ALU64_sisi_l16_sat_ll<string opc, Intrinsic IntID> 234234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 235234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L):sat")), 236234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 237234285Sdim 238234285Sdimclass si_ALU64_sisi_l16_hh<string opc, Intrinsic IntID> 239234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 240234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H)")), 241234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 242234285Sdim 243234285Sdimclass si_ALU64_sisi_l16_hl<string opc, Intrinsic IntID> 244234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 245234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L)")), 246234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 247234285Sdim 248234285Sdimclass si_ALU64_sisi_l16_lh<string opc, Intrinsic IntID> 249234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 250234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H)")), 251234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 252234285Sdim 253234285Sdimclass si_ALU64_sisi_l16_ll<string opc, Intrinsic IntID> 254234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 255234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L)")), 256234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 257234285Sdim 258234285Sdimclass si_ALU64_sisi_h16_sat_hh<string opc, Intrinsic IntID> 259234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 260234285Sdim !strconcat("$dst = ", !strconcat(opc , 261234285Sdim "($src1.H, $src2.H):sat:<<16")), 262234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 263234285Sdim 264234285Sdimclass si_ALU64_sisi_h16_sat_lh<string opc, Intrinsic IntID> 265234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 266234285Sdim !strconcat("$dst = ", !strconcat(opc , 267234285Sdim "($src1.L, $src2.H):sat:<<16")), 268234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 269234285Sdim 270234285Sdimclass si_ALU64_sisi_h16_sat_hl<string opc, Intrinsic IntID> 271234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 272234285Sdim !strconcat("$dst = ", !strconcat(opc , 273234285Sdim "($src1.H, $src2.L):sat:<<16")), 274234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 275234285Sdim 276234285Sdimclass si_ALU64_sisi_h16_sat_ll<string opc, Intrinsic IntID> 277234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 278234285Sdim !strconcat("$dst = ", !strconcat(opc , 279234285Sdim "($src1.L, $src2.L):sat:<<16")), 280234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 281234285Sdim 282234285Sdimclass si_ALU64_sisi_h16_hh<string opc, Intrinsic IntID> 283234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 284234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H):<<16")), 285234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 286234285Sdim 287234285Sdimclass si_ALU64_sisi_h16_hl<string opc, Intrinsic IntID> 288234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 289234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L):<<16")), 290234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 291234285Sdim 292234285Sdimclass si_ALU64_sisi_h16_lh<string opc, Intrinsic IntID> 293234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 294234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):<<16")), 295234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 296234285Sdim 297234285Sdimclass si_ALU64_sisi_h16_ll<string opc, Intrinsic IntID> 298234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 299234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L):<<16")), 300234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 301234285Sdim 302234285Sdimclass si_ALU64_sisi_lh<string opc, Intrinsic IntID> 303234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 304234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H)")), 305234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 306234285Sdim 307234285Sdimclass si_ALU64_sisi_ll<string opc, Intrinsic IntID> 308234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 309234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L)")), 310234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 311234285Sdim 312234285Sdimclass si_ALU64_sisi_sat<string opc, Intrinsic IntID> 313234285Sdim : ALU64_rr<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 314234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 315234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 316234285Sdim 317234285Sdim// 318234285Sdim// SInst classes. 319234285Sdim// 320234285Sdim 321234285Sdimclass qi_SInst_qi<string opc, Intrinsic IntID> 322234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src), 323234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 324234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src))]>; 325234285Sdim 326234285Sdimclass qi_SInst_qi_pxfer<string opc, Intrinsic IntID> 327234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src), 328234285Sdim !strconcat("$dst = ", !strconcat(opc , "$src")), 329234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src))]>; 330234285Sdim 331234285Sdimclass qi_SInst_qiqi<string opc, Intrinsic IntID> 332234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 333234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 334234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 335234285Sdim 336234285Sdimclass qi_SInst_qiqi_neg<string opc, Intrinsic IntID> 337234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 338234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, !$src2)")), 339234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 340234285Sdim 341234285Sdimclass di_SInst_di<string opc, Intrinsic IntID> 342234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src), 343234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 344234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src))]>; 345234285Sdim 346234285Sdimclass di_SInst_di_sat<string opc, Intrinsic IntID> 347234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src), 348234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src):sat")), 349234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src))]>; 350234285Sdim 351234285Sdimclass si_SInst_di<string opc, Intrinsic IntID> 352234285Sdim : SInst<(outs IntRegs:$dst), (ins DoubleRegs:$src), 353234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 354234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src))]>; 355234285Sdim 356234285Sdimclass si_SInst_di_sat<string opc, Intrinsic IntID> 357234285Sdim : SInst<(outs IntRegs:$dst), (ins DoubleRegs:$src), 358234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src):sat")), 359234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src))]>; 360234285Sdim 361234285Sdimclass di_SInst_disi<string opc, Intrinsic IntID> 362234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2), 363234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 364234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2))]>; 365234285Sdim 366234285Sdimclass di_SInst_didi<string opc, Intrinsic IntID> 367234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 368234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 369234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 370234285Sdim 371234285Sdimclass di_SInst_si<string opc, Intrinsic IntID> 372234285Sdim : SInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1), 373234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1)")), 374234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1))]>; 375234285Sdim 376234285Sdimclass si_SInst_sisiu3<string opc, Intrinsic IntID> 377234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2, u3Imm:$src3), 378234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, #$src3)")), 379234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2, 380234285Sdim imm:$src3))]>; 381234285Sdim 382234285Sdimclass si_SInst_diu5<string opc, Intrinsic IntID> 383234285Sdim : SInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, u5Imm:$src2), 384234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 385234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, imm:$src2))]>; 386234285Sdim 387234285Sdimclass si_SInst_disi<string opc, Intrinsic IntID> 388234285Sdim : SInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2), 389234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 390234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2))]>; 391234285Sdim 392234285Sdimclass si_SInst_sidi<string opc, Intrinsic IntID> 393234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, DoubleRegs:$src2), 394234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 395234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, DoubleRegs:$src2))]>; 396234285Sdim 397234285Sdimclass di_SInst_disisi<string opc, Intrinsic IntID> 398234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2, 399234285Sdim IntRegs:$src3), 400234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, $src3)")), 401234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2, 402234285Sdim IntRegs:$src3))]>; 403234285Sdim 404234285Sdimclass di_SInst_sisi<string opc, Intrinsic IntID> 405234285Sdim : SInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 406234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 407234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 408234285Sdim 409234285Sdimclass qi_SInst_siu5<string opc, Intrinsic IntID> 410234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src1, u5Imm:$src2), 411234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 412234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 413234285Sdim 414234285Sdimclass qi_SInst_siu6<string opc, Intrinsic IntID> 415234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src1, u6Imm:$src2), 416234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 417234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 418234285Sdim 419234285Sdimclass qi_SInst_sisi<string opc, Intrinsic IntID> 420234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 421234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 422234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 423234285Sdim 424234285Sdimclass si_SInst_si<string opc, Intrinsic IntID> 425234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src), 426234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 427234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 428234285Sdim 429234285Sdimclass si_SInst_si_sat<string opc, Intrinsic IntID> 430234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src), 431234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src):sat")), 432234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 433234285Sdim 434234285Sdimclass di_SInst_qi<string opc, Intrinsic IntID> 435234285Sdim : SInst<(outs DoubleRegs:$dst), (ins IntRegs:$src), 436234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src)")), 437234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src))]>; 438234285Sdim 439234285Sdimclass si_SInst_qi<string opc, Intrinsic IntID> 440234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src), 441234285Sdim !strconcat("$dst = ", !strconcat(opc , "$src")), 442234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src))]>; 443234285Sdim 444234285Sdimclass si_SInst_qiqi<string opc, Intrinsic IntID> 445234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 446234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 447234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 448234285Sdim 449234285Sdimclass qi_SInst_si<string opc, Intrinsic IntID> 450234285Sdim : SInst<(outs PredRegs:$dst), (ins IntRegs:$src), 451234285Sdim !strconcat("$dst = ", !strconcat(opc , "$src")), 452234285Sdim [(set PredRegs:$dst, (IntID IntRegs:$src))]>; 453234285Sdim 454234285Sdimclass si_SInst_sisi<string opc, Intrinsic IntID> 455234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 456234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 457234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 458234285Sdim 459234285Sdimclass di_SInst_diu6<string opc, Intrinsic IntID> 460234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, u6Imm:$src2), 461234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 462234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, imm:$src2))]>; 463234285Sdim 464234285Sdimclass si_SInst_siu5<string opc, Intrinsic IntID> 465234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, u5Imm:$src2), 466234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 467234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 468234285Sdim 469234285Sdimclass si_SInst_siu5_rnd<string opc, Intrinsic IntID> 470234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, u5Imm:$src2), 471234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2):rnd")), 472234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 473234285Sdim 474234285Sdimclass si_SInst_siu5u5<string opc, Intrinsic IntID> 475234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, u5Imm:$src2, u5Imm:$src3), 476234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2, #$src3)")), 477234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2, imm:$src3))]>; 478234285Sdim 479234285Sdimclass si_SInst_sisisi_acc<string opc, Intrinsic IntID> 480234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 481234285Sdim IntRegs:$src2), 482234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2)")), 483234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 484234285Sdim IntRegs:$src2))], 485234285Sdim "$dst2 = $dst">; 486234285Sdim 487234285Sdimclass si_SInst_sisisi_nac<string opc, Intrinsic IntID> 488234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 489234285Sdim IntRegs:$src2), 490234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, $src2)")), 491234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 492234285Sdim IntRegs:$src2))], 493234285Sdim "$dst2 = $dst">; 494234285Sdim 495234285Sdimclass di_SInst_didisi_acc<string opc, Intrinsic IntID> 496234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 497234285Sdim IntRegs:$src2), 498234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2)")), 499234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 500234285Sdim DoubleRegs:$src1, 501234285Sdim IntRegs:$src2))], 502234285Sdim "$dst2 = $dst">; 503234285Sdim 504234285Sdimclass di_SInst_didisi_nac<string opc, Intrinsic IntID> 505234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 506234285Sdim IntRegs:$src2), 507234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, $src2)")), 508234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 509234285Sdim DoubleRegs:$src1, IntRegs:$src2))], 510234285Sdim "$dst2 = $dst">; 511234285Sdim 512234285Sdimclass si_SInst_sisiu5u5<string opc, Intrinsic IntID> 513234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 514234285Sdim u5Imm:$src2, u5Imm:$src3), 515234285Sdim !strconcat("$dst = ", !strconcat(opc , 516234285Sdim "($src1, #$src2, #$src3)")), 517234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 518234285Sdim imm:$src2, imm:$src3))], 519234285Sdim "$dst2 = $dst">; 520234285Sdim 521234285Sdimclass si_SInst_sisidi<string opc, Intrinsic IntID> 522234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 523234285Sdim DoubleRegs:$src2), 524234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 525234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 526234285Sdim DoubleRegs:$src2))], 527234285Sdim "$dst2 = $dst">; 528234285Sdim 529234285Sdimclass di_SInst_didiu6u6<string opc, Intrinsic IntID> 530234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 531234285Sdim u6Imm:$src2, u6Imm:$src3), 532234285Sdim !strconcat("$dst = ", !strconcat(opc , 533234285Sdim "($src1, #$src2, #$src3)")), 534234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 535234285Sdim imm:$src2, imm:$src3))], 536234285Sdim "$dst2 = $dst">; 537234285Sdim 538234285Sdimclass di_SInst_dididi<string opc, Intrinsic IntID> 539234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 540234285Sdim DoubleRegs:$src2), 541234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 542234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 543234285Sdim DoubleRegs:$src1, 544234285Sdim DoubleRegs:$src2))], 545234285Sdim "$dst2 = $dst">; 546234285Sdim 547234285Sdimclass di_SInst_diu6u6<string opc, Intrinsic IntID> 548234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, u6Imm:$src2, 549234285Sdim u6Imm:$src3), 550234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2, #$src3)")), 551234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, imm:$src2, 552234285Sdim imm:$src3))]>; 553234285Sdim 554234285Sdimclass di_SInst_didiqi<string opc, Intrinsic IntID> 555234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2, 556234285Sdim IntRegs:$src3), 557234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, $src3)")), 558234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2, 559234285Sdim IntRegs:$src3))]>; 560234285Sdim 561234285Sdimclass di_SInst_didiu3<string opc, Intrinsic IntID> 562234285Sdim : SInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2, 563234285Sdim u3Imm:$src3), 564234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2, #$src3)")), 565234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2, 566234285Sdim imm:$src3))]>; 567234285Sdim 568234285Sdimclass di_SInst_didisi_or<string opc, Intrinsic IntID> 569234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 570234285Sdim IntRegs:$src2), 571234285Sdim !strconcat("$dst |= ", !strconcat(opc , "($src1, $src2)")), 572234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 573234285Sdim IntRegs:$src2))], 574234285Sdim "$dst2 = $dst">; 575234285Sdim 576234285Sdimclass di_SInst_didisi_and<string opc, Intrinsic IntID> 577234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 578234285Sdim IntRegs:$src2), 579234285Sdim !strconcat("$dst &= ", !strconcat(opc , "($src1, $src2)")), 580234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 581234285Sdim IntRegs:$src2))], 582234285Sdim "$dst2 = $dst">; 583234285Sdim 584234285Sdimclass di_SInst_didiu6_and<string opc, Intrinsic IntID> 585234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 586234285Sdim u6Imm:$src2), 587234285Sdim !strconcat("$dst &= ", !strconcat(opc , "($src1, #$src2)")), 588234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 589234285Sdim imm:$src2))], 590234285Sdim "$dst2 = $dst">; 591234285Sdim 592234285Sdimclass di_SInst_didiu6_or<string opc, Intrinsic IntID> 593234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 594234285Sdim u6Imm:$src2), 595234285Sdim !strconcat("$dst |= ", !strconcat(opc , "($src1, #$src2)")), 596234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 597234285Sdim imm:$src2))], 598234285Sdim "$dst2 = $dst">; 599234285Sdim 600234285Sdimclass di_SInst_didiu6_xor<string opc, Intrinsic IntID> 601234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 602234285Sdim u6Imm:$src2), 603234285Sdim !strconcat("$dst ^= ", !strconcat(opc , "($src1, #$src2)")), 604234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 605234285Sdim imm:$src2))], 606234285Sdim "$dst2 = $dst">; 607234285Sdim 608234285Sdimclass si_SInst_sisisi_and<string opc, Intrinsic IntID> 609234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 610234285Sdim IntRegs:$src2), 611234285Sdim !strconcat("$dst &= ", !strconcat(opc , "($src1, $src2)")), 612234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 613234285Sdim IntRegs:$src2))], 614234285Sdim "$dst2 = $dst">; 615234285Sdim 616234285Sdimclass si_SInst_sisisi_or<string opc, Intrinsic IntID> 617234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 618234285Sdim IntRegs:$src2), 619234285Sdim !strconcat("$dst |= ", !strconcat(opc , "($src1, $src2)")), 620234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 621234285Sdim IntRegs:$src2))], 622234285Sdim "$dst2 = $dst">; 623234285Sdim 624234285Sdim 625234285Sdimclass si_SInst_sisiu5_and<string opc, Intrinsic IntID> 626234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 627234285Sdim u5Imm:$src2), 628234285Sdim !strconcat("$dst &= ", !strconcat(opc , "($src1, #$src2)")), 629234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 630234285Sdim imm:$src2))], 631234285Sdim "$dst2 = $dst">; 632234285Sdim 633234285Sdimclass si_SInst_sisiu5_or<string opc, Intrinsic IntID> 634234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 635234285Sdim u5Imm:$src2), 636234285Sdim !strconcat("$dst |= ", !strconcat(opc , "($src1, #$src2)")), 637234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 638234285Sdim imm:$src2))], 639234285Sdim "$dst2 = $dst">; 640234285Sdim 641234285Sdimclass si_SInst_sisiu5_xor<string opc, Intrinsic IntID> 642234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 643234285Sdim u5Imm:$src2), 644234285Sdim !strconcat("$dst ^= ", !strconcat(opc , "($src1, #$src2)")), 645234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 646234285Sdim imm:$src2))], 647234285Sdim "$dst2 = $dst">; 648234285Sdim 649234285Sdimclass si_SInst_sisiu5_acc<string opc, Intrinsic IntID> 650234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 651234285Sdim u5Imm:$src2), 652234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, #$src2)")), 653234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 654234285Sdim imm:$src2))], 655234285Sdim "$dst2 = $dst">; 656234285Sdim 657234285Sdimclass si_SInst_sisiu5_nac<string opc, Intrinsic IntID> 658234285Sdim : SInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 659234285Sdim u5Imm:$src2), 660234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, #$src2)")), 661234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 662234285Sdim imm:$src2))], 663234285Sdim "$dst2 = $dst">; 664234285Sdim 665234285Sdimclass di_SInst_didiu6_acc<string opc, Intrinsic IntID> 666234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 667234285Sdim u5Imm:$src2), 668234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, #$src2)")), 669234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 670234285Sdim DoubleRegs:$src1, imm:$src2))], 671234285Sdim "$dst2 = $dst">; 672234285Sdim 673234285Sdimclass di_SInst_didiu6_nac<string opc, Intrinsic IntID> 674234285Sdim : SInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 675234285Sdim u5Imm:$src2), 676234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, #$src2)")), 677234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, DoubleRegs:$src1, 678234285Sdim imm:$src2))], 679234285Sdim "$dst2 = $dst">; 680234285Sdim 681234285Sdim 682234285Sdim// 683234285Sdim// MInst classes. 684234285Sdim// 685234285Sdim 686234285Sdimclass di_MInst_sisi_rnd_hh_s1<string opc, Intrinsic IntID> 687234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 688234285Sdim !strconcat("$dst = ", !strconcat(opc , 689234285Sdim "($src1.H, $src2.H):<<1:rnd")), 690234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 691234285Sdim 692234285Sdimclass di_MInst_sisi_rnd_hh<string opc, Intrinsic IntID> 693234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 694234285Sdim !strconcat("$dst = ", !strconcat(opc , 695234285Sdim "($src1.H, $src2.H):rnd")), 696234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 697234285Sdim 698234285Sdimclass di_MInst_sisi_rnd_hl_s1<string opc, Intrinsic IntID> 699234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 700234285Sdim !strconcat("$dst = ", !strconcat(opc , 701234285Sdim "($src1.H, $src2.L):<<1:rnd")), 702234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 703234285Sdim 704234285Sdimclass di_MInst_sisi_rnd_hl<string opc, Intrinsic IntID> 705234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 706234285Sdim !strconcat("$dst = ", !strconcat(opc , 707234285Sdim "($src1.H, $src2.L):rnd")), 708234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 709234285Sdim 710234285Sdimclass di_MInst_sisi_rnd_lh_s1<string opc, Intrinsic IntID> 711234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 712234285Sdim !strconcat("$dst = ", !strconcat(opc , 713234285Sdim "($src1.L, $src2.H):<<1:rnd")), 714234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 715234285Sdim 716234285Sdimclass di_MInst_sisi_rnd_lh<string opc, Intrinsic IntID> 717234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 718234285Sdim !strconcat("$dst = ", !strconcat(opc , 719234285Sdim "($src1.L, $src2.H):rnd")), 720234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 721234285Sdim 722234285Sdimclass di_MInst_sisi_rnd_ll_s1<string opc, Intrinsic IntID> 723234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 724234285Sdim !strconcat("$dst = ", !strconcat(opc , 725234285Sdim "($src1.L, $src2.L):<<1:rnd")), 726234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 727234285Sdim 728234285Sdimclass di_MInst_sisi_rnd_ll<string opc, Intrinsic IntID> 729234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 730234285Sdim !strconcat("$dst = ", !strconcat(opc , 731234285Sdim "($src1.L, $src2.L):rnd")), 732234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 733234285Sdim 734234285Sdimclass di_MInst_disisi_acc<string opc, Intrinsic IntID> 735234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 736234285Sdim IntRegs:$src2), 737234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2)")), 738234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 739234285Sdim IntRegs:$src2))], 740234285Sdim "$dst2 = $dst">; 741234285Sdim 742234285Sdimclass di_MInst_disisi_nac<string opc, Intrinsic IntID> 743234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 744234285Sdim IntRegs:$src2), 745234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, $src2)")), 746234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 747234285Sdim IntRegs:$src2))], 748234285Sdim "$dst2 = $dst">; 749234285Sdim 750234285Sdimclass di_MInst_disisi_acc_sat<string opc, Intrinsic IntID> 751234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 752234285Sdim IntRegs:$src2), 753234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2):sat")), 754234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 755234285Sdim IntRegs:$src2))], 756234285Sdim "$dst2 = $dst">; 757234285Sdim 758234285Sdimclass di_MInst_disisi_nac_sat<string opc, Intrinsic IntID> 759234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 760234285Sdim IntRegs:$src2), 761234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, $src2):sat")), 762234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 763234285Sdim IntRegs:$src2))], 764234285Sdim "$dst2 = $dst">; 765234285Sdim 766234285Sdimclass di_MInst_disisi_acc_sat_conj<string opc, Intrinsic IntID> 767234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 768234285Sdim IntRegs:$src2), 769234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2*):sat")), 770234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 771234285Sdim IntRegs:$src2))], 772234285Sdim "$dst2 = $dst">; 773234285Sdim 774234285Sdimclass di_MInst_disisi_nac_sat_conj<string opc, Intrinsic IntID> 775234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 776234285Sdim IntRegs:$src2), 777234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1, $src2*):sat")), 778234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 779234285Sdim IntRegs:$src2))], 780234285Sdim "$dst2 = $dst">; 781234285Sdim 782234285Sdimclass di_MInst_disisi_nac_s1_sat<string opc, Intrinsic IntID> 783234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 784234285Sdim IntRegs:$src2), 785234285Sdim !strconcat("$dst -= ", !strconcat(opc , 786234285Sdim "($src1, $src2):<<1:sat")), 787234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 788234285Sdim IntRegs:$src2))], 789234285Sdim "$dst2 = $dst">; 790234285Sdim 791234285Sdimclass di_MInst_disisi_acc_s1_sat_conj<string opc, Intrinsic IntID> 792234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 793234285Sdim IntRegs:$src2), 794234285Sdim !strconcat("$dst += ", !strconcat(opc , 795234285Sdim "($src1, $src2*):<<1:sat")), 796234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 797234285Sdim IntRegs:$src2))], 798234285Sdim "$dst2 = $dst">; 799234285Sdim 800234285Sdimclass di_MInst_disisi_nac_s1_sat_conj<string opc, Intrinsic IntID> 801234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 802234285Sdim IntRegs:$src2), 803234285Sdim !strconcat("$dst -= ", !strconcat(opc , 804234285Sdim "($src1, $src2*):<<1:sat")), 805234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 806234285Sdim IntRegs:$src2))], 807234285Sdim "$dst2 = $dst">; 808234285Sdim 809234285Sdimclass di_MInst_s8s8<string opc, Intrinsic IntID> 810234285Sdim : MInst<(outs DoubleRegs:$dst), (ins s8Imm:$src1, s8Imm:$src2), 811234285Sdim !strconcat("$dst = ", !strconcat(opc , "(#$src1, #$src2)")), 812234285Sdim [(set DoubleRegs:$dst, (IntID imm:$src1, imm:$src2))]>; 813234285Sdim 814245431Sdimclass si_MInst_sis9<string opc, Intrinsic IntID> 815245431Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, s9Imm:$src2), 816245431Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, #$src2)")), 817245431Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, imm:$src2))]>; 818245431Sdim 819234285Sdimclass si_MInst_sisi<string opc, Intrinsic IntID> 820234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 821234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 822234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 823234285Sdim 824234285Sdimclass di_MInst_sisi_hh<string opc, Intrinsic IntID> 825234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 826234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H)")), 827234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 828234285Sdim 829234285Sdimclass di_MInst_sisi_hh_s1<string opc, Intrinsic IntID> 830234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 831234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H):<<1")), 832234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 833234285Sdim 834234285Sdimclass di_MInst_sisi_lh<string opc, Intrinsic IntID> 835234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 836234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H)")), 837234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 838234285Sdim 839234285Sdimclass di_MInst_sisi_lh_s1<string opc, Intrinsic IntID> 840234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 841234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):<<1")), 842234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 843234285Sdim 844234285Sdimclass di_MInst_sisi_hl<string opc, Intrinsic IntID> 845234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 846234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L)")), 847234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 848234285Sdim 849234285Sdimclass di_MInst_sisi_hl_s1<string opc, Intrinsic IntID> 850234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 851234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L):<<1")), 852234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 853234285Sdim 854234285Sdimclass di_MInst_sisi_ll<string opc, Intrinsic IntID> 855234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 856234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L)")), 857234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 858234285Sdim 859234285Sdimclass di_MInst_sisi_ll_s1<string opc, Intrinsic IntID> 860234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 861234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L):<<1")), 862234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 863234285Sdim 864234285Sdim 865234285Sdimclass si_MInst_sisi_hh<string opc, Intrinsic IntID> 866234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 867234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H)")), 868234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 869234285Sdim 870234285Sdimclass si_MInst_sisi_hh_s1<string opc, Intrinsic IntID> 871234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 872234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H):<<1")), 873234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 874234285Sdim 875234285Sdimclass si_MInst_sisi_lh<string opc, Intrinsic IntID> 876234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 877234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H)")), 878234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 879234285Sdim 880234285Sdimclass si_MInst_sisi_lh_s1<string opc, Intrinsic IntID> 881234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 882234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):<<1")), 883234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 884234285Sdim 885234285Sdimclass si_MInst_sisi_hl<string opc, Intrinsic IntID> 886234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 887234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L)")), 888234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 889234285Sdim 890234285Sdimclass si_MInst_sisi_hl_s1<string opc, Intrinsic IntID> 891234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 892234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L):<<1")), 893234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 894234285Sdim 895234285Sdimclass si_MInst_sisi_ll<string opc, Intrinsic IntID> 896234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 897234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L)")), 898234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 899234285Sdim 900234285Sdimclass si_MInst_sisi_ll_s1<string opc, Intrinsic IntID> 901234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 902234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L):<<1")), 903234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 904234285Sdim 905234285Sdimclass si_MInst_sisi_up<string opc, Intrinsic IntID> 906234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 907234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 908234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 909234285Sdim 910234285Sdimclass di_MInst_didi<string opc, Intrinsic IntID> 911234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 912234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 913234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 914234285Sdim DoubleRegs:$src2))]>; 915234285Sdim 916234285Sdimclass di_MInst_didi_conj<string opc, Intrinsic IntID> 917234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 918234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2*)")), 919234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 920234285Sdim DoubleRegs:$src2))]>; 921234285Sdim 922234285Sdimclass di_MInst_sisi_s1_sat_conj<string opc, Intrinsic IntID> 923234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 924234285Sdim !strconcat("$dst = ", !strconcat(opc , 925234285Sdim "($src1, $src2*):<<1:sat")), 926234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 927234285Sdim 928234285Sdimclass di_MInst_didi_s1_rnd_sat<string opc, Intrinsic IntID> 929234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 930234285Sdim !strconcat("$dst = ", !strconcat(opc , 931234285Sdim "($src1, $src2):<<1:rnd:sat")), 932234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 933234285Sdim DoubleRegs:$src2))]>; 934234285Sdim 935234285Sdimclass di_MInst_didi_sat<string opc, Intrinsic IntID> 936234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 937234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 938234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 939234285Sdim DoubleRegs:$src2))]>; 940234285Sdim 941234285Sdimclass di_MInst_didi_rnd_sat<string opc, Intrinsic IntID> 942234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 943234285Sdim !strconcat("$dst = ", !strconcat(opc , 944234285Sdim "($src1, $src2):rnd:sat")), 945234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 946234285Sdim DoubleRegs:$src2))]>; 947234285Sdim 948234285Sdimclass si_SInst_sisi_sat<string opc, Intrinsic IntID> 949234285Sdim : SInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 950234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 951234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 952234285Sdim 953245431Sdimclass si_SInst_didi_sat<string opc, Intrinsic IntID> 954245431Sdim : SInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 955245431Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 956245431Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 957245431Sdim 958245431Sdimclass si_SInst_disi_s1_rnd_sat<string opc, Intrinsic IntID> 959245431Sdim : MInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2), 960245431Sdim !strconcat("$dst = ", !strconcat(opc , 961245431Sdim "($src1, $src2):<<1:rnd:sat")), 962245431Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2))]>; 963245431Sdim 964234285Sdimclass si_MInst_sisi_s1_rnd_sat<string opc, Intrinsic IntID> 965234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 966234285Sdim !strconcat("$dst = ", !strconcat(opc , 967234285Sdim "($src1, $src2):<<1:rnd:sat")), 968234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 969234285Sdim 970234285Sdimclass si_MInst_sisi_l_s1_rnd_sat<string opc, Intrinsic IntID> 971234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 972234285Sdim !strconcat("$dst = ", !strconcat(opc , 973234285Sdim "($src1, $src2.L):<<1:rnd:sat")), 974234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 975234285Sdim 976234285Sdimclass si_MInst_sisi_h_s1_rnd_sat<string opc, Intrinsic IntID> 977234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 978234285Sdim !strconcat("$dst = ", !strconcat(opc , 979234285Sdim "($src1, $src2.H):<<1:rnd:sat")), 980234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 981234285Sdim 982234285Sdimclass si_MInst_sisi_rnd_sat_conj<string opc, Intrinsic IntID> 983234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 984234285Sdim !strconcat("$dst = ", !strconcat(opc , 985234285Sdim "($src1, $src2*):rnd:sat")), 986234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 987234285Sdim 988234285Sdimclass si_MInst_sisi_s1_rnd_sat_conj<string opc, Intrinsic IntID> 989234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 990234285Sdim !strconcat("$dst = ", !strconcat(opc , 991234285Sdim "($src1, $src2*):<<1:rnd:sat")), 992234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 993234285Sdim 994234285Sdimclass si_MInst_sisi_rnd_sat<string opc, Intrinsic IntID> 995234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 996234285Sdim !strconcat("$dst = ", !strconcat(opc , 997234285Sdim "($src1, $src2):rnd:sat")), 998234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 999234285Sdim 1000234285Sdimclass si_MInst_sisi_rnd<string opc, Intrinsic IntID> 1001234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1002234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):rnd")), 1003234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1004234285Sdim 1005234285Sdimclass si_MInst_sisisi_xacc<string opc, Intrinsic IntID> 1006234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1007234285Sdim IntRegs:$src3), 1008234285Sdim !strconcat("$dst ^= ", !strconcat(opc , "($src2, $src3)")), 1009234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1010234285Sdim IntRegs:$src3))], 1011234285Sdim "$dst2 = $dst">; 1012234285Sdim 1013234285Sdimclass si_MInst_sisisi_acc<string opc, Intrinsic IntID> 1014234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1015234285Sdim IntRegs:$src3), 1016234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src2, $src3)")), 1017234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1018234285Sdim IntRegs:$src3))], 1019234285Sdim "$dst2 = $dst">; 1020234285Sdim 1021234285Sdimclass si_MInst_sisisi_nac<string opc, Intrinsic IntID> 1022234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1023234285Sdim IntRegs:$src3), 1024234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src2, $src3)")), 1025234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1026234285Sdim IntRegs:$src3))], 1027234285Sdim "$dst2 = $dst">; 1028234285Sdim 1029234285Sdimclass si_MInst_sisis8_acc<string opc, Intrinsic IntID> 1030234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1031234285Sdim s8Imm:$src3), 1032234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src2, #$src3)")), 1033234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1034234285Sdim imm:$src3))], 1035234285Sdim "$dst2 = $dst">; 1036234285Sdim 1037234285Sdimclass si_MInst_sisis8_nac<string opc, Intrinsic IntID> 1038234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1039234285Sdim s8Imm:$src3), 1040234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src2, #$src3)")), 1041234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1042234285Sdim imm:$src3))], 1043234285Sdim "$dst2 = $dst">; 1044234285Sdim 1045234285Sdimclass si_MInst_sisiu4u5<string opc, Intrinsic IntID> 1046234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1047234285Sdim u4Imm:$src2, u5Imm:$src3), 1048234285Sdim !strconcat("$dst = ", !strconcat(opc , 1049234285Sdim "($src1, #$src2, #$src3)")), 1050234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1051234285Sdim imm:$src2, imm:$src3))], 1052234285Sdim "$dst2 = $dst">; 1053234285Sdim 1054234285Sdimclass si_MInst_sisiu8_acc<string opc, Intrinsic IntID> 1055234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1056234285Sdim u8Imm:$src3), 1057234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src2, #$src3)")), 1058234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1059234285Sdim imm:$src3))], 1060234285Sdim "$dst2 = $dst">; 1061234285Sdim 1062234285Sdimclass si_MInst_sisiu8_nac<string opc, Intrinsic IntID> 1063234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src2, 1064234285Sdim u8Imm:$src3), 1065234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src2, #$src3)")), 1066234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src2, 1067234285Sdim imm:$src3))], 1068234285Sdim "$dst2 = $dst">; 1069234285Sdim 1070234285Sdimclass si_MInst_sisisi_acc_hh<string opc, Intrinsic IntID> 1071234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1072234285Sdim IntRegs:$src2), 1073234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.H, $src2.H)")), 1074234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1075234285Sdim IntRegs:$src2))], 1076234285Sdim "$dst2 = $dst">; 1077234285Sdim 1078234285Sdimclass si_MInst_sisisi_acc_sat_lh<string opc, Intrinsic IntID> 1079234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1080234285Sdim IntRegs:$src2), 1081234285Sdim !strconcat("$dst += ", !strconcat(opc , 1082234285Sdim "($src1.L, $src2.H):sat")), 1083234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1084234285Sdim IntRegs:$src2))], 1085234285Sdim "$dst2 = $dst">; 1086234285Sdim 1087234285Sdimclass si_MInst_sisisi_acc_sat_lh_s1<string opc, Intrinsic IntID> 1088234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1089234285Sdim IntRegs:$src2), 1090234285Sdim !strconcat("$dst += ", !strconcat(opc , 1091234285Sdim "($src1.L, $src2.H):<<1:sat")), 1092234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1093234285Sdim IntRegs:$src2))], 1094234285Sdim "$dst2 = $dst">; 1095234285Sdim 1096234285Sdimclass si_MInst_sisisi_acc_sat_hh<string opc, Intrinsic IntID> 1097234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1098234285Sdim IntRegs:$src2), 1099234285Sdim !strconcat("$dst += ", !strconcat(opc , 1100234285Sdim "($src1.H, $src2.H):sat")), 1101234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1102234285Sdim IntRegs:$src2))], 1103234285Sdim "$dst2 = $dst">; 1104234285Sdim 1105234285Sdimclass si_MInst_sisisi_acc_sat_hh_s1<string opc, Intrinsic IntID> 1106234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1107234285Sdim IntRegs:$src2), 1108234285Sdim !strconcat("$dst += ", !strconcat(opc , 1109234285Sdim "($src1.H, $src2.H):<<1:sat")), 1110234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1111234285Sdim IntRegs:$src2))], 1112234285Sdim "$dst2 = $dst">; 1113234285Sdim 1114234285Sdimclass si_MInst_sisisi_acc_hh_s1<string opc, Intrinsic IntID> 1115234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1116234285Sdim IntRegs:$src2), 1117234285Sdim !strconcat("$dst += ", !strconcat(opc , 1118234285Sdim "($src1.H, $src2.H):<<1")), 1119234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1120234285Sdim IntRegs:$src2))], 1121234285Sdim "$dst2 = $dst">; 1122234285Sdim 1123234285Sdimclass si_MInst_sisisi_nac_hh<string opc, Intrinsic IntID> 1124234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1125234285Sdim IntRegs:$src2), 1126234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.H, $src2.H)")), 1127234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1128234285Sdim IntRegs:$src2))], 1129234285Sdim "$dst2 = $dst">; 1130234285Sdim 1131234285Sdimclass si_MInst_sisisi_nac_sat_hh_s1<string opc, Intrinsic IntID> 1132234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1133234285Sdim IntRegs:$src2), 1134234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1135234285Sdim "($src1.H, $src2.H):<<1:sat")), 1136234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1137234285Sdim IntRegs:$src2))], 1138234285Sdim "$dst2 = $dst">; 1139234285Sdim 1140234285Sdimclass si_MInst_sisisi_nac_sat_hh<string opc, Intrinsic IntID> 1141234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1142234285Sdim IntRegs:$src2), 1143234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1144234285Sdim "($src1.H, $src2.H):sat")), 1145234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1146234285Sdim IntRegs:$src2))], 1147234285Sdim "$dst2 = $dst">; 1148234285Sdim 1149234285Sdimclass si_MInst_sisisi_nac_sat_hl_s1<string opc, Intrinsic IntID> 1150234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1151234285Sdim IntRegs:$src2), 1152234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1153234285Sdim "($src1.H, $src2.L):<<1:sat")), 1154234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1155234285Sdim IntRegs:$src2))], 1156234285Sdim "$dst2 = $dst">; 1157234285Sdim 1158234285Sdimclass si_MInst_sisisi_nac_sat_hl<string opc, Intrinsic IntID> 1159234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1160234285Sdim IntRegs:$src2), 1161234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1162234285Sdim "($src1.H, $src2.L):sat")), 1163234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1164234285Sdim IntRegs:$src2))], 1165234285Sdim "$dst2 = $dst">; 1166234285Sdim 1167234285Sdimclass si_MInst_sisisi_nac_sat_lh_s1<string opc, Intrinsic IntID> 1168234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1169234285Sdim IntRegs:$src2), 1170234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1171234285Sdim "($src1.L, $src2.H):<<1:sat")), 1172234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1173234285Sdim IntRegs:$src2))], 1174234285Sdim "$dst2 = $dst">; 1175234285Sdim 1176234285Sdimclass si_MInst_sisisi_nac_sat_lh<string opc, Intrinsic IntID> 1177234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1178234285Sdim IntRegs:$src2), 1179234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1180234285Sdim "($src1.L, $src2.H):sat")), 1181234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1182234285Sdim IntRegs:$src2))], 1183234285Sdim "$dst2 = $dst">; 1184234285Sdim 1185234285Sdimclass si_MInst_sisisi_nac_sat_ll_s1<string opc, Intrinsic IntID> 1186234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1187234285Sdim IntRegs:$src2), 1188234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1189234285Sdim "($src1.L, $src2.L):<<1:sat")), 1190234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1191234285Sdim IntRegs:$src2))], 1192234285Sdim "$dst2 = $dst">; 1193234285Sdim 1194234285Sdimclass si_MInst_sisisi_nac_sat_ll<string opc, Intrinsic IntID> 1195234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1196234285Sdim IntRegs:$src2), 1197234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1198234285Sdim "($src1.L, $src2.L):sat")), 1199234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1200234285Sdim IntRegs:$src2))], 1201234285Sdim "$dst2 = $dst">; 1202234285Sdim 1203234285Sdimclass si_MInst_sisisi_nac_hh_s1<string opc, Intrinsic IntID> 1204234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1205234285Sdim IntRegs:$src2), 1206234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1207234285Sdim "($src1.H, $src2.H):<<1")), 1208234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1209234285Sdim IntRegs:$src2))], 1210234285Sdim "$dst2 = $dst">; 1211234285Sdim 1212234285Sdimclass si_MInst_sisisi_acc_hl<string opc, Intrinsic IntID> 1213234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1214234285Sdim IntRegs:$src2), 1215234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.H, $src2.L)")), 1216234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1217234285Sdim IntRegs:$src2))], 1218234285Sdim "$dst2 = $dst">; 1219234285Sdim 1220234285Sdimclass si_MInst_sisisi_acc_hl_s1<string opc, Intrinsic IntID> 1221234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1222234285Sdim IntRegs:$src2), 1223234285Sdim !strconcat("$dst += ", !strconcat(opc , 1224234285Sdim "($src1.H, $src2.L):<<1")), 1225234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1226234285Sdim IntRegs:$src2))], 1227234285Sdim "$dst2 = $dst">; 1228234285Sdim 1229234285Sdimclass si_MInst_sisisi_nac_hl<string opc, Intrinsic IntID> 1230234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1231234285Sdim IntRegs:$src2), 1232234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.H, $src2.L)")), 1233234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1234234285Sdim IntRegs:$src2))], 1235234285Sdim "$dst2 = $dst">; 1236234285Sdim 1237234285Sdimclass si_MInst_sisisi_nac_hl_s1<string opc, Intrinsic IntID> 1238234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1239234285Sdim IntRegs:$src2), 1240234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1241234285Sdim "($src1.H, $src2.L):<<1")), 1242234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1243234285Sdim IntRegs:$src2))], 1244234285Sdim "$dst2 = $dst">; 1245234285Sdim 1246234285Sdimclass si_MInst_sisisi_acc_lh<string opc, Intrinsic IntID> 1247234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1248234285Sdim IntRegs:$src2), 1249234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.L, $src2.H)")), 1250234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1251234285Sdim IntRegs:$src2))], 1252234285Sdim "$dst2 = $dst">; 1253234285Sdim 1254234285Sdimclass si_MInst_sisisi_acc_lh_s1<string opc, Intrinsic IntID> 1255234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1256234285Sdim IntRegs:$src2), 1257234285Sdim !strconcat("$dst += ", !strconcat(opc , 1258234285Sdim "($src1.L, $src2.H):<<1")), 1259234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1260234285Sdim IntRegs:$src2))], 1261234285Sdim "$dst2 = $dst">; 1262234285Sdim 1263234285Sdimclass si_MInst_sisisi_nac_lh<string opc, Intrinsic IntID> 1264234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1265234285Sdim IntRegs:$src2), 1266234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.L, $src2.H)")), 1267234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1268234285Sdim IntRegs:$src2))], 1269234285Sdim "$dst2 = $dst">; 1270234285Sdim 1271234285Sdimclass si_MInst_sisisi_nac_lh_s1<string opc, Intrinsic IntID> 1272234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1273234285Sdim IntRegs:$src2), 1274234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1275234285Sdim "($src1.L, $src2.H):<<1")), 1276234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1277234285Sdim IntRegs:$src2))], 1278234285Sdim "$dst2 = $dst">; 1279234285Sdim 1280234285Sdimclass si_MInst_sisisi_acc_ll<string opc, Intrinsic IntID> 1281234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1282234285Sdim IntRegs:$src2), 1283234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.L, $src2.L)")), 1284234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1285234285Sdim IntRegs:$src2))], 1286234285Sdim "$dst2 = $dst">; 1287234285Sdim 1288234285Sdimclass si_MInst_sisisi_acc_ll_s1<string opc, Intrinsic IntID> 1289234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1290234285Sdim IntRegs:$src2), 1291234285Sdim !strconcat("$dst += ", !strconcat(opc , 1292234285Sdim "($src1.L, $src2.L):<<1")), 1293234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1294234285Sdim IntRegs:$src2))], 1295234285Sdim "$dst2 = $dst">; 1296234285Sdim 1297234285Sdimclass si_MInst_sisisi_acc_sat_ll_s1<string opc, Intrinsic IntID> 1298234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1299234285Sdim IntRegs:$src2), 1300234285Sdim !strconcat("$dst += ", !strconcat(opc , 1301234285Sdim "($src1.L, $src2.L):<<1:sat")), 1302234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1303234285Sdim IntRegs:$src2))], 1304234285Sdim "$dst2 = $dst">; 1305234285Sdim 1306234285Sdimclass si_MInst_sisisi_acc_sat_hl_s1<string opc, Intrinsic IntID> 1307234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1308234285Sdim IntRegs:$src2), 1309234285Sdim !strconcat("$dst += ", !strconcat(opc , 1310234285Sdim "($src1.H, $src2.L):<<1:sat")), 1311234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1312234285Sdim IntRegs:$src2))], 1313234285Sdim "$dst2 = $dst">; 1314234285Sdim 1315234285Sdimclass si_MInst_sisisi_acc_sat_ll<string opc, Intrinsic IntID> 1316234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1317234285Sdim IntRegs:$src2), 1318234285Sdim !strconcat("$dst += ", !strconcat(opc , 1319234285Sdim "($src1.L, $src2.L):sat")), 1320234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1321234285Sdim IntRegs:$src2))], 1322234285Sdim "$dst2 = $dst">; 1323234285Sdim 1324234285Sdimclass si_MInst_sisisi_acc_sat_hl<string opc, Intrinsic IntID> 1325234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1326234285Sdim IntRegs:$src2), 1327234285Sdim !strconcat("$dst += ", !strconcat(opc , 1328234285Sdim "($src1.H, $src2.L):sat")), 1329234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1330234285Sdim IntRegs:$src2))], 1331234285Sdim "$dst2 = $dst">; 1332234285Sdim 1333234285Sdimclass si_MInst_sisisi_nac_ll<string opc, Intrinsic IntID> 1334234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1335234285Sdim IntRegs:$src2), 1336234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.L, $src2.L)")), 1337234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1338234285Sdim IntRegs:$src2))], 1339234285Sdim "$dst2 = $dst">; 1340234285Sdim 1341234285Sdimclass si_MInst_sisisi_nac_ll_s1<string opc, Intrinsic IntID> 1342234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1343234285Sdim IntRegs:$src2), 1344234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1345234285Sdim "($src1.L, $src2.L):<<1")), 1346234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1347234285Sdim IntRegs:$src2))], 1348234285Sdim "$dst2 = $dst">; 1349234285Sdim 1350234285Sdimclass si_MInst_sisisi_nac_hh_sat<string opc, Intrinsic IntID> 1351234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1352234285Sdim IntRegs:$src2), 1353234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1354234285Sdim "($src1.H, $src2.H):sat")), 1355234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1356234285Sdim IntRegs:$src2))], 1357234285Sdim "$dst2 = $dst">; 1358234285Sdim 1359234285Sdimclass si_MInst_sisisi_nac_hh_s1_sat<string opc, Intrinsic IntID> 1360234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1361234285Sdim IntRegs:$src2), 1362234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1363234285Sdim "($src1.H, $src2.H):<<1:sat")), 1364234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1365234285Sdim IntRegs:$src2))], 1366234285Sdim "$dst2 = $dst">; 1367234285Sdim 1368234285Sdimclass si_MInst_sisisi_nac_hl_sat<string opc, Intrinsic IntID> 1369234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1370234285Sdim IntRegs:$src2), 1371234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1372234285Sdim "($src1.H, $src2.L):sat")), 1373234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1374234285Sdim IntRegs:$src2))], 1375234285Sdim "$dst2 = $dst">; 1376234285Sdim 1377234285Sdimclass si_MInst_sisisi_nac_hl_s1_sat<string opc, Intrinsic IntID> 1378234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1379234285Sdim IntRegs:$src2), 1380234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1381234285Sdim "($src1.H, $src2.L):<<1:sat")), 1382234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1383234285Sdim IntRegs:$src2))], 1384234285Sdim "$dst2 = $dst">; 1385234285Sdim 1386234285Sdimclass si_MInst_sisisi_nac_lh_sat<string opc, Intrinsic IntID> 1387234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1388234285Sdim IntRegs:$src2), 1389234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1390234285Sdim "($src1.L, $src2.H):sat")), 1391234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1392234285Sdim IntRegs:$src2))], 1393234285Sdim "$dst2 = $dst">; 1394234285Sdim 1395234285Sdimclass si_MInst_sisisi_nac_lh_s1_sat<string opc, Intrinsic IntID> 1396234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1397234285Sdim IntRegs:$src2), 1398234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1399234285Sdim "($src1.L, $src2.H):<<1:sat")), 1400234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1401234285Sdim IntRegs:$src2))], 1402234285Sdim "$dst2 = $dst">; 1403234285Sdim 1404234285Sdimclass si_MInst_sisisi_nac_ll_sat<string opc, Intrinsic IntID> 1405234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1406234285Sdim IntRegs:$src2), 1407234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1408234285Sdim "($src1.L, $src2.L):sat")), 1409234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1410234285Sdim IntRegs:$src2))], 1411234285Sdim "$dst2 = $dst">; 1412234285Sdim 1413234285Sdimclass si_MInst_sisisi_nac_ll_s1_sat<string opc, Intrinsic IntID> 1414234285Sdim : MInst_acc<(outs IntRegs:$dst), (ins IntRegs:$dst2, IntRegs:$src1, 1415234285Sdim IntRegs:$src2), 1416234285Sdim !strconcat("$dst -= ", !strconcat(opc , 1417234285Sdim "($src1.L, $src2.L):<<1:sat")), 1418234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$dst2, IntRegs:$src1, 1419234285Sdim IntRegs:$src2))], 1420234285Sdim "$dst2 = $dst">; 1421234285Sdim 1422234285Sdimclass di_ALU32_sisi<string opc, Intrinsic IntID> 1423234285Sdim : ALU32_rr<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1424234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 1425234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1426234285Sdim 1427234285Sdimclass di_MInst_sisi<string opc, Intrinsic IntID> 1428234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1429234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 1430234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1431234285Sdim 1432234285Sdimclass di_MInst_sisi_sat<string opc, Intrinsic IntID> 1433234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1434234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):sat")), 1435234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1436234285Sdim 1437234285Sdimclass di_MInst_sisi_sat_conj<string opc, Intrinsic IntID> 1438234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1439234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2*):sat")), 1440234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1441234285Sdim 1442234285Sdimclass di_MInst_sisi_s1_sat<string opc, Intrinsic IntID> 1443234285Sdim : MInst<(outs DoubleRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1444234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):<<1:sat")), 1445234285Sdim [(set DoubleRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1446234285Sdim 1447234285Sdimclass di_MInst_didi_s1_sat<string opc, Intrinsic IntID> 1448234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 1449234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):<<1:sat")), 1450234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, 1451234285Sdim DoubleRegs:$src2))]>; 1452234285Sdim 1453234285Sdimclass si_MInst_didi_s1_rnd_sat<string opc, Intrinsic IntID> 1454234285Sdim : MInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 1455234285Sdim !strconcat("$dst = ", !strconcat(opc , 1456234285Sdim "($src1, $src2):<<1:rnd:sat")), 1457234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 1458234285Sdim 1459234285Sdimclass si_MInst_didi_rnd_sat<string opc, Intrinsic IntID> 1460234285Sdim : MInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 1461234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):rnd:sat")), 1462234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 1463234285Sdim 1464234285Sdimclass si_MInst_sisi_sat_hh<string opc, Intrinsic IntID> 1465234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1466234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.H):sat")), 1467234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1468234285Sdim 1469234285Sdimclass si_MInst_sisi_sat_hh_s1<string opc, Intrinsic IntID> 1470234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1471234285Sdim !strconcat("$dst = ", !strconcat(opc , 1472234285Sdim "($src1.H, $src2.H):<<1:sat")), 1473234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1474234285Sdim 1475234285Sdimclass si_MInst_sisi_sat_hl<string opc, Intrinsic IntID> 1476234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1477234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.H, $src2.L):sat")), 1478234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1479234285Sdim 1480234285Sdimclass si_MInst_sisi_sat_hl_s1<string opc, Intrinsic IntID> 1481234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1482234285Sdim !strconcat("$dst = ", !strconcat(opc , 1483234285Sdim "($src1.H, $src2.L):<<1:sat")), 1484234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1485234285Sdim 1486234285Sdimclass si_MInst_sisi_sat_lh<string opc, Intrinsic IntID> 1487234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1488234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.H):sat")), 1489234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1490234285Sdim 1491234285Sdimclass si_MInst_sisi_sat_lh_s1<string opc, Intrinsic IntID> 1492234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1493234285Sdim !strconcat("$dst = ", !strconcat(opc , 1494234285Sdim "($src1.L, $src2.H):<<1:sat")), 1495234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1496234285Sdim 1497234285Sdimclass si_MInst_sisi_sat_ll<string opc, Intrinsic IntID> 1498234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1499234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1.L, $src2.L):sat")), 1500234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1501234285Sdim 1502234285Sdimclass si_MInst_sisi_sat_ll_s1<string opc, Intrinsic IntID> 1503234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1504234285Sdim !strconcat("$dst = ", !strconcat(opc , 1505234285Sdim "($src1.L, $src2.L):<<1:sat")), 1506234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1507234285Sdim 1508234285Sdimclass si_MInst_sisi_sat_rnd_hh<string opc, Intrinsic IntID> 1509234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1510234285Sdim !strconcat("$dst = ", !strconcat(opc , 1511234285Sdim "($src1.H, $src2.H):rnd:sat")), 1512234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1513234285Sdim 1514234285Sdimclass si_MInst_sisi_rnd_hh<string opc, Intrinsic IntID> 1515234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1516234285Sdim !strconcat("$dst = ", !strconcat(opc , 1517234285Sdim "($src1.H, $src2.H):rnd")), 1518234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1519234285Sdim 1520234285Sdimclass si_MInst_sisi_rnd_hh_s1<string opc, Intrinsic IntID> 1521234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1522234285Sdim !strconcat("$dst = ", !strconcat(opc , 1523234285Sdim "($src1.H, $src2.H):<<1:rnd")), 1524234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1525234285Sdim 1526234285Sdimclass si_MInst_sisi_sat_rnd_hh_s1<string opc, Intrinsic IntID> 1527234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1528234285Sdim !strconcat("$dst = ", 1529234285Sdim !strconcat(opc , 1530234285Sdim "($src1.H, $src2.H):<<1:rnd:sat")), 1531234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1532234285Sdim 1533234285Sdimclass si_MInst_sisi_rnd_hl<string opc, Intrinsic IntID> 1534234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1535234285Sdim !strconcat("$dst = ", 1536234285Sdim !strconcat(opc , "($src1.H, $src2.L):rnd")), 1537234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1538234285Sdim 1539234285Sdimclass si_MInst_sisi_rnd_hl_s1<string opc, Intrinsic IntID> 1540234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1541234285Sdim !strconcat("$dst = ", 1542234285Sdim !strconcat(opc , "($src1.H, $src2.L):<<1:rnd")), 1543234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1544234285Sdim 1545234285Sdimclass si_MInst_sisi_sat_rnd_hl<string opc, Intrinsic IntID> 1546234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1547234285Sdim !strconcat("$dst = ", 1548234285Sdim !strconcat(opc , "($src1.H, $src2.L):rnd:sat")), 1549234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1550234285Sdim 1551234285Sdimclass si_MInst_sisi_sat_rnd_hl_s1<string opc, Intrinsic IntID> 1552234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1553234285Sdim !strconcat("$dst = ", 1554234285Sdim !strconcat(opc , "($src1.H, $src2.L):<<1:rnd:sat")), 1555234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1556234285Sdim 1557234285Sdimclass si_MInst_sisi_rnd_lh<string opc, Intrinsic IntID> 1558234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1559234285Sdim !strconcat("$dst = ", 1560234285Sdim !strconcat(opc , "($src1.L, $src2.H):rnd")), 1561234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1562234285Sdim 1563234285Sdimclass si_MInst_sisi_sat_rnd_lh<string opc, Intrinsic IntID> 1564234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1565234285Sdim !strconcat("$dst = ", 1566234285Sdim !strconcat(opc , "($src1.L, $src2.H):rnd:sat")), 1567234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1568234285Sdim 1569234285Sdimclass si_MInst_sisi_sat_rnd_lh_s1<string opc, Intrinsic IntID> 1570234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1571234285Sdim !strconcat("$dst = ", 1572234285Sdim !strconcat(opc , "($src1.L, $src2.H):<<1:rnd:sat")), 1573234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1574234285Sdim 1575234285Sdimclass si_MInst_sisi_rnd_lh_s1<string opc, Intrinsic IntID> 1576234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1577234285Sdim !strconcat("$dst = ", 1578234285Sdim !strconcat(opc , "($src1.L, $src2.H):<<1:rnd")), 1579234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1580234285Sdim 1581234285Sdimclass si_MInst_sisi_sat_rnd_ll<string opc, Intrinsic IntID> 1582234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1583234285Sdim !strconcat("$dst = ", 1584234285Sdim !strconcat(opc , "($src1.L, $src2.L):rnd:sat")), 1585234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1586234285Sdim 1587234285Sdimclass si_MInst_sisi_sat_rnd_ll_s1<string opc, Intrinsic IntID> 1588234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1589234285Sdim !strconcat("$dst = ", 1590234285Sdim !strconcat(opc , "($src1.L, $src2.L):<<1:rnd:sat")), 1591234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1592234285Sdim 1593234285Sdimclass si_MInst_sisi_rnd_ll<string opc, Intrinsic IntID> 1594234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1595234285Sdim !strconcat("$dst = ", 1596234285Sdim !strconcat(opc , "($src1.L, $src2.L):rnd")), 1597234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1598234285Sdim 1599234285Sdimclass si_MInst_sisi_rnd_ll_s1<string opc, Intrinsic IntID> 1600234285Sdim : MInst<(outs IntRegs:$dst), (ins IntRegs:$src1, IntRegs:$src2), 1601234285Sdim !strconcat("$dst = ", 1602234285Sdim !strconcat(opc , "($src1.L, $src2.L):<<1:rnd")), 1603234285Sdim [(set IntRegs:$dst, (IntID IntRegs:$src1, IntRegs:$src2))]>; 1604234285Sdim 1605234285Sdimclass di_MInst_dididi_acc_sat<string opc, Intrinsic IntID> 1606234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, 1607234285Sdim DoubleRegs:$src1, DoubleRegs:$src2), 1608234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2):sat")), 1609234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1610234285Sdim DoubleRegs:$src1, 1611234285Sdim DoubleRegs:$src2))], 1612234285Sdim "$dst2 = $dst">; 1613234285Sdim 1614234285Sdimclass di_MInst_dididi_acc_rnd_sat<string opc, Intrinsic IntID> 1615234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 1616234285Sdim DoubleRegs:$src2), 1617234285Sdim !strconcat("$dst += ", 1618234285Sdim !strconcat(opc , "($src1, $src2):rnd:sat")), 1619234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1620234285Sdim DoubleRegs:$src1, 1621234285Sdim DoubleRegs:$src2))], 1622234285Sdim "$dst2 = $dst">; 1623234285Sdim 1624245431Sdimclass di_MInst_dididi_acc_s1<string opc, Intrinsic IntID> 1625245431Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, 1626245431Sdim DoubleRegs:$src1, 1627245431Sdim DoubleRegs:$src2), 1628245431Sdim !strconcat("$dst += ", 1629245431Sdim !strconcat(opc , "($src1, $src2):<<1")), 1630245431Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1631245431Sdim DoubleRegs:$src1, 1632245431Sdim DoubleRegs:$src2))], 1633245431Sdim "$dst2 = $dst">; 1634245431Sdim 1635245431Sdim 1636234285Sdimclass di_MInst_dididi_acc_s1_sat<string opc, Intrinsic IntID> 1637234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, 1638234285Sdim DoubleRegs:$src1, 1639234285Sdim DoubleRegs:$src2), 1640234285Sdim !strconcat("$dst += ", 1641234285Sdim !strconcat(opc , "($src1, $src2):<<1:sat")), 1642234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1643234285Sdim DoubleRegs:$src1, 1644234285Sdim DoubleRegs:$src2))], 1645234285Sdim "$dst2 = $dst">; 1646234285Sdim 1647234285Sdimclass di_MInst_dididi_acc_s1_rnd_sat<string opc, Intrinsic IntID> 1648234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 1649234285Sdim DoubleRegs:$src2), 1650234285Sdim !strconcat("$dst += ", 1651234285Sdim !strconcat(opc , "($src1, $src2):<<1:rnd:sat")), 1652234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1653234285Sdim DoubleRegs:$src1, 1654234285Sdim DoubleRegs:$src2))], 1655234285Sdim "$dst2 = $dst">; 1656234285Sdim 1657234285Sdimclass di_MInst_dididi_acc<string opc, Intrinsic IntID> 1658234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 1659234285Sdim DoubleRegs:$src2), 1660234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2)")), 1661234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1662234285Sdim DoubleRegs:$src1, 1663234285Sdim DoubleRegs:$src2))], 1664234285Sdim "$dst2 = $dst">; 1665234285Sdim 1666234285Sdimclass di_MInst_dididi_acc_conj<string opc, Intrinsic IntID> 1667234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 1668234285Sdim DoubleRegs:$src2), 1669234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1, $src2*)")), 1670234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1671234285Sdim DoubleRegs:$src1, 1672234285Sdim DoubleRegs:$src2))], 1673234285Sdim "$dst2 = $dst">; 1674234285Sdim 1675234285Sdimclass di_MInst_disisi_acc_hh<string opc, Intrinsic IntID> 1676234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1677234285Sdim IntRegs:$src2), 1678234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.H, $src2.H)")), 1679234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1680234285Sdim IntRegs:$src2))], 1681234285Sdim "$dst2 = $dst">; 1682234285Sdim 1683234285Sdimclass di_MInst_disisi_acc_hl<string opc, Intrinsic IntID> 1684234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1685234285Sdim IntRegs:$src2), 1686234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.H, $src2.L)")), 1687234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1688234285Sdim IntRegs:$src2))], 1689234285Sdim "$dst2 = $dst">; 1690234285Sdim 1691234285Sdimclass di_MInst_disisi_acc_lh<string opc, Intrinsic IntID> 1692234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1693234285Sdim IntRegs:$src2), 1694234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.L, $src2.H)")), 1695234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1696234285Sdim IntRegs:$src2))], 1697234285Sdim "$dst2 = $dst">; 1698234285Sdim 1699234285Sdimclass di_MInst_disisi_acc_ll<string opc, Intrinsic IntID> 1700234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1701234285Sdim IntRegs:$src2), 1702234285Sdim !strconcat("$dst += ", !strconcat(opc , "($src1.L, $src2.L)")), 1703234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1704234285Sdim IntRegs:$src2))], 1705234285Sdim "$dst2 = $dst">; 1706234285Sdim 1707234285Sdimclass di_MInst_disisi_acc_hh_s1<string opc, Intrinsic IntID> 1708234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1709234285Sdim IntRegs:$src2), 1710234285Sdim !strconcat("$dst += ", 1711234285Sdim !strconcat(opc , "($src1.H, $src2.H):<<1")), 1712234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1713234285Sdim IntRegs:$src2))], 1714234285Sdim "$dst2 = $dst">; 1715234285Sdim 1716234285Sdimclass di_MInst_disisi_acc_hl_s1<string opc, Intrinsic IntID> 1717234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1718234285Sdim IntRegs:$src2), 1719234285Sdim !strconcat("$dst += ", 1720234285Sdim !strconcat(opc , "($src1.H, $src2.L):<<1")), 1721234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1722234285Sdim IntRegs:$src2))], 1723234285Sdim "$dst2 = $dst">; 1724234285Sdim 1725234285Sdimclass di_MInst_disisi_acc_lh_s1<string opc, Intrinsic IntID> 1726234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1727234285Sdim IntRegs:$src2), 1728234285Sdim !strconcat("$dst += ", 1729234285Sdim !strconcat(opc , "($src1.L, $src2.H):<<1")), 1730234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1731234285Sdim IntRegs:$src2))], 1732234285Sdim "$dst2 = $dst">; 1733234285Sdim 1734234285Sdimclass di_MInst_disisi_acc_ll_s1<string opc, Intrinsic IntID> 1735234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1736234285Sdim IntRegs:$src2), 1737234285Sdim !strconcat("$dst += ", 1738234285Sdim !strconcat(opc , "($src1.L, $src2.L):<<1")), 1739234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1740234285Sdim IntRegs:$src2))], 1741234285Sdim "$dst2 = $dst">; 1742234285Sdim 1743234285Sdimclass di_MInst_disisi_nac_hh<string opc, Intrinsic IntID> 1744234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1745234285Sdim IntRegs:$src2), 1746234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.H, $src2.H)")), 1747234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1748234285Sdim IntRegs:$src2))], 1749234285Sdim "$dst2 = $dst">; 1750234285Sdim 1751234285Sdimclass di_MInst_disisi_nac_hl<string opc, Intrinsic IntID> 1752234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1753234285Sdim IntRegs:$src2), 1754234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.H, $src2.L)")), 1755234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1756234285Sdim IntRegs:$src2))], 1757234285Sdim "$dst2 = $dst">; 1758234285Sdim 1759234285Sdimclass di_MInst_disisi_nac_lh<string opc, Intrinsic IntID> 1760234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1761234285Sdim IntRegs:$src2), 1762234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.L, $src2.H)")), 1763234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1764234285Sdim IntRegs:$src2))], 1765234285Sdim "$dst2 = $dst">; 1766234285Sdim 1767234285Sdimclass di_MInst_disisi_nac_ll<string opc, Intrinsic IntID> 1768234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1769234285Sdim IntRegs:$src2), 1770234285Sdim !strconcat("$dst -= ", !strconcat(opc , "($src1.L, $src2.L)")), 1771234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1772234285Sdim IntRegs:$src2))], 1773234285Sdim "$dst2 = $dst">; 1774234285Sdim 1775234285Sdimclass di_MInst_disisi_nac_hh_s1<string opc, Intrinsic IntID> 1776234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1777234285Sdim IntRegs:$src2), 1778234285Sdim !strconcat("$dst -= ", 1779234285Sdim !strconcat(opc , "($src1.H, $src2.H):<<1")), 1780234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1781234285Sdim IntRegs:$src2))], 1782234285Sdim "$dst2 = $dst">; 1783234285Sdim 1784234285Sdimclass di_MInst_disisi_nac_hl_s1<string opc, Intrinsic IntID> 1785234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1786234285Sdim IntRegs:$src2), 1787234285Sdim !strconcat("$dst -= ", 1788234285Sdim !strconcat(opc , "($src1.H, $src2.L):<<1")), 1789234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1790234285Sdim IntRegs:$src2))], 1791234285Sdim "$dst2 = $dst">; 1792234285Sdim 1793234285Sdimclass di_MInst_disisi_nac_lh_s1<string opc, Intrinsic IntID> 1794234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1795234285Sdim IntRegs:$src2), 1796234285Sdim !strconcat("$dst -= ", 1797234285Sdim !strconcat(opc , "($src1.L, $src2.H):<<1")), 1798234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1799234285Sdim IntRegs:$src2))], 1800234285Sdim "$dst2 = $dst">; 1801234285Sdim 1802234285Sdimclass di_MInst_disisi_nac_ll_s1<string opc, Intrinsic IntID> 1803234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1804234285Sdim IntRegs:$src2), 1805234285Sdim !strconcat("$dst -= ", 1806234285Sdim !strconcat(opc , "($src1.L, $src2.L):<<1")), 1807234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1808234285Sdim IntRegs:$src2))], 1809234285Sdim "$dst2 = $dst">; 1810234285Sdim 1811234285Sdimclass di_MInst_disisi_acc_s1_sat<string opc, Intrinsic IntID> 1812234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, IntRegs:$src1, 1813234285Sdim IntRegs:$src2), 1814234285Sdim !strconcat("$dst += ", 1815234285Sdim !strconcat(opc , "($src1, $src2):<<1:sat")), 1816234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, IntRegs:$src1, 1817234285Sdim IntRegs:$src2))], 1818234285Sdim "$dst2 = $dst">; 1819234285Sdim 1820234285Sdimclass di_MInst_disi_s1_sat<string opc, Intrinsic IntID> 1821234285Sdim : MInst<(outs DoubleRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2), 1822234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2):<<1:sat")), 1823234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2))]>; 1824234285Sdim 1825234285Sdimclass di_MInst_didisi_acc_s1_sat<string opc, Intrinsic IntID> 1826234285Sdim : MInst_acc<(outs DoubleRegs:$dst), (ins DoubleRegs:$dst2, DoubleRegs:$src1, 1827234285Sdim IntRegs:$src2), 1828234285Sdim !strconcat("$dst += ", 1829234285Sdim !strconcat(opc , "($src1, $src2):<<1:sat")), 1830234285Sdim [(set DoubleRegs:$dst, (IntID DoubleRegs:$dst2, 1831234285Sdim DoubleRegs:$src1, 1832234285Sdim IntRegs:$src2))], 1833234285Sdim "$dst2 = $dst">; 1834234285Sdim 1835234285Sdimclass si_MInst_disi_s1_rnd_sat<string opc, Intrinsic IntID> 1836234285Sdim : MInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, IntRegs:$src2), 1837234285Sdim !strconcat("$dst = ", 1838234285Sdim !strconcat(opc , "($src1, $src2):<<1:rnd:sat")), 1839234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, IntRegs:$src2))]>; 1840234285Sdim 1841234285Sdimclass si_MInst_didi<string opc, Intrinsic IntID> 1842234285Sdim : MInst<(outs IntRegs:$dst), (ins DoubleRegs:$src1, DoubleRegs:$src2), 1843234285Sdim !strconcat("$dst = ", !strconcat(opc , "($src1, $src2)")), 1844234285Sdim [(set IntRegs:$dst, (IntID DoubleRegs:$src1, DoubleRegs:$src2))]>; 1845234285Sdim 1846245431Sdim// 1847245431Sdim// LDInst classes. 1848245431Sdim// 1849245431Sdimlet mayLoad = 1, neverHasSideEffects = 1 in 1850245431Sdimclass di_LDInstPI_diu4<string opc, Intrinsic IntID> 1851245431Sdim : LDInstPI<(outs IntRegs:$dst, DoubleRegs:$dst2), 1852245431Sdim (ins IntRegs:$src1, IntRegs:$src2, CRRegs:$src3, s4Imm:$offset), 1853245431Sdim "$dst2 = memd($src1++#$offset:circ($src3))", 1854245431Sdim [], 1855245431Sdim "$src1 = $dst">; 1856234285Sdim 1857234285Sdim/******************************************************************** 1858234285Sdim* ALU32/ALU * 1859234285Sdim*********************************************************************/ 1860234285Sdim 1861234285Sdim// ALU32 / ALU / Add. 1862245431Sdimdef HEXAGON_A2_add: 1863234285Sdim si_ALU32_sisi <"add", int_hexagon_A2_add>; 1864245431Sdimdef HEXAGON_A2_addi: 1865234285Sdim si_ALU32_sis16 <"add", int_hexagon_A2_addi>; 1866234285Sdim 1867234285Sdim// ALU32 / ALU / Logical operations. 1868245431Sdimdef HEXAGON_A2_and: 1869234285Sdim si_ALU32_sisi <"and", int_hexagon_A2_and>; 1870245431Sdimdef HEXAGON_A2_andir: 1871234285Sdim si_ALU32_sis10 <"and", int_hexagon_A2_andir>; 1872245431Sdimdef HEXAGON_A2_not: 1873234285Sdim si_ALU32_si <"not", int_hexagon_A2_not>; 1874245431Sdimdef HEXAGON_A2_or: 1875234285Sdim si_ALU32_sisi <"or", int_hexagon_A2_or>; 1876245431Sdimdef HEXAGON_A2_orir: 1877234285Sdim si_ALU32_sis10 <"or", int_hexagon_A2_orir>; 1878245431Sdimdef HEXAGON_A2_xor: 1879234285Sdim si_ALU32_sisi <"xor", int_hexagon_A2_xor>; 1880234285Sdim 1881234285Sdim// ALU32 / ALU / Negate. 1882245431Sdimdef HEXAGON_A2_neg: 1883234285Sdim si_ALU32_si <"neg", int_hexagon_A2_neg>; 1884234285Sdim 1885234285Sdim// ALU32 / ALU / Subtract. 1886245431Sdimdef HEXAGON_A2_sub: 1887234285Sdim si_ALU32_sisi <"sub", int_hexagon_A2_sub>; 1888245431Sdimdef HEXAGON_A2_subri: 1889234285Sdim si_ALU32_s10si <"sub", int_hexagon_A2_subri>; 1890234285Sdim 1891234285Sdim// ALU32 / ALU / Transfer Immediate. 1892245431Sdimdef HEXAGON_A2_tfril: 1893234285Sdim si_lo_ALU32_siu16 <"", int_hexagon_A2_tfril>; 1894245431Sdimdef HEXAGON_A2_tfrih: 1895234285Sdim si_hi_ALU32_siu16 <"", int_hexagon_A2_tfrih>; 1896245431Sdimdef HEXAGON_A2_tfrsi: 1897234285Sdim si_ALU32_s16 <"", int_hexagon_A2_tfrsi>; 1898245431Sdimdef HEXAGON_A2_tfrpi: 1899234285Sdim di_ALU32_s8 <"", int_hexagon_A2_tfrpi>; 1900234285Sdim 1901234285Sdim// ALU32 / ALU / Transfer Register. 1902245431Sdimdef HEXAGON_A2_tfr: 1903234285Sdim si_ALU32_si_tfr <"", int_hexagon_A2_tfr>; 1904234285Sdim 1905234285Sdim/******************************************************************** 1906234285Sdim* ALU32/PERM * 1907234285Sdim*********************************************************************/ 1908234285Sdim 1909234285Sdim// ALU32 / PERM / Combine. 1910245431Sdimdef HEXAGON_A2_combinew: 1911234285Sdim di_ALU32_sisi <"combine", int_hexagon_A2_combinew>; 1912245431Sdimdef HEXAGON_A2_combine_hh: 1913234285Sdim si_MInst_sisi_hh <"combine", int_hexagon_A2_combine_hh>; 1914245431Sdimdef HEXAGON_A2_combine_lh: 1915234285Sdim si_MInst_sisi_lh <"combine", int_hexagon_A2_combine_lh>; 1916245431Sdimdef HEXAGON_A2_combine_hl: 1917234285Sdim si_MInst_sisi_hl <"combine", int_hexagon_A2_combine_hl>; 1918245431Sdimdef HEXAGON_A2_combine_ll: 1919234285Sdim si_MInst_sisi_ll <"combine", int_hexagon_A2_combine_ll>; 1920245431Sdimdef HEXAGON_A2_combineii: 1921234285Sdim di_MInst_s8s8 <"combine", int_hexagon_A2_combineii>; 1922234285Sdim 1923234285Sdim// ALU32 / PERM / Mux. 1924245431Sdimdef HEXAGON_C2_mux: 1925234285Sdim si_ALU32_qisisi <"mux", int_hexagon_C2_mux>; 1926245431Sdimdef HEXAGON_C2_muxri: 1927234285Sdim si_ALU32_qis8si <"mux", int_hexagon_C2_muxri>; 1928245431Sdimdef HEXAGON_C2_muxir: 1929234285Sdim si_ALU32_qisis8 <"mux", int_hexagon_C2_muxir>; 1930245431Sdimdef HEXAGON_C2_muxii: 1931234285Sdim si_ALU32_qis8s8 <"mux", int_hexagon_C2_muxii>; 1932234285Sdim 1933234285Sdim// ALU32 / PERM / Shift halfword. 1934245431Sdimdef HEXAGON_A2_aslh: 1935234285Sdim si_ALU32_si <"aslh", int_hexagon_A2_aslh>; 1936245431Sdimdef HEXAGON_A2_asrh: 1937234285Sdim si_ALU32_si <"asrh", int_hexagon_A2_asrh>; 1938234285Sdimdef SI_to_SXTHI_asrh: 1939234285Sdim si_ALU32_si <"asrh", int_hexagon_SI_to_SXTHI_asrh>; 1940234285Sdim 1941234285Sdim// ALU32 / PERM / Sign/zero extend. 1942245431Sdimdef HEXAGON_A2_sxth: 1943234285Sdim si_ALU32_si <"sxth", int_hexagon_A2_sxth>; 1944245431Sdimdef HEXAGON_A2_sxtb: 1945234285Sdim si_ALU32_si <"sxtb", int_hexagon_A2_sxtb>; 1946245431Sdimdef HEXAGON_A2_zxth: 1947234285Sdim si_ALU32_si <"zxth", int_hexagon_A2_zxth>; 1948245431Sdimdef HEXAGON_A2_zxtb: 1949234285Sdim si_ALU32_si <"zxtb", int_hexagon_A2_zxtb>; 1950234285Sdim 1951234285Sdim/******************************************************************** 1952234285Sdim* ALU32/PRED * 1953234285Sdim*********************************************************************/ 1954234285Sdim 1955234285Sdim// ALU32 / PRED / Compare. 1956245431Sdimdef HEXAGON_C2_cmpeq: 1957234285Sdim qi_ALU32_sisi <"cmp.eq", int_hexagon_C2_cmpeq>; 1958245431Sdimdef HEXAGON_C2_cmpeqi: 1959234285Sdim qi_ALU32_sis10 <"cmp.eq", int_hexagon_C2_cmpeqi>; 1960245431Sdimdef HEXAGON_C2_cmpgei: 1961234285Sdim qi_ALU32_sis8 <"cmp.ge", int_hexagon_C2_cmpgei>; 1962245431Sdimdef HEXAGON_C2_cmpgeui: 1963234285Sdim qi_ALU32_siu8 <"cmp.geu", int_hexagon_C2_cmpgeui>; 1964245431Sdimdef HEXAGON_C2_cmpgt: 1965234285Sdim qi_ALU32_sisi <"cmp.gt", int_hexagon_C2_cmpgt>; 1966245431Sdimdef HEXAGON_C2_cmpgti: 1967234285Sdim qi_ALU32_sis10 <"cmp.gt", int_hexagon_C2_cmpgti>; 1968245431Sdimdef HEXAGON_C2_cmpgtu: 1969234285Sdim qi_ALU32_sisi <"cmp.gtu", int_hexagon_C2_cmpgtu>; 1970245431Sdimdef HEXAGON_C2_cmpgtui: 1971234285Sdim qi_ALU32_siu9 <"cmp.gtu", int_hexagon_C2_cmpgtui>; 1972245431Sdimdef HEXAGON_C2_cmplt: 1973234285Sdim qi_ALU32_sisi <"cmp.lt", int_hexagon_C2_cmplt>; 1974245431Sdimdef HEXAGON_C2_cmpltu: 1975234285Sdim qi_ALU32_sisi <"cmp.ltu", int_hexagon_C2_cmpltu>; 1976234285Sdim 1977234285Sdim/******************************************************************** 1978234285Sdim* ALU32/VH * 1979234285Sdim*********************************************************************/ 1980234285Sdim 1981234285Sdim// ALU32 / VH / Vector add halfwords. 1982234285Sdim// Rd32=vadd[u]h(Rs32,Rt32:sat] 1983245431Sdimdef HEXAGON_A2_svaddh: 1984234285Sdim si_ALU32_sisi <"vaddh", int_hexagon_A2_svaddh>; 1985245431Sdimdef HEXAGON_A2_svaddhs: 1986234285Sdim si_ALU32_sisi_sat <"vaddh", int_hexagon_A2_svaddhs>; 1987245431Sdimdef HEXAGON_A2_svadduhs: 1988234285Sdim si_ALU32_sisi_sat <"vadduh", int_hexagon_A2_svadduhs>; 1989234285Sdim 1990234285Sdim// ALU32 / VH / Vector average halfwords. 1991245431Sdimdef HEXAGON_A2_svavgh: 1992234285Sdim si_ALU32_sisi <"vavgh", int_hexagon_A2_svavgh>; 1993245431Sdimdef HEXAGON_A2_svavghs: 1994234285Sdim si_ALU32_sisi_rnd <"vavgh", int_hexagon_A2_svavghs>; 1995245431Sdimdef HEXAGON_A2_svnavgh: 1996234285Sdim si_ALU32_sisi <"vnavgh", int_hexagon_A2_svnavgh>; 1997234285Sdim 1998234285Sdim// ALU32 / VH / Vector subtract halfwords. 1999245431Sdimdef HEXAGON_A2_svsubh: 2000234285Sdim si_ALU32_sisi <"vsubh", int_hexagon_A2_svsubh>; 2001245431Sdimdef HEXAGON_A2_svsubhs: 2002234285Sdim si_ALU32_sisi_sat <"vsubh", int_hexagon_A2_svsubhs>; 2003245431Sdimdef HEXAGON_A2_svsubuhs: 2004234285Sdim si_ALU32_sisi_sat <"vsubuh", int_hexagon_A2_svsubuhs>; 2005234285Sdim 2006234285Sdim/******************************************************************** 2007234285Sdim* ALU64/ALU * 2008234285Sdim*********************************************************************/ 2009234285Sdim 2010234285Sdim// ALU64 / ALU / Add. 2011245431Sdimdef HEXAGON_A2_addp: 2012234285Sdim di_ALU64_didi <"add", int_hexagon_A2_addp>; 2013245431Sdimdef HEXAGON_A2_addsat: 2014234285Sdim si_ALU64_sisi_sat <"add", int_hexagon_A2_addsat>; 2015234285Sdim 2016234285Sdim// ALU64 / ALU / Add halfword. 2017234285Sdim// Even though the definition says hl, it should be lh - 2018234285Sdim//so DON'T change the class " si_ALU64_sisi_l16_lh " it inherits. 2019245431Sdimdef HEXAGON_A2_addh_l16_hl: 2020234285Sdim si_ALU64_sisi_l16_lh <"add", int_hexagon_A2_addh_l16_hl>; 2021245431Sdimdef HEXAGON_A2_addh_l16_ll: 2022234285Sdim si_ALU64_sisi_l16_ll <"add", int_hexagon_A2_addh_l16_ll>; 2023234285Sdim 2024245431Sdimdef HEXAGON_A2_addh_l16_sat_hl: 2025234285Sdim si_ALU64_sisi_l16_sat_lh <"add", int_hexagon_A2_addh_l16_sat_hl>; 2026245431Sdimdef HEXAGON_A2_addh_l16_sat_ll: 2027234285Sdim si_ALU64_sisi_l16_sat_ll <"add", int_hexagon_A2_addh_l16_sat_ll>; 2028234285Sdim 2029245431Sdimdef HEXAGON_A2_addh_h16_hh: 2030234285Sdim si_ALU64_sisi_h16_hh <"add", int_hexagon_A2_addh_h16_hh>; 2031245431Sdimdef HEXAGON_A2_addh_h16_hl: 2032234285Sdim si_ALU64_sisi_h16_hl <"add", int_hexagon_A2_addh_h16_hl>; 2033245431Sdimdef HEXAGON_A2_addh_h16_lh: 2034234285Sdim si_ALU64_sisi_h16_lh <"add", int_hexagon_A2_addh_h16_lh>; 2035245431Sdimdef HEXAGON_A2_addh_h16_ll: 2036234285Sdim si_ALU64_sisi_h16_ll <"add", int_hexagon_A2_addh_h16_ll>; 2037234285Sdim 2038245431Sdimdef HEXAGON_A2_addh_h16_sat_hh: 2039234285Sdim si_ALU64_sisi_h16_sat_hh <"add", int_hexagon_A2_addh_h16_sat_hh>; 2040245431Sdimdef HEXAGON_A2_addh_h16_sat_hl: 2041234285Sdim si_ALU64_sisi_h16_sat_hl <"add", int_hexagon_A2_addh_h16_sat_hl>; 2042245431Sdimdef HEXAGON_A2_addh_h16_sat_lh: 2043234285Sdim si_ALU64_sisi_h16_sat_lh <"add", int_hexagon_A2_addh_h16_sat_lh>; 2044245431Sdimdef HEXAGON_A2_addh_h16_sat_ll: 2045234285Sdim si_ALU64_sisi_h16_sat_ll <"add", int_hexagon_A2_addh_h16_sat_ll>; 2046234285Sdim 2047234285Sdim// ALU64 / ALU / Compare. 2048245431Sdimdef HEXAGON_C2_cmpeqp: 2049234285Sdim qi_ALU64_didi <"cmp.eq", int_hexagon_C2_cmpeqp>; 2050245431Sdimdef HEXAGON_C2_cmpgtp: 2051234285Sdim qi_ALU64_didi <"cmp.gt", int_hexagon_C2_cmpgtp>; 2052245431Sdimdef HEXAGON_C2_cmpgtup: 2053234285Sdim qi_ALU64_didi <"cmp.gtu", int_hexagon_C2_cmpgtup>; 2054234285Sdim 2055234285Sdim// ALU64 / ALU / Logical operations. 2056245431Sdimdef HEXAGON_A2_andp: 2057234285Sdim di_ALU64_didi <"and", int_hexagon_A2_andp>; 2058245431Sdimdef HEXAGON_A2_orp: 2059234285Sdim di_ALU64_didi <"or", int_hexagon_A2_orp>; 2060245431Sdimdef HEXAGON_A2_xorp: 2061234285Sdim di_ALU64_didi <"xor", int_hexagon_A2_xorp>; 2062234285Sdim 2063234285Sdim// ALU64 / ALU / Maximum. 2064245431Sdimdef HEXAGON_A2_max: 2065234285Sdim si_ALU64_sisi <"max", int_hexagon_A2_max>; 2066245431Sdimdef HEXAGON_A2_maxu: 2067234285Sdim si_ALU64_sisi <"maxu", int_hexagon_A2_maxu>; 2068234285Sdim 2069234285Sdim// ALU64 / ALU / Minimum. 2070245431Sdimdef HEXAGON_A2_min: 2071234285Sdim si_ALU64_sisi <"min", int_hexagon_A2_min>; 2072245431Sdimdef HEXAGON_A2_minu: 2073234285Sdim si_ALU64_sisi <"minu", int_hexagon_A2_minu>; 2074234285Sdim 2075234285Sdim// ALU64 / ALU / Subtract. 2076245431Sdimdef HEXAGON_A2_subp: 2077234285Sdim di_ALU64_didi <"sub", int_hexagon_A2_subp>; 2078245431Sdimdef HEXAGON_A2_subsat: 2079234285Sdim si_ALU64_sisi_sat <"sub", int_hexagon_A2_subsat>; 2080234285Sdim 2081234285Sdim// ALU64 / ALU / Subtract halfword. 2082234285Sdim// Even though the definition says hl, it should be lh - 2083234285Sdim//so DON'T change the class " si_ALU64_sisi_l16_lh " it inherits. 2084245431Sdimdef HEXAGON_A2_subh_l16_hl: 2085234285Sdim si_ALU64_sisi_l16_lh <"sub", int_hexagon_A2_subh_l16_hl>; 2086245431Sdimdef HEXAGON_A2_subh_l16_ll: 2087234285Sdim si_ALU64_sisi_l16_ll <"sub", int_hexagon_A2_subh_l16_ll>; 2088234285Sdim 2089245431Sdimdef HEXAGON_A2_subh_l16_sat_hl: 2090234285Sdim si_ALU64_sisi_l16_sat_lh <"sub", int_hexagon_A2_subh_l16_sat_hl>; 2091245431Sdimdef HEXAGON_A2_subh_l16_sat_ll: 2092234285Sdim si_ALU64_sisi_l16_sat_ll <"sub", int_hexagon_A2_subh_l16_sat_ll>; 2093234285Sdim 2094245431Sdimdef HEXAGON_A2_subh_h16_hh: 2095234285Sdim si_ALU64_sisi_h16_hh <"sub", int_hexagon_A2_subh_h16_hh>; 2096245431Sdimdef HEXAGON_A2_subh_h16_hl: 2097234285Sdim si_ALU64_sisi_h16_hl <"sub", int_hexagon_A2_subh_h16_hl>; 2098245431Sdimdef HEXAGON_A2_subh_h16_lh: 2099234285Sdim si_ALU64_sisi_h16_lh <"sub", int_hexagon_A2_subh_h16_lh>; 2100245431Sdimdef HEXAGON_A2_subh_h16_ll: 2101234285Sdim si_ALU64_sisi_h16_ll <"sub", int_hexagon_A2_subh_h16_ll>; 2102234285Sdim 2103245431Sdimdef HEXAGON_A2_subh_h16_sat_hh: 2104234285Sdim si_ALU64_sisi_h16_sat_hh <"sub", int_hexagon_A2_subh_h16_sat_hh>; 2105245431Sdimdef HEXAGON_A2_subh_h16_sat_hl: 2106234285Sdim si_ALU64_sisi_h16_sat_hl <"sub", int_hexagon_A2_subh_h16_sat_hl>; 2107245431Sdimdef HEXAGON_A2_subh_h16_sat_lh: 2108234285Sdim si_ALU64_sisi_h16_sat_lh <"sub", int_hexagon_A2_subh_h16_sat_lh>; 2109245431Sdimdef HEXAGON_A2_subh_h16_sat_ll: 2110234285Sdim si_ALU64_sisi_h16_sat_ll <"sub", int_hexagon_A2_subh_h16_sat_ll>; 2111234285Sdim 2112234285Sdim// ALU64 / ALU / Transfer register. 2113245431Sdimdef HEXAGON_A2_tfrp: 2114234285Sdim di_ALU64_di <"", int_hexagon_A2_tfrp>; 2115234285Sdim 2116234285Sdim/******************************************************************** 2117234285Sdim* ALU64/BIT * 2118234285Sdim*********************************************************************/ 2119234285Sdim 2120234285Sdim// ALU64 / BIT / Masked parity. 2121245431Sdimdef HEXAGON_S2_parityp: 2122234285Sdim si_ALU64_didi <"parity", int_hexagon_S2_parityp>; 2123234285Sdim 2124234285Sdim/******************************************************************** 2125234285Sdim* ALU64/PERM * 2126234285Sdim*********************************************************************/ 2127234285Sdim 2128234285Sdim// ALU64 / PERM / Vector pack high and low halfwords. 2129245431Sdimdef HEXAGON_S2_packhl: 2130234285Sdim di_ALU64_sisi <"packhl", int_hexagon_S2_packhl>; 2131234285Sdim 2132234285Sdim/******************************************************************** 2133234285Sdim* ALU64/VB * 2134234285Sdim*********************************************************************/ 2135234285Sdim 2136234285Sdim// ALU64 / VB / Vector add unsigned bytes. 2137245431Sdimdef HEXAGON_A2_vaddub: 2138234285Sdim di_ALU64_didi <"vaddub", int_hexagon_A2_vaddub>; 2139245431Sdimdef HEXAGON_A2_vaddubs: 2140234285Sdim di_ALU64_didi_sat <"vaddub", int_hexagon_A2_vaddubs>; 2141234285Sdim 2142234285Sdim// ALU64 / VB / Vector average unsigned bytes. 2143245431Sdimdef HEXAGON_A2_vavgub: 2144234285Sdim di_ALU64_didi <"vavgub", int_hexagon_A2_vavgub>; 2145245431Sdimdef HEXAGON_A2_vavgubr: 2146234285Sdim di_ALU64_didi_rnd <"vavgub", int_hexagon_A2_vavgubr>; 2147234285Sdim 2148234285Sdim// ALU64 / VB / Vector compare unsigned bytes. 2149245431Sdimdef HEXAGON_A2_vcmpbeq: 2150234285Sdim qi_ALU64_didi <"vcmpb.eq", int_hexagon_A2_vcmpbeq>; 2151245431Sdimdef HEXAGON_A2_vcmpbgtu: 2152234285Sdim qi_ALU64_didi <"vcmpb.gtu",int_hexagon_A2_vcmpbgtu>; 2153234285Sdim 2154234285Sdim// ALU64 / VB / Vector maximum/minimum unsigned bytes. 2155245431Sdimdef HEXAGON_A2_vmaxub: 2156234285Sdim di_ALU64_didi <"vmaxub", int_hexagon_A2_vmaxub>; 2157245431Sdimdef HEXAGON_A2_vminub: 2158234285Sdim di_ALU64_didi <"vminub", int_hexagon_A2_vminub>; 2159234285Sdim 2160234285Sdim// ALU64 / VB / Vector subtract unsigned bytes. 2161245431Sdimdef HEXAGON_A2_vsubub: 2162234285Sdim di_ALU64_didi <"vsubub", int_hexagon_A2_vsubub>; 2163245431Sdimdef HEXAGON_A2_vsububs: 2164234285Sdim di_ALU64_didi_sat <"vsubub", int_hexagon_A2_vsububs>; 2165234285Sdim 2166234285Sdim// ALU64 / VB / Vector mux. 2167245431Sdimdef HEXAGON_C2_vmux: 2168234285Sdim di_ALU64_qididi <"vmux", int_hexagon_C2_vmux>; 2169234285Sdim 2170234285Sdim 2171234285Sdim/******************************************************************** 2172234285Sdim* ALU64/VH * 2173234285Sdim*********************************************************************/ 2174234285Sdim 2175234285Sdim// ALU64 / VH / Vector add halfwords. 2176234285Sdim// Rdd64=vadd[u]h(Rss64,Rtt64:sat] 2177245431Sdimdef HEXAGON_A2_vaddh: 2178234285Sdim di_ALU64_didi <"vaddh", int_hexagon_A2_vaddh>; 2179245431Sdimdef HEXAGON_A2_vaddhs: 2180234285Sdim di_ALU64_didi_sat <"vaddh", int_hexagon_A2_vaddhs>; 2181245431Sdimdef HEXAGON_A2_vadduhs: 2182234285Sdim di_ALU64_didi_sat <"vadduh", int_hexagon_A2_vadduhs>; 2183234285Sdim 2184234285Sdim// ALU64 / VH / Vector average halfwords. 2185234285Sdim// Rdd64=v[n]avg[u]h(Rss64,Rtt64:rnd/:crnd][:sat] 2186245431Sdimdef HEXAGON_A2_vavgh: 2187234285Sdim di_ALU64_didi <"vavgh", int_hexagon_A2_vavgh>; 2188245431Sdimdef HEXAGON_A2_vavghcr: 2189234285Sdim di_ALU64_didi_crnd <"vavgh", int_hexagon_A2_vavghcr>; 2190245431Sdimdef HEXAGON_A2_vavghr: 2191234285Sdim di_ALU64_didi_rnd <"vavgh", int_hexagon_A2_vavghr>; 2192245431Sdimdef HEXAGON_A2_vavguh: 2193234285Sdim di_ALU64_didi <"vavguh", int_hexagon_A2_vavguh>; 2194245431Sdimdef HEXAGON_A2_vavguhr: 2195234285Sdim di_ALU64_didi_rnd <"vavguh", int_hexagon_A2_vavguhr>; 2196245431Sdimdef HEXAGON_A2_vnavgh: 2197234285Sdim di_ALU64_didi <"vnavgh", int_hexagon_A2_vnavgh>; 2198245431Sdimdef HEXAGON_A2_vnavghcr: 2199234285Sdim di_ALU64_didi_crnd_sat <"vnavgh", int_hexagon_A2_vnavghcr>; 2200245431Sdimdef HEXAGON_A2_vnavghr: 2201234285Sdim di_ALU64_didi_rnd_sat <"vnavgh", int_hexagon_A2_vnavghr>; 2202234285Sdim 2203234285Sdim// ALU64 / VH / Vector compare halfwords. 2204245431Sdimdef HEXAGON_A2_vcmpheq: 2205234285Sdim qi_ALU64_didi <"vcmph.eq", int_hexagon_A2_vcmpheq>; 2206245431Sdimdef HEXAGON_A2_vcmphgt: 2207234285Sdim qi_ALU64_didi <"vcmph.gt", int_hexagon_A2_vcmphgt>; 2208245431Sdimdef HEXAGON_A2_vcmphgtu: 2209234285Sdim qi_ALU64_didi <"vcmph.gtu",int_hexagon_A2_vcmphgtu>; 2210234285Sdim 2211234285Sdim// ALU64 / VH / Vector maximum halfwords. 2212245431Sdimdef HEXAGON_A2_vmaxh: 2213234285Sdim di_ALU64_didi <"vmaxh", int_hexagon_A2_vmaxh>; 2214245431Sdimdef HEXAGON_A2_vmaxuh: 2215234285Sdim di_ALU64_didi <"vmaxuh", int_hexagon_A2_vmaxuh>; 2216234285Sdim 2217234285Sdim// ALU64 / VH / Vector minimum halfwords. 2218245431Sdimdef HEXAGON_A2_vminh: 2219234285Sdim di_ALU64_didi <"vminh", int_hexagon_A2_vminh>; 2220245431Sdimdef HEXAGON_A2_vminuh: 2221234285Sdim di_ALU64_didi <"vminuh", int_hexagon_A2_vminuh>; 2222234285Sdim 2223234285Sdim// ALU64 / VH / Vector subtract halfwords. 2224245431Sdimdef HEXAGON_A2_vsubh: 2225234285Sdim di_ALU64_didi <"vsubh", int_hexagon_A2_vsubh>; 2226245431Sdimdef HEXAGON_A2_vsubhs: 2227234285Sdim di_ALU64_didi_sat <"vsubh", int_hexagon_A2_vsubhs>; 2228245431Sdimdef HEXAGON_A2_vsubuhs: 2229234285Sdim di_ALU64_didi_sat <"vsubuh", int_hexagon_A2_vsubuhs>; 2230234285Sdim 2231234285Sdim 2232234285Sdim/******************************************************************** 2233234285Sdim* ALU64/VW * 2234234285Sdim*********************************************************************/ 2235234285Sdim 2236234285Sdim// ALU64 / VW / Vector add words. 2237234285Sdim// Rdd32=vaddw(Rss32,Rtt32)[:sat] 2238245431Sdimdef HEXAGON_A2_vaddw: 2239234285Sdim di_ALU64_didi <"vaddw", int_hexagon_A2_vaddw>; 2240245431Sdimdef HEXAGON_A2_vaddws: 2241234285Sdim di_ALU64_didi_sat <"vaddw", int_hexagon_A2_vaddws>; 2242234285Sdim 2243234285Sdim// ALU64 / VW / Vector average words. 2244245431Sdimdef HEXAGON_A2_vavguw: 2245234285Sdim di_ALU64_didi <"vavguw", int_hexagon_A2_vavguw>; 2246245431Sdimdef HEXAGON_A2_vavguwr: 2247234285Sdim di_ALU64_didi_rnd <"vavguw", int_hexagon_A2_vavguwr>; 2248245431Sdimdef HEXAGON_A2_vavgw: 2249234285Sdim di_ALU64_didi <"vavgw", int_hexagon_A2_vavgw>; 2250245431Sdimdef HEXAGON_A2_vavgwcr: 2251234285Sdim di_ALU64_didi_crnd <"vavgw", int_hexagon_A2_vavgwcr>; 2252245431Sdimdef HEXAGON_A2_vavgwr: 2253234285Sdim di_ALU64_didi_rnd <"vavgw", int_hexagon_A2_vavgwr>; 2254245431Sdimdef HEXAGON_A2_vnavgw: 2255234285Sdim di_ALU64_didi <"vnavgw", int_hexagon_A2_vnavgw>; 2256245431Sdimdef HEXAGON_A2_vnavgwcr: 2257234285Sdim di_ALU64_didi_crnd_sat <"vnavgw", int_hexagon_A2_vnavgwcr>; 2258245431Sdimdef HEXAGON_A2_vnavgwr: 2259234285Sdim di_ALU64_didi_rnd_sat <"vnavgw", int_hexagon_A2_vnavgwr>; 2260234285Sdim 2261234285Sdim// ALU64 / VW / Vector compare words. 2262245431Sdimdef HEXAGON_A2_vcmpweq: 2263234285Sdim qi_ALU64_didi <"vcmpw.eq", int_hexagon_A2_vcmpweq>; 2264245431Sdimdef HEXAGON_A2_vcmpwgt: 2265234285Sdim qi_ALU64_didi <"vcmpw.gt", int_hexagon_A2_vcmpwgt>; 2266245431Sdimdef HEXAGON_A2_vcmpwgtu: 2267234285Sdim qi_ALU64_didi <"vcmpw.gtu",int_hexagon_A2_vcmpwgtu>; 2268234285Sdim 2269234285Sdim// ALU64 / VW / Vector maximum words. 2270245431Sdimdef HEXAGON_A2_vmaxw: 2271234285Sdim di_ALU64_didi <"vmaxw", int_hexagon_A2_vmaxw>; 2272245431Sdimdef HEXAGON_A2_vmaxuw: 2273234285Sdim di_ALU64_didi <"vmaxuw", int_hexagon_A2_vmaxuw>; 2274234285Sdim 2275234285Sdim// ALU64 / VW / Vector minimum words. 2276245431Sdimdef HEXAGON_A2_vminw: 2277234285Sdim di_ALU64_didi <"vminw", int_hexagon_A2_vminw>; 2278245431Sdimdef HEXAGON_A2_vminuw: 2279234285Sdim di_ALU64_didi <"vminuw", int_hexagon_A2_vminuw>; 2280234285Sdim 2281234285Sdim// ALU64 / VW / Vector subtract words. 2282245431Sdimdef HEXAGON_A2_vsubw: 2283234285Sdim di_ALU64_didi <"vsubw", int_hexagon_A2_vsubw>; 2284245431Sdimdef HEXAGON_A2_vsubws: 2285234285Sdim di_ALU64_didi_sat <"vsubw", int_hexagon_A2_vsubws>; 2286234285Sdim 2287234285Sdim 2288234285Sdim/******************************************************************** 2289234285Sdim* CR * 2290234285Sdim*********************************************************************/ 2291234285Sdim 2292234285Sdim// CR / Logical reductions on predicates. 2293245431Sdimdef HEXAGON_C2_all8: 2294234285Sdim qi_SInst_qi <"all8", int_hexagon_C2_all8>; 2295245431Sdimdef HEXAGON_C2_any8: 2296234285Sdim qi_SInst_qi <"any8", int_hexagon_C2_any8>; 2297234285Sdim 2298234285Sdim// CR / Logical operations on predicates. 2299245431Sdimdef HEXAGON_C2_pxfer_map: 2300234285Sdim qi_SInst_qi_pxfer <"", int_hexagon_C2_pxfer_map>; 2301245431Sdimdef HEXAGON_C2_and: 2302234285Sdim qi_SInst_qiqi <"and", int_hexagon_C2_and>; 2303245431Sdimdef HEXAGON_C2_andn: 2304234285Sdim qi_SInst_qiqi_neg <"and", int_hexagon_C2_andn>; 2305245431Sdimdef HEXAGON_C2_not: 2306234285Sdim qi_SInst_qi <"not", int_hexagon_C2_not>; 2307245431Sdimdef HEXAGON_C2_or: 2308234285Sdim qi_SInst_qiqi <"or", int_hexagon_C2_or>; 2309245431Sdimdef HEXAGON_C2_orn: 2310234285Sdim qi_SInst_qiqi_neg <"or", int_hexagon_C2_orn>; 2311245431Sdimdef HEXAGON_C2_xor: 2312234285Sdim qi_SInst_qiqi <"xor", int_hexagon_C2_xor>; 2313234285Sdim 2314234285Sdim 2315234285Sdim/******************************************************************** 2316234285Sdim* MTYPE/ALU * 2317234285Sdim*********************************************************************/ 2318234285Sdim 2319234285Sdim// MTYPE / ALU / Add and accumulate. 2320245431Sdimdef HEXAGON_M2_acci: 2321234285Sdim si_MInst_sisisi_acc <"add", int_hexagon_M2_acci>; 2322245431Sdimdef HEXAGON_M2_accii: 2323234285Sdim si_MInst_sisis8_acc <"add", int_hexagon_M2_accii>; 2324245431Sdimdef HEXAGON_M2_nacci: 2325234285Sdim si_MInst_sisisi_nac <"add", int_hexagon_M2_nacci>; 2326245431Sdimdef HEXAGON_M2_naccii: 2327234285Sdim si_MInst_sisis8_nac <"add", int_hexagon_M2_naccii>; 2328234285Sdim 2329234285Sdim// MTYPE / ALU / Subtract and accumulate. 2330245431Sdimdef HEXAGON_M2_subacc: 2331234285Sdim si_MInst_sisisi_acc <"sub", int_hexagon_M2_subacc>; 2332234285Sdim 2333234285Sdim// MTYPE / ALU / Vector absolute difference. 2334245431Sdimdef HEXAGON_M2_vabsdiffh: 2335234285Sdim di_MInst_didi <"vabsdiffh",int_hexagon_M2_vabsdiffh>; 2336245431Sdimdef HEXAGON_M2_vabsdiffw: 2337234285Sdim di_MInst_didi <"vabsdiffw",int_hexagon_M2_vabsdiffw>; 2338234285Sdim 2339234285Sdim// MTYPE / ALU / XOR and xor with destination. 2340245431Sdimdef HEXAGON_M2_xor_xacc: 2341234285Sdim si_MInst_sisisi_xacc <"xor", int_hexagon_M2_xor_xacc>; 2342234285Sdim 2343234285Sdim 2344234285Sdim/******************************************************************** 2345234285Sdim* MTYPE/COMPLEX * 2346234285Sdim*********************************************************************/ 2347234285Sdim 2348234285Sdim// MTYPE / COMPLEX / Complex multiply. 2349234285Sdim// Rdd[-+]=cmpy(Rs, Rt:<<1]:sat 2350245431Sdimdef HEXAGON_M2_cmpys_s1: 2351234285Sdim di_MInst_sisi_s1_sat <"cmpy", int_hexagon_M2_cmpys_s1>; 2352245431Sdimdef HEXAGON_M2_cmpys_s0: 2353234285Sdim di_MInst_sisi_sat <"cmpy", int_hexagon_M2_cmpys_s0>; 2354245431Sdimdef HEXAGON_M2_cmpysc_s1: 2355234285Sdim di_MInst_sisi_s1_sat_conj <"cmpy", int_hexagon_M2_cmpysc_s1>; 2356245431Sdimdef HEXAGON_M2_cmpysc_s0: 2357234285Sdim di_MInst_sisi_sat_conj <"cmpy", int_hexagon_M2_cmpysc_s0>; 2358234285Sdim 2359245431Sdimdef HEXAGON_M2_cmacs_s1: 2360234285Sdim di_MInst_disisi_acc_s1_sat <"cmpy", int_hexagon_M2_cmacs_s1>; 2361245431Sdimdef HEXAGON_M2_cmacs_s0: 2362234285Sdim di_MInst_disisi_acc_sat <"cmpy", int_hexagon_M2_cmacs_s0>; 2363245431Sdimdef HEXAGON_M2_cmacsc_s1: 2364234285Sdim di_MInst_disisi_acc_s1_sat_conj <"cmpy", int_hexagon_M2_cmacsc_s1>; 2365245431Sdimdef HEXAGON_M2_cmacsc_s0: 2366234285Sdim di_MInst_disisi_acc_sat_conj <"cmpy", int_hexagon_M2_cmacsc_s0>; 2367234285Sdim 2368245431Sdimdef HEXAGON_M2_cnacs_s1: 2369234285Sdim di_MInst_disisi_nac_s1_sat <"cmpy", int_hexagon_M2_cnacs_s1>; 2370245431Sdimdef HEXAGON_M2_cnacs_s0: 2371234285Sdim di_MInst_disisi_nac_sat <"cmpy", int_hexagon_M2_cnacs_s0>; 2372245431Sdimdef HEXAGON_M2_cnacsc_s1: 2373234285Sdim di_MInst_disisi_nac_s1_sat_conj <"cmpy", int_hexagon_M2_cnacsc_s1>; 2374245431Sdimdef HEXAGON_M2_cnacsc_s0: 2375234285Sdim di_MInst_disisi_nac_sat_conj <"cmpy", int_hexagon_M2_cnacsc_s0>; 2376234285Sdim 2377234285Sdim// MTYPE / COMPLEX / Complex multiply real or imaginary. 2378245431Sdimdef HEXAGON_M2_cmpyr_s0: 2379234285Sdim di_MInst_sisi <"cmpyr", int_hexagon_M2_cmpyr_s0>; 2380245431Sdimdef HEXAGON_M2_cmacr_s0: 2381234285Sdim di_MInst_disisi_acc <"cmpyr", int_hexagon_M2_cmacr_s0>; 2382234285Sdim 2383245431Sdimdef HEXAGON_M2_cmpyi_s0: 2384234285Sdim di_MInst_sisi <"cmpyi", int_hexagon_M2_cmpyi_s0>; 2385245431Sdimdef HEXAGON_M2_cmaci_s0: 2386234285Sdim di_MInst_disisi_acc <"cmpyi", int_hexagon_M2_cmaci_s0>; 2387234285Sdim 2388234285Sdim// MTYPE / COMPLEX / Complex multiply with round and pack. 2389234285Sdim// Rxx32+=cmpy(Rs32,[*]Rt32:<<1]:rnd:sat 2390245431Sdimdef HEXAGON_M2_cmpyrs_s0: 2391234285Sdim si_MInst_sisi_rnd_sat <"cmpy", int_hexagon_M2_cmpyrs_s0>; 2392245431Sdimdef HEXAGON_M2_cmpyrs_s1: 2393234285Sdim si_MInst_sisi_s1_rnd_sat <"cmpy", int_hexagon_M2_cmpyrs_s1>; 2394234285Sdim 2395245431Sdimdef HEXAGON_M2_cmpyrsc_s0: 2396234285Sdim si_MInst_sisi_rnd_sat_conj <"cmpy", int_hexagon_M2_cmpyrsc_s0>; 2397245431Sdimdef HEXAGON_M2_cmpyrsc_s1: 2398234285Sdim si_MInst_sisi_s1_rnd_sat_conj <"cmpy", int_hexagon_M2_cmpyrsc_s1>; 2399234285Sdim 2400234285Sdim//MTYPE / COMPLEX / Vector complex multiply real or imaginary. 2401245431Sdimdef HEXAGON_M2_vcmpy_s0_sat_i: 2402234285Sdim di_MInst_didi_sat <"vcmpyi", int_hexagon_M2_vcmpy_s0_sat_i>; 2403245431Sdimdef HEXAGON_M2_vcmpy_s1_sat_i: 2404234285Sdim di_MInst_didi_s1_sat <"vcmpyi", int_hexagon_M2_vcmpy_s1_sat_i>; 2405234285Sdim 2406245431Sdimdef HEXAGON_M2_vcmpy_s0_sat_r: 2407234285Sdim di_MInst_didi_sat <"vcmpyr", int_hexagon_M2_vcmpy_s0_sat_r>; 2408245431Sdimdef HEXAGON_M2_vcmpy_s1_sat_r: 2409234285Sdim di_MInst_didi_s1_sat <"vcmpyr", int_hexagon_M2_vcmpy_s1_sat_r>; 2410234285Sdim 2411245431Sdimdef HEXAGON_M2_vcmac_s0_sat_i: 2412234285Sdim di_MInst_dididi_acc_sat <"vcmpyi", int_hexagon_M2_vcmac_s0_sat_i>; 2413245431Sdimdef HEXAGON_M2_vcmac_s0_sat_r: 2414234285Sdim di_MInst_dididi_acc_sat <"vcmpyr", int_hexagon_M2_vcmac_s0_sat_r>; 2415234285Sdim 2416234285Sdim//MTYPE / COMPLEX / Vector reduce complex multiply real or imaginary. 2417245431Sdimdef HEXAGON_M2_vrcmpyi_s0: 2418234285Sdim di_MInst_didi <"vrcmpyi", int_hexagon_M2_vrcmpyi_s0>; 2419245431Sdimdef HEXAGON_M2_vrcmpyr_s0: 2420234285Sdim di_MInst_didi <"vrcmpyr", int_hexagon_M2_vrcmpyr_s0>; 2421234285Sdim 2422245431Sdimdef HEXAGON_M2_vrcmpyi_s0c: 2423234285Sdim di_MInst_didi_conj <"vrcmpyi", int_hexagon_M2_vrcmpyi_s0c>; 2424245431Sdimdef HEXAGON_M2_vrcmpyr_s0c: 2425234285Sdim di_MInst_didi_conj <"vrcmpyr", int_hexagon_M2_vrcmpyr_s0c>; 2426234285Sdim 2427245431Sdimdef HEXAGON_M2_vrcmaci_s0: 2428234285Sdim di_MInst_dididi_acc <"vrcmpyi", int_hexagon_M2_vrcmaci_s0>; 2429245431Sdimdef HEXAGON_M2_vrcmacr_s0: 2430234285Sdim di_MInst_dididi_acc <"vrcmpyr", int_hexagon_M2_vrcmacr_s0>; 2431234285Sdim 2432245431Sdimdef HEXAGON_M2_vrcmaci_s0c: 2433234285Sdim di_MInst_dididi_acc_conj <"vrcmpyi", int_hexagon_M2_vrcmaci_s0c>; 2434245431Sdimdef HEXAGON_M2_vrcmacr_s0c: 2435234285Sdim di_MInst_dididi_acc_conj <"vrcmpyr", int_hexagon_M2_vrcmacr_s0c>; 2436234285Sdim 2437234285Sdim 2438234285Sdim/******************************************************************** 2439234285Sdim* MTYPE/MPYH * 2440234285Sdim*********************************************************************/ 2441234285Sdim 2442234285Sdim// MTYPE / MPYH / Multiply and use lower result. 2443245431Sdim//def HEXAGON_M2_mpysmi: 2444245431Sdim//FIXME: Hexagon_M2_mpysmi should really by of the type si_MInst_sim9, 2445245431Sdim// not si_MInst_sis9 - but for now, we will use s9. 2446245431Sdim// def Hexagon_M2_mpysmi: 2447234285Sdim// si_MInst_sim9 <"mpyi", int_hexagon_M2_mpysmi>; 2448245431Sdimdef Hexagon_M2_mpysmi: 2449245431Sdim si_MInst_sis9 <"mpyi", int_hexagon_M2_mpysmi>; 2450245431Sdimdef HEXAGON_M2_mpyi: 2451234285Sdim si_MInst_sisi <"mpyi", int_hexagon_M2_mpyi>; 2452245431Sdimdef HEXAGON_M2_mpyui: 2453234285Sdim si_MInst_sisi <"mpyui", int_hexagon_M2_mpyui>; 2454245431Sdimdef HEXAGON_M2_macsip: 2455234285Sdim si_MInst_sisiu8_acc <"mpyi", int_hexagon_M2_macsip>; 2456245431Sdimdef HEXAGON_M2_maci: 2457234285Sdim si_MInst_sisisi_acc <"mpyi", int_hexagon_M2_maci>; 2458245431Sdimdef HEXAGON_M2_macsin: 2459234285Sdim si_MInst_sisiu8_nac <"mpyi", int_hexagon_M2_macsin>; 2460234285Sdim 2461234285Sdim// MTYPE / MPYH / Multiply word by half (32x16). 2462234285Sdim//Rdd[+]=vmpywoh(Rss,Rtt)[:<<1][:rnd][:sat] 2463234285Sdim//Rdd[+]=vmpyweh(Rss,Rtt)[:<<1][:rnd][:sat] 2464245431Sdimdef HEXAGON_M2_mmpyl_rs1: 2465234285Sdim di_MInst_didi_s1_rnd_sat <"vmpyweh", int_hexagon_M2_mmpyl_rs1>; 2466245431Sdimdef HEXAGON_M2_mmpyl_s1: 2467234285Sdim di_MInst_didi_s1_sat <"vmpyweh", int_hexagon_M2_mmpyl_s1>; 2468245431Sdimdef HEXAGON_M2_mmpyl_rs0: 2469234285Sdim di_MInst_didi_rnd_sat <"vmpyweh", int_hexagon_M2_mmpyl_rs0>; 2470245431Sdimdef HEXAGON_M2_mmpyl_s0: 2471234285Sdim di_MInst_didi_sat <"vmpyweh", int_hexagon_M2_mmpyl_s0>; 2472245431Sdimdef HEXAGON_M2_mmpyh_rs1: 2473234285Sdim di_MInst_didi_s1_rnd_sat <"vmpywoh", int_hexagon_M2_mmpyh_rs1>; 2474245431Sdimdef HEXAGON_M2_mmpyh_s1: 2475234285Sdim di_MInst_didi_s1_sat <"vmpywoh", int_hexagon_M2_mmpyh_s1>; 2476245431Sdimdef HEXAGON_M2_mmpyh_rs0: 2477234285Sdim di_MInst_didi_rnd_sat <"vmpywoh", int_hexagon_M2_mmpyh_rs0>; 2478245431Sdimdef HEXAGON_M2_mmpyh_s0: 2479234285Sdim di_MInst_didi_sat <"vmpywoh", int_hexagon_M2_mmpyh_s0>; 2480245431Sdimdef HEXAGON_M2_mmacls_rs1: 2481234285Sdim di_MInst_dididi_acc_s1_rnd_sat <"vmpyweh", int_hexagon_M2_mmacls_rs1>; 2482245431Sdimdef HEXAGON_M2_mmacls_s1: 2483234285Sdim di_MInst_dididi_acc_s1_sat <"vmpyweh", int_hexagon_M2_mmacls_s1>; 2484245431Sdimdef HEXAGON_M2_mmacls_rs0: 2485234285Sdim di_MInst_dididi_acc_rnd_sat <"vmpyweh", int_hexagon_M2_mmacls_rs0>; 2486245431Sdimdef HEXAGON_M2_mmacls_s0: 2487234285Sdim di_MInst_dididi_acc_sat <"vmpyweh", int_hexagon_M2_mmacls_s0>; 2488245431Sdimdef HEXAGON_M2_mmachs_rs1: 2489234285Sdim di_MInst_dididi_acc_s1_rnd_sat <"vmpywoh", int_hexagon_M2_mmachs_rs1>; 2490245431Sdimdef HEXAGON_M2_mmachs_s1: 2491234285Sdim di_MInst_dididi_acc_s1_sat <"vmpywoh", int_hexagon_M2_mmachs_s1>; 2492245431Sdimdef HEXAGON_M2_mmachs_rs0: 2493234285Sdim di_MInst_dididi_acc_rnd_sat <"vmpywoh", int_hexagon_M2_mmachs_rs0>; 2494245431Sdimdef HEXAGON_M2_mmachs_s0: 2495234285Sdim di_MInst_dididi_acc_sat <"vmpywoh", int_hexagon_M2_mmachs_s0>; 2496234285Sdim 2497234285Sdim// MTYPE / MPYH / Multiply word by unsigned half (32x16). 2498234285Sdim//Rdd[+]=vmpywouh(Rss,Rtt)[:<<1][:rnd][:sat] 2499234285Sdim//Rdd[+]=vmpyweuh(Rss,Rtt)[:<<1][:rnd][:sat] 2500245431Sdimdef HEXAGON_M2_mmpyul_rs1: 2501234285Sdim di_MInst_didi_s1_rnd_sat <"vmpyweuh", int_hexagon_M2_mmpyul_rs1>; 2502245431Sdimdef HEXAGON_M2_mmpyul_s1: 2503234285Sdim di_MInst_didi_s1_sat <"vmpyweuh", int_hexagon_M2_mmpyul_s1>; 2504245431Sdimdef HEXAGON_M2_mmpyul_rs0: 2505234285Sdim di_MInst_didi_rnd_sat <"vmpyweuh", int_hexagon_M2_mmpyul_rs0>; 2506245431Sdimdef HEXAGON_M2_mmpyul_s0: 2507234285Sdim di_MInst_didi_sat <"vmpyweuh", int_hexagon_M2_mmpyul_s0>; 2508245431Sdimdef HEXAGON_M2_mmpyuh_rs1: 2509234285Sdim di_MInst_didi_s1_rnd_sat <"vmpywouh", int_hexagon_M2_mmpyuh_rs1>; 2510245431Sdimdef HEXAGON_M2_mmpyuh_s1: 2511234285Sdim di_MInst_didi_s1_sat <"vmpywouh", int_hexagon_M2_mmpyuh_s1>; 2512245431Sdimdef HEXAGON_M2_mmpyuh_rs0: 2513234285Sdim di_MInst_didi_rnd_sat <"vmpywouh", int_hexagon_M2_mmpyuh_rs0>; 2514245431Sdimdef HEXAGON_M2_mmpyuh_s0: 2515234285Sdim di_MInst_didi_sat <"vmpywouh", int_hexagon_M2_mmpyuh_s0>; 2516245431Sdimdef HEXAGON_M2_mmaculs_rs1: 2517234285Sdim di_MInst_dididi_acc_s1_rnd_sat <"vmpyweuh", int_hexagon_M2_mmaculs_rs1>; 2518245431Sdimdef HEXAGON_M2_mmaculs_s1: 2519234285Sdim di_MInst_dididi_acc_s1_sat <"vmpyweuh", int_hexagon_M2_mmaculs_s1>; 2520245431Sdimdef HEXAGON_M2_mmaculs_rs0: 2521234285Sdim di_MInst_dididi_acc_rnd_sat <"vmpyweuh", int_hexagon_M2_mmaculs_rs0>; 2522245431Sdimdef HEXAGON_M2_mmaculs_s0: 2523234285Sdim di_MInst_dididi_acc_sat <"vmpyweuh", int_hexagon_M2_mmaculs_s0>; 2524245431Sdimdef HEXAGON_M2_mmacuhs_rs1: 2525234285Sdim di_MInst_dididi_acc_s1_rnd_sat <"vmpywouh", int_hexagon_M2_mmacuhs_rs1>; 2526245431Sdimdef HEXAGON_M2_mmacuhs_s1: 2527234285Sdim di_MInst_dididi_acc_s1_sat <"vmpywouh", int_hexagon_M2_mmacuhs_s1>; 2528245431Sdimdef HEXAGON_M2_mmacuhs_rs0: 2529234285Sdim di_MInst_dididi_acc_rnd_sat <"vmpywouh", int_hexagon_M2_mmacuhs_rs0>; 2530245431Sdimdef HEXAGON_M2_mmacuhs_s0: 2531234285Sdim di_MInst_dididi_acc_sat <"vmpywouh", int_hexagon_M2_mmacuhs_s0>; 2532234285Sdim 2533234285Sdim// MTYPE / MPYH / Multiply and use upper result. 2534245431Sdimdef HEXAGON_M2_hmmpyh_rs1: 2535234285Sdim si_MInst_sisi_h_s1_rnd_sat <"mpy", int_hexagon_M2_hmmpyh_rs1>; 2536245431Sdimdef HEXAGON_M2_hmmpyl_rs1: 2537234285Sdim si_MInst_sisi_l_s1_rnd_sat <"mpy", int_hexagon_M2_hmmpyl_rs1>; 2538245431Sdimdef HEXAGON_M2_mpy_up: 2539234285Sdim si_MInst_sisi <"mpy", int_hexagon_M2_mpy_up>; 2540245431Sdimdef HEXAGON_M2_dpmpyss_rnd_s0: 2541234285Sdim si_MInst_sisi_rnd <"mpy", int_hexagon_M2_dpmpyss_rnd_s0>; 2542245431Sdimdef HEXAGON_M2_mpyu_up: 2543234285Sdim si_MInst_sisi <"mpyu", int_hexagon_M2_mpyu_up>; 2544234285Sdim 2545234285Sdim// MTYPE / MPYH / Multiply and use full result. 2546245431Sdimdef HEXAGON_M2_dpmpyuu_s0: 2547234285Sdim di_MInst_sisi <"mpyu", int_hexagon_M2_dpmpyuu_s0>; 2548245431Sdimdef HEXAGON_M2_dpmpyuu_acc_s0: 2549234285Sdim di_MInst_disisi_acc <"mpyu", int_hexagon_M2_dpmpyuu_acc_s0>; 2550245431Sdimdef HEXAGON_M2_dpmpyuu_nac_s0: 2551234285Sdim di_MInst_disisi_nac <"mpyu", int_hexagon_M2_dpmpyuu_nac_s0>; 2552245431Sdimdef HEXAGON_M2_dpmpyss_s0: 2553234285Sdim di_MInst_sisi <"mpy", int_hexagon_M2_dpmpyss_s0>; 2554245431Sdimdef HEXAGON_M2_dpmpyss_acc_s0: 2555234285Sdim di_MInst_disisi_acc <"mpy", int_hexagon_M2_dpmpyss_acc_s0>; 2556245431Sdimdef HEXAGON_M2_dpmpyss_nac_s0: 2557234285Sdim di_MInst_disisi_nac <"mpy", int_hexagon_M2_dpmpyss_nac_s0>; 2558234285Sdim 2559234285Sdim 2560234285Sdim/******************************************************************** 2561234285Sdim* MTYPE/MPYS * 2562234285Sdim*********************************************************************/ 2563234285Sdim 2564234285Sdim// MTYPE / MPYS / Scalar 16x16 multiply signed. 2565234285Sdim//Rd=mpy(Rs.[H|L],Rt.[H|L:<<0|:<<1]| 2566234285Sdim// [:<<0[:rnd|:sat|:rnd:sat]|:<<1[:rnd|:sat|:rnd:sat]]] 2567245431Sdimdef HEXAGON_M2_mpy_hh_s0: 2568234285Sdim si_MInst_sisi_hh <"mpy", int_hexagon_M2_mpy_hh_s0>; 2569245431Sdimdef HEXAGON_M2_mpy_hh_s1: 2570234285Sdim si_MInst_sisi_hh_s1 <"mpy", int_hexagon_M2_mpy_hh_s1>; 2571245431Sdimdef HEXAGON_M2_mpy_rnd_hh_s1: 2572234285Sdim si_MInst_sisi_rnd_hh_s1 <"mpy", int_hexagon_M2_mpy_rnd_hh_s1>; 2573245431Sdimdef HEXAGON_M2_mpy_sat_rnd_hh_s1: 2574234285Sdim si_MInst_sisi_sat_rnd_hh_s1 <"mpy", int_hexagon_M2_mpy_sat_rnd_hh_s1>; 2575245431Sdimdef HEXAGON_M2_mpy_sat_hh_s1: 2576234285Sdim si_MInst_sisi_sat_hh_s1 <"mpy", int_hexagon_M2_mpy_sat_hh_s1>; 2577245431Sdimdef HEXAGON_M2_mpy_rnd_hh_s0: 2578234285Sdim si_MInst_sisi_rnd_hh <"mpy", int_hexagon_M2_mpy_rnd_hh_s0>; 2579245431Sdimdef HEXAGON_M2_mpy_sat_rnd_hh_s0: 2580234285Sdim si_MInst_sisi_sat_rnd_hh <"mpy", int_hexagon_M2_mpy_sat_rnd_hh_s0>; 2581245431Sdimdef HEXAGON_M2_mpy_sat_hh_s0: 2582234285Sdim si_MInst_sisi_sat_hh <"mpy", int_hexagon_M2_mpy_sat_hh_s0>; 2583234285Sdim 2584245431Sdimdef HEXAGON_M2_mpy_hl_s0: 2585234285Sdim si_MInst_sisi_hl <"mpy", int_hexagon_M2_mpy_hl_s0>; 2586245431Sdimdef HEXAGON_M2_mpy_hl_s1: 2587234285Sdim si_MInst_sisi_hl_s1 <"mpy", int_hexagon_M2_mpy_hl_s1>; 2588245431Sdimdef HEXAGON_M2_mpy_rnd_hl_s1: 2589234285Sdim si_MInst_sisi_rnd_hl_s1 <"mpy", int_hexagon_M2_mpy_rnd_hl_s1>; 2590245431Sdimdef HEXAGON_M2_mpy_sat_rnd_hl_s1: 2591234285Sdim si_MInst_sisi_sat_rnd_hl_s1 <"mpy", int_hexagon_M2_mpy_sat_rnd_hl_s1>; 2592245431Sdimdef HEXAGON_M2_mpy_sat_hl_s1: 2593234285Sdim si_MInst_sisi_sat_hl_s1 <"mpy", int_hexagon_M2_mpy_sat_hl_s1>; 2594245431Sdimdef HEXAGON_M2_mpy_rnd_hl_s0: 2595234285Sdim si_MInst_sisi_rnd_hl <"mpy", int_hexagon_M2_mpy_rnd_hl_s0>; 2596245431Sdimdef HEXAGON_M2_mpy_sat_rnd_hl_s0: 2597234285Sdim si_MInst_sisi_sat_rnd_hl <"mpy", int_hexagon_M2_mpy_sat_rnd_hl_s0>; 2598245431Sdimdef HEXAGON_M2_mpy_sat_hl_s0: 2599234285Sdim si_MInst_sisi_sat_hl <"mpy", int_hexagon_M2_mpy_sat_hl_s0>; 2600234285Sdim 2601245431Sdimdef HEXAGON_M2_mpy_lh_s0: 2602234285Sdim si_MInst_sisi_lh <"mpy", int_hexagon_M2_mpy_lh_s0>; 2603245431Sdimdef HEXAGON_M2_mpy_lh_s1: 2604234285Sdim si_MInst_sisi_lh_s1 <"mpy", int_hexagon_M2_mpy_lh_s1>; 2605245431Sdimdef HEXAGON_M2_mpy_rnd_lh_s1: 2606234285Sdim si_MInst_sisi_rnd_lh_s1 <"mpy", int_hexagon_M2_mpy_rnd_lh_s1>; 2607245431Sdimdef HEXAGON_M2_mpy_sat_rnd_lh_s1: 2608234285Sdim si_MInst_sisi_sat_rnd_lh_s1 <"mpy", int_hexagon_M2_mpy_sat_rnd_lh_s1>; 2609245431Sdimdef HEXAGON_M2_mpy_sat_lh_s1: 2610234285Sdim si_MInst_sisi_sat_lh_s1 <"mpy", int_hexagon_M2_mpy_sat_lh_s1>; 2611245431Sdimdef HEXAGON_M2_mpy_rnd_lh_s0: 2612234285Sdim si_MInst_sisi_rnd_lh <"mpy", int_hexagon_M2_mpy_rnd_lh_s0>; 2613245431Sdimdef HEXAGON_M2_mpy_sat_rnd_lh_s0: 2614234285Sdim si_MInst_sisi_sat_rnd_lh <"mpy", int_hexagon_M2_mpy_sat_rnd_lh_s0>; 2615245431Sdimdef HEXAGON_M2_mpy_sat_lh_s0: 2616234285Sdim si_MInst_sisi_sat_lh <"mpy", int_hexagon_M2_mpy_sat_lh_s0>; 2617234285Sdim 2618245431Sdimdef HEXAGON_M2_mpy_ll_s0: 2619234285Sdim si_MInst_sisi_ll <"mpy", int_hexagon_M2_mpy_ll_s0>; 2620245431Sdimdef HEXAGON_M2_mpy_ll_s1: 2621234285Sdim si_MInst_sisi_ll_s1 <"mpy", int_hexagon_M2_mpy_ll_s1>; 2622245431Sdimdef HEXAGON_M2_mpy_rnd_ll_s1: 2623234285Sdim si_MInst_sisi_rnd_ll_s1 <"mpy", int_hexagon_M2_mpy_rnd_ll_s1>; 2624245431Sdimdef HEXAGON_M2_mpy_sat_rnd_ll_s1: 2625234285Sdim si_MInst_sisi_sat_rnd_ll_s1 <"mpy", int_hexagon_M2_mpy_sat_rnd_ll_s1>; 2626245431Sdimdef HEXAGON_M2_mpy_sat_ll_s1: 2627234285Sdim si_MInst_sisi_sat_ll_s1 <"mpy", int_hexagon_M2_mpy_sat_ll_s1>; 2628245431Sdimdef HEXAGON_M2_mpy_rnd_ll_s0: 2629234285Sdim si_MInst_sisi_rnd_ll <"mpy", int_hexagon_M2_mpy_rnd_ll_s0>; 2630245431Sdimdef HEXAGON_M2_mpy_sat_rnd_ll_s0: 2631234285Sdim si_MInst_sisi_sat_rnd_ll <"mpy", int_hexagon_M2_mpy_sat_rnd_ll_s0>; 2632245431Sdimdef HEXAGON_M2_mpy_sat_ll_s0: 2633234285Sdim si_MInst_sisi_sat_ll <"mpy", int_hexagon_M2_mpy_sat_ll_s0>; 2634234285Sdim 2635234285Sdim//Rdd=mpy(Rs.[H|L],Rt.[H|L])[[:<<0|:<<1]|[:<<0:rnd|:<<1:rnd]] 2636245431Sdimdef HEXAGON_M2_mpyd_hh_s0: 2637234285Sdim di_MInst_sisi_hh <"mpy", int_hexagon_M2_mpyd_hh_s0>; 2638245431Sdimdef HEXAGON_M2_mpyd_hh_s1: 2639234285Sdim di_MInst_sisi_hh_s1 <"mpy", int_hexagon_M2_mpyd_hh_s1>; 2640245431Sdimdef HEXAGON_M2_mpyd_rnd_hh_s1: 2641234285Sdim di_MInst_sisi_rnd_hh_s1 <"mpy", int_hexagon_M2_mpyd_rnd_hh_s1>; 2642245431Sdimdef HEXAGON_M2_mpyd_rnd_hh_s0: 2643234285Sdim di_MInst_sisi_rnd_hh <"mpy", int_hexagon_M2_mpyd_rnd_hh_s0>; 2644234285Sdim 2645245431Sdimdef HEXAGON_M2_mpyd_hl_s0: 2646234285Sdim di_MInst_sisi_hl <"mpy", int_hexagon_M2_mpyd_hl_s0>; 2647245431Sdimdef HEXAGON_M2_mpyd_hl_s1: 2648234285Sdim di_MInst_sisi_hl_s1 <"mpy", int_hexagon_M2_mpyd_hl_s1>; 2649245431Sdimdef HEXAGON_M2_mpyd_rnd_hl_s1: 2650234285Sdim di_MInst_sisi_rnd_hl_s1 <"mpy", int_hexagon_M2_mpyd_rnd_hl_s1>; 2651245431Sdimdef HEXAGON_M2_mpyd_rnd_hl_s0: 2652234285Sdim di_MInst_sisi_rnd_hl <"mpy", int_hexagon_M2_mpyd_rnd_hl_s0>; 2653234285Sdim 2654245431Sdimdef HEXAGON_M2_mpyd_lh_s0: 2655234285Sdim di_MInst_sisi_lh <"mpy", int_hexagon_M2_mpyd_lh_s0>; 2656245431Sdimdef HEXAGON_M2_mpyd_lh_s1: 2657234285Sdim di_MInst_sisi_lh_s1 <"mpy", int_hexagon_M2_mpyd_lh_s1>; 2658245431Sdimdef HEXAGON_M2_mpyd_rnd_lh_s1: 2659234285Sdim di_MInst_sisi_rnd_lh_s1 <"mpy", int_hexagon_M2_mpyd_rnd_lh_s1>; 2660245431Sdimdef HEXAGON_M2_mpyd_rnd_lh_s0: 2661234285Sdim di_MInst_sisi_rnd_lh <"mpy", int_hexagon_M2_mpyd_rnd_lh_s0>; 2662234285Sdim 2663245431Sdimdef HEXAGON_M2_mpyd_ll_s0: 2664234285Sdim di_MInst_sisi_ll <"mpy", int_hexagon_M2_mpyd_ll_s0>; 2665245431Sdimdef HEXAGON_M2_mpyd_ll_s1: 2666234285Sdim di_MInst_sisi_ll_s1 <"mpy", int_hexagon_M2_mpyd_ll_s1>; 2667245431Sdimdef HEXAGON_M2_mpyd_rnd_ll_s1: 2668234285Sdim di_MInst_sisi_rnd_ll_s1 <"mpy", int_hexagon_M2_mpyd_rnd_ll_s1>; 2669245431Sdimdef HEXAGON_M2_mpyd_rnd_ll_s0: 2670234285Sdim di_MInst_sisi_rnd_ll <"mpy", int_hexagon_M2_mpyd_rnd_ll_s0>; 2671234285Sdim 2672234285Sdim//Rx+=mpy(Rs.[H|L],Rt.[H|L])[[[:<<0|:<<1]|[:<<0:sat|:<<1:sat]] 2673245431Sdimdef HEXAGON_M2_mpy_acc_hh_s0: 2674234285Sdim si_MInst_sisisi_acc_hh <"mpy", int_hexagon_M2_mpy_acc_hh_s0>; 2675245431Sdimdef HEXAGON_M2_mpy_acc_hh_s1: 2676234285Sdim si_MInst_sisisi_acc_hh_s1 <"mpy", int_hexagon_M2_mpy_acc_hh_s1>; 2677245431Sdimdef HEXAGON_M2_mpy_acc_sat_hh_s1: 2678234285Sdim si_MInst_sisisi_acc_sat_hh_s1 <"mpy", int_hexagon_M2_mpy_acc_sat_hh_s1>; 2679245431Sdimdef HEXAGON_M2_mpy_acc_sat_hh_s0: 2680234285Sdim si_MInst_sisisi_acc_sat_hh <"mpy", int_hexagon_M2_mpy_acc_sat_hh_s0>; 2681234285Sdim 2682245431Sdimdef HEXAGON_M2_mpy_acc_hl_s0: 2683234285Sdim si_MInst_sisisi_acc_hl <"mpy", int_hexagon_M2_mpy_acc_hl_s0>; 2684245431Sdimdef HEXAGON_M2_mpy_acc_hl_s1: 2685234285Sdim si_MInst_sisisi_acc_hl_s1 <"mpy", int_hexagon_M2_mpy_acc_hl_s1>; 2686245431Sdimdef HEXAGON_M2_mpy_acc_sat_hl_s1: 2687234285Sdim si_MInst_sisisi_acc_sat_hl_s1 <"mpy", int_hexagon_M2_mpy_acc_sat_hl_s1>; 2688245431Sdimdef HEXAGON_M2_mpy_acc_sat_hl_s0: 2689234285Sdim si_MInst_sisisi_acc_sat_hl <"mpy", int_hexagon_M2_mpy_acc_sat_hl_s0>; 2690234285Sdim 2691245431Sdimdef HEXAGON_M2_mpy_acc_lh_s0: 2692234285Sdim si_MInst_sisisi_acc_lh <"mpy", int_hexagon_M2_mpy_acc_lh_s0>; 2693245431Sdimdef HEXAGON_M2_mpy_acc_lh_s1: 2694234285Sdim si_MInst_sisisi_acc_lh_s1 <"mpy", int_hexagon_M2_mpy_acc_lh_s1>; 2695245431Sdimdef HEXAGON_M2_mpy_acc_sat_lh_s1: 2696234285Sdim si_MInst_sisisi_acc_sat_lh_s1 <"mpy", int_hexagon_M2_mpy_acc_sat_lh_s1>; 2697245431Sdimdef HEXAGON_M2_mpy_acc_sat_lh_s0: 2698234285Sdim si_MInst_sisisi_acc_sat_lh <"mpy", int_hexagon_M2_mpy_acc_sat_lh_s0>; 2699234285Sdim 2700245431Sdimdef HEXAGON_M2_mpy_acc_ll_s0: 2701234285Sdim si_MInst_sisisi_acc_ll <"mpy", int_hexagon_M2_mpy_acc_ll_s0>; 2702245431Sdimdef HEXAGON_M2_mpy_acc_ll_s1: 2703234285Sdim si_MInst_sisisi_acc_ll_s1 <"mpy", int_hexagon_M2_mpy_acc_ll_s1>; 2704245431Sdimdef HEXAGON_M2_mpy_acc_sat_ll_s1: 2705234285Sdim si_MInst_sisisi_acc_sat_ll_s1 <"mpy", int_hexagon_M2_mpy_acc_sat_ll_s1>; 2706245431Sdimdef HEXAGON_M2_mpy_acc_sat_ll_s0: 2707234285Sdim si_MInst_sisisi_acc_sat_ll <"mpy", int_hexagon_M2_mpy_acc_sat_ll_s0>; 2708234285Sdim 2709234285Sdim//Rx-=mpy(Rs.[H|L],Rt.[H|L])[[[:<<0|:<<1]|[:<<0:sat|:<<1:sat]] 2710245431Sdimdef HEXAGON_M2_mpy_nac_hh_s0: 2711234285Sdim si_MInst_sisisi_nac_hh <"mpy", int_hexagon_M2_mpy_nac_hh_s0>; 2712245431Sdimdef HEXAGON_M2_mpy_nac_hh_s1: 2713234285Sdim si_MInst_sisisi_nac_hh_s1 <"mpy", int_hexagon_M2_mpy_nac_hh_s1>; 2714245431Sdimdef HEXAGON_M2_mpy_nac_sat_hh_s1: 2715234285Sdim si_MInst_sisisi_nac_sat_hh_s1 <"mpy", int_hexagon_M2_mpy_nac_sat_hh_s1>; 2716245431Sdimdef HEXAGON_M2_mpy_nac_sat_hh_s0: 2717234285Sdim si_MInst_sisisi_nac_sat_hh <"mpy", int_hexagon_M2_mpy_nac_sat_hh_s0>; 2718234285Sdim 2719245431Sdimdef HEXAGON_M2_mpy_nac_hl_s0: 2720234285Sdim si_MInst_sisisi_nac_hl <"mpy", int_hexagon_M2_mpy_nac_hl_s0>; 2721245431Sdimdef HEXAGON_M2_mpy_nac_hl_s1: 2722234285Sdim si_MInst_sisisi_nac_hl_s1 <"mpy", int_hexagon_M2_mpy_nac_hl_s1>; 2723245431Sdimdef HEXAGON_M2_mpy_nac_sat_hl_s1: 2724234285Sdim si_MInst_sisisi_nac_sat_hl_s1 <"mpy", int_hexagon_M2_mpy_nac_sat_hl_s1>; 2725245431Sdimdef HEXAGON_M2_mpy_nac_sat_hl_s0: 2726234285Sdim si_MInst_sisisi_nac_sat_hl <"mpy", int_hexagon_M2_mpy_nac_sat_hl_s0>; 2727234285Sdim 2728245431Sdimdef HEXAGON_M2_mpy_nac_lh_s0: 2729234285Sdim si_MInst_sisisi_nac_lh <"mpy", int_hexagon_M2_mpy_nac_lh_s0>; 2730245431Sdimdef HEXAGON_M2_mpy_nac_lh_s1: 2731234285Sdim si_MInst_sisisi_nac_lh_s1 <"mpy", int_hexagon_M2_mpy_nac_lh_s1>; 2732245431Sdimdef HEXAGON_M2_mpy_nac_sat_lh_s1: 2733234285Sdim si_MInst_sisisi_nac_sat_lh_s1 <"mpy", int_hexagon_M2_mpy_nac_sat_lh_s1>; 2734245431Sdimdef HEXAGON_M2_mpy_nac_sat_lh_s0: 2735234285Sdim si_MInst_sisisi_nac_sat_lh <"mpy", int_hexagon_M2_mpy_nac_sat_lh_s0>; 2736234285Sdim 2737245431Sdimdef HEXAGON_M2_mpy_nac_ll_s0: 2738234285Sdim si_MInst_sisisi_nac_ll <"mpy", int_hexagon_M2_mpy_nac_ll_s0>; 2739245431Sdimdef HEXAGON_M2_mpy_nac_ll_s1: 2740234285Sdim si_MInst_sisisi_nac_ll_s1 <"mpy", int_hexagon_M2_mpy_nac_ll_s1>; 2741245431Sdimdef HEXAGON_M2_mpy_nac_sat_ll_s1: 2742234285Sdim si_MInst_sisisi_nac_sat_ll_s1 <"mpy", int_hexagon_M2_mpy_nac_sat_ll_s1>; 2743245431Sdimdef HEXAGON_M2_mpy_nac_sat_ll_s0: 2744234285Sdim si_MInst_sisisi_nac_sat_ll <"mpy", int_hexagon_M2_mpy_nac_sat_ll_s0>; 2745234285Sdim 2746234285Sdim//Rx+=mpy(Rs.[H|L],Rt.[H|L:<<0|:<<1] 2747245431Sdimdef HEXAGON_M2_mpyd_acc_hh_s0: 2748234285Sdim di_MInst_disisi_acc_hh <"mpy", int_hexagon_M2_mpyd_acc_hh_s0>; 2749245431Sdimdef HEXAGON_M2_mpyd_acc_hh_s1: 2750234285Sdim di_MInst_disisi_acc_hh_s1 <"mpy", int_hexagon_M2_mpyd_acc_hh_s1>; 2751234285Sdim 2752245431Sdimdef HEXAGON_M2_mpyd_acc_hl_s0: 2753234285Sdim di_MInst_disisi_acc_hl <"mpy", int_hexagon_M2_mpyd_acc_hl_s0>; 2754245431Sdimdef HEXAGON_M2_mpyd_acc_hl_s1: 2755234285Sdim di_MInst_disisi_acc_hl_s1 <"mpy", int_hexagon_M2_mpyd_acc_hl_s1>; 2756234285Sdim 2757245431Sdimdef HEXAGON_M2_mpyd_acc_lh_s0: 2758234285Sdim di_MInst_disisi_acc_lh <"mpy", int_hexagon_M2_mpyd_acc_lh_s0>; 2759245431Sdimdef HEXAGON_M2_mpyd_acc_lh_s1: 2760234285Sdim di_MInst_disisi_acc_lh_s1 <"mpy", int_hexagon_M2_mpyd_acc_lh_s1>; 2761234285Sdim 2762245431Sdimdef HEXAGON_M2_mpyd_acc_ll_s0: 2763234285Sdim di_MInst_disisi_acc_ll <"mpy", int_hexagon_M2_mpyd_acc_ll_s0>; 2764245431Sdimdef HEXAGON_M2_mpyd_acc_ll_s1: 2765234285Sdim di_MInst_disisi_acc_ll_s1 <"mpy", int_hexagon_M2_mpyd_acc_ll_s1>; 2766234285Sdim 2767234285Sdim//Rx-=mpy(Rs.[H|L],Rt.[H|L:<<0|:<<1] 2768245431Sdimdef HEXAGON_M2_mpyd_nac_hh_s0: 2769234285Sdim di_MInst_disisi_nac_hh <"mpy", int_hexagon_M2_mpyd_nac_hh_s0>; 2770245431Sdimdef HEXAGON_M2_mpyd_nac_hh_s1: 2771234285Sdim di_MInst_disisi_nac_hh_s1 <"mpy", int_hexagon_M2_mpyd_nac_hh_s1>; 2772234285Sdim 2773245431Sdimdef HEXAGON_M2_mpyd_nac_hl_s0: 2774234285Sdim di_MInst_disisi_nac_hl <"mpy", int_hexagon_M2_mpyd_nac_hl_s0>; 2775245431Sdimdef HEXAGON_M2_mpyd_nac_hl_s1: 2776234285Sdim di_MInst_disisi_nac_hl_s1 <"mpy", int_hexagon_M2_mpyd_nac_hl_s1>; 2777234285Sdim 2778245431Sdimdef HEXAGON_M2_mpyd_nac_lh_s0: 2779234285Sdim di_MInst_disisi_nac_lh <"mpy", int_hexagon_M2_mpyd_nac_lh_s0>; 2780245431Sdimdef HEXAGON_M2_mpyd_nac_lh_s1: 2781234285Sdim di_MInst_disisi_nac_lh_s1 <"mpy", int_hexagon_M2_mpyd_nac_lh_s1>; 2782234285Sdim 2783245431Sdimdef HEXAGON_M2_mpyd_nac_ll_s0: 2784234285Sdim di_MInst_disisi_nac_ll <"mpy", int_hexagon_M2_mpyd_nac_ll_s0>; 2785245431Sdimdef HEXAGON_M2_mpyd_nac_ll_s1: 2786234285Sdim di_MInst_disisi_nac_ll_s1 <"mpy", int_hexagon_M2_mpyd_nac_ll_s1>; 2787234285Sdim 2788234285Sdim// MTYPE / MPYS / Scalar 16x16 multiply unsigned. 2789234285Sdim//Rd=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2790245431Sdimdef HEXAGON_M2_mpyu_hh_s0: 2791234285Sdim si_MInst_sisi_hh <"mpyu", int_hexagon_M2_mpyu_hh_s0>; 2792245431Sdimdef HEXAGON_M2_mpyu_hh_s1: 2793234285Sdim si_MInst_sisi_hh_s1 <"mpyu", int_hexagon_M2_mpyu_hh_s1>; 2794245431Sdimdef HEXAGON_M2_mpyu_hl_s0: 2795234285Sdim si_MInst_sisi_hl <"mpyu", int_hexagon_M2_mpyu_hl_s0>; 2796245431Sdimdef HEXAGON_M2_mpyu_hl_s1: 2797234285Sdim si_MInst_sisi_hl_s1 <"mpyu", int_hexagon_M2_mpyu_hl_s1>; 2798245431Sdimdef HEXAGON_M2_mpyu_lh_s0: 2799234285Sdim si_MInst_sisi_lh <"mpyu", int_hexagon_M2_mpyu_lh_s0>; 2800245431Sdimdef HEXAGON_M2_mpyu_lh_s1: 2801234285Sdim si_MInst_sisi_lh_s1 <"mpyu", int_hexagon_M2_mpyu_lh_s1>; 2802245431Sdimdef HEXAGON_M2_mpyu_ll_s0: 2803234285Sdim si_MInst_sisi_ll <"mpyu", int_hexagon_M2_mpyu_ll_s0>; 2804245431Sdimdef HEXAGON_M2_mpyu_ll_s1: 2805234285Sdim si_MInst_sisi_ll_s1 <"mpyu", int_hexagon_M2_mpyu_ll_s1>; 2806234285Sdim 2807234285Sdim//Rdd=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2808245431Sdimdef HEXAGON_M2_mpyud_hh_s0: 2809234285Sdim di_MInst_sisi_hh <"mpyu", int_hexagon_M2_mpyud_hh_s0>; 2810245431Sdimdef HEXAGON_M2_mpyud_hh_s1: 2811234285Sdim di_MInst_sisi_hh_s1 <"mpyu", int_hexagon_M2_mpyud_hh_s1>; 2812245431Sdimdef HEXAGON_M2_mpyud_hl_s0: 2813234285Sdim di_MInst_sisi_hl <"mpyu", int_hexagon_M2_mpyud_hl_s0>; 2814245431Sdimdef HEXAGON_M2_mpyud_hl_s1: 2815234285Sdim di_MInst_sisi_hl_s1 <"mpyu", int_hexagon_M2_mpyud_hl_s1>; 2816245431Sdimdef HEXAGON_M2_mpyud_lh_s0: 2817234285Sdim di_MInst_sisi_lh <"mpyu", int_hexagon_M2_mpyud_lh_s0>; 2818245431Sdimdef HEXAGON_M2_mpyud_lh_s1: 2819234285Sdim di_MInst_sisi_lh_s1 <"mpyu", int_hexagon_M2_mpyud_lh_s1>; 2820245431Sdimdef HEXAGON_M2_mpyud_ll_s0: 2821234285Sdim di_MInst_sisi_ll <"mpyu", int_hexagon_M2_mpyud_ll_s0>; 2822245431Sdimdef HEXAGON_M2_mpyud_ll_s1: 2823234285Sdim di_MInst_sisi_ll_s1 <"mpyu", int_hexagon_M2_mpyud_ll_s1>; 2824234285Sdim 2825234285Sdim//Rd+=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2826245431Sdimdef HEXAGON_M2_mpyu_acc_hh_s0: 2827234285Sdim si_MInst_sisisi_acc_hh <"mpyu", int_hexagon_M2_mpyu_acc_hh_s0>; 2828245431Sdimdef HEXAGON_M2_mpyu_acc_hh_s1: 2829234285Sdim si_MInst_sisisi_acc_hh_s1 <"mpyu", int_hexagon_M2_mpyu_acc_hh_s1>; 2830245431Sdimdef HEXAGON_M2_mpyu_acc_hl_s0: 2831234285Sdim si_MInst_sisisi_acc_hl <"mpyu", int_hexagon_M2_mpyu_acc_hl_s0>; 2832245431Sdimdef HEXAGON_M2_mpyu_acc_hl_s1: 2833234285Sdim si_MInst_sisisi_acc_hl_s1 <"mpyu", int_hexagon_M2_mpyu_acc_hl_s1>; 2834245431Sdimdef HEXAGON_M2_mpyu_acc_lh_s0: 2835234285Sdim si_MInst_sisisi_acc_lh <"mpyu", int_hexagon_M2_mpyu_acc_lh_s0>; 2836245431Sdimdef HEXAGON_M2_mpyu_acc_lh_s1: 2837234285Sdim si_MInst_sisisi_acc_lh_s1 <"mpyu", int_hexagon_M2_mpyu_acc_lh_s1>; 2838245431Sdimdef HEXAGON_M2_mpyu_acc_ll_s0: 2839234285Sdim si_MInst_sisisi_acc_ll <"mpyu", int_hexagon_M2_mpyu_acc_ll_s0>; 2840245431Sdimdef HEXAGON_M2_mpyu_acc_ll_s1: 2841234285Sdim si_MInst_sisisi_acc_ll_s1 <"mpyu", int_hexagon_M2_mpyu_acc_ll_s1>; 2842234285Sdim 2843234285Sdim//Rd+=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2844245431Sdimdef HEXAGON_M2_mpyu_nac_hh_s0: 2845234285Sdim si_MInst_sisisi_nac_hh <"mpyu", int_hexagon_M2_mpyu_nac_hh_s0>; 2846245431Sdimdef HEXAGON_M2_mpyu_nac_hh_s1: 2847234285Sdim si_MInst_sisisi_nac_hh_s1 <"mpyu", int_hexagon_M2_mpyu_nac_hh_s1>; 2848245431Sdimdef HEXAGON_M2_mpyu_nac_hl_s0: 2849234285Sdim si_MInst_sisisi_nac_hl <"mpyu", int_hexagon_M2_mpyu_nac_hl_s0>; 2850245431Sdimdef HEXAGON_M2_mpyu_nac_hl_s1: 2851234285Sdim si_MInst_sisisi_nac_hl_s1 <"mpyu", int_hexagon_M2_mpyu_nac_hl_s1>; 2852245431Sdimdef HEXAGON_M2_mpyu_nac_lh_s0: 2853234285Sdim si_MInst_sisisi_nac_lh <"mpyu", int_hexagon_M2_mpyu_nac_lh_s0>; 2854245431Sdimdef HEXAGON_M2_mpyu_nac_lh_s1: 2855234285Sdim si_MInst_sisisi_nac_lh_s1 <"mpyu", int_hexagon_M2_mpyu_nac_lh_s1>; 2856245431Sdimdef HEXAGON_M2_mpyu_nac_ll_s0: 2857234285Sdim si_MInst_sisisi_nac_ll <"mpyu", int_hexagon_M2_mpyu_nac_ll_s0>; 2858245431Sdimdef HEXAGON_M2_mpyu_nac_ll_s1: 2859234285Sdim si_MInst_sisisi_nac_ll_s1 <"mpyu", int_hexagon_M2_mpyu_nac_ll_s1>; 2860234285Sdim 2861234285Sdim//Rdd+=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2862245431Sdimdef HEXAGON_M2_mpyud_acc_hh_s0: 2863234285Sdim di_MInst_disisi_acc_hh <"mpyu", int_hexagon_M2_mpyud_acc_hh_s0>; 2864245431Sdimdef HEXAGON_M2_mpyud_acc_hh_s1: 2865234285Sdim di_MInst_disisi_acc_hh_s1 <"mpyu", int_hexagon_M2_mpyud_acc_hh_s1>; 2866245431Sdimdef HEXAGON_M2_mpyud_acc_hl_s0: 2867234285Sdim di_MInst_disisi_acc_hl <"mpyu", int_hexagon_M2_mpyud_acc_hl_s0>; 2868245431Sdimdef HEXAGON_M2_mpyud_acc_hl_s1: 2869234285Sdim di_MInst_disisi_acc_hl_s1 <"mpyu", int_hexagon_M2_mpyud_acc_hl_s1>; 2870245431Sdimdef HEXAGON_M2_mpyud_acc_lh_s0: 2871234285Sdim di_MInst_disisi_acc_lh <"mpyu", int_hexagon_M2_mpyud_acc_lh_s0>; 2872245431Sdimdef HEXAGON_M2_mpyud_acc_lh_s1: 2873234285Sdim di_MInst_disisi_acc_lh_s1 <"mpyu", int_hexagon_M2_mpyud_acc_lh_s1>; 2874245431Sdimdef HEXAGON_M2_mpyud_acc_ll_s0: 2875234285Sdim di_MInst_disisi_acc_ll <"mpyu", int_hexagon_M2_mpyud_acc_ll_s0>; 2876245431Sdimdef HEXAGON_M2_mpyud_acc_ll_s1: 2877234285Sdim di_MInst_disisi_acc_ll_s1 <"mpyu", int_hexagon_M2_mpyud_acc_ll_s1>; 2878234285Sdim 2879234285Sdim//Rdd-=mpyu(Rs.[H|L],Rt.[H|L])[:<<0|:<<1] 2880245431Sdimdef HEXAGON_M2_mpyud_nac_hh_s0: 2881234285Sdim di_MInst_disisi_nac_hh <"mpyu", int_hexagon_M2_mpyud_nac_hh_s0>; 2882245431Sdimdef HEXAGON_M2_mpyud_nac_hh_s1: 2883234285Sdim di_MInst_disisi_nac_hh_s1 <"mpyu", int_hexagon_M2_mpyud_nac_hh_s1>; 2884245431Sdimdef HEXAGON_M2_mpyud_nac_hl_s0: 2885234285Sdim di_MInst_disisi_nac_hl <"mpyu", int_hexagon_M2_mpyud_nac_hl_s0>; 2886245431Sdimdef HEXAGON_M2_mpyud_nac_hl_s1: 2887234285Sdim di_MInst_disisi_nac_hl_s1 <"mpyu", int_hexagon_M2_mpyud_nac_hl_s1>; 2888245431Sdimdef HEXAGON_M2_mpyud_nac_lh_s0: 2889234285Sdim di_MInst_disisi_nac_lh <"mpyu", int_hexagon_M2_mpyud_nac_lh_s0>; 2890245431Sdimdef HEXAGON_M2_mpyud_nac_lh_s1: 2891234285Sdim di_MInst_disisi_nac_lh_s1 <"mpyu", int_hexagon_M2_mpyud_nac_lh_s1>; 2892245431Sdimdef HEXAGON_M2_mpyud_nac_ll_s0: 2893234285Sdim di_MInst_disisi_nac_ll <"mpyu", int_hexagon_M2_mpyud_nac_ll_s0>; 2894245431Sdimdef HEXAGON_M2_mpyud_nac_ll_s1: 2895234285Sdim di_MInst_disisi_nac_ll_s1 <"mpyu", int_hexagon_M2_mpyud_nac_ll_s1>; 2896234285Sdim 2897234285Sdim 2898234285Sdim/******************************************************************** 2899234285Sdim* MTYPE/VB * 2900234285Sdim*********************************************************************/ 2901234285Sdim 2902234285Sdim// MTYPE / VB / Vector reduce add unsigned bytes. 2903245431Sdimdef HEXAGON_A2_vraddub: 2904234285Sdim di_MInst_didi <"vraddub", int_hexagon_A2_vraddub>; 2905245431Sdimdef HEXAGON_A2_vraddub_acc: 2906234285Sdim di_MInst_dididi_acc <"vraddub", int_hexagon_A2_vraddub_acc>; 2907234285Sdim 2908234285Sdim// MTYPE / VB / Vector sum of absolute differences unsigned bytes. 2909245431Sdimdef HEXAGON_A2_vrsadub: 2910234285Sdim di_MInst_didi <"vrsadub", int_hexagon_A2_vrsadub>; 2911245431Sdimdef HEXAGON_A2_vrsadub_acc: 2912234285Sdim di_MInst_dididi_acc <"vrsadub", int_hexagon_A2_vrsadub_acc>; 2913234285Sdim 2914234285Sdim/******************************************************************** 2915234285Sdim* MTYPE/VH * 2916234285Sdim*********************************************************************/ 2917234285Sdim 2918234285Sdim// MTYPE / VH / Vector dual multiply. 2919245431Sdimdef HEXAGON_M2_vdmpys_s1: 2920234285Sdim di_MInst_didi_s1_sat <"vdmpy", int_hexagon_M2_vdmpys_s1>; 2921245431Sdimdef HEXAGON_M2_vdmpys_s0: 2922234285Sdim di_MInst_didi_sat <"vdmpy", int_hexagon_M2_vdmpys_s0>; 2923245431Sdimdef HEXAGON_M2_vdmacs_s1: 2924234285Sdim di_MInst_dididi_acc_s1_sat <"vdmpy", int_hexagon_M2_vdmacs_s1>; 2925245431Sdimdef HEXAGON_M2_vdmacs_s0: 2926234285Sdim di_MInst_dididi_acc_sat <"vdmpy", int_hexagon_M2_vdmacs_s0>; 2927234285Sdim 2928234285Sdim// MTYPE / VH / Vector dual multiply with round and pack. 2929245431Sdimdef HEXAGON_M2_vdmpyrs_s0: 2930234285Sdim si_MInst_didi_rnd_sat <"vdmpy", int_hexagon_M2_vdmpyrs_s0>; 2931245431Sdimdef HEXAGON_M2_vdmpyrs_s1: 2932234285Sdim si_MInst_didi_s1_rnd_sat <"vdmpy", int_hexagon_M2_vdmpyrs_s1>; 2933234285Sdim 2934234285Sdim// MTYPE / VH / Vector multiply even halfwords. 2935245431Sdimdef HEXAGON_M2_vmpy2es_s1: 2936234285Sdim di_MInst_didi_s1_sat <"vmpyeh", int_hexagon_M2_vmpy2es_s1>; 2937245431Sdimdef HEXAGON_M2_vmpy2es_s0: 2938234285Sdim di_MInst_didi_sat <"vmpyeh", int_hexagon_M2_vmpy2es_s0>; 2939245431Sdimdef HEXAGON_M2_vmac2es: 2940234285Sdim di_MInst_dididi_acc <"vmpyeh", int_hexagon_M2_vmac2es>; 2941245431Sdimdef HEXAGON_M2_vmac2es_s1: 2942234285Sdim di_MInst_dididi_acc_s1_sat <"vmpyeh", int_hexagon_M2_vmac2es_s1>; 2943245431Sdimdef HEXAGON_M2_vmac2es_s0: 2944234285Sdim di_MInst_dididi_acc_sat <"vmpyeh", int_hexagon_M2_vmac2es_s0>; 2945234285Sdim 2946234285Sdim// MTYPE / VH / Vector multiply halfwords. 2947245431Sdimdef HEXAGON_M2_vmpy2s_s0: 2948234285Sdim di_MInst_sisi_sat <"vmpyh", int_hexagon_M2_vmpy2s_s0>; 2949245431Sdimdef HEXAGON_M2_vmpy2s_s1: 2950234285Sdim di_MInst_sisi_s1_sat <"vmpyh", int_hexagon_M2_vmpy2s_s1>; 2951245431Sdimdef HEXAGON_M2_vmac2: 2952234285Sdim di_MInst_disisi_acc <"vmpyh", int_hexagon_M2_vmac2>; 2953245431Sdimdef HEXAGON_M2_vmac2s_s0: 2954234285Sdim di_MInst_disisi_acc_sat <"vmpyh", int_hexagon_M2_vmac2s_s0>; 2955245431Sdimdef HEXAGON_M2_vmac2s_s1: 2956234285Sdim di_MInst_disisi_acc_s1_sat <"vmpyh", int_hexagon_M2_vmac2s_s1>; 2957234285Sdim 2958234285Sdim// MTYPE / VH / Vector multiply halfwords with round and pack. 2959245431Sdimdef HEXAGON_M2_vmpy2s_s0pack: 2960234285Sdim si_MInst_sisi_rnd_sat <"vmpyh", int_hexagon_M2_vmpy2s_s0pack>; 2961245431Sdimdef HEXAGON_M2_vmpy2s_s1pack: 2962234285Sdim si_MInst_sisi_s1_rnd_sat <"vmpyh", int_hexagon_M2_vmpy2s_s1pack>; 2963234285Sdim 2964234285Sdim// MTYPE / VH / Vector reduce multiply halfwords. 2965234285Sdim// Rxx32+=vrmpyh(Rss32,Rtt32) 2966245431Sdimdef HEXAGON_M2_vrmpy_s0: 2967234285Sdim di_MInst_didi <"vrmpyh", int_hexagon_M2_vrmpy_s0>; 2968245431Sdimdef HEXAGON_M2_vrmac_s0: 2969234285Sdim di_MInst_dididi_acc <"vrmpyh", int_hexagon_M2_vrmac_s0>; 2970234285Sdim 2971234285Sdim 2972234285Sdim/******************************************************************** 2973234285Sdim* STYPE/ALU * 2974234285Sdim*********************************************************************/ 2975234285Sdim 2976234285Sdim// STYPE / ALU / Absolute value. 2977245431Sdimdef HEXAGON_A2_abs: 2978234285Sdim si_SInst_si <"abs", int_hexagon_A2_abs>; 2979245431Sdimdef HEXAGON_A2_absp: 2980234285Sdim di_SInst_di <"abs", int_hexagon_A2_absp>; 2981245431Sdimdef HEXAGON_A2_abssat: 2982234285Sdim si_SInst_si_sat <"abs", int_hexagon_A2_abssat>; 2983234285Sdim 2984234285Sdim// STYPE / ALU / Negate. 2985245431Sdimdef HEXAGON_A2_negp: 2986234285Sdim di_SInst_di <"neg", int_hexagon_A2_negp>; 2987245431Sdimdef HEXAGON_A2_negsat: 2988234285Sdim si_SInst_si_sat <"neg", int_hexagon_A2_negsat>; 2989234285Sdim 2990234285Sdim// STYPE / ALU / Logical Not. 2991245431Sdimdef HEXAGON_A2_notp: 2992234285Sdim di_SInst_di <"not", int_hexagon_A2_notp>; 2993234285Sdim 2994234285Sdim// STYPE / ALU / Sign extend word to doubleword. 2995245431Sdimdef HEXAGON_A2_sxtw: 2996234285Sdim di_SInst_si <"sxtw", int_hexagon_A2_sxtw>; 2997234285Sdim 2998234285Sdim 2999234285Sdim/******************************************************************** 3000234285Sdim* STYPE/BIT * 3001234285Sdim*********************************************************************/ 3002234285Sdim 3003234285Sdim// STYPE / BIT / Count leading. 3004245431Sdimdef HEXAGON_S2_cl0: 3005234285Sdim si_SInst_si <"cl0", int_hexagon_S2_cl0>; 3006245431Sdimdef HEXAGON_S2_cl0p: 3007234285Sdim si_SInst_di <"cl0", int_hexagon_S2_cl0p>; 3008245431Sdimdef HEXAGON_S2_cl1: 3009234285Sdim si_SInst_si <"cl1", int_hexagon_S2_cl1>; 3010245431Sdimdef HEXAGON_S2_cl1p: 3011234285Sdim si_SInst_di <"cl1", int_hexagon_S2_cl1p>; 3012245431Sdimdef HEXAGON_S2_clb: 3013234285Sdim si_SInst_si <"clb", int_hexagon_S2_clb>; 3014245431Sdimdef HEXAGON_S2_clbp: 3015234285Sdim si_SInst_di <"clb", int_hexagon_S2_clbp>; 3016245431Sdimdef HEXAGON_S2_clbnorm: 3017234285Sdim si_SInst_si <"normamt", int_hexagon_S2_clbnorm>; 3018234285Sdim 3019234285Sdim// STYPE / BIT / Count trailing. 3020245431Sdimdef HEXAGON_S2_ct0: 3021234285Sdim si_SInst_si <"ct0", int_hexagon_S2_ct0>; 3022245431Sdimdef HEXAGON_S2_ct1: 3023234285Sdim si_SInst_si <"ct1", int_hexagon_S2_ct1>; 3024234285Sdim 3025234285Sdim// STYPE / BIT / Compare bit mask. 3026245431Sdimdef Hexagon_C2_bitsclr: 3027234285Sdim qi_SInst_sisi <"bitsclr", int_hexagon_C2_bitsclr>; 3028245431Sdimdef Hexagon_C2_bitsclri: 3029234285Sdim qi_SInst_siu6 <"bitsclr", int_hexagon_C2_bitsclri>; 3030245431Sdimdef Hexagon_C2_bitsset: 3031234285Sdim qi_SInst_sisi <"bitsset", int_hexagon_C2_bitsset>; 3032234285Sdim 3033234285Sdim// STYPE / BIT / Extract unsigned. 3034234285Sdim// Rd[d][32/64]=extractu(Rs[s],Rt[t],[imm]) 3035245431Sdimdef HEXAGON_S2_extractu: 3036234285Sdim si_SInst_siu5u5 <"extractu",int_hexagon_S2_extractu>; 3037245431Sdimdef HEXAGON_S2_extractu_rp: 3038234285Sdim si_SInst_sidi <"extractu",int_hexagon_S2_extractu_rp>; 3039245431Sdimdef HEXAGON_S2_extractup: 3040234285Sdim di_SInst_diu6u6 <"extractu",int_hexagon_S2_extractup>; 3041245431Sdimdef HEXAGON_S2_extractup_rp: 3042234285Sdim di_SInst_didi <"extractu",int_hexagon_S2_extractup_rp>; 3043234285Sdim 3044234285Sdim// STYPE / BIT / Insert bitfield. 3045245431Sdimdef Hexagon_S2_insert: 3046234285Sdim si_SInst_sisiu5u5 <"insert", int_hexagon_S2_insert>; 3047245431Sdimdef Hexagon_S2_insert_rp: 3048234285Sdim si_SInst_sisidi <"insert", int_hexagon_S2_insert_rp>; 3049245431Sdimdef Hexagon_S2_insertp: 3050234285Sdim di_SInst_didiu6u6 <"insert", int_hexagon_S2_insertp>; 3051245431Sdimdef Hexagon_S2_insertp_rp: 3052234285Sdim di_SInst_dididi <"insert", int_hexagon_S2_insertp_rp>; 3053234285Sdim 3054234285Sdim// STYPE / BIT / Innterleave/deinterleave. 3055245431Sdimdef Hexagon_S2_interleave: 3056234285Sdim di_SInst_di <"interleave", int_hexagon_S2_interleave>; 3057245431Sdimdef Hexagon_S2_deinterleave: 3058234285Sdim di_SInst_di <"deinterleave", int_hexagon_S2_deinterleave>; 3059234285Sdim 3060234285Sdim// STYPE / BIT / Linear feedback-shift Iteration. 3061245431Sdimdef Hexagon_S2_lfsp: 3062234285Sdim di_SInst_didi <"lfs", int_hexagon_S2_lfsp>; 3063234285Sdim 3064234285Sdim// STYPE / BIT / Bit reverse. 3065245431Sdimdef Hexagon_S2_brev: 3066234285Sdim si_SInst_si <"brev", int_hexagon_S2_brev>; 3067234285Sdim 3068234285Sdim// STYPE / BIT / Set/Clear/Toggle Bit. 3069245431Sdimdef HEXAGON_S2_setbit_i: 3070234285Sdim si_SInst_siu5 <"setbit", int_hexagon_S2_setbit_i>; 3071245431Sdimdef HEXAGON_S2_togglebit_i: 3072234285Sdim si_SInst_siu5 <"togglebit", int_hexagon_S2_togglebit_i>; 3073245431Sdimdef HEXAGON_S2_clrbit_i: 3074234285Sdim si_SInst_siu5 <"clrbit", int_hexagon_S2_clrbit_i>; 3075245431Sdimdef HEXAGON_S2_setbit_r: 3076234285Sdim si_SInst_sisi <"setbit", int_hexagon_S2_setbit_r>; 3077245431Sdimdef HEXAGON_S2_togglebit_r: 3078234285Sdim si_SInst_sisi <"togglebit", int_hexagon_S2_togglebit_r>; 3079245431Sdimdef HEXAGON_S2_clrbit_r: 3080234285Sdim si_SInst_sisi <"clrbit", int_hexagon_S2_clrbit_r>; 3081234285Sdim 3082234285Sdim// STYPE / BIT / Test Bit. 3083245431Sdimdef HEXAGON_S2_tstbit_i: 3084234285Sdim qi_SInst_siu5 <"tstbit", int_hexagon_S2_tstbit_i>; 3085245431Sdimdef HEXAGON_S2_tstbit_r: 3086234285Sdim qi_SInst_sisi <"tstbit", int_hexagon_S2_tstbit_r>; 3087234285Sdim 3088234285Sdim 3089234285Sdim/******************************************************************** 3090234285Sdim* STYPE/COMPLEX * 3091234285Sdim*********************************************************************/ 3092234285Sdim 3093234285Sdim// STYPE / COMPLEX / Vector Complex conjugate. 3094245431Sdimdef HEXAGON_A2_vconj: 3095234285Sdim di_SInst_di_sat <"vconj", int_hexagon_A2_vconj>; 3096234285Sdim 3097234285Sdim// STYPE / COMPLEX / Vector Complex rotate. 3098245431Sdimdef HEXAGON_S2_vcrotate: 3099234285Sdim di_SInst_disi <"vcrotate",int_hexagon_S2_vcrotate>; 3100234285Sdim 3101234285Sdim 3102234285Sdim/******************************************************************** 3103234285Sdim* STYPE/PERM * 3104234285Sdim*********************************************************************/ 3105234285Sdim 3106234285Sdim// STYPE / PERM / Saturate. 3107245431Sdimdef HEXAGON_A2_sat: 3108234285Sdim si_SInst_di <"sat", int_hexagon_A2_sat>; 3109245431Sdimdef HEXAGON_A2_satb: 3110234285Sdim si_SInst_si <"satb", int_hexagon_A2_satb>; 3111245431Sdimdef HEXAGON_A2_sath: 3112234285Sdim si_SInst_si <"sath", int_hexagon_A2_sath>; 3113245431Sdimdef HEXAGON_A2_satub: 3114234285Sdim si_SInst_si <"satub", int_hexagon_A2_satub>; 3115245431Sdimdef HEXAGON_A2_satuh: 3116234285Sdim si_SInst_si <"satuh", int_hexagon_A2_satuh>; 3117234285Sdim 3118234285Sdim// STYPE / PERM / Swizzle bytes. 3119245431Sdimdef HEXAGON_A2_swiz: 3120234285Sdim si_SInst_si <"swiz", int_hexagon_A2_swiz>; 3121234285Sdim 3122234285Sdim// STYPE / PERM / Vector align. 3123234285Sdim// Need custom lowering 3124245431Sdimdef HEXAGON_S2_valignib: 3125234285Sdim di_SInst_didiu3 <"valignb", int_hexagon_S2_valignib>; 3126245431Sdimdef HEXAGON_S2_valignrb: 3127234285Sdim di_SInst_didiqi <"valignb", int_hexagon_S2_valignrb>; 3128234285Sdim 3129234285Sdim// STYPE / PERM / Vector round and pack. 3130245431Sdimdef HEXAGON_S2_vrndpackwh: 3131234285Sdim si_SInst_di <"vrndwh", int_hexagon_S2_vrndpackwh>; 3132245431Sdimdef HEXAGON_S2_vrndpackwhs: 3133234285Sdim si_SInst_di_sat <"vrndwh", int_hexagon_S2_vrndpackwhs>; 3134234285Sdim 3135234285Sdim// STYPE / PERM / Vector saturate and pack. 3136245431Sdimdef HEXAGON_S2_svsathb: 3137234285Sdim si_SInst_si <"vsathb", int_hexagon_S2_svsathb>; 3138245431Sdimdef HEXAGON_S2_vsathb: 3139234285Sdim si_SInst_di <"vsathb", int_hexagon_S2_vsathb>; 3140245431Sdimdef HEXAGON_S2_svsathub: 3141234285Sdim si_SInst_si <"vsathub", int_hexagon_S2_svsathub>; 3142245431Sdimdef HEXAGON_S2_vsathub: 3143234285Sdim si_SInst_di <"vsathub", int_hexagon_S2_vsathub>; 3144245431Sdimdef HEXAGON_S2_vsatwh: 3145234285Sdim si_SInst_di <"vsatwh", int_hexagon_S2_vsatwh>; 3146245431Sdimdef HEXAGON_S2_vsatwuh: 3147234285Sdim si_SInst_di <"vsatwuh", int_hexagon_S2_vsatwuh>; 3148234285Sdim 3149234285Sdim// STYPE / PERM / Vector saturate without pack. 3150245431Sdimdef HEXAGON_S2_vsathb_nopack: 3151234285Sdim di_SInst_di <"vsathb", int_hexagon_S2_vsathb_nopack>; 3152245431Sdimdef HEXAGON_S2_vsathub_nopack: 3153234285Sdim di_SInst_di <"vsathub", int_hexagon_S2_vsathub_nopack>; 3154245431Sdimdef HEXAGON_S2_vsatwh_nopack: 3155234285Sdim di_SInst_di <"vsatwh", int_hexagon_S2_vsatwh_nopack>; 3156245431Sdimdef HEXAGON_S2_vsatwuh_nopack: 3157234285Sdim di_SInst_di <"vsatwuh", int_hexagon_S2_vsatwuh_nopack>; 3158234285Sdim 3159234285Sdim// STYPE / PERM / Vector shuffle. 3160245431Sdimdef HEXAGON_S2_shuffeb: 3161234285Sdim di_SInst_didi <"shuffeb", int_hexagon_S2_shuffeb>; 3162245431Sdimdef HEXAGON_S2_shuffeh: 3163234285Sdim di_SInst_didi <"shuffeh", int_hexagon_S2_shuffeh>; 3164245431Sdimdef HEXAGON_S2_shuffob: 3165234285Sdim di_SInst_didi <"shuffob", int_hexagon_S2_shuffob>; 3166245431Sdimdef HEXAGON_S2_shuffoh: 3167234285Sdim di_SInst_didi <"shuffoh", int_hexagon_S2_shuffoh>; 3168234285Sdim 3169234285Sdim// STYPE / PERM / Vector splat bytes. 3170245431Sdimdef HEXAGON_S2_vsplatrb: 3171234285Sdim si_SInst_si <"vsplatb", int_hexagon_S2_vsplatrb>; 3172234285Sdim 3173234285Sdim// STYPE / PERM / Vector splat halfwords. 3174245431Sdimdef HEXAGON_S2_vsplatrh: 3175234285Sdim di_SInst_si <"vsplath", int_hexagon_S2_vsplatrh>; 3176234285Sdim 3177234285Sdim// STYPE / PERM / Vector splice. 3178245431Sdimdef Hexagon_S2_vsplicerb: 3179234285Sdim di_SInst_didiqi <"vspliceb",int_hexagon_S2_vsplicerb>; 3180245431Sdimdef Hexagon_S2_vspliceib: 3181234285Sdim di_SInst_didiu3 <"vspliceb",int_hexagon_S2_vspliceib>; 3182234285Sdim 3183234285Sdim// STYPE / PERM / Sign extend. 3184245431Sdimdef HEXAGON_S2_vsxtbh: 3185234285Sdim di_SInst_si <"vsxtbh", int_hexagon_S2_vsxtbh>; 3186245431Sdimdef HEXAGON_S2_vsxthw: 3187234285Sdim di_SInst_si <"vsxthw", int_hexagon_S2_vsxthw>; 3188234285Sdim 3189234285Sdim// STYPE / PERM / Truncate. 3190245431Sdimdef HEXAGON_S2_vtrunehb: 3191234285Sdim si_SInst_di <"vtrunehb",int_hexagon_S2_vtrunehb>; 3192245431Sdimdef HEXAGON_S2_vtrunohb: 3193234285Sdim si_SInst_di <"vtrunohb",int_hexagon_S2_vtrunohb>; 3194245431Sdimdef HEXAGON_S2_vtrunewh: 3195234285Sdim di_SInst_didi <"vtrunewh",int_hexagon_S2_vtrunewh>; 3196245431Sdimdef HEXAGON_S2_vtrunowh: 3197234285Sdim di_SInst_didi <"vtrunowh",int_hexagon_S2_vtrunowh>; 3198234285Sdim 3199234285Sdim// STYPE / PERM / Zero extend. 3200245431Sdimdef HEXAGON_S2_vzxtbh: 3201234285Sdim di_SInst_si <"vzxtbh", int_hexagon_S2_vzxtbh>; 3202245431Sdimdef HEXAGON_S2_vzxthw: 3203234285Sdim di_SInst_si <"vzxthw", int_hexagon_S2_vzxthw>; 3204234285Sdim 3205234285Sdim 3206234285Sdim/******************************************************************** 3207234285Sdim* STYPE/PRED * 3208234285Sdim*********************************************************************/ 3209234285Sdim 3210234285Sdim// STYPE / PRED / Mask generate from predicate. 3211245431Sdimdef HEXAGON_C2_mask: 3212234285Sdim di_SInst_qi <"mask", int_hexagon_C2_mask>; 3213234285Sdim 3214234285Sdim// STYPE / PRED / Predicate transfer. 3215245431Sdimdef HEXAGON_C2_tfrpr: 3216234285Sdim si_SInst_qi <"", int_hexagon_C2_tfrpr>; 3217245431Sdimdef HEXAGON_C2_tfrrp: 3218234285Sdim qi_SInst_si <"", int_hexagon_C2_tfrrp>; 3219234285Sdim 3220234285Sdim// STYPE / PRED / Viterbi pack even and odd predicate bits. 3221245431Sdimdef HEXAGON_C2_vitpack: 3222234285Sdim si_SInst_qiqi <"vitpack",int_hexagon_C2_vitpack>; 3223234285Sdim 3224234285Sdim 3225234285Sdim/******************************************************************** 3226234285Sdim* STYPE/SHIFT * 3227234285Sdim*********************************************************************/ 3228234285Sdim 3229234285Sdim// STYPE / SHIFT / Shift by immediate. 3230245431Sdimdef HEXAGON_S2_asl_i_r: 3231234285Sdim si_SInst_siu5 <"asl", int_hexagon_S2_asl_i_r>; 3232245431Sdimdef HEXAGON_S2_asr_i_r: 3233234285Sdim si_SInst_siu5 <"asr", int_hexagon_S2_asr_i_r>; 3234245431Sdimdef HEXAGON_S2_lsr_i_r: 3235234285Sdim si_SInst_siu5 <"lsr", int_hexagon_S2_lsr_i_r>; 3236245431Sdimdef HEXAGON_S2_asl_i_p: 3237234285Sdim di_SInst_diu6 <"asl", int_hexagon_S2_asl_i_p>; 3238245431Sdimdef HEXAGON_S2_asr_i_p: 3239234285Sdim di_SInst_diu6 <"asr", int_hexagon_S2_asr_i_p>; 3240245431Sdimdef HEXAGON_S2_lsr_i_p: 3241234285Sdim di_SInst_diu6 <"lsr", int_hexagon_S2_lsr_i_p>; 3242234285Sdim 3243234285Sdim// STYPE / SHIFT / Shift by immediate and accumulate. 3244245431Sdimdef HEXAGON_S2_asl_i_r_acc: 3245234285Sdim si_SInst_sisiu5_acc <"asl", int_hexagon_S2_asl_i_r_acc>; 3246245431Sdimdef HEXAGON_S2_asr_i_r_acc: 3247234285Sdim si_SInst_sisiu5_acc <"asr", int_hexagon_S2_asr_i_r_acc>; 3248245431Sdimdef HEXAGON_S2_lsr_i_r_acc: 3249234285Sdim si_SInst_sisiu5_acc <"lsr", int_hexagon_S2_lsr_i_r_acc>; 3250245431Sdimdef HEXAGON_S2_asl_i_r_nac: 3251234285Sdim si_SInst_sisiu5_nac <"asl", int_hexagon_S2_asl_i_r_nac>; 3252245431Sdimdef HEXAGON_S2_asr_i_r_nac: 3253234285Sdim si_SInst_sisiu5_nac <"asr", int_hexagon_S2_asr_i_r_nac>; 3254245431Sdimdef HEXAGON_S2_lsr_i_r_nac: 3255234285Sdim si_SInst_sisiu5_nac <"lsr", int_hexagon_S2_lsr_i_r_nac>; 3256245431Sdimdef HEXAGON_S2_asl_i_p_acc: 3257234285Sdim di_SInst_didiu6_acc <"asl", int_hexagon_S2_asl_i_p_acc>; 3258245431Sdimdef HEXAGON_S2_asr_i_p_acc: 3259234285Sdim di_SInst_didiu6_acc <"asr", int_hexagon_S2_asr_i_p_acc>; 3260245431Sdimdef HEXAGON_S2_lsr_i_p_acc: 3261234285Sdim di_SInst_didiu6_acc <"lsr", int_hexagon_S2_lsr_i_p_acc>; 3262245431Sdimdef HEXAGON_S2_asl_i_p_nac: 3263234285Sdim di_SInst_didiu6_nac <"asl", int_hexagon_S2_asl_i_p_nac>; 3264245431Sdimdef HEXAGON_S2_asr_i_p_nac: 3265234285Sdim di_SInst_didiu6_nac <"asr", int_hexagon_S2_asr_i_p_nac>; 3266245431Sdimdef HEXAGON_S2_lsr_i_p_nac: 3267234285Sdim di_SInst_didiu6_nac <"lsr", int_hexagon_S2_lsr_i_p_nac>; 3268234285Sdim 3269234285Sdim// STYPE / SHIFT / Shift by immediate and add. 3270245431Sdimdef HEXAGON_S2_addasl_rrri: 3271234285Sdim si_SInst_sisiu3 <"addasl", int_hexagon_S2_addasl_rrri>; 3272234285Sdim 3273234285Sdim// STYPE / SHIFT / Shift by immediate and logical. 3274245431Sdimdef HEXAGON_S2_asl_i_r_and: 3275234285Sdim si_SInst_sisiu5_and <"asl", int_hexagon_S2_asl_i_r_and>; 3276245431Sdimdef HEXAGON_S2_asr_i_r_and: 3277234285Sdim si_SInst_sisiu5_and <"asr", int_hexagon_S2_asr_i_r_and>; 3278245431Sdimdef HEXAGON_S2_lsr_i_r_and: 3279234285Sdim si_SInst_sisiu5_and <"lsr", int_hexagon_S2_lsr_i_r_and>; 3280234285Sdim 3281245431Sdimdef HEXAGON_S2_asl_i_r_xacc: 3282234285Sdim si_SInst_sisiu5_xor <"asl", int_hexagon_S2_asl_i_r_xacc>; 3283245431Sdimdef HEXAGON_S2_lsr_i_r_xacc: 3284234285Sdim si_SInst_sisiu5_xor <"lsr", int_hexagon_S2_lsr_i_r_xacc>; 3285234285Sdim 3286245431Sdimdef HEXAGON_S2_asl_i_r_or: 3287234285Sdim si_SInst_sisiu5_or <"asl", int_hexagon_S2_asl_i_r_or>; 3288245431Sdimdef HEXAGON_S2_asr_i_r_or: 3289234285Sdim si_SInst_sisiu5_or <"asr", int_hexagon_S2_asr_i_r_or>; 3290245431Sdimdef HEXAGON_S2_lsr_i_r_or: 3291234285Sdim si_SInst_sisiu5_or <"lsr", int_hexagon_S2_lsr_i_r_or>; 3292234285Sdim 3293245431Sdimdef HEXAGON_S2_asl_i_p_and: 3294234285Sdim di_SInst_didiu6_and <"asl", int_hexagon_S2_asl_i_p_and>; 3295245431Sdimdef HEXAGON_S2_asr_i_p_and: 3296234285Sdim di_SInst_didiu6_and <"asr", int_hexagon_S2_asr_i_p_and>; 3297245431Sdimdef HEXAGON_S2_lsr_i_p_and: 3298234285Sdim di_SInst_didiu6_and <"lsr", int_hexagon_S2_lsr_i_p_and>; 3299234285Sdim 3300245431Sdimdef HEXAGON_S2_asl_i_p_xacc: 3301234285Sdim di_SInst_didiu6_xor <"asl", int_hexagon_S2_asl_i_p_xacc>; 3302245431Sdimdef HEXAGON_S2_lsr_i_p_xacc: 3303234285Sdim di_SInst_didiu6_xor <"lsr", int_hexagon_S2_lsr_i_p_xacc>; 3304234285Sdim 3305245431Sdimdef HEXAGON_S2_asl_i_p_or: 3306234285Sdim di_SInst_didiu6_or <"asl", int_hexagon_S2_asl_i_p_or>; 3307245431Sdimdef HEXAGON_S2_asr_i_p_or: 3308234285Sdim di_SInst_didiu6_or <"asr", int_hexagon_S2_asr_i_p_or>; 3309245431Sdimdef HEXAGON_S2_lsr_i_p_or: 3310234285Sdim di_SInst_didiu6_or <"lsr", int_hexagon_S2_lsr_i_p_or>; 3311234285Sdim 3312234285Sdim// STYPE / SHIFT / Shift right by immediate with rounding. 3313245431Sdimdef HEXAGON_S2_asr_i_r_rnd: 3314234285Sdim si_SInst_siu5_rnd <"asr", int_hexagon_S2_asr_i_r_rnd>; 3315245431Sdimdef HEXAGON_S2_asr_i_r_rnd_goodsyntax: 3316234285Sdim si_SInst_siu5 <"asrrnd", int_hexagon_S2_asr_i_r_rnd_goodsyntax>; 3317234285Sdim 3318234285Sdim// STYPE / SHIFT / Shift left by immediate with saturation. 3319245431Sdimdef HEXAGON_S2_asl_i_r_sat: 3320234285Sdim si_SInst_sisi_sat <"asl", int_hexagon_S2_asl_i_r_sat>; 3321234285Sdim 3322234285Sdim// STYPE / SHIFT / Shift by register. 3323245431Sdimdef HEXAGON_S2_asl_r_r: 3324234285Sdim si_SInst_sisi <"asl", int_hexagon_S2_asl_r_r>; 3325245431Sdimdef HEXAGON_S2_asr_r_r: 3326234285Sdim si_SInst_sisi <"asr", int_hexagon_S2_asr_r_r>; 3327245431Sdimdef HEXAGON_S2_lsl_r_r: 3328234285Sdim si_SInst_sisi <"lsl", int_hexagon_S2_lsl_r_r>; 3329245431Sdimdef HEXAGON_S2_lsr_r_r: 3330234285Sdim si_SInst_sisi <"lsr", int_hexagon_S2_lsr_r_r>; 3331245431Sdimdef HEXAGON_S2_asl_r_p: 3332234285Sdim di_SInst_disi <"asl", int_hexagon_S2_asl_r_p>; 3333245431Sdimdef HEXAGON_S2_asr_r_p: 3334234285Sdim di_SInst_disi <"asr", int_hexagon_S2_asr_r_p>; 3335245431Sdimdef HEXAGON_S2_lsl_r_p: 3336234285Sdim di_SInst_disi <"lsl", int_hexagon_S2_lsl_r_p>; 3337245431Sdimdef HEXAGON_S2_lsr_r_p: 3338234285Sdim di_SInst_disi <"lsr", int_hexagon_S2_lsr_r_p>; 3339234285Sdim 3340234285Sdim// STYPE / SHIFT / Shift by register and accumulate. 3341245431Sdimdef HEXAGON_S2_asl_r_r_acc: 3342234285Sdim si_SInst_sisisi_acc <"asl", int_hexagon_S2_asl_r_r_acc>; 3343245431Sdimdef HEXAGON_S2_asr_r_r_acc: 3344234285Sdim si_SInst_sisisi_acc <"asr", int_hexagon_S2_asr_r_r_acc>; 3345245431Sdimdef HEXAGON_S2_lsl_r_r_acc: 3346234285Sdim si_SInst_sisisi_acc <"lsl", int_hexagon_S2_lsl_r_r_acc>; 3347245431Sdimdef HEXAGON_S2_lsr_r_r_acc: 3348234285Sdim si_SInst_sisisi_acc <"lsr", int_hexagon_S2_lsr_r_r_acc>; 3349245431Sdimdef HEXAGON_S2_asl_r_p_acc: 3350234285Sdim di_SInst_didisi_acc <"asl", int_hexagon_S2_asl_r_p_acc>; 3351245431Sdimdef HEXAGON_S2_asr_r_p_acc: 3352234285Sdim di_SInst_didisi_acc <"asr", int_hexagon_S2_asr_r_p_acc>; 3353245431Sdimdef HEXAGON_S2_lsl_r_p_acc: 3354234285Sdim di_SInst_didisi_acc <"lsl", int_hexagon_S2_lsl_r_p_acc>; 3355245431Sdimdef HEXAGON_S2_lsr_r_p_acc: 3356234285Sdim di_SInst_didisi_acc <"lsr", int_hexagon_S2_lsr_r_p_acc>; 3357234285Sdim 3358245431Sdimdef HEXAGON_S2_asl_r_r_nac: 3359234285Sdim si_SInst_sisisi_nac <"asl", int_hexagon_S2_asl_r_r_nac>; 3360245431Sdimdef HEXAGON_S2_asr_r_r_nac: 3361234285Sdim si_SInst_sisisi_nac <"asr", int_hexagon_S2_asr_r_r_nac>; 3362245431Sdimdef HEXAGON_S2_lsl_r_r_nac: 3363234285Sdim si_SInst_sisisi_nac <"lsl", int_hexagon_S2_lsl_r_r_nac>; 3364245431Sdimdef HEXAGON_S2_lsr_r_r_nac: 3365234285Sdim si_SInst_sisisi_nac <"lsr", int_hexagon_S2_lsr_r_r_nac>; 3366245431Sdimdef HEXAGON_S2_asl_r_p_nac: 3367234285Sdim di_SInst_didisi_nac <"asl", int_hexagon_S2_asl_r_p_nac>; 3368245431Sdimdef HEXAGON_S2_asr_r_p_nac: 3369234285Sdim di_SInst_didisi_nac <"asr", int_hexagon_S2_asr_r_p_nac>; 3370245431Sdimdef HEXAGON_S2_lsl_r_p_nac: 3371234285Sdim di_SInst_didisi_nac <"lsl", int_hexagon_S2_lsl_r_p_nac>; 3372245431Sdimdef HEXAGON_S2_lsr_r_p_nac: 3373234285Sdim di_SInst_didisi_nac <"lsr", int_hexagon_S2_lsr_r_p_nac>; 3374234285Sdim 3375234285Sdim// STYPE / SHIFT / Shift by register and logical. 3376245431Sdimdef HEXAGON_S2_asl_r_r_and: 3377234285Sdim si_SInst_sisisi_and <"asl", int_hexagon_S2_asl_r_r_and>; 3378245431Sdimdef HEXAGON_S2_asr_r_r_and: 3379234285Sdim si_SInst_sisisi_and <"asr", int_hexagon_S2_asr_r_r_and>; 3380245431Sdimdef HEXAGON_S2_lsl_r_r_and: 3381234285Sdim si_SInst_sisisi_and <"lsl", int_hexagon_S2_lsl_r_r_and>; 3382245431Sdimdef HEXAGON_S2_lsr_r_r_and: 3383234285Sdim si_SInst_sisisi_and <"lsr", int_hexagon_S2_lsr_r_r_and>; 3384234285Sdim 3385245431Sdimdef HEXAGON_S2_asl_r_r_or: 3386234285Sdim si_SInst_sisisi_or <"asl", int_hexagon_S2_asl_r_r_or>; 3387245431Sdimdef HEXAGON_S2_asr_r_r_or: 3388234285Sdim si_SInst_sisisi_or <"asr", int_hexagon_S2_asr_r_r_or>; 3389245431Sdimdef HEXAGON_S2_lsl_r_r_or: 3390234285Sdim si_SInst_sisisi_or <"lsl", int_hexagon_S2_lsl_r_r_or>; 3391245431Sdimdef HEXAGON_S2_lsr_r_r_or: 3392234285Sdim si_SInst_sisisi_or <"lsr", int_hexagon_S2_lsr_r_r_or>; 3393234285Sdim 3394245431Sdimdef HEXAGON_S2_asl_r_p_and: 3395234285Sdim di_SInst_didisi_and <"asl", int_hexagon_S2_asl_r_p_and>; 3396245431Sdimdef HEXAGON_S2_asr_r_p_and: 3397234285Sdim di_SInst_didisi_and <"asr", int_hexagon_S2_asr_r_p_and>; 3398245431Sdimdef HEXAGON_S2_lsl_r_p_and: 3399234285Sdim di_SInst_didisi_and <"lsl", int_hexagon_S2_lsl_r_p_and>; 3400245431Sdimdef HEXAGON_S2_lsr_r_p_and: 3401234285Sdim di_SInst_didisi_and <"lsr", int_hexagon_S2_lsr_r_p_and>; 3402234285Sdim 3403245431Sdimdef HEXAGON_S2_asl_r_p_or: 3404234285Sdim di_SInst_didisi_or <"asl", int_hexagon_S2_asl_r_p_or>; 3405245431Sdimdef HEXAGON_S2_asr_r_p_or: 3406234285Sdim di_SInst_didisi_or <"asr", int_hexagon_S2_asr_r_p_or>; 3407245431Sdimdef HEXAGON_S2_lsl_r_p_or: 3408234285Sdim di_SInst_didisi_or <"lsl", int_hexagon_S2_lsl_r_p_or>; 3409245431Sdimdef HEXAGON_S2_lsr_r_p_or: 3410234285Sdim di_SInst_didisi_or <"lsr", int_hexagon_S2_lsr_r_p_or>; 3411234285Sdim 3412234285Sdim// STYPE / SHIFT / Shift by register with saturation. 3413245431Sdimdef HEXAGON_S2_asl_r_r_sat: 3414234285Sdim si_SInst_sisi_sat <"asl", int_hexagon_S2_asl_r_r_sat>; 3415245431Sdimdef HEXAGON_S2_asr_r_r_sat: 3416234285Sdim si_SInst_sisi_sat <"asr", int_hexagon_S2_asr_r_r_sat>; 3417234285Sdim 3418234285Sdim// STYPE / SHIFT / Table Index. 3419245431Sdimdef Hexagon_S2_tableidxb_goodsyntax: 3420234285Sdim si_MInst_sisiu4u5 <"tableidxb",int_hexagon_S2_tableidxb_goodsyntax>; 3421245431Sdimdef Hexagon_S2_tableidxd_goodsyntax: 3422234285Sdim si_MInst_sisiu4u5 <"tableidxd",int_hexagon_S2_tableidxd_goodsyntax>; 3423245431Sdimdef Hexagon_S2_tableidxh_goodsyntax: 3424234285Sdim si_MInst_sisiu4u5 <"tableidxh",int_hexagon_S2_tableidxh_goodsyntax>; 3425245431Sdimdef Hexagon_S2_tableidxw_goodsyntax: 3426234285Sdim si_MInst_sisiu4u5 <"tableidxw",int_hexagon_S2_tableidxw_goodsyntax>; 3427234285Sdim 3428234285Sdim 3429234285Sdim/******************************************************************** 3430234285Sdim* STYPE/VH * 3431234285Sdim*********************************************************************/ 3432234285Sdim 3433234285Sdim// STYPE / VH / Vector absolute value halfwords. 3434234285Sdim// Rdd64=vabsh(Rss64) 3435245431Sdimdef HEXAGON_A2_vabsh: 3436234285Sdim di_SInst_di <"vabsh", int_hexagon_A2_vabsh>; 3437245431Sdimdef HEXAGON_A2_vabshsat: 3438234285Sdim di_SInst_di_sat <"vabsh", int_hexagon_A2_vabshsat>; 3439234285Sdim 3440234285Sdim// STYPE / VH / Vector shift halfwords by immediate. 3441234285Sdim// Rdd64=v[asl/asr/lsr]h(Rss64,Rt32) 3442245431Sdimdef HEXAGON_S2_asl_i_vh: 3443234285Sdim di_SInst_disi <"vaslh", int_hexagon_S2_asl_i_vh>; 3444245431Sdimdef HEXAGON_S2_asr_i_vh: 3445234285Sdim di_SInst_disi <"vasrh", int_hexagon_S2_asr_i_vh>; 3446245431Sdimdef HEXAGON_S2_lsr_i_vh: 3447234285Sdim di_SInst_disi <"vlsrh", int_hexagon_S2_lsr_i_vh>; 3448234285Sdim 3449234285Sdim// STYPE / VH / Vector shift halfwords by register. 3450234285Sdim// Rdd64=v[asl/asr/lsl/lsr]w(Rss64,Rt32) 3451245431Sdimdef HEXAGON_S2_asl_r_vh: 3452234285Sdim di_SInst_disi <"vaslh", int_hexagon_S2_asl_r_vh>; 3453245431Sdimdef HEXAGON_S2_asr_r_vh: 3454234285Sdim di_SInst_disi <"vasrh", int_hexagon_S2_asr_r_vh>; 3455245431Sdimdef HEXAGON_S2_lsl_r_vh: 3456234285Sdim di_SInst_disi <"vlslh", int_hexagon_S2_lsl_r_vh>; 3457245431Sdimdef HEXAGON_S2_lsr_r_vh: 3458234285Sdim di_SInst_disi <"vlsrh", int_hexagon_S2_lsr_r_vh>; 3459234285Sdim 3460234285Sdim 3461234285Sdim/******************************************************************** 3462234285Sdim* STYPE/VW * 3463234285Sdim*********************************************************************/ 3464234285Sdim 3465234285Sdim// STYPE / VW / Vector absolute value words. 3466245431Sdimdef HEXAGON_A2_vabsw: 3467234285Sdim di_SInst_di <"vabsw", int_hexagon_A2_vabsw>; 3468245431Sdimdef HEXAGON_A2_vabswsat: 3469234285Sdim di_SInst_di_sat <"vabsw", int_hexagon_A2_vabswsat>; 3470234285Sdim 3471234285Sdim// STYPE / VW / Vector shift words by immediate. 3472234285Sdim// Rdd64=v[asl/vsl]w(Rss64,Rt32) 3473245431Sdimdef HEXAGON_S2_asl_i_vw: 3474234285Sdim di_SInst_disi <"vaslw", int_hexagon_S2_asl_i_vw>; 3475245431Sdimdef HEXAGON_S2_asr_i_vw: 3476234285Sdim di_SInst_disi <"vasrw", int_hexagon_S2_asr_i_vw>; 3477245431Sdimdef HEXAGON_S2_lsr_i_vw: 3478234285Sdim di_SInst_disi <"vlsrw", int_hexagon_S2_lsr_i_vw>; 3479234285Sdim 3480234285Sdim// STYPE / VW / Vector shift words by register. 3481234285Sdim// Rdd64=v[asl/vsl]w(Rss64,Rt32) 3482245431Sdimdef HEXAGON_S2_asl_r_vw: 3483234285Sdim di_SInst_disi <"vaslw", int_hexagon_S2_asl_r_vw>; 3484245431Sdimdef HEXAGON_S2_asr_r_vw: 3485234285Sdim di_SInst_disi <"vasrw", int_hexagon_S2_asr_r_vw>; 3486245431Sdimdef HEXAGON_S2_lsl_r_vw: 3487234285Sdim di_SInst_disi <"vlslw", int_hexagon_S2_lsl_r_vw>; 3488245431Sdimdef HEXAGON_S2_lsr_r_vw: 3489234285Sdim di_SInst_disi <"vlsrw", int_hexagon_S2_lsr_r_vw>; 3490234285Sdim 3491234285Sdim// STYPE / VW / Vector shift words with truncate and pack. 3492245431Sdimdef HEXAGON_S2_asr_r_svw_trun: 3493234285Sdim si_SInst_disi <"vasrw", int_hexagon_S2_asr_r_svw_trun>; 3494245431Sdimdef HEXAGON_S2_asr_i_svw_trun: 3495234285Sdim si_SInst_diu5 <"vasrw", int_hexagon_S2_asr_i_svw_trun>; 3496234285Sdim 3497245431Sdim// LD / Circular loads. 3498245431Sdimdef HEXAGON_circ_ldd: 3499245431Sdim di_LDInstPI_diu4 <"circ_ldd", int_hexagon_circ_ldd>; 3500245431Sdim 3501234285Sdiminclude "HexagonIntrinsicsV3.td" 3502234285Sdiminclude "HexagonIntrinsicsV4.td" 3503245431Sdiminclude "HexagonIntrinsicsV5.td" 3504