From: Florian K. <fk...@so...> - 2025-03-15 23:20:38
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=c3049684e26ee4300c797a11c9b88708223771f3 commit c3049684e26ee4300c797a11c9b88708223771f3 Author: Florian Krohm <fl...@ei...> Date: Sat Mar 15 23:18:59 2025 +0000 s390x: Rework s390_disasm interface (BZ 498942) The way extended mnemonics were communicated to s390_disasm was a bit messy and, more importantly, error prone. The primary reason is that extended mnemonics were added late in the game (at the time) and sort of force-fitted on top of the existing scheme. Here are a few examples showing the new way of doing things: old: s390_disasm(ENC3(MNM, GPR, UINT), mnm, r1, i2); new: S390_DISASM(MNM(mnm), GPR(r1), UINT(i2)); old: s390_disasm(ENC3(MNM, FPR, UDXB), mnm, r1, d2, x2, b2); new: S390_DISASM(MNM(mnm), FPR(r1), UDXB(d2, x2, b2)); The arguments to S390_DISASM are essentially constructors for the various opcode fields. They appear in the same order as written in Principles of Ops. old: s390_disasm(ENC4(XMNM, GPR, INT, CABM), S390_XMNM_CAB, mnm, m3, r1, i2, m3); new: S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), INT(i2), MASK(m3)); The 2nd argument to XMNM() is a function that constructs the extended mnemonic and writes the disassembed insn as appropriate. Fixes https://bugs.kde.org/show_bug.cgi?id=498942 Diff: --- NEWS | 1 + VEX/priv/guest_s390_toIR.c | 294 ++++++++-------- VEX/priv/host_s390_defs.c | 849 ++++++++++++++++++++++----------------------- VEX/priv/s390_disasm.c | 522 ++++++++++++++-------------- VEX/priv/s390_disasm.h | 126 ++++--- 5 files changed, 904 insertions(+), 888 deletions(-) diff --git a/NEWS b/NEWS index 4d4c7eec46..5ba2236a09 100644 --- a/NEWS +++ b/NEWS @@ -55,6 +55,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. even though it's generated by --gen-suppressions=yes 498422 s390x: Fix VLRL and VSTRL insns 498492 none/tests/amd64/lzcnt64 crashes on FreeBSD compiled with clang +498942 s390x: Rework s390_disasm interface 499183 FreeBSD: differences in avx-vmovq output 499212 mmap() with MAP_ALIGNED() returns unaligned pointer 501119 memcheck/tests/pointer-trace fails when run on NFS filesystem diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index b5816dd1f8..67633f1c91 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -2702,7 +2702,7 @@ s390_format_I(const HChar *(*irgen)(UChar i), const HChar *mnm = irgen(i); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(MNM, UINT), mnm, i); + S390_DISASM(MNM(mnm), UINT(i)); } static void @@ -2711,7 +2711,7 @@ s390_format_E(const HChar *(*irgen)(void)) const HChar *mnm = irgen(); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC1(MNM), mnm); + S390_DISASM(MNM(mnm)); } static void @@ -2728,7 +2728,7 @@ s390_format_RI_RU(const HChar *(*irgen)(UChar r1, UShort i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, UINT), mnm, r1, i2); + S390_DISASM(MNM(mnm), GPR(r1), UINT(i2)); } static void @@ -2738,7 +2738,7 @@ s390_format_RI_RI(const HChar *(*irgen)(UChar r1, UShort i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, INT), mnm, r1, (Int)(Short)i2); + S390_DISASM(MNM(mnm), GPR(r1), INT((Int)(Short)i2)); } static void @@ -2748,7 +2748,7 @@ s390_format_RI_RP(const HChar *(*irgen)(UChar r1, UShort i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, PCREL), mnm, r1, (Int)(Short)i2); + S390_DISASM(MNM(mnm), GPR(r1), PCREL((Int)(Short)i2)); } static void @@ -2758,7 +2758,7 @@ s390_format_RIE_RRP(const HChar *(*irgen)(UChar r1, UChar r3, UShort i2), const HChar *mnm = irgen(r1, r3, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, PCREL), mnm, r1, r3, (Int)(Short)i2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r3), PCREL((Int)(Short)i2)); } static void @@ -2768,7 +2768,7 @@ s390_format_RIE_RRI0(const HChar *(*irgen)(UChar r1, UChar r3, UShort i2), const HChar *mnm = irgen(r1, r3, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, INT), mnm, r1, r3, (Int)(Short)i2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r3), INT((Int)(Short)i2)); } static void @@ -2779,8 +2779,7 @@ s390_format_RIE_RRUUU(const HChar *(*irgen)(UChar r1, UChar r2, UChar i3, const HChar *mnm = irgen(r1, r2, i3, i4, i5); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC6(MNM, GPR, GPR, UINT, UINT, UINT), mnm, r1, r2, i3, i4, - i5); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2), UINT(i3), UINT(i4), UINT(i5)); } static void @@ -2790,8 +2789,7 @@ s390_format_R0UU(const HChar *(*irgen)(UChar r1, UShort i2, UChar m3), const HChar *mnm = irgen(r1, i2, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(XMNM, GPR, INT, CABM), S390_XMNM_CAB, mnm, m3, r1, - i2, m3); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), INT(i2), MASK(m3)); } static void @@ -2801,8 +2799,7 @@ s390_format_R0IU(const HChar *(*irgen)(UChar r1, UShort i2, UChar m3), const HChar *mnm = irgen(r1, i2, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(XMNM, GPR, INT, CABM), S390_XMNM_CAB, mnm, m3, r1, - (Int)(Short)i2, m3); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), INT((Int)(Short)i2), MASK(m3)); } static void @@ -2813,8 +2810,7 @@ s390_format_RIE_RRPU(const HChar *(*irgen)(UChar r1, UChar r2, UShort i4, const HChar *mnm = irgen(r1, r2, i4, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, GPR, CABM, PCREL), S390_XMNM_CAB, mnm, m3, r1, - r2, m3, (Int)(Short)i4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), GPR(r2), MASK(m3), PCREL((Int)(Short)i4)); } static void @@ -2825,8 +2821,7 @@ s390_format_RIE_RUPU(const HChar *(*irgen)(UChar r1, UChar m3, UShort i4, const HChar *mnm = irgen(r1, m3, i4, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, UINT, CABM, PCREL), S390_XMNM_CAB, mnm, m3, - r1, i2, m3, (Int)(Short)i4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), UINT(i2), MASK(m3), PCREL((Int)(Short)i4)); } static void @@ -2837,8 +2832,7 @@ s390_format_RIE_RUPI(const HChar *(*irgen)(UChar r1, UChar m3, UShort i4, const HChar *mnm = irgen(r1, m3, i4, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, INT, CABM, PCREL), S390_XMNM_CAB, mnm, m3, r1, - (Int)(Char)i2, m3, (Int)(Short)i4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), INT((Int)(Char)i2), MASK(m3), PCREL((Int)(Short)i4)); } static void @@ -2848,8 +2842,7 @@ s390_format_RIE_RUPIX(const HChar *(*irgen)(UChar r1, UChar m3, UShort i2), const HChar *mnm = irgen(r1, m3, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(XMNM, GPR, INT), S390_XMNM_CLS, mnm, m3, r1, - (Int)(Short)i2); + S390_DISASM(XMNM(mnm, cls_disasm), GPR(r1), INT((Int)(Short)i2), MASK(m3)); } static void @@ -2866,7 +2859,7 @@ s390_format_RIL_RU(const HChar *(*irgen)(UChar r1, UInt i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, UINT), mnm, r1, i2); + S390_DISASM(MNM(mnm), GPR(r1), UINT(i2)); } static void @@ -2876,7 +2869,7 @@ s390_format_RIL_RI(const HChar *(*irgen)(UChar r1, UInt i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, INT), mnm, r1, i2); + S390_DISASM(MNM(mnm), GPR(r1), INT(i2)); } static void @@ -2886,7 +2879,7 @@ s390_format_RIL_RP(const HChar *(*irgen)(UChar r1, UInt i2), const HChar *mnm = irgen(r1, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, PCREL), mnm, r1, i2); + S390_DISASM(MNM(mnm), GPR(r1), PCREL(i2)); } static void @@ -2896,7 +2889,7 @@ s390_format_RIL_UP(const HChar *(*irgen)(void), const HChar *mnm = irgen(); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UINT, PCREL), mnm, r1, i2); + S390_DISASM(MNM(mnm), UINT(r1), PCREL(i2)); } static void @@ -2913,8 +2906,7 @@ s390_format_RIS_RURDI(const HChar *(*irgen)(UChar r1, UChar m3, UChar i2, mnm = irgen(r1, m3, i2, op4addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, INT, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1, - (Int)(Char)i2, m3, d4, 0, b4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), INT((Int)(Char)i2), MASK(m3), UDXB(d4, 0, b4)); } static void @@ -2931,8 +2923,7 @@ s390_format_RIS_RURDU(const HChar *(*irgen)(UChar r1, UChar m3, UChar i2, mnm = irgen(r1, m3, i2, op4addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, UINT, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1, - i2, m3, d4, 0, b4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), UINT(i2), MASK(m3), UDXB(d4, 0, b4)); } static void @@ -2949,7 +2940,7 @@ s390_format_RR_RR(const HChar *(*irgen)(UChar r1, UChar r2), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2)); } static void @@ -2959,7 +2950,7 @@ s390_format_RR_FF(const HChar *(*irgen)(UChar r1, UChar r2), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, FPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r2)); } static void @@ -2976,7 +2967,7 @@ s390_format_RRE_RR(const HChar *(*irgen)(UChar r1, UChar r2), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2)); } static void @@ -2986,7 +2977,7 @@ s390_format_RRE_FF(const HChar *(*irgen)(UChar r1, UChar r2), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, FPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r2)); } static void @@ -2996,7 +2987,7 @@ s390_format_RRE_RF(const HChar *(*irgen)(UChar, UChar), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, FPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), GPR(r1), FPR(r2)); } static void @@ -3006,7 +2997,7 @@ s390_format_RRE_FR(const HChar *(*irgen)(UChar r1, UChar r2), const HChar *mnm = irgen(r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, GPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), FPR(r1), GPR(r2)); } static void @@ -3016,7 +3007,7 @@ s390_format_RRE_R0(const HChar *(*irgen)(UChar r1), const HChar *mnm = irgen(r1); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(MNM, GPR), mnm, r1); + S390_DISASM(MNM(mnm), GPR(r1)); } static void @@ -3026,7 +3017,7 @@ s390_format_RRE_F0(const HChar *(*irgen)(UChar r1), const HChar *mnm = irgen(r1); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(MNM, FPR), mnm, r1); + S390_DISASM(MNM(mnm), FPR(r1)); } static void @@ -3036,7 +3027,7 @@ s390_format_RRF_M0RERE(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), const HChar *mnm = irgen(m3, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, UINT), mnm, r1, r2, m3); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2), UINT(m3)); } static void @@ -3046,7 +3037,7 @@ s390_format_RRF_F0FF(const HChar *(*irgen)(UChar, UChar, UChar), const HChar *mnm = irgen(r1, r3, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, FPR, FPR, FPR), mnm, r1, r3, r2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), FPR(r2)); } static void @@ -3056,7 +3047,7 @@ s390_format_RRF_F0FR(const HChar *(*irgen)(UChar, UChar, UChar), const HChar *mnm = irgen(r3, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, FPR, FPR, GPR), mnm, r1, r3, r2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), GPR(r2)); } static void @@ -3067,7 +3058,7 @@ s390_format_RRF_UUFF(const HChar *(*irgen)(UChar m3, UChar m4, UChar r1, const HChar *mnm = irgen(m3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, FPR, UINT, FPR, UINT), mnm, r1, m3, r2, m4); + S390_DISASM(MNM(mnm), FPR(r1), UINT(m3), FPR(r2), UINT(m4)); } static void @@ -3077,7 +3068,7 @@ s390_format_RRF_0UFF(const HChar *(*irgen)(UChar m4, UChar r1, UChar r2), const HChar *mnm = irgen(m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, FPR, FPR, UINT), mnm, r1, r2, m4); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r2), UINT(m4)); } static void @@ -3088,7 +3079,7 @@ s390_format_RRF_UUFR(const HChar *(*irgen)(UChar m3, UChar m4, UChar r1, const HChar *mnm = irgen(m3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, FPR, UINT, GPR, UINT), mnm, r1, m3, r2, m4); + S390_DISASM(MNM(mnm), FPR(r1), UINT(m3), GPR(r2), UINT(m4)); } static void @@ -3099,18 +3090,18 @@ s390_format_RRF_UURF(const HChar *(*irgen)(UChar m3, UChar m4, UChar r1, const HChar *mnm = irgen(m3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, GPR, UINT, FPR, UINT), mnm, r1, m3, r2, m4); + S390_DISASM(MNM(mnm), GPR(r1), UINT(m3), FPR(r2), UINT(m4)); } static void s390_format_RRF_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), - UChar m3, UChar r1, UChar r2, Int xmnm_kind) + UChar m3, UChar r1, UChar r2, HChar *(*handler)(const s390_opnd *, HChar *)) { const HChar *mnm = irgen(m3, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(XMNM, GPR, GPR), xmnm_kind, mnm, m3, r1, r2); + S390_DISASM(XMNM(mnm, handler), GPR(r1), GPR(r2), MASK(m3)); } static void @@ -3121,9 +3112,9 @@ s390_format_RRFa_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) { if (m3 != 0) - s390_disasm(ENC4(MNM, GPR, GPR, UINT), mnm, r1, r2, m3); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2), UINT(m3)); else - s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2)); } } @@ -3134,7 +3125,7 @@ s390_format_RRF_F0FF2(const HChar *(*irgen)(UChar, UChar, UChar), const HChar *mnm = irgen(r3, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, FPR, FPR, FPR), mnm, r1, r3, r2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), FPR(r2)); } static void @@ -3144,7 +3135,7 @@ s390_format_RRF_FFRU(const HChar *(*irgen)(UChar, UChar, UChar, UChar), const HChar *mnm = irgen(r3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, FPR, FPR, GPR, UINT), mnm, r1, r3, r2, m4); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), GPR(r2), UINT(m4)); } static void @@ -3154,7 +3145,7 @@ s390_format_RRF_FUFF(const HChar *(*irgen)(UChar, UChar, UChar, UChar), const HChar *mnm = irgen(r3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, FPR, FPR, FPR, UINT), mnm, r1, r3, r2, m4); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), FPR(r2), UINT(m4)); } static void @@ -3164,7 +3155,7 @@ s390_format_RRF_FUFF2(const HChar *(*irgen)(UChar, UChar, UChar, UChar), const HChar *mnm = irgen(r3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, FPR, FPR, FPR, UINT), mnm, r1, r2, r3, m4); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r2), FPR(r3), UINT(m4)); } static void @@ -3174,7 +3165,7 @@ s390_format_RRF_RURR(const HChar *(*irgen)(UChar, UChar, UChar, UChar), const HChar *mnm = irgen(r3, m4, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(XMNM, GPR, GPR, GPR), S390_XMNM_CLS, mnm, m4, r1, r2, r3); + S390_DISASM(XMNM(mnm, cls_disasm), GPR(r1), GPR(r2), GPR(r3), MASK(m4)); } static void @@ -3184,7 +3175,7 @@ s390_format_RRF_R0RR2(const HChar *(*irgen)(UChar r3, UChar r1, UChar r2), const HChar *mnm = irgen(r3, r1, r2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, GPR), mnm, r1, r2, r3); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r2), GPR(r3)); } static void @@ -3201,8 +3192,7 @@ s390_format_RRS(const HChar *(*irgen)(UChar r1, UChar r2, UChar m3, mnm = irgen(r1, r2, m3, op4addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(XMNM, GPR, GPR, CABM, UDXB), S390_XMNM_CAB, mnm, m3, r1, - r2, m3, d4, 0, b4); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), GPR(r2), MASK(m3), UDXB(d4, 0, b4)); } static void @@ -3218,7 +3208,7 @@ s390_format_RS_R0RD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), mnm = irgen(r1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, UDXB), mnm, r1, d2, 0, b2); + S390_DISASM(MNM(mnm), GPR(r1), UDXB(d2, 0, b2)); } static void @@ -3234,7 +3224,7 @@ s390_format_RS_RRRD(const HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr), mnm = irgen(r1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, UDXB), mnm, r1, r3, d2, 0, b2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r3), UDXB(d2, 0, b2)); } static void @@ -3250,7 +3240,7 @@ s390_format_RS_RURD(const HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr), mnm = irgen(r1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, UINT, UDXB), mnm, r1, r3, d2, 0, b2); + S390_DISASM(MNM(mnm), GPR(r1), UINT(r3), UDXB(d2, 0, b2)); } static void @@ -3266,7 +3256,7 @@ s390_format_RS_AARD(const HChar *(*irgen)(UChar, UChar, IRTemp), mnm = irgen(r1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, AR, AR, UDXB), mnm, r1, r3, d2, 0, b2); + S390_DISASM(MNM(mnm), AR(r1), AR(r3), UDXB(d2, 0, b2)); } static void @@ -3276,7 +3266,7 @@ s390_format_RSI_RRP(const HChar *(*irgen)(UChar r1, UChar r3, UShort i2), const HChar *mnm = irgen(r1, r3, i2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, PCREL), mnm, r1, r3, (Int)(Short)i2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r3), PCREL((Int)(Short)i2)); } static void @@ -3294,7 +3284,7 @@ s390_format_RSY_RRRD(const HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr), mnm = irgen(r1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, GPR, SDXB), mnm, r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM(mnm), GPR(r1), GPR(r3), SDXB(dh2, dl2, 0, b2)); } static void @@ -3312,12 +3302,12 @@ s390_format_RSY_AARD(const HChar *(*irgen)(UChar, UChar, IRTemp), mnm = irgen(r1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, AR, AR, SDXB), mnm, r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM(mnm), AR(r1), AR(r3), SDXB(dh2, dl2, 0, b2)); } static void -s390_format_RSY_RURD(const HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr), - UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) +s390_format_RSY_RURD(const HChar *(*irgen)(UChar r1, UChar m3, IRTemp op2addr), + UChar r1, UChar m3, UChar b2, UShort dl2, UChar dh2) { const HChar *mnm; IRTemp op2addr = newTemp(Ity_I64); @@ -3327,10 +3317,10 @@ s390_format_RSY_RURD(const HChar *(*irgen)(UChar r1, UChar r3, IRTemp op2addr), assign(op2addr, binop(Iop_Add64, mkexpr(d2), b2 != 0 ? get_gpr_dw0(b2) : mkU64(0))); - mnm = irgen(r1, r3, op2addr); + mnm = irgen(r1, m3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, GPR, UINT, SDXB), mnm, r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM(mnm), GPR(r1), UINT(m3), SDXB(dh2, dl2, 0, b2)); } static void @@ -3348,8 +3338,7 @@ s390_format_RSY_R0RD(const HChar *(*irgen)(UChar r1, UChar m3, IRTemp op2addr), mnm = irgen(r1, m3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(XMNM, GPR, CABM, SDXB), S390_XMNM_CAB, mnm, m3, r1, m3, - dh2, dl2, 0, b2); + S390_DISASM(XMNM(mnm, cabt_disasm), GPR(r1), MASK(m3), SDXB(dh2, dl2, 0, b2)); } static void @@ -3370,8 +3359,7 @@ s390_format_RSY_RDRM(const HChar *(*irgen)(UChar r1, IRTemp op2addr), vassert(dis_res->whatNext == Dis_Continue); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(XMNM, GPR, SDXB), S390_XMNM_CLS, mnm, m3, r1, - dh2, dl2, 0, b2); + S390_DISASM(XMNM(mnm, cls_disasm), GPR(r1), SDXB(dh2, dl2, 0, b2), MASK(m3)); } static void @@ -3402,7 +3390,7 @@ s390_format_RX_RRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), mnm = irgen(r1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, UDXB), mnm, r1, d2, x2, b2); + S390_DISASM(MNM(mnm), GPR(r1), UDXB(d2, x2, b2)); } static void @@ -3419,7 +3407,7 @@ s390_format_RX_FRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), mnm = irgen(r1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, UDXB), mnm, r1, d2, x2, b2); + S390_DISASM(MNM(mnm), FPR(r1), UDXB(d2, x2, b2)); } static void @@ -3436,7 +3424,7 @@ s390_format_RXE_FRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), mnm = irgen(r1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, UDXB), mnm, r1, d2, x2, b2); + S390_DISASM(MNM(mnm), FPR(r1), UDXB(d2, x2, b2)); } static void @@ -3453,7 +3441,7 @@ s390_format_RXE_RRRDR(const HChar *(*irgen)(UChar r1, IRTemp op2addr, UChar m3), mnm = irgen(r1, op2addr, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, UDXB), mnm, r1, d2, x2, b2); + S390_DISASM(MNM(mnm), GPR(r1), UDXB(d2, x2, b2)); } static void @@ -3470,7 +3458,7 @@ s390_format_RXF_FRRDF(const HChar *(*irgen)(UChar, IRTemp, UChar), mnm = irgen(r3, op2addr, r1); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, FPR, FPR, UDXB), mnm, r1, r3, d2, x2, b2); + S390_DISASM(MNM(mnm), FPR(r1), FPR(r3), UDXB(d2, x2, b2)); } static void @@ -3490,9 +3478,9 @@ s390_format_RXY_RRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) { if (irgen == s390_irgen_BIC) - s390_disasm(ENC2(XMNM, SDXB), S390_XMNM_BIC, r1, dh2, dl2, x2, b2); + S390_DISASM(XMNM(mnm, bic_disasm), MASK(r1), SDXB(dh2, dl2, x2, b2)); else - s390_disasm(ENC3(MNM, GPR, SDXB), mnm, r1, dh2, dl2, x2, b2); + S390_DISASM(MNM(mnm), GPR(r1), SDXB(dh2, dl2, x2, b2)); } } @@ -3512,7 +3500,7 @@ s390_format_RXY_FRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), mnm = irgen(r1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, FPR, SDXB), mnm, r1, dh2, dl2, x2, b2); + S390_DISASM(MNM(mnm), FPR(r1), SDXB(dh2, dl2, x2, b2)); } static void @@ -3531,7 +3519,7 @@ s390_format_RXY_URRD(const HChar *(*irgen)(void), mnm = irgen(); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UINT, SDXB), mnm, r1, dh2, dl2, x2, b2); + S390_DISASM(MNM(mnm), UINT(r1), SDXB(dh2, dl2, x2, b2)); } static void @@ -3547,7 +3535,7 @@ s390_format_S_RD(const HChar *(*irgen)(IRTemp op2addr), mnm = irgen(op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(MNM, UDXB), mnm, d2, 0, b2); + S390_DISASM(MNM(mnm), UDXB(d2, 0, b2)); } static void @@ -3559,7 +3547,7 @@ s390_format_S_RD_raw(const HChar *(*irgen)(UChar b2, UShort d2), mnm = irgen(b2, d2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(MNM, UDXB), mnm, d2, 0, b2); + S390_DISASM(MNM(mnm), UDXB(d2, 0, b2)); } static void @@ -3575,7 +3563,7 @@ s390_format_SI_URD(const HChar *(*irgen)(UChar i2, IRTemp op1addr), mnm = irgen(i2, op1addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UDXB, UINT), mnm, d1, 0, b1, i2); + S390_DISASM(MNM(mnm), UDXB(d1, 0, b1), UINT(i2)); } static void @@ -3593,7 +3581,7 @@ s390_format_SIY_URD(const HChar *(*irgen)(UChar i2, IRTemp op1addr), mnm = irgen(i2, op1addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, SDXB, UINT), mnm, dh1, dl1, 0, b1, i2); + S390_DISASM(MNM(mnm), SDXB(dh1, dl1, 0, b1), UINT(i2)); } static void @@ -3611,7 +3599,7 @@ s390_format_SIY_IRD(const HChar *(*irgen)(UChar i2, IRTemp op1addr), mnm = irgen(i2, op1addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, SDXB, INT), mnm, dh1, dl1, 0, b1, (Int)(Char)i2); + S390_DISASM(MNM(mnm), SDXB(dh1, dl1, 0, b1), INT((Int)(Char)i2)); } static void @@ -3630,7 +3618,7 @@ s390_format_SS_L0RDRD(const HChar *(*irgen)(UChar, IRTemp, IRTemp), mnm = irgen(l, op1addr, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UDLB, UDXB), mnm, d1, l, b1, d2, 0, b2); + S390_DISASM(MNM(mnm), UDLB(d1, l, b1), UDXB(d2, 0, b2)); } static void @@ -3649,7 +3637,7 @@ s390_format_SSE_RDRD(const HChar *(*irgen)(IRTemp, IRTemp), mnm = irgen(op1addr, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(UDXB, UDXB), mnm, d1, 0, b1, d2, 0, b2); + S390_DISASM(MNM(mnm), UDXB(d1, 0, b1), UDXB(d2, 0, b2)); } static void @@ -3665,7 +3653,7 @@ s390_format_SIL_RDI(const HChar *(*irgen)(UShort i2, IRTemp op1addr), mnm = irgen(i2, op1addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UDXB, INT), mnm, d1, 0, b1, (Int)(Short)i2); + S390_DISASM(MNM(mnm), UDXB(d1, 0, b1), INT((Int)(Short)i2)); } static void @@ -3681,7 +3669,7 @@ s390_format_SIL_RDU(const HChar *(*irgen)(UShort i2, IRTemp op1addr), mnm = irgen(i2, op1addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UDXB, UINT), mnm, d1, 0, b1, i2); + S390_DISASM(MNM(mnm), UDXB(d1, 0, b1), UINT(i2)); } static void @@ -3704,7 +3692,7 @@ s390_format_VRX_VRRD(const HChar *(*irgen)(UChar v1, IRTemp op2addr), mnm = irgen(v1, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, VR, UDXB), mnm, v1, d2, x2, b2); + S390_DISASM(MNM(mnm), VR(v1), UDXB(d2, x2, b2)); } @@ -3728,7 +3716,7 @@ s390_format_VRX_VRRDM(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar m3), mnm = irgen(v1, op2addr, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, VR, UDXB), mnm, v1, d2, x2, b2); + S390_DISASM(MNM(mnm), VR(v1), UDXB(d2, x2, b2)); } @@ -3748,7 +3736,7 @@ s390_format_VRR_VV(const HChar *(*irgen)(UChar v1, UChar v2), mnm = irgen(v1, v2); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, VR, VR), mnm, v1, v2); + S390_DISASM(MNM(mnm), VR(v1), VR(v2)); } @@ -3769,10 +3757,12 @@ s390_format_VRR_VVV(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3), mnm = irgen(v1, v2, v3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, VR, VR), mnm, v1, v2, v3); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3)); } +// FIXME: VPDI uses this format but does not have extended mnemonics +// FIXME: all other opcodes have extended mnms static void s390_format_VRR_VVVM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, UChar m4), UChar v1, UChar v2, UChar v3, UChar m4, UChar rxb) @@ -3790,7 +3780,7 @@ s390_format_VRR_VVVM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, UChar m mnm = irgen(v1, v2, v3, m4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, VR, VR, UINT), mnm, v1, v2, v3, m4); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(m4)); } @@ -3811,7 +3801,7 @@ s390_format_VRR_VVVMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, UChar mnm = irgen(v1, v2, v3, m4, m5); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC6(MNM, VR, VR, VR, UINT, UINT), mnm, v1, v2, v3, m4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(m4), UINT(m5)); } @@ -3833,7 +3823,7 @@ s390_format_VRR_VVVV(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, UChar v mnm = irgen(v1, v2, v3, v4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, VR, VR, VR), mnm, v1, v2, v3, v4); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), VR(v4)); } @@ -3852,7 +3842,7 @@ s390_format_VRR_VRR(const HChar *(*irgen)(UChar v1, UChar r2, UChar r3), mnm = irgen(v1, r2, r3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, GPR, GPR), mnm, v1, r2, r3); + S390_DISASM(MNM(mnm), VR(v1), GPR(r2), GPR(r3)); } @@ -3872,7 +3862,7 @@ s390_format_VRR_VVM(const HChar *(*irgen)(UChar v1, UChar v2, UChar m3), mnm = irgen(v1, v2, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, VR, UINT), mnm, v1, v2, m3); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), UINT(m3)); } @@ -3891,7 +3881,7 @@ s390_format_VRI_VIM(const HChar *(*irgen)(UChar v1, UShort i2, UChar m3), mnm = irgen(v1, i2, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, UINT, UINT), mnm, v1, i2, m3); + S390_DISASM(MNM(mnm), VR(v1), UINT(i2), UINT(m3)); } @@ -3911,7 +3901,7 @@ s390_format_VRI_VVIM(const HChar *(*irgen)(UChar v1, UChar v3, UShort i2, UChar mnm = irgen(v1, v3, i2, m4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), mnm, v1, v3, i2, m4); + S390_DISASM(MNM(mnm), VR(v1), VR(v3), UINT(i2), UINT(m4)); } static void @@ -3932,7 +3922,7 @@ s390_format_VRI_VVIMM(const HChar *(*irgen)(UChar v1, UChar v2, UShort i3, mnm = irgen(v1, v2, i3, m4, m5); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC6(MNM, VR, VR, UINT, UINT, UINT), mnm, v1, v2, i3, m4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), UINT(i3), UINT(m4), UINT(m5)); } static void @@ -3955,7 +3945,7 @@ s390_format_VRS_RRDVM(const HChar *(*irgen)(UChar r1, IRTemp op2addr, UChar v3, mnm = irgen(r1, op2addr, v3, m4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, GPR, UDXB, VR, UINT), mnm, r1, d2, 0, b2, v3, m4); + S390_DISASM(MNM(mnm), GPR(r1), UDXB(d2, 0, b2), VR(v3), UINT(m4)); } static void @@ -3977,7 +3967,7 @@ s390_format_VRS_RRDV(const HChar *(*irgen)(UChar v1, UChar r3, IRTemp op2addr), mnm = irgen(v1, r3, op2addr); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, GPR, UDXB), mnm, v1, r3, d2, 0, b2); + S390_DISASM(MNM(mnm), VR(v1), GPR(r3), UDXB(d2, 0, b2)); } @@ -4002,7 +3992,7 @@ s390_format_VRS_VRDVM(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar v3, mnm = irgen(v1, op2addr, v3, m4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, UDXB, VR, UINT), mnm, v1, d2, 0, b2, v3, m4); + S390_DISASM(MNM(mnm), VR(v1), UDXB(d2, 0, b2), VR(v3), UINT(m4)); } @@ -4026,7 +4016,7 @@ s390_format_VRS_VRDV(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar v3), mnm = irgen(v1, op2addr, v3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, UDXB, VR), mnm, v1, d2, 0, b2, v3); + S390_DISASM(MNM(mnm), VR(v1), UDXB(d2, 0, b2), VR(v3)); } @@ -4050,7 +4040,7 @@ s390_format_VRS_VRRDM(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar r3, mnm = irgen(v1, op2addr, r3, m4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, GPR, UDXB, UINT), mnm, v1, r3, d2, 0, b2, m4); + S390_DISASM(MNM(mnm), VR(v1), GPR(r3), UDXB(d2, 0, b2), UINT(m4)); } @@ -4073,7 +4063,7 @@ s390_format_VRS_VRRD(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar r3), mnm = irgen(v1, op2addr, r3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, GPR, UDXB), mnm, v1, r3, d2, 0, b2); + S390_DISASM(MNM(mnm), VR(v1), GPR(r3), UDXB(d2, 0, b2)); } @@ -4107,7 +4097,7 @@ s390_format_VRV_VVRDMT(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar m3) mnm = irgen(v1, op2addr, m3); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC4(MNM, VR, UDVB, UINT), mnm, v1, d2, v2, b2, m3); + S390_DISASM(MNM(mnm), VR(v1), UDVB(d2, v2, b2), UINT(m3)); } @@ -4131,8 +4121,7 @@ s390_format_VRR_VVVVMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, v4, m5, m6); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC7(MNM, VR, VR, VR, VR, UINT, UINT), - mnm, v1, v2, v3, v4, m5, m6); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), VR(v4), UINT(m5), UINT(m6)); } @@ -4153,7 +4142,7 @@ s390_format_VRR_VVMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar m3, mnm = irgen(v1, v2, m3, m5); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), mnm, v1, v2, m3, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), UINT(m3), UINT(m5)); } @@ -4176,7 +4165,7 @@ s390_format_VRId_VVVIM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, i4, m5); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC6(MNM, VR, VR, VR, UINT, UINT), mnm, v1, v2, v3, i4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(i4), UINT(m5)); } @@ -4198,7 +4187,7 @@ s390_format_VRId_VVVI(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, i4); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC5(MNM, VR, VR, VR, UINT), mnm, v1, v2, v3, i4); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(i4)); } @@ -4222,7 +4211,7 @@ s390_format_VRRd_VVVVM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, v4, m5); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC6(MNM, VR, VR, VR, VR, UINT), mnm, v1, v2, v3, v4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), VR(v4), UINT(m5)); } @@ -4244,7 +4233,7 @@ s390_format_VRRa_VVMMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar m3, mnm = irgen(v1, v2, m3, m4, m5); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC6(MNM, VR, VR, UINT, UINT, UINT), mnm, v1, v2, m3, m4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), UINT(m3), UINT(m4), UINT(m5)); } static void @@ -4266,7 +4255,7 @@ s390_format_VRRa_VVVMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, m4, m5); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC6(MNM, VR, VR, VR, UINT, UINT), mnm, v1, v2, v3, m4, m5); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(m4), UINT(m5)); } static void @@ -4286,7 +4275,7 @@ s390_format_VRRa_VVMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar m3, mnm = irgen(v1, v2, m3, m4); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), mnm, v1, v2, m3, m4); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), UINT(m3), UINT(m4)); } static void @@ -4308,8 +4297,7 @@ s390_format_VRRa_VVVMMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, mnm = irgen(v1, v2, v3, m4, m5, m6); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC6(MNM, VR, VR, VR, UINT, UINT), - mnm, v1, v2, v3, m4, m5, m6); + S390_DISASM(MNM(mnm), VR(v1), VR(v2), VR(v3), UINT(m4), UINT(m5), UINT(m6)); } static void @@ -4332,7 +4320,7 @@ s390_format_VSI_URDV(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar i3), mnm = irgen(v1, op2addr, i3); if (vex_traceflags & VEX_TRACE_FE) - s390_disasm(ENC4(MNM, VR, UDXB, UINT), mnm, v1, d2, 0, b2, i3); + S390_DISASM(MNM(mnm), VR(v1), UDXB(d2, 0, b2), UINT(i3)); } /*------------------------------------------------------------*/ @@ -5424,47 +5412,47 @@ s390_irgen_BAS(UChar r1, IRTemp op2addr) } static const HChar * -s390_irgen_BCR(UChar r1, UChar r2) +s390_irgen_BCR(UChar m1, UChar r2) { IRTemp cond = newTemp(Ity_I32); - if (r2 == 0 && (r1 >= 14)) { /* serialization */ + if (r2 == 0 && (m1 >= 14)) { /* serialization */ stmt(IRStmt_MBE(Imbe_Fence)); } - if ((r2 == 0) || (r1 == 0)) { + if ((r2 == 0) || (m1 == 0)) { } else { - if (r1 == 15) { + if (m1 == 15) { return_from_function(get_gpr_dw0(r2)); } else { - assign(cond, s390_call_calculate_cond(r1)); + assign(cond, s390_call_calculate_cond(m1)); if_condition_goto_computed(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), get_gpr_dw0(r2)); } } if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(XMNM, GPR), S390_XMNM_BCR, r1, r2); + S390_DISASM(XMNM("bcr", bcr_disasm), MASK(m1), GPR(r2)); return "bcr"; } static const HChar * -s390_irgen_BC(UChar r1, UChar x2, UChar b2, UShort d2, IRTemp op2addr) +s390_irgen_BC(UChar m1, UChar x2, UChar b2, UShort d2, IRTemp op2addr) { IRTemp cond = newTemp(Ity_I32); - if (r1 == 0) { + if (m1 == 0) { } else { - if (r1 == 15) { + if (m1 == 15) { always_goto(mkexpr(op2addr)); } else { - assign(cond, s390_call_calculate_cond(r1)); + assign(cond, s390_call_calculate_cond(m1)); if_condition_goto_computed(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), mkexpr(op2addr)); } } if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(XMNM, UDXB), S390_XMNM_BC, r1, d2, x2, b2); + S390_DISASM(XMNM("bc", bc_disasm), MASK(m1), UDXB(d2, x2, b2)); return "bc"; } @@ -5602,44 +5590,44 @@ s390_irgen_BRASL(UChar r1, UInt i2) } static const HChar * -s390_irgen_BRC(UChar r1, UShort i2) +s390_irgen_BRC(UChar m1, UShort i2) { IRTemp cond = newTemp(Ity_I32); - if (r1 == 0) { + if (m1 == 0) { } else { - if (r1 == 15) { + if (m1 == 15) { always_goto_and_chase(addr_relative(i2)); } else { - assign(cond, s390_call_calculate_cond(r1)); + assign(cond, s390_call_calculate_cond(m1)); if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), addr_relative(i2)); } } if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRC, r1, (Int)(Short)i2); + S390_DISASM(XMNM("brc", brc_disasm), MASK(m1), PCREL((Int)(Short)i2)); return "brc"; } static const HChar * -s390_irgen_BRCL(UChar r1, UInt i2) +s390_irgen_BRCL(UChar m1, UInt i2) { IRTemp cond = newTemp(Ity_I32); - if (r1 == 0) { + if (m1 == 0) { } else { - if (r1 == 15) { + if (m1 == 15) { always_goto_and_chase(addr_rel_long(i2)); } else { - assign(cond, s390_call_calculate_cond(r1)); + assign(cond, s390_call_calculate_cond(m1)); if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), addr_rel_long(i2)); } } if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRCL, r1, i2); + S390_DISASM(XMNM("brcl", brcl_disasm), MASK(m1), PCREL(i2)); return "brcl"; } @@ -7170,7 +7158,7 @@ s390_irgen_CPYA(UChar r1, UChar r2) { put_ar_w0(r1, get_ar_w0(r2)); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, AR, AR), "cpya", r1, r2); + S390_DISASM(MNM("cpya"), AR(r1), AR(r2)); return "cpya"; } @@ -7356,7 +7344,7 @@ s390_irgen_EAR(UChar r1, UChar r2) { put_gpr_w1(r1, get_ar_w0(r2)); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, GPR, AR), "ear", r1, r2); + S390_DISASM(MNM("ear"), GPR(r1), AR(r2)); return "ear"; } @@ -7658,7 +7646,7 @@ s390_irgen_LARL(UChar r1, UInt i2) return "larl"; } -/* The IR representation of LAA and friends is an approximation of what +/* The IR representation of LAA and friends is an approximation of what happens natively. Essentially a loop containing a compare-and-swap is constructed which will iterate until the CAS succeeds. As a consequence, instrumenters may see more memory accesses than happen natively. See also @@ -9826,7 +9814,7 @@ s390_irgen_SAR(UChar r1, UChar r2) { put_ar_w0(r1, get_gpr_w1(r2)); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, AR, GPR), "sar", r1, r2); + S390_DISASM(MNM("sar"), AR(r1), GPR(r2)); return "sar"; } @@ -13726,7 +13714,7 @@ s390_irgen_XC_sameloc(UChar length, UChar b, UShort d) s390_cc_set_val(0); if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) - s390_disasm(ENC3(MNM, UDLB, UDXB), "xc", d, length, b, d, 0, b); + S390_DISASM(MNM("xc"), UDLB(d, length, b), UDXB(d, 0, b)); } static const HChar * @@ -20988,10 +20976,10 @@ s390_decode_4byte_and_irgen(const UChar *bytes) RRF2_r2(ovl)); goto ok; case 0xb960: s390_format_RRF_U0RR(s390_irgen_CGRT, RRF2_m3(ovl), RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; + cabt_disasm); goto ok; case 0xb961: s390_format_RRF_U0RR(s390_irgen_CLGRT, RRF2_m3(ovl), RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; + cabt_disasm); goto ok; case 0xb964: s390_format_RRF_R0RR2(s390_irgen_NNGRK, RRF4_r3(ovl), RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; case 0xb965: s390_format_RRF_R0RR2(s390_irgen_OCGRK, RRF4_r3(ovl), @@ -21006,10 +20994,10 @@ s390_decode_4byte_and_irgen(const UChar *bytes) case 0xb96d: /* BDEPG */ goto unimplemented; case 0xb972: s390_format_RRF_U0RR(s390_irgen_CRT, RRF2_m3(ovl), RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; + cabt_disasm); goto ok; case 0xb973: s390_format_RRF_U0RR(s390_irgen_CLRT, RRF2_m3(ovl), RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; + cabt_disasm); goto ok; case 0xb974: s390_format_RRF_R0RR2(s390_irgen_NNRK, RRF4_r3(ovl), RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; case 0xb975: s390_format_RRF_R0RR2(s390_irgen_OCRK, RRF4_r3(ovl), @@ -21124,12 +21112,12 @@ s390_decode_4byte_and_irgen(const UChar *bytes) RRE_r2(ovl)); goto ok; case 0xb9e0: s390_format_RRF_U0RR(s390_irgen_LOCFHR, RRF3_r3(ovl), RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_CLS); goto ok; + cls_disasm); goto ok; case 0xb9e1: s390_format_RRFa_U0RR(s390_irgen_POPCNT, RRF3_r3(ovl), RRF3_r1(ovl), RRF3_r2(ovl)); goto ok; case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, RRF3_r3(ovl), RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_CLS); goto ok; + cls_disasm); goto ok; case 0xb9e3: s390_format_RRF_RURR(s390_irgen_SELGR, RRF4_r3(ovl), RRF4_m4(ovl), RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; @@ -21168,7 +21156,7 @@ s390_decode_4byte_and_irgen(const UChar *bytes) RRF4_r2(ovl)); goto ok; case 0xb9f2: s390_format_RRF_U0RR(s390_irgen_LOCR, RRF3_r3(ovl), RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_CLS); goto ok; + cls_disasm); goto ok; case 0xb9f4: s390_format_RRF_R0RR2(s390_irgen_NRK, RRF4_r3(ovl), RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 583f116c3c..f78abd8fea 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -1995,7 +1995,7 @@ static UChar * s390_emit_AR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "ar", r1, r2); + S390_DISASM(MNM("ar"), GPR(r1), GPR(r2)); return emit_RR(p, 0x1a00, r1, r2); } @@ -2005,7 +2005,7 @@ static UChar * s390_emit_AGR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "agr", r1, r2); + S390_DISASM(MNM("agr"), GPR(r1), GPR(r2)); return emit_RRE(p, 0xb9080000, r1, r2); } @@ -2015,7 +2015,7 @@ static UChar * s390_emit_A(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UDXB), "a", r1, d2, x2, b2); + S390_DISASM(MNM("a"), GPR(r1), UDXB(d2, x2, b2)); return emit_RX(p, 0x5a000000, r1, x2, b2, d2); } @@ -2025,7 +2025,7 @@ static UChar * s390_emit_AY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "ay", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("ay"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe3000000005aULL, r1, x2, b2, dl2, dh2); } @@ -2035,7 +2035,7 @@ static UChar * s390_emit_AG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "ag", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("ag"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe30000000008ULL, r1, x2, b2, dl2, dh2); } @@ -2047,7 +2047,7 @@ s390_emit_AFI(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "afi", r1, i2); + S390_DISASM(MNM("afi"), GPR(r1), INT(i2)); return emit_RIL(p, 0xc20900000000ULL, r1, i2); } @@ -2059,7 +2059,7 @@ s390_emit_AGFI(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "agfi", r1, i2); + S390_DISASM(MNM("agfi"), GPR(r1), INT(i2)); return emit_RIL(p, 0xc20800000000ULL, r1, i2); } @@ -2069,7 +2069,7 @@ static UChar * s390_emit_AH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UDXB), "ah", r1, d2, x2, b2); + S390_DISASM(MNM("ah"), GPR(r1), UDXB(d2, x2, b2)); return emit_RX(p, 0x4a000000, r1, x2, b2, d2); } @@ -2079,7 +2079,7 @@ static UChar * s390_emit_AHY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "ahy", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("ahy"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe3000000007aULL, r1, x2, b2, dl2, dh2); } @@ -2089,7 +2089,7 @@ static UChar * s390_emit_AHI(UChar *p, UChar r1, UShort i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "ahi", r1, (Int)(Short)i2); + S390_DISASM(MNM("ahi"), GPR(r1), INT((Int)(Short)i2)); return emit_RI(p, 0xa70a0000, r1, i2); } @@ -2099,7 +2099,7 @@ static UChar * s390_emit_AGHI(UChar *p, UChar r1, UShort i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "aghi", r1, (Int)(Short)i2); + S390_DISASM(MNM("aghi"), GPR(r1), INT((Int)(Short)i2)); return emit_RI(p, 0xa70b0000, r1, i2); } @@ -2111,7 +2111,7 @@ s390_emit_AGSI(UChar *p, UChar i2, UChar b1, UShort dl1, UChar dh1) vassert(s390_host_has_gie); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, SDXB, INT), "agsi", dh1, dl1, 0, b1, (Int)(Char)i2); + S390_DISASM(MNM("agsi"), SDXB(dh1, dl1, 0, b1), INT((Int)(Char)i2)); return emit_SIY(p, 0xeb000000007aULL, i2, b1, dl1, dh1); } @@ -2123,7 +2123,7 @@ s390_emit_ASI(UChar *p, UChar i2, UChar b1, UShort dl1, UChar dh1) vassert(s390_host_has_gie); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, SDXB, INT), "asi", dh1, dl1, 0, b1, (Int)(Char)i2); + S390_DISASM(MNM("asi"), SDXB(dh1, dl1, 0, b1), INT((Int)(Char)i2)); return emit_SIY(p, 0xeb000000006aULL, i2, b1, dl1, dh1); } @@ -2133,7 +2133,7 @@ static UChar * s390_emit_NR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "nr", r1, r2); + S390_DISASM(MNM("nr"), GPR(r1), GPR(r2)); return emit_RR(p, 0x1400, r1, r2); } @@ -2143,7 +2143,7 @@ static UChar * s390_emit_NGR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "ngr", r1, r2); + S390_DISASM(MNM("ngr"), GPR(r1), GPR(r2)); return emit_RRE(p, 0xb9800000, r1, r2); } @@ -2153,7 +2153,7 @@ static UChar * s390_emit_N(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UDXB), "n", r1, d2, x2, b2); + S390_DISASM(MNM("n"), GPR(r1), UDXB(d2, x2, b2)); return emit_RX(p, 0x54000000, r1, x2, b2, d2); } @@ -2163,7 +2163,7 @@ static UChar * s390_emit_NY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "ny", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("ny"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe30000000054ULL, r1, x2, b2, dl2, dh2); } @@ -2173,7 +2173,7 @@ static UChar * s390_emit_NG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "ng", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("ng"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe30000000080ULL, r1, x2, b2, dl2, dh2); } @@ -2185,7 +2185,7 @@ s390_emit_NIHF(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UINT), "nihf", r1, i2); + S390_DISASM(MNM("nihf"), GPR(r1), UINT(i2)); return emit_RIL(p, 0xc00a00000000ULL, r1, i2); } @@ -2197,7 +2197,7 @@ s390_emit_NILF(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UINT), "nilf", r1, i2); + S390_DISASM(MNM("nilf"), GPR(r1), UINT(i2)); return emit_RIL(p, 0xc00b00000000ULL, r1, i2); } @@ -2207,7 +2207,7 @@ static UChar * s390_emit_NILL(UChar *p, UChar r1, UShort i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UINT), "nill", r1, i2); + S390_DISASM(MNM("nill"), GPR(r1), UINT(i2)); return emit_RI(p, 0xa5070000, r1, i2); } @@ -2217,7 +2217,7 @@ static UChar * s390_emit_TM(UChar *p, UChar i2, UChar b1, UShort d1) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, UDXB, INT), "tm", d1, 0, b1, i2); + S390_DISASM(MNM("tm"), UDXB(d1, 0, b1), UINT(i2)); return emit_SI(p, 0x91000000, i2, b1, d1); } @@ -2227,7 +2227,7 @@ static UChar * s390_emit_TMY(UChar *p, UChar i2, UChar b1, UShort dl1, UChar dh1) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, SDXB, INT), "tmy", dh1, dl1, 0, b1, (Int)(Char)i2); + S390_DISASM(MNM("tmy"), SDXB(dh1, dl1, 0, b1), UINT(i2)); return emit_SIY(p, 0xeb0000000051ULL, i2, b1, dl1, dh1); } @@ -2237,7 +2237,7 @@ static UChar * s390_emit_TMLL(UChar *p, UChar r1, UShort i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UINT), "tmll", r1, i2); + S390_DISASM(MNM("tmll"), GPR(r1), UINT(i2)); return emit_RI(p, 0xa7010000, r1, i2); } @@ -2247,39 +2247,39 @@ static UChar * s390_emit_BASR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "basr", r1, r2); + S390_DISASM(MNM("basr"), GPR(r1), GPR(r2)); return emit_RR(p, 0x0d00, r1, r2); } static UChar * -s390_emit_BCR(UChar *p, UChar r1, UChar r2) +s390_emit_BCR(UChar *p, UChar m1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC2(XMNM, GPR), S390_XMNM_BCR, r1, r2); + S390_DISASM(XMNM("bcr", bcr_disasm), MASK(m1), GPR(r2)); - return emit_RR(p, 0x0700, r1, r2); + return emit_RR(p, 0x0700, m1, r2); } static UChar * -s390_emit_BRC(UChar *p, UChar r1, UShort i2) +s390_emit_BRC(UChar *p, UChar m1, UShort i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRC, r1, (Int)(Short)i2); + S390_DISASM(XMNM("brc", brc_disasm), MASK(m1), PCREL((Int)(Short)i2)); - return emit_RI(p, 0xa7040000, r1, i2); + return emit_RI(p, 0xa7040000, m1, i2); } static UChar * -s390_emit_BRCL(UChar *p, UChar r1, ULong i2) +s390_emit_BRCL(UChar *p, UChar m1, ULong i2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC2(XMNM, PCREL), S390_XMNM_BRCL, r1, i2); + S390_DISASM(XMNM("brcl", brcl_disasm), MASK(m1), PCREL(i2)); - return emit_RIL(p, 0xc00400000000ULL, r1, i2); + return emit_RIL(p, 0xc00400000000ULL, m1, i2); } @@ -2287,7 +2287,7 @@ static UChar * s390_emit_CR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "cr", r1, r2); + S390_DISASM(MNM("cr"), GPR(r1), GPR(r2)); return emit_RR(p, 0x1900, r1, r2); } @@ -2297,7 +2297,7 @@ static UChar * s390_emit_CGR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "cgr", r1, r2); + S390_DISASM(MNM("cgr"), GPR(r1), GPR(r2)); return emit_RRE(p, 0xb9200000, r1, r2); } @@ -2307,7 +2307,7 @@ static UChar * s390_emit_C(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UDXB), "c", r1, d2, x2, b2); + S390_DISASM(MNM("c"), GPR(r1), UDXB(d2, x2, b2)); return emit_RX(p, 0x59000000, r1, x2, b2, d2); } @@ -2317,7 +2317,7 @@ static UChar * s390_emit_CY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "cy", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("cy"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe30000000059ULL, r1, x2, b2, dl2, dh2); } @@ -2327,7 +2327,7 @@ static UChar * s390_emit_CG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "cg", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("cg"), GPR(r1), SDXB(dh2, dl2, x2, b2)); return emit_RXY(p, 0xe30000000020ULL, r1, x2, b2, dl2, dh2); } @@ -2339,7 +2339,7 @@ s390_emit_CFI(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "cfi", r1, i2); + S390_DISASM(MNM("cfi"), GPR(r1), INT(i2)); return emit_RIL(p, 0xc20d00000000ULL, r1, i2); } @@ -2351,7 +2351,7 @@ s390_emit_CGFI(UChar *p, UChar r1, UInt i2) vassert(s390_host_has_eimm); if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, INT), "cgfi", r1, i2); + S390_DISASM(MNM("cgfi"), GPR(r1), INT(i2)); return emit_RIL(p, 0xc20c00000000ULL, r1, i2); } @@ -2361,7 +2361,7 @@ static UChar * s390_emit_CS(UChar *p, UChar r1, UChar r3, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, UDXB), "cs", r1, r3, d2, 0, b2); + S390_DISASM(MNM("cs"), GPR(r1), GPR(r3), UDXB(d2, 0, b2)); return emit_RS(p, 0xba000000, r1, r3, b2, d2); } @@ -2371,7 +2371,7 @@ static UChar * s390_emit_CSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "csy", r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM("csy"), GPR(r1), GPR(r3), SDXB(dh2, dl2, 0, b2)); return emit_RSY(p, 0xeb0000000014ULL, r1, r3, b2, dl2, dh2); } @@ -2381,7 +2381,7 @@ static UChar * s390_emit_CSG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "csg", r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM("csg"), GPR(r1), GPR(r3), SDXB(dh2, dl2, 0, b2)); return emit_RSY(p, 0xeb0000000030ULL, r1, r3, b2, dl2, dh2); } @@ -2391,7 +2391,7 @@ static UChar * s390_emit_CDS(UChar *p, UChar r1, UChar r3, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, UDXB), "cds", r1, r3, d2, 0, b2); + S390_DISASM(MNM("cds"), GPR(r1), GPR(r3), UDXB(d2, 0, b2)); return emit_RS(p, 0xbb000000, r1, r3, b2, d2); } @@ -2401,7 +2401,7 @@ static UChar * s390_emit_CDSY(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "cdsy", r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM("cdsy"), GPR(r1), GPR(r3), SDXB(dh2, dl2, 0, b2)); return emit_RSY(p, 0xeb0000000031ULL, r1, r3, b2, dl2, dh2); } @@ -2411,7 +2411,7 @@ static UChar * s390_emit_CDSG(UChar *p, UChar r1, UChar r3, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC4(MNM, GPR, GPR, SDXB), "cdsg", r1, r3, dh2, dl2, 0, b2); + S390_DISASM(MNM("cdsg"), GPR(r1), GPR(r3), SDXB(dh2, dl2, 0, b2)); return emit_RSY(p, 0xeb000000003eULL, r1, r3, b2, dl2, dh2); } @@ -2421,7 +2421,7 @@ static UChar * s390_emit_CLR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "clr", r1, r2); + S390_DISASM(MNM("clr"), GPR(r1), GPR(r2)); return emit_RR(p, 0x1500, r1, r2); } @@ -2431,7 +2431,7 @@ static UChar * s390_emit_CLGR(UChar *p, UChar r1, UChar r2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, GPR), "clgr", r1, r2); + S390_DISASM(MNM("clgr"), GPR(r1), GPR(r2)); return emit_RRE(p, 0xb9210000, r1, r2); } @@ -2441,7 +2441,7 @@ static UChar * s390_emit_CL(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, UDXB), "cl", r1, d2, x2, b2); + S390_DISASM(MNM("cl"), GPR(r1), UDXB(d2, x2, b2)); return emit_RX(p, 0x55000000, r1, x2, b2, d2); } @@ -2451,7 +2451,7 @@ static UChar * s390_emit_CLY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) { if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, GPR, SDXB), "cly", r1, dh2, dl2, x2, b2); + S390_DISASM(MNM("cly"), GPR(r1), SDXB(dh2, dl2, x2,... [truncated message content] |