Well, I couldn't find a way to do it with high and low comparisons separately. Here is what I'm using now. I might be able to optimize it using the parity flag, but I'm avoiding absolute jumps at the moment.
p_SIntGt:
ex de,hl
xor a
ld b,h
sbc hl,de
ld h,a
rra
xor b
xor d
rlca
and 1
ld l,a
p_SIntGe:
xor a
ld b,h
sbc hl,de
ld h,a
rra
xor b
xor d
rlca
sbc a,a
inc a
ld l,a
p_SIntLt:
xor a
ld b,h
sbc hl,de
ld h,a
rra
xor b
xor d
rlca
and 1
ld l,a
p_SIntLe:
ex de,hl
xor a
ld b,h
sbc hl,de
ld h,a
rra
xor b
xor d
rlca
sbc a,a
inc a
ld l,a
BuckeyeDude, do you have a routine smaller than this? These are 12 and 13 bytes depending on if they need the exchange.