提交 4554f155 编写于 作者: A Alexander Monakov 提交者: Rich Felker

setjmp: optimize longjmp prologues

Use a branchless sequence that is one byte shorter on 64-bit, same size
on 32-bit. Thanks to Pete Cawley for suggesting this variant.
上级 59b64ff6
......@@ -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
......
......@@ -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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册