[LLVMdev] compiler-rt's arm vfp o<= implementation

Rodolph Perfetta rodolph.perfetta at arm.com
Thu Apr 8 02:28:39 PDT 2010

movhi means mov if unsigned Higher

movls means mov if unsigned Lower or Same


so depending on the comparison result r0 holds 1 or 0




From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of Nick Lewycky
Sent: 08 April 2010 06:51
To: LLVM Developers Mailing List
Cc: Steve Canon
Subject: [LLVMdev] compiler-rt's arm vfp o<= implementation


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
// like 32-bit ints
       fmsr    s14, r0     // move from GPR 0 to float register
       fmsr    s15, r1     // move from GPR 1 to float register
       fcmps   s14, s15
       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?




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100408/225d9739/attachment.html>

More information about the llvm-dev mailing list