1*06c3fb27SDimitry Andric//===- LoongArchLBTInstrInfo.td - LoongArch LBT instructions -*- tablegen -*-=// 2*06c3fb27SDimitry Andric// 3*06c3fb27SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*06c3fb27SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*06c3fb27SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*06c3fb27SDimitry Andric// 7*06c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 8*06c3fb27SDimitry Andric// 9*06c3fb27SDimitry Andric// This file describes the LBT extension instructions. 10*06c3fb27SDimitry Andric// 11*06c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 12*06c3fb27SDimitry Andric 13*06c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 14*06c3fb27SDimitry Andric// Instructions 15*06c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 16*06c3fb27SDimitry Andric 17*06c3fb27SDimitry Andriclet hasSideEffects = 0, mayLoad = 0, mayStore = 0, Predicates = [HasExtLBT] in { 18*06c3fb27SDimitry Andric 19*06c3fb27SDimitry Andricdef MOVGR2SCR : FmtGR2SCR<0x00000800>; 20*06c3fb27SDimitry Andricdef MOVSCR2GR : FmtSCR2GR<0x00000c00>; 21*06c3fb27SDimitry Andric 22*06c3fb27SDimitry Andricdef JISCR0 : FmtJISCR<0x48000200>; 23*06c3fb27SDimitry Andricdef JISCR1 : FmtJISCR<0x48000300>; 24*06c3fb27SDimitry Andric 25*06c3fb27SDimitry Andricdef ADDU12I_W : ALU_2RI5<0x00290000, simm5>; 26*06c3fb27SDimitry Andric 27*06c3fb27SDimitry Andricdef ADC_B : ALU_3R<0x00300000>; 28*06c3fb27SDimitry Andricdef ADC_H : ALU_3R<0x00308000>; 29*06c3fb27SDimitry Andricdef ADC_W : ALU_3R<0x00310000>; 30*06c3fb27SDimitry Andric 31*06c3fb27SDimitry Andricdef SBC_B : ALU_3R<0x00320000>; 32*06c3fb27SDimitry Andricdef SBC_H : ALU_3R<0x00328000>; 33*06c3fb27SDimitry Andricdef SBC_W : ALU_3R<0x00330000>; 34*06c3fb27SDimitry Andric 35*06c3fb27SDimitry Andricdef ROTR_B : ALU_3R<0x001a0000>; 36*06c3fb27SDimitry Andricdef ROTR_H : ALU_3R<0x001a8000>; 37*06c3fb27SDimitry Andric 38*06c3fb27SDimitry Andricdef ROTRI_B : Fmt2RI3<0x004c2000>; 39*06c3fb27SDimitry Andricdef ROTRI_H : Fmt2RI4<0x004c4000>; 40*06c3fb27SDimitry Andric 41*06c3fb27SDimitry Andricdef RCR_B : ALU_3R<0x00340000>; 42*06c3fb27SDimitry Andricdef RCR_H : ALU_3R<0x00348000>; 43*06c3fb27SDimitry Andricdef RCR_W : ALU_3R<0x00350000>; 44*06c3fb27SDimitry Andric 45*06c3fb27SDimitry Andricdef RCRI_B : Fmt2RI3<0x00502000>; 46*06c3fb27SDimitry Andricdef RCRI_H : Fmt2RI4<0x00504000>; 47*06c3fb27SDimitry Andricdef RCRI_W : ALU_2RI5<0x00508000, uimm5>; 48*06c3fb27SDimitry Andric 49*06c3fb27SDimitry Andricdef FCVT_UD_D : FP_CONV<0x0114e400>; 50*06c3fb27SDimitry Andricdef FCVT_LD_D : FP_CONV<0x0114e000>; 51*06c3fb27SDimitry Andricdef FCVT_D_LD : FP_ALU_3R<0x01150000>; 52*06c3fb27SDimitry Andric 53*06c3fb27SDimitry Andriclet mayLoad = 1 in { 54*06c3fb27SDimitry Andricdef LDL_W : LOAD_2RI12<0x2e000000>; 55*06c3fb27SDimitry Andricdef LDR_W : LOAD_2RI12<0x2e400000>; 56*06c3fb27SDimitry Andric} // mayLoad = 1 57*06c3fb27SDimitry Andric 58*06c3fb27SDimitry Andriclet mayStore = 1 in { 59*06c3fb27SDimitry Andricdef STL_W : STORE_2RI12<0x2f000000>; 60*06c3fb27SDimitry Andricdef STR_W : STORE_2RI12<0x2f400000>; 61*06c3fb27SDimitry Andric} // mayStore = 1 62*06c3fb27SDimitry Andric 63*06c3fb27SDimitry Andricdef X86ADC_B : NoDstFmt2R<0x003f000c>; 64*06c3fb27SDimitry Andricdef X86ADC_H : NoDstFmt2R<0x003f000d>; 65*06c3fb27SDimitry Andricdef X86ADC_W : NoDstFmt2R<0x003f000e>; 66*06c3fb27SDimitry Andricdef X86ADD_B : NoDstFmt2R<0x003f0004>; 67*06c3fb27SDimitry Andricdef X86ADD_H : NoDstFmt2R<0x003f0005>; 68*06c3fb27SDimitry Andricdef X86ADD_W : NoDstFmt2R<0x003f0006>; 69*06c3fb27SDimitry Andric 70*06c3fb27SDimitry Andricdef X86INC_B : NoDstFmt1R<0x00008000>; 71*06c3fb27SDimitry Andricdef X86INC_H : NoDstFmt1R<0x00008001>; 72*06c3fb27SDimitry Andricdef X86INC_W : NoDstFmt1R<0x00008002>; 73*06c3fb27SDimitry Andric 74*06c3fb27SDimitry Andricdef X86SBC_B : NoDstFmt2R<0x003f0010>; 75*06c3fb27SDimitry Andricdef X86SBC_H : NoDstFmt2R<0x003f0011>; 76*06c3fb27SDimitry Andricdef X86SBC_W : NoDstFmt2R<0x003f0012>; 77*06c3fb27SDimitry Andricdef X86SUB_B : NoDstFmt2R<0x003f0008>; 78*06c3fb27SDimitry Andricdef X86SUB_H : NoDstFmt2R<0x003f0009>; 79*06c3fb27SDimitry Andricdef X86SUB_W : NoDstFmt2R<0x003f000a>; 80*06c3fb27SDimitry Andric 81*06c3fb27SDimitry Andricdef X86DEC_B : NoDstFmt1R<0x00008004>; 82*06c3fb27SDimitry Andricdef X86DEC_H : NoDstFmt1R<0x00008005>; 83*06c3fb27SDimitry Andricdef X86DEC_W : NoDstFmt1R<0x00008006>; 84*06c3fb27SDimitry Andric 85*06c3fb27SDimitry Andricdef X86AND_B : NoDstFmt2R<0x003f8010>; 86*06c3fb27SDimitry Andricdef X86AND_H : NoDstFmt2R<0x003f8011>; 87*06c3fb27SDimitry Andricdef X86AND_W : NoDstFmt2R<0x003f8012>; 88*06c3fb27SDimitry Andric 89*06c3fb27SDimitry Andricdef X86OR_B : NoDstFmt2R<0x003f8014>; 90*06c3fb27SDimitry Andricdef X86OR_H : NoDstFmt2R<0x003f8015>; 91*06c3fb27SDimitry Andricdef X86OR_W : NoDstFmt2R<0x003f8016>; 92*06c3fb27SDimitry Andric 93*06c3fb27SDimitry Andricdef X86XOR_B : NoDstFmt2R<0x003f8018>; 94*06c3fb27SDimitry Andricdef X86XOR_H : NoDstFmt2R<0x003f8019>; 95*06c3fb27SDimitry Andricdef X86XOR_W : NoDstFmt2R<0x003f801a>; 96*06c3fb27SDimitry Andric 97*06c3fb27SDimitry Andricdef X86MUL_B : NoDstFmt2R<0x003e8000>; 98*06c3fb27SDimitry Andricdef X86MUL_H : NoDstFmt2R<0x003e8001>; 99*06c3fb27SDimitry Andricdef X86MUL_W : NoDstFmt2R<0x003e8002>; 100*06c3fb27SDimitry Andricdef X86MUL_BU : NoDstFmt2R<0x003e8004>; 101*06c3fb27SDimitry Andricdef X86MUL_HU : NoDstFmt2R<0x003e8005>; 102*06c3fb27SDimitry Andric 103*06c3fb27SDimitry Andricdef X86RCL_B : NoDstFmt2R<0x003f800c>; 104*06c3fb27SDimitry Andricdef X86RCL_H : NoDstFmt2R<0x003f800d>; 105*06c3fb27SDimitry Andricdef X86RCL_W : NoDstFmt2R<0x003f800e>; 106*06c3fb27SDimitry Andricdef X86RCLI_B : NoDstFmt1RI3<0x00542018>; 107*06c3fb27SDimitry Andricdef X86RCLI_H : NoDstFmt1RI4<0x00544019>; 108*06c3fb27SDimitry Andricdef X86RCLI_W : NoDstFmt1RI5<0x0054801a>; 109*06c3fb27SDimitry Andric 110*06c3fb27SDimitry Andricdef X86RCR_B : NoDstFmt2R<0x003f8008>; 111*06c3fb27SDimitry Andricdef X86RCR_H : NoDstFmt2R<0x003f8009>; 112*06c3fb27SDimitry Andricdef X86RCR_W : NoDstFmt2R<0x003f800a>; 113*06c3fb27SDimitry Andricdef X86RCRI_B : NoDstFmt1RI3<0x00542010>; 114*06c3fb27SDimitry Andricdef X86RCRI_H : NoDstFmt1RI4<0x00544011>; 115*06c3fb27SDimitry Andricdef X86RCRI_W : NoDstFmt1RI5<0x00548012>; 116*06c3fb27SDimitry Andric 117*06c3fb27SDimitry Andricdef X86ROTL_B : NoDstFmt2R<0x003f8004>; 118*06c3fb27SDimitry Andricdef X86ROTL_H : NoDstFmt2R<0x003f8005>; 119*06c3fb27SDimitry Andricdef X86ROTL_W : NoDstFmt2R<0x003f8006>; 120*06c3fb27SDimitry Andricdef X86ROTLI_B : NoDstFmt1RI3<0x00542014>; 121*06c3fb27SDimitry Andricdef X86ROTLI_H : NoDstFmt1RI4<0x00544015>; 122*06c3fb27SDimitry Andricdef X86ROTLI_W : NoDstFmt1RI5<0x00548016>; 123*06c3fb27SDimitry Andric 124*06c3fb27SDimitry Andricdef X86ROTR_B : NoDstFmt2R<0x003f8000>; 125*06c3fb27SDimitry Andricdef X86ROTR_H : NoDstFmt2R<0x003f8001>; 126*06c3fb27SDimitry Andricdef X86ROTR_W : NoDstFmt2R<0x003f8003>; 127*06c3fb27SDimitry Andricdef X86ROTRI_B : NoDstFmt1RI3<0x0054200c>; 128*06c3fb27SDimitry Andricdef X86ROTRI_H : NoDstFmt1RI4<0x0054400d>; 129*06c3fb27SDimitry Andricdef X86ROTRI_W : NoDstFmt1RI5<0x0054800e>; 130*06c3fb27SDimitry Andric 131*06c3fb27SDimitry Andricdef X86SLL_B : NoDstFmt2R<0x003f0014>; 132*06c3fb27SDimitry Andricdef X86SLL_H : NoDstFmt2R<0x003f0015>; 133*06c3fb27SDimitry Andricdef X86SLL_W : NoDstFmt2R<0x003f0016>; 134*06c3fb27SDimitry Andricdef X86SLLI_B : NoDstFmt1RI3<0x00542000>; 135*06c3fb27SDimitry Andricdef X86SLLI_H : NoDstFmt1RI4<0x00544001>; 136*06c3fb27SDimitry Andricdef X86SLLI_W : NoDstFmt1RI5<0x00548002>; 137*06c3fb27SDimitry Andric 138*06c3fb27SDimitry Andricdef X86SRL_B : NoDstFmt2R<0x003f0018>; 139*06c3fb27SDimitry Andricdef X86SRL_H : NoDstFmt2R<0x003f0019>; 140*06c3fb27SDimitry Andricdef X86SRL_W : NoDstFmt2R<0x003f001a>; 141*06c3fb27SDimitry Andricdef X86SRLI_B : NoDstFmt1RI3<0x00542004>; 142*06c3fb27SDimitry Andricdef X86SRLI_H : NoDstFmt1RI4<0x00544005>; 143*06c3fb27SDimitry Andricdef X86SRLI_W : NoDstFmt1RI5<0x00548006>; 144*06c3fb27SDimitry Andric 145*06c3fb27SDimitry Andricdef X86SRA_B : NoDstFmt2R<0x003f001c>; 146*06c3fb27SDimitry Andricdef X86SRA_H : NoDstFmt2R<0x003f001d>; 147*06c3fb27SDimitry Andricdef X86SRA_W : NoDstFmt2R<0x003f001e>; 148*06c3fb27SDimitry Andricdef X86SRAI_B : NoDstFmt1RI3<0x00542008>; 149*06c3fb27SDimitry Andricdef X86SRAI_H : NoDstFmt1RI4<0x00544009>; 150*06c3fb27SDimitry Andricdef X86SRAI_W : NoDstFmt1RI5<0x0054800a>; 151*06c3fb27SDimitry Andric 152*06c3fb27SDimitry Andricdef SETX86J : Fmt1RI4<0x00368000>; 153*06c3fb27SDimitry Andricdef SETX86LOOPE : ALU_2R<0x00007800>; 154*06c3fb27SDimitry Andricdef SETX86LOOPNE : ALU_2R<0x00007c00>; 155*06c3fb27SDimitry Andricdef X86MFFLAG : Fmt1RI8<0x005c0000>; 156*06c3fb27SDimitry Andricdef X86MTFLAG : Fmt1RI8<0x005c0020>; 157*06c3fb27SDimitry Andricdef X86MFTOP : FmtMFTOP<0x00007400>; 158*06c3fb27SDimitry Andricdef X86MTTOP : FmtMTTOP<0x00007000>; 159*06c3fb27SDimitry Andric 160*06c3fb27SDimitry Andricdef X86INCTOP : FmtI32<0x00008009>; 161*06c3fb27SDimitry Andricdef X86DECTOP : FmtI32<0x00008029>; 162*06c3fb27SDimitry Andricdef X86SETTM : FmtI32<0x00008008>; 163*06c3fb27SDimitry Andricdef X86CLRTM : FmtI32<0x00008028>; 164*06c3fb27SDimitry Andricdef X86SETTAG : Fmt1RI5I8<0x00580000>; 165*06c3fb27SDimitry Andric 166*06c3fb27SDimitry Andricdef ARMADD_W : NoDstFmt2RI4<0x00370010>; 167*06c3fb27SDimitry Andricdef ARMSUB_W : NoDstFmt2RI4<0x00378010>; 168*06c3fb27SDimitry Andricdef ARMADC_W : NoDstFmt2RI4<0x00380010>; 169*06c3fb27SDimitry Andricdef ARMSBC_W : NoDstFmt2RI4<0x00388010>; 170*06c3fb27SDimitry Andricdef ARMAND_W : NoDstFmt2RI4<0x00390010>; 171*06c3fb27SDimitry Andricdef ARMOR_W : NoDstFmt2RI4<0x00398010>; 172*06c3fb27SDimitry Andricdef ARMXOR_W : NoDstFmt2RI4<0x003a0010>; 173*06c3fb27SDimitry Andricdef ARMNOT_W : NoDstFmt1RI4<0x003fc01c>; 174*06c3fb27SDimitry Andricdef ARMSLL_W : NoDstFmt2RI4<0x003a8010>; 175*06c3fb27SDimitry Andricdef ARMSRL_W : NoDstFmt2RI4<0x003b0010>; 176*06c3fb27SDimitry Andricdef ARMSRA_W : NoDstFmt2RI4<0x003b8010>; 177*06c3fb27SDimitry Andricdef ARMROTR_W : NoDstFmt2RI4<0x003c0010>; 178*06c3fb27SDimitry Andricdef ARMSLLI_W : NoDstFmt1RI5I4<0x003c8010>; 179*06c3fb27SDimitry Andricdef ARMSRLI_W : NoDstFmt1RI5I4<0x003d0010>; 180*06c3fb27SDimitry Andricdef ARMSRAI_W : NoDstFmt1RI5I4<0x003d8010>; 181*06c3fb27SDimitry Andricdef ARMROTRI_W : NoDstFmt1RI5I4<0x003e0010>; 182*06c3fb27SDimitry Andricdef ARMRRX_W : NoDstFmt1RI4<0x003fc01f>; 183*06c3fb27SDimitry Andricdef ARMMOVE : Fmt2RI4<0x00364000>; 184*06c3fb27SDimitry Andricdef ARMMOV_W : NoDstFmt1RI4<0x003fc01d>; 185*06c3fb27SDimitry Andric 186*06c3fb27SDimitry Andricdef ARMMFFLAG : Fmt1RI8<0x005c0040>; 187*06c3fb27SDimitry Andricdef ARMMTFLAG : Fmt1RI8<0x005c0060>; 188*06c3fb27SDimitry Andricdef SETARMJ : Fmt1RI4<0x0036c000>; 189*06c3fb27SDimitry Andric 190*06c3fb27SDimitry Andriclet Predicates = [IsLA64] in { 191*06c3fb27SDimitry Andricdef ADDU12I_D : ALU_2RI5<0x00298000, simm5>; 192*06c3fb27SDimitry Andricdef ADC_D : ALU_3R<0x00318000>; 193*06c3fb27SDimitry Andricdef SBC_D : ALU_3R<0x00338000>; 194*06c3fb27SDimitry Andricdef RCR_D : ALU_3R<0x00358000>; 195*06c3fb27SDimitry Andricdef RCRI_D : ALU_2RI6<0x00510000, uimm6>; 196*06c3fb27SDimitry Andric 197*06c3fb27SDimitry Andric// mayLoad = 1 198*06c3fb27SDimitry Andriclet mayLoad = 1 in { 199*06c3fb27SDimitry Andricdef LDL_D : LOAD_2RI12<0x2e800000>; 200*06c3fb27SDimitry Andricdef LDR_D : LOAD_2RI12<0x2ec00000>; 201*06c3fb27SDimitry Andric} // mayLoad = 1 202*06c3fb27SDimitry Andric 203*06c3fb27SDimitry Andriclet mayStore = 1 in { 204*06c3fb27SDimitry Andricdef STL_D : STORE_2RI12<0x2f800000>; 205*06c3fb27SDimitry Andricdef STR_D : STORE_2RI12<0x2fc00000>; 206*06c3fb27SDimitry Andric} // mayStore = 1 207*06c3fb27SDimitry Andric 208*06c3fb27SDimitry Andricdef X86ADC_D : NoDstFmt2R<0x003f000f>; 209*06c3fb27SDimitry Andricdef X86ADD_D : NoDstFmt2R<0x003f0007>; 210*06c3fb27SDimitry Andricdef X86ADD_WU : NoDstFmt2R<0x003f0000>; 211*06c3fb27SDimitry Andricdef X86ADD_DU : NoDstFmt2R<0x003f0001>; 212*06c3fb27SDimitry Andricdef X86INC_D : NoDstFmt1R<0x00008003>; 213*06c3fb27SDimitry Andricdef X86SBC_D : NoDstFmt2R<0x003f0013>; 214*06c3fb27SDimitry Andricdef X86SUB_WU : NoDstFmt2R<0x003f0002>; 215*06c3fb27SDimitry Andricdef X86SUB_D : NoDstFmt2R<0x003f000b>; 216*06c3fb27SDimitry Andricdef X86SUB_DU : NoDstFmt2R<0x003f0003>; 217*06c3fb27SDimitry Andricdef X86DEC_D : NoDstFmt1R<0x00008007>; 218*06c3fb27SDimitry Andricdef X86AND_D : NoDstFmt2R<0x003f8013>; 219*06c3fb27SDimitry Andricdef X86OR_D : NoDstFmt2R<0x003f8017>; 220*06c3fb27SDimitry Andricdef X86XOR_D : NoDstFmt2R<0x003f801b>; 221*06c3fb27SDimitry Andricdef X86MUL_D : NoDstFmt2R<0x003e8003>; 222*06c3fb27SDimitry Andricdef X86MUL_WU : NoDstFmt2R<0x003e8006>; 223*06c3fb27SDimitry Andricdef X86MUL_DU : NoDstFmt2R<0x003e8007>; 224*06c3fb27SDimitry Andricdef X86RCL_D : NoDstFmt2R<0x003f800f>; 225*06c3fb27SDimitry Andricdef X86RCLI_D : NoDstFmt1RI6<0x0055001b>; 226*06c3fb27SDimitry Andricdef X86RCR_D : NoDstFmt2R<0x003f800b>; 227*06c3fb27SDimitry Andricdef X86RCRI_D : NoDstFmt1RI6<0x00550013>; 228*06c3fb27SDimitry Andricdef X86ROTL_D : NoDstFmt2R<0x003f8007>; 229*06c3fb27SDimitry Andricdef X86ROTLI_D : NoDstFmt1RI6<0x00550017>; 230*06c3fb27SDimitry Andricdef X86ROTR_D : NoDstFmt2R<0x003f8002>; 231*06c3fb27SDimitry Andricdef X86ROTRI_D : NoDstFmt1RI6<0x0055000f>; 232*06c3fb27SDimitry Andricdef X86SLL_D : NoDstFmt2R<0x003f0017>; 233*06c3fb27SDimitry Andricdef X86SLLI_D : NoDstFmt1RI6<0x00550003>; 234*06c3fb27SDimitry Andricdef X86SRL_D : NoDstFmt2R<0x003f001b>; 235*06c3fb27SDimitry Andricdef X86SRLI_D : NoDstFmt1RI6<0x00550007>; 236*06c3fb27SDimitry Andricdef X86SRA_D : NoDstFmt2R<0x003f001f>; 237*06c3fb27SDimitry Andricdef X86SRAI_D : NoDstFmt1RI6<0x0055000b>; 238*06c3fb27SDimitry Andricdef ARMMOV_D : NoDstFmt1RI4<0x003fc01e>; 239*06c3fb27SDimitry Andric 240*06c3fb27SDimitry Andric} // Predicates = [IsLA64] 241*06c3fb27SDimitry Andric} // hasSideEffects = 0, mayLoad = 0, mayStore = 0, Predicates = [HasExtLBT] 242