From: Florian Krohm Date: Sat, 26 May 2012 01:59:21 +0000 (+0000) Subject: Take advantage of compare immediate insns as more than half X-Git-Tag: svn/VALGRIND_3_8_1^2~126 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d3132304f25844fd05703afe7dbfc34fd2a3677;p=thirdparty%2Fvalgrind.git Take advantage of compare immediate insns as more than half of all comparisons are like that. git-svn-id: svn://svn.valgrind.org/vex/trunk@2352 --- diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c index 4e21deba2c..f60beea74e 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c @@ -1523,6 +1523,18 @@ 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(ENC3(MNM, GPR, INT), "cgfi", r1, i2); + + return emit_RIL(p, 0xc20c00000000ULL, r1, i2); +} + + static UChar * s390_emit_CS(UChar *p, UChar r1, UChar r3, UChar b2, UShort d2) { @@ -1623,6 +1635,18 @@ 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(ENC3(MNM, GPR, UINT), "clgfi", r1, i2); + + return emit_RIL(p, 0xc20e00000000ULL, r1, i2); +} + + static UChar * s390_emit_DR(UChar *p, UChar r1, UChar r2) { @@ -6309,6 +6333,15 @@ s390_insn_compare_emit(UChar *buf, const s390_insn *insn) return s390_emit_CLFIw(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); + } + } buf = s390_emit_load_64imm(buf, R0, value); if (signed_comparison) return s390_emit_CGR(buf, r1, R0);