summary refs log tree commit diff
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)