123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440 |
- //===-- AMDILMultiClass.td - TODO: Add brief description -------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //==-----------------------------------------------------------------------===//
- // Multiclass that handles branch instructions
- multiclass BranchConditional<SDNode Op> {
- def _i8 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRI8:$src0),
- "; i32 Pseudo branch instruction",
- [(Op bb:$target, GPRI8:$src0)]>;
- def _i16 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRI16:$src0),
- "; i32 Pseudo branch instruction",
- [(Op bb:$target, GPRI16:$src0)]>;
- def _i32 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRI32:$src0),
- "; i32 Pseudo branch instruction",
- [(Op bb:$target, GPRI32:$src0)]>;
- def _f32 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRF32:$src0),
- "; f32 Pseudo branch instruction",
- [(Op bb:$target, GPRF32:$src0)]>;
- def _i64 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRI64:$src0),
- "; f64 Pseudo branch instruction",
- [(Op bb:$target, (i64 GPRI64:$src0))]>;
- def _f64 : ILFormat<IL_OP_IFC, (outs),
- (ins brtarget:$target, GPRF64:$src0),
- "; f64 Pseudo branch instruction",
- [(Op bb:$target, (f64 GPRF64:$src0))]>;
- }
- // Multiclass that handles compare instructions
- // When a definition is added here, a corrosponding defition
- // needs to be added at:
- // AMDILISelLowering.cpp@EmitInstrWithCustomInserter
- multiclass Compare<string asm> {
- def _i8 : ILFormat<IL_OP_CMP, (outs GPRI8:$dst),
- (ins i32imm:$cc, GPRI8:$src0, GPRI8:$src1),
- !strconcat("; i8 ", asm),
- [(set GPRI8:$dst, (IL_cmp imm:$cc, GPRI8:$src0, GPRI8:$src1))]>;
- def _i16 : ILFormat<IL_OP_CMP, (outs GPRI16:$dst),
- (ins i32imm:$cc, GPRI16:$src0, GPRI16:$src1),
- !strconcat("; i16 ", asm),
- [(set GPRI16:$dst, (IL_cmp imm:$cc, GPRI16:$src0, GPRI16:$src1))]>;
- def _i32 : ILFormat<IL_OP_CMP, (outs GPRI32:$dst),
- (ins i32imm:$cc, GPRI32:$src0, GPRI32:$src1),
- !strconcat("; i32 ", asm),
- [(set GPRI32:$dst, (IL_cmp imm:$cc, GPRI32:$src0, GPRI32:$src1))]>;
- def _i64 : ILFormat<IL_OP_CMP, (outs GPRI64:$dst),
- (ins i32imm:$cc, GPRI64:$src0, GPRI64:$src1),
- !strconcat("; i64 ", asm),
- [(set GPRI64:$dst, (IL_cmp imm:$cc, GPRI64:$src0, GPRI64:$src1))]>;
- def _f32 : ILFormat<IL_OP_CMP, (outs GPRF32:$dst),
- (ins i32imm:$cc, GPRF32:$src0, GPRF32:$src1),
- !strconcat("; f32 ", asm),
- [(set GPRF32:$dst, (IL_cmp imm:$cc, GPRF32:$src0, GPRF32:$src1))]>;
- def _f64 : ILFormat<IL_OP_CMP, (outs GPRF64:$dst),
- (ins i32imm:$cc, GPRF64:$src0, GPRF64:$src1),
- !strconcat("; f64 ", asm),
- [(set GPRF64:$dst, (IL_cmp imm:$cc, GPRF64:$src0, GPRF64:$src1))]>;
- def _v2i8 : ILFormat<IL_OP_CMP, (outs GPRV2I8:$dst),
- (ins i32imm:$cc, GPRV2I8:$src0, GPRV2I8:$src1),
- !strconcat("; i8 ", asm),
- [(set GPRV2I8:$dst, (IL_cmp imm:$cc, GPRV2I8:$src0, GPRV2I8:$src1))]>;
- def _v2i16 : ILFormat<IL_OP_CMP, (outs GPRV2I16:$dst),
- (ins i32imm:$cc, GPRV2I16:$src0, GPRV2I16:$src1),
- !strconcat("; i16 ", asm),
- [(set GPRV2I16:$dst, (IL_cmp imm:$cc, GPRV2I16:$src0, GPRV2I16:$src1))]>;
- def _v2i32 : ILFormat<IL_OP_CMP, (outs GPRV2I32:$dst),
- (ins i32imm:$cc, GPRV2I32:$src0, GPRV2I32:$src1),
- !strconcat("; i32 ", asm),
- [(set GPRV2I32:$dst, (IL_cmp imm:$cc, GPRV2I32:$src0, GPRV2I32:$src1))]>;
- def _v2i64 : ILFormat<IL_OP_CMP, (outs GPRV2I64:$dst),
- (ins i32imm:$cc, GPRV2I64:$src0, GPRV2I64:$src1),
- !strconcat("; i64 ", asm),
- [(set GPRV2I64:$dst, (IL_cmp imm:$cc, GPRV2I64:$src0, GPRV2I64:$src1))]>;
- def _v2f32 : ILFormat<IL_OP_CMP, (outs GPRV2F32:$dst),
- (ins i32imm:$cc, GPRV2F32:$src0, GPRV2F32:$src1),
- !strconcat("; f32 ", asm),
- [(set GPRV2F32:$dst, (IL_cmp imm:$cc, GPRV2F32:$src0, GPRV2F32:$src1))]>;
- def _v2f64 : ILFormat<IL_OP_CMP, (outs GPRV2F64:$dst),
- (ins i32imm:$cc, GPRV2F64:$src0, GPRV2F64:$src1),
- !strconcat("; f64 ", asm),
- [(set GPRV2F64:$dst, (IL_cmp imm:$cc, GPRV2F64:$src0, GPRV2F64:$src1))]>;
- def _v4i8 : ILFormat<IL_OP_CMP, (outs GPRV4I8:$dst),
- (ins i32imm:$cc, GPRV4I8:$src0, GPRV4I8:$src1),
- !strconcat("; i8 ", asm),
- [(set GPRV4I8:$dst, (IL_cmp imm:$cc, GPRV4I8:$src0, GPRV4I8:$src1))]>;
- def _v4i16 : ILFormat<IL_OP_CMP, (outs GPRV4I16:$dst),
- (ins i32imm:$cc, GPRV4I16:$src0, GPRV4I16:$src1),
- !strconcat("; i16 ", asm),
- [(set GPRV4I16:$dst, (IL_cmp imm:$cc, GPRV4I16:$src0, GPRV4I16:$src1))]>;
- def _v4i32 : ILFormat<IL_OP_CMP, (outs GPRV4I32:$dst),
- (ins i32imm:$cc, GPRV4I32:$src0, GPRV4I32:$src1),
- !strconcat("; i32 ", asm),
- [(set GPRV4I32:$dst, (IL_cmp imm:$cc, GPRV4I32:$src0, GPRV4I32:$src1))]>;
- def _v4f32 : ILFormat<IL_OP_CMP, (outs GPRV4F32:$dst),
- (ins i32imm:$cc, GPRV4F32:$src0, GPRV4F32:$src1),
- !strconcat("; f32 ", asm),
- [(set GPRV4F32:$dst, (IL_cmp imm:$cc, GPRV4F32:$src0, GPRV4F32:$src1))]>;
- }
-
- // Multiclass that handles constant values
- multiclass ILConstant<string asm> {
- def _i8 : ILFormat<IL_OP_MOV, (outs GPRI8:$dst),
- (ins i8imm:$val),
- asm, [(set GPRI8:$dst, imm:$val)]>;
-
- // def _v2i8 : ILFormat<IL_OP_MOV, (outs GPRV2I8:$dst),
- // (ins i8imm:$val),
- // asm, [(set GPRV2I8:$dst, GPRV2I8:$val)]>;
-
- //def _v4i8 : ILFormat<IL_OP_MOV, (outs GPRV4I8:$dst),
- //(ins i8imm:$val),
- //asm, [(set GPRV4I8:$dst, GPRV4I8:$val)]>;
-
- def _i16 : ILFormat<IL_OP_MOV, (outs GPRI16:$dst),
- (ins i16imm:$val),
- asm, [(set GPRI16:$dst, imm:$val)]>;
-
- // def _v2i16 : ILFormat<IL_OP_MOV, (outs GPRV2I16:$dst),
- // (ins i16imm:$val),
- // asm, [(set GPRV2I16:$dst, GPRV2I16:$val)]>;
-
- // def _v4i16 : ILFormat<IL_OP_MOV, (outs GPRV4I16:$dst),
- // (ins i16imm:$val),
- // asm, [(set GPRV4I16:$dst, GPRV4I16:$val)]>;
-
- def _i32 : ILFormat<IL_OP_MOV, (outs GPRI32:$dst),
- (ins i32imm:$val),
- asm, [(set GPRI32:$dst, imm:$val)]>;
-
- // def _v2i32 : ILFormat<IL_OP_MOV, (outs GPRV2I32:$dst),
- // (ins i32imm:$val),
- // asm, [(set GPRV2I32:$dst, GPRV2I32:$val)]>;
-
- // def _v4i32 : ILFormat<IL_OP_MOV, (outs GPRV4I32:$dst),
- // (ins GPRV4I32:$val),
- // asm, [(set GPRV4I32:$dst, GPRV4I32:$val)]>;
-
- def _i64 : ILFormat<IL_OP_MOV, (outs GPRI64:$dst),
- (ins i64imm:$val),
- asm, [(set GPRI64:$dst, imm:$val)]>;
-
- // def _v2i64 : ILFormat<IL_OP_MOV, (outs GPRV2I64:$dst),
- // (ins i64imm:$val),
- // asm, [(set GPRV2I64:$dst, GPRV2I64:$val)]>;
-
- def _f32 : ILFormat<IL_OP_MOV, (outs GPRF32:$dst),
- (ins f32imm:$val),
- asm, [(set GPRF32:$dst, fpimm:$val)]>;
-
- // def _v2f32 : ILFormat<IL_OP_MOV, (outs GPRV2F32:$dst),
- // (ins f32imm:$val),
- // asm, [(set GPRV2F32:$dst, GPRV2F32:$val)]>;
-
- // def _v4f32 : ILFormat<IL_OP_MOV, (outs GPRV4F32:$dst),
- // (ins f32imm:$val),
- // asm, [(set GPRV4F32:$dst, GPRV4F32:$val)]>;
-
- def _f64 : ILFormat<IL_OP_MOV, (outs GPRF64:$dst),
- (ins f64imm:$val),
- asm, [(set GPRF64:$dst, fpimm:$val)]>;
-
- // def _v2f64 : ILFormat<IL_OP_MOV, (outs GPRV2F64:$dst),
- // (ins f64imm:$val),
- // asm, [(set GPRV2F64:$dst, GPRV2F64:$val)]>;
-
- }
-
- // Multiclass that handles memory store operations
- multiclass GTRUNCSTORE<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI16:$val, ADDR:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i16trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i16trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i32trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_f32trunc_store GPRF64:$val, ADDR:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i8trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I16:$val, ADDR:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i8trunc_store GPRV4I16:$val, ADDR:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i16trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i16trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2f32trunc_store GPRV2F64:$val, ADDR:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i16trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i32trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass LTRUNCSTORE<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI16:$val, ADDR:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i16trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i16trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i32trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_f32trunc_store GPRF64:$val, ADDR:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i8trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I16:$val, ADDR:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i8trunc_store GPRV4I16:$val, ADDR:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i16trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i16trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2f32trunc_store GPRV2F64:$val, ADDR:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i16trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i32trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass PTRUNCSTORE<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI16:$val, ADDR:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i16trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i16trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i32trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_f32trunc_store GPRF64:$val, ADDR:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i8trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I16:$val, ADDR:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i8trunc_store GPRV4I16:$val, ADDR:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i16trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i16trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2f32trunc_store GPRV2F64:$val, ADDR:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i16trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i32trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass RTRUNCSTORE<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI16:$val, ADDR:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i16trunc_store GPRI32:$val, ADDR:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i16trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i32trunc_store GPRI64:$val, ADDR:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_f32trunc_store GPRF64:$val, ADDR:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i8trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I16:$val, ADDR:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i8trunc_store GPRV4I16:$val, ADDR:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i16trunc_store GPRV2I32:$val, ADDR:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i16trunc_store GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2f32trunc_store GPRV2F64:$val, ADDR:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i16trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i32trunc_store GPRV2I64:$val, ADDR:$ptr)]>;
- }
-
-
- // Multiclass that handles memory store operations
- multiclass STORE<string asm, PatFrag OpNode> {
- def _i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI8:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI8:$val, ADDR:$ptr)]>;
- def _i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI16:$val, ADDR:$ptr)]>;
- def _i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI32:$val, ADDR:$ptr)]>;
- def _f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRF32:$val, ADDR:$ptr)]>;
- def _i64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI64:$val, ADDR:$ptr)]>;
- def _f64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRF64:$val, ADDR:$ptr)]>;
- def _v4f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4F32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4F32:$val, ADDR:$ptr)]>;
- def _v2f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2F32:$val, ADDR:$ptr)]>;
- def _v4i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I32:$val, ADDR:$ptr)]>;
- def _v2i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I8:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I8:$val, ADDR:$ptr)]>;
- def _v2i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I16:$val, ADDR:$ptr)]>;
- def _v4i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I8:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I8:$val, ADDR:$ptr)]>;
- def _v4i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I16:$val, ADDR:$ptr)]>;
- def _v2i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I32:$val, ADDR:$ptr)]>;
- def _v2f64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2F64:$val, ADDR:$ptr)]>;
- def _v2i64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI32:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I64:$val, ADDR:$ptr)]>;
- }
-
- // Multiclass that handles load operations
- multiclass LOAD<string asm, PatFrag OpNode> {
- def _i8 : OneInOneOut<IL_OP_MOV, (outs GPRI8:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI8:$dst, (OpNode ADDR:$ptr))]>;
- def _i16 : OneInOneOut<IL_OP_MOV, (outs GPRI16:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI16:$dst, (OpNode ADDR:$ptr))]>;
- def _i32 : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI32:$dst, (OpNode ADDR:$ptr))]>;
- def _f32 : OneInOneOut<IL_OP_MOV, (outs GPRF32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRF32:$dst, (OpNode ADDR:$ptr))]>;
- def _i64 : OneInOneOut<IL_OP_MOV, (outs GPRI64:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI64:$dst, (OpNode ADDR:$ptr))]>;
- def _f64 : OneInOneOut<IL_OP_MOV, (outs GPRF64:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRF64:$dst, (OpNode ADDR:$ptr))]>;
- def _v4f32 : OneInOneOut<IL_OP_MOV, (outs GPRV4F32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4F32:$dst, (OpNode ADDR:$ptr))]>;
- def _v2f32 : OneInOneOut<IL_OP_MOV, (outs GPRV2F32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2F32:$dst, (OpNode ADDR:$ptr))]>;
- def _v2f64 : OneInOneOut<IL_OP_MOV, (outs GPRV2F64:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2F64:$dst, (OpNode ADDR:$ptr))]>;
- def _v4i32 : OneInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I32:$dst, (OpNode ADDR:$ptr))]>;
- def _v2i8 : OneInOneOut<IL_OP_MOV, (outs GPRV2I8:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I8:$dst, (OpNode ADDR:$ptr))]>;
- def _v2i16 : OneInOneOut<IL_OP_MOV, (outs GPRV2I16:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I16:$dst, (OpNode ADDR:$ptr))]>;
- def _v4i8 : OneInOneOut<IL_OP_MOV, (outs GPRV4I8:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I8:$dst, (OpNode ADDR:$ptr))]>;
- def _v4i16 : OneInOneOut<IL_OP_MOV, (outs GPRV4I16:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I16:$dst, (OpNode ADDR:$ptr))]>;
- def _v2i32 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I32:$dst, (OpNode ADDR:$ptr))]>;
- def _v2i64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I64:$dst), (ins MEMI32:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I64:$dst, (OpNode ADDR:$ptr))]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass GTRUNCSTORE64<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI16:$val, ADDR64:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i8trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i16trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i16trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_i32trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_f32trunc_store GPRF64:$val, ADDR64:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i8trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I16:$val, ADDR64:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i8trunc_store GPRV4I16:$val, ADDR64:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i16trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v4i16trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2f32trunc_store GPRV2F64:$val, ADDR64:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i8trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i16trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(global_v2i32trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass LTRUNCSTORE64<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI16:$val, ADDR64:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i8trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i16trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i16trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_i32trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_f32trunc_store GPRF64:$val, ADDR64:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i8trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I16:$val, ADDR64:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i8trunc_store GPRV4I16:$val, ADDR64:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i16trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v4i16trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2f32trunc_store GPRV2F64:$val, ADDR64:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i8trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i16trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(local_v2i32trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass PTRUNCSTORE64<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI16:$val, ADDR64:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i8trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i16trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i16trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_i32trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_f32trunc_store GPRF64:$val, ADDR64:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i8trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I16:$val, ADDR64:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i8trunc_store GPRV4I16:$val, ADDR64:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i16trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v4i16trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2f32trunc_store GPRV2F64:$val, ADDR64:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i8trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i16trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(private_v2i32trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- }
-
- // Multiclass that handles memory store operations
- multiclass RTRUNCSTORE64<string asm> {
- def _i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI16:$val, ADDR64:$ptr)]>;
- def _i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i8trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i16trunc_store GPRI32:$val, ADDR64:$ptr)]>;
- def _i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i16trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_i32trunc_store GPRI64:$val, ADDR64:$ptr)]>;
- def _f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_f32trunc_store GPRF64:$val, ADDR64:$ptr)]>;
- def _v2i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i8trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I16:$val, ADDR64:$ptr)]>;
- def _v4i16i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i8trunc_store GPRV4I16:$val, ADDR64:$ptr)]>;
- def _v2i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i16trunc_store GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v4i32i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v4i16trunc_store GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2f64f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2f32trunc_store GPRV2F64:$val, ADDR64:$ptr)]>;
- def _v2i64i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i8trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i16trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- def _v2i64i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(region_v2i32trunc_store GPRV2I64:$val, ADDR64:$ptr)]>;
- }
-
-
- // Multiclass that handles memory store operations
- multiclass STORE64<string asm, PatFrag OpNode> {
- def _i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI8:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI8:$val, ADDR64:$ptr)]>;
- def _i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI16:$val, ADDR64:$ptr)]>;
- def _i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI32:$val, ADDR64:$ptr)]>;
- def _f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRF32:$val, ADDR64:$ptr)]>;
- def _i64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRI64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRI64:$val, ADDR64:$ptr)]>;
- def _f64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRF64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRF64:$val, ADDR64:$ptr)]>;
- def _v4f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4F32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4F32:$val, ADDR64:$ptr)]>;
- def _v2f32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2F32:$val, ADDR64:$ptr)]>;
- def _v4i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I32:$val, ADDR64:$ptr)]>;
- def _v2i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I8:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I8:$val, ADDR64:$ptr)]>;
- def _v2i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I16:$val, ADDR64:$ptr)]>;
- def _v4i8 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I8:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I8:$val, ADDR64:$ptr)]>;
- def _v4i16 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV4I16:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV4I16:$val, ADDR64:$ptr)]>;
- def _v2i32 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I32:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I32:$val, ADDR64:$ptr)]>;
- def _v2f64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2F64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2F64:$val, ADDR64:$ptr)]>;
- def _v2i64 : OneInOneOut<IL_OP_MOV, (outs), (ins GPRV2I64:$val, MEMI64:$ptr),
- !strconcat(asm, " $val $ptr"),
- [(OpNode GPRV2I64:$val, ADDR64:$ptr)]>;
- }
-
- // Multiclass that handles load operations
- multiclass LOAD64<string asm, PatFrag OpNode> {
- def _i8 : OneInOneOut<IL_OP_MOV, (outs GPRI8:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI8:$dst, (OpNode ADDR64:$ptr))]>;
- def _i16 : OneInOneOut<IL_OP_MOV, (outs GPRI16:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI16:$dst, (OpNode ADDR64:$ptr))]>;
- def _i32 : OneInOneOut<IL_OP_MOV, (outs GPRI32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI32:$dst, (OpNode ADDR64:$ptr))]>;
- def _f32 : OneInOneOut<IL_OP_MOV, (outs GPRF32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRF32:$dst, (OpNode ADDR64:$ptr))]>;
- def _i64 : OneInOneOut<IL_OP_MOV, (outs GPRI64:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRI64:$dst, (OpNode ADDR64:$ptr))]>;
- def _f64 : OneInOneOut<IL_OP_MOV, (outs GPRF64:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRF64:$dst, (OpNode ADDR64:$ptr))]>;
- def _v4f32 : OneInOneOut<IL_OP_MOV, (outs GPRV4F32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4F32:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2f32 : OneInOneOut<IL_OP_MOV, (outs GPRV2F32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2F32:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2f64 : OneInOneOut<IL_OP_MOV, (outs GPRV2F64:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2F64:$dst, (OpNode ADDR64:$ptr))]>;
- def _v4i32 : OneInOneOut<IL_OP_MOV, (outs GPRV4I32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I32:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2i8 : OneInOneOut<IL_OP_MOV, (outs GPRV2I8:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I8:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2i16 : OneInOneOut<IL_OP_MOV, (outs GPRV2I16:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I16:$dst, (OpNode ADDR64:$ptr))]>;
- def _v4i8 : OneInOneOut<IL_OP_MOV, (outs GPRV4I8:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I8:$dst, (OpNode ADDR64:$ptr))]>;
- def _v4i16 : OneInOneOut<IL_OP_MOV, (outs GPRV4I16:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV4I16:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2i32 : OneInOneOut<IL_OP_MOV, (outs GPRV2I32:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I32:$dst, (OpNode ADDR64:$ptr))]>;
- def _v2i64 : OneInOneOut<IL_OP_MOV, (outs GPRV2I64:$dst), (ins MEMI64:$ptr),
- !strconcat(asm, " $dst $ptr"),
- [(set GPRV2I64:$dst, (OpNode ADDR64:$ptr))]>;
- }
-
- // Only scalar types should generate flow control
- multiclass BranchInstr<ILOpCode opc> {
- def _i8 : UnaryOpNoRet<opc, (outs), (ins GPRI8:$src),
- !strconcat(opc.Text, " $src"), []>;
- def _i16 : UnaryOpNoRet<opc, (outs), (ins GPRI16:$src),
- !strconcat(opc.Text, " $src"), []>;
- def _i32 : UnaryOpNoRet<opc, (outs), (ins GPRI32:$src),
- !strconcat(opc.Text, " $src"), []>;
- def _i64 : UnaryOpNoRet<opc, (outs), (ins GPRI64:$src),
- !strconcat(opc.Text, " $src"), []>;
- def _f32 : UnaryOpNoRet<opc, (outs), (ins GPRF32:$src),
- !strconcat(opc.Text, " $src"), []>;
- def _f64 : UnaryOpNoRet<opc, (outs), (ins GPRF64:$src),
- !strconcat(opc.Text, " $src"), []>;
- }
- // Only scalar types should generate flow control
- multiclass BranchInstr2<ILOpCode opc> {
- def _i8 : BinaryOpNoRet<opc, (outs), (ins GPRI8:$src0, GPRI8:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- def _i16 : BinaryOpNoRet<opc, (outs), (ins GPRI16:$src0, GPRI16:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- def _i32 : BinaryOpNoRet<opc, (outs), (ins GPRI32:$src0, GPRI32:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- def _i64 : BinaryOpNoRet<opc, (outs), (ins GPRI64:$src0, GPRI64:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- def _f32 : BinaryOpNoRet<opc, (outs), (ins GPRF32:$src0, GPRF32:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- def _f64 : BinaryOpNoRet<opc, (outs), (ins GPRF64:$src0, GPRF64:$src1),
- !strconcat(opc.Text, " $src0, $src1"), []>;
- }
-
- // Class that handles the various vector extract patterns
- multiclass VectorExtract<SDNode OpNode> {
- def _v2f64 : ExtractVectorClass<GPRF64, GPRV2F64, OpNode>;
- def _v4f32: ExtractVectorClass<GPRF32, GPRV4F32, OpNode>;
- def _v2f32 : ExtractVectorClass<GPRF32, GPRV2F32, OpNode>;
- def _v2i64 : ExtractVectorClass<GPRI64, GPRV2I64, OpNode>;
- def _v4i8 : ExtractVectorClass<GPRI8, GPRV4I8, OpNode>;
- def _v4i16 : ExtractVectorClass<GPRI16, GPRV4I16, OpNode>;
- def _v4i32 : ExtractVectorClass<GPRI32, GPRV4I32, OpNode>;
- def _v2i8 : ExtractVectorClass<GPRI8, GPRV2I8, OpNode>;
- def _v2i16 : ExtractVectorClass<GPRI16, GPRV2I16, OpNode>;
- def _v2i32 : ExtractVectorClass<GPRI32, GPRV2I32, OpNode>;
- }
-
- multiclass VectorConcat<SDNode OpNode> {
- def _v2f64 : VectorConcatClass<GPRV2F64, GPRF64, OpNode>;
- def _v2i64 : VectorConcatClass<GPRV2F64, GPRI64, OpNode>;
- def _v4f32 : VectorConcatClass<GPRV4F32, GPRV2F32, OpNode>;
- def _v4i32 : VectorConcatClass<GPRV4I32, GPRV2I32, OpNode>;
- def _v4i16 : VectorConcatClass<GPRV4I16, GPRV2I16, OpNode>;
- def _v4i8 : VectorConcatClass<GPRV4I8, GPRV2I8, OpNode>;
- def _v2f32 : VectorConcatClass<GPRV2F32, GPRF32, OpNode>;
- def _v2i32 : VectorConcatClass<GPRV2I32, GPRI32, OpNode>;
- def _v2i16 : VectorConcatClass<GPRV2I16, GPRI16, OpNode>;
- def _v2i8 : VectorConcatClass<GPRV2I8, GPRI8, OpNode>;
- }
-
- // Class that handles the various vector insert patterns
- multiclass VectorInsert<SDNode OpNode> {
- def _v2f64 : InsertVectorClass<IL_OP_I_ADD, GPRV2F64,
- GPRF64, OpNode, "iadd">;
- def _v4f32: InsertVectorClass<IL_OP_I_ADD, GPRV4F32,
- GPRF32, OpNode, "iadd">;
- def _v2f32 : InsertVectorClass<IL_OP_I_ADD, GPRV2F32,
- GPRF32, OpNode, "iadd">;
- def _v2i64 : InsertVectorClass<IL_OP_I_ADD, GPRV2I64,
- GPRI64, OpNode, "iadd">;
- def _v4i8 : InsertVectorClass<IL_OP_I_ADD, GPRV4I8,
- GPRI8, OpNode, "iadd">;
- def _v4i16 : InsertVectorClass<IL_OP_I_ADD, GPRV4I16,
- GPRI16, OpNode, "iadd">;
- def _v4i32 : InsertVectorClass<IL_OP_I_ADD, GPRV4I32,
- GPRI32, OpNode, "iadd">;
- def _v2i8 : InsertVectorClass<IL_OP_I_ADD, GPRV2I8,
- GPRI8, OpNode, "iadd">;
- def _v2i16 : InsertVectorClass<IL_OP_I_ADD, GPRV2I16,
- GPRI16, OpNode, "iadd">;
- def _v2i32 : InsertVectorClass<IL_OP_I_ADD, GPRV2I32,
- GPRI32, OpNode, "iadd">;
- }
-
- // generic class that handles math instruction for OneInOneOut instruction
- // patterns
- multiclass UnaryOpMC<ILOpCode OpCode, SDNode OpNode> {
- def _i8 : UnaryOp<OpCode, OpNode, GPRI8, GPRI8>;
- def _i16 : UnaryOp<OpCode, OpNode, GPRI16, GPRI16>;
- def _i32 : UnaryOp<OpCode, OpNode, GPRI32, GPRI32>;
- def _f32 : UnaryOp<OpCode, OpNode, GPRF32, GPRF32>;
- def _f64 : UnaryOp<OpCode, OpNode, GPRF64, GPRF64>;
- def _i64 : UnaryOp<OpCode, OpNode, GPRI64, GPRI64>;
- def _v4f32: UnaryOp<OpCode, OpNode, GPRV4F32, GPRV4F32>;
- def _v4i16 : UnaryOp<OpCode, OpNode, GPRV4I16, GPRV4I16>;
- def _v4i8 : UnaryOp<OpCode, OpNode, GPRV4I8, GPRV4I8>;
- def _v4i32 : UnaryOp<OpCode, OpNode, GPRV4I32, GPRV4I32>;
- def _v2f32 : UnaryOp<OpCode, OpNode, GPRV2F32, GPRV2F32>;
- def _v2i16 : UnaryOp<OpCode, OpNode, GPRV2I16, GPRV2I16>;
- def _v2i8 : UnaryOp<OpCode, OpNode, GPRV2I8, GPRV2I8>;
- def _v2i32 : UnaryOp<OpCode, OpNode, GPRV2I32, GPRV2I32>;
- def _v2f64 : UnaryOp<OpCode, OpNode, GPRV2F64, GPRV2F64>;
- def _v2i64 : UnaryOp<OpCode, OpNode, GPRV2I64, GPRV2I64>;
- }
- multiclass UnaryOpMCVec<ILOpCode OpCode, SDNode OpNode> {
- def _v4f32: UnaryOp<OpCode, OpNode, GPRV4F32, GPRF32>;
- def _v4i16 : UnaryOp<OpCode, OpNode, GPRV4I16, GPRI16>;
- def _v4i8 : UnaryOp<OpCode, OpNode, GPRV4I8, GPRI8>;
- def _v4i32 : UnaryOp<OpCode, OpNode, GPRV4I32, GPRI32>;
- def _v2f32 : UnaryOp<OpCode, OpNode, GPRV2F32, GPRF32>;
- def _v2i16 : UnaryOp<OpCode, OpNode, GPRV2I16, GPRI16>;
- def _v2i8 : UnaryOp<OpCode, OpNode, GPRV2I8, GPRI8>;
- def _v2i32 : UnaryOp<OpCode, OpNode, GPRV2I32, GPRI32>;
- def _v2f64 : UnaryOp<OpCode, OpNode, GPRV2F64, GPRF64>;
- def _v2i64 : UnaryOp<OpCode, OpNode, GPRV2I64, GPRI64>;
- }
-
- multiclass UnaryOpMCf32<
- ILOpCode f32OpCode,
- SDNode OpNode> {
- def _f32 : UnaryOp<f32OpCode, OpNode, GPRF32, GPRF32>;
- def _v4f32: UnaryOp<f32OpCode, OpNode, GPRV4F32, GPRV4F32>;
- def _v2f32 : UnaryOp<f32OpCode, OpNode, GPRV2F32, GPRV2F32>;
- }
-
- multiclass UnaryOpMCi32<
- ILOpCode i32OpCode,
- SDNode OpNode> {
- def _i8 : UnaryOp<i32OpCode, OpNode, GPRI8, GPRI8>;
- def _i16 : UnaryOp<i32OpCode, OpNode, GPRI16, GPRI16>;
- def _i32 : UnaryOp<i32OpCode, OpNode, GPRI32, GPRI32>;
- def _v4i16 : UnaryOp<i32OpCode, OpNode, GPRV4I16, GPRV4I16>;
- def _v4i8 : UnaryOp<i32OpCode, OpNode, GPRV4I8, GPRV4I8>;
- def _v4i32 : UnaryOp<i32OpCode, OpNode, GPRV4I32, GPRV4I32>;
- def _v2i16 : UnaryOp<i32OpCode, OpNode, GPRV2I16, GPRV2I16>;
- def _v2i8 : UnaryOp<i32OpCode, OpNode, GPRV2I8, GPRV2I8>;
- def _v2i32 : UnaryOp<i32OpCode, OpNode, GPRV2I32, GPRV2I32>;
- }
-
-
- multiclass BinaryOpMC<ILOpCode OpCode, SDNode OpNode> {
- def _i8 : BinaryOp<OpCode, OpNode, GPRI8, GPRI8, GPRI8>;
-
- def _i16 : BinaryOp<OpCode, OpNode, GPRI16, GPRI16, GPRI16>;
- def _i32 : BinaryOp<OpCode, OpNode, GPRI32, GPRI32, GPRI32>;
- def _f32 : BinaryOp<OpCode, OpNode, GPRF32, GPRF32, GPRF32>;
- def _f64 : BinaryOp<OpCode, OpNode, GPRF64, GPRF64, GPRF64>;
- def _i64 : BinaryOp<OpCode, OpNode, GPRI64, GPRI64, GPRI64>;
- def _v4f32: BinaryOp<OpCode, OpNode, GPRV4F32, GPRV4F32, GPRV4F32>;
- def _v4i16 : BinaryOp<OpCode, OpNode, GPRV4I16, GPRV4I16, GPRV4I16>;
- def _v4i8 : BinaryOp<OpCode, OpNode, GPRV4I8, GPRV4I8, GPRV4I8>;
- def _v4i32 : BinaryOp<OpCode, OpNode, GPRV4I32, GPRV4I32, GPRV4I32>;
- def _v2f32 : BinaryOp<OpCode, OpNode, GPRV2F32, GPRV2F32, GPRV2F32>;
- def _v2i16 : BinaryOp<OpCode, OpNode, GPRV2I16, GPRV2I16, GPRV2I16>;
- def _v2i8 : BinaryOp<OpCode, OpNode, GPRV2I8, GPRV2I8, GPRV2I8>;
- def _v2i32 : BinaryOp<OpCode, OpNode, GPRV2I32, GPRV2I32, GPRV2I32>;
- def _v2f64 : BinaryOp<OpCode, OpNode, GPRV2F64, GPRV2F64, GPRV2F64>;
- def _v2i64 : BinaryOp<OpCode, OpNode, GPRV2I64, GPRV2I64, GPRV2I64>;
- }
-
- multiclass BinaryOpMCInt<ILOpCode OpCode, SDNode OpNode> {
- def _i8 : BinaryOp<OpCode, OpNode, GPRI8, GPRI8, GPRI8>;
-
- def _i16 : BinaryOp<OpCode, OpNode, GPRI16, GPRI16, GPRI16>;
- def _i32 : BinaryOp<OpCode, OpNode, GPRI32, GPRI32, GPRI32>;
- def _i64 : BinaryOp<OpCode, OpNode, GPRI64, GPRI64, GPRI64>;
- def _v4i16 : BinaryOp<OpCode, OpNode, GPRV4I16, GPRV4I16, GPRV4I16>;
- def _v4i8 : BinaryOp<OpCode, OpNode, GPRV4I8, GPRV4I8, GPRV4I8>;
- def _v4i32 : BinaryOp<OpCode, OpNode, GPRV4I32, GPRV4I32, GPRV4I32>;
- def _v2i16 : BinaryOp<OpCode, OpNode, GPRV2I16, GPRV2I16, GPRV2I16>;
- def _v2i8 : BinaryOp<OpCode, OpNode, GPRV2I8, GPRV2I8, GPRV2I8>;
- def _v2i32 : BinaryOp<OpCode, OpNode, GPRV2I32, GPRV2I32, GPRV2I32>;
- def _v2i64 : BinaryOp<OpCode, OpNode, GPRV2I64, GPRV2I64, GPRV2I64>;
- }
-
- // generic class that handles math instruction for ThreeInOneOut
- // instruction patterns
- multiclass TernaryOpMC<ILOpCode OpCode, SDNode OpNode> {
- def _i8 : TernaryOp<OpCode, OpNode, GPRI8, GPRI8, GPRI8, GPRI8>;
- def _i16 : TernaryOp<OpCode, OpNode, GPRI16, GPRI16, GPRI16, GPRI16>;
- def _i32 : TernaryOp<OpCode, OpNode, GPRI32, GPRI32, GPRI32, GPRI32>;
- def _f32 : TernaryOp<OpCode, OpNode, GPRF32, GPRF32, GPRF32, GPRF32>;
- def _f64 : TernaryOp<OpCode, OpNode, GPRF64, GPRF64, GPRF64, GPRF64>;
- def _i64 : TernaryOp<OpCode, OpNode, GPRI64, GPRI64, GPRI64, GPRI64>;
- def _v4f32: TernaryOp<OpCode, OpNode, GPRV4F32, GPRV4F32,
- GPRV4F32, GPRV4F32>;
- def _v4i8 : TernaryOp<OpCode, OpNode, GPRV4I8, GPRV4I8,
- GPRV4I8, GPRV4I8>;
- def _v4i16 : TernaryOp<OpCode, OpNode, GPRV4I16, GPRV4I16,
- GPRV4I16, GPRV4I16>;
- def _v4i32 : TernaryOp<OpCode, OpNode, GPRV4I32, GPRV4I32,
- GPRV4I32, GPRV4I32>;
- def _v2f32 : TernaryOp<OpCode, OpNode, GPRV2F32, GPRV2F32,
- GPRV2F32, GPRV2F32>;
- def _v2i8 : TernaryOp<OpCode, OpNode, GPRV2I8, GPRV2I8,
- GPRV2I8, GPRV2I8>;
- def _v2i16 : TernaryOp<OpCode, OpNode, GPRV2I16, GPRV2I16,
- GPRV2I16, GPRV2I16>;
- def _v2i32 : TernaryOp<OpCode, OpNode, GPRV2I32, GPRV2I32,
- GPRV2I32, GPRV2I32>;
- def _v2f64 : TernaryOp<OpCode, OpNode, GPRV2F64, GPRV2F64,
- GPRV2F64, GPRV2F64>;
- def _v2i64 : TernaryOp<OpCode, OpNode, GPRV2I64, GPRV2I64,
- GPRV2I64, GPRV2I64>;
- }
- multiclass BinaryOpMCi32<ILOpCode i32OpCode, SDNode OpNode> {
- def _i8 : BinaryOp<i32OpCode, OpNode, GPRI8, GPRI8, GPRI8>;
- def _i16 : BinaryOp<i32OpCode, OpNode, GPRI16, GPRI16, GPRI16>;
- def _i32 : BinaryOp<i32OpCode, OpNode, GPRI32, GPRI32, GPRI32>;
- def _v4i16 : BinaryOp<i32OpCode, OpNode, GPRV4I16,
- GPRV4I16, GPRV4I16>;
- def _v4i8 : BinaryOp<i32OpCode, OpNode, GPRV4I8,
- GPRV4I8, GPRV4I8>;
- def _v4i32 : BinaryOp<i32OpCode, OpNode, GPRV4I32,
- GPRV4I32, GPRV4I32>;
- def _v2i16 : BinaryOp<i32OpCode, OpNode, GPRV2I16,
- GPRV2I16, GPRV2I16>;
- def _v2i8 : BinaryOp<i32OpCode, OpNode, GPRV2I8,
- GPRV2I8, GPRV2I8>;
- def _v2i32 : BinaryOp<i32OpCode, OpNode, GPRV2I32,
- GPRV2I32, GPRV2I32>;
- }
- multiclass BinaryOpMCi64<ILOpCode i64OpCode, SDNode OpNode> {
- def _i64 : BinaryOp<i64OpCode, OpNode, GPRI64, GPRI64, GPRI64>;
- def _v2i64 : BinaryOp<i64OpCode, OpNode, GPRV2I64,
- GPRV2I64, GPRV2I64>;
- }
- multiclass BinaryOpMCi32Const<ILOpCode i32OpCode, SDNode OpNode> {
- def _i8 : BinaryOp<i32OpCode, OpNode, GPRI8, GPRI8, GPRI32>;
- def _i16 : BinaryOp<i32OpCode, OpNode, GPRI16, GPRI16, GPRI32>;
- def _i32 : BinaryOp<i32OpCode, OpNode, GPRI32, GPRI32, GPRI32>;
- def _v4i16 : BinaryOp<i32OpCode, OpNode, GPRV4I32,
- GPRV4I32, GPRI32>;
- def _v4i8 : BinaryOp<i32OpCode, OpNode, GPRV4I32,
- GPRV4I32, GPRI32>;
- def _v4i32 : BinaryOp<i32OpCode, OpNode, GPRV4I32,
- GPRV4I32, GPRI32>;
- def _v2i16 : BinaryOp<i32OpCode, OpNode, GPRV2I32,
- GPRV2I32, GPRI32>;
- def _v2i8 : BinaryOp<i32OpCode, OpNode, GPRV2I32,
- GPRV2I32, GPRI32>;
- def _v2i32 : BinaryOp<i32OpCode, OpNode, GPRV2I32,
- GPRV2I32, GPRI32>;
- }
- multiclass BinaryOpMCf32<ILOpCode f32OpCode, SDNode OpNode> {
- def _f32 : BinaryOp<f32OpCode, OpNode, GPRF32,
- GPRF32, GPRF32>;
- def _v4f32: BinaryOp<f32OpCode, OpNode, GPRV4F32,
- GPRV4F32, GPRV4F32>;
- def _v2f32 : BinaryOp<f32OpCode, OpNode, GPRV2F32,
- GPRV2F32, GPRV2F32>;
- }
-
- multiclass TernaryOpMCf64<ILOpCode f64OpCode, SDNode OpNode> {
- def _f64 : TernaryOp<f64OpCode, OpNode, GPRF64,
- GPRF64, GPRF64, GPRF64>;
- }
-
- multiclass TernaryOpMCf32<ILOpCode f32OpCode, SDNode OpNode> {
- def _f32 : TernaryOp<f32OpCode, OpNode, GPRF32,
- GPRF32, GPRF32, GPRF32>;
- def _v4f32: TernaryOp<f32OpCode, OpNode, GPRV4F32,
- GPRV4F32, GPRV4F32, GPRV4F32>;
- def _v2f32 : TernaryOp<f32OpCode, OpNode, GPRV2F32,
- GPRV2F32, GPRV2F32, GPRV2F32>;
- }
- multiclass BinaryOpMCFloat<ILOpCode f32OpCode, ILOpCode f64OpCode,
- SDNode OpNode> {
- def _f64 : BinaryOp<f64OpCode, OpNode, GPRF64,
- GPRF64, GPRF64>;
- def _v2f64 : BinaryOp<f64OpCode, OpNode, GPRV2F64,
- GPRV2F64, GPRV2F64>;
- def _f32 : BinaryOp<f32OpCode, OpNode, GPRF32,
- GPRF32, GPRF32>;
- def _v2f32 : BinaryOp<f32OpCode, OpNode, GPRV2F32,
- GPRV2F32, GPRV2F32>;
- def _v4f32: BinaryOp<f32OpCode, OpNode, GPRV4F32,
- GPRV4F32, GPRV4F32>;
- }
-
- multiclass TernaryOpMCScalar<ILOpCode opcode, SDNode node>
- {
- def _i8: TernaryOp<opcode, node, GPRI8, GPRI8, GPRI8, GPRI8>;
- def _i16: TernaryOp<opcode, node, GPRI16, GPRI8, GPRI16, GPRI16>;
- def _i32: TernaryOp<opcode, node, GPRI32, GPRI8, GPRI32, GPRI32>;
- def _i64: TernaryOp<opcode, node, GPRI64, GPRI8, GPRI64, GPRI64>;
- def _f32: TernaryOp<opcode, node, GPRF32, GPRI8, GPRF32, GPRF32>;
- def _f64: TernaryOp<opcode, node, GPRF64, GPRI8, GPRF64, GPRF64>;
- }
-
-
- multiclass BitConversion<ILOpCode opcode, RegisterClass Regs, SDNode OpNode>
- {
- def _i8 : UnaryOp<opcode, OpNode, Regs, GPRI8>;
- def _i16 : UnaryOp<opcode, OpNode, Regs, GPRI16>;
- def _i32 : UnaryOp<opcode, OpNode, Regs, GPRI32>;
- def _f32 : UnaryOp<opcode, OpNode, Regs, GPRF32>;
- def _i64 : UnaryOp<opcode, OpNode, Regs, GPRI64>;
- def _f64 : UnaryOp<opcode, OpNode, Regs, GPRF64>;
- def _v2i8 : UnaryOp<opcode, OpNode, Regs, GPRV2I8>;
- def _v2i16 : UnaryOp<opcode, OpNode, Regs, GPRV2I16>;
- def _v2i32 : UnaryOp<opcode, OpNode, Regs, GPRV2I32>;
- def _v2f32 : UnaryOp<opcode, OpNode, Regs, GPRV2F32>;
- def _v2i64 : UnaryOp<opcode, OpNode, Regs, GPRV2I64>;
- def _v2f64 : UnaryOp<opcode, OpNode, Regs, GPRV2F64>;
- def _v4i8 : UnaryOp<opcode, OpNode, Regs, GPRV4I8>;
- def _v4i16 : UnaryOp<opcode, OpNode, Regs, GPRV4I16>;
- def _v4i32 : UnaryOp<opcode, OpNode, Regs, GPRV4I32>;
- def _v4f32 : UnaryOp<opcode, OpNode, Regs, GPRV4F32>;
- }
-
-
- multiclass UnaryIntrinsicInt<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : OneInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRI32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRI32:$dst, (intr GPRI32:$src))]>;
- def _v2i32 : OneInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (intr GPRV2I32:$src))]>;
- def _v4i32 : OneInOneOut<opcode, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4I32:$dst, (intr GPRV4I32:$src))]>;
- }
-
- multiclass IntrConvertF32TOF16<ILOpCode opcode, Intrinsic intr>
- {
- def _i16 : OneInOneOut<opcode, (outs GPRI16:$dst),
- (ins GPRF32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRI16:$dst, (intr GPRF32:$src))]>;
- def _v2i16 : OneInOneOut<opcode, (outs GPRV2I16:$dst),
- (ins GPRV2F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2I16:$dst, (intr GPRV2F32:$src))]>;
- def _v4i16 : OneInOneOut<opcode, (outs GPRV4I16:$dst),
- (ins GPRV4F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4I16:$dst, (intr GPRV4F32:$src))]>;
- }
-
-
- multiclass IntrConvertF32TOI32<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : OneInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRF32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRI32:$dst, (intr GPRF32:$src))]>;
- def _v2i32 : OneInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (intr GPRV2F32:$src))]>;
- def _v4i32 : OneInOneOut<opcode, (outs GPRV4I32:$dst),
- (ins GPRV4F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4I32:$dst, (intr GPRV4F32:$src))]>;
- }
-
- multiclass IntrConvertF64TOI32<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : OneInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRF64:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRI32:$dst, (intr GPRF64:$src))]>;
- def _v2i32 : OneInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2F64:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2I32:$dst, (intr GPRV2F64:$src))]>;
- }
-
- multiclass IntrConvertF16TOF32<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : OneInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRI16:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF32:$dst, (intr GPRI16:$src))]>;
- def _v2f32 : OneInOneOut<opcode, (outs GPRV2F32:$dst),
- (ins GPRV2I16:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2F32:$dst, (intr GPRV2I16:$src))]>;
- def _v4f32 : OneInOneOut<opcode, (outs GPRV4F32:$dst),
- (ins GPRV4I16:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4F32:$dst, (intr GPRV4I16:$src))]>;
- }
-
-
- multiclass IntrConvertI32TOF32<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : OneInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRI32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF32:$dst, (intr GPRI32:$src))]>;
- def _v2f32 : OneInOneOut<opcode, (outs GPRV2F32:$dst),
- (ins GPRV2I32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2F32:$dst, (intr GPRV2I32:$src))]>;
- def _v4f32 : OneInOneOut<opcode, (outs GPRV4F32:$dst),
- (ins GPRV4I32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4F32:$dst, (intr GPRV4I32:$src))]>;
- }
-
- multiclass BinaryIntrinsicLong<ILOpCode opcode, Intrinsic intr>
- {
- def _i64 : TwoInOneOut<opcode, (outs GPRI64:$dst),
- (ins GPRI64:$src, GPRI64:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRI64:$dst,
- (intr GPRI64:$src, GPRI64:$src2))]>;
- }
-
-
- multiclass BinaryIntrinsicInt<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : TwoInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRI32:$src, GPRI32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRI32:$dst,
- (intr GPRI32:$src, GPRI32:$src2))]>;
- def _v2i32 : TwoInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$src, GPRV2I32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRV2I32:$dst,
- (intr GPRV2I32:$src, GPRV2I32:$src2))]>;
- def _v4i32 : TwoInOneOut<opcode, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$src, GPRV4I32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRV4I32:$dst,
- (intr GPRV4I32:$src, GPRV4I32:$src2))]>;
- }
-
- multiclass TernaryIntrinsicInt<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : ThreeInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRI32:$src, GPRI32:$src2, GPRI32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRI32:$dst,
- (intr GPRI32:$src, GPRI32:$src2, GPRI32:$src3))]>;
- def _v2i32 : ThreeInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$src, GPRV2I32:$src2, GPRV2I32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRV2I32:$dst,
- (intr GPRV2I32:$src, GPRV2I32:$src2, GPRV2I32:$src3))]>;
- def _v4i32 : ThreeInOneOut<opcode, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$src, GPRV4I32:$src2, GPRV4I32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRV4I32:$dst,
- (intr GPRV4I32:$src, GPRV4I32:$src2, GPRV4I32:$src3))]>;
- }
-
- multiclass TernaryIntrinsicFloat<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : ThreeInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRF32:$src, GPRF32:$src2, GPRF32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRF32:$dst,
- (intr GPRF32:$src, GPRF32:$src2, GPRF32:$src3))]>;
- def _v2f32 : ThreeInOneOut<opcode, (outs GPRV2F32:$dst),
- (ins GPRV2F32:$src, GPRV2F32:$src2, GPRV2F32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRV2F32:$dst,
- (intr GPRV2F32:$src, GPRV2F32:$src2, GPRV2F32:$src3))]>;
- def _v4f32 : ThreeInOneOut<opcode, (outs GPRV4F32:$dst),
- (ins GPRV4F32:$src, GPRV4F32:$src2, GPRV4F32:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRV4F32:$dst,
- (intr GPRV4F32:$src, GPRV4F32:$src2, GPRV4F32:$src3))]>;
- }
-
- multiclass BinaryIntrinsicDoubleScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : ThreeInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src, GPRF64:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRF64:$dst,
- (intr GPRF64:$src, GPRF64:$src2))]>;
- }
-
- multiclass TernaryIntrinsicDoubleScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : ThreeInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src, GPRF64:$src2, GPRF64:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRF64:$dst,
- (intr GPRF64:$src, GPRF64:$src2, GPRF64:$src3))]>;
- }
-
-
- multiclass TernaryIntrinsicLongScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _i64 : ThreeInOneOut<opcode, (outs GPRI64:$dst),
- (ins GPRI64:$src, GPRI64:$src2, GPRI64:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRI64:$dst,
- (intr GPRI64:$src, GPRI64:$src2, GPRI64:$src3))]>;
- }
-
- multiclass QuaternaryIntrinsicInt<ILOpCode opcode, Intrinsic intr>
- {
- def _i32 : FourInOneOut<opcode, (outs GPRI32:$dst),
- (ins GPRI32:$src, GPRI32:$src2, GPRI32:$src3, GPRI32:$src4),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3, $src4"),
- [(set GPRI32:$dst,
- (intr GPRI32:$src, GPRI32:$src2, GPRI32:$src3, GPRI32:$src4))]>;
- def _v2i32 : FourInOneOut<opcode, (outs GPRV2I32:$dst),
- (ins GPRV2I32:$src, GPRV2I32:$src2, GPRV2I32:$src3, GPRV2I32:$src4),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3, $src4"),
- [(set GPRV2I32:$dst,
- (intr GPRV2I32:$src, GPRV2I32:$src2, GPRV2I32:$src3, GPRV2I32:$src4))]>;
- def _v4i32 : FourInOneOut<opcode, (outs GPRV4I32:$dst),
- (ins GPRV4I32:$src, GPRV4I32:$src2, GPRV4I32:$src3, GPRV4I32:$src4),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3, $src4"),
- [(set GPRV4I32:$dst,
- (intr GPRV4I32:$src, GPRV4I32:$src2, GPRV4I32:$src3, GPRV4I32:$src4))]>;
- }
-
- multiclass UnaryIntrinsicFloatScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : OneInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRF32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF32:$dst, (intr GPRF32:$src))]>;
- }
-
- multiclass UnaryIntrinsicFloat<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : OneInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRF32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF32:$dst, (intr GPRF32:$src))]>;
- def _v2f32 : OneInOneOut<opcode, (outs GPRV2F32:$dst),
- (ins GPRV2F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2F32:$dst, (intr GPRV2F32:$src))]>;
- def _v4f32 : OneInOneOut<opcode, (outs GPRV4F32:$dst),
- (ins GPRV4F32:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV4F32:$dst, (intr GPRV4F32:$src))]>;
- }
-
- multiclass BinaryIntrinsicFloatScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : TwoInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRF32:$src, GPRF32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRF32:$dst,
- (intr GPRF32:$src, GPRF32:$src2))]>;
- }
- multiclass BinaryIntrinsicFloat<ILOpCode opcode, Intrinsic intr>
- {
- def _f32 : TwoInOneOut<opcode, (outs GPRF32:$dst),
- (ins GPRF32:$src, GPRF32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRF32:$dst,
- (intr GPRF32:$src, GPRF32:$src2))]>;
- def _v2f32 : TwoInOneOut<opcode, (outs GPRV2F32:$dst),
- (ins GPRV2F32:$src, GPRV2F32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRV2F32:$dst,
- (intr GPRV2F32:$src, GPRV2F32:$src2))]>;
- def _v4f32 : TwoInOneOut<opcode, (outs GPRV4F32:$dst),
- (ins GPRV4F32:$src, GPRV4F32:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRV4F32:$dst,
- (intr GPRV4F32:$src, GPRV4F32:$src2))]>;
- }
-
- multiclass UnaryIntrinsicDoubleScalar<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : OneInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF64:$dst, (intr GPRF64:$src))]>;
- }
-
- multiclass UnaryIntrinsicDouble<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : OneInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRF64:$dst, (intr GPRF64:$src))]>;
- def _v2f64 : OneInOneOut<opcode, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src),
- !strconcat(opcode.Text, " $dst, $src"),
- [(set GPRV2F64:$dst, (intr GPRV2F64:$src))]>;
- }
-
- multiclass BinaryIntrinsicDouble<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : TwoInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src, GPRF64:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRF64:$dst,
- (intr GPRF64:$src, GPRF64:$src2))]>;
- def _v2f64 : TwoInOneOut<opcode, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src, GPRV2F64:$src2),
- !strconcat(opcode.Text, " $dst, $src, $src2"),
- [(set GPRV2F64:$dst,
- (intr GPRV2F64:$src, GPRV2F64:$src2))]>;
- }
-
- multiclass TernaryIntrinsicDouble<ILOpCode opcode, Intrinsic intr>
- {
- def _f64 : TwoInOneOut<opcode, (outs GPRF64:$dst),
- (ins GPRF64:$src, GPRF64:$src2, GPRF64:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRF64:$dst,
- (intr GPRF64:$src, GPRF64:$src2, GPRF64:$src3))]>;
- def _v2f64 : TwoInOneOut<opcode, (outs GPRV2F64:$dst),
- (ins GPRV2F64:$src, GPRV2F64:$src2, GPRV2F64:$src3),
- !strconcat(opcode.Text, " $dst, $src, $src2, $src3"),
- [(set GPRV2F64:$dst,
- (intr GPRV2F64:$src, GPRV2F64:$src2, GPRV2F64:$src3))]>;
- }
|