|
|
@@ -0,0 +1,238 @@ |
|
|
//==- HexagonInstrFormatsV60.td - Hexagon Instruction Formats -*- tablegen -==// |
|
|
// |
|
|
// The LLVM Compiler Infrastructure |
|
|
// |
|
|
// This file is distributed under the University of Illinois Open Source |
|
|
// License. See LICENSE.TXT for details. |
|
|
// |
|
|
//===----------------------------------------------------------------------===// |
|
|
// |
|
|
// This file describes the Hexagon V60 instruction classes in TableGen format. |
|
|
// |
|
|
//===----------------------------------------------------------------------===// |
|
|
|
|
|
//----------------------------------------------------------------------------// |
|
|
// Hexagon Intruction Flags + |
|
|
// |
|
|
// *** Must match BaseInfo.h *** |
|
|
//----------------------------------------------------------------------------// |
|
|
|
|
|
def TypeCVI_VA : IType<13>; |
|
|
def TypeCVI_VA_DV : IType<14>; |
|
|
def TypeCVI_VX : IType<15>; |
|
|
def TypeCVI_VX_DV : IType<16>; |
|
|
def TypeCVI_VP : IType<17>; |
|
|
def TypeCVI_VP_VS : IType<18>; |
|
|
def TypeCVI_VS : IType<19>; |
|
|
def TypeCVI_VINLANESAT : IType<20>; |
|
|
def TypeCVI_VM_LD : IType<21>; |
|
|
def TypeCVI_VM_TMP_LD : IType<22>; |
|
|
def TypeCVI_VM_CUR_LD : IType<23>; |
|
|
def TypeCVI_VM_VP_LDU : IType<24>; |
|
|
def TypeCVI_VM_ST : IType<25>; |
|
|
def TypeCVI_VM_NEW_ST : IType<26>; |
|
|
def TypeCVI_VM_STU : IType<27>; |
|
|
def TypeCVI_HIST : IType<28>; |
|
|
//----------------------------------------------------------------------------// |
|
|
// Intruction Classes Definitions + |
|
|
//----------------------------------------------------------------------------// |
|
|
|
|
|
let validSubTargets = HasV60SubT in |
|
|
{ |
|
|
class CVI_VA_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VA_DV_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA_DV>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_Resource_late<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>, |
|
|
Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_DV_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_DV_Slot2_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_DV_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VP_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VP_VS_Resource_early<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VP_VS_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VP_VS_Resource_long_early<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VS_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VINLANESAT_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VINLANESAT>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VS_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_LD_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_LD_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_TMP_LD_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_TMP_LD_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_CUR_LD_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_CUR_LD>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_VP_LDU_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_VP_LDU_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_ST_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_ST_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_NEW_ST_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_NEW_ST_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_STU_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VM_STU_Resource_long<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_HIST_Resource<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>, |
|
|
OpcodeHexagon, Requires<[HasV60T, UseHVX]>; |
|
|
} |
|
|
|
|
|
let validSubTargets = HasV60SubT in |
|
|
{ |
|
|
class CVI_VA_Resource1<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>, |
|
|
Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_VX_DV_Resource1<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>, |
|
|
Requires<[HasV60T, UseHVX]>; |
|
|
|
|
|
class CVI_HIST_Resource1<dag outs, dag ins, string asmstr, |
|
|
list<dag> pattern = [], string cstr = "", |
|
|
InstrItinClass itin = PSEUDO> |
|
|
: InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>, |
|
|
Requires<[HasV60T, UseHVX]>; |
|
|
} |
|
|
|
|
|
|