* Fix timeouts in Travis-CI jobs
* Mark devices with user_creatable = false that can crash QEMU otherwise * Fix s390x TEST-AND-SET TCG instruction emulation * Move pc955* devices to hw/gpio/ -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmYBhdgRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbVcfA/9FulEN4HrjD3ObyboA+WfibXURwChui98 8LvL/fAGe3BZXQtspuNmPyrKRtIOrIwHJyFuxf2N5+8BuvGhEHQIuvIhQIj/rvfy X14KlldmQ3w3HlI3Ud4YiebLyK3AAFC2ApIywzFsnN+HoaHJR2EyDIb+T7OsGJZf ZLE/Z7qANxoNeZ+a3+rQR3SVpijyS3fXxDSaILrq2uW4kCCs/55O8Rt3Qb+PFSVd fF+OlpG6o+z73ACZc1u9Io4IO1ZZc/NdkmDTNz4HknkvJLTLF6kOECAxLl0ytgAG YRzBGKes29Zpa9wn/9rc75/OYNS0Ks+B19sQnijWUNX0zq5FkReXNXiyVcbT7d4p 6jFzlFnjj4ifB8uQkZTGcx/lL4s4VkPzF+f7fgHq9CKNrNsx8uca0TyQ8s4y+NGb C98kJdHd+QhCcuNnAbifCwuFaxQ8C4BdgzxVbU/sGDKNkINNkiTp+uue4TxnRKvV MfhqdnWRvqgZ0Rl4TxqcNfODK72Z1YNv3933OKE/mRJYS1Q529TIq4vfp8WIMsWQ 7+ipo4WKXhkiSOJZD6AkCoFum1W8yaDzUDJTw2Xt2bPBL3+FXcQyKkKVUMfzIJ8M KLe0Bb9W/pYU1ToTciTP0dkQF/02tG0Vik273445wPgH0x8OyHJkPF/ny1a7lKFO 5jreYdMxWdc= =lfZM -----END PGP SIGNATURE----- Merge tag 'pull-request-2024-03-25' of https://gitlab.com/thuth/qemu into staging * Fix timeouts in Travis-CI jobs * Mark devices with user_creatable = false that can crash QEMU otherwise * Fix s390x TEST-AND-SET TCG instruction emulation * Move pc955* devices to hw/gpio/ # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmYBhdgRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbVcfA/9FulEN4HrjD3ObyboA+WfibXURwChui98 # 8LvL/fAGe3BZXQtspuNmPyrKRtIOrIwHJyFuxf2N5+8BuvGhEHQIuvIhQIj/rvfy # X14KlldmQ3w3HlI3Ud4YiebLyK3AAFC2ApIywzFsnN+HoaHJR2EyDIb+T7OsGJZf # ZLE/Z7qANxoNeZ+a3+rQR3SVpijyS3fXxDSaILrq2uW4kCCs/55O8Rt3Qb+PFSVd # fF+OlpG6o+z73ACZc1u9Io4IO1ZZc/NdkmDTNz4HknkvJLTLF6kOECAxLl0ytgAG # YRzBGKes29Zpa9wn/9rc75/OYNS0Ks+B19sQnijWUNX0zq5FkReXNXiyVcbT7d4p # 6jFzlFnjj4ifB8uQkZTGcx/lL4s4VkPzF+f7fgHq9CKNrNsx8uca0TyQ8s4y+NGb # C98kJdHd+QhCcuNnAbifCwuFaxQ8C4BdgzxVbU/sGDKNkINNkiTp+uue4TxnRKvV # MfhqdnWRvqgZ0Rl4TxqcNfODK72Z1YNv3933OKE/mRJYS1Q529TIq4vfp8WIMsWQ # 7+ipo4WKXhkiSOJZD6AkCoFum1W8yaDzUDJTw2Xt2bPBL3+FXcQyKkKVUMfzIJ8M # KLe0Bb9W/pYU1ToTciTP0dkQF/02tG0Vik273445wPgH0x8OyHJkPF/ny1a7lKFO # 5jreYdMxWdc= # =lfZM # -----END PGP SIGNATURE----- # gpg: Signature made Mon 25 Mar 2024 14:10:32 GMT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2024-03-25' of https://gitlab.com/thuth/qemu: tests/tcg/s390x: Test TEST AND SET target/s390x: Use mutable temporary value for op_ts libqos/virtio.c: Correct 'flags' reading in qvirtqueue_kick misc/pca955*: Move models under hw/gpio aspeed: Make the ast1030-a1 SoC not user creatable aspeed: Make the ast2600-a3 SoC not user creatable hw/microblaze: Do not allow xlnx-zynqmp-pmu-soc to be created by the user .travis.yml: Remove the unused xfslib-dev package .travis.yml: Shorten the runtime of the problematic jobs Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
6a4180af96
10
.travis.yml
10
.travis.yml
@ -184,8 +184,8 @@ jobs:
|
|||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
- TEST_CMD="make check check-tcg V=1"
|
- TEST_CMD="make check check-tcg V=1"
|
||||||
- CONFIG="--disable-containers --enable-fdt=system
|
- CONFIG="--disable-containers
|
||||||
--target-list=${MAIN_SYSTEM_TARGETS},s390x-linux-user"
|
--target-list=hppa-softmmu,mips64-softmmu,ppc64-softmmu,riscv64-softmmu,s390x-softmmu,x86_64-softmmu"
|
||||||
- UNRELIABLE=true
|
- UNRELIABLE=true
|
||||||
script:
|
script:
|
||||||
- BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$?
|
- BUILD_RC=0 && make -j${JOBS} || BUILD_RC=$?
|
||||||
@ -220,13 +220,12 @@ jobs:
|
|||||||
- libsnappy-dev
|
- libsnappy-dev
|
||||||
- libzstd-dev
|
- libzstd-dev
|
||||||
- nettle-dev
|
- nettle-dev
|
||||||
- xfslibs-dev
|
|
||||||
- ninja-build
|
- ninja-build
|
||||||
# Tests dependencies
|
# Tests dependencies
|
||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
- CONFIG="--disable-containers --enable-fdt=system --audio-drv-list=sdl
|
- CONFIG="--disable-containers --audio-drv-list=sdl --disable-user
|
||||||
--disable-user --target-list-exclude=${MAIN_SYSTEM_TARGETS}"
|
--target-list=arm-softmmu,avr-softmmu,microblaze-softmmu,sh4eb-softmmu,sparc64-softmmu,xtensaeb-softmmu"
|
||||||
|
|
||||||
- name: "[s390x] GCC (user)"
|
- name: "[s390x] GCC (user)"
|
||||||
arch: s390x
|
arch: s390x
|
||||||
@ -240,6 +239,7 @@ jobs:
|
|||||||
- flex
|
- flex
|
||||||
- bison
|
- bison
|
||||||
env:
|
env:
|
||||||
|
- TEST_CMD="make check check-tcg V=1"
|
||||||
- CONFIG="--disable-containers --disable-system"
|
- CONFIG="--disable-containers --disable-system"
|
||||||
|
|
||||||
- name: "[s390x] Clang (disable-tcg)"
|
- name: "[s390x] Clang (disable-tcg)"
|
||||||
|
@ -1549,8 +1549,8 @@ M: Glenn Miles <milesg@linux.vnet.ibm.com>
|
|||||||
L: qemu-ppc@nongnu.org
|
L: qemu-ppc@nongnu.org
|
||||||
L: qemu-arm@nongnu.org
|
L: qemu-arm@nongnu.org
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: hw/misc/pca955*.c
|
F: hw/gpio/pca955*.c
|
||||||
F: include/hw/misc/pca955*.h
|
F: include/hw/gpio/pca955*.h
|
||||||
|
|
||||||
virtex_ml507
|
virtex_ml507
|
||||||
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
|
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "hw/block/flash.h"
|
#include "hw/block/flash.h"
|
||||||
#include "hw/i2c/i2c_mux_pca954x.h"
|
#include "hw/i2c/i2c_mux_pca954x.h"
|
||||||
#include "hw/i2c/smbus_eeprom.h"
|
#include "hw/i2c/smbus_eeprom.h"
|
||||||
#include "hw/misc/pca9552.h"
|
#include "hw/gpio/pca9552.h"
|
||||||
#include "hw/nvram/eeprom_at24c.h"
|
#include "hw/nvram/eeprom_at24c.h"
|
||||||
#include "hw/sensor/tmp105.h"
|
#include "hw/sensor/tmp105.h"
|
||||||
#include "hw/misc/led.h"
|
#include "hw/misc/led.h"
|
||||||
|
@ -424,6 +424,8 @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
|
|||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
AspeedSoCClass *sc = ASPEED_SOC_CLASS(dc);
|
AspeedSoCClass *sc = ASPEED_SOC_CLASS(dc);
|
||||||
|
|
||||||
|
/* Reason: The Aspeed SoC can only be instantiated from a board */
|
||||||
|
dc->user_creatable = false;
|
||||||
dc->realize = aspeed_soc_ast1030_realize;
|
dc->realize = aspeed_soc_ast1030_realize;
|
||||||
|
|
||||||
sc->name = "ast1030-a1";
|
sc->name = "ast1030-a1";
|
||||||
|
@ -656,6 +656,8 @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data)
|
|||||||
AspeedSoCClass *sc = ASPEED_SOC_CLASS(oc);
|
AspeedSoCClass *sc = ASPEED_SOC_CLASS(oc);
|
||||||
|
|
||||||
dc->realize = aspeed_soc_ast2600_realize;
|
dc->realize = aspeed_soc_ast2600_realize;
|
||||||
|
/* Reason: The Aspeed SoC can only be instantiated from a board */
|
||||||
|
dc->user_creatable = false;
|
||||||
|
|
||||||
sc->name = "ast2600-a3";
|
sc->name = "ast2600-a3";
|
||||||
sc->valid_cpu_types = valid_cpu_types;
|
sc->valid_cpu_types = valid_cpu_types;
|
||||||
|
@ -2,6 +2,8 @@ system_ss.add(when: 'CONFIG_GPIO_KEY', if_true: files('gpio_key.c'))
|
|||||||
system_ss.add(when: 'CONFIG_GPIO_MPC8XXX', if_true: files('mpc8xxx.c'))
|
system_ss.add(when: 'CONFIG_GPIO_MPC8XXX', if_true: files('mpc8xxx.c'))
|
||||||
system_ss.add(when: 'CONFIG_GPIO_PWR', if_true: files('gpio_pwr.c'))
|
system_ss.add(when: 'CONFIG_GPIO_PWR', if_true: files('gpio_pwr.c'))
|
||||||
system_ss.add(when: 'CONFIG_MAX7310', if_true: files('max7310.c'))
|
system_ss.add(when: 'CONFIG_MAX7310', if_true: files('max7310.c'))
|
||||||
|
system_ss.add(when: 'CONFIG_PCA9552', if_true: files('pca9552.c'))
|
||||||
|
system_ss.add(when: 'CONFIG_PCA9554', if_true: files('pca9554.c'))
|
||||||
system_ss.add(when: 'CONFIG_PL061', if_true: files('pl061.c'))
|
system_ss.add(when: 'CONFIG_PL061', if_true: files('pl061.c'))
|
||||||
system_ss.add(when: 'CONFIG_ZAURUS', if_true: files('zaurus.c'))
|
system_ss.add(when: 'CONFIG_ZAURUS', if_true: files('zaurus.c'))
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "qemu/bitops.h"
|
#include "qemu/bitops.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "hw/misc/pca9552.h"
|
#include "hw/gpio/pca9552.h"
|
||||||
#include "hw/misc/pca9552_regs.h"
|
#include "hw/gpio/pca9552_regs.h"
|
||||||
#include "hw/irq.h"
|
#include "hw/irq.h"
|
||||||
#include "migration/vmstate.h"
|
#include "migration/vmstate.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
@ -11,8 +11,8 @@
|
|||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "qemu/bitops.h"
|
#include "qemu/bitops.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "hw/misc/pca9554.h"
|
#include "hw/gpio/pca9554.h"
|
||||||
#include "hw/misc/pca9554_regs.h"
|
#include "hw/gpio/pca9554_regs.h"
|
||||||
#include "hw/irq.h"
|
#include "hw/irq.h"
|
||||||
#include "migration/vmstate.h"
|
#include "migration/vmstate.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
@ -13,6 +13,10 @@ nrf51_gpio_write(uint64_t offset, uint64_t value) "offset 0x%" PRIx64 " value 0x
|
|||||||
nrf51_gpio_set(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
|
nrf51_gpio_set(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
|
||||||
nrf51_gpio_update_output_irq(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
|
nrf51_gpio_update_output_irq(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
|
||||||
|
|
||||||
|
# pca9552.c
|
||||||
|
pca955x_gpio_status(const char *description, const char *buf) "%s GPIOs 0-15 [%s]"
|
||||||
|
pca955x_gpio_change(const char *description, unsigned id, unsigned prev_state, unsigned current_state) "%s GPIO id:%u status: %u -> %u"
|
||||||
|
|
||||||
# pl061.c
|
# pl061.c
|
||||||
pl061_update(const char *id, uint32_t dir, uint32_t data, uint32_t pullups, uint32_t floating) "%s GPIODIR 0x%x GPIODATA 0x%x pullups 0x%x floating 0x%x"
|
pl061_update(const char *id, uint32_t dir, uint32_t data, uint32_t pullups, uint32_t floating) "%s GPIODIR 0x%x GPIODATA 0x%x pullups 0x%x floating 0x%x"
|
||||||
pl061_set_output(const char *id, int gpio, int level) "%s setting output %d to %d"
|
pl061_set_output(const char *id, int gpio, int level) "%s setting output %d to %d"
|
||||||
|
@ -125,6 +125,8 @@ static void xlnx_zynqmp_pmu_soc_class_init(ObjectClass *oc, void *data)
|
|||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||||
|
|
||||||
|
/* xlnx-zynqmp-pmu-soc causes crashes when cold-plugged twice */
|
||||||
|
dc->user_creatable = false;
|
||||||
dc->realize = xlnx_zynqmp_pmu_soc_realize;
|
dc->realize = xlnx_zynqmp_pmu_soc_realize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ system_ss.add(when: 'CONFIG_EDU', if_true: files('edu.c'))
|
|||||||
system_ss.add(when: 'CONFIG_FW_CFG_DMA', if_true: files('vmcoreinfo.c'))
|
system_ss.add(when: 'CONFIG_FW_CFG_DMA', if_true: files('vmcoreinfo.c'))
|
||||||
system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugexit.c'))
|
system_ss.add(when: 'CONFIG_ISA_DEBUG', if_true: files('debugexit.c'))
|
||||||
system_ss.add(when: 'CONFIG_ISA_TESTDEV', if_true: files('pc-testdev.c'))
|
system_ss.add(when: 'CONFIG_ISA_TESTDEV', if_true: files('pc-testdev.c'))
|
||||||
system_ss.add(when: 'CONFIG_PCA9552', if_true: files('pca9552.c'))
|
|
||||||
system_ss.add(when: 'CONFIG_PCA9554', if_true: files('pca9554.c'))
|
|
||||||
system_ss.add(when: 'CONFIG_PCI_TESTDEV', if_true: files('pci-testdev.c'))
|
system_ss.add(when: 'CONFIG_PCI_TESTDEV', if_true: files('pci-testdev.c'))
|
||||||
system_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c'))
|
system_ss.add(when: 'CONFIG_UNIMP', if_true: files('unimp.c'))
|
||||||
system_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c'))
|
system_ss.add(when: 'CONFIG_EMPTY_SLOT', if_true: files('empty_slot.c'))
|
||||||
|
@ -327,10 +327,6 @@ grlib_apb_pnp_read(uint64_t addr, unsigned size, uint32_t value) "APB PnP read a
|
|||||||
led_set_intensity(const char *color, const char *desc, uint8_t intensity_percent) "LED desc:'%s' color:%s intensity: %u%%"
|
led_set_intensity(const char *color, const char *desc, uint8_t intensity_percent) "LED desc:'%s' color:%s intensity: %u%%"
|
||||||
led_change_intensity(const char *color, const char *desc, uint8_t old_intensity_percent, uint8_t new_intensity_percent) "LED desc:'%s' color:%s intensity %u%% -> %u%%"
|
led_change_intensity(const char *color, const char *desc, uint8_t old_intensity_percent, uint8_t new_intensity_percent) "LED desc:'%s' color:%s intensity %u%% -> %u%%"
|
||||||
|
|
||||||
# pca9552.c
|
|
||||||
pca955x_gpio_status(const char *description, const char *buf) "%s GPIOs 0-15 [%s]"
|
|
||||||
pca955x_gpio_change(const char *description, unsigned id, unsigned prev_state, unsigned current_state) "%s GPIO id:%u status: %u -> %u"
|
|
||||||
|
|
||||||
# bcm2835_cprman.c
|
# bcm2835_cprman.c
|
||||||
bcm2835_cprman_read(uint64_t offset, uint64_t value) "offset:0x%" PRIx64 " value:0x%" PRIx64
|
bcm2835_cprman_read(uint64_t offset, uint64_t value) "offset:0x%" PRIx64 " value:0x%" PRIx64
|
||||||
bcm2835_cprman_write(uint64_t offset, uint64_t value) "offset:0x%" PRIx64 " value:0x%" PRIx64
|
bcm2835_cprman_write(uint64_t offset, uint64_t value) "offset:0x%" PRIx64 " value:0x%" PRIx64
|
||||||
|
@ -4781,9 +4781,10 @@ static DisasJumpType op_trXX(DisasContext *s, DisasOps *o)
|
|||||||
|
|
||||||
static DisasJumpType op_ts(DisasContext *s, DisasOps *o)
|
static DisasJumpType op_ts(DisasContext *s, DisasOps *o)
|
||||||
{
|
{
|
||||||
TCGv_i32 t1 = tcg_constant_i32(0xff);
|
TCGv_i32 ff = tcg_constant_i32(0xff);
|
||||||
|
TCGv_i32 t1 = tcg_temp_new_i32();
|
||||||
|
|
||||||
tcg_gen_atomic_xchg_i32(t1, o->in2, t1, get_mem_index(s), MO_UB);
|
tcg_gen_atomic_xchg_i32(t1, o->in2, ff, get_mem_index(s), MO_UB);
|
||||||
tcg_gen_extract_i32(cc_op, t1, 7, 1);
|
tcg_gen_extract_i32(cc_op, t1, 7, 1);
|
||||||
set_cc_static(s);
|
set_cc_static(s);
|
||||||
return DISAS_NEXT;
|
return DISAS_NEXT;
|
||||||
|
@ -394,7 +394,7 @@ void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq,
|
|||||||
qvirtio_writew(d, qts, vq->avail + 2, idx + 1);
|
qvirtio_writew(d, qts, vq->avail + 2, idx + 1);
|
||||||
|
|
||||||
/* Must read after idx is updated */
|
/* Must read after idx is updated */
|
||||||
flags = qvirtio_readw(d, qts, vq->avail);
|
flags = qvirtio_readw(d, qts, vq->used);
|
||||||
avail_event = qvirtio_readw(d, qts, vq->used + 4 +
|
avail_event = qvirtio_readw(d, qts, vq->used + 4 +
|
||||||
sizeof(struct vring_used_elem) * vq->size);
|
sizeof(struct vring_used_elem) * vq->size);
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "libqtest.h"
|
#include "libqtest.h"
|
||||||
#include "libqos/qgraph.h"
|
#include "libqos/qgraph.h"
|
||||||
#include "libqos/i2c.h"
|
#include "libqos/i2c.h"
|
||||||
#include "hw/misc/pca9552_regs.h"
|
#include "hw/gpio/pca9552_regs.h"
|
||||||
|
|
||||||
#define PCA9552_TEST_ID "pca9552-test"
|
#define PCA9552_TEST_ID "pca9552-test"
|
||||||
#define PCA9552_TEST_ADDR 0x60
|
#define PCA9552_TEST_ADDR 0x60
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
*/
|
*/
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "libqtest.h"
|
#include "libqtest.h"
|
||||||
#include "hw/misc/pca9554_regs.h"
|
#include "hw/gpio/pca9554_regs.h"
|
||||||
#include "hw/misc/pca9552_regs.h"
|
#include "hw/gpio/pca9552_regs.h"
|
||||||
#include "pnv-xscom.h"
|
#include "pnv-xscom.h"
|
||||||
|
|
||||||
#define PPC_BIT(bit) (0x8000000000000000ULL >> (bit))
|
#define PPC_BIT(bit) (0x8000000000000000ULL >> (bit))
|
||||||
|
@ -47,6 +47,7 @@ TESTS+=add-logical-with-carry
|
|||||||
TESTS+=lae
|
TESTS+=lae
|
||||||
TESTS+=cvd
|
TESTS+=cvd
|
||||||
TESTS+=cvb
|
TESTS+=cvb
|
||||||
|
TESTS+=ts
|
||||||
|
|
||||||
cdsg: CFLAGS+=-pthread
|
cdsg: CFLAGS+=-pthread
|
||||||
cdsg: LDFLAGS+=-pthread
|
cdsg: LDFLAGS+=-pthread
|
||||||
|
35
tests/tcg/s390x/ts.c
Normal file
35
tests/tcg/s390x/ts.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Test the TEST AND SET instruction.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static int ts(char *p)
|
||||||
|
{
|
||||||
|
int cc;
|
||||||
|
|
||||||
|
asm("ts %[p]\n"
|
||||||
|
"ipm %[cc]"
|
||||||
|
: [cc] "=r" (cc)
|
||||||
|
, [p] "+Q" (*p)
|
||||||
|
: : "cc");
|
||||||
|
|
||||||
|
return (cc >> 28) & 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
|
||||||
|
c = 0x80;
|
||||||
|
assert(ts(&c) == 1);
|
||||||
|
assert(c == 0xff);
|
||||||
|
|
||||||
|
c = 0x7f;
|
||||||
|
assert(ts(&c) == 0);
|
||||||
|
assert(c == 0xff);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user