[llvm-commits] [compiler-rt] r81558 - in /compiler-rt/trunk: lib/arm/adddf3vfp.S lib/arm/addsf3vfp.S lib/arm/divdf3vfp.S lib/arm/divsf3vfp.S lib/arm/muldf3vfp.S lib/arm/mulsf3vfp.S lib/arm/subdf3vfp.S lib/arm/subsf3vfp.S test/Unit/adddf3vfp.c tes
Nick Kledzik
kledzik at apple.com
Fri Sep 11 14:02:04 PDT 2009
I actually created the assembly by running the compiler on the
equivalent C code.
The rationale to "freeze dry" the assembly code is that the only
reason these helper functions even exist is that there are cases (such
as thumb1) where the compiler cannot directly generate code to
implement this functionality, and must fallback to calling a helper
function. So we don't want the libcompiler-rt to ever get built in a
mode where the compiler has to fallback and you wind up with an
infinite recursion function.
-Nick
On Sep 11, 2009, at 1:54 PM, Sandeep Patel wrote:
> Why are these in asm? LLVM should generate these correctly from C.
>
> deep
>
> On Fri, Sep 11, 2009 at 8:02 PM, Nick Kledzik<kledzik at apple.com>
> wrote:
>> Author: kledzik
>> Date: Fri Sep 11 15:02:01 2009
>> New Revision: 81558
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=81558&view=rev
>> Log:
>> start adding implementation of arm *vfp routines with test cases
>>
>> Added:
>> compiler-rt/trunk/lib/arm/adddf3vfp.S
>> compiler-rt/trunk/lib/arm/addsf3vfp.S
>> compiler-rt/trunk/lib/arm/divdf3vfp.S
>> compiler-rt/trunk/lib/arm/divsf3vfp.S
>> compiler-rt/trunk/lib/arm/muldf3vfp.S
>> compiler-rt/trunk/lib/arm/mulsf3vfp.S
>> compiler-rt/trunk/lib/arm/subdf3vfp.S
>> compiler-rt/trunk/lib/arm/subsf3vfp.S
>> compiler-rt/trunk/test/Unit/adddf3vfp.c
>> compiler-rt/trunk/test/Unit/addsf3vfp.c
>> compiler-rt/trunk/test/Unit/divdf3vfp.c
>> compiler-rt/trunk/test/Unit/divsf3vfp.c
>> compiler-rt/trunk/test/Unit/muldf3vfp.c
>> compiler-rt/trunk/test/Unit/mulsf3vfp.c
>> compiler-rt/trunk/test/Unit/subdf3vfp.c
>> compiler-rt/trunk/test/Unit/subsf3vfp.c
>> Modified:
>> compiler-rt/trunk/test/Unit/test
>>
>> Added: compiler-rt/trunk/lib/arm/adddf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/adddf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/adddf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/adddf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- adddf3vfp.S - Implement adddf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// double __adddf3vfp(double a, double b) { return a + b; }
>> +//
>> +// Adds two double precision floating point numbers using the Darwin
>> +// calling convention where double arguments are passsed in GPR
>> pairs
>> +//
>> + .globl ___adddf3vfp
>> +___adddf3vfp:
>> + fmdrr d6, r0, r1 // move first param from r0/
>> r1 pair into d6
>> + fmdrr d7, r2, r3 // move second param from
>> r2/r3 pair into d7
>> + faddd d6, d6, d7
>> + fmrrd r0, r1, d6 // move result back to r0/
>> r1 pair
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/addsf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/addsf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/addsf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/addsf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- addsf3vfp.S - Implement addsf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern float __addsf3vfp(float a, float b);
>> +//
>> +// Adds two single precision floating point numbers using the Darwin
>> +// calling convention where single arguments are passsed in GPRs
>> +//
>> + .globl ___addsf3vfp
>> +___addsf3vfp:
>> + fmsr s14, r0 // move first param from r0 into
>> float register
>> + fmsr s15, r1 // move second param from r1 into
>> float register
>> + fadds s14, s14, s15
>> + fmrs r0, s14 // move result back to r0
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/divdf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/divdf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/divdf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/divdf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- divdf3vfp.S - Implement divdf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern double __divdf3vfp(double a, double b);
>> +//
>> +// Divides two double precision floating point numbers using the
>> Darwin
>> +// calling convention where double arguments are passsed in GPR
>> pairs
>> +//
>> + .globl ___divdf3vfp
>> +___divdf3vfp:
>> + fmdrr d6, r0, r1 // move first param from r0/
>> r1 pair into d6
>> + fmdrr d7, r2, r3 // move second param from
>> r2/r3 pair into d7
>> + fdivd d5, d6, d7
>> + fmrrd r0, r1, d5 // move result back to r0/
>> r1 pair
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/divsf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/divsf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/divsf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/divsf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- divsf3vfp.S - Implement divsf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern float __divsf3vfp(float a, float b);
>> +//
>> +// Divides two single precision floating point numbers using the
>> Darwin
>> +// calling convention where single arguments are passsed like 32-
>> bit ints.
>> +//
>> + .globl ___divsf3vfp
>> +___divsf3vfp:
>> + fmsr s14, r0 // move first param from r0 into
>> float register
>> + fmsr s15, r1 // move second param from r1 into
>> float register
>> + fdivs s13, s14, s15
>> + fmrs r0, s13 // move result back to r0
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/muldf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/muldf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/muldf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/muldf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- muldf3vfp.S - Implement muldf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern double __muldf3vfp(double a, double b);
>> +//
>> +// Multiplies two double precision floating point numbers using
>> the Darwin
>> +// calling convention where double arguments are passsed in GPR
>> pairs
>> +//
>> + .globl ___muldf3vfp
>> +___muldf3vfp:
>> + fmdrr d6, r0, r1 // move first param from r0/
>> r1 pair into d6
>> + fmdrr d7, r2, r3 // move second param from
>> r2/r3 pair into d7
>> + fmuld d6, d6, d7
>> + fmrrd r0, r1, d6 // move result back to r0/
>> r1 pair
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/mulsf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/mulsf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/mulsf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/mulsf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- mulsf3vfp.S - Implement mulsf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern float __mulsf3vfp(float a, float b);
>> +//
>> +// Multiplies two single precision floating point numbers using
>> the Darwin
>> +// calling convention where single arguments are passsed like 32-
>> bit ints.
>> +//
>> + .globl ___mulsf3vfp
>> +___mulsf3vfp:
>> + fmsr s14, r0 // move first param from r0 into
>> float register
>> + fmsr s15, r1 // move second param from r1 into
>> float register
>> + fmuls s13, s14, s15
>> + fmrs r0, s13 // move result back to r0
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/subdf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/subdf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/subdf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/subdf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,23 @@
>> +//===-- subdf3vfp.S - Implement subdf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern double __subdf3vfp(double a, double b);
>> +//
>> +// Returns difference between two double precision floating point
>> numbers using
>> +// the Darwin calling convention where double arguments are
>> passsed in GPR pairs
>> +//
>> + .globl ___subdf3vfp
>> +___subdf3vfp:
>> + fmdrr d6, r0, r1 // move first param from r0/
>> r1 pair into d6
>> + fmdrr d7, r2, r3 // move second param from
>> r2/r3 pair into d7
>> + fsubd d6, d6, d7
>> + fmrrd r0, r1, d6 // move result back to r0/
>> r1 pair
>> + bx lr
>>
>> Added: compiler-rt/trunk/lib/arm/subsf3vfp.S
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/arm/subsf3vfp.S?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/lib/arm/subsf3vfp.S (added)
>> +++ compiler-rt/trunk/lib/arm/subsf3vfp.S Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,24 @@
>> +//===-- subsf3vfp.S - Implement subsf3vfp
>> ---------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +
>> +//
>> +// extern float __subsf3vfp(float a, float b);
>> +//
>> +// Returns the difference between two single precision floating
>> point numbers
>> +// using the Darwin calling convention where single arguments are
>> passsed
>> +// like 32-bit ints.
>> +//
>> + .globl ___subsf3vfp
>> +___subsf3vfp:
>> + fmsr s14, r0 // move first param from r0 into
>> float register
>> + fmsr s15, r1 // move second param from r1 into
>> float register
>> + fsubs s14, s14, s15
>> + fmrs r0, s14 // move result back to r0
>> + bx lr
>>
>> Added: compiler-rt/trunk/test/Unit/adddf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/adddf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/adddf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/adddf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- adddf3vfp_test.c - Test __adddf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __adddf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +#if __arm__
>> +extern double __adddf3vfp(double a, double b);
>> +
>> +int test__adddf3vfp(double a, double b)
>> +{
>> + double actual = __adddf3vfp(a, b);
>> + double expected = a + b;
>> + if (actual != expected)
>> + printf("error in test__adddf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__adddf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__adddf3vfp(HUGE_VAL, HUGE_VAL))
>> + return 1;
>> + if (test__adddf3vfp(0.0, HUGE_VAL))
>> + return 1;
>> + if (test__adddf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/addsf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/addsf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/addsf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/addsf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- addsf3vfp_test.c - Test __addsf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __addsf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +extern float __addsf3vfp(float a, float b);
>> +
>> +#if __arm__
>> +int test__addsf3vfp(float a, float b)
>> +{
>> + float actual = __addsf3vfp(a, b);
>> + float expected = a + b;
>> + if (actual != expected)
>> + printf("error in test__addsf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__addsf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__addsf3vfp(HUGE_VALF, HUGE_VALF))
>> + return 1;
>> + if (test__addsf3vfp(0.0, HUGE_VALF))
>> + return 1;
>> + if (test__addsf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/divdf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/divdf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/divdf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/divdf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- divdf3vfp_test.c - Test __divdf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __divdf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +#if __arm__
>> +extern double __divdf3vfp(double a, double b);
>> +
>> +int test__divdf3vfp(double a, double b)
>> +{
>> + double actual = __divdf3vfp(a, b);
>> + double expected = a / b;
>> + if (actual != expected)
>> + printf("error in test__divdf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__divdf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__divdf3vfp(12345.678, 1.23))
>> + return 1;
>> + if (test__divdf3vfp(-10.0, 0.25))
>> + return 1;
>> + if (test__divdf3vfp(10.0, -2.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/divsf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/divsf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/divsf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/divsf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- divsf3vfp_test.c - Test __divsf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __divsf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +extern float __divsf3vfp(float a, float b);
>> +
>> +#if __arm__
>> +int test__divsf3vfp(float a, float b)
>> +{
>> + float actual = __divsf3vfp(a, b);
>> + float expected = a / b;
>> + if (actual != expected)
>> + printf("error in test__divsf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__divsf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__divsf3vfp(12345.678, 1.23))
>> + return 1;
>> + if (test__divsf3vfp(0.0, HUGE_VALF))
>> + return 1;
>> + if (test__divsf3vfp(10.0, -2.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/muldf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/muldf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/muldf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/muldf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,48 @@
>> +//===-- muldf3vfp_test.c - Test __muldf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __muldf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +#if __arm__
>> +extern double __muldf3vfp(double a, double b);
>> +
>> +int test__muldf3vfp(double a, double b)
>> +{
>> + double actual = __muldf3vfp(a, b);
>> + double expected = a * b;
>> + if (actual != expected)
>> + printf("error in test__muldf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__muldf3vfp(0.5, 10.0))
>> + return 1;
>> + if (test__muldf3vfp(-0.5, -2.0))
>> + return 1;
>> + if (test__muldf3vfp(HUGE_VALF, 0.25))
>> + return 1;
>> + if (test__muldf3vfp(-0.125, HUGE_VALF))
>> + return 1;
>> + if (test__muldf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/mulsf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/mulsf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/mulsf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/mulsf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,48 @@
>> +//===-- mulsf3vfp_test.c - Test __mulsf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __mulsf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +extern float __mulsf3vfp(float a, float b);
>> +
>> +#if __arm__
>> +int test__mulsf3vfp(float a, float b)
>> +{
>> + float actual = __mulsf3vfp(a, b);
>> + float expected = a * b;
>> + if (actual != expected)
>> + printf("error in test__mulsf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__mulsf3vfp(0.5, 10.0))
>> + return 1;
>> + if (test__mulsf3vfp(-0.5, -2.0))
>> + return 1;
>> + if (test__mulsf3vfp(HUGE_VALF, 0.25))
>> + return 1;
>> + if (test__mulsf3vfp(-0.125, HUGE_VALF))
>> + return 1;
>> + if (test__mulsf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/subdf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/subdf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/subdf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/subdf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- subdf3vfp_test.c - Test __subdf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __subdf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +#if __arm__
>> +extern double __subdf3vfp(double a, double b);
>> +
>> +int test__subdf3vfp(double a, double b)
>> +{
>> + double actual = __subdf3vfp(a, b);
>> + double expected = a - b;
>> + if (actual != expected)
>> + printf("error in test__subdf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__subdf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__subdf3vfp(1234.567, 765.4321))
>> + return 1;
>> + if (test__subdf3vfp(-123.0, -678.0))
>> + return 1;
>> + if (test__subdf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Added: compiler-rt/trunk/test/Unit/subsf3vfp.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/subsf3vfp.c?rev=81558&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/subsf3vfp.c (added)
>> +++ compiler-rt/trunk/test/Unit/subsf3vfp.c Fri Sep 11 15:02:01 2009
>> @@ -0,0 +1,46 @@
>> +//===-- subsf3vfp_test.c - Test __subsf3vfp
>> -------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file tests __subsf3vfp for the compiler_rt library.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <math.h>
>> +
>> +
>> +extern float __subsf3vfp(float a, float b);
>> +
>> +#if __arm__
>> +int test__subsf3vfp(float a, float b)
>> +{
>> + float actual = __subsf3vfp(a, b);
>> + float expected = a - b;
>> + if (actual != expected)
>> + printf("error in test__subsf3vfp(%f, %f) = %f, expected %f
>> \n",
>> + a, b, actual, expected);
>> + return actual != expected;
>> +}
>> +#endif
>> +
>> +int main()
>> +{
>> +#if __arm__
>> + if (test__subsf3vfp(1.0, 1.0))
>> + return 1;
>> + if (test__subsf3vfp(1234.567, 765.4321))
>> + return 1;
>> + if (test__subsf3vfp(-123.0, -678.0))
>> + return 1;
>> + if (test__subsf3vfp(0.0, -0.0))
>> + return 1;
>> +#endif
>> + return 0;
>> +}
>>
>> Modified: compiler-rt/trunk/test/Unit/test
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/Unit/test?rev=81558&r1=81557&r2=81558&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- compiler-rt/trunk/test/Unit/test (original)
>> +++ compiler-rt/trunk/test/Unit/test Fri Sep 11 15:02:01 2009
>> @@ -1,9 +1,17 @@
>> #!/usr/bin/env bash
>>
>> ARCHS='<host>'
>> +REMOTE=0
>> if test `uname` = "Darwin"; then
>> - ARCHS="i386 x86_64 ppc"
>> - LIBS="-lSystem"
>> + if test "$1" = "armv6"; then
>> + ARCHS="armv6"
>> + LIBS="-lSystem"
>> + REMOTE=1
>> + mkdir -p remote
>> + else
>> + ARCHS="i386 x86_64 ppc"
>> + LIBS="-lSystem"
>> + fi
>> else
>> LIBS="-lc -lm"
>> fi
>> @@ -30,20 +38,30 @@
>> # this test requires an extra compiler option
>> EXTRA="-fnested-functions"
>> fi
>> - if gcc $CFLAGS $FILE ../../Release/libcompiler_rt.Optimized.a
>> $LIBS $EXTRA
>> - then
>> - echo "Testing $FILE for $ARCH"
>> - if ./a.out
>> + if test $REMOTE
>> + then
>> + if gcc $CFLAGS $FILE ../../Release/
>> libcompiler_rt.Optimized.a $LIBS $EXTRA -o ./remote/$FILE.exe
>> then
>> - rm ./a.out
>> + echo "Built $FILE.exe for $ARCH"
>> + else
>> + echo "$FILE failed to compile"
>> + fi
>> + else
>> + if gcc $CFLAGS $FILE ../../Release/
>> libcompiler_rt.Optimized.a $LIBS $EXTRA
>> + then
>> + echo "Testing $FILE for $ARCH"
>> + if ./a.out
>> + then
>> + rm ./a.out
>> + else
>> + echo "fail"
>> + exit 1
>> + fi
>> else
>> - echo "fail"
>> + echo "$FILE failed to compile"
>> exit 1
>> fi
>> - else
>> - echo "$FILE failed to compile"
>> - exit 1
>> - fi
>> + fi
>> done
>> done
>> echo "pass"
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
More information about the llvm-commits
mailing list