qemu/tests/fp/Makefile
<<
>>
Prefs
   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