1799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===-- call_apsr.h - Helpers for ARM EABI floating point tests -----------===//
2799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
3799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
5799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This file is dual licensed under the MIT and the University of Illinois Open
6799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// Source Licenses. See LICENSE.TXT for details.
7799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
8799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===----------------------------------------------------------------------===//
9799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
10799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This file declares helpers for ARM EABI floating point tests for the
11799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// compiler_rt library.
12799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
13799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===----------------------------------------------------------------------===//
14799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
15799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#ifndef CALL_APSR_H
16799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#define CALL_APSR_H
17799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
18799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
19799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#error big endian support not implemented
20799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#endif
21799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
22799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarunion cpsr {
23799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    struct {
24799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        uint32_t filler: 28;
25799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        uint32_t v: 1;
26799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        uint32_t c: 1;
27799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        uint32_t z: 1;
28799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        uint32_t n: 1;
29799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    } flags;
30799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    uint32_t value;
31799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar};
32799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
33799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarextern __attribute__((pcs("aapcs")))
34799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainaruint32_t call_apsr_f(float a, float b, __attribute__((pcs("aapcs"))) void (*fn)(float, float));
35799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
36799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarextern __attribute__((pcs("aapcs")))
37799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainaruint32_t call_apsr_d(double a, double b, __attribute__((pcs("aapcs"))) void (*fn)(double, double));
38799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
39799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#endif // CALL_APSR_H
40