daifpu_hwsw.h
2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef _DAIFPU_HWSW_SOFTFLOAT_WRAPPER_HEADER_FILE_
#define _DAIFPU_HWSW_SOFTFLOAT_WRAPPER_HEADER_FILE_
/*
* Bitmaps correspond with selection of soft-/hard-float operations in LLVM
*
* defaultly all macros (SOFT_FOPS_HALF, SOFT_FOPS_SINGLE, SOFT_FOPS_DOUBLE, ...)
* are zero. It means all operations are in the hardware
*
*/
/* masks for SOFT_FOPS_xxx macros */
#define DAIFPU_SOFT_FPOP_ADD (0x00000001) /* FPOP_ADD */
#define DAIFPU_SOFT_FPOP_SUB (0x00000002) /* FPOP_SUB */
#define DAIFPU_SOFT_FPOP_MUL (0x00000004) /* FPOP_MUL */
#define DAIFPU_SOFT_FPOP_DIV (0x00000008) /* FPOP_DIV */
#define DAIFPU_SOFT_FPOP_MULEX (0x00000010) /* FPOP_MULEX */
#define DAIFPU_SOFT_FPOP_SQRT (0x00000020) /* FPOP_SQRT */
#define DAIFPU_SOFT_FPOP_CMP (0x00000040) /* FPOP_CMP */
#define DAIFPU_SOFT_FPOP_CI2F (0x00000080) /* FPOP_CI2F */
#define DAIFPU_SOFT_FPOP_CF2I (0x00000100) /* FPOP_CF2I */
#define DAIFPU_SOFT_FPOP_CFUP (0x00000200) /* FPOP_CFUP */
#define DAIFPU_SOFT_FPOP_CFDN (0x00000400) /* FPOP_CFDN */
#define DAIFPU_SOFT_FPOP_ABS (0x00000800) /* FPOP_ABS */
#define DAIFPU_SOFT_FPOP_PACK (0x00001000) /* FPOP_PACK */
#define DAIFPU_SOFT_FPOP_MOV (0x00002000) /* FPOP_MOV */
#define DAIFPU_SOFT_FPOP_NEG (0x00004000) /* FPOP_NEG */
#define DAIFPU_SOFT_MASK (0x00007FFF) /* mask of all operations */
#ifndef SOFT_FOPS_HALF
#if SOFT_FLOAT
#define SOFT_FOPS_HALF (0xFFFFFFFF)
#else
#define SOFT_FOPS_HALF (0)
#endif /* SOFT_FLOAT */
#endif /* SOFT_FOPS_HALF */
#ifndef SOFT_FOPS_SINGLE
#if SOFT_FLOAT
#define SOFT_FOPS_SINGLE (0xFFFFFFFF)
#else
#define SOFT_FOPS_SINGLE (0)
#endif /* SOFT_FLOAT */
#endif /* SOFT_FOPS_SINGLE */
#ifndef SOFT_FOPS_DOUBLE
#if SOFT_FLOAT
#define SOFT_FOPS_DOUBLE (0xFFFFFFFF)
#else
#define SOFT_FOPS_DOUBLE (0)
#endif /* SOFT_FLOAT */
#endif /* SOFT_FOPS_DOUBLE */
#ifndef FP_PACKEDHALF_ENABLED
#if !(SOFT_FLOAT) && (~SOFT_FOPS_HALF & DAIFPU_SOFT_MASK) // not in soft-float and at least one half operation in hardware
#define FP_PACKEDHALF_ENABLED (1)
#else
#define FP_PACKEDHALF_ENABLED (0)
#endif /* SOFT_FLOAT */
#endif /* FP_PACKEDHALF_ENABLED */
#ifndef FP_PACKEDSINGLE_ENABLED
#if !(SOFT_FLOAT) && (~SOFT_FOPS_SINGLE & DAIFPU_SOFT_MASK) // not in soft-float and at least one single operation in hardware
#define FP_PACKEDSINGLE_ENABLED (1)
#else
#define FP_PACKEDSINGLE_ENABLED (0)
#endif /* SOFT_FLOAT */
#endif /* FP_PACKEDSINGLE_ENABLED */
/* check consistency with SOFT_FLOAT */
#if SOFT_FLOAT && (~SOFT_FOPS_SINGLE || ~SOFT_FOPS_DOUBLE || ~SOFT_FOPS_HALF)
#warning Inconsistency in soft-float and soft-fp-XXXX options
#endif
#endif /* _DAIFPU_HWSW_SOFTFLOAT_WRAPPER_HEADER_FILE_ */