From: Florian Krohm Date: Mon, 16 Jan 2012 17:25:55 +0000 (+0000) Subject: Remove broken support for TS insn in s390 port. The X-Git-Tag: svn/VALGRIND_3_8_1^2~219 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ecfe3b20e9d6a379c86b40abe93256751bfe1ec;p=thirdparty%2Fvalgrind.git 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 git-svn-id: svn://svn.valgrind.org/vex/trunk@2239 --- diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h index 3c389551b6..bf4b762803 100644 --- a/VEX/priv/guest_s390_defs.h +++ b/VEX/priv/guest_s390_defs.h @@ -101,25 +101,24 @@ enum { 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 @@ enum { | 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 | | diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c index 60149f08bd..47a0635c0c 100644 --- a/VEX/priv/guest_s390_helpers.c +++ b/VEX/priv/guest_s390_helpers.c @@ -512,11 +512,6 @@ s390_calculate_cc(ULong cc_op, ULong cc_dep1, ULong cc_dep2, ULong cc_ndep) /* 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 @@ guest_s390x_spechelper(HChar *function_name, IRExpr **args, 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: ; } diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index 69a2618ef8..32118e3737 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -7865,18 +7865,6 @@ s390_irgen_SVC(UChar i) return "svc"; } -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) { @@ -11253,11 +11241,11 @@ s390_decode_4byte_and_irgen(UChar *bytes) 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;