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