The PFPO facility is always present on the supported machines.
- Remove VEX_HWCAPS_S390X_PFPO, s390_host_has_pfpo and EmFail_S390X_pfpo
- Update tests/s390x_features.c and none/tests/s390x/pfpo
- Update memcheck/tests/vbit-test
Part of fixing https://bugs.kde.org/show_bug.cgi?id=509562
static const HChar *
s390_irgen_PFPO(void)
{
- if (! s390_host_has_pfpo) {
- emulation_failure(EmFail_S390X_pfpo);
- return "pfpo";
- }
-
IRTemp gr0 = newTemp(Ity_I32); /* word 1 [32:63] of GR 0 */
IRTemp test_bit = newTemp(Ity_I32); /* bit 32 of GR 0 - test validity */
IRTemp fn = newTemp(Ity_I32); /* [33:55] of GR 0 - function code */
static UChar *
s390_emit_PFPO(UChar *p)
{
- vassert(s390_host_has_pfpo);
if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
S390_DISASM(MNM("pfpo"));
}
extern UInt s390_host_hwcaps;
/* Convenience macros to test installed facilities */
-#define s390_host_has_pfpo \
- (s390_host_hwcaps & (VEX_HWCAPS_S390X_PFPO))
#define s390_host_has_vx \
(s390_host_hwcaps & (VEX_HWCAPS_S390X_VX))
#define s390_host_has_msa5 \
return "Encountered an insn with the IEEE-invalid-operation-exception\n"
" control (XiC) bit set to 1. This is not supported. Continuing anyway.\n"
" IEEE-invalid-operation exceptions will not be suppressed.";
- case EmFail_S390X_pfpo:
- return "Instruction pfpo is not supported on this host";
case EmFail_S390X_invalid_PFPO_rounding_mode:
return "The rounding mode in GPR 0 for the PFPO instruction"
" is invalid";
UInt hwcaps_bit;
HChar name[6];
} hwcaps_list[] = {
- { VEX_HWCAPS_S390X_PFPO, "pfpo" },
{ VEX_HWCAPS_S390X_VX, "vx" },
{ VEX_HWCAPS_S390X_MSA5, "msa5" },
{ VEX_HWCAPS_S390X_MI2, "mi2" },
#define VEX_S390X_MODEL_UNKNOWN 19 /* always last in list */
#define VEX_S390X_MODEL_MASK 0x3F
-#define VEX_HWCAPS_S390X_PFPO (1<<17) /* Perform floating point ops facility */
#define VEX_HWCAPS_S390X_VX (1<<18) /* Vector facility */
#define VEX_HWCAPS_S390X_MSA5 (1<<19) /* Message-security-assistance facility 5 */
#define VEX_HWCAPS_S390X_MI2 (1<<20) /* Miscellaneous-instruction-extensions facility 2 */
#define VEX_HWCAPS_S390X_MSA9 (1<<30) /* Message-security-assist extension 9 */
/* Special value representing all available s390x hwcaps */
-#define VEX_HWCAPS_S390X_ALL (VEX_HWCAPS_S390X_PFPO | \
- VEX_HWCAPS_S390X_VX | \
+#define VEX_HWCAPS_S390X_ALL (VEX_HWCAPS_S390X_VX | \
VEX_HWCAPS_S390X_MSA5 | \
VEX_HWCAPS_S390X_MI2 | \
VEX_HWCAPS_S390X_LSC2 | \
in VEX and is expected to be zero. */
EmWarn_S390X_XiC_not_zero,
- /* pfpo insn is not supported on this host */
- EmFail_S390X_pfpo,
-
/* GPR 0 contains invalid rounding mode for PFPO instruction */
EmFail_S390X_invalid_PFPO_rounding_mode,
UInt hwcaps_bit;
const HChar name[6]; // may need adjustment for new facility names
} fac_hwcaps[] = {
- { False, 44, VEX_HWCAPS_S390X_PFPO, "PFPO" },
{ False, 129, VEX_HWCAPS_S390X_VX, "VX" },
{ False, 57, VEX_HWCAPS_S390X_MSA5, "MSA5" },
{ False, 58, VEX_HWCAPS_S390X_MI2, "MI2" },
if (p->op == op) {
#ifdef __s390x__
#define S390X_FEATURES "../../../tests/s390x_features"
- int rc;
switch (op) {
case Iop_I32StoD64: // CDFTR
case Iop_D64toF128:
case Iop_D128toF32:
case Iop_D128toF64:
- case Iop_D128toF128: {
- /* These IROps require the Perform Floating Point Operation
- facility */
- rc = system(S390X_FEATURES " s390x-pfpo");
- // s390x_features returns 1 if feature does not exist
- rc /= 256;
- if (rc != 0) return NULL;
- }
+ case Iop_D128toF128:
break;
/* Other */
default:
prog: pfpo
-prereq: test -e pfpo && ../../../tests/s390x_features s390x-pfpo
match = facilities[0] & FAC_BIT(0);
} else if (strcmp(feature, "s390x-exrl") == 0 ) {
match = facilities[0] & FAC_BIT(35);
- } else if (strcmp(feature, "s390x-pfpo") == 0 ) {
- match = facilities[0] & FAC_BIT(44);
} else if (strcmp(feature, "s390x-vx") == 0 ) {
/* VX needs kernel support; thus check the appropriate HWCAP bit. */
match = GET_HWCAP() & 0x800;