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