Author: zhuqing
Date: 2010-12-06 20:19:22 -0500 (Mon, 06 Dec 2010)
New Revision: 3425

Modified:
   trunk/osprey/be/cg/x8664/expand.cxx
Log:
fix bug603.
1.support logical and, or, xor, negative, binary not operation for mmx vector 
type
2.support logical and, or, xor for MTYPE_V8F4

Reviewed by Jianxin.


Modified: trunk/osprey/be/cg/x8664/expand.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/expand.cxx 2010-12-07 00:10:31 UTC (rev 3424)
+++ trunk/osprey/be/cg/x8664/expand.cxx 2010-12-07 01:19:22 UTC (rev 3425)
@@ -1710,7 +1710,22 @@
     }
 
   } else if (!MTYPE_is_float(mtype)) {
-    if( OP_NEED_PAIR(mtype) ){
+    if (MTYPE_is_mmx_vector(mtype)) {
+      TYPE_ID host_type;
+      if(mtype == MTYPE_M8I1) host_type = MTYPE_I1;
+      else if(mtype == MTYPE_M8I2) host_type = MTYPE_I2;
+      else if(mtype == MTYPE_M8I4) host_type = MTYPE_I4;
+      else host_type = MTYPE_I8;
+      TCON then = Host_To_Targ (host_type, 0x0);
+      TCON now  = Create_Simd_Const (mtype, then);
+      ST *sym = New_Const_Sym (Enter_tcon (now), Be_Type_Tbl(TCON_ty(now)));
+      Allocate_Object(sym);
+      TN *sym_tn = Gen_Symbol_TN(sym, 0, 0);
+      TN *tmp = Build_TN_Like(result);
+      Exp_Load(mtype, mtype, tmp, TN_var(sym_tn), TN_offset(sym_tn), ops, 0);
+      Expand_Sub (result, tmp, src, mtype, ops);
+    }
+    else if( OP_NEED_PAIR(mtype) ){
       Expand_Split_UOP( OPR_NEG, mtype, result, src, ops );
 
     } else {
@@ -2275,7 +2290,10 @@
     TN *sym_tn = Gen_Symbol_TN(sym, 0, 0);
     TN *result_tn = Build_TN_Of_Mtype(mtype);
     Exp_Load(mtype, mtype, result_tn, TN_var(sym_tn), TN_offset(sym_tn), ops, 
0);
-    Build_OP(TOP_xorps, dest, src, result_tn, ops);
+    if (MTYPE_is_mmx_vector(mtype))
+      Build_OP(TOP_pxor_mmx, dest, src, result_tn, ops);
+    else
+      Build_OP(TOP_xorps, dest, src, result_tn, ops);
   } else {
     if( OP_NEED_PAIR(mtype) )
       Expand_Split_UOP( OPR_BNOT, mtype, dest, src, ops );
@@ -2343,12 +2361,19 @@
       Build_OP(TOP_and128v32, dest, src1, src2, ops); break;
     case MTYPE_V16I8: 
       Build_OP(TOP_and128v64, dest, src1, src2, ops); break;
+    case MTYPE_V8F4:
+      Build_OP(TOP_andps, dest, src1, src2, ops); break;
     case MTYPE_V32F4: 
     case MTYPE_V16F4:
       Build_OP(TOP_fand128v32, dest, src1, src2, ops); break;
     case MTYPE_V32F8:
     case MTYPE_V16F8: 
       Build_OP(TOP_fand128v64, dest, src1, src2, ops); break;
+    case MTYPE_M8I1:
+    case MTYPE_M8I2:
+    case MTYPE_M8I4:
+    case MTYPE_M8F4:
+      Build_OP(TOP_pand_mmx,dest, src1, src2, ops); break;
     default:
       if( OP_NEED_PAIR(mtype) ){
        Expand_Split_BOP( OPR_BAND, mtype, dest, src1, src2, ops );
@@ -2399,6 +2424,13 @@
       Build_OP(TOP_or128v32, dest, src1, src2, ops); break;
     case MTYPE_V16I8: 
       Build_OP(TOP_or128v64, dest, src1, src2, ops); break;
+    case MTYPE_V8F4:
+      Build_OP(TOP_orps, dest, src1, src2, ops); break;
+    case MTYPE_M8I1:
+    case MTYPE_M8I2:
+    case MTYPE_M8I4:
+    case MTYPE_M8F4:
+      Build_OP(TOP_por_mmx,dest, src1, src2, ops); break;
     default:
       if( OP_NEED_PAIR(mtype) ){
        Expand_Split_BOP( OPR_BIOR, mtype, dest, src1, src2, ops );
@@ -2449,6 +2481,13 @@
       Build_OP(TOP_xor128v32, dest, src1, src2, ops); break;
     case MTYPE_V16I8: 
       Build_OP(TOP_xor128v64, dest, src1, src2, ops); break;
+    case MTYPE_V8F4:
+      Build_OP(TOP_xorps, dest, src1, src2, ops); break;
+    case MTYPE_M8I1:
+    case MTYPE_M8I2:
+    case MTYPE_M8I4:
+    case MTYPE_M8F4:
+      Build_OP(TOP_pxor_mmx, dest, src1, src2, ops); break;
     default:
       if( OP_NEED_PAIR(mtype) ){
        Expand_Split_BOP( OPR_BXOR, mtype, dest, src1, src2, ops );


------------------------------------------------------------------------------
What happens now with your Lotus Notes apps - do you make another costly 
upgrade, or settle for being marooned without product support? Time to move
off Lotus Notes and onto the cloud with Force.com, apps are easier to build,
use, and manage than apps on traditional platforms. Sign up for the Lotus 
Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to