Author: shivaram
Date: 2012-05-03 07:53:10 -0400 (Thu, 03 May 2012)
New Revision: 3924
Modified:
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
Log:
Fix for bug 972. movlhps and movhlps opcode properties are corrected.
Code Review by Sun Chan
Modified: trunk/osprey/be/cg/x8664/expand.cxx
===================================================================
--- trunk/osprey/be/cg/x8664/expand.cxx 2012-05-02 03:38:26 UTC (rev 3923)
+++ trunk/osprey/be/cg/x8664/expand.cxx 2012-05-03 11:53:10 UTC (rev 3924)
@@ -5984,7 +5984,11 @@
Build_OP(TOP_shufpd, tmp26, tmp25, tmp25, Gen_Literal_TN(1, 1), ops);
Build_OP(TOP_fdiv128v64, tmp27, tmp26, tmp24, ops);
Build_OP(TOP_cvtpd2ps, tmp28, tmp27, ops);
- Build_OP(TOP_movlhps, result, tmp28, ops);
+ if (Is_Target_Orochi() && Is_Target_AVX()) {
+ Build_OP(TOP_movlhps, result, result, tmp28, ops);
+ } else {
+ Build_OP(TOP_movlhps, result, tmp28, ops);
+ }
}
Set_OP_cond_def_kind( OPS_last(ops), OP_ALWAYS_COND_DEF );
@@ -6726,10 +6730,11 @@
case OPC_V16F8V16F8SHUFFLE:
if (Is_Target_Orochi() && Is_Target_AVX()) {
Build_OP(TOP_movhlps, result, op1, op1, ops);
+ Build_OP(TOP_movlhps, result, result, op1, ops);
} else {
Build_OP(TOP_movhlps, result, op1, ops);
+ Build_OP(TOP_movlhps, result, op1, ops);
}
- Build_OP(TOP_movlhps, result, op1, ops);
Set_OP_cond_def_kind( OPS_last(ops), OP_ALWAYS_COND_DEF );
break;
case OPC_V16I2V16I2SHUFFLE:
@@ -6738,10 +6743,11 @@
TN* tmp2 = Build_TN_Like(result);
if (Is_Target_Orochi() && Is_Target_AVX()) {
Build_OP(TOP_movhlps, tmp1, op1, op1, ops);
+ Build_OP(TOP_movlhps, tmp1, tmp1, op1, ops);
} else {
Build_OP(TOP_movhlps, tmp1, op1, ops);
+ Build_OP(TOP_movlhps, tmp1, op1, ops);
}
- Build_OP(TOP_movlhps, tmp1, op1, ops);
Set_OP_cond_def_kind( OPS_last(ops), OP_ALWAYS_COND_DEF );
Build_OP(TOP_pshuflw, tmp2, tmp1, Gen_Literal_TN(0x1B, 1), ops);
Build_OP(TOP_pshufhw, result, tmp2, Gen_Literal_TN(0x1B, 1), ops);
@@ -8071,10 +8077,24 @@
Build_OP( TOP_movsd, result, op0, op1, ops );
break;
case INTRN_MOVHLPS:
- Build_OP( TOP_movhlps, result, op0, op1, ops );
+ if (Is_Target_Orochi() && Is_Target_AVX()) {
+ Build_OP( TOP_movhlps, result, op0, op1, ops );
+ } else {
+ // do packing of op1[2] op1[3] op0[2] op0[3] in result
+ Build_OP(TOP_shufps, result, op0, op1, Gen_Literal_TN(187, 1), ops);
+ // reverse fields to get op0[3] op0[2] op1[3] op1[2]
+ Build_OP(TOP_shufps, result, result, result, Gen_Literal_TN(27, 1), ops);
+ }
+
break;
case INTRN_MOVLHPS:
- Build_OP( TOP_movlhps, result, op0, op1, ops );
+ if (Is_Target_Orochi() && Is_Target_AVX()) {
+ Build_OP( TOP_movlhps, result, op0, op1, ops );
+ } else {
+ // do packing of op1[1] op1[0] op0[1] op0[0] in result
+ Build_OP(TOP_shufps, result, op0, op1, Gen_Literal_TN(68, 1), ops);
+ }
+
break;
case INTRN_UNPCKHPS:
Build_OP( TOP_unpckhps, result, op0, op1, ops );
Modified: trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx
===================================================================
--- trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx 2012-05-02
03:38:26 UTC (rev 3923)
+++ trunk/osprey/common/targ_info/isa/x8664/isa_operands.cxx 2012-05-03
11:53:10 UTC (rev 3924)
@@ -1194,6 +1194,7 @@
TOP_vfminsd,
TOP_vfminss,
TOP_vmovhlps,
+ TOP_vmovlhps,
TOP_vfmul128v64,
TOP_vfmul128v32,
TOP_vmulsd,
@@ -4570,7 +4571,6 @@
Operand(3, uimm8, opnd2);
Instruction_Group("move-high-low",
- TOP_vmovlhps,
TOP_movlhps,
TOP_movhlps,
TOP_UNDEFINED);
Modified: trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx
===================================================================
--- trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2012-05-02
03:38:26 UTC (rev 3923)
+++ trunk/osprey/common/targ_info/isa/x8664/isa_print.cxx 2012-05-03
11:53:10 UTC (rev 3924)
@@ -1525,16 +1525,6 @@
TOP_UNDEFINED );
/* dest=op(src1, src2), non-x86-style */
- ISA_PRINT_TYPE vropspec = ISA_Print_Type_Create("vropspec", "%s %s,%s,%s");
- Name();
- Operand(0);
- Result(0);
- Result(0);
- Instruction_Print_Group( vropspec,
- TOP_vmovlhps,
- TOP_UNDEFINED );
-
- /* dest=op(src1, src2), non-x86-style */
ISA_PRINT_TYPE vropop = ISA_Print_Type_Create("vropop", "%s %s,%s,%s");
Name();
Operand(1);
@@ -1640,6 +1630,7 @@
TOP_vpmaddwd,
TOP_vpmaddubsw128,
TOP_vmovhlps,
+ TOP_vmovlhps,
TOP_vmovsd,
TOP_vmovss,
TOP_vmaxs128v8,
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel