qemu-testfloat-3

Форк
0
353 строки · 11.8 Кб
1

2
#=============================================================================
3
#
4
# This Makefile is part of TestFloat, Release 3e, a package of programs for
5
# testing the correctness of floating-point arithmetic complying with the IEEE
6
# Standard for Floating-Point, by John R. Hauser.
7
#
8
# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
9
# University of California.  All rights reserved.
10
#
11
# Redistribution and use in source and binary forms, with or without
12
# modification, are permitted provided that the following conditions are met:
13
#
14
#  1. Redistributions of source code must retain the above copyright notice,
15
#     this list of conditions, and the following disclaimer.
16
#
17
#  2. Redistributions in binary form must reproduce the above copyright
18
#     notice, this list of conditions, and the following disclaimer in the
19
#     documentation and/or other materials provided with the distribution.
20
#
21
#  3. Neither the name of the University nor the names of its contributors
22
#     may be used to endorse or promote products derived from this software
23
#     without specific prior written permission.
24
#
25
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
26
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
28
# DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
29
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
#
36
#=============================================================================
37

38
SOURCE_DIR ?= ../../source
39
SOFTFLOAT_DIR ?= ../../../berkeley-softfloat-3
40
PLATFORM ?= Linux-386-GCC
41

42
SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C
43
SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include
44

45
SOFTFLOAT_H = \
46
  $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \
47
  $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h
48
SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB)
49

50
TESTFLOAT_OPTS ?= \
51
  -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \
52
  -DLONG_DOUBLE_IS_EXTFLOAT80
53

54
DELETE = rm -f
55
C_INCLUDES = \
56
  -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR)
57
COMPILE_C = \
58
  gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \
59
    $(C_INCLUDES) -O2 -o $@
60
COMPILE_SLOWFLOAT_C = \
61
  gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \
62
    $(C_INCLUDES) -O3 -o $@
63
MAKELIB = ar crs $@
64
LINK = gcc -o $@
65
OTHER_LIBS = -lm
66

67
OBJ = .o
68
LIB = .a
69
EXE =
70

71
.PHONY: all
72
all: \
73
  testsoftfloat$(EXE) \
74
  timesoftfloat$(EXE) \
75
  testfloat_gen$(EXE) \
76
  testfloat_ver$(EXE) \
77
  testfloat$(EXE) \
78

79
OBJS_GENCASES = \
80
  genCases_ui32$(OBJ) \
81
  genCases_ui64$(OBJ) \
82
  genCases_i32$(OBJ) \
83
  genCases_i64$(OBJ) \
84
  genCases_f16$(OBJ) \
85
  genCases_f32$(OBJ) \
86
  genCases_f64$(OBJ) \
87
  genCases_extF80$(OBJ) \
88
  genCases_f128$(OBJ) \
89

90
OBJS_WRITECASE = \
91
  writeCase_a_ui32$(OBJ) \
92
  writeCase_a_ui64$(OBJ) \
93
  writeCase_a_f16$(OBJ) \
94
  writeCase_ab_f16$(OBJ) \
95
  writeCase_abc_f16$(OBJ) \
96
  writeCase_a_f32$(OBJ) \
97
  writeCase_ab_f32$(OBJ) \
98
  writeCase_abc_f32$(OBJ) \
99
  writeCase_a_f64$(OBJ) \
100
  writeCase_ab_f64$(OBJ) \
101
  writeCase_abc_f64$(OBJ) \
102
  writeCase_a_extF80M$(OBJ) \
103
  writeCase_ab_extF80M$(OBJ) \
104
  writeCase_a_f128M$(OBJ) \
105
  writeCase_ab_f128M$(OBJ) \
106
  writeCase_abc_f128M$(OBJ) \
107
  writeCase_z_bool$(OBJ) \
108
  writeCase_z_ui32$(OBJ) \
109
  writeCase_z_ui64$(OBJ) \
110
  writeCase_z_f16$(OBJ) \
111
  writeCase_z_f32$(OBJ) \
112
  writeCase_z_f64$(OBJ) \
113
  writeCase_z_extF80M$(OBJ) \
114
  writeCase_z_f128M$(OBJ) \
115

116
OBJS_TEST = \
117
  test_a_ui32_z_f16$(OBJ) \
118
  test_a_ui32_z_f32$(OBJ) \
119
  test_a_ui32_z_f64$(OBJ) \
120
  test_a_ui32_z_extF80$(OBJ) \
121
  test_a_ui32_z_f128$(OBJ) \
122
  test_a_ui64_z_f16$(OBJ) \
123
  test_a_ui64_z_f32$(OBJ) \
124
  test_a_ui64_z_f64$(OBJ) \
125
  test_a_ui64_z_extF80$(OBJ) \
126
  test_a_ui64_z_f128$(OBJ) \
127
  test_a_i32_z_f16$(OBJ) \
128
  test_a_i32_z_f32$(OBJ) \
129
  test_a_i32_z_f64$(OBJ) \
130
  test_a_i32_z_extF80$(OBJ) \
131
  test_a_i32_z_f128$(OBJ) \
132
  test_a_i64_z_f16$(OBJ) \
133
  test_a_i64_z_f32$(OBJ) \
134
  test_a_i64_z_f64$(OBJ) \
135
  test_a_i64_z_extF80$(OBJ) \
136
  test_a_i64_z_f128$(OBJ) \
137
  test_a_f16_z_ui32_rx$(OBJ) \
138
  test_a_f16_z_ui64_rx$(OBJ) \
139
  test_a_f16_z_i32_rx$(OBJ) \
140
  test_a_f16_z_i64_rx$(OBJ) \
141
  test_a_f16_z_ui32_x$(OBJ) \
142
  test_a_f16_z_ui64_x$(OBJ) \
143
  test_a_f16_z_i32_x$(OBJ) \
144
  test_a_f16_z_i64_x$(OBJ) \
145
  test_a_f16_z_f32$(OBJ) \
146
  test_a_f16_z_f64$(OBJ) \
147
  test_a_f16_z_extF80$(OBJ) \
148
  test_a_f16_z_f128$(OBJ) \
149
  test_az_f16$(OBJ) \
150
  test_az_f16_rx$(OBJ) \
151
  test_abz_f16$(OBJ) \
152
  test_abcz_f16$(OBJ) \
153
  test_ab_f16_z_bool$(OBJ) \
154
  test_a_f32_z_ui32_rx$(OBJ) \
155
  test_a_f32_z_ui64_rx$(OBJ) \
156
  test_a_f32_z_i32_rx$(OBJ) \
157
  test_a_f32_z_i64_rx$(OBJ) \
158
  test_a_f32_z_ui32_x$(OBJ) \
159
  test_a_f32_z_ui64_x$(OBJ) \
160
  test_a_f32_z_i32_x$(OBJ) \
161
  test_a_f32_z_i64_x$(OBJ) \
162
  test_a_f32_z_f16$(OBJ) \
163
  test_a_f32_z_f64$(OBJ) \
164
  test_a_f32_z_extF80$(OBJ) \
165
  test_a_f32_z_f128$(OBJ) \
166
  test_az_f32$(OBJ) \
167
  test_az_f32_rx$(OBJ) \
168
  test_abz_f32$(OBJ) \
169
  test_abcz_f32$(OBJ) \
170
  test_ab_f32_z_bool$(OBJ) \
171
  test_a_f64_z_ui32_rx$(OBJ) \
172
  test_a_f64_z_ui64_rx$(OBJ) \
173
  test_a_f64_z_i32_rx$(OBJ) \
174
  test_a_f64_z_i64_rx$(OBJ) \
175
  test_a_f64_z_ui32_x$(OBJ) \
176
  test_a_f64_z_ui64_x$(OBJ) \
177
  test_a_f64_z_i32_x$(OBJ) \
178
  test_a_f64_z_i64_x$(OBJ) \
179
  test_a_f64_z_f16$(OBJ) \
180
  test_a_f64_z_f32$(OBJ) \
181
  test_a_f64_z_extF80$(OBJ) \
182
  test_a_f64_z_f128$(OBJ) \
183
  test_az_f64$(OBJ) \
184
  test_az_f64_rx$(OBJ) \
185
  test_abz_f64$(OBJ) \
186
  test_abcz_f64$(OBJ) \
187
  test_ab_f64_z_bool$(OBJ) \
188
  test_a_extF80_z_ui32_rx$(OBJ) \
189
  test_a_extF80_z_ui64_rx$(OBJ) \
190
  test_a_extF80_z_i32_rx$(OBJ) \
191
  test_a_extF80_z_i64_rx$(OBJ) \
192
  test_a_extF80_z_ui32_x$(OBJ) \
193
  test_a_extF80_z_ui64_x$(OBJ) \
194
  test_a_extF80_z_i32_x$(OBJ) \
195
  test_a_extF80_z_i64_x$(OBJ) \
196
  test_a_extF80_z_f16$(OBJ) \
197
  test_a_extF80_z_f32$(OBJ) \
198
  test_a_extF80_z_f64$(OBJ) \
199
  test_a_extF80_z_f128$(OBJ) \
200
  test_az_extF80$(OBJ) \
201
  test_az_extF80_rx$(OBJ) \
202
  test_abz_extF80$(OBJ) \
203
  test_ab_extF80_z_bool$(OBJ) \
204
  test_a_f128_z_ui32_rx$(OBJ) \
205
  test_a_f128_z_ui64_rx$(OBJ) \
206
  test_a_f128_z_i32_rx$(OBJ) \
207
  test_a_f128_z_i64_rx$(OBJ) \
208
  test_a_f128_z_ui32_x$(OBJ) \
209
  test_a_f128_z_ui64_x$(OBJ) \
210
  test_a_f128_z_i32_x$(OBJ) \
211
  test_a_f128_z_i64_x$(OBJ) \
212
  test_a_f128_z_f16$(OBJ) \
213
  test_a_f128_z_f32$(OBJ) \
214
  test_a_f128_z_f64$(OBJ) \
215
  test_a_f128_z_extF80$(OBJ) \
216
  test_az_f128$(OBJ) \
217
  test_az_f128_rx$(OBJ) \
218
  test_abz_f128$(OBJ) \
219
  test_abcz_f128$(OBJ) \
220
  test_ab_f128_z_bool$(OBJ) \
221

222
OBJS_LIB = \
223
  uint128_inline$(OBJ) \
224
  uint128$(OBJ) \
225
  fail$(OBJ) \
226
  functions_common$(OBJ) \
227
  functionInfos$(OBJ) \
228
  standardFunctionInfos$(OBJ) \
229
  random$(OBJ) \
230
  genCases_common$(OBJ) \
231
  $(OBJS_GENCASES) \
232
  genCases_writeTestsTotal$(OBJ) \
233
  verCases_inline$(OBJ) \
234
  verCases_common$(OBJ) \
235
  verCases_writeFunctionName$(OBJ) \
236
  readHex$(OBJ) \
237
  writeHex$(OBJ) \
238
  $(OBJS_WRITECASE) \
239
  testLoops_common$(OBJ) \
240
  $(OBJS_TEST) \
241

242
uint128$(OBJ): $(SOURCE_DIR)/uint128.h
243
fail$(OBJ): $(SOURCE_DIR)/fail.h
244
functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h
245
functionInfos$(OBJ): $(SOURCE_DIR)/functions.h
246
standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h
247
random$(OBJ): $(SOURCE_DIR)/random.h
248
genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h
249
$(OBJS_GENCASES): \
250
  $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h
251
genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h
252
genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h
253
verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h
254
verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h
255
readHex$(OBJ): $(SOURCE_DIR)/readHex.h
256
writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h
257
$(OBJS_WRITECASE): \
258
  $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h
259
testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h
260
$(OBJS_TEST): \
261
  $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \
262
  $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h
263
$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c
264
	$(COMPILE_C) $(SOURCE_DIR)/$*.c
265
testfloat$(LIB): $(OBJS_LIB)
266
	$(MAKELIB) $^
267

268
OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ)
269

270
slowfloat$(OBJ): \
271
  platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \
272
  $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c
273
	$(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c
274
testsoftfloat$(OBJ): \
275
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
276
  $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \
277
  $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \
278
  $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c
279
	$(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c
280

281
testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
282
	$(LINK) $^ $(OTHER_LIBS)
283

284
OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ)
285

286
timesoftfloat$(OBJ): \
287
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
288
  $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c
289
	$(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c
290

291
timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
292
	$(LINK) $^ $(OTHER_LIBS)
293

294
OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ)
295

296
genLoops$(OBJ): \
297
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
298
  $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \
299
  $(SOURCE_DIR)/genLoops.c
300
	$(COMPILE_C) $(SOURCE_DIR)/genLoops.c
301
testfloat_gen$(OBJ): \
302
  $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \
303
  $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \
304
  $(SOURCE_DIR)/testfloat_gen.c
305
	$(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c
306

307
testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB)
308
	$(LINK) $^ $(OTHER_LIBS)
309

310
OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ)
311

312
verLoops$(OBJ): \
313
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
314
  $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \
315
  $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c
316
	$(COMPILE_C) $(SOURCE_DIR)/verLoops.c
317
testfloat_ver$(OBJ): \
318
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
319
  $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \
320
  $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \
321
  $(SOURCE_DIR)/testfloat_ver.c
322
	$(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c
323

324
testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB)
325
	$(LINK) $^ $(OTHER_LIBS)
326

327
OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ)
328

329
subjfloat$(OBJ): \
330
  platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \
331
  $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c
332
	$(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c
333
subjfloat_functions$(OBJ): \
334
  platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \
335
  $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c
336
	$(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c
337
testfloat$(OBJ): \
338
  platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \
339
  $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \
340
  $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \
341
  $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c
342
	$(COMPILE_C) $(SOURCE_DIR)/testfloat.c
343

344
testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB)
345
	$(LINK) $^ $(OTHER_LIBS)
346

347
.PHONY: clean
348
clean:
349
	$(DELETE) $(OBJS_LIB) testfloat$(LIB)
350
	$(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE)
351
	$(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE)
352
	$(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE)
353
	$(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE)
354
	$(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE)
355

356

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.