1*04eeddc0SDimitry Andric//===- CSKYInstrFormatsF1.td - CSKY Float1.0 Instr Format --*- tablegen -*-===// 2*04eeddc0SDimitry Andric// 3*04eeddc0SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*04eeddc0SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*04eeddc0SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*04eeddc0SDimitry Andric// 7*04eeddc0SDimitry Andric//===----------------------------------------------------------------------===// 8*04eeddc0SDimitry Andric// 9*04eeddc0SDimitry Andric// CSKY Instruction Format Float1.0 Definitions. 10*04eeddc0SDimitry Andric// 11*04eeddc0SDimitry Andric//===----------------------------------------------------------------------===// 12*04eeddc0SDimitry Andric 13*04eeddc0SDimitry Andricclass CSKYFP1Inst<dag outs, dag ins, string asmstr, list<dag> pattern> 14*04eeddc0SDimitry Andric : CSKY32Inst<AddrModeNone, 0x3d, outs, ins, asmstr, pattern>, Requires<[HasFPUv2_SF]> { 15*04eeddc0SDimitry Andric} 16*04eeddc0SDimitry Andric 17*04eeddc0SDimitry Andricclass F_XYZ_BASE<bits<5> datatype, bits<6> sop, dag outs, dag ins, string opcodestr, list<dag> pattern> 18*04eeddc0SDimitry Andric : CSKYFP1Inst<outs, ins, opcodestr, pattern> { 19*04eeddc0SDimitry Andric bits<4> vrx; 20*04eeddc0SDimitry Andric bits<4> vry; 21*04eeddc0SDimitry Andric bits<4> vrz; 22*04eeddc0SDimitry Andric let Inst{25 - 21} = {0, vry}; 23*04eeddc0SDimitry Andric let Inst{20 - 16} = {0, vrx}; 24*04eeddc0SDimitry Andric let Inst{15 - 11} = datatype; 25*04eeddc0SDimitry Andric let Inst{10 - 5} = sop; 26*04eeddc0SDimitry Andric let Inst{4 - 0} = {0, vrz}; 27*04eeddc0SDimitry Andric} 28*04eeddc0SDimitry Andric 29*04eeddc0SDimitry Andricclass F_XZ_GF<bits<5> datatype, bits<6> sop, dag outs, dag ins, string opcodestr, list<dag> pattern> 30*04eeddc0SDimitry Andric : CSKYFP1Inst<outs, ins, opcodestr, pattern> { 31*04eeddc0SDimitry Andric bits<4> vrx; 32*04eeddc0SDimitry Andric bits<5> rz; 33*04eeddc0SDimitry Andric let Inst{25 - 21} = 0; 34*04eeddc0SDimitry Andric let Inst{20 - 16} = {0, vrx}; 35*04eeddc0SDimitry Andric let Inst{15 - 11} = datatype; 36*04eeddc0SDimitry Andric let Inst{10 - 5} = sop; 37*04eeddc0SDimitry Andric let Inst{4 - 0} = {rz}; 38*04eeddc0SDimitry Andric} 39*04eeddc0SDimitry Andric 40*04eeddc0SDimitry Andricclass F_XZ_FG<bits<5> datatype, bits<6> sop, dag outs, dag ins, string opcodestr, list<dag> pattern> 41*04eeddc0SDimitry Andric : CSKYFP1Inst<outs, ins, opcodestr, pattern> { 42*04eeddc0SDimitry Andric bits<5> rx; 43*04eeddc0SDimitry Andric bits<4> vrz; 44*04eeddc0SDimitry Andric let Inst{25 - 21} = 0; 45*04eeddc0SDimitry Andric let Inst{20 - 16} = {rx}; 46*04eeddc0SDimitry Andric let Inst{15 - 11} = datatype; 47*04eeddc0SDimitry Andric let Inst{10 - 5} = sop; 48*04eeddc0SDimitry Andric let Inst{4 - 0} = {0, vrz}; 49*04eeddc0SDimitry Andric} 50*04eeddc0SDimitry Andric 51*04eeddc0SDimitry Andricclass F_XZ_TRANS_FROM<bits<6> sop, string op, RegisterOperand regtype1, RegisterOperand regtype2> 52*04eeddc0SDimitry Andric : F_XZ_GF<3, sop, (outs regtype1:$rz), (ins regtype2:$vrx), !strconcat(op, "\t$rz, $vrx"), 53*04eeddc0SDimitry Andric []>; 54*04eeddc0SDimitry Andric 55*04eeddc0SDimitry Andricclass F_XZ_TRANS_TO<bits<6> sop, string op, RegisterOperand regtype1, RegisterOperand regtype2> 56*04eeddc0SDimitry Andric : F_XZ_FG<3, sop, (outs regtype1:$vrz), (ins regtype2:$rx), !strconcat(op, "\t$vrz, $rx"), 57*04eeddc0SDimitry Andric []>; 58*04eeddc0SDimitry Andric 59*04eeddc0SDimitry Andriclet vry = 0 in { 60*04eeddc0SDimitry Andricclass F_XZ<bits<5> datatype, bits<6> sop, string op, string op_su, PatFrag opnode, RegisterOperand regtype> 61*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs regtype:$vrz), (ins regtype:$vrx), !strconcat(op#op_su, "\t$vrz, $vrx"), 62*04eeddc0SDimitry Andric [(set regtype:$vrz, (opnode regtype:$vrx))]>; 63*04eeddc0SDimitry Andric 64*04eeddc0SDimitry Andricclass F_MOV<bits<5> datatype, bits<6> sop, string op, string op_su, RegisterOperand regtype> 65*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs regtype:$vrz), (ins regtype:$vrx), !strconcat(op#op_su, "\t$vrz, $vrx"), 66*04eeddc0SDimitry Andric []>; 67*04eeddc0SDimitry Andric 68*04eeddc0SDimitry Andricclass F_XZ_TRANS<bits<6> sop, string op, RegisterOperand regtype1, RegisterOperand regtype2> 69*04eeddc0SDimitry Andric : F_XYZ_BASE<3, sop, (outs regtype1:$vrz), (ins regtype2:$vrx), !strconcat(op, "\t$vrz, $vrx"), 70*04eeddc0SDimitry Andric []>; 71*04eeddc0SDimitry Andric 72*04eeddc0SDimitry Andricclass F_XZ_TRANS_DS<bits<6> sop, string op, PatFrag opnode> 73*04eeddc0SDimitry Andric : F_XYZ_BASE<3, sop, (outs sFPR32Op:$vrz), (ins sFPR64Op:$vrx), !strconcat(op, "\t$vrz, $vrx"), 74*04eeddc0SDimitry Andric [(set sFPR32Op:$vrz, (opnode sFPR64Op:$vrx))]>; 75*04eeddc0SDimitry Andric 76*04eeddc0SDimitry Andricclass F_XZ_TRANS_SD<bits<6> sop, string op, PatFrag opnode> 77*04eeddc0SDimitry Andric : F_XYZ_BASE<3, sop, (outs sFPR64Op:$vrz), (ins sFPR32Op:$vrx), !strconcat(op, "\t$vrz, $vrx"), 78*04eeddc0SDimitry Andric [(set sFPR64Op:$vrz, (opnode sFPR32Op:$vrx))]>; 79*04eeddc0SDimitry Andric} 80*04eeddc0SDimitry Andric 81*04eeddc0SDimitry Andricmulticlass FT_MOV<bits<6> sop, string op> { 82*04eeddc0SDimitry Andric def _S : F_MOV<0, sop, op, "s", sFPR32Op>; 83*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 84*04eeddc0SDimitry Andric def _D : F_MOV<1, sop, op, "d", sFPR64Op>; 85*04eeddc0SDimitry Andric} 86*04eeddc0SDimitry Andric 87*04eeddc0SDimitry Andricmulticlass FT_XZ<bits<6> sop, string op, PatFrag opnode> { 88*04eeddc0SDimitry Andric def _S : F_XZ<0, sop, op, "s", opnode, sFPR32Op>; 89*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 90*04eeddc0SDimitry Andric def _D : F_XZ<1, sop, op, "d", opnode, sFPR64Op>; 91*04eeddc0SDimitry Andric} 92*04eeddc0SDimitry Andric 93*04eeddc0SDimitry Andriclet vrz = 0, isCompare = 1 in { 94*04eeddc0SDimitry Andricclass F_CMPXY<bits<5> datatype, bits<6> sop, string op, string op_su, RegisterOperand regtype> 95*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs CARRY:$ca), (ins regtype:$vrx, regtype:$vry), !strconcat(op#op_su, "\t$vrx, $vry"), 96*04eeddc0SDimitry Andric []>; 97*04eeddc0SDimitry Andric 98*04eeddc0SDimitry Andriclet vry = 0 in{ 99*04eeddc0SDimitry Andricclass F_CMPZX<bits<5> datatype, bits<6> sop, string op, string op_su, RegisterOperand regtype> 100*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs CARRY:$ca), (ins regtype:$vrx), !strconcat(op#op_su, "\t$vrx"), 101*04eeddc0SDimitry Andric []>; 102*04eeddc0SDimitry Andric} 103*04eeddc0SDimitry Andric} 104*04eeddc0SDimitry Andric 105*04eeddc0SDimitry Andricclass F_XYZ<bits<5> datatype, bits<6> sop, string op, string op_su, PatFrag opnode, RegisterOperand regtype> 106*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs regtype:$vrz), (ins regtype:$vrx, regtype:$vry), 107*04eeddc0SDimitry Andric !strconcat(op#op_su, "\t$vrz, $vrx, $vry"), 108*04eeddc0SDimitry Andric [(set regtype:$vrz, (opnode regtype:$vrx, regtype:$vry))]>; 109*04eeddc0SDimitry Andric 110*04eeddc0SDimitry Andricmulticlass FT_XYZ<bits<6> sop, string op, PatFrag opnode> { 111*04eeddc0SDimitry Andric def _S : F_XYZ<0, sop, op, "s", opnode, sFPR32Op>; 112*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 113*04eeddc0SDimitry Andric def _D : F_XYZ<1, sop, op, "d", opnode, sFPR64Op>; 114*04eeddc0SDimitry Andric} 115*04eeddc0SDimitry Andric 116*04eeddc0SDimitry Andriclet Constraints = "$vrt = $vrz" in { 117*04eeddc0SDimitry Andricclass F_ACCUM_XYZ<bits<5> datatype, bits<6> sop, string op, string op_su, PatFrag opnode, RegisterOperand regtype> 118*04eeddc0SDimitry Andric : F_XYZ_BASE<datatype, sop, (outs regtype:$vrz), (ins regtype:$vrt, regtype:$vrx, regtype:$vry), 119*04eeddc0SDimitry Andric !strconcat(op#op_su, "\t$vrz, $vrx, $vry"), 120*04eeddc0SDimitry Andric [(set regtype:$vrz, (opnode regtype:$vrt, regtype:$vrx, regtype:$vry))]>; 121*04eeddc0SDimitry Andric} 122*04eeddc0SDimitry Andric 123*04eeddc0SDimitry Andricmulticlass FT_ACCUM_XYZ<bits<6> sop, string op, PatFrag opnode> { 124*04eeddc0SDimitry Andric def _S : F_ACCUM_XYZ<0, sop, op, "s", opnode, sFPR32Op>; 125*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 126*04eeddc0SDimitry Andric def _D : F_ACCUM_XYZ<1, sop, op, "d", opnode, sFPR64Op>; 127*04eeddc0SDimitry Andric} 128*04eeddc0SDimitry Andric 129*04eeddc0SDimitry Andricmulticlass FT_CMPXY<bits<6> sop, string op> { 130*04eeddc0SDimitry Andric def _S : F_CMPXY<0, sop, op, "s", sFPR32Op>; 131*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 132*04eeddc0SDimitry Andric def _D : F_CMPXY<1, sop, op, "d", sFPR64Op>; 133*04eeddc0SDimitry Andric} 134*04eeddc0SDimitry Andric 135*04eeddc0SDimitry Andric 136*04eeddc0SDimitry Andricmulticlass FT_CMPZX<bits<6> sop, string op> { 137*04eeddc0SDimitry Andric def _S : F_CMPZX<0, sop, op, "s", sFPR32Op>; 138*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 139*04eeddc0SDimitry Andric def _D : F_CMPZX<1, sop, op, "d", sFPR64Op>; 140*04eeddc0SDimitry Andric} 141*04eeddc0SDimitry Andric 142*04eeddc0SDimitry Andricclass F_I8_XY_MEM<bits<7> sop, bits<1> sop_su, dag outs, dag ins, string opcodestr, list<dag> pattern> 143*04eeddc0SDimitry Andric : CSKY32Inst<AddrMode32SDF, 0x3d, outs, ins, opcodestr, pattern> { 144*04eeddc0SDimitry Andric bits<5> rx; 145*04eeddc0SDimitry Andric bits<4> vrz; 146*04eeddc0SDimitry Andric bits<8> imm8; 147*04eeddc0SDimitry Andric let Inst{25} = 0; 148*04eeddc0SDimitry Andric let Inst{24 - 21} = imm8{7 - 4}; //imm4h 149*04eeddc0SDimitry Andric let Inst{20 - 16} = rx; //rx 150*04eeddc0SDimitry Andric let Inst{15 - 9} = sop; 151*04eeddc0SDimitry Andric let Inst{8} = sop_su; 152*04eeddc0SDimitry Andric let Inst{7 - 4} = imm8{3 - 0}; // imm4l 153*04eeddc0SDimitry Andric let Inst{3 - 0} = vrz; 154*04eeddc0SDimitry Andric} 155*04eeddc0SDimitry Andric 156*04eeddc0SDimitry Andricclass F_I4_XY_MEM<bits<7> sop, bits<1> sop_su, dag outs, dag ins, string opcodestr, list<dag> pattern> 157*04eeddc0SDimitry Andric : CSKY32Inst<AddrMode32SDF, 0x3d, outs, ins, opcodestr, pattern> { 158*04eeddc0SDimitry Andric bits<10> regs; 159*04eeddc0SDimitry Andric bits<5> rx; 160*04eeddc0SDimitry Andric 161*04eeddc0SDimitry Andric let Inst{25} = 0; 162*04eeddc0SDimitry Andric let Inst{24 - 21} = regs{3-0}; //imm4 163*04eeddc0SDimitry Andric let Inst{20 - 16} = rx; //rx 164*04eeddc0SDimitry Andric let Inst{15 - 9} = sop; 165*04eeddc0SDimitry Andric let Inst{8} = sop_su; 166*04eeddc0SDimitry Andric let Inst{7 - 4} = 0; 167*04eeddc0SDimitry Andric let Inst{3 - 0} = regs{8-5}; 168*04eeddc0SDimitry Andric} 169*04eeddc0SDimitry Andric 170*04eeddc0SDimitry Andricclass F_I8_Z_MEM<bits<7> sop, bits<1> sop_su, dag outs, dag ins, string opcodestr, list<dag> pattern> 171*04eeddc0SDimitry Andric : CSKY32Inst<AddrModeNone, 0x3d, outs, ins, opcodestr, pattern> { 172*04eeddc0SDimitry Andric bits<4> vrz; 173*04eeddc0SDimitry Andric bits<8> imm8; 174*04eeddc0SDimitry Andric let Inst{25} = 0; 175*04eeddc0SDimitry Andric let Inst{24 - 21} = imm8{7 - 4}; //imm4h 176*04eeddc0SDimitry Andric let Inst{20 - 16} = 0; //rx 177*04eeddc0SDimitry Andric let Inst{15 - 9} = sop; 178*04eeddc0SDimitry Andric let Inst{8} = sop_su; 179*04eeddc0SDimitry Andric let Inst{7 - 4} = imm8{3 - 0}; // imm4l 180*04eeddc0SDimitry Andric let Inst{3 - 0} = vrz; 181*04eeddc0SDimitry Andric} 182*04eeddc0SDimitry Andric 183*04eeddc0SDimitry Andricclass F_XYZ_MEM<bits<7> sop, bits<1> sop_su, dag outs, dag ins, string opcodestr, list<dag> pattern> 184*04eeddc0SDimitry Andric : CSKY32Inst<AddrModeNone, 0x3d, outs, ins, opcodestr, pattern> { 185*04eeddc0SDimitry Andric bits<5> rx; 186*04eeddc0SDimitry Andric bits<5> ry; 187*04eeddc0SDimitry Andric bits<4> vrz; 188*04eeddc0SDimitry Andric bits<2> imm; 189*04eeddc0SDimitry Andric 190*04eeddc0SDimitry Andric let Inst{25 - 21} = ry; // ry; 191*04eeddc0SDimitry Andric let Inst{20 - 16} = rx; // rx; 192*04eeddc0SDimitry Andric let Inst{15 - 9} = sop; 193*04eeddc0SDimitry Andric let Inst{8} = sop_su; 194*04eeddc0SDimitry Andric let Inst{7} = 0; 195*04eeddc0SDimitry Andric let Inst{6,5} = imm; // shift; 196*04eeddc0SDimitry Andric let Inst{4} = 0; 197*04eeddc0SDimitry Andric let Inst{3 - 0} = vrz; 198*04eeddc0SDimitry Andric} 199*04eeddc0SDimitry Andric 200*04eeddc0SDimitry Andricclass F_XYAI_LD<bits<7> sop, bits<1> sop_su, string op, string op_su, 201*04eeddc0SDimitry Andric RegisterOperand regtype, Operand operand> 202*04eeddc0SDimitry Andric : F_I8_XY_MEM<sop, sop_su, (outs regtype:$vrz), (ins GPR:$rx, operand:$imm8), 203*04eeddc0SDimitry Andric !strconcat(op#op_su, "\t$vrz, ($rx, ${imm8})"), []>; 204*04eeddc0SDimitry Andric 205*04eeddc0SDimitry Andricclass F_XYAR_LD<bits<7> sop, bits<1> sop_su, string op, string op_su, 206*04eeddc0SDimitry Andric RegisterOperand regtype> 207*04eeddc0SDimitry Andric : F_XYZ_MEM<sop, sop_su, (outs regtype:$vrz), (ins GPR:$rx, GPR:$ry, uimm2:$imm), 208*04eeddc0SDimitry Andric op#op_su#"\t$vrz, ($rx, $ry << ${imm})", []>; 209*04eeddc0SDimitry Andric 210*04eeddc0SDimitry Andricclass F_XYAI_ST<bits<7> sop, bits<1> sop_su, string op, string op_su, 211*04eeddc0SDimitry Andric RegisterOperand regtype, Operand operand> 212*04eeddc0SDimitry Andric : F_I8_XY_MEM<sop, sop_su, (outs), (ins regtype:$vrz, GPR:$rx, operand:$imm8), 213*04eeddc0SDimitry Andric !strconcat(op#op_su, "\t$vrz, ($rx, ${imm8})"), []>; 214*04eeddc0SDimitry Andric 215*04eeddc0SDimitry Andricclass F_XYAR_ST<bits<7> sop, bits<1> sop_su, string op, string op_su, 216*04eeddc0SDimitry Andric RegisterOperand regtype> 217*04eeddc0SDimitry Andric : F_XYZ_MEM<sop, sop_su, (outs), (ins regtype:$vrz, GPR:$rx, GPR:$ry, uimm2:$imm), 218*04eeddc0SDimitry Andric op#op_su#"\t$vrz, ($rx, $ry << ${imm})", []>; 219*04eeddc0SDimitry Andric 220*04eeddc0SDimitry Andricdef Mem8SL2 : Operand<iPTR>, ComplexPattern<iPTR, 2, "SelectAddrRegImm8", []> { 221*04eeddc0SDimitry Andric let MIOperandInfo = (ops GPR, i32imm); 222*04eeddc0SDimitry Andric let PrintMethod = "printAddrModeRegImmOperand"; 223*04eeddc0SDimitry Andric let EncoderMethod = "getAddrModeFloatImm8_sl2OpValue"; 224*04eeddc0SDimitry Andric} 225*04eeddc0SDimitry Andric 226*04eeddc0SDimitry Andricdef FRRS : Operand<iPTR>, ComplexPattern<iPTR, 3, "SelectAddrRegReg", []> { 227*04eeddc0SDimitry Andric let MIOperandInfo = (ops GPR, GPR, i32imm); 228*04eeddc0SDimitry Andric let PrintMethod = "printAddrModeRegRegSLOperand"; 229*04eeddc0SDimitry Andric let EncoderMethod = "getAddrModeFloatRegRegSLOpValue"; 230*04eeddc0SDimitry Andric} 231*04eeddc0SDimitry Andric 232*04eeddc0SDimitry Andricmulticlass FT_XYAI_LD<bits<7> sop, string op> { 233*04eeddc0SDimitry Andric def _S : F_XYAI_LD<sop, 0, op, "s", sFPR32Op, uimm8_2>; 234*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 235*04eeddc0SDimitry Andric def _D : F_XYAI_LD<sop, 1, op, "d", sFPR64Op, uimm8_2>; 236*04eeddc0SDimitry Andric} 237*04eeddc0SDimitry Andric 238*04eeddc0SDimitry Andricmulticlass FT_XYAR_LD<bits<7> sop, string op> { 239*04eeddc0SDimitry Andric def _S : F_XYAR_LD<sop, 0, op, "s", sFPR32Op>; 240*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 241*04eeddc0SDimitry Andric def _D : F_XYAR_LD<sop, 1, op, "d", sFPR64Op>; 242*04eeddc0SDimitry Andric} 243*04eeddc0SDimitry Andric 244*04eeddc0SDimitry Andricmulticlass FT_XYAI_ST<bits<7> sop, string op> { 245*04eeddc0SDimitry Andric def _S : F_XYAI_ST<sop, 0, op, "s", sFPR32Op, uimm8_2>; 246*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 247*04eeddc0SDimitry Andric def _D : F_XYAI_ST<sop, 1, op, "d", sFPR64Op, uimm8_2>; 248*04eeddc0SDimitry Andric} 249*04eeddc0SDimitry Andric 250*04eeddc0SDimitry Andricmulticlass FT_XYAR_ST<bits<7> sop, string op> { 251*04eeddc0SDimitry Andric def _S : F_XYAR_ST<sop, 0, op, "s", sFPR32Op>; 252*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 253*04eeddc0SDimitry Andric def _D : F_XYAR_ST<sop, 1, op, "d", sFPR64Op>; 254*04eeddc0SDimitry Andric} 255*04eeddc0SDimitry Andric 256*04eeddc0SDimitry Andricmulticlass FT_XYAR_STM<bits<7> sop, string op> { 257*04eeddc0SDimitry Andric def _S : F_I4_XY_MEM<sop, 0, (outs), 258*04eeddc0SDimitry Andric (ins GPR:$rx, regseq_f1:$regs, variable_ops), 259*04eeddc0SDimitry Andric !strconcat(op#"s", "\t$regs, (${rx})"), []>; 260*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 261*04eeddc0SDimitry Andric def _D : F_I4_XY_MEM<sop, 1, (outs), 262*04eeddc0SDimitry Andric (ins GPR:$rx, regseq_d1:$regs, variable_ops), 263*04eeddc0SDimitry Andric !strconcat(op#"d", "\t$regs, (${rx})"), []>; 264*04eeddc0SDimitry Andric} 265*04eeddc0SDimitry Andric 266*04eeddc0SDimitry Andricmulticlass FT_XYAR_LDM<bits<7> sop, string op> { 267*04eeddc0SDimitry Andric def _S : F_I4_XY_MEM<sop, 0, (outs), 268*04eeddc0SDimitry Andric (ins GPR:$rx, regseq_f1:$regs, variable_ops), 269*04eeddc0SDimitry Andric !strconcat(op#"s", "\t$regs, (${rx})"), []>; 270*04eeddc0SDimitry Andric let Predicates = [HasFPUv2_DF] in 271*04eeddc0SDimitry Andric def _D : F_I4_XY_MEM<sop, 1, (outs), 272*04eeddc0SDimitry Andric (ins GPR:$rx, regseq_d1:$regs, variable_ops), 273*04eeddc0SDimitry Andric !strconcat(op#"d", "\t$regs, (${rx})"), []>; 274*04eeddc0SDimitry Andric} 275