summaryrefslogtreecommitdiff
path: root/sysdeps/s390/multiarch
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/s390/multiarch')
-rw-r--r--sysdeps/s390/multiarch/ifunc-impl-list.c5
-rw-r--r--sysdeps/s390/multiarch/ifunc-resolve.h5
2 files changed, 10 insertions, 0 deletions
diff --git a/sysdeps/s390/multiarch/ifunc-impl-list.c b/sysdeps/s390/multiarch/ifunc-impl-list.c
index b54c52af36..d742d66a6a 100644
--- a/sysdeps/s390/multiarch/ifunc-impl-list.c
+++ b/sysdeps/s390/multiarch/ifunc-impl-list.c
@@ -169,6 +169,11 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
#if HAVE_MEMMOVE_IFUNC
IFUNC_IMPL (i, name, memmove,
+# if HAVE_MEMMOVE_ARCH13
+ IFUNC_IMPL_ADD (array, i, memmove,
+ S390_IS_ARCH13_MIE3 (stfle_bits),
+ MEMMOVE_ARCH13)
+# endif
# if HAVE_MEMMOVE_Z13
IFUNC_IMPL_ADD (array, i, memmove,
dl_hwcap & HWCAP_S390_VX, MEMMOVE_Z13)
diff --git a/sysdeps/s390/multiarch/ifunc-resolve.h b/sysdeps/s390/multiarch/ifunc-resolve.h
index b833dfef28..743de9e591 100644
--- a/sysdeps/s390/multiarch/ifunc-resolve.h
+++ b/sysdeps/s390/multiarch/ifunc-resolve.h
@@ -22,6 +22,11 @@
#define S390_STFLE_BITS_Z10 34 /* General instructions extension */
#define S390_STFLE_BITS_Z196 45 /* Distinct operands, pop ... */
+#define S390_STFLE_BITS_ARCH13_MIE3 61 /* Miscellaneous-Instruction-Extensions
+ Facility 3, e.g. mvcrl. */
+
+#define S390_IS_ARCH13_MIE3(STFLE_BITS) \
+ ((STFLE_BITS & (1ULL << (63 - S390_STFLE_BITS_ARCH13_MIE3))) != 0)
#define S390_IS_Z196(STFLE_BITS) \
((STFLE_BITS & (1ULL << (63 - S390_STFLE_BITS_Z196))) != 0)