diff options
Diffstat (limited to 'src/gallium/drivers/radeon/AMDILMultiClass.td')
-rw-r--r-- | src/gallium/drivers/radeon/AMDILMultiClass.td | 1345 |
1 files changed, 0 insertions, 1345 deletions
diff --git a/src/gallium/drivers/radeon/AMDILMultiClass.td b/src/gallium/drivers/radeon/AMDILMultiClass.td index d6828178ba7..12e92f571e6 100644 --- a/src/gallium/drivers/radeon/AMDILMultiClass.td +++ b/src/gallium/drivers/radeon/AMDILMultiClass.td @@ -8,14 +8,6 @@ //==-----------------------------------------------------------------------===// // 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", @@ -24,1417 +16,80 @@ multiclass BranchConditional<SDNode Op> { (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))]>; } |