tcg/s390x: Check for long-displacement facility at startup
We are already assuming the existance of long-displacement, but were not being explicit about it. This has been present since z990. Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
0a3afe09cb
commit
761ea52213
@ -3211,6 +3211,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
|
|||||||
static void query_s390_facilities(void)
|
static void query_s390_facilities(void)
|
||||||
{
|
{
|
||||||
unsigned long hwcap = qemu_getauxval(AT_HWCAP);
|
unsigned long hwcap = qemu_getauxval(AT_HWCAP);
|
||||||
|
const char *which;
|
||||||
|
|
||||||
/* Is STORE FACILITY LIST EXTENDED available? Honestly, I believe this
|
/* Is STORE FACILITY LIST EXTENDED available? Honestly, I believe this
|
||||||
is present on all 64-bit systems, but let's check for it anyway. */
|
is present on all 64-bit systems, but let's check for it anyway. */
|
||||||
@ -3232,6 +3233,20 @@ static void query_s390_facilities(void)
|
|||||||
if (!(hwcap & HWCAP_S390_VXRS)) {
|
if (!(hwcap & HWCAP_S390_VXRS)) {
|
||||||
s390_facilities[2] = 0;
|
s390_facilities[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for all required facilities.
|
||||||
|
* ZARCH_ACTIVE is done via preprocessor check for 64-bit.
|
||||||
|
*/
|
||||||
|
if (!HAVE_FACILITY(LONG_DISP)) {
|
||||||
|
which = "long-displacement";
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
error_report("%s: missing required facility %s", __func__, which);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcg_target_init(TCGContext *s)
|
static void tcg_target_init(TCGContext *s)
|
||||||
|
@ -52,11 +52,13 @@ typedef enum TCGReg {
|
|||||||
|
|
||||||
#define TCG_TARGET_NB_REGS 64
|
#define TCG_TARGET_NB_REGS 64
|
||||||
|
|
||||||
/* A list of relevant facilities used by this translator. Some of these
|
/* Facilities required for proper operation; checked at startup. */
|
||||||
are required for proper operation, and these are checked at startup. */
|
|
||||||
|
|
||||||
#define FACILITY_ZARCH_ACTIVE 2
|
#define FACILITY_ZARCH_ACTIVE 2
|
||||||
#define FACILITY_LONG_DISP 18
|
#define FACILITY_LONG_DISP 18
|
||||||
|
|
||||||
|
/* Facilities that are checked at runtime. */
|
||||||
|
|
||||||
#define FACILITY_EXT_IMM 21
|
#define FACILITY_EXT_IMM 21
|
||||||
#define FACILITY_GEN_INST_EXT 34
|
#define FACILITY_GEN_INST_EXT 34
|
||||||
#define FACILITY_LOAD_ON_COND 45
|
#define FACILITY_LOAD_ON_COND 45
|
||||||
|
Loading…
Reference in New Issue
Block a user