52 lines
877 B
ArmAsm
52 lines
877 B
ArmAsm
! cmp64*() - 64 bit compare Author: Kees J. Bot
|
|
! 24 Dec 1995
|
|
.sect .text
|
|
.define _cmp64, _cmp64u, _cmp64ul
|
|
|
|
_cmp64: ! int cmp64(u64_t i, u64_t j);
|
|
mov bx, sp
|
|
cmp64: xor ax, ax
|
|
mov dx, 2(bx)
|
|
sub dx, 10(bx)
|
|
mov dx, 4(bx)
|
|
sbb dx, 12(bx)
|
|
mov dx, 6(bx)
|
|
sbb dx, 14(bx)
|
|
mov dx, 8(bx)
|
|
sbb dx, 16(bx)
|
|
sbb ax, ax ! ax = - (i < j)
|
|
mov dx, 10(bx)
|
|
sub dx, 2(bx)
|
|
mov dx, 12(bx)
|
|
sbb dx, 4(bx)
|
|
mov dx, 14(bx)
|
|
sbb dx, 6(bx)
|
|
mov dx, 16(bx)
|
|
sbb dx, 8(bx)
|
|
adc ax, #0 ! ax = (i > j) - (i < j)
|
|
ret
|
|
|
|
_cmp64u: ! int cmp64u(u64_t i, unsigned j);
|
|
mov bx, sp
|
|
push 16(bx)
|
|
mov 16(bx), #0
|
|
push 14(bx)
|
|
mov 14(bx), #0
|
|
push 12(bx)
|
|
mov 12(bx), #0
|
|
call cmp64
|
|
pop 12(bx)
|
|
pop 14(bx)
|
|
pop 16(bx)
|
|
ret
|
|
|
|
_cmp64ul: ! int cmp64ul(u64_t i, unsigned long j);
|
|
mov bx, sp
|
|
push 14(bx)
|
|
mov 14(bx), #0
|
|
push 12(bx)
|
|
mov 12(bx), #0
|
|
call cmp64
|
|
pop 12(bx)
|
|
pop 14(bx)
|
|
ret
|