Author: mberg Date: 2011-07-26 15:26:20 -0400 (Tue, 26 Jul 2011) New Revision: 3703
Modified: trunk/osprey/be/cg/ebo.cxx trunk/osprey/be/cg/lra.cxx trunk/osprey/be/cg/oputil.cxx trunk/osprey/be/cg/x8664/cgemit_targ.cxx trunk/osprey/be/cg/x8664/cgtarget.cxx trunk/osprey/be/cg/x8664/cgtarget_arch.h trunk/osprey/be/cg/x8664/expand.cxx trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx Log: Updated {|v}movs{s|d} instructions and the intrinsics that use them in the machine description. Also migrated expansion in the generic path to use movdq in place of these instructions and placed the target specific guards for x8664 for platforms which use the more efficient move forms into copy expansion code. Renamed autotranslation alaises back to native forms for correctness reasons. CR by Sun. Modified: trunk/osprey/be/cg/ebo.cxx =================================================================== --- trunk/osprey/be/cg/ebo.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/ebo.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -4645,10 +4645,14 @@ (OP_code(op) == TOP_movapd) ||(OP_code(op) == TOP_movss)|| (OP_code(op) == TOP_movsd) ||(OP_code(op) == TOP_movdq)|| (OP_code(op) == TOP_mov64) ||(OP_code(op) == TOP_mov32)|| - (OP_code(op) == TOP_vmovaps) ||(OP_code(op) == TOP_vmovsd)|| + (OP_code(op) == TOP_vmovaps) ||(OP_code(op) == TOP_vmovss)|| (OP_code(op) == TOP_vmovsd) || (OP_code(op) == TOP_vmovapd))&& (CGTARG_Copy_Operand(op)>=0)){ + if( ( (OP_code(op) == TOP_vmovss) || (OP_code(op) == TOP_vmovsd) || + (OP_code(op) == TOP_movss) || (OP_code(op) == TOP_movsd) ) && + ( OP_opnd(op,0) == OP_opnd(op,1) ) ) + return TRUE; if(Is_Target_Orochi() && OP_opnds(op)<=1) return TRUE; if(!Is_Target_Orochi()) Modified: trunk/osprey/be/cg/lra.cxx =================================================================== --- trunk/osprey/be/cg/lra.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/lra.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -1575,7 +1575,15 @@ TN *tn1 = OP_result(op,0); TN *tn2 = OP_opnd(op,CGTARG_Copy_Operand(op)); - if ( TN_size(tn1) != TN_size(tn2) ) + // check for merge copy case + if ((OP_code(op) == TOP_movss) || + (OP_code(op) == TOP_movsd) || + (OP_code(op) == TOP_vmovss) || + (OP_code(op) == TOP_vmovsd)) + if (OP_opnd(op,0) != OP_opnd(op,1)) + return true; + + if ( TN_size(tn1) != TN_size(tn2) ) return true; if (Is_Target_64bit() && TN_is_int_retrun_register(tn2)) { Modified: trunk/osprey/be/cg/oputil.cxx =================================================================== --- trunk/osprey/be/cg/oputil.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/oputil.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -1994,10 +1994,10 @@ {TOP_mulxxss, TOP_vmulxxss}, {TOP_mulxxxsd, TOP_vmulxxxsd}, {TOP_mulxxxss, TOP_vmulxxxss}, - {TOP_movsd, TOP_vmovapd}, - {TOP_movss, TOP_vmovaps}, + {TOP_movsd, TOP_vmovsd}, + {TOP_movss, TOP_vmovss}, {TOP_movdq, TOP_vmovdqa}, - {TOP_movapd, TOP_vmovapd}, + {TOP_movapd, TOP_vmovaps}, {TOP_movaps, TOP_vmovaps}, {TOP_movg2x64, TOP_vmovg2x64}, {TOP_movg2x, TOP_vmovg2x}, Modified: trunk/osprey/be/cg/x8664/cgemit_targ.cxx =================================================================== --- trunk/osprey/be/cg/x8664/cgemit_targ.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/x8664/cgemit_targ.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -3795,7 +3795,6 @@ OP_Name[TOP_ldupsx] = "movups"; OP_Name[TOP_ldupsxx] = "movups"; OP_Name[TOP_ldups_n32] = "movups"; - OP_Name[TOP_movss] = "movaps"; OP_Name[TOP_movdq] = "movdqa"; OP_Name[TOP_movg2x] = "movd"; OP_Name[TOP_movg2x64] = "movd"; @@ -3879,7 +3878,6 @@ OP_Name[TOP_ldsd_n32] = "movlpd"; OP_Name[TOP_stsdx] = "movsd"; OP_Name[TOP_stsdxx] = "movsd"; - OP_Name[TOP_movsd] = "movsd"; OP_Name[TOP_ldsdx] = "movlpd"; OP_Name[TOP_ldsdxx] = "movlpd"; OP_Name[TOP_stsd] = "movsd"; @@ -3898,15 +3896,7 @@ OP_Name[TOP_storelpd] = "movsd"; // Convert movapd reg reg moves with movaps OP_Name[TOP_movapd] = "movaps"; - if (Is_Target_Barcelona() || - Is_Target_EM64T() || // em64t - Is_Target_Wolfdale() || - Is_Target_Core()) { // use movapd for woodcrest for bug 11548 - OP_Name[TOP_movsd] = "movaps"; - } else if (Is_Target_Orochi()) { - OP_Name[TOP_movsd] = "movaps"; - OP_Name[TOP_vmovsd] = "vmovsd"; - OP_Name[TOP_vmovss] = "vmovss"; + if (Is_Target_Orochi()) { OP_Name[TOP_vldsd] = "vmovsd"; OP_Name[TOP_vldsd_n32] = "vmovsd"; OP_Name[TOP_vstsdx] = "vmovsd"; Modified: trunk/osprey/be/cg/x8664/cgtarget.cxx =================================================================== --- trunk/osprey/be/cg/x8664/cgtarget.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/x8664/cgtarget.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -2430,6 +2430,8 @@ case TOP_mov64: case TOP_movsd: case TOP_movss: + case TOP_vmovsd: + case TOP_vmovss: case TOP_movdq: case TOP_movapd: case TOP_movaps: Modified: trunk/osprey/be/cg/x8664/cgtarget_arch.h =================================================================== --- trunk/osprey/be/cg/x8664/cgtarget_arch.h 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/x8664/cgtarget_arch.h 2011-07-26 19:26:20 UTC (rev 3703) @@ -218,7 +218,13 @@ CGTARG_Copy_Op(UINT8 size, BOOL is_float) { if (is_float) { - return size == 4 ? TOP_movss : TOP_movsd; + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + return TOP_movaps; + } else { + return size == 4 ? TOP_movss : TOP_movsd; + } } return size == 4 ? TOP_mov32 : TOP_mov64; } Modified: trunk/osprey/be/cg/x8664/expand.cxx =================================================================== --- trunk/osprey/be/cg/x8664/expand.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/be/cg/x8664/expand.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -1188,17 +1188,12 @@ } else if( MTYPE_is_float(mtype) ){ if( Is_Target_SSE2() ) { - if (Is_Target_Orochi() && Is_Target_AVX()) { - if ( is_128bit ) { - Build_OP( TOP_movdq, result, src, ops ); - } else { - Build_OP( (mtype == MTYPE_F8) ? TOP_movsd : TOP_movss, - result, src, src, ops ); - } + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + Build_OP( TOP_movaps, result, src, ops ); } else { - Build_OP( is_128bit ? TOP_movdq: - (mtype == MTYPE_F8 ? TOP_movsd : TOP_movss), - result, src, ops ); + Build_OP( TOP_movdq, result, src, ops ); } } else Build_OP( TOP_fmov, result, src, ops ); @@ -3715,11 +3710,12 @@ } Cur_BB = bb_exit; - if (Is_Target_Orochi() && Is_Target_AVX()) { - Build_OP( is_double ? TOP_movsd : TOP_movss, - dest, tmp_dest, tmp_dest, ops ); + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + Build_OP( TOP_movaps, dest, tmp_dest, ops ); } else { - Build_OP( is_double ? TOP_movsd : TOP_movss, dest, tmp_dest, ops ); + Build_OP( TOP_movdq, dest, tmp_dest, ops ); } } @@ -3823,12 +3819,12 @@ } if( tmp_dest != dest ){ - if (Is_Target_Orochi() && Is_Target_AVX()) { - Build_OP( mtype == MTYPE_F8 ? TOP_movsd : TOP_movss, - dest, tmp_dest, tmp_dest, ops ); + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + Build_OP( TOP_movaps, dest, tmp_dest, ops ); } else { - Build_OP( mtype == MTYPE_F8 ? TOP_movsd : TOP_movss, - dest, tmp_dest, ops ); + Build_OP( TOP_movdq, dest, tmp_dest, ops ); } } @@ -5688,7 +5684,13 @@ } void Expand_Firstpart( OPCODE opcode, TN *result, TN *src1, OPS *ops ){ - Build_OP(TOP_movsd, result, src1, ops); + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + Build_OP( TOP_movaps, result, src1, ops ); + } else { + Build_OP( TOP_movdq, result, src1, ops ); + } } void Expand_Secondpart( OPCODE opcode, TN *result, TN *src1, OPS *ops ){ @@ -6893,16 +6895,12 @@ } } else if (tgt_rc == src_rc && tgt_rc == ISA_REGISTER_CLASS_float) { /* dedicated TNs always have size 8, so need to check both TNs */ - if (Is_Target_Orochi() && Is_Target_AVX()) { - if (is_128bit) { - Build_OP(TOP_movdq, tgt_tn, src_tn, ops); - } else { - Build_OP(is_64bit ? TOP_movsd : TOP_movss, - tgt_tn, src_tn, src_tn, ops); - } + if( Is_Target_Barcelona() || Is_Target_EM64T() || + Is_Target_Wolfdale() || Is_Target_Core() || + Is_Target_Orochi() ){ + Build_OP(TOP_movaps, tgt_tn, src_tn, ops); } else { - Build_OP(is_128bit ? TOP_movdq: (is_64bit ? TOP_movsd : TOP_movss), - tgt_tn, src_tn, ops); + Build_OP( TOP_movdq, tgt_tn, src_tn, ops); } Set_OP_copy (OPS_last(ops)); Modified: trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx =================================================================== --- trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -3868,8 +3868,6 @@ Operand(1, rflags, opnd2); Instruction_Group("fp 2 fp", - TOP_movsd, - TOP_movss, TOP_cvtss2sd, TOP_cvtsd2ss, TOP_UNDEFINED); @@ -4674,6 +4672,8 @@ TOP_minss, TOP_mulsd, TOP_mulss, + TOP_movsd, + TOP_movss, TOP_UNDEFINED); Result(0, fp64); Operand(0, fp64, opnd1); Modified: trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx =================================================================== --- trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -3238,6 +3238,16 @@ TOP_vxzero32, TOP_UNDEFINED ); + /* One result / one operand, special form, uses opnd 1 */ + ISA_PRINT_TYPE ropspec = ISA_Print_Type_Create("ropspec", "%s %s,%s"); + Name(); + Operand(1); + Result(0); + Instruction_Print_Group( ropspec, + TOP_movsd, + TOP_movss, + TOP_UNDEFINED ); + /* One result / one operand */ ISA_PRINT_TYPE rop = ISA_Print_Type_Create("rop", "%s %s,%s"); Name(); @@ -3321,8 +3331,6 @@ TOP_movzwq, TOP_movslq, TOP_movzlq, - TOP_movsd, - TOP_movss, TOP_movdq, TOP_movapd, TOP_movaps, Modified: trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx =================================================================== --- trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx 2011-07-26 09:19:24 UTC (rev 3702) +++ trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx 2011-07-26 19:26:20 UTC (rev 3703) @@ -14147,6 +14147,8 @@ TOP_lock_xchg16, TOP_lock_xchg32, TOP_lock_xchg64, + TOP_movsd, + TOP_movss, TOP_addsd, TOP_addss, TOP_addxsd, ------------------------------------------------------------------------------ Magic Quadrant for Content-Aware Data Loss Prevention Research study explores the data loss prevention market. Includes in-depth analysis on the changes within the DLP market, and the criteria used to evaluate the strengths and weaknesses of these DLP solutions. http://www.accelacomm.com/jaw/sfnl/114/51385063/ _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel