aeabi_cfcmple_test.c revision 799172d60d32feb1acba1a6867f3a9c39a999e5c
16cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK//===-- aeabi_cfcmple.c - Test __aeabi_cfcmple and __aeabi_cfrcmple -------===// 22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project// 32228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project// The LLVM Compiler Infrastructure 46cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// 56cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// This file is dual licensed under the MIT and the University of Illinois Open 62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project// Source Licenses. See LICENSE.TXT for details. 72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project// 86cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK//===----------------------------------------------------------------------===// 96cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// 106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// This file tests __aeabi_cfcmple and __aeabi_cfrcmple for the compiler_rt 116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// library. 126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK// 136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK//===----------------------------------------------------------------------===// 146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <stdint.h> 166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <stdio.h> 176cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <stdlib.h> 186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include <math.h> 196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include "call_apsr.h" 216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 226cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if __arm__ 236cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 246cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKextern __attribute__((pcs("aapcs"))) void __aeabi_cfcmple(float a, float b); 256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKextern __attribute__((pcs("aapcs"))) void __aeabi_cfrcmple(float a, float b); 266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKint test__aeabi_cfcmple(float a, float b, int expected) 286cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK{ 296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK int32_t cpsr_value = call_apsr_f(a, b, __aeabi_cfcmple); 306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK int32_t r_cpsr_value = call_apsr_f(b, a, __aeabi_cfrcmple); 316cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (cpsr_value != r_cpsr_value) { 332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project printf("error: __aeabi_cfcmple(%f, %f) != __aeabi_cfrcmple(%f, %f)\n", a, b, b, a); 342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 366cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 376cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK int expected_z, expected_c; 386cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (expected == -1) { 392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project expected_z = 0; 406cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK expected_c = 0; 416cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } else if (expected == 0) { 422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project expected_z = 1; 436cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK expected_c = 1; 446cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } else { 456cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK // a or b is NaN, or a > b 466cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK expected_z = 0; 472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project expected_c = 1; 482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK union cpsr cpsr = { .value = cpsr_value }; 512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (expected_z != cpsr.flags.z || expected_c != cpsr.flags.c) { 526cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK printf("error in __aeabi_cfcmple(%f, %f) => (Z = %d, C = %d), expected (Z = %d, C = %d)\n", 536cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK a, b, cpsr.flags.z, cpsr.flags.c, expected_z, expected_c); 542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 556cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } 566cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 576cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK cpsr.value = r_cpsr_value; 586cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (expected_z != cpsr.flags.z || expected_c != cpsr.flags.c) { 596cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK printf("error in __aeabi_cfrcmple(%f, %f) => (Z = %d, C = %d), expected (Z = %d, C = %d)\n", 602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project a, b, cpsr.flags.z, cpsr.flags.c, expected_z, expected_c); 612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 636cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 0; 646cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK} 656cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif 666cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint main() 686cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK{ 696cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#if __arm__ 702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (test__aeabi_cfcmple(1.0, 1.0, 0)) 712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (test__aeabi_cfcmple(1234.567, 765.4321, 1)) 736cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 1; 746cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (test__aeabi_cfcmple(765.4321, 1234.567, -1)) 756cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 1; 766cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (test__aeabi_cfcmple(-123.0, -678.0, 1)) 776cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 1; 786cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (test__aeabi_cfcmple(-678.0, -123.0, -1)) 796cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 1; 806cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (test__aeabi_cfcmple(0.0, -0.0, 0)) 816cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return 1; 826cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (test__aeabi_cfcmple(1.0, NAN, 1)) 832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (test__aeabi_cfcmple(NAN, 1.0, 1)) 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project if (test__aeabi_cfcmple(NAN, NAN, 1)) 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 1; 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#else 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project printf("skipped\n"); 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return 0; 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 936cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK