.travis.yml | 27 +++++++++++++++++++-------- configure | 33 ++++++++++++++++++++++++++++++--- fpu/softfloat-specialize.h | 24 ++++++++++++++++-------- fpu/softfloat.c | 10 ++++++++++ tests/docker/Makefile.include | 6 +++--- tests/docker/travis | 1 + tests/docker/travis.py | 11 +++++------ 7 files changed, 84 insertions(+), 28 deletions(-)
The following changes since commit d97a39d903fe33c45be83ac6943a2f82a3649a11:
Merge remote-tracking branch 'remotes/ehabkost/tags/x86-next-pull-request' into staging (2019-03-22 09:37:38 +0000)
are available in the Git repository at:
https://github.com/stsquad/qemu.git tags/pull-testing-and-fpu-fixes-250319-1
for you to fetch changes up to 87db90182060e0fc821a99cbc2cc2f4ebf1b721d:
docker: trivial changes to `make docker` help (2019-03-25 10:39:19 +0000)
----------------------------------------------------------------
Mix of testing & fpu fixes
- more splitting of Travis matric to avoid timeouts
- Fused Multiply-Add fixes for MIPS and hardfloat
- cleanups to docker travis emulation
----------------------------------------------------------------
Alex Bennée (4):
configure: add --target-list-exclude
.travis.yml: split some more system builds
.travis.yml: --disable-user for --without-default-devices
.travis.yml: reduce number of targets built while disabling things
Kito Cheng (1):
hardfloat: fix float32/64 fused multiply-add
Mateja Marjanovic (1):
target/mips: Fix minor bug in FPU
Wainer dos Santos Moschetta (3):
docker: Fix travis.py parser and misc change
docker: Fix travis script unable to find source dir
docker: trivial changes to `make docker` help
.travis.yml | 27 +++++++++++++++++++--------
configure | 33 ++++++++++++++++++++++++++++++---
fpu/softfloat-specialize.h | 24 ++++++++++++++++--------
fpu/softfloat.c | 10 ++++++++++
tests/docker/Makefile.include | 6 +++---
tests/docker/travis | 1 +
tests/docker/travis.py | 11 +++++------
7 files changed, 84 insertions(+), 28 deletions(-)
--
2.20.1
On Mon, 25 Mar 2019 at 13:20, Alex Bennée <alex.bennee@linaro.org> wrote: > > The following changes since commit d97a39d903fe33c45be83ac6943a2f82a3649a11: > > Merge remote-tracking branch 'remotes/ehabkost/tags/x86-next-pull-request' into staging (2019-03-22 09:37:38 +0000) > > are available in the Git repository at: > > https://github.com/stsquad/qemu.git tags/pull-testing-and-fpu-fixes-250319-1 > > for you to fetch changes up to 87db90182060e0fc821a99cbc2cc2f4ebf1b721d: > > docker: trivial changes to `make docker` help (2019-03-25 10:39:19 +0000) > > ---------------------------------------------------------------- > Mix of testing & fpu fixes > > - more splitting of Travis matric to avoid timeouts > - Fused Multiply-Add fixes for MIPS and hardfloat > - cleanups to docker travis emulation > > ---------------------------------------------------------------- Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0 for any user-visible changes. -- PMM
This is an inverse selection which excludes a selected set of targets
from the default target list. It will mostly be useful for CI
configurations but it might be useful for some users as well.
You cannot specify --target-list and --target-list-exclude at the same
time.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
diff --git a/configure b/configure
index c5032425e6..1c563a7027 100755
--- a/configure
+++ b/configure
@@ -327,6 +327,7 @@ git="git"
# Don't accept a target_list environment variable.
unset target_list
+unset target_list_exclude
# Default value for a variable defining feature "foo".
# * foo="no" feature will only be used if --enable-foo arg is given
@@ -990,6 +991,14 @@ for opt do
--cpu=*)
;;
--target-list=*) target_list="$optarg"
+ if test "$target_list_exclude"; then
+ error_exit "Can't mix --target-list with --target-list-exclude"
+ fi
+ ;;
+ --target-list-exclude=*) target_list_exclude="$optarg"
+ if test "$target_list"; then
+ error_exit "Can't mix --target-list-exclude with --target-list"
+ fi
;;
--enable-trace-backends=*) trace_backends="$optarg"
;;
@@ -1601,9 +1610,26 @@ if [ "$bsd_user" = "yes" ]; then
mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
fi
-for config in $mak_wilds; do
- default_target_list="${default_target_list} $(basename "$config" .mak)"
-done
+if test -z "$target_list_exclude"; then
+ for config in $mak_wilds; do
+ default_target_list="${default_target_list} $(basename "$config" .mak)"
+ done
+else
+ exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
+ for config in $mak_wilds; do
+ target="$(basename "$config" .mak)"
+ exclude="no"
+ for excl in $exclude_list; do
+ if test "$excl" = "$target"; then
+ exclude="yes"
+ break;
+ fi
+ done
+ if test "$exclude" = "no"; then
+ default_target_list="${default_target_list} $target"
+ fi
+ done
+fi
# Enumerate public trace backends for --help output
trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
@@ -1622,6 +1648,7 @@ Standard options:
--target-list=LIST set target list (default: build everything)
$(echo Available targets: $default_target_list | \
fold -s -w 53 | sed -e 's/^/ /')
+ --target-list-exclude=LIST exclude a set of targets from the default target-list
Advanced options (experts only):
--source-path=PATH path of source code [$source_path]
--
2.20.1
We define a new class of targets (MAIN_SOFTMMU_TARGETS) to cover the
major architectures. We either just build those or use the new
target-list-exclude mechanism to remove them from the list. This will
hopefully stop some of the longer builds hitting the Travis timeout
limit.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
diff --git a/.travis.yml b/.travis.yml
index 980fc5c1eb..407fc25945 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -61,7 +61,8 @@ env:
- BUILD_DIR="."
- BASE_CONFIG="--disable-docs --disable-tools"
- TEST_CMD="make check -j3 V=1"
-
+ # This is broadly a list of "mainline" softmmu targets which have support across the major distros
+ - MAIN_SOFTMMU_TARGETS="aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
git:
# we want to do this ourselves
@@ -81,8 +82,13 @@ matrix:
- CONFIG="--disable-system"
+ # we split the system builds as it takes a while to build them all
+ - env:
+ - CONFIG="--disable-user --target-list=${MAIN_SOFTMMU_TARGETS}"
+
+
- env:
- - CONFIG="--disable-user"
+ - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}"
# Just build tools and run minimal unit and softfloat checks
@@ -106,7 +112,7 @@ matrix:
# Module builds are mostly of interest to major distros
- env:
- - CONFIG="--enable-modules --target-list=aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
+ - CONFIG="--enable-modules --target-list=${MAIN_SOFTMMU_TARGETS}"
# Alternate coroutines implementations are only really of interest to KVM users
@@ -141,13 +147,18 @@ matrix:
- env:
- - CONFIG="--disable-user"
+ - CONFIG="--disable-user --target-list=${MAIN_SOFTMMU_TARGETS}"
+ compiler: clang
+
+
+ - env:
+ - CONFIG="--disable-user --target-list-exclude=${MAIN_SOFTMMU_TARGETS}"
compiler: clang
# gprof/gcov are GCC features
- env:
- - CONFIG="--enable-gprof --enable-gcov --disable-pie --target-list=aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
+ - CONFIG="--enable-gprof --enable-gcov --disable-pie --target-list=${MAIN_SOFTMMU_TARGETS}"
after_success:
- ${SRC_DIR}/scripts/travis/coverage-summary.sh
@@ -182,7 +193,7 @@ matrix:
# MacOSX builds
- env:
- - CONFIG="--target-list=aarch64-softmmu,arm-softmmu,i386-softmmu,mips-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
+ - CONFIG="--target-list=${MAIN_SOFTMMU_TARGETS}"
os: osx
osx_image: xcode9.4
compiler: clang
--
2.20.1
This is essentially a softmmu tweak so don't bother building
linux-user builds as well.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
diff --git a/.travis.yml b/.travis.yml
index 407fc25945..3fb3dab46e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -165,7 +165,7 @@ matrix:
# We manually include builds which we disable "make check" for
- env:
- - CONFIG="--without-default-devices"
+ - CONFIG="--without-default-devices --disable-user"
- TEST_CMD=""
--
2.20.1
This build keeps timing out on Travis and it's unlikely including the
additional guest front-ends will catch any failures in the fallback
code.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
diff --git a/.travis.yml b/.travis.yml
index 3fb3dab46e..2e06aee9d0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -107,7 +107,7 @@ matrix:
- env:
- - CONFIG="--disable-linux-aio --disable-cap-ng --disable-attr --disable-brlapi --disable-libusb --disable-user --disable-replication"
+ - CONFIG="--disable-linux-aio --disable-cap-ng --disable-attr --disable-brlapi --disable-libusb --disable-replication --target-list=${MAIN_SOFTMMU_TARGETS}"
# Module builds are mostly of interest to major distros
--
2.20.1
From: Mateja Marjanovic <Mateja.Marjanovic@rt-rk.com>
Wrong type of NaN was generated for IEEE 754-2008 by MADDF.<D|S> and
MSUBF.<D|S> instructions when the arguments were (Inf, Zero, NaN) or
(Zero, Inf, NaN).
The if-else statement establishes if the system conforms to IEEE
754-1985 or IEEE 754-2008, and defines different behaviors depending
on that. In case of IEEE 754-2008, in mentioned cases of inputs,
<MADDF|MSUBF>.<D|S> returns the input value 'c' [2] (page 53) and
raises floating point exception 'Invalid Operation' [1] (pages 349,
350).
These scenarios were tested and the results in QEMU emulation match
the results obtained on the machine that has a MIPS64R6 CPU.
[1] MIPS Architecture for Programmers Volume II-a: The MIPS64
Instruction Set Reference Manual, Revision 6.06
[2] MIPS Architecture for Programmers Volume IV-j: The MIPS64
SIMD Architecture Module, Revision 1.12
Signed-off-by: Mateja Marjanovic <mateja.marjanovic@rt-rk.com>
Message-Id: <1553008916-15274-2-git-send-email-mateja.marjanovic@rt-rk.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[AJB: fixed up commit message]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
diff --git a/fpu/softfloat-specialize.h b/fpu/softfloat-specialize.h
index 16c0bcb6fa..7b8895726c 100644
--- a/fpu/softfloat-specialize.h
+++ b/fpu/softfloat-specialize.h
@@ -495,15 +495,15 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
return 1;
}
#elif defined(TARGET_MIPS)
- /* For MIPS, the (inf,zero,qnan) case sets InvalidOp and returns
- * the default NaN
- */
- if (infzero) {
- float_raise(float_flag_invalid, status);
- return 3;
- }
-
if (snan_bit_is_one(status)) {
+ /*
+ * For MIPS systems that conform to IEEE754-1985, the (inf,zero,nan)
+ * case sets InvalidOp and returns the default NaN
+ */
+ if (infzero) {
+ float_raise(float_flag_invalid, status);
+ return 3;
+ }
/* Prefer sNaN over qNaN, in the a, b, c order. */
if (is_snan(a_cls)) {
return 0;
@@ -519,6 +519,14 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
return 2;
}
} else {
+ /*
+ * For MIPS systems that conform to IEEE754-2008, the (inf,zero,nan)
+ * case sets InvalidOp and returns the input value 'c'
+ */
+ if (infzero) {
+ float_raise(float_flag_invalid, status);
+ return 2;
+ }
/* Prefer sNaN over qNaN, in the c, a, b order. */
if (is_snan(c_cls)) {
return 2;
--
2.20.1
From: Kito Cheng <kito.cheng@gmail.com>
Before falling back to softfloat FMA, we do not restore the original
values of inputs A and C. Fix it.
This bug was caught by running gcc's testsuite on RISC-V qemu.
Note that this change gives a small perf increase for fp-bench:
Host: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
Command: perf stat -r 3 taskset -c 0 ./fp-bench -o mulAdd -p $prec
- $prec = single:
- before:
101.71 MFlops
102.18 MFlops
100.96 MFlops
- after:
103.63 MFlops
103.05 MFlops
102.96 MFlops
- $prec = double:
- before:
173.10 MFlops
173.93 MFlops
172.11 MFlops
- after:
178.49 MFlops
178.88 MFlops
178.66 MFlops
Signed-off-by: Kito Cheng <kito.cheng@gmail.com>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Message-Id: <20190322204320.17777-1-cota@braap.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 4610738ab1..2ba36ec370 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -1596,6 +1596,9 @@ float32_muladd(float32 xa, float32 xb, float32 xc, int flags, float_status *s)
}
ur.h = up.h + uc.h;
} else {
+ union_float32 ua_orig = ua;
+ union_float32 uc_orig = uc;
+
if (flags & float_muladd_negate_product) {
ua.h = -ua.h;
}
@@ -1608,6 +1611,8 @@ float32_muladd(float32 xa, float32 xb, float32 xc, int flags, float_status *s)
if (unlikely(f32_is_inf(ur))) {
s->float_exception_flags |= float_flag_overflow;
} else if (unlikely(fabsf(ur.h) <= FLT_MIN)) {
+ ua = ua_orig;
+ uc = uc_orig;
goto soft;
}
}
@@ -1662,6 +1667,9 @@ float64_muladd(float64 xa, float64 xb, float64 xc, int flags, float_status *s)
}
ur.h = up.h + uc.h;
} else {
+ union_float64 ua_orig = ua;
+ union_float64 uc_orig = uc;
+
if (flags & float_muladd_negate_product) {
ua.h = -ua.h;
}
@@ -1674,6 +1682,8 @@ float64_muladd(float64 xa, float64 xb, float64 xc, int flags, float_status *s)
if (unlikely(f64_is_inf(ur))) {
s->float_exception_flags |= float_flag_overflow;
} else if (unlikely(fabs(ur.h) <= FLT_MIN)) {
+ ua = ua_orig;
+ uc = uc_orig;
goto soft;
}
}
--
2.20.1
From: Wainer dos Santos Moschetta <wainersm@redhat.com>
Fixed the travis.py script that has failed to parse the current
QEMU_SRC/.travis.yml file. It no longer makes combinations from
env/matrix, instead it uses explicit includes. Also the compiler
can be omitted from matrix/include, so that Travis chooses the
first entry of the global compiler list.
Replaced yaml.load() with yaml.safe_load() so that quieting the
following deprecation warning:
https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Message-Id: <20190320221207.11366-2-wainersm@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
diff --git a/tests/docker/travis.py b/tests/docker/travis.py
index ea1ef169e6..e1433012bd 100755
--- a/tests/docker/travis.py
+++ b/tests/docker/travis.py
@@ -17,18 +17,17 @@ import yaml
import itertools
def load_yaml(fname):
- return yaml.load(open(fname, "r").read())
+ return yaml.safe_load(open(fname, "r").read())
def conf_iter(conf):
+ # If "compiler" is omitted from the included env then Travis picks the
+ # first entry of the global compiler list.
+ default_compiler = conf["compiler"][0]
def env_to_list(env):
return env if isinstance(env, list) else [env]
for entry in conf["matrix"]["include"]:
yield {"env": env_to_list(entry["env"]),
- "compiler": entry["compiler"]}
- for entry in itertools.product(conf["compiler"],
- conf["env"]["matrix"]):
- yield {"env": env_to_list(entry[1]),
- "compiler": entry[0]}
+ "compiler": entry.get("compiler", default_compiler)}
def main():
if len(sys.argv) < 2:
--
2.20.1
From: Wainer dos Santos Moschetta <wainersm@redhat.com> The script generated from QEMU_SRC/.travis.yml uses BUILD_DIR and SRC_DIR path relative to the current dir, unless these variables are exported in environment. Since commit 05790dafef1 BUILD_DIR is exported in the runner script, although SRC_DIR is not, so that make docker-travis fails becase the reference to source dir is wrong. So let's unset both BUILD_DIR and SRC_DIR before calling the script, given it is executed from the source dir already (as in Travis). Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com> Message-Id: <20190320221207.11366-3-wainersm@redhat.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> diff --git a/tests/docker/travis b/tests/docker/travis index d345393ced..47c03677d6 100755 --- a/tests/docker/travis +++ b/tests/docker/travis @@ -18,4 +18,5 @@ cmdfile=/tmp/travis_cmd_list.sh $QEMU_SRC/tests/docker/travis.py $QEMU_SRC/.travis.yml > $cmdfile chmod +x $cmdfile cd "$QEMU_SRC" +unset BUILD_DIR SRC_DIR $cmdfile -- 2.20.1
From: Wainer dos Santos Moschetta <wainersm@redhat.com> Apply double quotes and period punctuation uniformly. Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com> Message-Id: <20190321212528.6100-1-wainersm@redhat.com> Reviewed-by: Fam Zheng <fam@euphon.net> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 60314d293a..c0e1bf57a3 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -151,15 +151,15 @@ docker: @echo @echo ' docker: Print this help.' @echo ' docker-all-tests: Run all image/test combinations.' - @echo ' docker-TEST: Run TEST on all image combinations.' + @echo ' docker-TEST: Run "TEST" on all image combinations.' @echo ' docker-clean: Kill and remove residual docker testing containers.' @echo ' docker-TEST@IMAGE: Run "TEST" in container "IMAGE".' @echo ' Note: "TEST" is one of the listed test name,' @echo ' or a script name under $$QEMU_SRC/tests/docker/;' - @echo ' "IMAGE" is one of the listed container name."' + @echo ' "IMAGE" is one of the listed container name.' @echo ' docker-image: Build all images.' @echo ' docker-image-IMAGE: Build image "IMAGE".' - @echo ' docker-run: For manually running a "TEST" with "IMAGE"' + @echo ' docker-run: For manually running a "TEST" with "IMAGE".' @echo @echo 'Available container images:' @echo ' $(DOCKER_IMAGES)' -- 2.20.1
© 2016 - 2026 Red Hat, Inc.