Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-15 Thread Uros Bizjak
On Tue, Feb 14, 2012 at 8:52 PM, Richard Henderson wrote: > On 02/14/2012 10:26 AM, Uros Bizjak wrote: >>  #ifdef __x86_64__ >> +     cfi_def_cfa(%rsi, 0) >>       movq    (%rsi), %rcx >>       movq    8(%rsi), %rbx >>       movq    16(%rsi), %rbp >> @@ -119,20 +120,21 @@ >>       movq    32(%rsi)

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-14 Thread Richard Henderson
On 02/14/2012 10:26 AM, Uros Bizjak wrote: > #ifdef __x86_64__ > + cfi_def_cfa(%rsi, 0) > movq(%rsi), %rcx > movq8(%rsi), %rbx > movq16(%rsi), %rbp > @@ -119,20 +120,21 @@ > movq32(%rsi), %r13 > movq40(%rsi), %r14 > movq48(%rsi), %r15

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-14 Thread Uros Bizjak
On Tue, Feb 14, 2012 at 7:07 PM, Richard Henderson wrote: > On 02/13/2012 11:54 PM, Uros Bizjak wrote: >>       movq    48(%rsi), %r15 >> -     movq    56(%rsi), %rdx >>       movl    %edi, %eax >> +     cfi_offset(%rip, 56) >>       cfi_def_cfa(%rcx, 0) >> -     cfi_register(%rip, %rdx) >>      

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-14 Thread Richard Henderson
On 02/13/2012 11:54 PM, Uros Bizjak wrote: > movq48(%rsi), %r15 > - movq56(%rsi), %rdx > movl%edi, %eax > + cfi_offset(%rip, 56) > cfi_def_cfa(%rcx, 0) > - cfi_register(%rip, %rdx) > movq%rcx, %rsp > - jmp *%rdx > + jmp *56(%rsi)

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Uros Bizjak
On Tue, Feb 14, 2012 at 8:39 AM, Uros Bizjak wrote: - cfi_register(%rip, %rdx) + cfi_offset(%rip, 56) >>> >>> Hm, we just defined new CFA as rcx+0, so we should define location of >>> rip relative to new CFA. Since CFA points to stack slot just before >>> return address was pushed, new

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Uros Bizjak
On Tue, Feb 14, 2012 at 1:15 AM, Richard Henderson wrote: -     movq    56(%rsi), %rdx       movl    %edi, %eax       cfi_def_cfa(%rcx, 0) -     cfi_register(%rip, %rdx)       movq    %rcx, %rsp -     jmp     *%rdx +     jmp     *56(%rsi) >>> >>> If you're going

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Richard Henderson
On 02/13/2012 04:09 PM, Uros Bizjak wrote: > On Mon, Feb 13, 2012 at 11:57 PM, Richard Henderson wrote: >> On 02/13/2012 02:54 PM, Uros Bizjak wrote: >>> - movq56(%rsi), %rdx >>> movl%edi, %eax >>> cfi_def_cfa(%rcx, 0) >>> - cfi_register(%rip, %rdx) >>> movq%r

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Uros Bizjak
On Mon, Feb 13, 2012 at 11:57 PM, Richard Henderson wrote: > On 02/13/2012 02:54 PM, Uros Bizjak wrote: >> -     movq    56(%rsi), %rdx >>       movl    %edi, %eax >>       cfi_def_cfa(%rcx, 0) >> -     cfi_register(%rip, %rdx) >>       movq    %rcx, %rsp >> -     jmp     *%rdx >> +     jmp     *5

Re: [PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Richard Henderson
On 02/13/2012 02:54 PM, Uros Bizjak wrote: > - movq56(%rsi), %rdx > movl%edi, %eax > cfi_def_cfa(%rcx, 0) > - cfi_register(%rip, %rdx) > movq%rcx, %rsp > - jmp *%rdx > + jmp *56(%rsi) If you're going to do that, the correct fix for the unwind i

[PATCH, libitm]: GTM_longjmp: Jump indirect from memory address

2012-02-13 Thread Uros Bizjak
Hello! We can jump indirect from memory address, sparing a couple of cycles. 2012-02-14 Uros Bizjak * config/x86/target.h (GTM_longjmp): Jump indirect from memory address. Tested on x86_64-pc-linux-gnu {,-m32}. OK for mainline? Uros. Index: config/x86/sjlj.S ===