]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Remove broken support for TS insn in s390 port. The
authorFlorian Krohm <florian@eich-krohm.de>
Mon, 16 Jan 2012 17:25:55 +0000 (17:25 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Mon, 16 Jan 2012 17:25:55 +0000 (17:25 +0000)
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

VEX/priv/guest_s390_defs.h
VEX/priv/guest_s390_helpers.c
VEX/priv/guest_s390_toIR.c

index 3c389551b633fc4c2b1d9cc3fda01ebcedac8f64..bf4b762803ea29c1af72d953ae77f898e5e70778 100644 (file)
@@ -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       |             |
index 60149f08bd73ba593dd96aba3275e39ee45355da..47a0635c0c6ec366a364b6101026fbf51d65d325 100644 (file)
@@ -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:
       ;
    }
index 69a2618ef8b1981da9101235002a148208cc5ebe..32118e373775a39abb5c65e9c7bbb840874c0ed3 100644 (file)
@@ -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;