xref: /llvm-project/llvm/lib/Target/PowerPC/PPCInstrFuture.td (revision 4b43ef3e5c37459996ce0f53615881f436cb0e65)
19df924a6SStefan Pintilie//===-- PPCInstrFuture.td - Future Instruction Set --------*- tablegen -*-===//
29df924a6SStefan Pintilie//
39df924a6SStefan Pintilie//                     The LLVM Compiler Infrastructure
49df924a6SStefan Pintilie//
59df924a6SStefan Pintilie// This file is distributed under the University of Illinois Open Source
69df924a6SStefan Pintilie// License. See LICENSE.TXT for details.
79df924a6SStefan Pintilie//
89df924a6SStefan Pintilie//===----------------------------------------------------------------------===//
99df924a6SStefan Pintilie//
109df924a6SStefan Pintilie// This file describes the instructions introduced for the Future CPU.
119df924a6SStefan Pintilie//
129df924a6SStefan Pintilie//===----------------------------------------------------------------------===//
139df924a6SStefan Pintilie
141ef2a92dSStefan Pintilieclass XOForm_RTAB5_L1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
151ef2a92dSStefan Pintilie                      string asmstr, list<dag> pattern>
161ef2a92dSStefan Pintilie         : I<opcode, OOL, IOL, asmstr, NoItinerary> {
171ef2a92dSStefan Pintilie  bits<5> RT;
181ef2a92dSStefan Pintilie  bits<5> RA;
191ef2a92dSStefan Pintilie  bits<5> RB;
201ef2a92dSStefan Pintilie  bit L;
211ef2a92dSStefan Pintilie
221ef2a92dSStefan Pintilie  let Pattern = pattern;
231ef2a92dSStefan Pintilie
241ef2a92dSStefan Pintilie  bit RC = 0;    // set by isRecordForm
251ef2a92dSStefan Pintilie
261ef2a92dSStefan Pintilie  let Inst{6-10}  = RT;
271ef2a92dSStefan Pintilie  let Inst{11-15} = RA;
281ef2a92dSStefan Pintilie  let Inst{16-20} = RB;
291ef2a92dSStefan Pintilie  let Inst{21}    = L;
301ef2a92dSStefan Pintilie  let Inst{22-30} = xo;
311ef2a92dSStefan Pintilie  let Inst{31}    = RC;
321ef2a92dSStefan Pintilie}
331ef2a92dSStefan Pintilie
341ef2a92dSStefan Pintiliemulticlass XOForm_RTAB5_L1r<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
351ef2a92dSStefan Pintilie                            string asmbase, string asmstr,
361ef2a92dSStefan Pintilie                            list<dag> pattern> {
371ef2a92dSStefan Pintilie  let BaseName = asmbase in {
381ef2a92dSStefan Pintilie    def NAME : XOForm_RTAB5_L1<opcode, xo, OOL, IOL,
391ef2a92dSStefan Pintilie                               !strconcat(asmbase, !strconcat(" ", asmstr)),
401ef2a92dSStefan Pintilie                               pattern>, RecFormRel;
411ef2a92dSStefan Pintilie    let Defs = [CR0] in
421ef2a92dSStefan Pintilie    def _rec : XOForm_RTAB5_L1<opcode, xo, OOL, IOL,
431ef2a92dSStefan Pintilie                               !strconcat(asmbase, !strconcat(". ", asmstr)),
441ef2a92dSStefan Pintilie                               []>, isRecordForm, RecFormRel;
451ef2a92dSStefan Pintilie  }
461ef2a92dSStefan Pintilie}
471ef2a92dSStefan Pintilie
481ef2a92dSStefan Pintilielet Predicates = [IsISAFuture] in {
491ef2a92dSStefan Pintilie  defm SUBFUS : XOForm_RTAB5_L1r<31, 72, (outs g8rc:$RT),
501ef2a92dSStefan Pintilie                                 (ins g8rc:$RA, g8rc:$RB, u1imm:$L),
511ef2a92dSStefan Pintilie                                 "subfus",  "$RT, $L, $RA, $RB", []>;
521ef2a92dSStefan Pintilie}
539df924a6SStefan Pintilie
54bd680704SMaryam Moghadaslet Predicates = [HasVSX, IsISAFuture] in {
55bd680704SMaryam Moghadas  let mayLoad = 1 in {
56*4b43ef3eSJames Y Knight    def LXVRL : XX1Form_memOp<31, 525, (outs vsrc:$XT), (ins memr:$RA, g8rc:$RB),
57*4b43ef3eSJames Y Knight                              "lxvrl $XT, $RA, $RB", IIC_LdStLoad, []>;
58bd680704SMaryam Moghadas
59*4b43ef3eSJames Y Knight    def LXVRLL : XX1Form_memOp<31, 557, (outs vsrc:$XT), (ins memr:$RA, g8rc:$RB),
60*4b43ef3eSJames Y Knight                               "lxvrll $XT, $RA, $RB", IIC_LdStLoad, []>;
61bd680704SMaryam Moghadas
62bd680704SMaryam Moghadas    def LXVPRL : XForm_XTp5_XAB5<31, 589, (outs vsrprc:$XTp),
63*4b43ef3eSJames Y Knight                                 (ins memr:$RA, g8rc:$RB),
64*4b43ef3eSJames Y Knight                                 "lxvprl $XTp, $RA, $RB", IIC_LdStLFD, []>;
65bd680704SMaryam Moghadas
66bd680704SMaryam Moghadas    def LXVPRLL : XForm_XTp5_XAB5<31, 621, (outs vsrprc:$XTp),
67*4b43ef3eSJames Y Knight                                  (ins memr:$RA, g8rc:$RB),
68*4b43ef3eSJames Y Knight                                  "lxvprll $XTp, $RA, $RB", IIC_LdStLFD, []>;
69bd680704SMaryam Moghadas  }
70bd680704SMaryam Moghadas
71bd680704SMaryam Moghadas  let mayStore = 1 in {
72bd680704SMaryam Moghadas    def STXVRL : XX1Form_memOp<31, 653, (outs),
73*4b43ef3eSJames Y Knight                               (ins vsrc:$XT, memr:$RA, g8rc:$RB),
74*4b43ef3eSJames Y Knight                               "stxvrl $XT, $RA, $RB", IIC_LdStLoad, []>;
75bd680704SMaryam Moghadas
76bd680704SMaryam Moghadas    def STXVRLL : XX1Form_memOp<31, 685, (outs),
77*4b43ef3eSJames Y Knight                                (ins vsrc:$XT, memr:$RA, g8rc:$RB),
78*4b43ef3eSJames Y Knight                                "stxvrll $XT, $RA, $RB", IIC_LdStLoad, []>;
79bd680704SMaryam Moghadas
80bd680704SMaryam Moghadas    def STXVPRL : XForm_XTp5_XAB5<31, 717, (outs),
81*4b43ef3eSJames Y Knight                                  (ins vsrprc:$XTp, memr:$RA, g8rc:$RB),
82*4b43ef3eSJames Y Knight                                  "stxvprl $XTp, $RA, $RB", IIC_LdStLFD, []>;
83bd680704SMaryam Moghadas
84bd680704SMaryam Moghadas    def STXVPRLL : XForm_XTp5_XAB5<31, 749, (outs),
85*4b43ef3eSJames Y Knight                                   (ins vsrprc:$XTp, memr:$RA, g8rc:$RB),
86*4b43ef3eSJames Y Knight                                   "stxvprll $XTp, $RA, $RB", IIC_LdStLFD, []>;
87bd680704SMaryam Moghadas  }
88bd680704SMaryam Moghadas}
89