[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