• E
    fpu: introduce hardfloat · a94b7839
    Emilio G. Cota 提交于
    The appended paves the way for leveraging the host FPU for a subset
    of guest FP operations. For most guest workloads (e.g. FP flags
    aren't ever cleared, inexact occurs often and rounding is set to the
    default [to nearest]) this will yield sizable performance speedups.
    
    The approach followed here avoids checking the FP exception flags register.
    See the added comment for details.
    
    This assumes that QEMU is running on an IEEE754-compliant FPU and
    that the rounding is set to the default (to nearest). The
    implementation-dependent specifics of the FPU should not matter; things
    like tininess detection and snan representation are still dealt with in
    soft-fp. However, this approach will break on most hosts if we compile
    QEMU with flags that break IEEE compatibility. There is no way to detect
    all of these flags at compilation time, but at least we check for
    -ffast-math (which defines __FAST_MATH__) and disable hardfloat
    (plus emit a #warning) when it is set.
    
    This patch just adds common code. Some operations will be migrated
    to hardfloat in subsequent patches to ease bisection.
    
    Note: some architectures (at least PPC, there might be others) clear
    the status flags passed to softfloat before most FP operations. This
    precludes the use of hardfloat, so to avoid introducing a performance
    regression for those targets, we add a flag to disable hardfloat.
    In the long run though it would be good to fix the targets so that
    at least the inexact flag passed to softfloat is indeed sticky.
    Reviewed-by: NAlex Bennée <alex.bennee@linaro.org>
    Signed-off-by: NEmilio G. Cota <cota@braap.org>
    Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
    a94b7839
softfloat.c 257.8 KB