Hi Nicolas,
I think your patch doesn't quite work as expected:
@@ -238,9 +238,10 @@ LSYM(Lad_a):
movs ip, ip, lsl #1
adcs xl, xl, xl
adc xh, xh, xh
- tst xh, #0x00100000
- sub r4, r4, #1
- bne LSYM(Lad_e)
+ subs r4, r4, #1
+ do_it hs
+ tsths xh, #0x00100000
+ bhi LSYM(Lad_e)
If the exponent in r4 is zero, the carry bit will be clear, so we don't execute
the tsths
and fallthrough (the denormal will be normalized and then denormalized again,
but
that's so rare it doesn't matter really).
However if r4 is non-zero, the carry will be set, and the tsths will be
executed. This
clears the carry and sets the Z flag based on bit 20. We will now also always
fallthrough rather than take the branch if bit 20 is non-zero. This may still
give the
correct answer, however it would add considerable extra overhead... I think
using
a cmp rather than tst would work.
Wilco