xref: /aosp_15_r20/external/llvm/lib/Target/Sparc/SparcInstrVIS.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===---- SparcInstrVIS.td - Visual Instruction Set extensions (VIS) -----===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file contains instruction formats, definitions and patterns needed for
11*9880d681SAndroid Build Coastguard Worker// VIS, VIS II, VIS II instructions on SPARC.
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// VIS Instruction Format.
15*9880d681SAndroid Build Coastguard Workerclass VISInstFormat<bits<9> opfval, dag outs, dag ins, string asmstr,
16*9880d681SAndroid Build Coastguard Worker      list<dag> pattern>
17*9880d681SAndroid Build Coastguard Worker      : F3_3<0b10, 0b110110, opfval, outs, ins, asmstr, pattern>;
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerclass VISInst<bits<9> opfval, string OpcStr, RegisterClass RC = DFPRegs>
20*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval,
21*9880d681SAndroid Build Coastguard Worker        (outs RC:$rd), (ins RC:$rs1, RC:$rs2),
22*9880d681SAndroid Build Coastguard Worker        !strconcat(OpcStr, " $rs1, $rs2, $rd"), []>;
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker// VIS Instruction with integer destination register.
25*9880d681SAndroid Build Coastguard Workerclass VISInstID<bits<9> opfval, string OpcStr>
26*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval,
27*9880d681SAndroid Build Coastguard Worker        (outs I64Regs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
28*9880d681SAndroid Build Coastguard Worker        !strconcat(OpcStr, " $rs1, $rs2, $rd"), []>;
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker// For VIS Instructions with no operand.
31*9880d681SAndroid Build Coastguard Workerlet rd = 0, rs1 = 0, rs2 = 0 in
32*9880d681SAndroid Build Coastguard Workerclass VISInst0<bits<9> opfval, string asmstr>
33*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval, (outs), (ins), asmstr, []>;
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker// For VIS Instructions with only rs1, rd operands.
36*9880d681SAndroid Build Coastguard Workerlet rs2 = 0 in
37*9880d681SAndroid Build Coastguard Workerclass VISInst1<bits<9> opfval, string OpcStr, RegisterClass RC = DFPRegs>
38*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval,
39*9880d681SAndroid Build Coastguard Worker        (outs RC:$rd), (ins RC:$rs1),
40*9880d681SAndroid Build Coastguard Worker        !strconcat(OpcStr, " $rs1, $rd"), []>;
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker// For VIS Instructions with only rs2, rd operands.
43*9880d681SAndroid Build Coastguard Workerlet rs1 = 0 in
44*9880d681SAndroid Build Coastguard Workerclass VISInst2<bits<9> opfval, string OpcStr, RegisterClass RC = DFPRegs>
45*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval,
46*9880d681SAndroid Build Coastguard Worker        (outs RC:$rd), (ins RC:$rs2),
47*9880d681SAndroid Build Coastguard Worker        !strconcat(OpcStr, " $rs2, $rd"), []>;
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker// For VIS Instructions with only rd operand.
50*9880d681SAndroid Build Coastguard Workerlet Constraints = "$rd = $f", rs1 = 0, rs2 = 0 in
51*9880d681SAndroid Build Coastguard Workerclass VISInstD<bits<9> opfval, string OpcStr, RegisterClass RC = DFPRegs>
52*9880d681SAndroid Build Coastguard Worker       : VISInstFormat<opfval,
53*9880d681SAndroid Build Coastguard Worker        (outs RC:$rd), (ins RC:$f),
54*9880d681SAndroid Build Coastguard Worker        !strconcat(OpcStr, " $rd"), []>;
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker// VIS 1 Instructions
57*9880d681SAndroid Build Coastguard Workerlet Predicates = [HasVIS] in {
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdef FPADD16     : VISInst<0b001010000, "fpadd16">;
60*9880d681SAndroid Build Coastguard Workerdef FPADD16S    : VISInst<0b001010001, "fpadd16s">;
61*9880d681SAndroid Build Coastguard Workerdef FPADD32     : VISInst<0b001010010, "fpadd32">;
62*9880d681SAndroid Build Coastguard Workerdef FPADD32S    : VISInst<0b001010011, "fpadd32s">;
63*9880d681SAndroid Build Coastguard Workerdef FPSUB16     : VISInst<0b001010100, "fpsub16">;
64*9880d681SAndroid Build Coastguard Workerdef FPSUB16S    : VISInst<0b001010101, "fpsub16S">;
65*9880d681SAndroid Build Coastguard Workerdef FPSUB32     : VISInst<0b001010110, "fpsub32">;
66*9880d681SAndroid Build Coastguard Workerdef FPSUB32S    : VISInst<0b001010111, "fpsub32S">;
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdef FPACK16     : VISInst2<0b000111011, "fpack16">;
69*9880d681SAndroid Build Coastguard Workerdef FPACK32     : VISInst <0b000111010, "fpack32">;
70*9880d681SAndroid Build Coastguard Workerdef FPACKFIX    : VISInst2<0b000111101, "fpackfix">;
71*9880d681SAndroid Build Coastguard Workerdef FEXPAND     : VISInst2<0b001001101, "fexpand">;
72*9880d681SAndroid Build Coastguard Workerdef FPMERGE     : VISInst <0b001001011, "fpmerge">;
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdef FMUL8X16    : VISInst<0b000110001, "fmul8x16">;
75*9880d681SAndroid Build Coastguard Workerdef FMUL8X16AU  : VISInst<0b000110011, "fmul8x16au">;
76*9880d681SAndroid Build Coastguard Workerdef FMUL8X16AL  : VISInst<0b000110101, "fmul8x16al">;
77*9880d681SAndroid Build Coastguard Workerdef FMUL8SUX16  : VISInst<0b000110110, "fmul8sux16">;
78*9880d681SAndroid Build Coastguard Workerdef FMUL8ULX16  : VISInst<0b000110111, "fmul8ulx16">;
79*9880d681SAndroid Build Coastguard Workerdef FMULD8SUX16 : VISInst<0b000111000, "fmuld8sux16">;
80*9880d681SAndroid Build Coastguard Workerdef FMULD8ULX16 : VISInst<0b000111001, "fmuld8ulx16">;
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerdef ALIGNADDR   : VISInst<0b000011000, "alignaddr", I64Regs>;
83*9880d681SAndroid Build Coastguard Workerdef ALIGNADDRL  : VISInst<0b000011010, "alignaddrl", I64Regs>;
84*9880d681SAndroid Build Coastguard Workerdef FALIGNADATA : VISInst<0b001001000, "faligndata">;
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdef FZERO       : VISInstD<0b001100000, "fzero">;
87*9880d681SAndroid Build Coastguard Workerdef FZEROS      : VISInstD<0b001100001, "fzeros", FPRegs>;
88*9880d681SAndroid Build Coastguard Workerdef FONE        : VISInstD<0b001111110, "fone">;
89*9880d681SAndroid Build Coastguard Workerdef FONES       : VISInstD<0b001111111, "fones", FPRegs>;
90*9880d681SAndroid Build Coastguard Workerdef FSRC1       : VISInst1<0b001110100, "fsrc1">;
91*9880d681SAndroid Build Coastguard Workerdef FSRC1S      : VISInst1<0b001110101, "fsrc1s", FPRegs>;
92*9880d681SAndroid Build Coastguard Workerdef FSRC2       : VISInst2<0b001111000, "fsrc2">;
93*9880d681SAndroid Build Coastguard Workerdef FSRC2S      : VISInst2<0b001111001, "fsrc2s", FPRegs>;
94*9880d681SAndroid Build Coastguard Workerdef FNOT1       : VISInst1<0b001101010, "fnot1">;
95*9880d681SAndroid Build Coastguard Workerdef FNOT1S      : VISInst1<0b001101011, "fnot1s", FPRegs>;
96*9880d681SAndroid Build Coastguard Workerdef FNOT2       : VISInst2<0b001100110, "fnot2">;
97*9880d681SAndroid Build Coastguard Workerdef FNOT2S      : VISInst2<0b001100111, "fnot2s", FPRegs>;
98*9880d681SAndroid Build Coastguard Workerdef FOR         : VISInst<0b001111100,  "for">;
99*9880d681SAndroid Build Coastguard Workerdef FORS        : VISInst<0b001111101,  "fors",  FPRegs>;
100*9880d681SAndroid Build Coastguard Workerdef FNOR        : VISInst<0b001100010,  "fnor">;
101*9880d681SAndroid Build Coastguard Workerdef FNORS       : VISInst<0b001100011,  "fnors", FPRegs>;
102*9880d681SAndroid Build Coastguard Workerdef FAND        : VISInst<0b001110000,  "fand">;
103*9880d681SAndroid Build Coastguard Workerdef FANDS       : VISInst<0b001110001,  "fands", FPRegs>;
104*9880d681SAndroid Build Coastguard Workerdef FNAND       : VISInst<0b001101110,  "fnand">;
105*9880d681SAndroid Build Coastguard Workerdef FNANDS      : VISInst<0b001101111,  "fnands", FPRegs>;
106*9880d681SAndroid Build Coastguard Workerdef FXOR        : VISInst<0b001101100,  "fxor">;
107*9880d681SAndroid Build Coastguard Workerdef FXORS       : VISInst<0b001101101,  "fxors", FPRegs>;
108*9880d681SAndroid Build Coastguard Workerdef FXNOR       : VISInst<0b001110010,  "fxnor">;
109*9880d681SAndroid Build Coastguard Workerdef FXNORS      : VISInst<0b001110011,  "fxnors", FPRegs>;
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdef FORNOT1     : VISInst<0b001111010,  "fornot1">;
112*9880d681SAndroid Build Coastguard Workerdef FORNOT1S    : VISInst<0b001111011,  "fornot1s",  FPRegs>;
113*9880d681SAndroid Build Coastguard Workerdef FORNOT2     : VISInst<0b001110110,  "fornot2">;
114*9880d681SAndroid Build Coastguard Workerdef FORNOT2S    : VISInst<0b001110111,  "fornot2s",  FPRegs>;
115*9880d681SAndroid Build Coastguard Workerdef FANDNOT1    : VISInst<0b001101000,  "fandnot1">;
116*9880d681SAndroid Build Coastguard Workerdef FANDNOT1S   : VISInst<0b001101001,  "fandnot1s", FPRegs>;
117*9880d681SAndroid Build Coastguard Workerdef FANDNOT2    : VISInst<0b001100100,  "fandnot2">;
118*9880d681SAndroid Build Coastguard Workerdef FANDNOT2S   : VISInst<0b001100101,  "fandnot2s", FPRegs>;
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdef FCMPGT16    : VISInstID<0b000101000,  "fcmpgt16">;
121*9880d681SAndroid Build Coastguard Workerdef FCMPGT32    : VISInstID<0b000101100,  "fcmpgt32">;
122*9880d681SAndroid Build Coastguard Workerdef FCMPLE16    : VISInstID<0b000100000,  "fcmple16">;
123*9880d681SAndroid Build Coastguard Workerdef FCMPLE32    : VISInstID<0b000100100,  "fcmple32">;
124*9880d681SAndroid Build Coastguard Workerdef FCMPNE16    : VISInstID<0b000100010,  "fcmpne16">;
125*9880d681SAndroid Build Coastguard Workerdef FCMPNE32    : VISInstID<0b000100110,  "fcmpne32">;
126*9880d681SAndroid Build Coastguard Workerdef FCMPEQ16    : VISInstID<0b000101010,  "fcmpeq16">;
127*9880d681SAndroid Build Coastguard Workerdef FCMPEQ32    : VISInstID<0b000101110,  "fcmpeq32">;
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerdef EDGE8       : VISInst<0b000000000,  "edge8",   I64Regs>;
131*9880d681SAndroid Build Coastguard Workerdef EDGE8L      : VISInst<0b000000010,  "edge8l",  I64Regs>;
132*9880d681SAndroid Build Coastguard Workerdef EDGE16      : VISInst<0b000000100,  "edge16",  I64Regs>;
133*9880d681SAndroid Build Coastguard Workerdef EDGE16L     : VISInst<0b000000110,  "edge16l", I64Regs>;
134*9880d681SAndroid Build Coastguard Workerdef EDGE32      : VISInst<0b000001000,  "edge32",  I64Regs>;
135*9880d681SAndroid Build Coastguard Workerdef EDGE32L     : VISInst<0b000001010,  "edge32l", I64Regs>;
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerdef PDIST       : VISInst<0b000111110, "pdist">;
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdef ARRAY8      : VISInst<0b000010000, "array8",  I64Regs>;
140*9880d681SAndroid Build Coastguard Workerdef ARRAY16     : VISInst<0b000010010, "array16", I64Regs>;
141*9880d681SAndroid Build Coastguard Workerdef ARRAY32     : VISInst<0b000010100, "array32", I64Regs>;
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdef SHUTDOWN    : VISInst0<0b010000000, "shutdown">;
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker} // Predicates = [HasVIS]
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker// VIS 2 Instructions.
149*9880d681SAndroid Build Coastguard Workerlet Predicates = [HasVIS2] in {
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerdef BMASK     : VISInst<0b000011001, "bmask", I64Regs>;
152*9880d681SAndroid Build Coastguard Workerdef BSHUFFLE  : VISInst<0b000011100, "bshuffle">;
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Workerdef SIAM      : VISInst0<0b010000001, "siam">;
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdef EDGE8N    : VISInst<0b000000001,  "edge8n",   I64Regs>;
157*9880d681SAndroid Build Coastguard Workerdef EDGE8LN   : VISInst<0b000000011,  "edge8ln",  I64Regs>;
158*9880d681SAndroid Build Coastguard Workerdef EDGE16N   : VISInst<0b000000101,  "edge16n",  I64Regs>;
159*9880d681SAndroid Build Coastguard Workerdef EDGE16LN  : VISInst<0b000000111,  "edge16ln", I64Regs>;
160*9880d681SAndroid Build Coastguard Workerdef EDGE32N   : VISInst<0b000001001,  "edge32n",  I64Regs>;
161*9880d681SAndroid Build Coastguard Workerdef EDGE32LN  : VISInst<0b000001011,  "edge32ln", I64Regs>;
162*9880d681SAndroid Build Coastguard Worker} // Predicates = [HasVIS2]
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Worker// VIS 3 Instructions.
166*9880d681SAndroid Build Coastguard Workerlet Predicates = [HasVIS3] in {
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerlet Uses = [ICC] in
169*9880d681SAndroid Build Coastguard Workerdef ADDXC : VISInst<0b000010001, "addxc", I64Regs>;
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerlet Defs = [ICC], Uses = [ICC] in
172*9880d681SAndroid Build Coastguard Workerdef ADDXCCC : VISInst<0b000010011, "addxccc", I64Regs>;
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerlet rd = 0, rs1 = 0 in {
175*9880d681SAndroid Build Coastguard Workerdef CMASK8  : VISInstFormat<0b000011011, (outs), (ins I64Regs:$rs2),
176*9880d681SAndroid Build Coastguard Worker              "cmask8 $rs2", []>;
177*9880d681SAndroid Build Coastguard Workerdef CMASK16  : VISInstFormat<0b000011101, (outs), (ins I64Regs:$rs2),
178*9880d681SAndroid Build Coastguard Worker              "cmask16 $rs2", []>;
179*9880d681SAndroid Build Coastguard Workerdef CMASK32  : VISInstFormat<0b000011111, (outs), (ins I64Regs:$rs2),
180*9880d681SAndroid Build Coastguard Worker              "cmask32 $rs2", []>;
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker}
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Workerdef FCHKSM16 : VISInst<0b001000100, "fchksm16">;
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdef FHADDS   : F3_3<0b10, 0b110100, 0b001100001,
187*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
188*9880d681SAndroid Build Coastguard Worker                    "fhadds $rs1, $rs2, $rd", []>;
189*9880d681SAndroid Build Coastguard Workerdef FHADDD   : F3_3<0b10, 0b110100, 0b001100010,
190*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
191*9880d681SAndroid Build Coastguard Worker                    "fhaddd $rs1, $rs2, $rd", []>;
192*9880d681SAndroid Build Coastguard Workerdef FHSUBS   : F3_3<0b10, 0b110100, 0b001100101,
193*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
194*9880d681SAndroid Build Coastguard Worker                    "fhsubs $rs1, $rs2, $rd", []>;
195*9880d681SAndroid Build Coastguard Workerdef FHSUBD   : F3_3<0b10, 0b110100, 0b001100110,
196*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
197*9880d681SAndroid Build Coastguard Worker                    "fhsubd $rs1, $rs2, $rd", []>;
198*9880d681SAndroid Build Coastguard Workerdef FLCMPS   : VISInstFormat<0b101010001, (outs FCCRegs:$rd),
199*9880d681SAndroid Build Coastguard Worker                     (ins DFPRegs:$rs1, DFPRegs:$rs2),
200*9880d681SAndroid Build Coastguard Worker                     "flcmps $rd, $rs1, $rs2", []>;
201*9880d681SAndroid Build Coastguard Workerdef FLCMPD   : VISInstFormat<0b101010010, (outs FCCRegs:$rd),
202*9880d681SAndroid Build Coastguard Worker                     (ins DFPRegs:$rs1, DFPRegs:$rs2),
203*9880d681SAndroid Build Coastguard Worker                     "flcmpd $rd, $rs1, $rs2", []>;
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdef FMEAN16  : VISInst<0b001000000, "fmean16">;
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdef FNADDS   : F3_3<0b10, 0b110100, 0b001010001,
208*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
209*9880d681SAndroid Build Coastguard Worker                    "fnadds $rs1, $rs2, $rd", []>;
210*9880d681SAndroid Build Coastguard Workerdef FNADDD   : F3_3<0b10, 0b110100, 0b001010010,
211*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
212*9880d681SAndroid Build Coastguard Worker                    "fnaddd $rs1, $rs2, $rd", []>;
213*9880d681SAndroid Build Coastguard Workerdef FNHADDS  : F3_3<0b10, 0b110100, 0b001110001,
214*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
215*9880d681SAndroid Build Coastguard Worker                    "fnhadds $rs1, $rs2, $rd", []>;
216*9880d681SAndroid Build Coastguard Workerdef FNHADDD  : F3_3<0b10, 0b110100, 0b001110010,
217*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
218*9880d681SAndroid Build Coastguard Worker                    "fnhaddd $rs1, $rs2, $rd", []>;
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdef FNMULS   : F3_3<0b10, 0b110100, 0b001011001,
221*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
222*9880d681SAndroid Build Coastguard Worker                    "fnhadds $rs1, $rs2, $rd", []>;
223*9880d681SAndroid Build Coastguard Workerdef FNMULD   : F3_3<0b10, 0b110100, 0b001011010,
224*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
225*9880d681SAndroid Build Coastguard Worker                    "fnhaddd $rs1, $rs2, $rd", []>;
226*9880d681SAndroid Build Coastguard Workerdef FNSMULD  : F3_3<0b10, 0b110100, 0b001111001,
227*9880d681SAndroid Build Coastguard Worker                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),
228*9880d681SAndroid Build Coastguard Worker                    "fnhadds $rs1, $rs2, $rd", []>;
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdef FPADD64   : VISInst<0b001000010, "fpadd64">;
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Workerdef FSLL16    : VISInst<0b000100001, "fsll16">;
233*9880d681SAndroid Build Coastguard Workerdef FSRL16    : VISInst<0b000100011, "fsrl16">;
234*9880d681SAndroid Build Coastguard Workerdef FSLL32    : VISInst<0b000100101, "fsll32">;
235*9880d681SAndroid Build Coastguard Workerdef FSRL32    : VISInst<0b000100111, "fsrl32">;
236*9880d681SAndroid Build Coastguard Workerdef FSLAS16   : VISInst<0b000101001, "fslas16">;
237*9880d681SAndroid Build Coastguard Workerdef FSRA16    : VISInst<0b000101011, "fsra16">;
238*9880d681SAndroid Build Coastguard Workerdef FSLAS32   : VISInst<0b000101101, "fslas32">;
239*9880d681SAndroid Build Coastguard Workerdef FSRA32    : VISInst<0b000101111, "fsra32">;
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerlet rs1 = 0 in
242*9880d681SAndroid Build Coastguard Workerdef LZCNT     : VISInstFormat<0b000010111, (outs I64Regs:$rd),
243*9880d681SAndroid Build Coastguard Worker                   (ins I64Regs:$rs2), "lzcnt $rs2, $rd", []>;
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Workerlet rs1 = 0 in {
246*9880d681SAndroid Build Coastguard Workerdef MOVSTOSW : VISInstFormat<0b100010011, (outs I64Regs:$rd),
247*9880d681SAndroid Build Coastguard Worker                   (ins DFPRegs:$rs2), "movstosw $rs2, $rd", []>;
248*9880d681SAndroid Build Coastguard Workerdef MOVSTOUW : VISInstFormat<0b100010001, (outs I64Regs:$rd),
249*9880d681SAndroid Build Coastguard Worker                   (ins DFPRegs:$rs2), "movstouw $rs2, $rd", []>;
250*9880d681SAndroid Build Coastguard Workerdef MOVDTOX  : VISInstFormat<0b100010000, (outs I64Regs:$rd),
251*9880d681SAndroid Build Coastguard Worker                   (ins DFPRegs:$rs2), "movdtox $rs2, $rd", []>;
252*9880d681SAndroid Build Coastguard Workerdef MOVWTOS  :  VISInstFormat<0b100011001, (outs DFPRegs:$rd),
253*9880d681SAndroid Build Coastguard Worker                   (ins I64Regs:$rs2), "movdtox $rs2, $rd", []>;
254*9880d681SAndroid Build Coastguard Workerdef MOVXTOD  :  VISInstFormat<0b100011000, (outs DFPRegs:$rd),
255*9880d681SAndroid Build Coastguard Worker                   (ins I64Regs:$rs2), "movdtox $rs2, $rd", []>;
256*9880d681SAndroid Build Coastguard Worker}
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Workerdef PDISTN   : VISInst<0b000111111, "pdistn">;
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdef UMULXHI  : VISInst<0b000010110, "umulxhi", I64Regs>;
261*9880d681SAndroid Build Coastguard Workerdef XMULX    : VISInst<0b100010101, "xmulx",   I64Regs>;
262*9880d681SAndroid Build Coastguard Workerdef XMULXHI  : VISInst<0b100010111, "xmulxhi", I64Regs>;
263*9880d681SAndroid Build Coastguard Worker} // Predicates = [IsVIS3]
264