From 13bbc701dd09d72be0614725084bcc881acf10c3 Mon Sep 17 00:00:00 2001 From: Florian Krohm Date: Mon, 8 Dec 2014 14:01:33 +0000 Subject: [PATCH] The long displacement facility is now required. There were a few spots in the code where this was assumed implicitly. Ugly fixes were possible, but requiring this facility is not unreasonable as it has been around sind 2003. So let's just do this. git-svn-id: svn://svn.valgrind.org/vex/trunk@3034 --- VEX/priv/host_s390_defs.c | 164 ++------------------------------------ VEX/priv/host_s390_isel.c | 4 +- VEX/priv/main_main.c | 7 ++ 3 files changed, 14 insertions(+), 161 deletions(-) diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 0599009776..c2dd07b8bd 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -1524,8 +1524,6 @@ s390_emit_A(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_AY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ay", r1, dh2, dl2, x2, b2); @@ -1536,8 +1534,6 @@ s390_emit_AY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_AG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ag", r1, dh2, dl2, x2, b2); @@ -1582,8 +1578,6 @@ s390_emit_AH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_AHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ahy", r1, dh2, dl2, x2, b2); @@ -1668,8 +1662,6 @@ s390_emit_N(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_NY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ny", r1, dh2, dl2, x2, b2); @@ -1680,8 +1672,6 @@ s390_emit_NY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_NG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ng", r1, dh2, dl2, x2, b2); @@ -1796,8 +1786,6 @@ s390_emit_C(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_CY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "cy", r1, dh2, dl2, x2, b2); @@ -1808,8 +1796,6 @@ s390_emit_CY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_CG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "cg", r1, dh2, dl2, x2, b2); @@ -1854,8 +1840,6 @@ s390_emit_CS(UChar *p, UChar r1, UChar r3, UChar b2, UShort d2) static UChar * s390_emit_CSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "csy", r1, r3, dh2, dl2, 0, b2); @@ -1866,8 +1850,6 @@ s390_emit_CSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_CSG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "csg", r1, r3, dh2, dl2, 0, b2); @@ -1888,8 +1870,6 @@ s390_emit_CDS(UChar *p, UChar r1, UChar r3, UChar b2, UShort d2) static UChar * s390_emit_CDSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "cdsy", r1, r3, dh2, dl2, 0, b2); @@ -1900,8 +1880,6 @@ s390_emit_CDSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_CDSG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "cdsg", r1, r3, dh2, dl2, 0, b2); @@ -1942,8 +1920,6 @@ s390_emit_CL(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_CLY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "cly", r1, dh2, dl2, x2, b2); @@ -1954,8 +1930,6 @@ s390_emit_CLY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_CLG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "clg", r1, dh2, dl2, x2, b2); @@ -2030,8 +2004,6 @@ s390_emit_DLGR(UChar *p, UChar r1, UChar r2) static UChar * s390_emit_DL(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "dl", r1, dh2, dl2, x2, b2); @@ -2042,8 +2014,6 @@ s390_emit_DL(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_DLG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "dlg", r1, dh2, dl2, x2, b2); @@ -2064,8 +2034,6 @@ s390_emit_DSGR(UChar *p, UChar r1, UChar r2) static UChar * s390_emit_DSG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "dsg", r1, dh2, dl2, x2, b2); @@ -2106,8 +2074,6 @@ s390_emit_X(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_XY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "xy", r1, dh2, dl2, x2, b2); @@ -2118,8 +2084,6 @@ s390_emit_XY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_XG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "xg", r1, dh2, dl2, x2, b2); @@ -2186,8 +2150,6 @@ s390_emit_IC(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_ICY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "icy", r1, dh2, dl2, x2, b2); @@ -2312,8 +2274,6 @@ s390_emit_L(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_LY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ly", r1, dh2, dl2, x2, b2); @@ -2324,8 +2284,6 @@ s390_emit_LY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lg", r1, dh2, dl2, x2, b2); @@ -2336,8 +2294,6 @@ s390_emit_LG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LGF(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lgf", r1, dh2, dl2, x2, b2); @@ -2428,8 +2384,6 @@ s390_emit_LGBR(UChar *p, UChar r1, UChar r2) static UChar * s390_emit_LB(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lb", r1, dh2, dl2, x2, b2); @@ -2440,8 +2394,6 @@ s390_emit_LB(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LGB(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lgb", r1, dh2, dl2, x2, b2); @@ -2506,8 +2458,6 @@ s390_emit_LH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_LHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lhy", r1, dh2, dl2, x2, b2); @@ -2518,8 +2468,6 @@ s390_emit_LHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LGH(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "lgh", r1, dh2, dl2, x2, b2); @@ -2560,8 +2508,6 @@ s390_emit_LLGFR(UChar *p, UChar r1, UChar r2) static UChar * s390_emit_LLGF(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "llgf", r1, dh2, dl2, x2, b2); @@ -2608,8 +2554,6 @@ s390_emit_LLC(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LLGC(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "llgc", r1, dh2, dl2, x2, b2); @@ -2656,8 +2600,6 @@ s390_emit_LLH(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LLGH(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "llgh", r1, dh2, dl2, x2, b2); @@ -2784,8 +2726,6 @@ s390_emit_MLGR(UChar *p, UChar r1, UChar r2) static UChar * s390_emit_ML(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "ml", r1, dh2, dl2, x2, b2); @@ -2796,8 +2736,6 @@ s390_emit_ML(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_MLG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "mlg", r1, dh2, dl2, x2, b2); @@ -2838,8 +2776,6 @@ s390_emit_MS(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_MSY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "msy", r1, dh2, dl2, x2, b2); @@ -2850,8 +2786,6 @@ s390_emit_MSY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_MSG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "msg", r1, dh2, dl2, x2, b2); @@ -2972,8 +2906,6 @@ s390_emit_O(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_OY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "oy", r1, dh2, dl2, x2, b2); @@ -2984,8 +2916,6 @@ s390_emit_OY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_OG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "og", r1, dh2, dl2, x2, b2); @@ -3040,8 +2970,6 @@ s390_emit_SLL(UChar *p, UChar r1, UChar b2, UShort d2) static UChar * s390_emit_SLLG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "sllg", r1, r3, dh2, dl2, 0, b2); @@ -3062,8 +2990,6 @@ s390_emit_SRA(UChar *p, UChar r1, UChar b2, UShort d2) static UChar * s390_emit_SRAG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "srag", r1, r3, dh2, dl2, 0, b2); @@ -3084,8 +3010,6 @@ s390_emit_SRL(UChar *p, UChar r1, UChar b2, UShort d2) static UChar * s390_emit_SRLG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "srlg", r1, r3, dh2, dl2, 0, b2); @@ -3106,8 +3030,6 @@ s390_emit_ST(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_STY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "sty", r1, dh2, dl2, x2, b2); @@ -3118,8 +3040,6 @@ s390_emit_STY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_STG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "stg", r1, dh2, dl2, x2, b2); @@ -3140,8 +3060,6 @@ s390_emit_STC(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_STCY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "stcy", r1, dh2, dl2, x2, b2); @@ -3162,8 +3080,6 @@ s390_emit_STH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_STHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "sthy", r1, dh2, dl2, x2, b2); @@ -3204,8 +3120,6 @@ s390_emit_S(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_SY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "sy", r1, dh2, dl2, x2, b2); @@ -3216,8 +3130,6 @@ s390_emit_SY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_SG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "sg", r1, dh2, dl2, x2, b2); @@ -3238,8 +3150,6 @@ s390_emit_SH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_SHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, GPR, SDXB), "shy", r1, dh2, dl2, x2, b2); @@ -3302,8 +3212,6 @@ s390_emit_LD(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_LEY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, FPR, SDXB), "ley", r1, dh2, dl2, x2, b2); @@ -3314,8 +3222,6 @@ s390_emit_LEY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LDY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, FPR, SDXB), "ldy", r1, dh2, dl2, x2, b2); @@ -3410,8 +3316,6 @@ s390_emit_STD(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) static UChar * s390_emit_STEY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, FPR, SDXB), "stey", r1, dh2, dl2, x2, b2); @@ -3422,8 +3326,6 @@ s390_emit_STEY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_STDY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC3(MNM, FPR, SDXB), "stdy", r1, dh2, dl2, x2, b2); @@ -4792,8 +4694,6 @@ s390_emit_LOCGR(UChar *p, UChar m3, UChar r1, UChar r2) static UChar * s390_emit_LOC(UChar *p, UChar r1, UChar m3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, UINT, SDXB), "loc", r1, m3, dh2, dl2, 0, b2); @@ -4804,8 +4704,6 @@ s390_emit_LOC(UChar *p, UChar r1, UChar m3, UChar b2, UShort dl2, UChar dh2) static UChar * s390_emit_LOCG(UChar *p, UChar r1, UChar m3, UChar b2, UShort dl2, UChar dh2) { - vassert(s390_host_has_ldisp || dh2 == 0); - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) s390_disasm(ENC4(MNM, GPR, UINT, SDXB), "locg", r1, m3, dh2, dl2, 0, b2); @@ -5007,22 +4905,6 @@ s390_emit_XILFw(UChar *p, UChar r1, UInt i2) } -/* r1[32:63] = sign_extend(mem[op2addr][0:7]) */ -static UChar * -s390_emit_LBw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) -{ - vassert(s390_host_has_ldisp || dh2 == 0); - - if (s390_host_has_ldisp) { - return s390_emit_LB(p, r1, x2, b2, dl2, dh2); - } - - p = s390_emit_IC(p, r1, x2, b2, dl2); /* r1[56:63] = mem[op2addr][0:7] */ - p = s390_emit_SLL(p, r1, R0, 24); /* r1 = r1 << 24 */ - return s390_emit_SRA(p, r1, R0, 24); /* r1 = r1 >>a 24 */ -} - - /* r1[32:63] = sign_extend(r2[56:63]) */ static UChar * s390_emit_LBRw(UChar *p, UChar r1, UChar r2) @@ -5037,22 +4919,6 @@ s390_emit_LBRw(UChar *p, UChar r1, UChar r2) } -/* r1[0:63] = sign_extend(mem[op2addr][0:7]) */ -static UChar * -s390_emit_LGBw(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) -{ - vassert(s390_host_has_ldisp || dh2 == 0); - - if (s390_host_has_ldisp) { - return s390_emit_LGB(p, r1, x2, b2, dl2, dh2); - } - - p = s390_emit_IC(p, r1, x2, b2, dl2); /* r1[56:63] = mem[op2addr][0:7] */ - 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[0:63] = sign_extend(r2[56:63]) */ static UChar * s390_emit_LGBRw(UChar *p, UChar r1, UChar r2) @@ -5312,17 +5178,8 @@ s390_emit_LGDRw(UChar *p, UChar r1, UChar r2) /* Store the FPR at memory[sp - 8]. This is safe because SP grows towards smaller addresses and is 8-byte aligned. Then load the GPR from that memory location/ */ - if (s390_host_has_ldisp) { - p = s390_emit_STDY(p, r2, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); - return s390_emit_LG(p, r1, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); - } - - /* No long displacement. Need to adjust SP explicitly as to avoid negative - displacements. */ - p = s390_emit_AGHI(p, S390_REGNO_STACK_POINTER, -8); - p = s390_emit_STD(p, r2, R0, S390_REGNO_STACK_POINTER, 0); - p = s390_emit_LG(p, r1, R0, S390_REGNO_STACK_POINTER, DISP20(0)); - return s390_emit_AGHI(p, S390_REGNO_STACK_POINTER, 8); + p = s390_emit_STDY(p, r2, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); + return s390_emit_LG(p, r1, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); } @@ -5336,17 +5193,8 @@ s390_emit_LDGRw(UChar *p, UChar r1, UChar r2) /* Store the GPR at memory[sp - 8]. This is safe because SP grows towards smaller addresses and is 8-byte aligned. Then load the FPR from that memory location/ */ - if (s390_host_has_ldisp) { - p = s390_emit_STG(p, r2, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); - return s390_emit_LDY(p, r1, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); - } - - /* No long displacement. Need to adjust SP explicitly as to avoid negative - displacements. */ - p = s390_emit_AGHI(p, S390_REGNO_STACK_POINTER, -8); - p = s390_emit_STG(p, r2, R0, S390_REGNO_STACK_POINTER, DISP20(0)); - p = s390_emit_LD(p, r1, R0, S390_REGNO_STACK_POINTER, 0); - return s390_emit_AGHI(p, S390_REGNO_STACK_POINTER, 8); + p = s390_emit_STG(p, r2, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); + return s390_emit_LDY(p, r1, R0, S390_REGNO_STACK_POINTER, DISP20(-8)); } @@ -7895,13 +7743,13 @@ s390_widen_emit(UChar *buf, const s390_insn *insn, UInt from_size, case 1: if (insn->size == 4 || insn->size == 2) { if (sign_extend) - return s390_emit_LBw(buf, r1, x, b, DISP20(d)); + return s390_emit_LB(buf, r1, x, b, DISP20(d)); else return s390_emit_LLCw(buf, r1, x, b, DISP20(d)); } if (insn->size == 8) { if (sign_extend) - return s390_emit_LGBw(buf, r1, x, b, DISP20(d)); + return s390_emit_LGB(buf, r1, x, b, DISP20(d)); else return s390_emit_LLGC(buf, r1, x, b, DISP20(d)); } diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c index 8317e67745..3e8c3c64c2 100644 --- a/VEX/priv/host_s390_isel.c +++ b/VEX/priv/host_s390_isel.c @@ -312,9 +312,7 @@ s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, if (ulong_fits_unsigned_12bit(value)) { return s390_amode_b12((Int)value, s390_isel_int_expr(env, arg1)); } - /* If long-displacement is not available, do not construct B20 or - BX20 amodes because code generation cannot handle them. */ - if (s390_host_has_ldisp && ulong_fits_signed_20bit(value)) { + if (ulong_fits_signed_20bit(value)) { return s390_amode_b20((Int)value, s390_isel_int_expr(env, arg1)); } } diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c index 905b9eef4a..8f3372543c 100644 --- a/VEX/priv/main_main.c +++ b/VEX/priv/main_main.c @@ -1578,6 +1578,13 @@ static const HChar* show_hwcaps ( VexArch arch, UInt hwcaps ) static Bool are_valid_hwcaps ( VexArch arch, UInt hwcaps ) { + if (arch == VexArchS390X) { + if (! s390_host_has_ldisp) { + vpanic("Host does not have long displacement facility.\n" + " Cannot continue. Good-bye.\n"); + } + return True; + } return show_hwcaps(arch,hwcaps) != NULL; } -- 2.47.2