| //===-- call_apsr.h - Helpers for ARM EABI floating point tests -----------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file declares helpers for ARM EABI floating point tests for the | |
| // compiler_rt library. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef CALL_APSR_H | |
| #define CALL_APSR_H | |
| #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ | |
| #error big endian support not implemented | |
| #endif | |
| union cpsr { | |
| struct { | |
| uint32_t filler: 28; | |
| uint32_t v: 1; | |
| uint32_t c: 1; | |
| uint32_t z: 1; | |
| uint32_t n: 1; | |
| } flags; | |
| uint32_t value; | |
| }; | |
| extern __attribute__((pcs("aapcs"))) | |
| uint32_t call_apsr_f(float a, float b, __attribute__((pcs("aapcs"))) void (*fn)(float, float)); | |
| extern __attribute__((pcs("aapcs"))) | |
| uint32_t call_apsr_d(double a, double b, __attribute__((pcs("aapcs"))) void (*fn)(double, double)); | |
| #endif // CALL_APSR_H |