242 lines · plain
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file describes the LBT extension instructions.10//11//===----------------------------------------------------------------------===//12 13//===----------------------------------------------------------------------===//14// Instructions15//===----------------------------------------------------------------------===//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 = 157 58let mayStore = 1 in {59def STL_W : STORE_2RI12<0x2f000000>;60def STR_W : STORE_2RI12<0x2f400000>;61} // mayStore = 162 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 = 1198let mayLoad = 1 in {199def LDL_D : LOAD_2RI12<0x2e800000>;200def LDR_D : LOAD_2RI12<0x2ec00000>;201} // mayLoad = 1202 203let mayStore = 1 in {204def STL_D : STORE_2RI12<0x2f800000>;205def STR_D : STORE_2RI12<0x2fc00000>;206} // mayStore = 1207 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