From d47c2cfb86a7d9746f7665a73fa25a724c4ce354 Mon Sep 17 00:00:00 2001 From: Nick Kledzik Date: Fri, 11 Sep 2009 20:02:01 +0000 Subject: start adding implementation of arm *vfp routines with test cases git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@81558 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Unit/adddf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/addsf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/divdf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/divsf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/muldf3vfp.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/mulsf3vfp.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/subdf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/subsf3vfp.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ test/Unit/test | 42 ++++++++++++++++++++++++++++++------------ 9 files changed, 402 insertions(+), 12 deletions(-) create mode 100644 test/Unit/adddf3vfp.c create mode 100644 test/Unit/addsf3vfp.c create mode 100644 test/Unit/divdf3vfp.c create mode 100644 test/Unit/divsf3vfp.c create mode 100644 test/Unit/muldf3vfp.c create mode 100644 test/Unit/mulsf3vfp.c create mode 100644 test/Unit/subdf3vfp.c create mode 100644 test/Unit/subsf3vfp.c (limited to 'test') diff --git a/test/Unit/adddf3vfp.c b/test/Unit/adddf3vfp.c new file mode 100644 index 00000000..c5bec05c --- /dev/null +++ b/test/Unit/adddf3vfp.c @@ -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 +#include +#include + + +#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; +} diff --git a/test/Unit/addsf3vfp.c b/test/Unit/addsf3vfp.c new file mode 100644 index 00000000..0a731a9b --- /dev/null +++ b/test/Unit/addsf3vfp.c @@ -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 +#include +#include + + +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; +} diff --git a/test/Unit/divdf3vfp.c b/test/Unit/divdf3vfp.c new file mode 100644 index 00000000..2ca382a5 --- /dev/null +++ b/test/Unit/divdf3vfp.c @@ -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 +#include +#include + + +#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; +} diff --git a/test/Unit/divsf3vfp.c b/test/Unit/divsf3vfp.c new file mode 100644 index 00000000..0dbae2fc --- /dev/null +++ b/test/Unit/divsf3vfp.c @@ -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 +#include +#include + + +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; +} diff --git a/test/Unit/muldf3vfp.c b/test/Unit/muldf3vfp.c new file mode 100644 index 00000000..a99d8e9a --- /dev/null +++ b/test/Unit/muldf3vfp.c @@ -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 +#include +#include + + +#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; +} diff --git a/test/Unit/mulsf3vfp.c b/test/Unit/mulsf3vfp.c new file mode 100644 index 00000000..f706c47e --- /dev/null +++ b/test/Unit/mulsf3vfp.c @@ -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 +#include +#include + + +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; +} diff --git a/test/Unit/subdf3vfp.c b/test/Unit/subdf3vfp.c new file mode 100644 index 00000000..ee5a4920 --- /dev/null +++ b/test/Unit/subdf3vfp.c @@ -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 +#include +#include + + +#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; +} diff --git a/test/Unit/subsf3vfp.c b/test/Unit/subsf3vfp.c new file mode 100644 index 00000000..f6853e3d --- /dev/null +++ b/test/Unit/subsf3vfp.c @@ -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 +#include +#include + + +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; +} diff --git a/test/Unit/test b/test/Unit/test index e5f540e9..0ec771c4 100755 --- a/test/Unit/test +++ b/test/Unit/test @@ -1,9 +1,17 @@ #!/usr/bin/env bash ARCHS='' +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 @@ for ARCH in $ARCHS; do # 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" -- cgit v1.2.3