Swap the action and jmpbuf arguments to GTM_longjmp
authorRichard Henderson <rth@redhat.com>
Wed, 30 Nov 2011 22:29:33 +0000 (14:29 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 30 Nov 2011 22:29:33 +0000 (14:29 -0800)
On several ABIs, the first register parameter is the same as
the return value register.  Moving the action parameter first
avoids the need for register shuffling on these targets.

        * libitm_i.h (GTM_longjmp): Swap first and second arguments.
        * beginend.c (_ITM_abortTransaction): Update to match.
        (GTM::gtm_thread::restart): Likewise.
        * config/alpha/sjlj.S (GTM_longjmp): Likewise.
        * config/x86/sjlj.S (GTM_longjmp): Likewise.

From-SVN: r181863

libitm/ChangeLog
libitm/beginend.cc
libitm/config/alpha/sjlj.S
libitm/config/x86/sjlj.S
libitm/libitm_i.h

index be994a5..3358464 100644 (file)
@@ -1,3 +1,11 @@
+2011-11-30  Richard Henderson  <rth@redhat.com>
+
+       * libitm_i.h (GTM_longjmp): Swap first and second arguments.
+       * beginend.c (_ITM_abortTransaction): Update to match.
+       (GTM::gtm_thread::restart): Likewise.
+       * config/alpha/sjlj.S (GTM_longjmp): Likewise.
+       * config/x86/sjlj.S (GTM_longjmp): Likewise.
+
 2011-11-23  Iain Sandoe  <iains@gcc.gnu.org>
 
        * Makefile.am (libitm_la_LDFLAGS): Remove "-no-undefined".
index a266975..d8ef651 100644 (file)
@@ -404,8 +404,8 @@ _ITM_abortTransaction (_ITM_abortReason reason)
       tx->rollback (cp, true);
 
       // Jump to nested transaction (use the saved jump buffer).
-      GTM_longjmp (&longjmp_jb, a_abortTransaction | a_restoreLiveVariables,
-         longjmp_prop);
+      GTM_longjmp (a_abortTransaction | a_restoreLiveVariables,
+                  &longjmp_jb, longjmp_prop);
     }
   else
     {
@@ -421,8 +421,8 @@ _ITM_abortTransaction (_ITM_abortReason reason)
        gtm_thread::serial_lock.read_unlock (tx);
       tx->state = 0;
 
-      GTM_longjmp (&tx->jb, a_abortTransaction | a_restoreLiveVariables,
-         tx->prop);
+      GTM_longjmp (a_abortTransaction | a_restoreLiveVariables,
+                  &tx->jb, tx->prop);
     }
 }
 
@@ -512,8 +512,8 @@ GTM::gtm_thread::restart (gtm_restart_reason r)
       disp = abi_disp();
     }
 
-  GTM_longjmp (&jb,
-      choose_code_path(prop, disp) | a_restoreLiveVariables, prop);
+  GTM_longjmp (choose_code_path(prop, disp) | a_restoreLiveVariables,
+              &jb, prop);
 }
 
 void ITM_REGPARM
index 3aa5f06..615eacb 100644 (file)
@@ -81,28 +81,28 @@ _ITM_beginTransaction:
 
 GTM_longjmp:
        .prologue 0
-       ldq     $26, 0($16)
-       ldq     $9, 8($16)
-       ldq     $10, 16($16)
-       ldq     $11, 24($16)
-
-       ldq     $12, 32($16)
-       ldq     $13, 40($16)
-       ldq     $14, 48($16)
-       ldq     $15, 56($16)
-
-       ldq     $1, 64($16)
-       ldt     $f2, 72($16)
-       ldt     $f3, 80($16)
-       ldt     $f4, 88($16)
-
-       ldt     $f5, 96($16)
-       ldt     $f6, 104($16)
-       ldt     $f7, 112($16)
-       ldt     $f8, 120($16)
-
-       ldt     $f9, 128($16)
-       mov     $17, $0
+       ldq     $26, 0($17)
+       ldq     $9, 8($17)
+       ldq     $10, 16($17)
+       ldq     $11, 24($17)
+
+       ldq     $12, 32($17)
+       ldq     $13, 40($17)
+       ldq     $14, 48($17)
+       ldq     $15, 56($17)
+
+       ldq     $1, 64($17)
+       ldt     $f2, 72($17)
+       ldt     $f3, 80($17)
+       ldt     $f4, 88($17)
+
+       ldt     $f5, 96($17)
+       ldt     $f6, 104($17)
+       ldt     $f7, 112($17)
+       ldt     $f8, 120($17)
+
+       ldt     $f9, 128($17)
+       mov     $16, $0
        mov     $1, $30
        ret
 .end GTM_longjmp
index 39e0c75..8faa0c6 100644 (file)
@@ -113,21 +113,20 @@ SYM(_ITM_beginTransaction):
 SYM(GTM_longjmp):
        cfi_startproc
 #ifdef __x86_64__
-       movq    (%rdi), %rcx
-       movq    8(%rdi), %rdx
-       movq    16(%rdi), %rbx
-       movq    24(%rdi), %rbp
-       movq    32(%rdi), %r12
-       movq    40(%rdi), %r13
-       movq    48(%rdi), %r14
-       movq    56(%rdi), %r15
-       movl    %esi, %eax
+       movq    (%rsi), %rcx
+       movq    8(%rsi), %rdx
+       movq    16(%rsi), %rbx
+       movq    24(%rsi), %rbp
+       movq    32(%rsi), %r12
+       movq    40(%rsi), %r13
+       movq    48(%rsi), %r14
+       movq    56(%rsi), %r15
+       movl    %edi, %eax
        cfi_def_cfa(%rcx, 0)
        cfi_register(%rip, %rdx)
        movq    %rcx, %rsp
        jmp     *%rdx
 #else
-       xchgl   %eax, %edx
        movl    (%edx), %ecx
        movl    4(%edx), %ebx
        movl    8(%edx), %esi
index ba1afb4..ff6884e 100644 (file)
@@ -285,7 +285,7 @@ namespace GTM HIDDEN {
 // are used.
 extern uint64_t gtm_spin_count_var;
 
-extern "C" uint32_t GTM_longjmp (const gtm_jmpbuf *, uint32_t, uint32_t)
+extern "C" uint32_t GTM_longjmp (uint32_t, const gtm_jmpbuf *, uint32_t)
        ITM_NORETURN ITM_REGPARM;
 
 extern "C" void GTM_LB (const void *, size_t) ITM_REGPARM;