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

Reply via email to