2 Copyright © 2018, The AROS Development Team. All rights reserved.
6 #include <aros/libcall.h>
7 #include <aros/symbolsets.h>
8 #include <exec/execbase.h>
9 #include <libraries/stdc.h>
11 #include <proto/exec.h>
15 /* FPU math functions */
16 extern void AROS_SLIB_ENTRY(acos881
, STDC
, 120)(void);
17 extern void AROS_SLIB_ENTRY(log2881
, STDC
, 142)(void);
18 extern void AROS_SLIB_ENTRY(log10881
, STDC
, 140)(void);
19 extern void AROS_SLIB_ENTRY(log881
, STDC
, 139)(void);
20 extern void AROS_SLIB_ENTRY(remainder881
, STDC
, 167)(void);
21 extern void AROS_SLIB_ENTRY(sinh881
, STDC
, 131)(void);
22 extern void AROS_SLIB_ENTRY(sqrt881
, STDC
, 151)(void);
23 extern void AROS_SLIB_ENTRY(atan881
, STDC
, 122)(void);
24 extern void AROS_SLIB_ENTRY(ceil881
, STDC
, 156)(void);
25 extern void AROS_SLIB_ENTRY(copysign881
, STDC
, 169)(void);
26 extern void AROS_SLIB_ENTRY(cos881
, STDC
, 124)(void);
27 extern void AROS_SLIB_ENTRY(exp2881
, STDC
, 134)(void);
28 extern void AROS_SLIB_ENTRY(fabs881
, STDC
, 148)(void);
29 extern void AROS_SLIB_ENTRY(fdim881
, STDC
, 173)(void);
30 extern void AROS_SLIB_ENTRY(floor881
, STDC
, 157)(void);
31 extern void AROS_SLIB_ENTRY(fma881
, STDC
, 176)(void);
32 extern void AROS_SLIB_ENTRY(fmax881
, STDC
, 174)(void);
33 extern void AROS_SLIB_ENTRY(fmin881
, STDC
, 175)(void);
34 extern void AROS_SLIB_ENTRY(fpclassify881
, STDC
, 103)(void);
35 extern void AROS_SLIB_ENTRY(isfinite881
, STDC
, 105)(void);
36 extern void AROS_SLIB_ENTRY(isinf881
, STDC
, 108)(void);
37 extern void AROS_SLIB_ENTRY(isnan881
, STDC
, 111)(void);
38 extern void AROS_SLIB_ENTRY(isnormal881
, STDC
, 114)(void);
39 extern void AROS_SLIB_ENTRY(lround881
, STDC
, 163)(void);
40 extern void AROS_SLIB_ENTRY(nearbyint881
, STDC
, 158)(void);
41 extern void AROS_SLIB_ENTRY(round881
, STDC
, 162)(void);
42 extern void AROS_SLIB_ENTRY(signbit881
, STDC
, 118)(void);
43 extern void AROS_SLIB_ENTRY(sin881
, STDC
, 125)(void);
44 extern void AROS_SLIB_ENTRY(tan881
, STDC
, 126)(void);
45 extern void AROS_SLIB_ENTRY(tanh881
, STDC
, 132)(void);
46 extern void AROS_SLIB_ENTRY(trunc881
, STDC
, 165)(void);
47 extern void AROS_SLIB_ENTRY(asin881
, STDC
, 121)(void);
48 extern void AROS_SLIB_ENTRY(atanh881
, STDC
, 129)(void);
49 extern void AROS_SLIB_ENTRY(cosh881
, STDC
, 130)(void);
50 extern void AROS_SLIB_ENTRY(exp881
, STDC
, 133)(void);
51 extern void AROS_SLIB_ENTRY(fmod881
, STDC
, 166)(void);
52 extern void AROS_SLIB_ENTRY(hypot881
, STDC
, 149)(void);
54 static int STDCM68KMATH_Init(struct StdCBase
*StdCBase
)
56 if ((SysBase
->AttnFlags
& AFF_68060
) && (SysBase
->AttnFlags
& AFF_FPU
)) {
57 /* Override supported MC68060+ math functions */
58 __AROS_SETVECADDR(StdCBase
, 149, AROS_SLIB_ENTRY(hypot881
, STDC
, 149));
59 __AROS_SETVECADDR(StdCBase
, 151, AROS_SLIB_ENTRY(sqrt881
, STDC
, 151));
60 __AROS_SETVECADDR(StdCBase
, 156, AROS_SLIB_ENTRY(ceil881
, STDC
, 156));
61 __AROS_SETVECADDR(StdCBase
, 169, AROS_SLIB_ENTRY(copysign881
, STDC
, 169));
62 __AROS_SETVECADDR(StdCBase
, 148, AROS_SLIB_ENTRY(fabs881
, STDC
, 148));
63 __AROS_SETVECADDR(StdCBase
, 173, AROS_SLIB_ENTRY(fdim881
, STDC
, 173));
64 __AROS_SETVECADDR(StdCBase
, 157, AROS_SLIB_ENTRY(floor881
, STDC
, 157));
65 __AROS_SETVECADDR(StdCBase
, 176, AROS_SLIB_ENTRY(fma881
, STDC
, 176));
66 __AROS_SETVECADDR(StdCBase
, 174, AROS_SLIB_ENTRY(fmax881
, STDC
, 174));
67 __AROS_SETVECADDR(StdCBase
, 175, AROS_SLIB_ENTRY(fmin881
, STDC
, 175));
68 __AROS_SETVECADDR(StdCBase
, 103, AROS_SLIB_ENTRY(fpclassify881
, STDC
, 103));
69 __AROS_SETVECADDR(StdCBase
, 105, AROS_SLIB_ENTRY(isfinite881
, STDC
, 105));
70 __AROS_SETVECADDR(StdCBase
, 108, AROS_SLIB_ENTRY(isinf881
, STDC
, 108));
71 __AROS_SETVECADDR(StdCBase
, 111, AROS_SLIB_ENTRY(isnan881
, STDC
, 111));
72 __AROS_SETVECADDR(StdCBase
, 114, AROS_SLIB_ENTRY(isnormal881
, STDC
, 114));
73 __AROS_SETVECADDR(StdCBase
, 163, AROS_SLIB_ENTRY(lround881
, STDC
, 163));
74 __AROS_SETVECADDR(StdCBase
, 158, AROS_SLIB_ENTRY(nearbyint881
, STDC
, 158));
75 __AROS_SETVECADDR(StdCBase
, 162, AROS_SLIB_ENTRY(round881
, STDC
, 162));
76 __AROS_SETVECADDR(StdCBase
, 118, AROS_SLIB_ENTRY(signbit881
, STDC
, 118));
77 __AROS_SETVECADDR(StdCBase
, 165, AROS_SLIB_ENTRY(trunc881
, STDC
, 165));
79 else if ((SysBase
->AttnFlags
& AFF_68881
) || (SysBase
->AttnFlags
& AFF_68882
)) {
80 /* Override supported 68881/68882 math functions */
81 __AROS_SETVECADDR(StdCBase
, 120, AROS_SLIB_ENTRY(acos881
, STDC
, 120));
82 __AROS_SETVECADDR(StdCBase
, 142, AROS_SLIB_ENTRY(log2881
, STDC
, 142));
83 __AROS_SETVECADDR(StdCBase
, 140, AROS_SLIB_ENTRY(log10881
, STDC
, 140));
84 __AROS_SETVECADDR(StdCBase
, 139, AROS_SLIB_ENTRY(log881
, STDC
, 139));
85 __AROS_SETVECADDR(StdCBase
, 167, AROS_SLIB_ENTRY(remainder881
, STDC
, 167));
86 __AROS_SETVECADDR(StdCBase
, 131, AROS_SLIB_ENTRY(sinh881
, STDC
, 131));
87 __AROS_SETVECADDR(StdCBase
, 151, AROS_SLIB_ENTRY(sqrt881
, STDC
, 151));
88 __AROS_SETVECADDR(StdCBase
, 122, AROS_SLIB_ENTRY(atan881
, STDC
, 122));
89 __AROS_SETVECADDR(StdCBase
, 156, AROS_SLIB_ENTRY(ceil881
, STDC
, 156));
90 __AROS_SETVECADDR(StdCBase
, 169, AROS_SLIB_ENTRY(copysign881
, STDC
, 169));
91 __AROS_SETVECADDR(StdCBase
, 124, AROS_SLIB_ENTRY(cos881
, STDC
, 124));
92 __AROS_SETVECADDR(StdCBase
, 134, AROS_SLIB_ENTRY(exp2881
, STDC
, 134));
93 __AROS_SETVECADDR(StdCBase
, 148, AROS_SLIB_ENTRY(fabs881
, STDC
, 148));
94 __AROS_SETVECADDR(StdCBase
, 173, AROS_SLIB_ENTRY(fdim881
, STDC
, 173));
95 __AROS_SETVECADDR(StdCBase
, 157, AROS_SLIB_ENTRY(floor881
, STDC
, 157));
96 __AROS_SETVECADDR(StdCBase
, 176, AROS_SLIB_ENTRY(fma881
, STDC
, 176));
97 __AROS_SETVECADDR(StdCBase
, 174, AROS_SLIB_ENTRY(fmax881
, STDC
, 174));
98 __AROS_SETVECADDR(StdCBase
, 175, AROS_SLIB_ENTRY(fmin881
, STDC
, 175));
99 __AROS_SETVECADDR(StdCBase
, 103, AROS_SLIB_ENTRY(fpclassify881
, STDC
, 103));
100 __AROS_SETVECADDR(StdCBase
, 105, AROS_SLIB_ENTRY(isfinite881
, STDC
, 105));
101 __AROS_SETVECADDR(StdCBase
, 108, AROS_SLIB_ENTRY(isinf881
, STDC
, 108));
102 __AROS_SETVECADDR(StdCBase
, 111, AROS_SLIB_ENTRY(isnan881
, STDC
, 111));
103 __AROS_SETVECADDR(StdCBase
, 114, AROS_SLIB_ENTRY(isnormal881
, STDC
, 114));
104 __AROS_SETVECADDR(StdCBase
, 163, AROS_SLIB_ENTRY(lround881
, STDC
, 163));
105 __AROS_SETVECADDR(StdCBase
, 158, AROS_SLIB_ENTRY(nearbyint881
, STDC
, 158));
106 __AROS_SETVECADDR(StdCBase
, 162, AROS_SLIB_ENTRY(round881
, STDC
, 162));
107 __AROS_SETVECADDR(StdCBase
, 118, AROS_SLIB_ENTRY(signbit881
, STDC
, 118));
108 __AROS_SETVECADDR(StdCBase
, 125, AROS_SLIB_ENTRY(sin881
, STDC
, 125));
109 __AROS_SETVECADDR(StdCBase
, 126, AROS_SLIB_ENTRY(tan881
, STDC
, 126));
110 __AROS_SETVECADDR(StdCBase
, 132, AROS_SLIB_ENTRY(tanh881
, STDC
, 132));
111 __AROS_SETVECADDR(StdCBase
, 165, AROS_SLIB_ENTRY(trunc881
, STDC
, 165));
112 __AROS_SETVECADDR(StdCBase
, 121, AROS_SLIB_ENTRY(asin881
, STDC
, 121));
113 __AROS_SETVECADDR(StdCBase
, 129, AROS_SLIB_ENTRY(atanh881
, STDC
, 129));
114 __AROS_SETVECADDR(StdCBase
, 130, AROS_SLIB_ENTRY(cosh881
, STDC
, 130));
115 __AROS_SETVECADDR(StdCBase
, 133, AROS_SLIB_ENTRY(exp881
, STDC
, 133));
116 __AROS_SETVECADDR(StdCBase
, 166, AROS_SLIB_ENTRY(fmod881
, STDC
, 166));
117 __AROS_SETVECADDR(StdCBase
, 149, AROS_SLIB_ENTRY(hypot881
, STDC
, 149));
123 ADD2INITLIB(STDCM68KMATH_Init
, 0)