From b288f6278ee449a0d08a4c6b642b7d01c7c72f08 Mon Sep 17 00:00:00 2001 From: gbeauche <> Date: Sat, 1 Apr 2006 21:41:19 +0000 Subject: [PATCH] Helper macros to annotate likely branch directions. Colateral effect: this also fixes build with GCC 4.1 (ppc-dyngen-ops.cpp) since the branches are re-ordered in a way there is now only one exit-point in op_jump_next_A0(). --- SheepShaver/src/Unix/sysdeps.h | 15 +++++++++++++++ .../src/kpx_cpu/src/cpu/ppc/ppc-dyngen-ops.cpp | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/SheepShaver/src/Unix/sysdeps.h b/SheepShaver/src/Unix/sysdeps.h index 1a96daba..7f8aeb0a 100644 --- a/SheepShaver/src/Unix/sysdeps.h +++ b/SheepShaver/src/Unix/sysdeps.h @@ -166,6 +166,21 @@ typedef int64 intptr; #error "Unsupported size of pointer" #endif +/** + * Helper macros to annotate likely branch directions + **/ + +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +#define likely(x) __builtin_expect((x),1) +#define unlikely(x) __builtin_expect((x),0) +#endif +#ifndef likely +#define likely(x) (x) +#endif +#ifndef unlikely +#define unlikely(x) (x) +#endif + /** * Helper functions to byteswap data **/ diff --git a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-dyngen-ops.cpp b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-dyngen-ops.cpp index 0ec0f89f..75557572 100644 --- a/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-dyngen-ops.cpp +++ b/SheepShaver/src/kpx_cpu/src/cpu/ppc/ppc-dyngen-ops.cpp @@ -1246,10 +1246,10 @@ void OPPROTO op_dcbz_T0(void) void OPPROTO op_jump_next_A0(void) { // Make sure there is no pending interrupt request - if (powerpc_dyngen_helper::spcflags().empty()) { + if (likely(powerpc_dyngen_helper::spcflags().empty())) { powerpc_block_info *bi = (powerpc_block_info *)reg_A0; uint32 pc = powerpc_dyngen_helper::get_pc(); - if (bi->pc == pc || (bi = powerpc_dyngen_helper::find_block(pc)) != NULL) + if (likely(bi->pc == pc) || likely((bi = powerpc_dyngen_helper::find_block(pc)) != NULL)) goto *(bi->entry_point); } dyngen_barrier();