[LLVMdev] compiler-rt's arm vfp o<= implementation
Nick Lewycky
nlewycky at google.com
Wed Apr 7 22:50:56 PDT 2010
The implementation of an float ordered <= looks buggy, but maybe I'm not
reading the assembly right. This is lesf2vfp.S in compiler-rt, and it has
this code:
// extern int __lesf2vfp(float a, float b);
//
// Returns one iff a <= b and neither is NaN.
// Uses Darwin calling convention where single precision arguments are passsed
// like 32-bit ints
//
DEFINE_COMPILERRT_FUNCTION(__lesf2vfp)
fmsr s14, r0 // move from GPR 0 to float register
fmsr s15, r1 // move from GPR 1 to float register
fcmps s14, s15
fmstat
movls r0, #1 // set result register to 1 if equal
movhi r0, #0
bx lr
If I read this right, the high bits of r0 are always cleared (by the movhi)
while the low bits are conditionally set to 1 (by the movls), but there's
nothing to clear the r0's low bits in the false case. Is this a bug or have
I misunderstood the assembly?
Nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100407/d2a2a64b/attachment.html>
More information about the llvm-dev
mailing list