Add .machine directives for the darn instruction
authorCarl Love <cel@us.ibm.com>
Tue, 14 Sep 2021 21:43:49 +0000 (21:43 +0000)
committerCarl Love <cel@us.ibm.com>
Thu, 30 Sep 2021 22:30:09 +0000 (17:30 -0500)
VEX/priv/guest_ppc_helpers.c
configure.ac
none/tests/ppc64/test_darn_inst.c

index 54318b6d5cdaa2392f10eadf13e299aa59021612..0ae3a5aa17eb76cbf16fe0455b13da9e533ce4dd 100644 (file)
@@ -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;
index d755b0248b6a4b442598cdc6296834953afd0401..463e05f17209559be9dd8e8710cce12f51ba04c0 100755 (executable)
@@ -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])
index cd72fac14a3312b9443e553865a8ae971fa8388f..b591a8146d9b0a705a55812533d92bf9c042169c 100644 (file)
@@ -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);
This page took 0.045253 seconds and 5 git commands to generate.