[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 test/Unit/addsf3vfp.c test/Unit/divdf3vfp.c test/Unit/divsf3vfp.c test/Unit/muldf3vfp.c test/Unit/mulsf3vfp.c test/Unit/subdf3vfp.c test/Unit/subsf3vfp.c test/Unit/test

Nick Kledzik kledzik at apple.com
Fri Sep 11 13:02:02 PDT 2009


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"





More information about the llvm-commits mailing list