diff options
Diffstat (limited to 'lib/builtins/arm/eqsf2vfp.S')
| -rw-r--r-- | lib/builtins/arm/eqsf2vfp.S | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/lib/builtins/arm/eqsf2vfp.S b/lib/builtins/arm/eqsf2vfp.S new file mode 100644 index 000000000000..a318b336ae9e --- /dev/null +++ b/lib/builtins/arm/eqsf2vfp.S @@ -0,0 +1,29 @@ +//===-- eqsf2vfp.S - Implement eqsf2vfp -----------------------------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "../assembly.h" + +// +// extern int __eqsf2vfp(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 +// +	.syntax unified +	.p2align 2 +DEFINE_COMPILERRT_FUNCTION(__eqsf2vfp) +	vmov	s14, r0     // move from GPR 0 to float register +	vmov	s15, r1	    // move from GPR 1 to float register +	vcmp.f32 s14, s15 +	vmrs	apsr_nzcv, fpscr +	moveq	r0, #1      // set result register to 1 if equal +	movne	r0, #0 +	bx	lr +END_COMPILERRT_FUNCTION(__eqsf2vfp) | 
