Commit 062f93f2 by Richard Henderson Committed by Richard Henderson

Swap the action and jmpbuf arguments to GTM_longjmp

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
parent c08472ea
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> 2011-11-23 Iain Sandoe <iains@gcc.gnu.org>
* Makefile.am (libitm_la_LDFLAGS): Remove "-no-undefined". * Makefile.am (libitm_la_LDFLAGS): Remove "-no-undefined".
......
...@@ -404,8 +404,8 @@ _ITM_abortTransaction (_ITM_abortReason reason) ...@@ -404,8 +404,8 @@ _ITM_abortTransaction (_ITM_abortReason reason)
tx->rollback (cp, true); tx->rollback (cp, true);
// Jump to nested transaction (use the saved jump buffer). // Jump to nested transaction (use the saved jump buffer).
GTM_longjmp (&longjmp_jb, a_abortTransaction | a_restoreLiveVariables, GTM_longjmp (a_abortTransaction | a_restoreLiveVariables,
longjmp_prop); &longjmp_jb, longjmp_prop);
} }
else else
{ {
...@@ -421,8 +421,8 @@ _ITM_abortTransaction (_ITM_abortReason reason) ...@@ -421,8 +421,8 @@ _ITM_abortTransaction (_ITM_abortReason reason)
gtm_thread::serial_lock.read_unlock (tx); gtm_thread::serial_lock.read_unlock (tx);
tx->state = 0; tx->state = 0;
GTM_longjmp (&tx->jb, a_abortTransaction | a_restoreLiveVariables, GTM_longjmp (a_abortTransaction | a_restoreLiveVariables,
tx->prop); &tx->jb, tx->prop);
} }
} }
...@@ -512,8 +512,8 @@ GTM::gtm_thread::restart (gtm_restart_reason r) ...@@ -512,8 +512,8 @@ GTM::gtm_thread::restart (gtm_restart_reason r)
disp = abi_disp(); disp = abi_disp();
} }
GTM_longjmp (&jb, GTM_longjmp (choose_code_path(prop, disp) | a_restoreLiveVariables,
choose_code_path(prop, disp) | a_restoreLiveVariables, prop); &jb, prop);
} }
void ITM_REGPARM void ITM_REGPARM
......
...@@ -81,28 +81,28 @@ _ITM_beginTransaction: ...@@ -81,28 +81,28 @@ _ITM_beginTransaction:
GTM_longjmp: GTM_longjmp:
.prologue 0 .prologue 0
ldq $26, 0($16) ldq $26, 0($17)
ldq $9, 8($16) ldq $9, 8($17)
ldq $10, 16($16) ldq $10, 16($17)
ldq $11, 24($16) ldq $11, 24($17)
ldq $12, 32($16) ldq $12, 32($17)
ldq $13, 40($16) ldq $13, 40($17)
ldq $14, 48($16) ldq $14, 48($17)
ldq $15, 56($16) ldq $15, 56($17)
ldq $1, 64($16) ldq $1, 64($17)
ldt $f2, 72($16) ldt $f2, 72($17)
ldt $f3, 80($16) ldt $f3, 80($17)
ldt $f4, 88($16) ldt $f4, 88($17)
ldt $f5, 96($16) ldt $f5, 96($17)
ldt $f6, 104($16) ldt $f6, 104($17)
ldt $f7, 112($16) ldt $f7, 112($17)
ldt $f8, 120($16) ldt $f8, 120($17)
ldt $f9, 128($16) ldt $f9, 128($17)
mov $17, $0 mov $16, $0
mov $1, $30 mov $1, $30
ret ret
.end GTM_longjmp .end GTM_longjmp
......
...@@ -113,21 +113,20 @@ SYM(_ITM_beginTransaction): ...@@ -113,21 +113,20 @@ SYM(_ITM_beginTransaction):
SYM(GTM_longjmp): SYM(GTM_longjmp):
cfi_startproc cfi_startproc
#ifdef __x86_64__ #ifdef __x86_64__
movq (%rdi), %rcx movq (%rsi), %rcx
movq 8(%rdi), %rdx movq 8(%rsi), %rdx
movq 16(%rdi), %rbx movq 16(%rsi), %rbx
movq 24(%rdi), %rbp movq 24(%rsi), %rbp
movq 32(%rdi), %r12 movq 32(%rsi), %r12
movq 40(%rdi), %r13 movq 40(%rsi), %r13
movq 48(%rdi), %r14 movq 48(%rsi), %r14
movq 56(%rdi), %r15 movq 56(%rsi), %r15
movl %esi, %eax movl %edi, %eax
cfi_def_cfa(%rcx, 0) cfi_def_cfa(%rcx, 0)
cfi_register(%rip, %rdx) cfi_register(%rip, %rdx)
movq %rcx, %rsp movq %rcx, %rsp
jmp *%rdx jmp *%rdx
#else #else
xchgl %eax, %edx
movl (%edx), %ecx movl (%edx), %ecx
movl 4(%edx), %ebx movl 4(%edx), %ebx
movl 8(%edx), %esi movl 8(%edx), %esi
......
...@@ -285,7 +285,7 @@ namespace GTM HIDDEN { ...@@ -285,7 +285,7 @@ namespace GTM HIDDEN {
// are used. // are used.
extern uint64_t gtm_spin_count_var; 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; ITM_NORETURN ITM_REGPARM;
extern "C" void GTM_LB (const void *, size_t) ITM_REGPARM; extern "C" void GTM_LB (const void *, size_t) ITM_REGPARM;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment