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
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel