diff options
| -rw-r--r-- | src/setjmp/i386/longjmp.s | 6 | ||||
| -rw-r--r-- | src/setjmp/x32/longjmp.s | 8 | ||||
| -rw-r--r-- | src/setjmp/x86_64/longjmp.s | 8 | 
3 files changed, 8 insertions, 14 deletions
| diff --git a/src/setjmp/i386/longjmp.s b/src/setjmp/i386/longjmp.s index b429f135..8188f06b 100644 --- a/src/setjmp/i386/longjmp.s +++ b/src/setjmp/i386/longjmp.s @@ -6,10 +6,8 @@ _longjmp:  longjmp:  	mov  4(%esp),%edx  	mov  8(%esp),%eax -	test    %eax,%eax -	jnz 1f -	inc     %eax -1: +	cmp       $1,%eax +	adc       $0, %al  	mov   (%edx),%ebx  	mov  4(%edx),%esi  	mov  8(%edx),%edi diff --git a/src/setjmp/x32/longjmp.s b/src/setjmp/x32/longjmp.s index bb88afa1..1b2661c3 100644 --- a/src/setjmp/x32/longjmp.s +++ b/src/setjmp/x32/longjmp.s @@ -5,11 +5,9 @@  .type longjmp,@function  _longjmp:  longjmp: -	mov %esi,%eax           /* val will be longjmp return */ -	test %esi,%esi -	jnz 1f -	inc %eax                /* if val==0, val=1 per longjmp semantics */ -1: +	xor %eax,%eax +	cmp $1,%esi             /* CF = val ? 0 : 1 */ +	adc %esi,%eax           /* eax = val + !val */  	mov (%rdi),%rbx         /* rdi is the jmp_buf, restore regs from it */  	mov 8(%rdi),%rbp  	mov 16(%rdi),%r12 diff --git a/src/setjmp/x86_64/longjmp.s b/src/setjmp/x86_64/longjmp.s index bb88afa1..1b2661c3 100644 --- a/src/setjmp/x86_64/longjmp.s +++ b/src/setjmp/x86_64/longjmp.s @@ -5,11 +5,9 @@  .type longjmp,@function  _longjmp:  longjmp: -	mov %esi,%eax           /* val will be longjmp return */ -	test %esi,%esi -	jnz 1f -	inc %eax                /* if val==0, val=1 per longjmp semantics */ -1: +	xor %eax,%eax +	cmp $1,%esi             /* CF = val ? 0 : 1 */ +	adc %esi,%eax           /* eax = val + !val */  	mov (%rdi),%rbx         /* rdi is the jmp_buf, restore regs from it */  	mov 8(%rdi),%rbp  	mov 16(%rdi),%r12 | 
