1c74aec99SStefan Pintilie//===-- PPCInstrDFP.td - PowerPC Decimal Floating Point ----*- tablegen -*-===// 2c74aec99SStefan Pintilie// 3c74aec99SStefan Pintilie// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c74aec99SStefan Pintilie// See https://llvm.org/LICENSE.txt for license information. 5c74aec99SStefan Pintilie// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c74aec99SStefan Pintilie// 7c74aec99SStefan Pintilie//===----------------------------------------------------------------------===// 8c74aec99SStefan Pintilie// 9c74aec99SStefan Pintilie// This file describes the PowerPC Decimal Floating Point (DFP) instructions. 10c74aec99SStefan Pintilie// 11c74aec99SStefan Pintilie//===----------------------------------------------------------------------===// 12c74aec99SStefan Pintilie 13c74aec99SStefan Pintilie// We provide no scheduling info for the DFP instructions. 14c74aec99SStefan Pintilie// While they are not pseudo instructions we don't intend on scheduling them. 15c74aec99SStefan Pintilielet hasNoSchedulingInfo = 1 in { 1694cefe41SStefan Pintilielet mayRaiseFPException = 1, hasSideEffects = 0 in { 1794cefe41SStefan Pintilie 1894cefe41SStefan Pintilielet isCommutable = 1 in { 19c74aec99SStefan Pintiliedefm DADD : XForm_28r<59, 2, (outs f8rc:$RST), (ins f8rc:$RA, f8rc:$RB), 20c74aec99SStefan Pintilie "dadd", "$RST, $RA, $RB", IIC_FPGeneral, []>; 21c74aec99SStefan Pintilie 22c74aec99SStefan Pintiliedefm DADDQ : XForm_28r<63, 2, (outs fpairrc:$RST), (ins fpairrc:$RA, fpairrc:$RB), 23c74aec99SStefan Pintilie "daddq", "$RST, $RA, $RB", IIC_FPGeneral, []>; 2494cefe41SStefan Pintilie} 25c74aec99SStefan Pintilie 26c74aec99SStefan Pintiliedefm DSUB : XForm_28r<59, 514, (outs f8rc:$RST), (ins f8rc:$RA, f8rc:$RB), 27c74aec99SStefan Pintilie "dsub", "$RST, $RA, $RB", IIC_FPGeneral, []>; 28c74aec99SStefan Pintilie 29c74aec99SStefan Pintiliedefm DSUBQ : XForm_28r<63, 514, (outs fpairrc:$RST), (ins fpairrc:$RA, fpairrc:$RB), 30c74aec99SStefan Pintilie "dsubq", "$RST, $RA, $RB", IIC_FPGeneral, []>; 31df367da5SStefan Pintilie 3294cefe41SStefan Pintilielet isCommutable = 1 in { 33df367da5SStefan Pintiliedefm DMUL : XForm_28r<59, 34, (outs f8rc:$RST), (ins f8rc:$RA, f8rc:$RB), 34df367da5SStefan Pintilie "dmul", "$RST, $RA, $RB", IIC_FPGeneral, []>; 35df367da5SStefan Pintilie 36df367da5SStefan Pintiliedefm DMULQ : XForm_28r<63, 34, (outs fpairrc:$RST), (ins fpairrc:$RA, fpairrc:$RB), 37df367da5SStefan Pintilie "dmulq", "$RST, $RA, $RB", IIC_FPGeneral, []>; 3894cefe41SStefan Pintilie} 39df367da5SStefan Pintilie 40df367da5SStefan Pintiliedefm DDIV : XForm_28r<59, 546, (outs f8rc:$RST), (ins f8rc:$RA, f8rc:$RB), 41df367da5SStefan Pintilie "ddiv", "$RST, $RA, $RB", IIC_FPGeneral, []>; 42df367da5SStefan Pintilie 43df367da5SStefan Pintiliedefm DDIVQ : XForm_28r<63, 546, (outs fpairrc:$RST), (ins fpairrc:$RA, fpairrc:$RB), 44df367da5SStefan Pintilie "ddivq", "$RST, $RA, $RB", IIC_FPGeneral, []>; 4594cefe41SStefan Pintilie 4694cefe41SStefan Pintilielet isCompare = 1 in { 4794cefe41SStefan Pintilie def DCMPU : XForm_17<59, 642, (outs crrc:$BF), (ins f8rc:$RA, f8rc:$RB), 4894cefe41SStefan Pintilie "dcmpu $BF, $RA, $RB", IIC_FPCompare>; 4994cefe41SStefan Pintilie 5094cefe41SStefan Pintilie def DCMPUQ : XForm_17<63, 642, (outs crrc:$BF), (ins fpairrc:$RA, fpairrc:$RB), 5194cefe41SStefan Pintilie "dcmpuq $BF, $RA, $RB", IIC_FPCompare>; 5294cefe41SStefan Pintilie 5394cefe41SStefan Pintilie def DCMPO : XForm_17<59, 130, (outs crrc:$BF), (ins f8rc:$RA, f8rc:$RB), 5494cefe41SStefan Pintilie "dcmpo $BF, $RA, $RB", IIC_FPCompare>; 5594cefe41SStefan Pintilie 5694cefe41SStefan Pintilie def DCMPOQ : XForm_17<63, 130, (outs crrc:$BF), (ins fpairrc:$RA, fpairrc:$RB), 5794cefe41SStefan Pintilie "dcmpoq $BF, $RA, $RB", IIC_FPCompare>; 5894cefe41SStefan Pintilie} 59d2291848SLei Huang 60d2291848SLei Huang// 5.6.4 DFP Quantum Adjustment Instructions 61d2291848SLei Huangdefm DQUAI: Z23Form_TE5_FRTB5_RMC2r<59, 67, (outs f8rc:$FRT), 62d2291848SLei Huang (ins s5imm:$TE, f8rc:$FRB, u2imm:$RMC), 63d2291848SLei Huang "dquai", "$TE, $FRT, $FRB, $RMC", []>; 64d2291848SLei Huangdefm DQUAIQ: Z23Form_TE5_FRTB5_RMC2r<63, 67, (outs fpairrc:$FRT), 65d2291848SLei Huang (ins s5imm:$TE, fpairrc:$FRB, u2imm:$RMC), 66d2291848SLei Huang "dquaiq", "$TE, $FRT, $FRB, $RMC", []>; 67d2291848SLei Huangdefm DQUA: Z23Form_FRTAB5_RMC2r<59, 3, (outs f8rc:$FRT), 68d2291848SLei Huang (ins f8rc:$FRA, f8rc:$FRB, u2imm:$RMC), 69d2291848SLei Huang "dqua", "$FRT, $FRA, $FRB, $RMC", []>; 70d2291848SLei Huangdefm DQUAQ: Z23Form_FRTAB5_RMC2r<63, 3, (outs fpairrc:$FRT), 71d2291848SLei Huang (ins fpairrc:$FRA, fpairrc:$FRB, u2imm:$RMC), 72d2291848SLei Huang "dquaq", "$FRT, $FRA, $FRB, $RMC", []>; 73d2291848SLei Huangdefm DRRND: Z23Form_FRTAB5_RMC2r<59, 35, (outs f8rc:$FRT), 74d2291848SLei Huang (ins f8rc:$FRA, f8rc:$FRB, u2imm:$RMC), 75d2291848SLei Huang "drrnd", "$FRT, $FRA, $FRB, $RMC", []>; 76d2291848SLei Huangdefm DRRNDQ: Z23Form_FRTAB5_RMC2r<63, 35, (outs fpairrc:$FRT), 77d2291848SLei Huang (ins f8rc:$FRA, fpairrc:$FRB, u2imm:$RMC), 78d2291848SLei Huang "drrndq", "$FRT, $FRA, $FRB, $RMC", []>; 79d2291848SLei Huangdefm DRINTX: Z23Form_FRTB5_R1_RMC2r<59, 99, (outs f8rc:$FRT), 80d2291848SLei Huang (ins u1imm:$R, f8rc:$FRB, u2imm:$RMC), 81d2291848SLei Huang "drintx", "$R, $FRT, $FRB, $RMC", []>; 82d2291848SLei Huangdefm DRINTXQ: Z23Form_FRTB5_R1_RMC2r<63, 99, (outs fpairrc:$FRT), 83d2291848SLei Huang (ins u1imm:$R, fpairrc:$FRB, u2imm:$RMC), 84d2291848SLei Huang "drintxq", "$R, $FRT, $FRB, $RMC", []>; 85d2291848SLei Huangdefm DRINTN: Z23Form_FRTB5_R1_RMC2r<59, 227, (outs f8rc:$FRT), 86d2291848SLei Huang (ins u1imm:$R, f8rc:$FRB, u2imm:$RMC), 87d2291848SLei Huang "drintn", "$R, $FRT, $FRB, $RMC", []>; 88d2291848SLei Huangdefm DRINTNQ: Z23Form_FRTB5_R1_RMC2r<63, 227, (outs fpairrc:$FRT), 89d2291848SLei Huang (ins u1imm:$R, fpairrc:$FRB, u2imm:$RMC), 90d2291848SLei Huang "drintnq", "$R, $FRT, $FRB, $RMC", []>; 91d2291848SLei Huang 92f2066070SLei Huang// 5.6.5 DFP Conversion Instructions 93f2066070SLei Huangdefm DCTDP: XForm_26r<59, 258, (outs f8rc:$RST), (ins f8rc:$RB), 94f2066070SLei Huang "dctdp", "$RST, $RB", IIC_FPGeneral, []>; 95f2066070SLei Huangdefm DCTQPQ: XForm_26r<63, 258, (outs fpairrc:$RST), (ins f8rc:$RB), 96f2066070SLei Huang "dctqpq", "$RST, $RB", IIC_FPGeneral, []>; 97f2066070SLei Huangdefm DRSP: XForm_26r<59, 770, (outs f8rc:$RST), (ins f8rc:$RB), 98f2066070SLei Huang "drsp", "$RST, $RB", IIC_FPGeneral, []>; 99f2066070SLei Huangdefm DRDPQ: XForm_26r<63, 770, (outs fpairrc:$RST), (ins fpairrc:$RB), 100f2066070SLei Huang "drdpq", "$RST, $RB", IIC_FPGeneral, []>; 101f2066070SLei Huangdefm DCFFIX: XForm_26r<59, 802, (outs f8rc:$RST), (ins f8rc:$RB), 102f2066070SLei Huang "dcffix", "$RST, $RB", IIC_FPGeneral, []>; 103f2066070SLei Huangdefm DCFFIXQ: XForm_26r<63, 802, (outs fpairrc:$RST), (ins f8rc:$RB), 104f2066070SLei Huang "dcffixq", "$RST, $RB", IIC_FPGeneral, []>; 105f2066070SLei Huangdefm DCTFIX: XForm_26r<59, 290, (outs f8rc:$RST), (ins f8rc:$RB), 106f2066070SLei Huang "dctfix", "$RST, $RB", IIC_FPGeneral, []>; 107f2066070SLei Huangdefm DCTFIXQ: XForm_26r<63, 290, (outs f8rc:$RST), (ins fpairrc:$RB), 108f2066070SLei Huang "dctfixq", "$RST, $RB", IIC_FPGeneral, []>; 109f2066070SLei Huanglet Predicates = [HasP10Vector] in { 110f2066070SLei Huang def DCFFIXQQ: XForm_26<63, 994, (outs fpairrc:$RST), (ins vrrc:$RB), 111f2066070SLei Huang "dcffixqq $RST, $RB", IIC_FPGeneral, []>; 112f2066070SLei Huanglet RA = 1 in 113f2066070SLei Huang def DCTFIXQQ: XForm_base_r3xo<63, 994, (outs vrrc:$RST), (ins fpairrc:$RB), 114f2066070SLei Huang "dctfixqq $RST, $RB", IIC_FPGeneral, []>; 115f2066070SLei Huang} // HasP10Vector 116f2066070SLei Huang 117424392b6SLei Huang// 5.6.6 DFP Format Instructions 118424392b6SLei Huangdefm DENBCD: XForm_S1_FRTB5r<59, 834, (outs f8rc:$FRT), 119424392b6SLei Huang (ins u1imm:$S, f8rc:$FRB), 120424392b6SLei Huang "denbcd", "$S, $FRT, $FRB", []>; 121424392b6SLei Huangdefm DENBCDQ: XForm_S1_FRTB5r<63, 834, (outs fpairrc:$FRT), 122424392b6SLei Huang (ins u1imm:$S, fpairrc:$FRB), 123424392b6SLei Huang "denbcdq", "$S, $FRT, $FRB", []>; 124d2291848SLei Huang} // mayRaiseFPException 125424392b6SLei Huang 126424392b6SLei Huang// 5.6.6 DFP none exception raising format instructions. 127424392b6SLei Huangdefm DDEDPD: XForm_SP2_FRTB5r<59, 322, (outs f8rc:$FRT), 128424392b6SLei Huang (ins u2imm:$SP, f8rc:$FRB), 129424392b6SLei Huang "ddedpd", "$SP, $FRT, $FRB", []>; 130424392b6SLei Huangdefm DDEDPDQ: XForm_SP2_FRTB5r<63, 322, (outs fpairrc:$FRT), 131424392b6SLei Huang (ins u2imm:$SP, fpairrc:$FRB), 132424392b6SLei Huang "ddedpdq", "$SP, $FRT, $FRB", []>; 133424392b6SLei Huangdefm DXEX: XForm_26r<59, 354, (outs f8rc:$RST), (ins f8rc:$RB), 134424392b6SLei Huang "dxex", "$RST, $RB", NoItinerary, []>; 135424392b6SLei Huangdefm DXEXQ: XForm_26r<63, 354, (outs f8rc:$RST), (ins fpairrc:$RB), 136424392b6SLei Huang "dxexq", "$RST, $RB", NoItinerary, []>; 137424392b6SLei Huangdefm DIEX: XForm_base_r3xo_r<59, 866, (outs f8rc:$RST), 138424392b6SLei Huang (ins f8rc:$RA, f8rc:$RB), 139424392b6SLei Huang "diex", "$RST, $RA, $RB", []>; 140424392b6SLei Huangdefm DIEXQ: XForm_base_r3xo_r<63, 866, (outs fpairrc:$RST), 141424392b6SLei Huang (ins f8rc:$RA, fpairrc:$RB), 142424392b6SLei Huang "diexq", "$RST, $RA, $RB", []>; 143424392b6SLei Huangdefm DSCLI: Z22Form_FRTA5_SH6r<59, 66, (outs f8rc:$FRT), 144424392b6SLei Huang (ins f8rc:$FRA, u6imm:$SH), 145424392b6SLei Huang "dscli", "$FRT, $FRA, $SH", []>; 146424392b6SLei Huangdefm DSCLIQ: Z22Form_FRTA5_SH6r<63, 66, (outs fpairrc:$FRT), 147424392b6SLei Huang (ins fpairrc:$FRA, u6imm:$SH), 148424392b6SLei Huang "dscliq", "$FRT, $FRA, $SH", []>; 149424392b6SLei Huangdefm DSCRI: Z22Form_FRTA5_SH6r<59, 98, (outs f8rc:$FRT), 150424392b6SLei Huang (ins f8rc:$FRA, u6imm:$SH), 151424392b6SLei Huang "dscri", "$FRT, $FRA, $SH", []>; 152424392b6SLei Huangdefm DSCRIQ: Z22Form_FRTA5_SH6r<63, 98, (outs fpairrc:$FRT), 153424392b6SLei Huang (ins fpairrc:$FRA, u6imm:$SH), 154424392b6SLei Huang "dscriq", "$FRT, $FRA, $SH", []>; 155*4c1e36faSKamau Bridgeman 156*4c1e36faSKamau Bridgeman// 5.6.3 DFP Test Instructions 157*4c1e36faSKamau Bridgemandef DTSTDC : Z22Form_BF3_FRA5_DCM6<59, 194, (outs crrc:$BF), 158*4c1e36faSKamau Bridgeman (ins f8rc:$FRA, u6imm:$DCM), 159*4c1e36faSKamau Bridgeman "dtstdc $BF, $FRA, $DCM", IIC_FPCompare, []>; 160*4c1e36faSKamau Bridgeman 161*4c1e36faSKamau Bridgemandef DTSTDCQ : Z22Form_BF3_FRA5_DCM6<63, 194, (outs crrc:$BF), 162*4c1e36faSKamau Bridgeman (ins fpairrc:$FRA, u6imm:$DCM), 163*4c1e36faSKamau Bridgeman "dtstdcq $BF, $FRA, $DCM", IIC_FPCompare, []>; 164*4c1e36faSKamau Bridgeman 165*4c1e36faSKamau Bridgemandef DTSTDG : Z22Form_BF3_FRA5_DCM6<59, 226, (outs crrc:$BF), 166*4c1e36faSKamau Bridgeman (ins f8rc:$FRA, u6imm:$DCM), 167*4c1e36faSKamau Bridgeman "dtstdg $BF, $FRA, $DCM", IIC_FPCompare, []>; 168*4c1e36faSKamau Bridgeman 169*4c1e36faSKamau Bridgemandef DTSTDGQ : Z22Form_BF3_FRA5_DCM6<63, 226, (outs crrc:$BF), 170*4c1e36faSKamau Bridgeman (ins fpairrc:$FRA, u6imm:$DCM), 171*4c1e36faSKamau Bridgeman "dtstdgq $BF, $FRA, $DCM", IIC_FPCompare, []>; 172*4c1e36faSKamau Bridgeman 173*4c1e36faSKamau Bridgemandef DTSTEX : XForm_17<59, 162, (outs crrc:$BF), (ins f8rc:$RA, f8rc:$RB), 174*4c1e36faSKamau Bridgeman "dtstex $BF, $RA, $RB", IIC_FPCompare>; 175*4c1e36faSKamau Bridgeman 176*4c1e36faSKamau Bridgemandef DTSTEXQ : XForm_17<63, 162, (outs crrc:$BF), (ins fpairrc:$RA, fpairrc:$RB), 177*4c1e36faSKamau Bridgeman "dtstexq $BF, $RA, $RB", IIC_FPCompare>; 178*4c1e36faSKamau Bridgeman 179*4c1e36faSKamau Bridgemandef DTSTSF : XForm_17<59, 674, (outs crrc:$BF), (ins f8rc:$RA, f8rc:$RB), 180*4c1e36faSKamau Bridgeman "dtstsf $BF, $RA, $RB", IIC_FPCompare>; 181*4c1e36faSKamau Bridgeman 182*4c1e36faSKamau Bridgemandef DTSTSFQ : XForm_17<63, 674, (outs crrc:$BF), (ins f8rc:$RA, fpairrc:$RB), 183*4c1e36faSKamau Bridgeman "dtstsfq $BF, $RA, $RB", IIC_FPCompare>; 184*4c1e36faSKamau Bridgeman 185*4c1e36faSKamau Bridgemandef DTSTSFI : XForm_BF3_UIM6_FRB5<59, 675, (outs crrc:$BF), 186*4c1e36faSKamau Bridgeman (ins u6imm:$UIM, f8rc:$FRB), 187*4c1e36faSKamau Bridgeman "dtstsfi $BF, $UIM, $FRB", IIC_FPCompare, []>; 188*4c1e36faSKamau Bridgeman 189*4c1e36faSKamau Bridgemandef DTSTSFIQ : XForm_BF3_UIM6_FRB5<63, 675, (outs crrc:$BF), 190*4c1e36faSKamau Bridgeman (ins u6imm:$UIM, fpairrc:$FRB), 191*4c1e36faSKamau Bridgeman "dtstsfiq $BF, $UIM, $FRB", IIC_FPCompare, []>; 192*4c1e36faSKamau Bridgeman 193d2291848SLei Huang} // hasNoSchedulingInfo 194