]>
Commit | Line | Data |
---|---|---|
3ac1f813 EC |
1 | BUILD_DIR := $(CURDIR)/../.. |
2 | ||
3 | include $(BUILD_DIR)/config-host.mak | |
4 | include $(SRC_PATH)/rules.mak | |
5 | ||
6 | SOFTFLOAT_DIR := $(SRC_PATH)/tests/fp/berkeley-softfloat-3 | |
7 | TESTFLOAT_DIR := $(SRC_PATH)/tests/fp/berkeley-testfloat-3 | |
8 | ||
9 | SF_SOURCE_DIR := $(SOFTFLOAT_DIR)/source | |
10 | SF_INCLUDE_DIR := $(SOFTFLOAT_DIR)/source/include | |
11 | # we could use any specialize here, it doesn't matter | |
12 | SF_SPECIALIZE := 8086-SSE | |
13 | SF_SPECIALIZE_DIR := $(SF_SOURCE_DIR)/$(SF_SPECIALIZE) | |
14 | ||
15 | TF_SOURCE_DIR := $(TESTFLOAT_DIR)/source | |
16 | ||
17 | $(call set-vpath, $(SRC_PATH)/fpu $(SRC_PATH)/tests/fp) | |
18 | ||
19 | LIBQEMUUTIL := $(BUILD_DIR)/libqemuutil.a | |
20 | ||
21 | # Use this variable to be clear when we pull in our own implementation | |
22 | # We build the object with a default rule thanks to the vpath above | |
23 | QEMU_SOFTFLOAT_OBJ := softfloat.o | |
24 | ||
25 | QEMU_INCLUDES += -I$(SRC_PATH)/tests/fp | |
26 | QEMU_INCLUDES += -I$(SF_INCLUDE_DIR) | |
27 | QEMU_INCLUDES += -I$(SF_SPECIALIZE_DIR) | |
28 | QEMU_INCLUDES += -I$(TF_SOURCE_DIR) | |
29 | ||
30 | # work around TARGET_* poisoning | |
31 | QEMU_CFLAGS += -DHW_POISON_H | |
6c49b06d EC |
32 | # define a target to match testfloat's implementation-defined choices, such as |
33 | # whether to raise the invalid flag when dealing with NaNs in muladd. | |
34 | QEMU_CFLAGS += -DTARGET_ARM | |
3ac1f813 EC |
35 | |
36 | # capstone has a platform.h file that clashes with softfloat's | |
37 | QEMU_CFLAGS := $(filter-out %capstone, $(QEMU_CFLAGS)) | |
38 | ||
39 | # softfloat defines | |
40 | SF_OPTS := | |
41 | SF_OPTS += -DSOFTFLOAT_ROUND_ODD | |
42 | SF_OPTS += -DINLINE_LEVEL=5 | |
43 | SF_OPTS += -DSOFTFLOAT_FAST_DIV32TO16 | |
44 | SF_OPTS += -DSOFTFLOAT_FAST_DIV64TO32 | |
45 | SF_OPTS += -DSOFTFLOAT_FAST_INT64 | |
46 | QEMU_CFLAGS += $(SF_OPTS) | |
47 | ||
48 | # silence the build of softfloat objects | |
49 | SF_CFLAGS += -Wno-missing-prototypes | |
50 | SF_CFLAGS += -Wno-redundant-decls | |
51 | SF_CFLAGS += -Wno-return-type | |
52 | SF_CFLAGS += -Wno-error | |
53 | ||
54 | # testfloat defines | |
55 | TF_OPTS := | |
56 | TF_OPTS += -DFLOAT16 | |
57 | TF_OPTS += -DFLOAT64 | |
58 | TF_OPTS += -DEXTFLOAT80 | |
59 | TF_OPTS += -DFLOAT128 | |
60 | TF_OPTS += -DFLOAT_ROUND_ODD | |
61 | TF_OPTS += -DLONG_DOUBLE_IS_EXTFLOAT80 | |
62 | QEMU_CFLAGS += $(TF_OPTS) | |
63 | ||
64 | # silence the build of testfloat objects | |
65 | TF_CFLAGS := | |
66 | TF_CFLAGS += -Wno-strict-prototypes | |
67 | TF_CFLAGS += -Wno-unknown-pragmas | |
68 | TF_CFLAGS += -Wno-discarded-qualifiers | |
69 | TF_CFLAGS += -Wno-maybe-uninitialized | |
70 | TF_CFLAGS += -Wno-missing-prototypes | |
71 | TF_CFLAGS += -Wno-return-type | |
72 | TF_CFLAGS += -Wno-unused-function | |
73 | TF_CFLAGS += -Wno-error | |
74 | ||
75 | # softfloat objects | |
76 | SF_OBJS_PRIMITIVES := | |
77 | SF_OBJS_PRIMITIVES += s_eq128.o | |
78 | SF_OBJS_PRIMITIVES += s_le128.o | |
79 | SF_OBJS_PRIMITIVES += s_lt128.o | |
80 | SF_OBJS_PRIMITIVES += s_shortShiftLeft128.o | |
81 | SF_OBJS_PRIMITIVES += s_shortShiftRight128.o | |
82 | SF_OBJS_PRIMITIVES += s_shortShiftRightJam64.o | |
83 | SF_OBJS_PRIMITIVES += s_shortShiftRightJam64Extra.o | |
84 | SF_OBJS_PRIMITIVES += s_shortShiftRightJam128.o | |
85 | SF_OBJS_PRIMITIVES += s_shortShiftRightJam128Extra.o | |
86 | SF_OBJS_PRIMITIVES += s_shiftRightJam32.o | |
87 | SF_OBJS_PRIMITIVES += s_shiftRightJam64.o | |
88 | SF_OBJS_PRIMITIVES += s_shiftRightJam64Extra.o | |
89 | SF_OBJS_PRIMITIVES += s_shiftRightJam128.o | |
90 | SF_OBJS_PRIMITIVES += s_shiftRightJam128Extra.o | |
91 | SF_OBJS_PRIMITIVES += s_shiftRightJam256M.o | |
92 | SF_OBJS_PRIMITIVES += s_countLeadingZeros8.o | |
93 | SF_OBJS_PRIMITIVES += s_countLeadingZeros16.o | |
94 | SF_OBJS_PRIMITIVES += s_countLeadingZeros32.o | |
95 | SF_OBJS_PRIMITIVES += s_countLeadingZeros64.o | |
96 | SF_OBJS_PRIMITIVES += s_add128.o | |
97 | SF_OBJS_PRIMITIVES += s_add256M.o | |
98 | SF_OBJS_PRIMITIVES += s_sub128.o | |
99 | SF_OBJS_PRIMITIVES += s_sub256M.o | |
100 | SF_OBJS_PRIMITIVES += s_mul64ByShifted32To128.o | |
101 | SF_OBJS_PRIMITIVES += s_mul64To128.o | |
102 | SF_OBJS_PRIMITIVES += s_mul128By32.o | |
103 | SF_OBJS_PRIMITIVES += s_mul128To256M.o | |
104 | SF_OBJS_PRIMITIVES += s_approxRecip_1Ks.o | |
105 | SF_OBJS_PRIMITIVES += s_approxRecip32_1.o | |
106 | SF_OBJS_PRIMITIVES += s_approxRecipSqrt_1Ks.o | |
107 | SF_OBJS_PRIMITIVES += s_approxRecipSqrt32_1.o | |
108 | ||
109 | SF_OBJS_SPECIALIZE := | |
110 | SF_OBJS_SPECIALIZE += softfloat_raiseFlags.o | |
111 | SF_OBJS_SPECIALIZE += s_f16UIToCommonNaN.o | |
112 | SF_OBJS_SPECIALIZE += s_commonNaNToF16UI.o | |
113 | SF_OBJS_SPECIALIZE += s_propagateNaNF16UI.o | |
114 | SF_OBJS_SPECIALIZE += s_f32UIToCommonNaN.o | |
115 | SF_OBJS_SPECIALIZE += s_commonNaNToF32UI.o | |
116 | SF_OBJS_SPECIALIZE += s_propagateNaNF32UI.o | |
117 | SF_OBJS_SPECIALIZE += s_f64UIToCommonNaN.o | |
118 | SF_OBJS_SPECIALIZE += s_commonNaNToF64UI.o | |
119 | SF_OBJS_SPECIALIZE += s_propagateNaNF64UI.o | |
120 | SF_OBJS_SPECIALIZE += extF80M_isSignalingNaN.o | |
121 | SF_OBJS_SPECIALIZE += s_extF80UIToCommonNaN.o | |
122 | SF_OBJS_SPECIALIZE += s_commonNaNToExtF80UI.o | |
123 | SF_OBJS_SPECIALIZE += s_propagateNaNExtF80UI.o | |
124 | SF_OBJS_SPECIALIZE += f128M_isSignalingNaN.o | |
125 | SF_OBJS_SPECIALIZE += s_f128UIToCommonNaN.o | |
126 | SF_OBJS_SPECIALIZE += s_commonNaNToF128UI.o | |
127 | SF_OBJS_SPECIALIZE += s_propagateNaNF128UI.o | |
128 | ||
129 | SF_OBJS_OTHERS := | |
130 | SF_OBJS_OTHERS += s_roundToUI32.o | |
131 | SF_OBJS_OTHERS += s_roundToUI64.o | |
132 | SF_OBJS_OTHERS += s_roundToI32.o | |
133 | SF_OBJS_OTHERS += s_roundToI64.o | |
134 | SF_OBJS_OTHERS += s_normSubnormalF16Sig.o | |
135 | SF_OBJS_OTHERS += s_roundPackToF16.o | |
136 | SF_OBJS_OTHERS += s_normRoundPackToF16.o | |
137 | SF_OBJS_OTHERS += s_addMagsF16.o | |
138 | SF_OBJS_OTHERS += s_subMagsF16.o | |
139 | SF_OBJS_OTHERS += s_mulAddF16.o | |
140 | SF_OBJS_OTHERS += s_normSubnormalF32Sig.o | |
141 | SF_OBJS_OTHERS += s_roundPackToF32.o | |
142 | SF_OBJS_OTHERS += s_normRoundPackToF32.o | |
143 | SF_OBJS_OTHERS += s_addMagsF32.o | |
144 | SF_OBJS_OTHERS += s_subMagsF32.o | |
145 | SF_OBJS_OTHERS += s_mulAddF32.o | |
146 | SF_OBJS_OTHERS += s_normSubnormalF64Sig.o | |
147 | SF_OBJS_OTHERS += s_roundPackToF64.o | |
148 | SF_OBJS_OTHERS += s_normRoundPackToF64.o | |
149 | SF_OBJS_OTHERS += s_addMagsF64.o | |
150 | SF_OBJS_OTHERS += s_subMagsF64.o | |
151 | SF_OBJS_OTHERS += s_mulAddF64.o | |
152 | SF_OBJS_OTHERS += s_normSubnormalExtF80Sig.o | |
153 | SF_OBJS_OTHERS += s_roundPackToExtF80.o | |
154 | SF_OBJS_OTHERS += s_normRoundPackToExtF80.o | |
155 | SF_OBJS_OTHERS += s_addMagsExtF80.o | |
156 | SF_OBJS_OTHERS += s_subMagsExtF80.o | |
157 | SF_OBJS_OTHERS += s_normSubnormalF128Sig.o | |
158 | SF_OBJS_OTHERS += s_roundPackToF128.o | |
159 | SF_OBJS_OTHERS += s_normRoundPackToF128.o | |
160 | SF_OBJS_OTHERS += s_addMagsF128.o | |
161 | SF_OBJS_OTHERS += s_subMagsF128.o | |
162 | SF_OBJS_OTHERS += s_mulAddF128.o | |
163 | SF_OBJS_OTHERS += softfloat_state.o | |
164 | SF_OBJS_OTHERS += ui32_to_f16.o | |
165 | SF_OBJS_OTHERS += ui32_to_f32.o | |
166 | SF_OBJS_OTHERS += ui32_to_f64.o | |
167 | SF_OBJS_OTHERS += ui32_to_extF80.o | |
168 | SF_OBJS_OTHERS += ui32_to_extF80M.o | |
169 | SF_OBJS_OTHERS += ui32_to_f128.o | |
170 | SF_OBJS_OTHERS += ui32_to_f128M.o | |
171 | SF_OBJS_OTHERS += ui64_to_f16.o | |
172 | SF_OBJS_OTHERS += ui64_to_f32.o | |
173 | SF_OBJS_OTHERS += ui64_to_f64.o | |
174 | SF_OBJS_OTHERS += ui64_to_extF80.o | |
175 | SF_OBJS_OTHERS += ui64_to_extF80M.o | |
176 | SF_OBJS_OTHERS += ui64_to_f128.o | |
177 | SF_OBJS_OTHERS += ui64_to_f128M.o | |
178 | SF_OBJS_OTHERS += i32_to_f16.o | |
179 | SF_OBJS_OTHERS += i32_to_f32.o | |
180 | SF_OBJS_OTHERS += i32_to_f64.o | |
181 | SF_OBJS_OTHERS += i32_to_extF80.o | |
182 | SF_OBJS_OTHERS += i32_to_extF80M.o | |
183 | SF_OBJS_OTHERS += i32_to_f128.o | |
184 | SF_OBJS_OTHERS += i32_to_f128M.o | |
185 | SF_OBJS_OTHERS += i64_to_f16.o | |
186 | SF_OBJS_OTHERS += i64_to_f32.o | |
187 | SF_OBJS_OTHERS += i64_to_f64.o | |
188 | SF_OBJS_OTHERS += i64_to_extF80.o | |
189 | SF_OBJS_OTHERS += i64_to_extF80M.o | |
190 | SF_OBJS_OTHERS += i64_to_f128.o | |
191 | SF_OBJS_OTHERS += i64_to_f128M.o | |
192 | SF_OBJS_OTHERS += f16_to_ui32.o | |
193 | SF_OBJS_OTHERS += f16_to_ui64.o | |
194 | SF_OBJS_OTHERS += f16_to_i32.o | |
195 | SF_OBJS_OTHERS += f16_to_i64.o | |
196 | SF_OBJS_OTHERS += f16_to_ui32_r_minMag.o | |
197 | SF_OBJS_OTHERS += f16_to_ui64_r_minMag.o | |
198 | SF_OBJS_OTHERS += f16_to_i32_r_minMag.o | |
199 | SF_OBJS_OTHERS += f16_to_i64_r_minMag.o | |
200 | SF_OBJS_OTHERS += f16_to_f32.o | |
201 | SF_OBJS_OTHERS += f16_to_f64.o | |
202 | SF_OBJS_OTHERS += f16_to_extF80.o | |
203 | SF_OBJS_OTHERS += f16_to_extF80M.o | |
204 | SF_OBJS_OTHERS += f16_to_f128.o | |
205 | SF_OBJS_OTHERS += f16_to_f128M.o | |
206 | SF_OBJS_OTHERS += f16_roundToInt.o | |
207 | SF_OBJS_OTHERS += f16_add.o | |
208 | SF_OBJS_OTHERS += f16_sub.o | |
209 | SF_OBJS_OTHERS += f16_mul.o | |
210 | SF_OBJS_OTHERS += f16_mulAdd.o | |
211 | SF_OBJS_OTHERS += f16_div.o | |
212 | SF_OBJS_OTHERS += f16_rem.o | |
213 | SF_OBJS_OTHERS += f16_sqrt.o | |
214 | SF_OBJS_OTHERS += f16_eq.o | |
215 | SF_OBJS_OTHERS += f16_le.o | |
216 | SF_OBJS_OTHERS += f16_lt.o | |
217 | SF_OBJS_OTHERS += f16_eq_signaling.o | |
218 | SF_OBJS_OTHERS += f16_le_quiet.o | |
219 | SF_OBJS_OTHERS += f16_lt_quiet.o | |
220 | SF_OBJS_OTHERS += f16_isSignalingNaN.o | |
221 | SF_OBJS_OTHERS += f32_to_ui32.o | |
222 | SF_OBJS_OTHERS += f32_to_ui64.o | |
223 | SF_OBJS_OTHERS += f32_to_i32.o | |
224 | SF_OBJS_OTHERS += f32_to_i64.o | |
225 | SF_OBJS_OTHERS += f32_to_ui32_r_minMag.o | |
226 | SF_OBJS_OTHERS += f32_to_ui64_r_minMag.o | |
227 | SF_OBJS_OTHERS += f32_to_i32_r_minMag.o | |
228 | SF_OBJS_OTHERS += f32_to_i64_r_minMag.o | |
229 | SF_OBJS_OTHERS += f32_to_f16.o | |
230 | SF_OBJS_OTHERS += f32_to_f64.o | |
231 | SF_OBJS_OTHERS += f32_to_extF80.o | |
232 | SF_OBJS_OTHERS += f32_to_extF80M.o | |
233 | SF_OBJS_OTHERS += f32_to_f128.o | |
234 | SF_OBJS_OTHERS += f32_to_f128M.o | |
235 | SF_OBJS_OTHERS += f32_roundToInt.o | |
236 | SF_OBJS_OTHERS += f32_add.o | |
237 | SF_OBJS_OTHERS += f32_sub.o | |
238 | SF_OBJS_OTHERS += f32_mul.o | |
239 | SF_OBJS_OTHERS += f32_mulAdd.o | |
240 | SF_OBJS_OTHERS += f32_div.o | |
241 | SF_OBJS_OTHERS += f32_rem.o | |
242 | SF_OBJS_OTHERS += f32_sqrt.o | |
243 | SF_OBJS_OTHERS += f32_eq.o | |
244 | SF_OBJS_OTHERS += f32_le.o | |
245 | SF_OBJS_OTHERS += f32_lt.o | |
246 | SF_OBJS_OTHERS += f32_eq_signaling.o | |
247 | SF_OBJS_OTHERS += f32_le_quiet.o | |
248 | SF_OBJS_OTHERS += f32_lt_quiet.o | |
249 | SF_OBJS_OTHERS += f32_isSignalingNaN.o | |
250 | SF_OBJS_OTHERS += f64_to_ui32.o | |
251 | SF_OBJS_OTHERS += f64_to_ui64.o | |
252 | SF_OBJS_OTHERS += f64_to_i32.o | |
253 | SF_OBJS_OTHERS += f64_to_i64.o | |
254 | SF_OBJS_OTHERS += f64_to_ui32_r_minMag.o | |
255 | SF_OBJS_OTHERS += f64_to_ui64_r_minMag.o | |
256 | SF_OBJS_OTHERS += f64_to_i32_r_minMag.o | |
257 | SF_OBJS_OTHERS += f64_to_i64_r_minMag.o | |
258 | SF_OBJS_OTHERS += f64_to_f16.o | |
259 | SF_OBJS_OTHERS += f64_to_f32.o | |
260 | SF_OBJS_OTHERS += f64_to_extF80.o | |
261 | SF_OBJS_OTHERS += f64_to_extF80M.o | |
262 | SF_OBJS_OTHERS += f64_to_f128.o | |
263 | SF_OBJS_OTHERS += f64_to_f128M.o | |
264 | SF_OBJS_OTHERS += f64_roundToInt.o | |
265 | SF_OBJS_OTHERS += f64_add.o | |
266 | SF_OBJS_OTHERS += f64_sub.o | |
267 | SF_OBJS_OTHERS += f64_mul.o | |
268 | SF_OBJS_OTHERS += f64_mulAdd.o | |
269 | SF_OBJS_OTHERS += f64_div.o | |
270 | SF_OBJS_OTHERS += f64_rem.o | |
271 | SF_OBJS_OTHERS += f64_sqrt.o | |
272 | SF_OBJS_OTHERS += f64_eq.o | |
273 | SF_OBJS_OTHERS += f64_le.o | |
274 | SF_OBJS_OTHERS += f64_lt.o | |
275 | SF_OBJS_OTHERS += f64_eq_signaling.o | |
276 | SF_OBJS_OTHERS += f64_le_quiet.o | |
277 | SF_OBJS_OTHERS += f64_lt_quiet.o | |
278 | SF_OBJS_OTHERS += f64_isSignalingNaN.o | |
279 | SF_OBJS_OTHERS += extF80_to_ui32.o | |
280 | SF_OBJS_OTHERS += extF80_to_ui64.o | |
281 | SF_OBJS_OTHERS += extF80_to_i32.o | |
282 | SF_OBJS_OTHERS += extF80_to_i64.o | |
283 | SF_OBJS_OTHERS += extF80_to_ui32_r_minMag.o | |
284 | SF_OBJS_OTHERS += extF80_to_ui64_r_minMag.o | |
285 | SF_OBJS_OTHERS += extF80_to_i32_r_minMag.o | |
286 | SF_OBJS_OTHERS += extF80_to_i64_r_minMag.o | |
287 | SF_OBJS_OTHERS += extF80_to_f16.o | |
288 | SF_OBJS_OTHERS += extF80_to_f32.o | |
289 | SF_OBJS_OTHERS += extF80_to_f64.o | |
290 | SF_OBJS_OTHERS += extF80_to_f128.o | |
291 | SF_OBJS_OTHERS += extF80_roundToInt.o | |
292 | SF_OBJS_OTHERS += extF80_add.o | |
293 | SF_OBJS_OTHERS += extF80_sub.o | |
294 | SF_OBJS_OTHERS += extF80_mul.o | |
295 | SF_OBJS_OTHERS += extF80_div.o | |
296 | SF_OBJS_OTHERS += extF80_rem.o | |
297 | SF_OBJS_OTHERS += extF80_sqrt.o | |
298 | SF_OBJS_OTHERS += extF80_eq.o | |
299 | SF_OBJS_OTHERS += extF80_le.o | |
300 | SF_OBJS_OTHERS += extF80_lt.o | |
301 | SF_OBJS_OTHERS += extF80_eq_signaling.o | |
302 | SF_OBJS_OTHERS += extF80_le_quiet.o | |
303 | SF_OBJS_OTHERS += extF80_lt_quiet.o | |
304 | SF_OBJS_OTHERS += extF80_isSignalingNaN.o | |
305 | SF_OBJS_OTHERS += extF80M_to_ui32.o | |
306 | SF_OBJS_OTHERS += extF80M_to_ui64.o | |
307 | SF_OBJS_OTHERS += extF80M_to_i32.o | |
308 | SF_OBJS_OTHERS += extF80M_to_i64.o | |
309 | SF_OBJS_OTHERS += extF80M_to_ui32_r_minMag.o | |
310 | SF_OBJS_OTHERS += extF80M_to_ui64_r_minMag.o | |
311 | SF_OBJS_OTHERS += extF80M_to_i32_r_minMag.o | |
312 | SF_OBJS_OTHERS += extF80M_to_i64_r_minMag.o | |
313 | SF_OBJS_OTHERS += extF80M_to_f16.o | |
314 | SF_OBJS_OTHERS += extF80M_to_f32.o | |
315 | SF_OBJS_OTHERS += extF80M_to_f64.o | |
316 | SF_OBJS_OTHERS += extF80M_to_f128M.o | |
317 | SF_OBJS_OTHERS += extF80M_roundToInt.o | |
318 | SF_OBJS_OTHERS += extF80M_add.o | |
319 | SF_OBJS_OTHERS += extF80M_sub.o | |
320 | SF_OBJS_OTHERS += extF80M_mul.o | |
321 | SF_OBJS_OTHERS += extF80M_div.o | |
322 | SF_OBJS_OTHERS += extF80M_rem.o | |
323 | SF_OBJS_OTHERS += extF80M_sqrt.o | |
324 | SF_OBJS_OTHERS += extF80M_eq.o | |
325 | SF_OBJS_OTHERS += extF80M_le.o | |
326 | SF_OBJS_OTHERS += extF80M_lt.o | |
327 | SF_OBJS_OTHERS += extF80M_eq_signaling.o | |
328 | SF_OBJS_OTHERS += extF80M_le_quiet.o | |
329 | SF_OBJS_OTHERS += extF80M_lt_quiet.o | |
330 | SF_OBJS_OTHERS += f128_to_ui32.o | |
331 | SF_OBJS_OTHERS += f128_to_ui64.o | |
332 | SF_OBJS_OTHERS += f128_to_i32.o | |
333 | SF_OBJS_OTHERS += f128_to_i64.o | |
334 | SF_OBJS_OTHERS += f128_to_ui32_r_minMag.o | |
335 | SF_OBJS_OTHERS += f128_to_ui64_r_minMag.o | |
336 | SF_OBJS_OTHERS += f128_to_i32_r_minMag.o | |
337 | SF_OBJS_OTHERS += f128_to_i64_r_minMag.o | |
338 | SF_OBJS_OTHERS += f128_to_f16.o | |
339 | SF_OBJS_OTHERS += f128_to_f32.o | |
340 | SF_OBJS_OTHERS += f128_to_extF80.o | |
341 | SF_OBJS_OTHERS += f128_to_f64.o | |
342 | SF_OBJS_OTHERS += f128_roundToInt.o | |
343 | SF_OBJS_OTHERS += f128_add.o | |
344 | SF_OBJS_OTHERS += f128_sub.o | |
345 | SF_OBJS_OTHERS += f128_mul.o | |
346 | SF_OBJS_OTHERS += f128_mulAdd.o | |
347 | SF_OBJS_OTHERS += f128_div.o | |
348 | SF_OBJS_OTHERS += f128_rem.o | |
349 | SF_OBJS_OTHERS += f128_sqrt.o | |
350 | SF_OBJS_OTHERS += f128_eq.o | |
351 | SF_OBJS_OTHERS += f128_le.o | |
352 | SF_OBJS_OTHERS += f128_lt.o | |
353 | SF_OBJS_OTHERS += f128_eq_signaling.o | |
354 | SF_OBJS_OTHERS += f128_le_quiet.o | |
355 | SF_OBJS_OTHERS += f128_lt_quiet.o | |
356 | SF_OBJS_OTHERS += f128_isSignalingNaN.o | |
357 | SF_OBJS_OTHERS += f128M_to_ui32.o | |
358 | SF_OBJS_OTHERS += f128M_to_ui64.o | |
359 | SF_OBJS_OTHERS += f128M_to_i32.o | |
360 | SF_OBJS_OTHERS += f128M_to_i64.o | |
361 | SF_OBJS_OTHERS += f128M_to_ui32_r_minMag.o | |
362 | SF_OBJS_OTHERS += f128M_to_ui64_r_minMag.o | |
363 | SF_OBJS_OTHERS += f128M_to_i32_r_minMag.o | |
364 | SF_OBJS_OTHERS += f128M_to_i64_r_minMag.o | |
365 | SF_OBJS_OTHERS += f128M_to_f16.o | |
366 | SF_OBJS_OTHERS += f128M_to_f32.o | |
367 | SF_OBJS_OTHERS += f128M_to_extF80M.o | |
368 | SF_OBJS_OTHERS += f128M_to_f64.o | |
369 | SF_OBJS_OTHERS += f128M_roundToInt.o | |
370 | SF_OBJS_OTHERS += f128M_add.o | |
371 | SF_OBJS_OTHERS += f128M_sub.o | |
372 | SF_OBJS_OTHERS += f128M_mul.o | |
373 | SF_OBJS_OTHERS += f128M_mulAdd.o | |
374 | SF_OBJS_OTHERS += f128M_div.o | |
375 | SF_OBJS_OTHERS += f128M_rem.o | |
376 | SF_OBJS_OTHERS += f128M_sqrt.o | |
377 | SF_OBJS_OTHERS += f128M_eq.o | |
378 | SF_OBJS_OTHERS += f128M_le.o | |
379 | SF_OBJS_OTHERS += f128M_lt.o | |
380 | SF_OBJS_OTHERS += f128M_eq_signaling.o | |
381 | SF_OBJS_OTHERS += f128M_le_quiet.o | |
382 | SF_OBJS_OTHERS += f128M_lt_quiet.o | |
383 | ||
384 | SF_OBJS_ALL_NOSPEC := | |
385 | SF_OBJS_ALL_NOSPEC += $(SF_OBJS_PRIMITIVES) | |
386 | SF_OBJS_ALL_NOSPEC += $(SF_OBJS_OTHERS) | |
387 | ||
388 | SF_OBJS_ALL := | |
389 | SF_OBJS_ALL += $(SF_OBJS_ALL_NOSPEC) | |
390 | SF_OBJS_ALL += $(SF_OBJS_SPECIALIZE) | |
391 | ||
392 | # testfloat objects | |
393 | TF_OBJS_GENCASES := | |
394 | TF_OBJS_GENCASES += genCases_ui32.o | |
395 | TF_OBJS_GENCASES += genCases_ui64.o | |
396 | TF_OBJS_GENCASES += genCases_i32.o | |
397 | TF_OBJS_GENCASES += genCases_i64.o | |
398 | TF_OBJS_GENCASES += genCases_f16.o | |
399 | TF_OBJS_GENCASES += genCases_f32.o | |
400 | TF_OBJS_GENCASES += genCases_f64.o | |
401 | TF_OBJS_GENCASES += genCases_extF80.o | |
402 | TF_OBJS_GENCASES += genCases_f128.o | |
403 | ||
404 | TF_OBJS_WRITECASE := | |
405 | TF_OBJS_WRITECASE += writeCase_a_ui32.o | |
406 | TF_OBJS_WRITECASE += writeCase_a_ui64.o | |
407 | TF_OBJS_WRITECASE += writeCase_a_f16.o | |
408 | TF_OBJS_WRITECASE += writeCase_ab_f16.o | |
409 | TF_OBJS_WRITECASE += writeCase_abc_f16.o | |
410 | TF_OBJS_WRITECASE += writeCase_a_f32.o | |
411 | TF_OBJS_WRITECASE += writeCase_ab_f32.o | |
412 | TF_OBJS_WRITECASE += writeCase_abc_f32.o | |
413 | TF_OBJS_WRITECASE += writeCase_a_f64.o | |
414 | TF_OBJS_WRITECASE += writeCase_ab_f64.o | |
415 | TF_OBJS_WRITECASE += writeCase_abc_f64.o | |
416 | TF_OBJS_WRITECASE += writeCase_a_extF80M.o | |
417 | TF_OBJS_WRITECASE += writeCase_ab_extF80M.o | |
418 | TF_OBJS_WRITECASE += writeCase_a_f128M.o | |
419 | TF_OBJS_WRITECASE += writeCase_ab_f128M.o | |
420 | TF_OBJS_WRITECASE += writeCase_abc_f128M.o | |
421 | TF_OBJS_WRITECASE += writeCase_z_bool.o | |
422 | TF_OBJS_WRITECASE += writeCase_z_ui32.o | |
423 | TF_OBJS_WRITECASE += writeCase_z_ui64.o | |
424 | TF_OBJS_WRITECASE += writeCase_z_f16.o | |
425 | TF_OBJS_WRITECASE += writeCase_z_f32.o | |
426 | TF_OBJS_WRITECASE += writeCase_z_f64.o | |
427 | TF_OBJS_WRITECASE += writeCase_z_extF80M.o | |
428 | TF_OBJS_WRITECASE += writeCase_z_f128M.o | |
429 | ||
430 | TF_OBJS_TEST := | |
431 | TF_OBJS_TEST += test_a_ui32_z_f16.o | |
432 | TF_OBJS_TEST += test_a_ui32_z_f32.o | |
433 | TF_OBJS_TEST += test_a_ui32_z_f64.o | |
434 | TF_OBJS_TEST += test_a_ui32_z_extF80.o | |
435 | TF_OBJS_TEST += test_a_ui32_z_f128.o | |
436 | TF_OBJS_TEST += test_a_ui64_z_f16.o | |
437 | TF_OBJS_TEST += test_a_ui64_z_f32.o | |
438 | TF_OBJS_TEST += test_a_ui64_z_f64.o | |
439 | TF_OBJS_TEST += test_a_ui64_z_extF80.o | |
440 | TF_OBJS_TEST += test_a_ui64_z_f128.o | |
441 | TF_OBJS_TEST += test_a_i32_z_f16.o | |
442 | TF_OBJS_TEST += test_a_i32_z_f32.o | |
443 | TF_OBJS_TEST += test_a_i32_z_f64.o | |
444 | TF_OBJS_TEST += test_a_i32_z_extF80.o | |
445 | TF_OBJS_TEST += test_a_i32_z_f128.o | |
446 | TF_OBJS_TEST += test_a_i64_z_f16.o | |
447 | TF_OBJS_TEST += test_a_i64_z_f32.o | |
448 | TF_OBJS_TEST += test_a_i64_z_f64.o | |
449 | TF_OBJS_TEST += test_a_i64_z_extF80.o | |
450 | TF_OBJS_TEST += test_a_i64_z_f128.o | |
451 | TF_OBJS_TEST += test_a_f16_z_ui32_rx.o | |
452 | TF_OBJS_TEST += test_a_f16_z_ui64_rx.o | |
453 | TF_OBJS_TEST += test_a_f16_z_i32_rx.o | |
454 | TF_OBJS_TEST += test_a_f16_z_i64_rx.o | |
455 | TF_OBJS_TEST += test_a_f16_z_ui32_x.o | |
456 | TF_OBJS_TEST += test_a_f16_z_ui64_x.o | |
457 | TF_OBJS_TEST += test_a_f16_z_i32_x.o | |
458 | TF_OBJS_TEST += test_a_f16_z_i64_x.o | |
459 | TF_OBJS_TEST += test_a_f16_z_f32.o | |
460 | TF_OBJS_TEST += test_a_f16_z_f64.o | |
461 | TF_OBJS_TEST += test_a_f16_z_extF80.o | |
462 | TF_OBJS_TEST += test_a_f16_z_f128.o | |
463 | TF_OBJS_TEST += test_az_f16.o | |
464 | TF_OBJS_TEST += test_az_f16_rx.o | |
465 | TF_OBJS_TEST += test_abz_f16.o | |
466 | TF_OBJS_TEST += test_abcz_f16.o | |
467 | TF_OBJS_TEST += test_ab_f16_z_bool.o | |
468 | TF_OBJS_TEST += test_a_f32_z_ui32_rx.o | |
469 | TF_OBJS_TEST += test_a_f32_z_ui64_rx.o | |
470 | TF_OBJS_TEST += test_a_f32_z_i32_rx.o | |
471 | TF_OBJS_TEST += test_a_f32_z_i64_rx.o | |
472 | TF_OBJS_TEST += test_a_f32_z_ui32_x.o | |
473 | TF_OBJS_TEST += test_a_f32_z_ui64_x.o | |
474 | TF_OBJS_TEST += test_a_f32_z_i32_x.o | |
475 | TF_OBJS_TEST += test_a_f32_z_i64_x.o | |
476 | TF_OBJS_TEST += test_a_f32_z_f16.o | |
477 | TF_OBJS_TEST += test_a_f32_z_f64.o | |
478 | TF_OBJS_TEST += test_a_f32_z_extF80.o | |
479 | TF_OBJS_TEST += test_a_f32_z_f128.o | |
480 | TF_OBJS_TEST += test_az_f32.o | |
481 | TF_OBJS_TEST += test_az_f32_rx.o | |
482 | TF_OBJS_TEST += test_abz_f32.o | |
483 | TF_OBJS_TEST += test_abcz_f32.o | |
484 | TF_OBJS_TEST += test_ab_f32_z_bool.o | |
485 | TF_OBJS_TEST += test_a_f64_z_ui32_rx.o | |
486 | TF_OBJS_TEST += test_a_f64_z_ui64_rx.o | |
487 | TF_OBJS_TEST += test_a_f64_z_i32_rx.o | |
488 | TF_OBJS_TEST += test_a_f64_z_i64_rx.o | |
489 | TF_OBJS_TEST += test_a_f64_z_ui32_x.o | |
490 | TF_OBJS_TEST += test_a_f64_z_ui64_x.o | |
491 | TF_OBJS_TEST += test_a_f64_z_i32_x.o | |
492 | TF_OBJS_TEST += test_a_f64_z_i64_x.o | |
493 | TF_OBJS_TEST += test_a_f64_z_f16.o | |
494 | TF_OBJS_TEST += test_a_f64_z_f32.o | |
495 | TF_OBJS_TEST += test_a_f64_z_extF80.o | |
496 | TF_OBJS_TEST += test_a_f64_z_f128.o | |
497 | TF_OBJS_TEST += test_az_f64.o | |
498 | TF_OBJS_TEST += test_az_f64_rx.o | |
499 | TF_OBJS_TEST += test_abz_f64.o | |
500 | TF_OBJS_TEST += test_abcz_f64.o | |
501 | TF_OBJS_TEST += test_ab_f64_z_bool.o | |
502 | TF_OBJS_TEST += test_a_extF80_z_ui32_rx.o | |
503 | TF_OBJS_TEST += test_a_extF80_z_ui64_rx.o | |
504 | TF_OBJS_TEST += test_a_extF80_z_i32_rx.o | |
505 | TF_OBJS_TEST += test_a_extF80_z_i64_rx.o | |
506 | TF_OBJS_TEST += test_a_extF80_z_ui32_x.o | |
507 | TF_OBJS_TEST += test_a_extF80_z_ui64_x.o | |
508 | TF_OBJS_TEST += test_a_extF80_z_i32_x.o | |
509 | TF_OBJS_TEST += test_a_extF80_z_i64_x.o | |
510 | TF_OBJS_TEST += test_a_extF80_z_f16.o | |
511 | TF_OBJS_TEST += test_a_extF80_z_f32.o | |
512 | TF_OBJS_TEST += test_a_extF80_z_f64.o | |
513 | TF_OBJS_TEST += test_a_extF80_z_f128.o | |
514 | TF_OBJS_TEST += test_az_extF80.o | |
515 | TF_OBJS_TEST += test_az_extF80_rx.o | |
516 | TF_OBJS_TEST += test_abz_extF80.o | |
517 | TF_OBJS_TEST += test_ab_extF80_z_bool.o | |
518 | TF_OBJS_TEST += test_a_f128_z_ui32_rx.o | |
519 | TF_OBJS_TEST += test_a_f128_z_ui64_rx.o | |
520 | TF_OBJS_TEST += test_a_f128_z_i32_rx.o | |
521 | TF_OBJS_TEST += test_a_f128_z_i64_rx.o | |
522 | TF_OBJS_TEST += test_a_f128_z_ui32_x.o | |
523 | TF_OBJS_TEST += test_a_f128_z_ui64_x.o | |
524 | TF_OBJS_TEST += test_a_f128_z_i32_x.o | |
525 | TF_OBJS_TEST += test_a_f128_z_i64_x.o | |
526 | TF_OBJS_TEST += test_a_f128_z_f16.o | |
527 | TF_OBJS_TEST += test_a_f128_z_f32.o | |
528 | TF_OBJS_TEST += test_a_f128_z_f64.o | |
529 | TF_OBJS_TEST += test_a_f128_z_extF80.o | |
530 | TF_OBJS_TEST += test_az_f128.o | |
531 | TF_OBJS_TEST += test_az_f128_rx.o | |
532 | TF_OBJS_TEST += test_abz_f128.o | |
533 | TF_OBJS_TEST += test_abcz_f128.o | |
534 | TF_OBJS_TEST += test_ab_f128_z_bool.o | |
535 | ||
536 | TF_OBJS_LIB := | |
537 | TF_OBJS_LIB += uint128_inline.o | |
538 | TF_OBJS_LIB += uint128.o | |
539 | TF_OBJS_LIB += fail.o | |
540 | TF_OBJS_LIB += functions_common.o | |
541 | TF_OBJS_LIB += functionInfos.o | |
542 | TF_OBJS_LIB += standardFunctionInfos.o | |
543 | TF_OBJS_LIB += random.o | |
544 | TF_OBJS_LIB += genCases_common.o | |
545 | TF_OBJS_LIB += $(TF_OBJS_GENCASES) | |
546 | TF_OBJS_LIB += genCases_writeTestsTotal.o | |
547 | TF_OBJS_LIB += verCases_inline.o | |
548 | TF_OBJS_LIB += verCases_common.o | |
549 | TF_OBJS_LIB += verCases_writeFunctionName.o | |
550 | TF_OBJS_LIB += readHex.o | |
551 | TF_OBJS_LIB += writeHex.o | |
552 | TF_OBJS_LIB += $(TF_OBJS_WRITECASE) | |
553 | TF_OBJS_LIB += testLoops_common.o | |
554 | TF_OBJS_LIB += $(TF_OBJS_TEST) | |
555 | ||
25f539f3 | 556 | BINARIES := fp-test$(EXESUF) fp-bench$(EXESUF) |
3ac1f813 EC |
557 | |
558 | # everything depends on config-host.h because platform.h includes it | |
559 | all: $(BUILD_DIR)/config-host.h | |
560 | $(MAKE) $(BINARIES) | |
561 | ||
562 | $(LIBQEMUUTIL): | |
563 | $(MAKE) -C $(BUILD_DIR) libqemuutil.a | |
564 | ||
565 | $(BUILD_DIR)/config-host.h: | |
566 | $(MAKE) -C $(BUILD_DIR) config-host.h | |
567 | ||
568 | # libtestfloat.a depends on libsoftfloat.a, so specify it first | |
569 | FP_TEST_LIBS := libtestfloat.a libsoftfloat.a $(LIBQEMUUTIL) | |
570 | ||
571 | fp-test$(EXESUF): fp-test.o slowfloat.o $(QEMU_SOFTFLOAT_OBJ) $(FP_TEST_LIBS) | |
572 | ||
573 | # Custom rule to build with SF_CFLAGS | |
574 | SF_BUILD = $(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \ | |
575 | $(QEMU_CFLAGS) $(SF_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \ | |
576 | $($@-cflags) -c -o $@ $<,"CC","$(TARGET_DIR)$@") | |
577 | ||
578 | $(SF_OBJS_ALL_NOSPEC): %.o: $(SF_SOURCE_DIR)/%.c | |
579 | $(SF_BUILD) | |
580 | $(SF_OBJS_SPECIALIZE): %.o: $(SF_SPECIALIZE_DIR)/%.c | |
581 | $(SF_BUILD) | |
582 | ||
583 | libsoftfloat.a: $(SF_OBJS_ALL) | |
584 | ||
585 | # Custom rule to build with TF_CFLAGS | |
586 | $(TF_OBJS_LIB) slowfloat.o: %.o: $(TF_SOURCE_DIR)/%.c | |
587 | $(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \ | |
588 | $(QEMU_CFLAGS) $(TF_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \ | |
589 | $($@-cflags) -c -o $@ $<,"CC","$(TARGET_DIR)$@") | |
590 | ||
591 | libtestfloat.a: $(TF_OBJS_LIB) | |
592 | ||
25f539f3 EC |
593 | fp-bench$(EXESUF): fp-bench.o $(QEMU_SOFTFLOAT_OBJ) $(LIBQEMUUTIL) |
594 | ||
3ac1f813 EC |
595 | clean: |
596 | rm -f *.o *.d $(BINARIES) | |
597 | rm -f *.gcno *.gcda *.gcov | |
598 | rm -f fp-test$(EXESUF) | |
25f539f3 | 599 | rm -f fp-bench$(EXESUF) |
3ac1f813 EC |
600 | rm -f libsoftfloat.a |
601 | rm -f libtestfloat.a | |
602 | ||
603 | -include $(wildcard *.d) |