]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: extended-immediate facility related cleanups (BZ 509562)
authorFlorian Krohm <flo2030@eich-krohm.de>
Mon, 24 Nov 2025 23:21:29 +0000 (23:21 +0000)
committerFlorian Krohm <flo2030@eich-krohm.de>
Mon, 24 Nov 2025 23:21:29 +0000 (23:21 +0000)
The extended-immediate facility is always present on the supported
machines.
- Remove VEX_HWCAPS_S390X_EIMM and s390_host_has_eimm
- Remove unused functions: s390_emit_LLILH, s390_emit_IILL, s390_emit_IILH,
  s390_emit_IIHL, s390_emit_IIHH
- Remove wrapper functions: s390_emit_NILFw, s390_emit_OILFw, s390_emit_XILFw,
  s390_emit_LBRw, s390_emit_LGBRw, s390_emit_LHRw, s390_emit_LGHRw,
  s390_emit_LGFIw, s390_emit_LLCRw, s390_emit_LLGCRw, s390_emit_LLHRw,
  s390_emit_LLGHRw, s390_emit_LLCw, s390_emit_LLHw, s390_emit_LLILFw,
  s390_emit_AFIw, s390_emit_SLFIw, s390_emit_SLGFIw, s390_emit_LTw,
  s390_emit_LTGw, s390_emit_CFIw, s390_emit_CLFIw
- Update tests/s390x_features.c

Part of fixing https://bugs.kde.org/show_bug.cgi?id=509562

VEX/priv/host_s390_defs.c
VEX/priv/host_s390_defs.h
VEX/priv/main_main.c
VEX/pub/libvex.h
coregrind/m_machine.c
tests/s390x_features.c

index 4831e1d67d2aa5a659ff5f357ccf2a449f12be97..7b8dbe63dbbb12547a8864942a574b53346484d5 100644 (file)
@@ -2048,8 +2048,6 @@ s390_emit_AG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_AFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("afi"), GPR(r1), INT(i2));
 
@@ -2060,8 +2058,6 @@ s390_emit_AFI(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_AGFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("agfi"), GPR(r1), INT(i2));
 
@@ -2186,8 +2182,6 @@ s390_emit_NG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_NIHF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("nihf"), GPR(r1), UINT(i2));
 
@@ -2198,8 +2192,6 @@ s390_emit_NIHF(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_NILF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("nilf"), GPR(r1), UINT(i2));
 
@@ -2340,8 +2332,6 @@ s390_emit_CG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_CFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("cfi"), GPR(r1), INT(i2));
 
@@ -2352,8 +2342,6 @@ s390_emit_CFI(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_CGFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("cgfi"), GPR(r1), INT(i2));
 
@@ -2474,8 +2462,6 @@ s390_emit_CLG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_CLFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("clfi"), GPR(r1), UINT(i2));
 
@@ -2486,8 +2472,6 @@ s390_emit_CLFI(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_CLGFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("clgfi"), GPR(r1), UINT(i2));
 
@@ -2628,8 +2612,6 @@ s390_emit_XG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_XIHF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("xihf"), GPR(r1), UINT(i2));
 
@@ -2640,8 +2622,6 @@ s390_emit_XIHF(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_XILF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("xilf"), GPR(r1), UINT(i2));
 
@@ -2662,8 +2642,6 @@ s390_emit_XC(UChar *p, UInt l, UChar b1, UShort d1, UChar b2, UShort d2)
 static UChar *
 s390_emit_FLOGR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("flogr"), GPR(r1), GPR(r2));
 
@@ -2694,8 +2672,6 @@ s390_emit_ICY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_IIHF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("iihf"), GPR(r1), UINT(i2));
 
@@ -2703,31 +2679,9 @@ s390_emit_IIHF(UChar *p, UChar r1, UInt i2)
 }
 
 
-static UChar *
-s390_emit_IIHH(UChar *p, UChar r1, UShort i2)
-{
-   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
-      S390_DISASM(MNM("iihh"), GPR(r1), UINT(i2));
-
-   return emit_RI(p, 0xa5000000, r1, i2);
-}
-
-
-static UChar *
-s390_emit_IIHL(UChar *p, UChar r1, UShort i2)
-{
-   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
-      S390_DISASM(MNM("iihl"), GPR(r1), UINT(i2));
-
-   return emit_RI(p, 0xa5010000, r1, i2);
-}
-
-
 static UChar *
 s390_emit_IILF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("iilf"), GPR(r1), UINT(i2));
 
@@ -2735,26 +2689,6 @@ s390_emit_IILF(UChar *p, UChar r1, UInt i2)
 }
 
 
-static UChar *
-s390_emit_IILH(UChar *p, UChar r1, UShort i2)
-{
-   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
-      S390_DISASM(MNM("iilh"), GPR(r1), UINT(i2));
-
-   return emit_RI(p, 0xa5020000, r1, i2);
-}
-
-
-static UChar *
-s390_emit_IILL(UChar *p, UChar r1, UShort i2)
-{
-   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
-      S390_DISASM(MNM("iill"), GPR(r1), UINT(i2));
-
-   return emit_RI(p, 0xa5030000, r1, i2);
-}
-
-
 static UChar *
 s390_emit_IPM(UChar *p, UChar r1, UChar r2)
 {
@@ -2838,8 +2772,6 @@ s390_emit_LGF(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LGFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lgfi"), GPR(r1), INT(i2));
 
@@ -2870,8 +2802,6 @@ s390_emit_LTGR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LT(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lt"), GPR(r1), SDXB(dh2, dl2, x2, b2));
 
@@ -2882,8 +2812,6 @@ s390_emit_LT(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LTG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("ltg"), GPR(r1), SDXB(dh2, dl2, x2, b2));
 
@@ -2894,8 +2822,6 @@ s390_emit_LTG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LBR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lbr"), GPR(r1), GPR(r2));
 
@@ -2906,8 +2832,6 @@ s390_emit_LBR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LGBR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lgbr"), GPR(r1), GPR(r2));
 
@@ -2958,8 +2882,6 @@ s390_emit_LCGR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LHR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lhr"), GPR(r1), GPR(r2));
 
@@ -2970,8 +2892,6 @@ s390_emit_LHR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LGHR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("lghr"), GPR(r1), GPR(r2));
 
@@ -3052,8 +2972,6 @@ s390_emit_LLGF(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LLCR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llcr"), GPR(r1), GPR(r2));
 
@@ -3064,8 +2982,6 @@ s390_emit_LLCR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LLGCR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llgcr"), GPR(r1), GPR(r2));
 
@@ -3076,8 +2992,6 @@ s390_emit_LLGCR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LLC(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llc"), GPR(r1), SDXB(dh2, dl2, x2, b2));
 
@@ -3098,8 +3012,6 @@ s390_emit_LLGC(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LLHR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llhr"), GPR(r1), GPR(r2));
 
@@ -3110,8 +3022,6 @@ s390_emit_LLHR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LLGHR(UChar *p, UChar r1, UChar r2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llghr"), GPR(r1), GPR(r2));
 
@@ -3122,8 +3032,6 @@ s390_emit_LLGHR(UChar *p, UChar r1, UChar r2)
 static UChar *
 s390_emit_LLH(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llh"), GPR(r1), SDXB(dh2, dl2, x2, b2));
 
@@ -3144,8 +3052,6 @@ s390_emit_LLGH(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_LLILF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("llilf"), GPR(r1), UINT(i2));
 
@@ -3153,16 +3059,6 @@ s390_emit_LLILF(UChar *p, UChar r1, UInt i2)
 }
 
 
-static UChar *
-s390_emit_LLILH(UChar *p, UChar r1, UShort i2)
-{
-   if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
-      S390_DISASM(MNM("llilh"), GPR(r1), UINT(i2));
-
-   return emit_RI(p, 0xa50e0000, r1, i2);
-}
-
-
 static UChar *
 s390_emit_LLILL(UChar *p, UChar r1, UShort i2)
 {
@@ -3480,8 +3376,6 @@ s390_emit_OG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_OIHF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("oihf"), GPR(r1), UINT(i2));
 
@@ -3492,8 +3386,6 @@ s390_emit_OIHF(UChar *p, UChar r1, UInt i2)
 static UChar *
 s390_emit_OILF(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("oilf"), GPR(r1), UINT(i2));
 
@@ -3714,8 +3606,6 @@ s390_emit_SHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2)
 static UChar *
 s390_emit_SLFI(UChar *p, UChar r1, UInt i2)
 {
-   vassert(s390_host_has_eimm);
-
    if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM))
       S390_DISASM(MNM("slfi"), GPR(r1), UINT(i2));
 
@@ -5190,33 +5080,16 @@ s390_emit_load_64imm(UChar *p, UChar reg, ULong val)
       return s390_emit_LGHI(p, reg, val);
    }
 
-   if (s390_host_has_eimm) {
-      if (ulong_fits_unsigned_32bit(val)) {
-         return s390_emit_LLILF(p, reg, val);
-      }
-      if (ulong_fits_signed_32bit(val)) {
-         /* LGFI's sign extension will recreate the correct 64-bit value */
-         return s390_emit_LGFI(p, reg, val);
-      }
-      /* Do it in two steps: upper half [0:31] and lower half [32:63] */
-      p =  s390_emit_IIHF(p, reg, val >> 32);
-      return s390_emit_IILF(p, reg, val & 0xFFFFFFFF);
-   }
-
-   /* Fall back */
    if (ulong_fits_unsigned_32bit(val)) {
-      p = s390_emit_LLILH(p, reg, (val >> 16) & 0xFFFF); /* sets val[32:47]
-                                                            val[0:31] = 0 */
-      p = s390_emit_IILL(p, reg, val & 0xFFFF);          /* sets val[48:63] */
-      return p;
+      return s390_emit_LLILF(p, reg, val);
    }
-
-   p = s390_emit_IIHH(p, reg, (val >> 48) & 0xFFFF);
-   p = s390_emit_IIHL(p, reg, (val >> 32) & 0xFFFF);
-   p = s390_emit_IILH(p, reg, (val >> 16) & 0xFFFF);
-   p = s390_emit_IILL(p, reg, val & 0xFFFF);
-
-   return p;
+   if (ulong_fits_signed_32bit(val)) {
+      /* LGFI's sign extension will recreate the correct 64-bit value */
+      return s390_emit_LGFI(p, reg, val);
+   }
+   /* Do it in two steps: upper half [0:31] and lower half [32:63] */
+   p = s390_emit_IIHF(p, reg, val >> 32);
+   return s390_emit_IILF(p, reg, val & 0xFFFFFFFF);
 }
 
 /* Load a 32-bit immediate VAL into register REG. */
@@ -5227,13 +5100,7 @@ s390_emit_load_32imm(UChar *p, UChar reg, UInt val)
       /* LHI's sign extension will recreate the correct 32-bit value */
       return s390_emit_LHI(p, reg, val);
    }
-   if (s390_host_has_eimm) {
-      return s390_emit_IILF(p, reg, val);
-   }
-   /* val[0:15]  --> (val >> 16) & 0xFFFF
-      val[16:31] --> val & 0xFFFF */
-   p = s390_emit_IILH(p, reg, (val >> 16) & 0xFFFF);
-   return s390_emit_IILL(p, reg, val & 0xFFFF);
+   return s390_emit_IILF(p, reg, val);
 }
 
 /*------------------------------------------------------------*/
@@ -5280,311 +5147,6 @@ s390_emit_MSFIw(UChar *p, UChar r1, UInt i2)
 }
 
 
-/* r1[32:63] = r1[32:63] & i2 */
-static UChar *
-s390_emit_NILFw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_NILF(p, r1, i2);
-   }
-
-   /* Load I2 into R0; then AND R0 with R1 */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_NR(p, r1, R0);
-}
-
-
-/* r1[32:63] = r1[32:63] | i2 */
-static UChar *
-s390_emit_OILFw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_OILF(p, r1, i2);
-   }
-
-   /* Load I2 into R0; then AND R0 with R1 */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_OR(p, r1, R0);
-}
-
-
-/* r1[32:63] = r1[32:63] ^ i2 */
-static UChar *
-s390_emit_XILFw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_XILF(p, r1, i2);
-   }
-
-   /* Load I2 into R0; then AND R0 with R1 */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_XR(p, r1, R0);
-}
-
-
-/*  r1[32:63] = sign_extend(r2[56:63]) */
-static UChar *
-s390_emit_LBRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LBR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);               /* r1 = r2 */
-   p = s390_emit_SLL(p, r1, R0, 24);          /* r1 = r1 << 24  */
-   return s390_emit_SRA(p, r1, R0, 24);       /* r1 = r1 >>a 24 */
-}
-
-
-/*  r1[0:63] = sign_extend(r2[56:63]) */
-static UChar *
-s390_emit_LGBRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LGBR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);                       /* r1 = r2 */
-   p = s390_emit_SLLG(p, r1, r1, R0, DISP20(56));     /* r1 = r1 << 56  */
-   return s390_emit_SRAG(p, r1, r1, R0, DISP20(56));  /* r1 = r1 >>a 56 */
-}
-
-
-/* r1[32:63] = sign_extend(r2[48:63]) */
-static UChar *
-s390_emit_LHRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LHR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);               /* r1 = r2 */
-   p = s390_emit_SLL(p, r1, R0, 16);          /* r1 = r1 << 16  */
-   return s390_emit_SRA(p, r1, R0, 16);       /* r1 = r1 >>a 16 */
-}
-
-
-/* r1[0:63] = sign_extend(r2[48:63]) */
-static UChar *
-s390_emit_LGHRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LGHR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);               /* r1 = r2 */
-   p = s390_emit_SLLG(p, r1, r1, R0, DISP20(48));     /* r1 = r1 << 48  */
-   return s390_emit_SRAG(p, r1, r1, R0, DISP20(48));  /* r1 = r1 >>a 48 */
-}
-
-
-/* r1[0:63] = sign_extend(i2) */
-static UChar *
-s390_emit_LGFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LGFI(p, r1, i2);
-   }
-
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_LGFR(p, r1, R0);
-}
-
-
-/* r1[32:63] = zero_extend($r2[56:63]) */
-static UChar *
-s390_emit_LLCRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLCR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);
-   p = s390_emit_LHI(p, R0, 0xFF);
-   return s390_emit_NR(p, r1, R0);
-}
-
-
-/* r1[0:63] = zero_extend($r2[56:63]) */
-static UChar *
-s390_emit_LLGCRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLGCR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);
-   p = s390_emit_LLILL(p, R0, 0xFF);
-   return s390_emit_NGR(p, r1, R0);
-}
-
-
-/* r1[32:63] = zero_extend(r2[48:63]) */
-static UChar *
-s390_emit_LLHRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLHR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);
-   p = s390_emit_LLILL(p, R0, 0xFFFF);
-   return s390_emit_NR(p, r1, R0);
-}
-
-
-/* r1[0:63] = zero_extend(r2[48:63]) */
-static UChar *
-s390_emit_LLGHRw(UChar *p, UChar r1, UChar r2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLGHR(p, r1, r2);
-   }
-
-   p = s390_emit_LR(p, r1, r2);
-   p = s390_emit_LLILL(p, R0, 0xFFFF);
-   return s390_emit_NGR(p, r1, R0);
-}
-
-
-/* r1[32:63] = zero_extend(mem[op2addr][0:7]) */
-static UChar *
-s390_emit_LLCw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl, UChar dh)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLC(p, r1, x2, b2, dl, dh);
-   }
-
-   if (dh == 0) {
-      p = s390_emit_IC(p, r1, x2, b2, dl);
-   } else {
-      p = s390_emit_ICY(p, r1, x2, b2, dl, dh);
-   }
-   p = s390_emit_LLILL(p, R0, 0xFF);
-   return s390_emit_NR(p, r1, R0);
-}
-
-
-/* r1[32:63] = zero_extend(mem[op2addr][0:15]) */
-static UChar *
-s390_emit_LLHw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl, UChar dh)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLH(p, r1, x2, b2, dl, dh);
-   }
-
-   p = s390_emit_LLGH(p, r1, x2, b2, dl, dh);
-   p = s390_emit_LLILL(p, R0, 0xFFFF);
-   return s390_emit_NR(p, r1, R0);
-}
-
-
-/* r1[0:63] = zero_extend(i2) */
-static UChar *
-s390_emit_LLILFw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LLILF(p, r1, i2);
-   }
-
-   p = s390_emit_LLILH(p, r1, (i2 >> 16) & 0xFFFF);  /* i2[0:15] */
-   return s390_emit_OILL(p, r1, i2 & 0xFFFF);
-}
-
-
-/* r1[32:63] = r1[32:63] + i2 */
-static UChar *
-s390_emit_AFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_AFI(p, r1, i2);
-   }
-   /* Load 32 bit immediate to R0 then add */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_AR(p, r1, R0);
-}
-
-
-/* r1[32:63] = r1[32:63] - i2 */
-static UChar *
-s390_emit_SLFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_SLFI(p, r1, i2);
-   }
-
-   /* Load 32 bit immediate to R0 then subtract */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_SR(p, r1, R0);
-}
-
-
-/* r1[0:63] = r1[0:63] - zero_extend(i2) */
-static UChar *
-s390_emit_SLGFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_SLGFI(p, r1, i2);
-   }
-
-   /* Load zero-extended 32 bit immediate to R0 then subtract */
-   p = s390_emit_load_64imm(p, R0, i2);
-   return s390_emit_SGR(p, r1, R0);
-}
-
-
-static UChar *
-s390_emit_LTw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl, UChar dh)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LT(p, r1, x2, b2, dl, dh);
-   }
-   /* Load 32 bit from memory to R0 then compare */
-   if (dh == 0) {
-      p = s390_emit_L(p, R0, x2, b2, dl);
-   } else {
-      p = s390_emit_LY(p, R0, x2, b2, dl, dh);
-   }
-   return s390_emit_LTR(p, r1, R0);
-}
-
-
-static UChar *
-s390_emit_LTGw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl, UChar dh)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_LTG(p, r1, x2, b2, dl, dh);
-   }
-   /* Load 64 bit from memory to R0 then compare */
-   p = s390_emit_LG(p, R0, x2, b2, dl, dh);
-   return s390_emit_LTGR(p, r1, R0);
-}
-
-
-static UChar *
-s390_emit_CFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_CFI(p, r1, i2);
-   }
-   /* Load 32 bit immediate to R0 then compare */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_CR(p, r1, R0);
-}
-
-
-static UChar *
-s390_emit_CLFIw(UChar *p, UChar r1, UInt i2)
-{
-   if (s390_host_has_eimm) {
-      return s390_emit_CLFI(p, r1, i2);
-   }
-   /* Load 32 bit immediate to R0 then compare */
-   p = s390_emit_load_32imm(p, R0, i2);
-   return s390_emit_CLR(p, r1, R0);
-}
-
-
 static UChar *
 s390_emit_LGDRw(UChar *p, UChar r1, UChar r2)
 {
@@ -8900,7 +8462,7 @@ s390_insn_alu_emit(UChar *buf, const s390_insn *insn)
             return s390_emit_AHI(buf, dst, value);
 
          case S390_ALU_SUB:
-            return s390_emit_SLFIw(buf, dst, value);
+            return s390_emit_SLFI(buf, dst, value);
 
          case S390_ALU_MUL:
             return s390_emit_MHI(buf, dst, value);
@@ -8932,13 +8494,13 @@ s390_insn_alu_emit(UChar *buf, const s390_insn *insn)
             if (uint_fits_signed_16bit(value)) {
                return s390_emit_AHI(buf, dst, value);
             }
-            return s390_emit_AFIw(buf, dst, value);
+            return s390_emit_AFI(buf, dst, value);
 
-         case S390_ALU_SUB:  return s390_emit_SLFIw(buf, dst, value);
+         case S390_ALU_SUB:  return s390_emit_SLFI(buf, dst, value);
          case S390_ALU_MUL:  return s390_emit_MSFIw(buf, dst, value);
-         case S390_ALU_AND:  return s390_emit_NILFw(buf, dst, value);
-         case S390_ALU_OR:   return s390_emit_OILFw(buf, dst, value);
-         case S390_ALU_XOR:  return s390_emit_XILFw(buf, dst, value);
+         case S390_ALU_AND:  return s390_emit_NILF(buf, dst, value);
+         case S390_ALU_OR:   return s390_emit_OILF(buf, dst, value);
+         case S390_ALU_XOR:  return s390_emit_XILF(buf, dst, value);
          case S390_ALU_LSH:  return s390_emit_SLL(buf, dst, 0, value);
          case S390_ALU_RSH:  return s390_emit_SRL(buf, dst, 0, value);
          case S390_ALU_RSHA: return s390_emit_SRA(buf, dst, 0, value);
@@ -8952,7 +8514,7 @@ s390_insn_alu_emit(UChar *buf, const s390_insn *insn)
             if (ulong_fits_signed_16bit(value)) {
                return s390_emit_AGHI(buf, dst, value);
             }
-            if (ulong_fits_signed_32bit(value) && s390_host_has_eimm) {
+            if (ulong_fits_signed_32bit(value)) {
                return s390_emit_AGFI(buf, dst, value);
             }
             /* Load constant into R0 then add */
@@ -8961,7 +8523,7 @@ s390_insn_alu_emit(UChar *buf, const s390_insn *insn)
 
          case S390_ALU_SUB:
             if (ulong_fits_unsigned_32bit(value)) {
-               return s390_emit_SLGFIw(buf, dst, value);
+               return s390_emit_SLGFI(buf, dst, value);
             }
             /* Load value into R0; then subtract from destination reg */
             buf = s390_emit_load_64imm(buf, R0, value);
@@ -8977,31 +8539,16 @@ s390_insn_alu_emit(UChar *buf, const s390_insn *insn)
 
             /* Do it in two steps: upper half [0:31] and lower half [32:63] */
          case S390_ALU_AND:
-            if (s390_host_has_eimm) {
-               buf  = s390_emit_NIHF(buf, dst, value >> 32);
-               return s390_emit_NILF(buf, dst, value & 0xFFFFFFFF);
-            }
-            /* Load value into R0; then combine with destination reg */
-            buf = s390_emit_load_64imm(buf, R0, value);
-            return s390_emit_NGR(buf, dst, R0);
+            buf  = s390_emit_NIHF(buf, dst, value >> 32);
+            return s390_emit_NILF(buf, dst, value & 0xFFFFFFFF);
 
          case S390_ALU_OR:
-            if (s390_host_has_eimm) {
-               buf  = s390_emit_OIHF(buf, dst, value >> 32);
-               return s390_emit_OILF(buf, dst, value & 0xFFFFFFFF);
-            }
-            /* Load value into R0; then combine with destination reg */
-            buf = s390_emit_load_64imm(buf, R0, value);
-            return s390_emit_OGR(buf, dst, R0);
+            buf  = s390_emit_OIHF(buf, dst, value >> 32);
+            return s390_emit_OILF(buf, dst, value & 0xFFFFFFFF);
 
          case S390_ALU_XOR:
-            if (s390_host_has_eimm) {
-               buf  = s390_emit_XIHF(buf, dst, value >> 32);
-               return s390_emit_XILF(buf, dst, value & 0xFFFFFFFF);
-            }
-            /* Load value into R0; then combine with destination reg */
-            buf = s390_emit_load_64imm(buf, R0, value);
-            return s390_emit_XGR(buf, dst, R0);
+            buf  = s390_emit_XIHF(buf, dst, value >> 32);
+            return s390_emit_XILF(buf, dst, value & 0xFFFFFFFF);
 
             /* No special considerations for long displacement here. Only the six
                least significant bits of VALUE will be taken; all other bits are
@@ -9040,30 +8587,30 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size,
             because the upper half-word will not be looked at. */
          if (insn->size == 4 || insn->size == 2) {  /* 8 --> 32    8 --> 16 */
             if (sign_extend)
-               return s390_emit_LBRw(buf, r1, r2);
+               return s390_emit_LBR(buf, r1, r2);
             else
-               return s390_emit_LLCRw(buf, r1, r2);
+               return s390_emit_LLCR(buf, r1, r2);
          }
          if (insn->size == 8) {  /* 8 --> 64 */
             if (sign_extend)
-               return s390_emit_LGBRw(buf, r1, r2);
+               return s390_emit_LGBR(buf, r1, r2);
             else
-               return s390_emit_LLGCRw(buf, r1, r2);
+               return s390_emit_LLGCR(buf, r1, r2);
          }
          goto fail;
 
       case 2:
          if (insn->size == 4) {  /* 16 --> 32 */
             if (sign_extend)
-               return s390_emit_LHRw(buf, r1, r2);
+               return s390_emit_LHR(buf, r1, r2);
             else
-               return s390_emit_LLHRw(buf, r1, r2);
+               return s390_emit_LLHR(buf, r1, r2);
          }
          if (insn->size == 8) {  /* 16 --> 64 */
             if (sign_extend)
-               return s390_emit_LGHRw(buf, r1, r2);
+               return s390_emit_LGHR(buf, r1, r2);
             else
-               return s390_emit_LLGHRw(buf, r1, r2);
+               return s390_emit_LLGHR(buf, r1, r2);
          }
          goto fail;
 
@@ -9094,7 +8641,7 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size,
             if (sign_extend)
                return s390_emit_LB(buf, r1, x, b, DISP20(d));
             else
-               return s390_emit_LLCw(buf, r1, x, b, DISP20(d));
+               return s390_emit_LLC(buf, r1, x, b, DISP20(d));
          }
          if (insn->size == 8) {
             if (sign_extend)
@@ -9107,7 +8654,7 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size,
       case 2:
          if (insn->size == 4) {  /* 16 --> 32 */
             if (sign_extend == 0)
-               return s390_emit_LLHw(buf, r1, x, b, DISP20(d));
+               return s390_emit_LLH(buf, r1, x, b, DISP20(d));
 
             switch (src->tag) {
             case S390_AMODE_B12:
@@ -9184,9 +8731,9 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size,
       case 4:
          if (insn->size == 8) {  /* 32 --> 64 */
             if (sign_extend)
-               return s390_emit_LGFIw(buf, r1, value);
+               return s390_emit_LGFI(buf, r1, value);
             else
-               return s390_emit_LLILFw(buf, r1, value);
+               return s390_emit_LLILF(buf, r1, value);
          }
          goto fail;
 
@@ -9481,10 +9028,10 @@ s390_insn_test_emit(UChar *buf, const s390_insn *insn)
          }
 
       case 4:
-         return s390_emit_LTw(buf, R0, x, b, DISP20(d));
+         return s390_emit_LT(buf, R0, x, b, DISP20(d));
 
       case 8:
-         return s390_emit_LTGw(buf, R0, x, b, DISP20(d));
+         return s390_emit_LTG(buf, R0, x, b, DISP20(d));
 
       default:
          goto fail;
@@ -9723,19 +9270,17 @@ s390_insn_compare_emit(UChar *buf, const s390_insn *insn)
       switch (insn->size) {
       case 4:
          if (signed_comparison)
-            return s390_emit_CFIw(buf, r1, value);
+            return s390_emit_CFI(buf, r1, value);
          else
-            return s390_emit_CLFIw(buf, r1, value);
+            return s390_emit_CLFI(buf, r1, value);
 
       case 8:
-         if (s390_host_has_eimm) {
-            if (signed_comparison) {
-               if (ulong_fits_signed_32bit(value))
-                  return s390_emit_CGFI(buf, r1, value);
-            } else {
-               if (ulong_fits_unsigned_32bit(value))
-                  return s390_emit_CLGFI(buf, r1, value);
-            }
+         if (signed_comparison) {
+            if (ulong_fits_signed_32bit(value))
+               return s390_emit_CGFI(buf, r1, value);
+         } else {
+            if (ulong_fits_unsigned_32bit(value))
+               return s390_emit_CLGFI(buf, r1, value);
          }
          buf = s390_emit_load_64imm(buf, R0, value);
          if (signed_comparison)
@@ -10057,35 +9602,10 @@ s390_insn_clz_emit(UChar *buf, const s390_insn *insn)
    }
 
    default:
-      goto fail;
-   }
-
-   /* Use FLOGR if you can */
-   if (s390_host_has_eimm) {
-      return s390_emit_FLOGR(p, r1, r2);
+      vpanic("s390_insn_clz_emit");
    }
 
-   /*
-      r0 = r2;
-      r1 = 64;
-      while (r0 != 0) {
-        r1 -= 1;
-        r0 >>= 1;
-      }
-   */
-   p = s390_emit_LTGR(p, R0, r2);
-   p = s390_emit_LLILL(p, r1,  64);
-
-   p = s390_emit_BRC(p, S390_CC_E, (4 + 4 + 6 + 4 + 4)/ 2);  /* 4 bytes */
-   p = s390_emit_AGHI(p, r1, (UShort)-1);         /* r1  -= 1;  4 bytes */
-   p = s390_emit_SRLG(p, R0, R0, R0, DISP20(1));  /* r0 >>= 1;  6 bytes */
-   p = s390_emit_LTGR(p, R0, R0);                 /* set cc     4 bytes */
-   p = s390_emit_BRC(p, S390_CC_NE,               /*            4 bytes */
-                     (UShort)(-(4 + 6 + 4) / 2));
-   return p;
-
- fail:
-   vpanic("s390_insn_clz_emit");
+   return s390_emit_FLOGR(p, r1, r2);
 }
 
 
@@ -10914,19 +10434,9 @@ s390_tchain_load64(UChar *buf, UChar regno, ULong value)
 {
    UChar *begin = buf;
 
-   if (s390_host_has_eimm) {
-      /* Do it in two steps: upper half [0:31] and lower half [32:63] */
-      buf = s390_emit_IIHF(buf, regno, value >> 32);
-      buf = s390_emit_IILF(buf, regno, value & 0xFFFFFFFF);
-   } else {
-      buf = s390_emit_IILL(buf, regno, value & 0xFFFF);
-      value >>= 16;
-      buf = s390_emit_IILH(buf, regno, value & 0xFFFF);
-      value >>= 16;
-      buf = s390_emit_IIHL(buf, regno, value & 0xFFFF);
-      value >>= 16;
-      buf = s390_emit_IIHH(buf, regno, value & 0xFFFF);
-   }
+   /* Do it in two steps: upper half [0:31] and lower half [32:63] */
+   buf = s390_emit_IIHF(buf, regno, value >> 32);
+   buf = s390_emit_IILF(buf, regno, value & 0xFFFFFFFF);
 
    vassert(buf - begin == s390_tchain_load64_len());
 
@@ -10937,10 +10447,7 @@ s390_tchain_load64(UChar *buf, UChar regno, ULong value)
 static UInt
 s390_tchain_load64_len(void)
 {
-   if (s390_host_has_eimm) {
-      return 6 + 6;      /* IIHF + IILF */
-   }
-   return 4 + 4 + 4 + 4; /* IIHH + IIHL + IILH + IILL */
+   return 6 + 6;      /* IIHF + IILF */
 }
 
 /* Verify that CODE is the code sequence generated by s390_tchain_load64
@@ -10950,46 +10457,15 @@ static const UChar *
 s390_tchain_verify_load64(const UChar *code, UChar regno, ULong value)
 {
    UInt regmask = regno << 4;
-   UInt hw;
-
-   if (s390_host_has_eimm) {
-      /* Check for IIHF */
-      vassert(code[0]  ==  0xC0);
-      vassert(code[1]  == (0x08 | regmask));
-      vassert(*(const UInt *)&code[2] == (value >> 32));
-      /* Check for IILF */
-      vassert(code[6]  ==  0xC0);
-      vassert(code[7]  == (0x09 | regmask));
-      vassert(*(const UInt *)&code[8] == (value & 0xFFFFFFFF));
-   } else {
-      /* Check for IILL */
-      hw = value & 0xFFFF;
-      vassert(code[0]  ==  0xA5);
-      vassert(code[1]  == (0x03 | regmask));
-      vassert(code[2]  == (hw >> 8));
-      vassert(code[3]  == (hw & 0xFF));
-
-      /* Check for IILH */
-      hw = (value >> 16) & 0xFFFF;
-      vassert(code[4]  ==  0xA5);
-      vassert(code[5]  == (0x02 | regmask));
-      vassert(code[6]  == (hw >> 8));
-      vassert(code[7]  == (hw & 0xFF));
-
-      /* Check for IIHL */
-      hw = (value >> 32) & 0xFFFF;
-      vassert(code[8]  ==  0xA5);
-      vassert(code[9]  == (0x01 | regmask));
-      vassert(code[10] == (hw >> 8));
-      vassert(code[11] == (hw & 0xFF));
-
-      /* Check for IIHH */
-      hw = (value >> 48) & 0xFFFF;
-      vassert(code[12] ==  0xA5);
-      vassert(code[13] == (0x00 | regmask));
-      vassert(code[14] == (hw >> 8));
-      vassert(code[15] == (hw & 0xFF));
-   }
+
+   /* Check for IIHF */
+   vassert(code[0]  ==  0xC0);
+   vassert(code[1]  == (0x08 | regmask));
+   vassert(*(const UInt *)&code[2] == (value >> 32));
+   /* Check for IILF */
+   vassert(code[6]  ==  0xC0);
+   vassert(code[7]  == (0x09 | regmask));
+   vassert(*(const UInt *)&code[8] == (value & 0xFFFFFFFF));
 
    return code + s390_tchain_load64_len();
 }
@@ -11000,21 +10476,10 @@ s390_tchain_verify_load64(const UChar *code, UChar regno, ULong value)
 static UChar *
 s390_tchain_patch_load64(UChar *code, ULong imm64)
 {
-   if (s390_host_has_eimm) {
-      /* Patch IIHF */
-      *(UInt *)&code[2] = imm64 >> 32;
-      /* Patch IILF */
-      *(UInt *)&code[8] = imm64 & 0xFFFFFFFF;
-   } else {
-      code[3]  = imm64 & 0xFF; imm64 >>= 8;
-      code[2]  = imm64 & 0xFF; imm64 >>= 8;
-      code[7]  = imm64 & 0xFF; imm64 >>= 8;
-      code[6]  = imm64 & 0xFF; imm64 >>= 8;
-      code[11] = imm64 & 0xFF; imm64 >>= 8;
-      code[10] = imm64 & 0xFF; imm64 >>= 8;
-      code[15] = imm64 & 0xFF; imm64 >>= 8;
-      code[14] = imm64 & 0xFF; imm64 >>= 8;
-   }
+   /* Patch IIHF */
+   *(UInt *)&code[2] = imm64 >> 32;
+   /* Patch IILF */
+   *(UInt *)&code[8] = imm64 & 0xFFFFFFFF;
 
    return code + s390_tchain_load64_len();
 }
index 9a66b2abc99d39d6ecafbc1f780345599bb0f4cc..9b5e3f00ac8d737d7ac91172a82365ed2959882c 100644 (file)
@@ -918,8 +918,6 @@ VexInvalRange patchProfInc_S390(VexEndness endness_host,
 extern UInt s390_host_hwcaps;
 
 /* Convenience macros to test installed facilities */
-#define s390_host_has_eimm \
-                      (s390_host_hwcaps & (VEX_HWCAPS_S390X_EIMM))
 #define s390_host_has_gie \
                       (s390_host_hwcaps & (VEX_HWCAPS_S390X_GIE))
 #define s390_host_has_fgx \
index ae97ec182c243d2df2ccbd9ceedac49b8215469b..da3ccbd8213adb1e3654f02d0f3982da2a03d35d 100644 (file)
@@ -1902,7 +1902,6 @@ static const HChar* show_hwcaps_s390x ( UInt hwcaps )
       UInt  hwcaps_bit;
       HChar name[6];
    } hwcaps_list[] = {
-      { VEX_HWCAPS_S390X_EIMM,  "eimm" },
       { VEX_HWCAPS_S390X_GIE,   "gie" },
       { VEX_HWCAPS_S390X_FGX,   "fgx" },
       { VEX_HWCAPS_S390X_LSC,   "lsc" },
index 710b3bb56470b81a855bfe36b3118888f4b34edf..cef40335ef028ecb3473e13d42ecd91b38365d31 100644 (file)
@@ -162,7 +162,6 @@ typedef
 #define VEX_S390X_MODEL_UNKNOWN  19     /* always last in list */
 #define VEX_S390X_MODEL_MASK     0x3F
 
-#define VEX_HWCAPS_S390X_EIMM  (1<<7)   /* Extended-immediate facility */
 #define VEX_HWCAPS_S390X_GIE   (1<<8)   /* General-instruction-extension facility */
 #define VEX_HWCAPS_S390X_FGX   (1<<10)  /* FPR-GR transfer facility */
 #define VEX_HWCAPS_S390X_LSC   (1<<16)  /* Conditional load/store facility */
@@ -180,8 +179,7 @@ typedef
 #define VEX_HWCAPS_S390X_MSA9  (1<<30)  /* Message-security-assist extension 9 */
 
 /* Special value representing all available s390x hwcaps */
-#define VEX_HWCAPS_S390X_ALL   (VEX_HWCAPS_S390X_EIMM  | \
-                                VEX_HWCAPS_S390X_GIE   | \
+#define VEX_HWCAPS_S390X_ALL   (VEX_HWCAPS_S390X_GIE   | \
                                 VEX_HWCAPS_S390X_FGX   | \
                                 VEX_HWCAPS_S390X_LSC   | \
                                 VEX_HWCAPS_S390X_PFPO  | \
index 2c613708aae24127f04044ae2fd34da7b19bc98e..e7aca5cb32af83f1d088c564918c643e048ed587 100644 (file)
@@ -1565,7 +1565,6 @@ Bool VG_(machine_get_hwcaps)( void )
         UInt hwcaps_bit;
         const HChar name[6];   // may need adjustment for new facility names
      } fac_hwcaps[] = {
-        { False,  21,  VEX_HWCAPS_S390X_EIMM,  "EIMM"  },
         { False,  34,  VEX_HWCAPS_S390X_GIE,   "GIE"   },
         { False,  41,  VEX_HWCAPS_S390X_FGX,   "FGX"   },
         { False,  45,  VEX_HWCAPS_S390X_LSC,   "LSC"   },
index 592b5487c8aa6400478296ff23d4d00b163ee5ae..593c8c556beb2b7ab0cf2d049bf875bfa624bf6e 100644 (file)
@@ -229,8 +229,6 @@ static int go(char *feature, char *cpu)
       match = (facilities[0] & FAC_BIT(1)) && (facilities[0] & FAC_BIT(2));
    } else if (strcmp(feature, "s390x-n3") == 0 ) {
       match = facilities[0] & FAC_BIT(0);
-   } else if (strcmp(feature, "s390x-eimm") == 0 ) {
-      match = facilities[0] & FAC_BIT(21);
    } else if (strcmp(feature, "s390x-genins") == 0 ) {
       match = facilities[0] & FAC_BIT(34);
    } else if (strcmp(feature, "s390x-exrl") == 0 ) {