4de4a4705f
This commit continues adding support for the Branch History Rolling Buffer (BHRB) as is provided starting with the P8 processor and continuing with its successors. This commit is limited to the recording and filtering of taken branches. The following changes were made: - Enabled functionality on P10 processors only due to performance impact seen with P8 and P9 where it is not disabled for non problem state branches. - Added a BHRB buffer for storing branch instruction and target addresses for taken branches - Renamed gen_update_cfar to gen_update_branch_history and added a 'target' parameter to hold the branch target address and 'inst_type' parameter to use for filtering - Added TCG code to gen_update_branch_history that stores data to the BHRB and updates the BHRB offset. - Added BHRB resource initialization and reset functions Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Glenn Miles <milesg@linux.vnet.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
34 lines
774 B
C++
34 lines
774 B
C++
/*
|
|
* Power ISA decode for branch instructions
|
|
*
|
|
* Copyright IBM Corp. 2021
|
|
*
|
|
* Authors:
|
|
* Daniel Henrique Barboza <danielhb413@gmail.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
|
|
|
|
static bool trans_RFEBB(DisasContext *ctx, arg_XL_s *arg)
|
|
{
|
|
REQUIRE_INSNS_FLAGS2(ctx, ISA207S);
|
|
|
|
translator_io_start(&ctx->base);
|
|
gen_update_branch_history(ctx, ctx->cia, NULL, BHRB_TYPE_NORECORD);
|
|
gen_helper_rfebb(tcg_env, cpu_gpr[arg->s]);
|
|
|
|
ctx->base.is_jmp = DISAS_CHAIN;
|
|
|
|
return true;
|
|
}
|
|
#else
|
|
static bool trans_RFEBB(DisasContext *ctx, arg_XL_s *arg)
|
|
{
|
|
gen_invalid(ctx);
|
|
return true;
|
|
}
|
|
#endif
|