From: Carl Love Date: Tue, 14 Sep 2021 21:43:49 +0000 (+0000) Subject: Add .machine directives for the darn instruction X-Git-Tag: VALGRIND_3_18_0~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=475916cbd37611dcf510c2249c74ff6e31894023;p=thirdparty%2Fvalgrind.git Add .machine directives for the darn instruction --- diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c index 54318b6d5c..0ae3a5aa17 100644 --- a/VEX/priv/guest_ppc_helpers.c +++ b/VEX/priv/guest_ppc_helpers.c @@ -2429,11 +2429,14 @@ ULong darn_dirty_helper ( UInt L ) # if defined (HAS_DARN) if ( L == 0) - __asm__ __volatile__("darn %0,0" : "=r"(val)); + __asm__ __volatile__(".machine push; .machine power9;" \ + "darn %0,0; .machine pop;" : "=r"(val)); else if (L == 1) - __asm__ __volatile__("darn %0,1" : "=r"(val)); + __asm__ __volatile__(".machine push; .machine power9;" \ + "darn %0,1; .machine pop;" : "=r"(val)); else if (L == 2) - __asm__ __volatile__("darn %0,2" : "=r"(val)); + __asm__ __volatile__(".machine push; .machine power9;" + "darn %0,2; .machine pop;" : "=r"(val)); # endif return val; diff --git a/configure.ac b/configure.ac index d755b0248b..463e05f172 100755 --- a/configure.ac +++ b/configure.ac @@ -1693,7 +1693,7 @@ AC_MSG_CHECKING([that assembler knows darn instruction ]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[ - __asm__ __volatile__("darn 1,0 "); + __asm__ __volatile__(".machine power9; darn 1,0 "); ]])], [ ac_asm_have_darn_inst=yes AC_MSG_RESULT([yes]) diff --git a/none/tests/ppc64/test_darn_inst.c b/none/tests/ppc64/test_darn_inst.c index cd72fac14a..b591a8146d 100644 --- a/none/tests/ppc64/test_darn_inst.c +++ b/none/tests/ppc64/test_darn_inst.c @@ -19,19 +19,22 @@ int main() /* The random number instruction returns 0xFFFFFFFFFFFFFFFFULL on error and an unsigned 64-bit value between 0 and 0xFFFFFFFFFFFFFFFEULL on success. */ - __asm__ __volatile__ ("darn %0,0" : "=r" (rand)); + __asm__ __volatile__ (".machine push; .machine power9;" \ + "darn %0,0; .machine pop" : "=r" (rand)); if (rand == ERROR) { success = FALSE; printf ("Error darn 0 result = 0%llx not in expected range.\n", rand); } - __asm__ __volatile__ ("darn %0,1" : "=r" (rand)); + __asm__ __volatile__ (".machine push; .machine power9;" \ + "darn %0,1; .machine pop" : "=r" (rand)); if (rand == ERROR) { success = FALSE; printf ("Error darn 1 result = 0%llx not in expected range.\n", rand); } - __asm__ __volatile__ ("darn %0,2" : "=r" (rand)); + __asm__ __volatile__ (".machine push; .machine power9;" \ + "darn %0,2; .machine pop" : "=r" (rand)); if (rand == ERROR) { success = FALSE; printf ("Error darn 2 result = 0%llx not in expected range.\n", rand);