Author: zhuqing Date: 2010-09-01 01:55:28 -0400 (Wed, 01 Sep 2010) New Revision: 3332
Modified: trunk/osprey/wgen/wgen_expr.cxx Log: add intrinsic for _mm_extract_pi16 Modified: trunk/osprey/wgen/wgen_expr.cxx =================================================================== --- trunk/osprey/wgen/wgen_expr.cxx 2010-09-01 05:42:02 UTC (rev 3331) +++ trunk/osprey/wgen/wgen_expr.cxx 2010-09-01 05:55:28 UTC (rev 3332) @@ -3967,7 +3967,29 @@ case GSBI_IX86_BUILTIN_VEC_EXT_V4SI: *iopc = INTRN_VEC_EXT_V2SI; break; - case GSBI_IX86_BUILTIN_VEC_EXT_V2DI: + case GSBI_IX86_BUILTIN_VEC_EXT_V4HI: + //add intrinsic for _mm_extract_pi16 + if (WN_operator(arg1) != OPR_INTCONST) + Fail_FmtAssertion ("selector must be an integer constant in the range 0..3"); + switch (WN_const_val(arg1)){ + case 0: + *iopc = INTRN_PEXTRW0; + break; + case 1: + *iopc = INTRN_PEXTRW1; + break; + case 2: + *iopc = INTRN_PEXTRW2; + break; + case 3: + *iopc = INTRN_PEXTRW3; + break; + default: + Fail_FmtAssertion ("selector must be an integer constant in the range 0..3" ); + } + break; + + case GSBI_IX86_BUILTIN_VEC_EXT_V2DI: *iopc = INTRN_VEC_EXT_V2SI; break; case GSBI_IX86_BUILTIN_VEC_EXT_V2DF: @@ -9294,7 +9316,18 @@ for (i = 0, list = gs_tree_operand (exp, 1); list; i++, list = gs_tree_chain (list)) { - arg_wn = WGEN_Expand_Expr (gs_tree_value (list)); + //if intrinsic equals _mm_extract_pi16, + //the second param is fixed to const 0,1,2,3, so + //there is no need to generate the second arg node. + if (i ==1 && (iopc == INTRN_PEXTRW0 || + iopc == INTRN_PEXTRW1 || + iopc == INTRN_PEXTRW2 || + iopc == INTRN_PEXTRW3)) { + num_args = 1; + break; + } + arg_wn = WGEN_Expand_Expr (gs_tree_value (list)); + #ifdef KEY // bug 11286 if (i == 1 && TARGET_64BIT && (gs_decl_function_code(func) == GSBI_BUILT_IN_POWI || ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel