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# everything depends on config-host.h because platform.h includes it 558all: $(BUILD_DIR)/config-host.h 559 $(MAKE) $(BINARIES) 560 561$(LIBQEMUUTIL): 562 $(MAKE) -C $(BUILD_DIR) libqemuutil.a 563 564$(BUILD_DIR)/config-host.h: 565 $(MAKE) -C $(BUILD_DIR) config-host.h 566 567# libtestfloat.a depends on libsoftfloat.a, so specify it first 568FP_TEST_LIBS := libtestfloat.a libsoftfloat.a $(LIBQEMUUTIL) 569 570fp-test$(EXESUF): fp-test.o slowfloat.o $(QEMU_SOFTFLOAT_OBJ) $(FP_TEST_LIBS) 571 572# Custom rule to build with SF_CFLAGS 573SF_BUILD = $(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \ 574 $(QEMU_CFLAGS) $(SF_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \ 575 $($@-cflags) -c -o $@ $<,"CC","$(TARGET_DIR)$@") 576 577$(SF_OBJS_ALL_NOSPEC): %.o: $(SF_SOURCE_DIR)/%.c 578 $(SF_BUILD) 579$(SF_OBJS_SPECIALIZE): %.o: $(SF_SPECIALIZE_DIR)/%.c 580 $(SF_BUILD) 581 582libsoftfloat.a: $(SF_OBJS_ALL) 583 584# Custom rule to build with TF_CFLAGS 585$(TF_OBJS_LIB) slowfloat.o: %.o: $(TF_SOURCE_DIR)/%.c 586 $(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \ 587 $(QEMU_CFLAGS) $(TF_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \ 588 $($@-cflags) -c -o $@ $<,"CC","$(TARGET_DIR)$@") 589 590libtestfloat.a: $(TF_OBJS_LIB) 591 592fp-bench$(EXESUF): fp-bench.o $(QEMU_SOFTFLOAT_OBJ) $(LIBQEMUUTIL) 593 594clean: 595 rm -f *.o *.d $(BINARIES) 596 rm -f *.gcno *.gcda *.gcov 597 rm -f fp-test$(EXESUF) 598 rm -f fp-bench$(EXESUF) 599 rm -f libsoftfloat.a 600 rm -f libtestfloat.a 601 602-include $(wildcard *.d) 603