xref: /llvm-project/llvm/lib/Target/PowerPC/PPCInstrDFP.td (revision 4c1e36fa642fe008662719be35d704649996d59b)
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