X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FHexagon%2FHexagonIntrinsicsV4.td;h=c80a188d82e7ed93cbfb03fe425d901761313997;hb=0b48c1e633a249b150f059b18cc478f6307a01f7;hp=ae2d463fa68a693fced7c112ff68f2849c3ebb06;hpb=a3a588d983eb5d99f25cab2afe1ad7bdba414b3e;p=oota-llvm.git diff --git a/lib/Target/Hexagon/HexagonIntrinsicsV4.td b/lib/Target/Hexagon/HexagonIntrinsicsV4.td index ae2d463fa68..c80a188d82e 100644 --- a/lib/Target/Hexagon/HexagonIntrinsicsV4.td +++ b/lib/Target/Hexagon/HexagonIntrinsicsV4.td @@ -12,6 +12,38 @@ // 80-V9418-12 Rev. A // June 15, 2010 +// Vector reduce multiply word by signed half (32x16) +//Rdd=vrmpyweh(Rss,Rtt)[:<<1] +def : T_PP_pat ; +def : T_PP_pat ; + +//Rdd=vrmpywoh(Rss,Rtt)[:<<1] +def : T_PP_pat ; +def : T_PP_pat ; + +//Rdd+=vrmpyweh(Rss,Rtt)[:<<1] +def : T_PPP_pat ; +def : T_PPP_pat ; + +//Rdd=vrmpywoh(Rss,Rtt)[:<<1] +def : T_PPP_pat ; +def : T_PPP_pat ; + +// Vector multiply halfwords, signed by unsigned +// Rdd=vmpyhsu(Rs,Rt)[:<<1]:sat +def : T_RR_pat ; +def : T_RR_pat ; + +// Rxx+=vmpyhsu(Rs,Rt)[:<<1]:sat +def : T_PRR_pat ; +def : T_PRR_pat ; + +// Vector polynomial multiply halfwords +// Rdd=vpmpyh(Rs,Rt) +def : T_RR_pat ; +// Rxx[^]=vpmpyh(Rs,Rt) +def : T_PRR_pat ; + // Polynomial multiply words // Rdd=pmpyw(Rs,Rt) def : T_RR_pat ; @@ -46,6 +78,25 @@ def: T_RR_pat; def: T_RR_pat; def: T_RI_pat; + +class vcmpImm_pat : + Pat <(IntID (i64 DoubleRegs:$src1), immPred:$src2), + (MI (i64 DoubleRegs:$src1), immPred:$src2)>; + +def : vcmpImm_pat ; +def : vcmpImm_pat ; +def : vcmpImm_pat ; + +def : vcmpImm_pat ; +def : vcmpImm_pat ; +def : vcmpImm_pat ; + +def : vcmpImm_pat ; +def : vcmpImm_pat ; +def : vcmpImm_pat ; + +def : T_PP_pat; + def : T_RR_pat; def : T_RR_pat; def : T_RR_pat; @@ -77,9 +128,25 @@ def : T_RRI_pat ; def : T_RRR_pat ; def : T_RRR_pat ; +// Complex multiply 32x16 +def : T_PR_pat ; +def : T_PR_pat ; + +def : T_PR_pat ; +def : T_PR_pat ; + def : T_PP_pat; def : T_PP_pat; +// Complex add/sub halfwords/words +def : T_PP_pat ; +def : T_PP_pat ; +def : T_PP_pat ; +def : T_PP_pat ; + +def : T_PP_pat ; +def : T_PP_pat ; + // Extract bitfield def : T_PP_pat ; def : T_RP_pat ; @@ -109,6 +176,18 @@ def : T_PPR_pat ; def : T_PPR_pat ; def : T_PPR_pat ; +// Rotate and reduce bytes +def : Pat <(int_hexagon_S4_vrcrotate DoubleRegs:$src1, IntRegs:$src2, + u2ImmPred:$src3), + (S4_vrcrotate DoubleRegs:$src1, IntRegs:$src2, u2ImmPred:$src3)>; + +// Rotate and reduce bytes with accumulation +// Rxx+=vrcrotate(Rss,Rt,#u2) +def : Pat <(int_hexagon_S4_vrcrotate_acc DoubleRegs:$src1, DoubleRegs:$src2, + IntRegs:$src3, u2ImmPred:$src4), + (S4_vrcrotate_acc DoubleRegs:$src1, DoubleRegs:$src2, + IntRegs:$src3, u2ImmPred:$src4)>; + // Vector conditional negate def : T_PPR_pat; @@ -155,17 +234,17 @@ def: T_RR_pat; *********************************************************************/ // Combine Words Into Doublewords. -def: T_RI_pat; -def: T_IR_pat; +def: T_RI_pat; +def: T_IR_pat; /******************************************************************** * ALU32/PRED * *********************************************************************/ // Compare -def : T_RI_pat; -def : T_RI_pat; -def : T_RI_pat; +def : T_RI_pat; +def : T_RI_pat; +def : T_RI_pat; def: T_RR_pat; def: T_RR_pat;