Author: dcoakley
Date: 2011-06-29 22:34:59 -0400 (Wed, 29 Jun 2011)
New Revision: 3666
Modified:
trunk/osprey/be/cg/whirl2ops.cxx
trunk/osprey/be/cg/x8664/cgemit_targ.cxx
trunk/osprey/be/cg/x8664/expand.cxx
trunk/osprey/common/com/intrn_entry.def
trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx
trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx
Log:
Support PINSR and PEXTR intrinsics and instructions for x8664.
These are SSE 4.1 instructions used to read and write XMM registers.
Approved by: Jian-Xin Lai
Modified: trunk/osprey/be/cg/whirl2ops.cxx
===================================================================
--- trunk/osprey/be/cg/whirl2ops.cxx 2011-06-29 20:37:57 UTC (rev 3665)
+++ trunk/osprey/be/cg/whirl2ops.cxx 2011-06-30 02:34:59 UTC (rev 3666)
@@ -3730,6 +3730,12 @@
// SSSE3
case INTRN_PALIGNR:
// SSE4.1
+ case INTRN_PINSRB:
+ case INTRN_PINSRW:
+ case INTRN_PINSRD:
+ case INTRN_PINSRQ:
+ case INTRN_INSRPS:
+ case INTRN_INSRPD:
case INTRN_BLENDPD:
case INTRN_BLENDPS:
case INTRN_DPPD:
@@ -3820,6 +3826,12 @@
case INTRN_PSHUFW:
case INTRN_PSHUFLW:
case INTRN_PSHUFHW:
+ case INTRN_PEXTRB:
+ case INTRN_PEXTRW:
+ case INTRN_PEXTRD:
+ case INTRN_PEXTRQ:
+ case INTRN_EXTRPS:
+ case INTRN_EXTRPD:
// AES
case INTRN_AESKEYGENASSIST128:
// XOP
Modified: trunk/osprey/be/cg/x8664/cgemit_targ.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/cgemit_targ.cxx 2011-06-29 20:37:57 UTC (rev
3665)
+++ trunk/osprey/be/cg/x8664/cgemit_targ.cxx 2011-06-30 02:34:59 UTC (rev
3666)
@@ -1139,6 +1139,7 @@
OP_Name[TOP_extrx128v16] = "pextrw";
OP_Name[TOP_extrxx128v16] = "pextrw";
OP_Name[TOP_extrxxx128v16] = "pextrw";
+ OP_Name[TOP_extr128v32] = "pextrd";
OP_Name[TOP_extrx128v32] = "pextrd";
OP_Name[TOP_extrxx128v32] = "pextrd";
OP_Name[TOP_extrxxx128v32] = "pextrd";
Modified: trunk/osprey/be/cg/x8664/expand.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/expand.cxx 2011-06-29 20:37:57 UTC (rev 3665)
+++ trunk/osprey/be/cg/x8664/expand.cxx 2011-06-30 02:34:59 UTC (rev 3666)
@@ -7550,6 +7550,24 @@
op1 = Gen_Literal_TN (3, 4);
Build_OP( TOP_pextrw, result, op0, op1, ops );
break;
+ case INTRN_PEXTRB:
+ Build_OP( TOP_extr128v8, result, op0, op1, ops);
+ break;
+ case INTRN_PEXTRW:
+ Build_OP( TOP_extr128v16, result, op0, op1, ops);
+ break;
+ case INTRN_PEXTRD:
+ Build_OP( TOP_extr128v32, result, op0, op1, ops);
+ break;
+ case INTRN_PEXTRQ:
+ Build_OP( TOP_extr128v64, result, op0, op1, ops);
+ break;
+ case INTRN_EXTRPS:
+ Build_OP( TOP_fextr128v32, result, op0, op1, ops);
+ break;
+ case INTRN_EXTRPD:
+ FmtAssert(FALSE, ("TODO: support fextr128v64"));
+ break;
case INTRN_PINSRW0:
Is_True (op2 == NULL, ("Imm operand should be null"));
op2 = Gen_Literal_TN (0, 4);
@@ -7570,6 +7588,24 @@
op2 = Gen_Literal_TN (3, 4);
Build_OP( TOP_pinsrw, result, op1, op2, ops );
break;
+ case INTRN_PINSRB:
+ Build_OP( TOP_insr128v8, result, op0, op1, op2, ops);
+ break;
+ case INTRN_PINSRW:
+ Build_OP( TOP_insr128v16, result, op0, op1, op2, ops);
+ break;
+ case INTRN_PINSRD:
+ Build_OP( TOP_insr128v32, result, op0, op1, op2, ops);
+ break;
+ case INTRN_PINSRQ:
+ Build_OP( TOP_insr128v64, result, op0, op1, op2, ops);
+ break;
+ case INTRN_INSRPS:
+ Build_OP( TOP_finsr128v32, result, op0, op1, op2, ops);
+ break;
+ case INTRN_INSRPD:
+ FmtAssert(FALSE, ("TODO: support finsr128v64"));
+ break;
case INTRN_PMOVMSKB:
Build_OP( TOP_pmovmskb, result, op0, ops );
break;
Modified: trunk/osprey/common/com/intrn_entry.def
===================================================================
--- trunk/osprey/common/com/intrn_entry.def 2011-06-29 20:37:57 UTC (rev
3665)
+++ trunk/osprey/common/com/intrn_entry.def 2011-06-30 02:34:59 UTC (rev
3666)
@@ -3834,6 +3834,54 @@
DEF_INTRN_ENTRY(INTRN_PINSRW3, "PINSRW3", BYVAL, PURE, NO_SIDEEFFECTS,
DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
IRETURN_M8I2, "PINSRW3", NULL, NULL)
+/* PEXTRB */
+DEF_INTRN_ENTRY(INTRN_PEXTRB, "PEXTRB", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_I1, "PEXTRB", NULL, NULL)
+/* PEXTRW */
+DEF_INTRN_ENTRY(INTRN_PEXTRW, "PEXTRW", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_I2, "PEXTRW", NULL, NULL)
+/* PEXTRD */
+DEF_INTRN_ENTRY(INTRN_PEXTRD, "PEXTRD", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_I4, "PEXTRD", NULL, NULL)
+/* PEXTRQ */
+DEF_INTRN_ENTRY(INTRN_PEXTRQ, "PEXTRQ", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_I8, "PEXTRQ", NULL, NULL)
+/* EXTRPS */
+DEF_INTRN_ENTRY(INTRN_EXTRPS, "EXTRPS", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_F4, "EXTRPS", NULL, NULL)
+/* EXTRPD */
+DEF_INTRN_ENTRY(INTRN_EXTRPD, "EXTRPD", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_F8, "EXTRPD", NULL, NULL)
+/* PINSRB */
+DEF_INTRN_ENTRY(INTRN_PINSRB, "PINSRB", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16I1, "PINSRB", NULL, NULL)
+/* PINSRW */
+DEF_INTRN_ENTRY(INTRN_PINSRW, "PINSRW", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16I2, "PINSRW", NULL, NULL)
+/* PINSRD */
+DEF_INTRN_ENTRY(INTRN_PINSRD, "PINSRD", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16I4, "PINSRD", NULL, NULL)
+/* PINSRQ */
+DEF_INTRN_ENTRY(INTRN_PINSRQ, "PINSRQ", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16I8, "PINSRQ", NULL, NULL)
+/* INSRPS */
+DEF_INTRN_ENTRY(INTRN_INSRPS, "INSRPS", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16F4, "INSRPS", NULL, NULL)
+/* INSRPD */
+DEF_INTRN_ENTRY(INTRN_INSRPD, "INSRPD", BYVAL, PURE, NO_SIDEEFFECTS,
+ DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
+ IRETURN_V16F8, "INSRPD", NULL, NULL)
/* PMOVMSKB */
DEF_INTRN_ENTRY(INTRN_PMOVMSKB, "PMOVMSKB", BYVAL, PURE, NO_SIDEEFFECTS,
DOES_RETURN, NOT_ACTUAL, CGINTRINSIC, NOT_SLAVE,
Modified: trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx
===================================================================
--- trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2011-06-29
20:37:57 UTC (rev 3665)
+++ trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2011-06-30
02:34:59 UTC (rev 3666)
@@ -1412,11 +1412,6 @@
TOP_fblend128v64,
TOP_fdp128v32,
TOP_fdp128v64,
- TOP_extr128v8,
- TOP_extr128v16,
- TOP_extr128v32,
- TOP_extr128v64,
- TOP_fextr128v32,
TOP_insr128v8,
TOP_insr128v16,
TOP_insr128v32,
@@ -1598,6 +1593,12 @@
Operand(0);
Result(0);
Instruction_Print_Group( vropop,
+ /* SSE 4.1 instruction */
+ TOP_extr128v8,
+ TOP_extr128v16,
+ TOP_extr128v32,
+ TOP_extr128v64,
+ TOP_fextr128v32,
/* AES instruction */
TOP_aeskeygenassist,
/* XOP instruction */
@@ -1997,6 +1998,12 @@
Operand(0);
Result(0);
Instruction_Print_Group( vrmemop,
+ /* SSE 4.1 instruction */
+ TOP_extrx128v8,
+ TOP_extrx128v16,
+ TOP_extrx128v32,
+ TOP_extrx128v64,
+ TOP_fextrx128v32,
/* XOP instruction */
TOP_vprotbx,
TOP_vprotdx,
@@ -2219,6 +2226,12 @@
Operand(2);
Result(0);
Instruction_Print_Group( vrmemindexop,
+ /* SSE 4.1 instruction */
+ TOP_extrxx128v8,
+ TOP_extrxx128v16,
+ TOP_extrxx128v32,
+ TOP_extrxx128v64,
+ TOP_fextrxx128v32,
/* XOP instruction */
TOP_vprotbxx,
TOP_vprotdxx,
@@ -2439,6 +2452,12 @@
Operand(1);
Result(0);
Instruction_Print_Group( vropmemindex,
+ /* SSE 4.1 instruction */
+ TOP_extrxxx128v8,
+ TOP_extrxxx128v16,
+ TOP_extrxxx128v32,
+ TOP_extrxxx128v64,
+ TOP_fextrxxx128v32,
/* XOP instruction */
TOP_vprotbxxx,
TOP_vprotdxxx,
Modified: trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx
===================================================================
--- trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx 2011-06-29
20:37:57 UTC (rev 3665)
+++ trunk/osprey/common/targ_info/isa/x8664/isa_properties.cxx 2011-06-30
02:34:59 UTC (rev 3666)
@@ -12178,22 +12178,6 @@
TOP_insrx128v64,
TOP_insrxx128v64,
TOP_insrxxx128v64,
- TOP_extr128v8,
- TOP_extrx128v8,
- TOP_extrxx128v8,
- TOP_extrxxx128v8,
- TOP_extr128v16,
- TOP_extrx128v16,
- TOP_extrxx128v16,
- TOP_extrxxx128v16,
- TOP_extr128v32,
- TOP_extrx128v32,
- TOP_extrxx128v32,
- TOP_extrxxx128v32,
- TOP_extr128v64,
- TOP_extrx128v64,
- TOP_extrxx128v64,
- TOP_extrxxx128v64,
TOP_mpsadbw,
TOP_mpsadbwx,
TOP_mpsadbwxx,
@@ -14417,10 +14401,6 @@
TOP_finsrx128v32,
TOP_finsrxx128v32,
TOP_finsrxxx128v32,
- TOP_fextr128v32,
- TOP_fextrx128v32,
- TOP_fextrxx128v32,
- TOP_fextrxxx128v32,
/* SSE4.2 instructions */
TOP_crc32b,
TOP_crc32bx,
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel