vki_sigaction_toK_t tmp_sigill_act;
volatile Bool have_LDISP, have_EIMM, have_GIE, have_DFP, have_FGX;
- volatile Bool have_STFLE, have_ETF2;
+ volatile Bool have_STFLE, have_ETF2, have_ETF3;
Int r, model;
/* Unblock SIGILL and stash away the old action for that signal */
time, so the absence of STLFE implies the absence of ETF2. */
have_STFLE = True;
have_ETF2 = False;
+ have_ETF3 = False;
if (VG_MINIMAL_SETJMP(env_unsup_insn)) {
have_STFLE = False;
} else {
: : "cc", "memory");
if (hoststfle[0] & (1ULL << (63 - 24)))
have_ETF2 = True;
+ if (hoststfle[0] & (1ULL << (63 - 30)))
+ have_ETF3 = True;
}
/* Restore signals */
identification yet. Keeping fingers crossed. */
VG_(debugLog)(1, "machine", "machine %d LDISP %d EIMM %d GIE %d DFP %d "
- "FGX %d STFLE %d ETF2 %d\n", model, have_LDISP, have_EIMM,
- have_GIE, have_DFP, have_FGX, have_STFLE, have_ETF2);
+ "FGX %d STFLE %d ETF2 %d ETF3 %d\n", model, have_LDISP, have_EIMM,
+ have_GIE, have_DFP, have_FGX, have_STFLE, have_ETF2, have_ETF3);
vai.hwcaps = model;
if (have_LDISP) {
if (have_DFP) vai.hwcaps |= VEX_HWCAPS_S390X_DFP;
if (have_FGX) vai.hwcaps |= VEX_HWCAPS_S390X_FGX;
if (have_ETF2) vai.hwcaps |= VEX_HWCAPS_S390X_ETF2;
+ if (have_ETF3) vai.hwcaps |= VEX_HWCAPS_S390X_ETF3;
if (have_STFLE) vai.hwcaps |= VEX_HWCAPS_S390X_STFLE;
VG_(debugLog)(1, "machine", "hwcaps = 0x%x\n", vai.hwcaps);