Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .rodata
- A: .double 0.0, 0.0, 0.0, 0.0
- B: .double 1e-8
- format: .string "%d\n"
- .text
- .global tree_find
- tree_find:
- push %ebp
- movl %esp, %ebp
- push %ebx
- push %esi
- push %edi
- movupd A, %xmm0
- movupd A, %xmm1
- movupd A, %xmm2
- movl 8(%ebp), %ebx ;null
- movsd 12(%ebp), %xmm0
- mov 20(%ebp), %edi
- loop:
- movsd (%ebx), %xmm2
- comisd %xmm2, %xmm0
- jg great
- jmp less
- great:
- movsd %xmm0, %xmm1
- subsd (%ebx), %xmm1
- comisd B, %xmm1
- jle end
- movl 12(%ebx), %ebx
- cmpl $0, %ebx
- jz bad_end
- jmp loop
- less:
- movsd %xmm0, %xmm1
- movsd (%ebx), %xmm2
- subsd %xmm1, %xmm2
- comisd B, %xmm2
- jle end
- movl 8(%ebx), %ebx
- cmpl $0, %ebx
- jz bad_end
- jmp loop
- end:
- cmpl $0, %edi
- jz up
- movl 16(%ebx), %esi
- movl %esi, (%edi)
- up:
- popl %edi
- popl %esi
- popl %ebx
- movl %ebp, %esp
- popl %ebp
- movl $1, %eax
- ret
- bad_end:
- popl %edi
- popl %esi
- popl %ebx
- movl %ebp, %esp
- popl %ebp
- movl $0, %eax
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement