tcg/ppc: Create TCGPowerISA and have_isa

Introduce an enum to hold base < 2.06 < 3.00.  Use macros to
preserve the existing have_isa_2_06 and have_isa_3_00 predicates.

Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2019-09-30 02:52:00 +00:00
parent b82f769cc1
commit 7d9dae0a10
2 changed files with 14 additions and 6 deletions

View File

@ -58,8 +58,16 @@ typedef enum {
TCG_AREG0 = TCG_REG_R27
} TCGReg;
extern bool have_isa_2_06;
extern bool have_isa_3_00;
typedef enum {
tcg_isa_base,
tcg_isa_2_06,
tcg_isa_3_00,
} TCGPowerISA;
extern TCGPowerISA have_isa;
#define have_isa_2_06 (have_isa >= tcg_isa_2_06)
#define have_isa_3_00 (have_isa >= tcg_isa_3_00)
/* optional instructions automatically implemented */
#define TCG_TARGET_HAS_ext8u_i32 0 /* andi */

View File

@ -64,8 +64,7 @@
static tcg_insn_unit *tb_ret_addr;
bool have_isa_2_06;
bool have_isa_3_00;
TCGPowerISA have_isa;
#define HAVE_ISA_2_06 have_isa_2_06
#define HAVE_ISEL have_isa_2_06
@ -2787,12 +2786,13 @@ static void tcg_target_init(TCGContext *s)
unsigned long hwcap = qemu_getauxval(AT_HWCAP);
unsigned long hwcap2 = qemu_getauxval(AT_HWCAP2);
have_isa = tcg_isa_base;
if (hwcap & PPC_FEATURE_ARCH_2_06) {
have_isa_2_06 = true;
have_isa = tcg_isa_2_06;
}
#ifdef PPC_FEATURE2_ARCH_3_00
if (hwcap2 & PPC_FEATURE2_ARCH_3_00) {
have_isa_3_00 = true;
have_isa = tcg_isa_3_00;
}
#endif