mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
c08472eaf6
commit
062f93f255
|
@ -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>
|
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)
|
||||||
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)
|
||||||
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)
|
||||||
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:
|
||||||
|
|
||||||
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):
|
||||||
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 {
|
||||||
// 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;
|
||||||
|
|
Loading…
Reference in New Issue