qemu/tests
Fabiano Rosas 936fda4d77 target/ppc: Fix bcdsub. emulation when result overflows
The commit d03b174a83 (target/ppc: simplify bcdadd/sub functions)
meant to simplify some of the code but it inadvertently altered the
way the CR6 field is set after the operation has overflowed.

The CR6 bits are set based on the *unbounded* result of the operation,
so we need to look at the result before returning from bcd_add_mag,
otherwise we will look at 0 when it overflows.

Consider the following subtraction:

v0 = 0x9999999999999999999999999999999c (maximum positive BCD value)
v1 = 0x0000000000000000000000000000001d (negative one BCD value)
bcdsub. v0,v0,v1,0

The Power ISA 2.07B says:
If the unbounded result is greater than zero, do the following.
  If PS=0, the sign code of the result is set to 0b1100.
  If PS=1, the sign code of the result is set to 0b1111.
  If the operation overflows, CR field 6 is set to 0b0101. Otherwise,
  CR field 6 is set to 0b0100.

POWER9 hardware:
vr0 = 0x0000000000000000000000000000000c (positive zero BCD value)
cr6 = 0b0101 (0x5) (positive, overflow)

QEMU:
vr0 = 0x0000000000000000000000000000000c (positive zero BCD value)
cr6 = 0b0011 (0x3) (zero, overflow) <--- wrong

This patch reverts the part of d03b174a83 that introduced the
problem and adds a test-case to avoid further regressions:

before:
$ make run-tcg-tests-ppc64le-linux-user
(...)
  TEST    bcdsub on ppc64le
bcdsub: qemu/tests/tcg/ppc64le/bcdsub.c:58: test_bcdsub_gt:
Assertion `(cr >> 4) == ((1 << 2) | (1 << 0))' failed.

Fixes: d03b174a83 (target/ppc: simplify bcdadd/sub functions)
Reported-by: Paul Clarke <pc@us.ibm.com>
Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
Message-Id: <20210222194035.2723056-1-farosas@linux.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2021-03-10 09:07:09 +11:00
..
acceptance tests/acceptance: allow a "graceful" failing for virtio-gpu test 2021-02-24 11:05:14 +00:00
data qtest/acpi/bios-tables-test: update acpi tables 2021-02-23 10:58:42 -05:00
decode decodetree: Improve identifier matching 2020-09-14 14:23:19 +01:00
docker docker: Bump Fedora images to release 33 2021-02-24 11:05:10 +00:00
fp meson: adjust timeouts for some slower tests 2021-03-06 11:42:57 +01:00
guest-debug chardev: do not use short form boolean options in non-QemuOpts character device descriptions 2021-02-25 15:41:53 +01:00
image-fuzzer
include tests: add missing generated sources to testqapi 2020-10-17 10:45:50 -04:00
keys tests/vm: Add Haiku test based on their vagrant images 2020-11-17 09:45:24 +01:00
migration tests: Rename PAGE_SIZE definitions 2021-01-20 10:46:54 +01:00
multiboot Remove superfluous .gitignore files 2020-10-13 12:48:17 +02:00
perf/block/qcow2
plugin tests/plugin: allow memory plugin to do both inline and callbacks 2021-02-18 08:19:23 +00:00
qapi-schema qapi: Fix parse errors for removal of null from schema language 2021-03-05 15:40:50 +01:00
qemu-iotests hw/block/fdc: Remove the check_media_rate property 2021-02-20 12:36:19 +01:00
qtest * fix tracing vs -daemonize (Daniel) 2021-03-08 13:51:41 +00:00
rocker
tcg target/ppc: Fix bcdsub. emulation when result overflows 2021-03-10 09:07:09 +11:00
tsan tests/docker: Added docker build support for TSan. 2020-06-16 14:49:05 +01:00
uefi-test-tools Remove superfluous .gitignore files 2020-10-13 12:48:17 +02:00
vm tests/docker, tests/vm: remove setuptools from images 2020-11-25 12:50:48 -05:00
vmstate-static-checker-data
atomic64-bench.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
atomic_add-bench.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
benchmark-crypto-cipher.c tests: fix output message formatting for crypto benchmarks 2020-09-10 11:02:17 +01:00
benchmark-crypto-hash.c tests: fix output message formatting for crypto benchmarks 2020-09-10 11:02:17 +01:00
benchmark-crypto-hmac.c tests: fix output message formatting for crypto benchmarks 2020-09-10 11:02:17 +01:00
check-block-qdict.c tests: Use error_free_or_abort() where appropriate 2020-07-02 06:25:28 +02:00
check-block.sh iotests: rewrite check into python 2021-01-27 20:53:14 +01:00
check-qdict.c
check-qjson.c qobject: Drop qstring_get_try_str() 2020-12-19 10:39:16 +01:00
check-qlist.c qobject: Eliminate qlist_iter(), use QLIST_FOREACH_ENTRY() instead 2020-04-30 06:51:15 +02:00
check-qlit.c
check-qnull.c
check-qnum.c qobject: Fix qnum_to_string() to use sufficient precision 2020-12-19 10:37:16 +01:00
check-qobject.c qobject: Make QString immutable 2020-12-19 10:39:41 +01:00
check-qom-interface.c Use DECLARE_*CHECKER* macros 2020-09-09 09:27:09 -04:00
check-qom-proplist.c qom: Clean up object_property_get_enum()'s error value 2020-09-18 13:49:48 -04:00
check-qstring.c qobject: Make QString immutable 2020-12-19 10:39:41 +01:00
crypto-tls-psk-helpers.c
crypto-tls-psk-helpers.h
crypto-tls-x509-helpers.c tests: Replace deprecated ASN1 code 2021-01-29 17:07:53 +00:00
crypto-tls-x509-helpers.h tests: Replace deprecated ASN1 code 2021-01-29 17:07:53 +00:00
dbus-vmstate-daemon.sh tests: add dbus-vmstate-test 2020-01-06 18:41:32 +04:00
io-channel-helpers.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
io-channel-helpers.h test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
iothread.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
iothread.h
Makefile.include tests/Makefile.include: don't use TARGET_DIRS for check-tcg 2021-02-08 10:55:20 +00:00
meson.build meson: adjust timeouts for some slower tests 2021-03-06 11:42:57 +01:00
pkix_asn1_tab.c tests: Replace deprecated ASN1 code 2021-01-29 17:07:53 +00:00
ptimer-test-stubs.c replay: do not build if TCG is not available 2020-10-22 11:53:54 -04:00
ptimer-test.c tests/ptimer: Remove unnecessary inclusion of libqtest.h 2020-01-12 11:42:40 +01:00
ptimer-test.h
qht-bench.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
rcutorture.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
requirements.txt Acceptance Tests: bump Avocado version requirement to 85.0 2021-02-15 18:56:57 -05:00
socket-helpers.c tests/socket-helpers: Treat EAI_NONAME as EADDRNOTAVAIL 2020-09-16 08:41:06 +02:00
socket-helpers.h
test-aio-multithread.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
test-aio.c util/async: make bh_aio_poll() O(1) 2020-02-22 08:26:47 +00:00
test-authz-list.c authz: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-authz-listfile.c authz: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-authz-pam.c tests: Fix runtime error in test-authz-pam 2021-01-29 17:07:53 +00:00
test-authz-simple.c authz: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-base64.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
test-bdrv-drain.c block: End quiescent sections when a BDS is deleted 2020-10-27 15:26:20 +01:00
test-bdrv-graph-mod.c block: use return status of bdrv_append() 2021-02-12 15:39:44 -06:00
test-bitcnt.c
test-bitmap.c mingw: fix error __USE_MINGW_ANSI_STDIO redefined 2020-10-13 13:33:46 +02:00
test-bitops.c
test-block-backend.c
test-block-iothread.c tests: Use error_free_or_abort() where appropriate 2020-07-02 06:25:28 +02:00
test-blockjob-txn.c
test-blockjob.c job: take each job's lock individually in job_txn_apply 2020-04-07 14:34:47 +02:00
test-bufferiszero.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
test-char.c docs: update to show preferred boolean syntax for -chardev 2021-02-25 14:14:33 +01:00
test-clone-visitor.c qapi: Use QAPI_LIST_PREPEND() where possible 2020-12-19 10:20:14 +01:00
test-coroutine.c
test-crypto-afsplit.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-block.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-cipher.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-hash.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-hmac.c
test-crypto-ivgen.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-pbkdf.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
test-crypto-secret.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-crypto-tlscredsx509.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-crypto-tlssession.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-crypto-xts.c crypt: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-cutils.c
test-fdmon-epoll.c tests: add test-fdmon-epoll 2020-09-23 13:45:52 +01:00
test-hbitmap.c block/dirty-bitmap: improve _next_dirty_area API 2020-03-18 14:03:46 -04:00
test-image-locking.c
test-int128.c
test-io-channel-buffer.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-io-channel-command.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-io-channel-file.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-io-channel-socket.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-io-channel-tls.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-io-task.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
test-iov.c util/iov: add iov_discard_undo() 2020-09-23 13:41:58 +01:00
test-keyval.c keyval: Parse help options 2020-10-15 16:06:27 +02:00
test-logging.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
test-mul64.c
test-opts-visitor.c
test-qapi-util.c
test-qdev-global-props.c tests: Fixes test-qdev-global-props.c 2020-09-16 12:15:07 +02:00
test-qdist.c
test-qemu-opts.c qemu-option: warn for short-form boolean options 2021-01-23 15:55:08 -05:00
test-qga.c test-qga: fix a resource leak in test_qga_guest_get_osinfo() 2020-12-09 08:04:34 +01:00
test-qgraph.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
test-qht-par.c
test-qht.c
test-qmp-cmds.c qapi: Add a 'coroutine' flag for commands 2020-10-09 07:08:19 +02:00
test-qmp-event.c tests/test-qmp-event: Check event is actually emitted 2020-03-17 19:58:34 +01:00
test-qobject-input-visitor.c qapi: enable use of g_autoptr with QAPI types 2020-09-03 09:38:36 +02:00
test-qobject-output-visitor.c qapi: Use QAPI_LIST_APPEND in trivial cases 2021-01-28 08:08:45 +01:00
test-rcu-list.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
test-rcu-simpleq.c
test-rcu-slist.c rcu_queue: add QSLIST functions 2020-02-22 08:26:47 +00:00
test-rcu-tailq.c
test-replication.c tests: test-replication disable /replication/secondary/* on msys2/mingw. 2020-09-16 08:41:06 +02:00
test-shift128.c
test-string-input-visitor.c tests: Use &error_abort where appropriate 2020-07-02 06:25:28 +02:00
test-string-output-visitor.c qapi: Use QAPI_LIST_APPEND in trivial cases 2021-01-28 08:08:45 +01:00
test-thread-pool.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
test-throttle.c
test-timed-average.c cpu-timers, icount: new modules 2020-10-05 16:41:22 +02:00
test-util-filemonitor.c tests: Fixes building test-util-filemonitor.c on msys2/mingw 2020-09-07 12:34:17 +02:00
test-util-sockets.c sockets: Make abstract UnixSocketAddress depend on CONFIG_LINUX 2020-11-03 13:17:25 +00:00
test-uuid.c test: Fix LGPL information in the file headers 2020-11-15 17:04:40 +01:00
test-visitor-serialization.c qobject: Change qobject_to_json()'s value to GString 2020-12-19 10:38:43 +01:00
test-vmstate.c vmstate: Fixes test-vmstate.c on msys2/mingw 2020-09-16 08:41:06 +02:00
test-write-threshold.c block: refactor bdrv_check_request: add errp 2021-02-03 08:00:33 -06:00
test-x86-cpuid.c Revert "hw/i386: Update structures to save the number of nodes per package" 2020-09-02 07:29:26 -04:00
test-xbzrle.c tests: Rename PAGE_SIZE definitions 2021-01-20 10:46:54 +01:00
vhost-user-bridge.c libvhost-user: make it a meson subproject 2020-12-08 13:48:58 -05:00