]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390x: Add missing "cc" clobbers in test case inline asms
authorAndreas Arnez <arnez@linux.ibm.com>
Fri, 1 Oct 2021 18:10:54 +0000 (20:10 +0200)
committerAndreas Arnez <arnez@linux.ibm.com>
Mon, 4 Oct 2021 12:50:46 +0000 (14:50 +0200)
Some inline assemblies in various s390x test cases miss specifying the
condition code "cc" in the clobber list.  Although this has not actually
been seen to cause wrong code generation, it certainly might, so fix this.

21 files changed:
none/tests/s390x/bfp-2.c
none/tests/s390x/cgij.c
none/tests/s390x/cgrj.c
none/tests/s390x/cij.c
none/tests/s390x/clgij.c
none/tests/s390x/clgrj.c
none/tests/s390x/clij.c
none/tests/s390x/clrj.c
none/tests/s390x/crj.c
none/tests/s390x/dfp-1.c
none/tests/s390x/dfp-2.c
none/tests/s390x/dfp-3.c
none/tests/s390x/lsc2.c
none/tests/s390x/misc3.c
none/tests/s390x/pfpo.c
none/tests/s390x/tre.c
none/tests/s390x/troo.c
none/tests/s390x/trot.c
none/tests/s390x/trto.c
none/tests/s390x/trtt.c
none/tests/s390x/xc.c

index a4295daa9c92195aae289179a4c0cd948e505f85..73349eddd228d07c16ac7dd87fc160cbcb378481 100644 (file)
@@ -27,7 +27,7 @@ void lnebr(float in)
 {
    float out;
 
-   __asm__ volatile("lnebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lnebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lnebr  %f  -> %f\n", in, out);
 }
 
@@ -35,7 +35,7 @@ void lndbr(double in)
 {
    double out;
 
-   __asm__ volatile("lndbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lndbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lndbr  %f  -> %f\n", in, out);
 }
 
@@ -43,7 +43,7 @@ void lpebr(float in)
 {
    float out;
 
-   __asm__ volatile("lpebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lpebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lpebr  %f  -> %f\n", in, out);
 }
 
@@ -51,7 +51,7 @@ void lpdbr(double in)
 {
    double out;
 
-   __asm__ volatile("lpdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lpdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lpdbr  %f  -> %f\n", in, out);
 }
 
@@ -59,7 +59,7 @@ void lcebr(float in)
 {
    float out;
 
-   __asm__ volatile("lcebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lcebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lcebr  %f  -> %f\n", in, out);
 }
 
@@ -67,7 +67,7 @@ void lcdbr(double in)
 {
    double out;
 
-   __asm__ volatile("lcdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
+   __asm__ volatile("lcdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in) : "cc");
    printf("lcdbr  %f  -> %f\n", in, out);
 }
 
index 799e4240b278fe7b3dcc8fe1843ab6fdb94d15be..6b69565bc24cb03c0faa7c7ad46be1414bb511c7 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index 3a5abd336b3252df84733a3bfa1c5e0a294b4c83..d11a63242c264110a7773c0e685881176a805748 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index 34e24d0ce9ff015b31fd8ddb8f7e5b6405211db8..10f0a988cc0b1918f2b9dcc46acab90d51a5de07 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index 7cfd5098523d56f3809455fed5b0642171fe64de..d993deadcabf88fb6531c793b80f5df151cb4035 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index c7917df505e262dffc00df6460ecb194a7031fcd..9ffd1114a25fab213ee04b03b311c4ad20f24b72 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index dc627cdcc9fab3392b0bc0a9a5876d5fc8081ef9..01636cf7dfcb97e50f25de8dee9ff6c4dfa916dd 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index ba42b948dbdc89b0bd69f4866ba97aed625aa11e..b88232134f968ecae476108f1b3dc58ea395b8f0 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index df3bd2009a07040c800fc2cf76ee5b48a1d24a26..65d9d0d9adf436b6de3a1c2a2a15d0ce9f8af917 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include "opcodes.h"
 
-#define BRASLCLOBBER "0","1","2","3","4","5","14", \
+#define BRASLCLOBBER "cc", "0","1","2","3","4","5","14",        \
                     "f0","f1","f2","f3","f4","f5","f6","f7"
 
 void if_eq(void)        { printf("equal\n");   }
index 1b7d51b9e3a98629b23311fbbb825118f7969231..b9be89963fd148d56256a83a51c90f138cf568f6 100644 (file)
@@ -15,6 +15,7 @@ volatile _Decimal128 d128_1, d128_2, result_128;
                  "srl %1,28\n\t"                                        \
                  :"+f" (d1), "=d" (cc)                                  \
                  :"f"(d2)                                               \
+                 :"cc"                                                  \
                  );                                                     \
     d1;                                                                 \
   })
index bec51be3dfcca7bcbfc7b96b2cbdbeab155716bf..061fff4c7ae1156b44441a6a02391e52999004d5 100644 (file)
@@ -89,7 +89,8 @@ void ltdtr(_Decimal64 in)
                "ipm %1\n\t"
                "srl %1,28\n\t"
                :[out] "=d" (out), "=d" (cc)
-               :[in] "f" (in));
+               :[in] "f" (in)
+               :"cc");
   printf("LTDTR ");
   DFP_VAL_PRINT(in, _Decimal64);
   printf(" -> %d\n", cc);
@@ -103,7 +104,8 @@ void ltxtr(_Decimal128 in)
                "ipm %1\n\t"
                "srl %1,28\n\t"
                :[out] "=f" (out), "=d" (cc)
-               :[in] "f" (in));
+               :[in] "f" (in)
+               :"cc");
   printf("LTXTR ");
   DFP_VAL_PRINT(in, _Decimal128);
   printf(" -> %d\n", cc);
index ed0177c69fa8bd6757446215c48534b1d776a4ec..5120ed6b4e9f8fe278c91b7d723103f9a5309da2 100644 (file)
@@ -19,6 +19,7 @@
                "srl %0,28\n\t"                                          \
                :"=d" (cc)                                               \
                :"f"(d1), "f"(d2)                                        \
+               :"cc"                                                    \
                );                                                       \
   cc;                                                                   \
 })
index ecfc5a9816435cf24297511c2cc3ec799397a29a..c026dcbd6210d3092feec5fb55f0adea1989f258 100644 (file)
@@ -163,7 +163,8 @@ static bool test_llzrgf(const uint32_t testedValue)
           : [testedValue] "r"(testedValue),                                    \
             [invertedValue] "r"(invertedValue),                                \
             [overrideValue] #ARGUMENT_ASM_TYPE(overrideValue),                 \
-            "[after]"(after));                                                 \
+            "[after]"(after)                                                   \
+          : "cc");                                                             \
                                                                                \
       SMART_RETURN_R64(TESTED_INSTRUCTION);                                    \
    }
@@ -199,7 +200,8 @@ declare_load_high_on_condition(locfhl, <, m)
           : [after] "=" #ARGUMENT_ASM_TYPE(after)                              \
           : [testedValue] "r"(testedValue),                                    \
             [invertedValue] "r"(invertedValue),                                \
-            [overrideValue] "r"(overrideValue));                               \
+            [overrideValue] "r"(overrideValue)                                 \
+          : "cc");                                                             \
                                                                                \
       SMART_RETURN_R64(TESTED_INSTRUCTION);                                    \
    }
@@ -235,7 +237,8 @@ declare_store_high_on_condition(stocfhl, <, m)
           : [after] "=r"(after)                                                \
           : [testedValue] "r"(testedValue),                                    \
             [invertedValue] "r"(invertedValue),                                \
-            "[after]"(after));                                                 \
+            "[after]"(after)                                                   \
+          : "cc");                                                             \
                                                                                \
       SMART_RETURN_R64(TESTED_INSTRUCTION);                                    \
    }
@@ -273,7 +276,8 @@ declare_load_halfword_immediate_on_condition(locghil, uint64_t, <, r)
           : [after] "=r"(after)                                           \
           : [testedValue] "r"(testedValue),                               \
             [invertedValue] "r"(invertedValue),                           \
-            "[after]"(after));                                            \
+            "[after]"(after)                                              \
+          : "cc");                                                        \
                                                                           \
       SMART_RETURN_R64(TESTED_INSTRUCTION);                               \
    }
@@ -314,7 +318,8 @@ static void test_all_locfh()
       __asm__ volatile("lcbb %[after], %[testedPointer], " #M_FIELD       \
                        "\n"                                               \
                        : [after] "=r"(after)                              \
-                       : [testedPointer] "m"(*testedPointer));            \
+                       : [testedPointer] "m"(*testedPointer)              \
+                       : "cc");                                           \
                                                                           \
       SMART_RETURN_R64(lcbb##M_FIELD);                                    \
    }
index ae6e8d4c2bd6bff6c51106fd7908897f972b53ff..fbf4cae682beedfa1c017d76e0794e7a922f82db 100644 (file)
@@ -106,7 +106,7 @@ static int test_all_popcnt()
            [out1] "+d" (out1)                                   \
          : [a] "d" (a),                                         \
            [b] "d" (b)                                          \
-         : );                                                   \
+         : "cc");                                               \
                                                                 \
       printf("\t%016lx %016lx -> %016lx %016lx\n",              \
              a, b, out0, out1);                                 \
index dd4fcec7d182e608f3c3db2a647b22e4164263ab..1bfd8896c76627c436f813aa9f3142c899cc82ba 100644 (file)
@@ -36,7 +36,8 @@
                "ipm %2\n\t"                                             \
                "srl %2,28\n\t"                                          \
                :"=f"(dst_reg), "=d"(ret), "=d" (cc)                     \
-               : "f"(src_reg), "d"(fn));                                \
+               : "f"(src_reg), "d"(fn)                                  \
+               : "cc");                                                 \
   ret_code = ret;                                                       \
   dst_reg;                                                              \
 })
index dd2e1efce8cbb9be0039463395dc3fe428da0179..da0e38d3e04d04921ad20ea47c1a26eb48632668 100644 (file)
@@ -31,7 +31,7 @@ tre_regs tre(uint8_t *codepage, uint8_t *addr, uint64_t len, uint8_t test_byte)
                 " ipm  %0\n"
                 " srl  %0,28\n"
                :"=d"(cc),"+&d"(a1)
-                :"d"(a2),"d"(param),"d"(l1),"d"(test_byte):  "memory" );
+                :"d"(a2),"d"(param),"d"(l1),"d"(test_byte):  "cc", "memory" );
 
    regs.addr = a1;
    regs.len = l1;
index 374f3cd20c66b3768c94eb75eb3442585607b618..f62ad0d0578551edc3eade247b69014aef55fdfe 100644 (file)
@@ -41,7 +41,7 @@ troo_regs tr(uint8_t *addr, uint8_t *codepage, uint8_t *dest, uint64_t len,
                 " srl   %0,28\n"
                 : "=d"(cc),"+&d"(desaddr)
                 : "d" (srcaddr),"d"(test_byte),"d" (codepage2),"d"(length)
-                : "memory" );
+                : "cc", "memory" );
 
    regs.srcaddr = srcaddr;
    regs.len = length;
index b4b44c86aeb548a755a742f6f1f44bb15af9b2c7..76072c02776791876cccc1f904230aceb64c6e91 100644 (file)
@@ -42,7 +42,7 @@ trot_regs tr(uint8_t *addr, uint16_t *codepage, uint16_t *dest, uint64_t len,
                 " srl   %0,28\n"
                 : "=d"(cc),"+&d"(desaddr)
                 : "d" (srcaddr),"d"(test_byte),"d" (codepage2),"d"(length)
-                : "memory" );
+                : "cc", "memory" );
 
    regs.srcaddr = srcaddr;
    regs.len = length;
index b79721d7719c84a6777da8de12c24a44917f5382..f8ff97645a02737035794d56f780e00a75eac496 100644 (file)
@@ -41,7 +41,7 @@ trto_regs tr(uint16_t *addr, uint16_t *codepage, uint8_t *dest, uint64_t len,
                 " srl   %0,28\n"
                 : "=d"(cc),"+&d"(desaddr)
                 : "d" (srcaddr),"d"(test_byte),"d" (codepage2),"d"(length)
-                : "memory" );
+                : "cc", "memory" );
 
    regs.srcaddr = srcaddr;
    regs.len = length;
index e9cb89902c73a6752891d977aa04a56f65eba362..c59c6416e69be879cd8de8d49f82fb47a3aefb73 100644 (file)
@@ -42,7 +42,7 @@ trtt_regs tr(uint16_t *addr, uint16_t *codepage, uint16_t *dest, uint64_t len,
                 " srl   %0,28\n"
                 : "=d"(cc),"+d"(desaddr),"+d"(srcaddr)
                 : "d"(test_byte),"d" (codepage2),"d"(length)
-                : "memory" );
+                : "cc", "memory" );
 
    regs.srcaddr = srcaddr;
    regs.len = length;
index 9c81b59f2c673ba3bcbd38049a9898316761d3b2..86dda352d6900485e1ccd2641ad72722b8d4c3a6 100644 (file)
@@ -10,7 +10,7 @@ void test_oc(void)
 
        printf("\nOC:\n");
        asm volatile ("oc %O0(1,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 2);
 
@@ -28,12 +28,12 @@ void test_nc(void)
 
        printf("\nNC:\n");
        asm volatile ("nc %O0(1,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 2);
 
        asm volatile ("nc %O0(19,%R0),%1\n"::"Q" (*buf1),
-                     "Q"(*buf2):"memory");
+                     "Q"(*buf2):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(buf1, 20);
 }
@@ -54,22 +54,22 @@ void test_xc(void)
 
        printf("\nXC:\n");
        asm volatile ("xc %O0(1,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 4);
 
        asm volatile ("xc %O0(10,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 12);
 
        asm volatile ("xc %O0(100,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 102);
 
        asm volatile ("xc %O0(256,%R0),%0\n"::"Q" (*zero),
-                     "Q"(*zero):"memory");
+                     "Q"(*zero):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(zero, 257);
 
@@ -78,15 +78,15 @@ void test_xc(void)
                      "ex 1,0(2)\n"
                      "j 2f\n"
                      "1: xc 260(1,%0),260(%0)\n"
-                     "2:\n"::"a" (zero), "a"(zero):"memory", "1", "2");
+                     "2:\n"::"a" (zero), "a"(zero):"cc","memory", "1", "2");
        printf("CC:%d\n", get_cc());
        dump_field(zero + 260, 30);
 
        asm volatile ("xc 0(19,%0),0(%1)\n"::"a" (buf1),
-                     "a"(buf2):"memory");
+                     "a"(buf2):"cc","memory");
        printf("CC:%d\n", get_cc());
        dump_field(buf1, 20);
-       asm volatile ("xc 0(10,%0),0(%0)\n"::"a" (buf3):"memory");
+       asm volatile ("xc 0(10,%0),0(%0)\n"::"a" (buf3):"cc","memory");
 
        printf("CC:%d\n", get_cc());
        dump_field(buf3, 20);