|
From: <sv...@va...> - 2012-01-16 17:30:35
|
Author: florian
Date: 2012-01-16 17:25:55 +0000 (Mon, 16 Jan 2012)
New Revision: 2239
Log:
Remove broken support for TS insn in s390 port. The
atomicity was not modelled.
The insn is not issued (gcc) or used (glibc, libdfp)
and is discouraged in the principles of operations.
No point spending time on it. Fixes #270796
Modified:
trunk/priv/guest_s390_defs.h
trunk/priv/guest_s390_helpers.c
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_defs.h
===================================================================
--- trunk/priv/guest_s390_defs.h 2012-01-15 23:17:06 UTC (rev 2238)
+++ trunk/priv/guest_s390_defs.h 2012-01-16 17:25:55 UTC (rev 2239)
@@ -101,25 +101,24 @@
S390_CC_OP_LOAD_AND_TEST = 15,
S390_CC_OP_LOAD_POSITIVE_32 = 16,
S390_CC_OP_LOAD_POSITIVE_64 = 17,
- S390_CC_OP_TEST_AND_SET = 18,
- S390_CC_OP_TEST_UNDER_MASK_8 = 19,
- S390_CC_OP_TEST_UNDER_MASK_16 = 20,
- S390_CC_OP_SHIFT_LEFT_32 = 21,
- S390_CC_OP_SHIFT_LEFT_64 = 22,
- S390_CC_OP_INSERT_CHAR_MASK_32 = 23,
- S390_CC_OP_BFP_RESULT_32 = 24,
- S390_CC_OP_BFP_RESULT_64 = 25,
- S390_CC_OP_BFP_RESULT_128 = 26,
- S390_CC_OP_BFP_32_TO_INT_32 = 27,
- S390_CC_OP_BFP_64_TO_INT_32 = 28,
- S390_CC_OP_BFP_128_TO_INT_32 = 29,
- S390_CC_OP_BFP_32_TO_INT_64 = 30,
- S390_CC_OP_BFP_64_TO_INT_64 = 31,
- S390_CC_OP_BFP_128_TO_INT_64 = 32,
- S390_CC_OP_BFP_TDC_32 = 33,
- S390_CC_OP_BFP_TDC_64 = 34,
- S390_CC_OP_BFP_TDC_128 = 35,
- S390_CC_OP_SET = 36
+ S390_CC_OP_TEST_UNDER_MASK_8 = 18,
+ S390_CC_OP_TEST_UNDER_MASK_16 = 19,
+ S390_CC_OP_SHIFT_LEFT_32 = 20,
+ S390_CC_OP_SHIFT_LEFT_64 = 21,
+ S390_CC_OP_INSERT_CHAR_MASK_32 = 22,
+ S390_CC_OP_BFP_RESULT_32 = 23,
+ S390_CC_OP_BFP_RESULT_64 = 24,
+ S390_CC_OP_BFP_RESULT_128 = 25,
+ S390_CC_OP_BFP_32_TO_INT_32 = 26,
+ S390_CC_OP_BFP_64_TO_INT_32 = 27,
+ S390_CC_OP_BFP_128_TO_INT_32 = 28,
+ S390_CC_OP_BFP_32_TO_INT_64 = 29,
+ S390_CC_OP_BFP_64_TO_INT_64 = 30,
+ S390_CC_OP_BFP_128_TO_INT_64 = 31,
+ S390_CC_OP_BFP_TDC_32 = 32,
+ S390_CC_OP_BFP_TDC_64 = 33,
+ S390_CC_OP_BFP_TDC_128 = 34,
+ S390_CC_OP_SET = 35
};
/*------------------------------------------------------------*/
@@ -152,7 +151,6 @@
| S390_CC_OP_LOAD_AND_TEST | S loaded value | | |
| S390_CC_OP_LOAD_POSITIVE_32 | S loaded value | | |
| S390_CC_OP_LOAD_POSITIVE_64 | S loaded value | | |
- | S390_CC_OP_TEST_AND_SET | Z tested value | | |
| S390_CC_OP_TEST_UNDER_MASK_8 | Z tested value | Z mask | |
| S390_CC_OP_TEST_UNDER_MASK_16 | Z tested value | Z mask | |
| S390_CC_OP_SHIFT_LEFT_32 | Z value to be shifted | Z shift amount | |
Modified: trunk/priv/guest_s390_helpers.c
===================================================================
--- trunk/priv/guest_s390_helpers.c 2012-01-15 23:17:06 UTC (rev 2238)
+++ trunk/priv/guest_s390_helpers.c 2012-01-16 17:25:55 UTC (rev 2239)
@@ -512,11 +512,6 @@
/* Like signed comparison with 0 */
return S390_CC_FOR_BINARY("cgr", cc_dep1, (Long)0);
- case S390_CC_OP_TEST_AND_SET:
- /* Shift the sign bit into the LSB. Note, that the tested value is an
- 8-bit value which has been zero-extended to 32/64 bit. */
- return cc_dep1 >> 7;
-
case S390_CC_OP_LOAD_POSITIVE_32:
__asm__ volatile (
"lpr %[result],%[op]\n\t"
@@ -1231,26 +1226,6 @@
mkU64(0)));
}
- /* S390_CC_OP_TEST_AND_SET */
- if (cc_op == S390_CC_OP_TEST_AND_SET) {
- /* cc_dep1 is the zero-extended loaded value
-
- cc == 0 --> leftmost bit is zero (cond == 8)
- cc == 1 --> leftmost bit is one (cond == 4)
-
- As cc is either 0 or 1, only the two leftmost bits of the mask
- are relevant. */
- IRExpr *bit = binop(Iop_Shr64, cc_dep1, mkU8(7));
-
- switch (cond & (8 + 4)) {
- case 0: return mkU32(0);
- case 4: return unop(Iop_1Uto32, binop(Iop_CmpNE64, bit, mkU64(0)));
- case 8: return unop(Iop_1Uto32, binop(Iop_CmpEQ64, bit, mkU64(0)));
- case 8 + 4: return mkU32(1);
- }
- /* not reached */
- }
-
missed:
;
}
Modified: trunk/priv/guest_s390_toIR.c
===================================================================
--- trunk/priv/guest_s390_toIR.c 2012-01-15 23:17:06 UTC (rev 2238)
+++ trunk/priv/guest_s390_toIR.c 2012-01-16 17:25:55 UTC (rev 2239)
@@ -7866,18 +7866,6 @@
}
static HChar *
-s390_irgen_TS(IRTemp op2addr)
-{
- IRTemp value = newTemp(Ity_I8);
-
- assign(value, load(Ity_I8, mkexpr(op2addr)));
- s390_cc_thunk_putZ(S390_CC_OP_TEST_AND_SET, value);
- store(mkexpr(op2addr), mkU8(255));
-
- return "ts";
-}
-
-static HChar *
s390_irgen_TM(UChar i2, IRTemp op1addr)
{
UChar mask;
@@ -11253,11 +11241,11 @@
switch ((ovl.value & 0xffff0000) >> 16) {
case 0x8000: /* SSM */ goto unimplemented;
case 0x8200: /* LPSW */ goto unimplemented;
- case 0x9300: s390_format_S_RD(s390_irgen_TS, ovl.fmt.S.b2, ovl.fmt.S.d2);
- goto ok;
+ case 0x9300: /* TS */ goto unimplemented;
case 0xb202: /* STIDP */ goto unimplemented;
case 0xb204: /* SCK */ goto unimplemented;
- case 0xb205: s390_format_S_RD(s390_irgen_STCK, ovl.fmt.S.b2, ovl.fmt.S.d2);goto ok;
+ case 0xb205: s390_format_S_RD(s390_irgen_STCK, ovl.fmt.S.b2, ovl.fmt.S.d2);
+ goto ok;
case 0xb206: /* SCKC */ goto unimplemented;
case 0xb207: /* STCKC */ goto unimplemented;
case 0xb208: /* SPT */ goto unimplemented;
|