diff options
296 files changed, 4282 insertions, 1314 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index d32c5c2313..cad58b9487 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -212,9 +212,7 @@ R: Aleksandar Rikalo <arikalo@wavecomp.com> S: Maintained F: target/mips/ F: default-configs/*mips* -F: disas/mips.c -F: disas/nanomips.cpp -F: disas/nanomips.h +F: disas/*mips* F: hw/intc/mips_gic.c F: hw/mips/ F: hw/misc/mips_* @@ -930,6 +928,7 @@ M: Aurelien Jarno <aurelien@aurel32.net> R: Aleksandar Rikalo <arikalo@wavecomp.com> S: Maintained F: hw/mips/mips_malta.c +F: hw/mips/gt64xxx_pci.c F: tests/acceptance/linux_ssh_mips_malta.py Mipssim @@ -2325,7 +2324,6 @@ M: Aurelien Jarno <aurelien@aurel32.net> R: Aleksandar Rikalo <arikalo@wavecomp.com> S: Maintained F: tcg/mips/ -F: disas/mips.c PPC TCG target M: Richard Henderson <rth@twiddle.net> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index b0c4bed6e3..e3cf72883b 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -87,6 +87,7 @@ struct KVMState #ifdef KVM_CAP_SET_GUEST_DEBUG QTAILQ_HEAD(, kvm_sw_breakpoint) kvm_sw_breakpoints; #endif + int max_nested_state_len; int many_ioeventfds; int intx_set_mask; bool sync_mmu; @@ -291,6 +292,11 @@ int kvm_destroy_vcpu(CPUState *cpu) DPRINTF("kvm_destroy_vcpu\n"); + ret = kvm_arch_destroy_vcpu(cpu); + if (ret < 0) { + goto err; + } + mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0); if (mmap_size < 0) { ret = mmap_size; @@ -863,8 +869,8 @@ static void kvm_mem_ioeventfd_add(MemoryListener *listener, data, true, int128_get64(section->size), match_data); if (r < 0) { - fprintf(stderr, "%s: error adding ioeventfd: %s\n", - __func__, strerror(-r)); + fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n", + __func__, strerror(-r), -r); abort(); } } @@ -881,6 +887,8 @@ static void kvm_mem_ioeventfd_del(MemoryListener *listener, data, false, int128_get64(section->size), match_data); if (r < 0) { + fprintf(stderr, "%s: error deleting ioeventfd: %s (%d)\n", + __func__, strerror(-r), -r); abort(); } } @@ -897,8 +905,8 @@ static void kvm_io_ioeventfd_add(MemoryListener *listener, data, true, int128_get64(section->size), match_data); if (r < 0) { - fprintf(stderr, "%s: error adding ioeventfd: %s\n", - __func__, strerror(-r)); + fprintf(stderr, "%s: error adding ioeventfd: %s (%d)\n", + __func__, strerror(-r), -r); abort(); } } @@ -916,6 +924,8 @@ static void kvm_io_ioeventfd_del(MemoryListener *listener, data, false, int128_get64(section->size), match_data); if (r < 0) { + fprintf(stderr, "%s: error deleting ioeventfd: %s (%d)\n", + __func__, strerror(-r), -r); abort(); } } @@ -1672,6 +1682,8 @@ static int kvm_init(MachineState *ms) s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS); #endif + s->max_nested_state_len = kvm_check_extension(s, KVM_CAP_NESTED_STATE); + #ifdef KVM_CAP_IRQ_ROUTING kvm_direct_msi_allowed = (kvm_check_extension(s, KVM_CAP_SIGNAL_MSI) > 0); #endif @@ -2239,6 +2251,11 @@ int kvm_has_debugregs(void) return kvm_state->debugregs; } +int kvm_max_nested_state_length(void) +{ + return kvm_state->max_nested_state_len; +} + int kvm_has_many_ioeventfds(void) { if (!kvm_enabled()) { diff --git a/cpus.c b/cpus.c index dde3b7b981..1af51b73dd 100644 --- a/cpus.c +++ b/cpus.c @@ -1594,7 +1594,6 @@ static void *qemu_hax_cpu_thread_fn(void *arg) cpu->thread_id = qemu_get_thread_id(); cpu->created = true; - cpu->halted = 0; current_cpu = cpu; hax_init_vcpu(cpu); diff --git a/docs/hyperv.txt b/docs/hyperv.txt new file mode 100644 index 0000000000..8fdf25c829 --- /dev/null +++ b/docs/hyperv.txt @@ -0,0 +1,201 @@ +Hyper-V Enlightenments +====================== + + +1. Description +=============== +In some cases when implementing a hardware interface in software is slow, KVM +implements its own paravirtualized interfaces. This works well for Linux as +guest support for such features is added simultaneously with the feature itself. +It may, however, be hard-to-impossible to add support for these interfaces to +proprietary OSes, namely, Microsoft Windows. + +KVM on x86 implements Hyper-V Enlightenments for Windows guests. These features +make Windows and Hyper-V guests think they're running on top of a Hyper-V +compatible hypervisor and use Hyper-V specific features. + + +2. Setup +========= +No Hyper-V enlightenments are enabled by default by either KVM or QEMU. In +QEMU, individual enlightenments can be enabled through CPU flags, e.g: + + qemu-system-x86_64 --enable-kvm --cpu host,hv_relaxed,hv_vpindex,hv_time, ... + +Sometimes there are dependencies between enlightenments, QEMU is supposed to +check that the supplied configuration is sane. + +When any set of the Hyper-V enlightenments is enabled, QEMU changes hypervisor +identification (CPUID 0x40000000..0x4000000A) to Hyper-V. KVM identification +and features are kept in leaves 0x40000100..0x40000101. + + +3. Existing enlightenments +=========================== + +3.1. hv-relaxed +================ +This feature tells guest OS to disable watchdog timeouts as it is running on a +hypervisor. It is known that some Windows versions will do this even when they +see 'hypervisor' CPU flag. + +3.2. hv-vapic +============== +Provides so-called VP Assist page MSR to guest allowing it to work with APIC +more efficiently. In particular, this enlightenment allows paravirtualized +(exit-less) EOI processing. + +3.3. hv-spinlocks=xxx +====================== +Enables paravirtualized spinlocks. The parameter indicates how many times +spinlock acquisition should be attempted before indicating the situation to the +hypervisor. A special value 0xffffffff indicates "never to retry". + +3.4. hv-vpindex +================ +Provides HV_X64_MSR_VP_INDEX (0x40000002) MSR to the guest which has Virtual +processor index information. This enlightenment makes sense in conjunction with +hv-synic, hv-stimer and other enlightenments which require the guest to know its +Virtual Processor indices (e.g. when VP index needs to be passed in a +hypercall). + +3.5. hv-runtime +================ +Provides HV_X64_MSR_VP_RUNTIME (0x40000010) MSR to the guest. The MSR keeps the +virtual processor run time in 100ns units. This gives guest operating system an +idea of how much time was 'stolen' from it (when the virtual CPU was preempted +to perform some other work). + +3.6. hv-crash +============== +Provides HV_X64_MSR_CRASH_P0..HV_X64_MSR_CRASH_P5 (0x40000100..0x40000105) and +HV_X64_MSR_CRASH_CTL (0x40000105) MSRs to the guest. These MSRs are written to +by the guest when it crashes, HV_X64_MSR_CRASH_P0..HV_X64_MSR_CRASH_P5 MSRs +contain additional crash information. This information is outputted in QEMU log +and through QAPI. +Note: unlike under genuine Hyper-V, write to HV_X64_MSR_CRASH_CTL causes guest +to shutdown. This effectively blocks crash dump generation by Windows. + +3.7. hv-time +============= +Enables two Hyper-V-specific clocksources available to the guest: MSR-based +Hyper-V clocksource (HV_X64_MSR_TIME_REF_COUNT, 0x40000020) and Reference TSC +page (enabled via MSR HV_X64_MSR_REFERENCE_TSC, 0x40000021). Both clocksources +are per-guest, Reference TSC page clocksource allows for exit-less time stamp +readings. Using this enlightenment leads to significant speedup of all timestamp +related operations. + +3.8. hv-synic +============== +Enables Hyper-V Synthetic interrupt controller - an extension of a local APIC. +When enabled, this enlightenment provides additional communication facilities +to the guest: SynIC messages and Events. This is a pre-requisite for +implementing VMBus devices (not yet in QEMU). Additionally, this enlightenment +is needed to enable Hyper-V synthetic timers. SynIC is controlled through MSRs +HV_X64_MSR_SCONTROL..HV_X64_MSR_EOM (0x40000080..0x40000084) and +HV_X64_MSR_SINT0..HV_X64_MSR_SINT15 (0x40000090..0x4000009F) + +Requires: hv-vpindex + +3.9. hv-stimer +=============== +Enables Hyper-V synthetic timers. There are four synthetic timers per virtual +CPU controlled through HV_X64_MSR_STIMER0_CONFIG..HV_X64_MSR_STIMER3_COUNT +(0x400000B0..0x400000B7) MSRs. These timers can work either in single-shot or +periodic mode. It is known that certain Windows versions revert to using HPET +(or even RTC when HPET is unavailable) extensively when this enlightenment is +not provided; this can lead to significant CPU consumption, even when virtual +CPU is idle. + +Requires: hv-vpindex, hv-synic, hv-time + +3.10. hv-tlbflush +================== +Enables paravirtualized TLB shoot-down mechanism. On x86 architecture, remote +TLB flush procedure requires sending IPIs and waiting for other CPUs to perform +local TLB flush. In virtualized environment some virtual CPUs may not even be +scheduled at the time of the call and may not require flushing (or, flushing +may be postponed until the virtual CPU is scheduled). hv-tlbflush enlightenment +implements TLB shoot-down through hypervisor enabling the optimization. + +Requires: hv-vpindex + +3.11. hv-ipi +============= +Enables paravirtualized IPI send mechanism. HvCallSendSyntheticClusterIpi +hypercall may target more than 64 virtual CPUs simultaneously, doing the same +through APIC requires more than one access (and thus exit to the hypervisor). + +Requires: hv-vpindex + +3.12. hv-vendor-id=xxx +======================= +This changes Hyper-V identification in CPUID 0x40000000.EBX-EDX from the default +"Microsoft Hv". The parameter should be no longer than 12 characters. According +to the specification, guests shouldn't use this information and it is unknown +if there is a Windows version which acts differently. +Note: hv-vendor-id is not an enlightenment and thus doesn't enable Hyper-V +identification when specified without some other enlightenment. + +3.13. hv-reset +=============== +Provides HV_X64_MSR_RESET (0x40000003) MSR to the guest allowing it to reset +itself by writing to it. Even when this MSR is enabled, it is not a recommended +way for Windows to perform system reboot and thus it may not be used. + +3.14. hv-frequencies +============================================ +Provides HV_X64_MSR_TSC_FREQUENCY (0x40000022) and HV_X64_MSR_APIC_FREQUENCY +(0x40000023) allowing the guest to get its TSC/APIC frequencies without doing +measurements. + +3.15 hv-reenlightenment +======================== +The enlightenment is nested specific, it targets Hyper-V on KVM guests. When +enabled, it provides HV_X64_MSR_REENLIGHTENMENT_CONTROL (0x40000106), +HV_X64_MSR_TSC_EMULATION_CONTROL (0x40000107)and HV_X64_MSR_TSC_EMULATION_STATUS +(0x40000108) MSRs allowing the guest to get notified when TSC frequency changes +(only happens on migration) and keep using old frequency (through emulation in +the hypervisor) until it is ready to switch to the new one. This, in conjunction +with hv-frequencies, allows Hyper-V on KVM to pass stable clocksource (Reference +TSC page) to its own guests. + +Recommended: hv-frequencies + +3.16. hv-evmcs +=============== +The enlightenment is nested specific, it targets Hyper-V on KVM guests. When +enabled, it provides Enlightened VMCS feature to the guest. The feature +implements paravirtualized protocol between L0 (KVM) and L1 (Hyper-V) +hypervisors making L2 exits to the hypervisor faster. The feature is Intel-only. +Note: some virtualization features (e.g. Posted Interrupts) are disabled when +hv-evmcs is enabled. It may make sense to measure your nested workload with and +without the feature to find out if enabling it is beneficial. + +Requires: hv-vapic + +3.17. hv-stimer-direct +======================= +Hyper-V specification allows synthetic timer operation in two modes: "classic", +when expiration event is delivered as SynIC message and "direct", when the event +is delivered via normal interrupt. It is known that nested Hyper-V can only +use synthetic timers in direct mode and thus 'hv-stimer-direct' needs to be +enabled. + +Requires: hv-vpindex, hv-synic, hv-time, hv-stimer + + +4. Development features +======================== +In some cases (e.g. during development) it may make sense to use QEMU in +'pass-through' mode and give Windows guests all enlightenments currently +supported by KVM. This pass-through mode is enabled by "hv-passthrough" CPU +flag. +Note: enabling this flag effectively prevents migration as supported features +may differ between target and destination. + + +4. Useful links +================ +Hyper-V Top Level Functional specification and other information: +https://github.com/MicrosoftDocs/Virtualization-Documentation diff --git a/hw/core/machine.c b/hw/core/machine.c index 84ebb8d247..ea5a01aa49 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -24,16 +24,13 @@ #include "hw/pci/pci.h" #include "hw/mem/nvdimm.h" -GlobalProperty hw_compat_4_0_1[] = { +GlobalProperty hw_compat_4_0[] = { { "VGA", "edid", "false" }, { "secondary-vga", "edid", "false" }, { "bochs-display", "edid", "false" }, { "virtio-vga", "edid", "false" }, { "virtio-gpu-pci", "edid", "false" }, }; -const size_t hw_compat_4_0_1_len = G_N_ELEMENTS(hw_compat_4_0_1); - -GlobalProperty hw_compat_4_0[] = {}; const size_t hw_compat_4_0_len = G_N_ELEMENTS(hw_compat_4_0); GlobalProperty hw_compat_3_1[] = { diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 2c5446b095..e96360b47a 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -111,9 +111,6 @@ struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX}; /* Physical Address of PVH entry point read from kernel ELF NOTE */ static size_t pvh_start_addr; -GlobalProperty pc_compat_4_0_1[] = {}; -const size_t pc_compat_4_0_1_len = G_N_ELEMENTS(pc_compat_4_0_1); - GlobalProperty pc_compat_4_0[] = {}; const size_t pc_compat_4_0_len = G_N_ELEMENTS(pc_compat_4_0); @@ -2386,7 +2383,8 @@ static void pc_cpu_pre_plug(HotplugHandler *hotplug_dev, } cpu->thread_id = topo.smt_id; - if (cpu->hyperv_vpindex && !kvm_hv_vpindex_settable()) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && + !kvm_hv_vpindex_settable()) { error_setg(errp, "kernel doesn't allow setting HyperV VP_INDEX"); return; } diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index dcddc64662..57232aed6b 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -378,8 +378,13 @@ static void pc_q35_4_0_1_machine_options(MachineClass *m) { pc_q35_4_1_machine_options(m); m->alias = NULL; - compat_props_add(m->compat_props, hw_compat_4_0_1, hw_compat_4_0_1_len); - compat_props_add(m->compat_props, pc_compat_4_0_1, pc_compat_4_0_1_len); + /* + * This is the default machine for the 4.0-stable branch. It is basically + * a 4.0 that doesn't use split irqchip by default. It MUST hence apply the + * 4.0 compat props. + */ + compat_props_add(m->compat_props, hw_compat_4_0, hw_compat_4_0_len); + compat_props_add(m->compat_props, pc_compat_4_0, pc_compat_4_0_len); } DEFINE_Q35_MACHINE(v4_0_1, "pc-q35-4.0.1", NULL, @@ -390,8 +395,7 @@ static void pc_q35_4_0_machine_options(MachineClass *m) pc_q35_4_0_1_machine_options(m); m->default_kernel_irqchip_split = true; m->alias = NULL; - compat_props_add(m->compat_props, hw_compat_4_0, hw_compat_4_0_len); - compat_props_add(m->compat_props, pc_compat_4_0, pc_compat_4_0_len); + /* Compat props are applied by the 4.0.1 machine */ } DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL, diff --git a/hw/s390x/css.c b/hw/s390x/css.c index ad310b9f94..b92395f165 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -22,6 +22,7 @@ #include "trace.h" #include "hw/s390x/s390_flic.h" #include "hw/s390x/s390-virtio-ccw.h" +#include "hw/s390x/s390-ccw.h" typedef struct CrwContainer { CRW crw; @@ -1205,6 +1206,26 @@ static void sch_handle_start_func_virtual(SubchDev *sch) } +static void sch_handle_halt_func_passthrough(SubchDev *sch) +{ + int ret; + + ret = s390_ccw_halt(sch); + if (ret == -ENOSYS) { + sch_handle_halt_func(sch); + } +} + +static void sch_handle_clear_func_passthrough(SubchDev *sch) +{ + int ret; + + ret = s390_ccw_clear(sch); + if (ret == -ENOSYS) { + sch_handle_clear_func(sch); + } +} + static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch) { SCHIB *schib = &sch->curr_status; @@ -1244,11 +1265,9 @@ IOInstEnding do_subchannel_work_passthrough(SubchDev *sch) SCHIB *schib = &sch->curr_status; if (schib->scsw.ctrl & SCSW_FCTL_CLEAR_FUNC) { - /* TODO: Clear handling */ - sch_handle_clear_func(sch); + sch_handle_clear_func_passthrough(sch); } else if (schib->scsw.ctrl & SCSW_FCTL_HALT_FUNC) { - /* TODO: Halt handling */ - sch_handle_halt_func(sch); + sch_handle_halt_func_passthrough(sch); } else if (schib->scsw.ctrl & SCSW_FCTL_START_FUNC) { return sch_handle_start_func_passthrough(sch); } diff --git a/hw/s390x/s390-ccw.c b/hw/s390x/s390-ccw.c index 8403f0e3e9..22c6878b84 100644 --- a/hw/s390x/s390-ccw.c +++ b/hw/s390x/s390-ccw.c @@ -30,6 +30,26 @@ IOInstEnding s390_ccw_cmd_request(SubchDev *sch) return cdc->handle_request(sch); } +int s390_ccw_halt(SubchDev *sch) +{ + S390CCWDeviceClass *cdc = S390_CCW_DEVICE_GET_CLASS(sch->driver_data); + + if (!cdc->handle_halt) { + return -ENOSYS; + } + return cdc->handle_halt(sch); +} + +int s390_ccw_clear(SubchDev *sch) +{ + S390CCWDeviceClass *cdc = S390_CCW_DEVICE_GET_CLASS(sch->driver_data); + + if (!cdc->handle_clear) { + return -ENOSYS; + } + return cdc->handle_clear(sch); +} + static void s390_ccw_get_dev_info(S390CCWDevice *cdev, char *sysfsdev, Error **errp) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 60500ec8fe..917195a65b 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -145,7 +145,7 @@ static const char *sd_state_name(enum SDCardStates state) if (state == sd_inactive_state) { return "inactive"; } - assert(state <= ARRAY_SIZE(state_name)); + assert(state < ARRAY_SIZE(state_name)); return state_name[state]; } @@ -166,7 +166,7 @@ static const char *sd_response_name(sd_rsp_type_t rsp) if (rsp == sd_r1b) { rsp = sd_r1; } - assert(rsp <= ARRAY_SIZE(response_name)); + assert(rsp < ARRAY_SIZE(response_name)); return response_name[rsp]; } diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 03a2becb3e..6d0296fe4d 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -2,9 +2,12 @@ * vfio based subchannel assignment support * * Copyright 2017 IBM Corp. + * Copyright 2019 Red Hat, Inc. + * * Author(s): Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> * Xiao Feng Ren <renxiaof@linux.vnet.ibm.com> * Pierre Morel <pmorel@linux.vnet.ibm.com> + * Cornelia Huck <cohuck@redhat.com> * * This work is licensed under the terms of the GNU GPL, version 2 or (at * your option) any later version. See the COPYING file in the top-level @@ -33,6 +36,9 @@ struct VFIOCCWDevice { uint64_t io_region_size; uint64_t io_region_offset; struct ccw_io_region *io_region; + uint64_t async_cmd_region_size; + uint64_t async_cmd_region_offset; + struct ccw_cmd_region *async_cmd_region; EventNotifier io_notifier; bool force_orb_pfch; bool warned_orb_pfch; @@ -115,6 +121,87 @@ again: } } +static int vfio_ccw_handle_clear(SubchDev *sch) +{ + S390CCWDevice *cdev = sch->driver_data; + VFIOCCWDevice *vcdev = DO_UPCAST(VFIOCCWDevice, cdev, cdev); + struct ccw_cmd_region *region = vcdev->async_cmd_region; + int ret; + + if (!vcdev->async_cmd_region) { + /* Async command region not available, fall back to emulation */ + return -ENOSYS; + } + + memset(region, 0, sizeof(*region)); + region->command = VFIO_CCW_ASYNC_CMD_CSCH; + +again: + ret = pwrite(vcdev->vdev.fd, region, + vcdev->async_cmd_region_size, vcdev->async_cmd_region_offset); + if (ret != vcdev->async_cmd_region_size) { + if (errno == EAGAIN) { + goto again; + } + error_report("vfio-ccw: write cmd region failed with errno=%d", errno); + ret = -errno; + } else { + ret = region->ret_code; + } + switch (ret) { + case 0: + case -ENODEV: + case -EACCES: + return 0; + case -EFAULT: + default: + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return 0; + } +} + +static int vfio_ccw_handle_halt(SubchDev *sch) +{ + S390CCWDevice *cdev = sch->driver_data; + VFIOCCWDevice *vcdev = DO_UPCAST(VFIOCCWDevice, cdev, cdev); + struct ccw_cmd_region *region = vcdev->async_cmd_region; + int ret; + + if (!vcdev->async_cmd_region) { + /* Async command region not available, fall back to emulation */ + return -ENOSYS; + } + + memset(region, 0, sizeof(*region)); + region->command = VFIO_CCW_ASYNC_CMD_HSCH; + +again: + ret = pwrite(vcdev->vdev.fd, region, + vcdev->async_cmd_region_size, vcdev->async_cmd_region_offset); + if (ret != vcdev->async_cmd_region_size) { + if (errno == EAGAIN) { + goto again; + } + error_report("vfio-ccw: write cmd region failed with errno=%d", errno); + ret = -errno; + } else { + ret = region->ret_code; + } + switch (ret) { + case 0: + case -EBUSY: + case -ENODEV: + case -EACCES: + return 0; + case -EFAULT: + default: + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return 0; + } +} + static void vfio_ccw_reset(DeviceState *dev) { CcwDevice *ccw_dev = DO_UPCAST(CcwDevice, parent_obj, dev); @@ -198,9 +285,8 @@ static void vfio_ccw_register_io_notifier(VFIOCCWDevice *vcdev, Error **errp) { VFIODevice *vdev = &vcdev->vdev; struct vfio_irq_info *irq_info; - struct vfio_irq_set *irq_set; size_t argsz; - int32_t *pfd; + int fd; if (vdev->num_irqs < VFIO_CCW_IO_IRQ_INDEX + 1) { error_setg(errp, "vfio: unexpected number of io irqs %u", @@ -224,56 +310,32 @@ static void vfio_ccw_register_io_notifier(VFIOCCWDevice *vcdev, Error **errp) goto out_free_info; } - argsz = sizeof(*irq_set) + sizeof(*pfd); - irq_set = g_malloc0(argsz); - irq_set->argsz = argsz; - irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | - VFIO_IRQ_SET_ACTION_TRIGGER; - irq_set->index = VFIO_CCW_IO_IRQ_INDEX; - irq_set->start = 0; - irq_set->count = 1; - pfd = (int32_t *) &irq_set->data; - - *pfd = event_notifier_get_fd(&vcdev->io_notifier); - qemu_set_fd_handler(*pfd, vfio_ccw_io_notifier_handler, NULL, vcdev); - if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) { - error_setg(errp, "vfio: Failed to set up io notification"); - qemu_set_fd_handler(*pfd, NULL, NULL, vcdev); + fd = event_notifier_get_fd(&vcdev->io_notifier); + qemu_set_fd_handler(fd, vfio_ccw_io_notifier_handler, NULL, vcdev); + + if (vfio_set_irq_signaling(vdev, VFIO_CCW_IO_IRQ_INDEX, 0, + VFIO_IRQ_SET_ACTION_TRIGGER, fd, errp)) { + qemu_set_fd_handler(fd, NULL, NULL, vcdev); event_notifier_cleanup(&vcdev->io_notifier); } - g_free(irq_set); - out_free_info: g_free(irq_info); } static void vfio_ccw_unregister_io_notifier(VFIOCCWDevice *vcdev) { - struct vfio_irq_set *irq_set; - size_t argsz; - int32_t *pfd; - - argsz = sizeof(*irq_set) + sizeof(*pfd); - irq_set = g_malloc0(argsz); - irq_set->argsz = argsz; - irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | - VFIO_IRQ_SET_ACTION_TRIGGER; - irq_set->index = VFIO_CCW_IO_IRQ_INDEX; - irq_set->start = 0; - irq_set->count = 1; - pfd = (int32_t *) &irq_set->data; - *pfd = -1; + Error *err = NULL; - if (ioctl(vcdev->vdev.fd, VFIO_DEVICE_SET_IRQS, irq_set)) { - error_report("vfio: Failed to de-assign device io fd: %m"); + vfio_set_irq_signaling(&vcdev->vdev, VFIO_CCW_IO_IRQ_INDEX, 0, + VFIO_IRQ_SET_ACTION_TRIGGER, -1, &err); + if (err) { + error_reportf_err(err, VFIO_MSG_PREFIX, vcdev->vdev.name); } qemu_set_fd_handler(event_notifier_get_fd(&vcdev->io_notifier), NULL, NULL, vcdev); event_notifier_cleanup(&vcdev->io_notifier); - - g_free(irq_set); } static void vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) @@ -288,9 +350,13 @@ static void vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) return; } + /* + * We always expect at least the I/O region to be present. We also + * may have a variable number of regions governed by capabilities. + */ if (vdev->num_regions < VFIO_CCW_CONFIG_REGION_INDEX + 1) { - error_setg(errp, "vfio: Unexpected number of the I/O region %u", - vdev->num_regions); + error_setg(errp, "vfio: too few regions (%u), expected at least %u", + vdev->num_regions, VFIO_CCW_CONFIG_REGION_INDEX + 1); return; } @@ -310,11 +376,27 @@ static void vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp) vcdev->io_region_offset = info->offset; vcdev->io_region = g_malloc0(info->size); + /* check for the optional async command region */ + ret = vfio_get_dev_region_info(vdev, VFIO_REGION_TYPE_CCW, + VFIO_REGION_SUBTYPE_CCW_ASYNC_CMD, &info); + if (!ret) { + vcdev->async_cmd_region_size = info->size; + if (sizeof(*vcdev->async_cmd_region) != vcdev->async_cmd_region_size) { + error_setg(errp, "vfio: Unexpected size of the async cmd region"); + g_free(vcdev->io_region); + g_free(info); + return; + } + vcdev->async_cmd_region_offset = info->offset; + vcdev->async_cmd_region = g_malloc0(info->size); + } + g_free(info); } static void vfio_ccw_put_region(VFIOCCWDevice *vcdev) { + g_free(vcdev->async_cmd_region); g_free(vcdev->io_region); } @@ -487,6 +569,8 @@ static void vfio_ccw_class_init(ObjectClass *klass, void *data) dc->reset = vfio_ccw_reset; cdc->handle_request = vfio_ccw_handle_request; + cdc->handle_halt = vfio_ccw_handle_halt; + cdc->handle_clear = vfio_ccw_handle_clear; } static const TypeInfo vfio_ccw_info = { diff --git a/include/hw/boards.h b/include/hw/boards.h index b7362af3f1..eaa050a7ab 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -293,9 +293,6 @@ struct MachineState { } \ type_init(machine_initfn##_register_types) -extern GlobalProperty hw_compat_4_0_1[]; -extern const size_t hw_compat_4_0_1_len; - extern GlobalProperty hw_compat_4_0[]; extern const size_t hw_compat_4_0_len; diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index a7d0b87166..c54cc54a47 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -293,9 +293,6 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t); int e820_get_num_entries(void); bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *); -extern GlobalProperty pc_compat_4_0_1[]; -extern const size_t pc_compat_4_0_1_len; - extern GlobalProperty pc_compat_4_0[]; extern const size_t pc_compat_4_0_len; diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 7cc183ef43..d033387fba 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -215,6 +215,9 @@ IOInstEnding s390_ccw_cmd_request(SubchDev *sch); IOInstEnding do_subchannel_work_virtual(SubchDev *sub); IOInstEnding do_subchannel_work_passthrough(SubchDev *sub); +int s390_ccw_halt(SubchDev *sch); +int s390_ccw_clear(SubchDev *sch); + typedef enum { CSS_IO_ADAPTER_VIRTIO = 0, CSS_IO_ADAPTER_PCI = 1, diff --git a/include/hw/s390x/s390-ccw.h b/include/hw/s390x/s390-ccw.h index 901d805d79..fffb54562f 100644 --- a/include/hw/s390x/s390-ccw.h +++ b/include/hw/s390x/s390-ccw.h @@ -35,6 +35,8 @@ typedef struct S390CCWDeviceClass { void (*realize)(S390CCWDevice *dev, char *sysfsdev, Error **errp); void (*unrealize)(S390CCWDevice *dev, Error **errp); IOInstEnding (*handle_request) (SubchDev *sch); + int (*handle_halt) (SubchDev *sch); + int (*handle_clear) (SubchDev *sch); } S390CCWDeviceClass; #endif diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 9224370ed5..ca68584eba 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -797,6 +797,19 @@ extern const VMStateInfo vmstate_info_qtailq; #define VMSTATE_UINT64_V(_f, _s, _v) \ VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64, uint64_t) +#ifdef CONFIG_LINUX + +#define VMSTATE_U8_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint8, __u8) +#define VMSTATE_U16_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint16, __u16) +#define VMSTATE_U32_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint32, __u32) +#define VMSTATE_U64_V(_f, _s, _v) \ + VMSTATE_SINGLE(_f, _s, _v, vmstate_info_uint64, __u64) + +#endif + #define VMSTATE_BOOL(_f, _s) \ VMSTATE_BOOL_V(_f, _s, 0) @@ -818,6 +831,19 @@ extern const VMStateInfo vmstate_info_qtailq; #define VMSTATE_UINT64(_f, _s) \ VMSTATE_UINT64_V(_f, _s, 0) +#ifdef CONFIG_LINUX + +#define VMSTATE_U8(_f, _s) \ + VMSTATE_U8_V(_f, _s, 0) +#define VMSTATE_U16(_f, _s) \ + VMSTATE_U16_V(_f, _s, 0) +#define VMSTATE_U32(_f, _s) \ + VMSTATE_U32_V(_f, _s, 0) +#define VMSTATE_U64(_f, _s) \ + VMSTATE_U64_V(_f, _s, 0) + +#endif + #define VMSTATE_UINT8_EQUAL(_f, _s, _err_hint) \ VMSTATE_SINGLE_FULL(_f, _s, 0, 0, \ vmstate_info_uint8_equal, uint8_t, _err_hint) diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index a6d1cd190f..acd90aebb6 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -210,6 +210,7 @@ bool kvm_has_sync_mmu(void); int kvm_has_vcpu_events(void); int kvm_has_robust_singlestep(void); int kvm_has_debugregs(void); +int kvm_max_nested_state_length(void); int kvm_has_pit_state2(void); int kvm_has_many_ioeventfds(void); int kvm_has_gsi_routing(void); @@ -371,6 +372,7 @@ int kvm_arch_put_registers(CPUState *cpu, int level); int kvm_arch_init(MachineState *ms, KVMState *s); int kvm_arch_init_vcpu(CPUState *cpu); +int kvm_arch_destroy_vcpu(CPUState *cpu); bool kvm_vcpu_id_is_valid(int vcpu_id); diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h index 7a0e64ccd6..6e7dd792e4 100644 --- a/linux-headers/asm-x86/kvm.h +++ b/linux-headers/asm-x86/kvm.h @@ -383,16 +383,26 @@ struct kvm_sync_regs { #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) #define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3) +#define KVM_STATE_NESTED_FORMAT_VMX 0 +#define KVM_STATE_NESTED_FORMAT_SVM 1 + #define KVM_STATE_NESTED_GUEST_MODE 0x00000001 #define KVM_STATE_NESTED_RUN_PENDING 0x00000002 #define KVM_STATE_NESTED_EVMCS 0x00000004 +#define KVM_STATE_NESTED_VMX_VMCS_SIZE 0x1000 + #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001 #define KVM_STATE_NESTED_SMM_VMXON 0x00000002 -struct kvm_vmx_nested_state { +struct kvm_vmx_nested_state_data { + __u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; + __u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; +}; + +struct kvm_vmx_nested_state_hdr { __u64 vmxon_pa; - __u64 vmcs_pa; + __u64 vmcs12_pa; struct { __u16 flags; @@ -401,24 +411,25 @@ struct kvm_vmx_nested_state { /* for KVM_CAP_NESTED_STATE */ struct kvm_nested_state { - /* KVM_STATE_* flags */ __u16 flags; - - /* 0 for VMX, 1 for SVM. */ __u16 format; - - /* 128 for SVM, 128 + VMCS size for VMX. */ __u32 size; union { - /* VMXON, VMCS */ - struct kvm_vmx_nested_state vmx; + struct kvm_vmx_nested_state_hdr vmx; /* Pad the header to 128 bytes. */ __u8 pad[120]; - }; + } hdr; - __u8 data[0]; + /* + * Define data region as 0 bytes to preserve backwards-compatability + * to old definition of kvm_nested_state in order to avoid changing + * KVM_{GET,PUT}_NESTED_STATE ioctl values. + */ + union { + struct kvm_vmx_nested_state_data vmx[0]; + } data; }; #endif /* _ASM_X86_KVM_H */ diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c index 4e54e372a6..51f78f722b 100644 --- a/target/arm/kvm32.c +++ b/target/arm/kvm32.c @@ -240,6 +240,11 @@ int kvm_arch_init_vcpu(CPUState *cs) return kvm_arm_init_cpreg_list(cpu); } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + return 0; +} + typedef struct Reg { uint64_t id; int offset; diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c index 998d21f399..22d19c9aec 100644 --- a/target/arm/kvm64.c +++ b/target/arm/kvm64.c @@ -654,6 +654,11 @@ int kvm_arch_init_vcpu(CPUState *cs) return kvm_arm_init_cpreg_list(cpu); } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + return 0; +} + bool kvm_arm_reg_syncs_via_cpreg_list(uint64_t regidx) { /* Return true if the regidx is a register we should synchronize diff --git a/target/i386/cpu.c b/target/i386/cpu.c index fbed2eb804..da6eb67cfb 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1085,7 +1085,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "spec-ctrl", "stibp", - NULL, "arch-capabilities", NULL, "ssbd", + NULL, "arch-capabilities", "core-capability", "ssbd", }, .cpuid = { .eax = 7, @@ -1203,6 +1203,26 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = { } }, }, + [FEAT_CORE_CAPABILITY] = { + .type = MSR_FEATURE_WORD, + .feat_names = { + NULL, NULL, NULL, NULL, + NULL, "split-lock-detect", NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .msr = { + .index = MSR_IA32_CORE_CAPABILITY, + .cpuid_dep = { + FEAT_7_0_EDX, + CPUID_7_0_EDX_CORE_CAPABILITY, + }, + }, + }, }; typedef struct X86RegisterInfo32 { @@ -4799,7 +4819,11 @@ static void x86_cpu_reset(CPUState *s) memset(env->mtrr_fixed, 0, sizeof(env->mtrr_fixed)); env->interrupt_injected = -1; - env->exception_injected = -1; + env->exception_nr = -1; + env->exception_pending = 0; + env->exception_injected = 0; + env->exception_has_payload = false; + env->exception_payload = 0; env->nmi_injected = false; #if !defined(CONFIG_USER_ONLY) /* We hard-wire the BSP to the first CPU. */ @@ -5195,12 +5219,6 @@ static int x86_cpu_filter_features(X86CPU *cpu) return rv; } -#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_INTEL_1 && \ - (env)->cpuid_vendor2 == CPUID_VENDOR_INTEL_2 && \ - (env)->cpuid_vendor3 == CPUID_VENDOR_INTEL_3) -#define IS_AMD_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_AMD_1 && \ - (env)->cpuid_vendor2 == CPUID_VENDOR_AMD_2 && \ - (env)->cpuid_vendor3 == CPUID_VENDOR_AMD_3) static void x86_cpu_realizefn(DeviceState *dev, Error **errp) { CPUState *cs = CPU(dev); @@ -5853,21 +5871,40 @@ static Property x86_cpu_properties[] = { #endif DEFINE_PROP_INT32("node-id", X86CPU, node_id, CPU_UNSET_NUMA_NODE_ID), DEFINE_PROP_BOOL("pmu", X86CPU, enable_pmu, false), + { .name = "hv-spinlocks", .info = &qdev_prop_spinlocks }, - DEFINE_PROP_BOOL("hv-relaxed", X86CPU, hyperv_relaxed_timing, false), - DEFINE_PROP_BOOL("hv-vapic", X86CPU, hyperv_vapic, false), - DEFINE_PROP_BOOL("hv-time", X86CPU, hyperv_time, false), - DEFINE_PROP_BOOL("hv-crash", X86CPU, hyperv_crash, false), - DEFINE_PROP_BOOL("hv-reset", X86CPU, hyperv_reset, false), - DEFINE_PROP_BOOL("hv-vpindex", X86CPU, hyperv_vpindex, false), - DEFINE_PROP_BOOL("hv-runtime", X86CPU, hyperv_runtime, false), - DEFINE_PROP_BOOL("hv-synic", X86CPU, hyperv_synic, false), - DEFINE_PROP_BOOL("hv-stimer", X86CPU, hyperv_stimer, false), - DEFINE_PROP_BOOL("hv-frequencies", X86CPU, hyperv_frequencies, false), - DEFINE_PROP_BOOL("hv-reenlightenment", X86CPU, hyperv_reenlightenment, false), - DEFINE_PROP_BOOL("hv-tlbflush", X86CPU, hyperv_tlbflush, false), - DEFINE_PROP_BOOL("hv-evmcs", X86CPU, hyperv_evmcs, false), - DEFINE_PROP_BOOL("hv-ipi", X86CPU, hyperv_ipi, false), + DEFINE_PROP_BIT64("hv-relaxed", X86CPU, hyperv_features, + HYPERV_FEAT_RELAXED, 0), + DEFINE_PROP_BIT64("hv-vapic", X86CPU, hyperv_features, + HYPERV_FEAT_VAPIC, 0), + DEFINE_PROP_BIT64("hv-time", X86CPU, hyperv_features, + HYPERV_FEAT_TIME, 0), + DEFINE_PROP_BIT64("hv-crash", X86CPU, hyperv_features, + HYPERV_FEAT_CRASH, 0), + DEFINE_PROP_BIT64("hv-reset", X86CPU, hyperv_features, + HYPERV_FEAT_RESET, 0), + DEFINE_PROP_BIT64("hv-vpindex", X86CPU, hyperv_features, + HYPERV_FEAT_VPINDEX, 0), + DEFINE_PROP_BIT64("hv-runtime", X86CPU, hyperv_features, + HYPERV_FEAT_RUNTIME, 0), + DEFINE_PROP_BIT64("hv-synic", X86CPU, hyperv_features, + HYPERV_FEAT_SYNIC, 0), + DEFINE_PROP_BIT64("hv-stimer", X86CPU, hyperv_features, + HYPERV_FEAT_STIMER, 0), + DEFINE_PROP_BIT64("hv-frequencies", X86CPU, hyperv_features, + HYPERV_FEAT_FREQUENCIES, 0), + DEFINE_PROP_BIT64("hv-reenlightenment", X86CPU, hyperv_features, + HYPERV_FEAT_REENLIGHTENMENT, 0), + DEFINE_PROP_BIT64("hv-tlbflush", X86CPU, hyperv_features, + HYPERV_FEAT_TLBFLUSH, 0), + DEFINE_PROP_BIT64("hv-evmcs", X86CPU, hyperv_features, + HYPERV_FEAT_EVMCS, 0), + DEFINE_PROP_BIT64("hv-ipi", X86CPU, hyperv_features, + HYPERV_FEAT_IPI, 0), + DEFINE_PROP_BIT64("hv-stimer-direct", X86CPU, hyperv_features, + HYPERV_FEAT_STIMER_DIRECT, 0), + DEFINE_PROP_BOOL("hv-passthrough", X86CPU, hyperv_passthrough, false), + DEFINE_PROP_BOOL("check", X86CPU, check_cpuid, true), DEFINE_PROP_BOOL("enforce", X86CPU, enforce_cpuid, false), DEFINE_PROP_BOOL("kvm", X86CPU, expose_kvm, true), diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 0732e059ec..93345792f4 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -345,6 +345,7 @@ typedef enum X86Seg { #define MSR_IA32_SPEC_CTRL 0x48 #define MSR_VIRT_SSBD 0xc001011f #define MSR_IA32_PRED_CMD 0x49 +#define MSR_IA32_CORE_CAPABILITY 0xcf #define MSR_IA32_ARCH_CAPABILITIES 0x10a #define MSR_IA32_TSCDEADLINE 0x6e0 @@ -496,6 +497,7 @@ typedef enum FeatureWord { FEAT_XSAVE_COMP_LO, /* CPUID[EAX=0xd,ECX=0].EAX */ FEAT_XSAVE_COMP_HI, /* CPUID[EAX=0xd,ECX=0].EDX */ FEAT_ARCH_CAPABILITIES, + FEAT_CORE_CAPABILITY, FEATURE_WORDS, } FeatureWord; @@ -687,6 +689,7 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; #define CPUID_7_0_EDX_AVX512_4FMAPS (1U << 3) /* AVX512 Multiply Accumulation Single Precision */ #define CPUID_7_0_EDX_SPEC_CTRL (1U << 26) /* Speculation Control */ #define CPUID_7_0_EDX_ARCH_CAPABILITIES (1U << 29) /*Arch Capabilities*/ +#define CPUID_7_0_EDX_CORE_CAPABILITY (1U << 30) /*Core Capability*/ #define CPUID_7_0_EDX_SPEC_CTRL_SSBD (1U << 31) /* Speculative Store Bypass Disable */ #define CPUID_8000_0008_EBX_WBNOINVD (1U << 9) /* Write back and @@ -719,6 +722,13 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; #define CPUID_VENDOR_HYGON "HygonGenuine" +#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_INTEL_1 && \ + (env)->cpuid_vendor2 == CPUID_VENDOR_INTEL_2 && \ + (env)->cpuid_vendor3 == CPUID_VENDOR_INTEL_3) +#define IS_AMD_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_AMD_1 && \ + (env)->cpuid_vendor2 == CPUID_VENDOR_AMD_2 && \ + (env)->cpuid_vendor3 == CPUID_VENDOR_AMD_3) + #define CPUID_MWAIT_IBE (1U << 1) /* Interrupts can exit capability */ #define CPUID_MWAIT_EMX (1U << 0) /* enumeration supported */ @@ -734,6 +744,25 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; #define MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY (1U << 3) #define MSR_ARCH_CAP_SSB_NO (1U << 4) +#define MSR_CORE_CAP_SPLIT_LOCK_DETECT (1U << 5) + +/* Supported Hyper-V Enlightenments */ +#define HYPERV_FEAT_RELAXED 0 +#define HYPERV_FEAT_VAPIC 1 +#define HYPERV_FEAT_TIME 2 +#define HYPERV_FEAT_CRASH 3 +#define HYPERV_FEAT_RESET 4 +#define HYPERV_FEAT_VPINDEX 5 +#define HYPERV_FEAT_RUNTIME 6 +#define HYPERV_FEAT_SYNIC 7 +#define HYPERV_FEAT_STIMER 8 +#define HYPERV_FEAT_FREQUENCIES 9 +#define HYPERV_FEAT_REENLIGHTENMENT 10 +#define HYPERV_FEAT_TLBFLUSH 11 +#define HYPERV_FEAT_EVMCS 12 +#define HYPERV_FEAT_IPI 13 +#define HYPERV_FEAT_STIMER_DIRECT 14 + #ifndef HYPERV_SPINLOCK_NEVER_RETRY #define HYPERV_SPINLOCK_NEVER_RETRY 0xFFFFFFFF #endif @@ -1319,10 +1348,14 @@ typedef struct CPUX86State { /* For KVM */ uint32_t mp_state; - int32_t exception_injected; + int32_t exception_nr; int32_t interrupt_injected; uint8_t soft_interrupt; + uint8_t exception_pending; + uint8_t exception_injected; uint8_t has_error_code; + uint8_t exception_has_payload; + uint64_t exception_payload; uint32_t ins_len; uint32_t sipi_vector; bool tsc_valid; @@ -1331,6 +1364,9 @@ typedef struct CPUX86State { #if defined(CONFIG_KVM) || defined(CONFIG_HVF) void *xsave_buf; #endif +#if defined(CONFIG_KVM) + struct kvm_nested_state *nested_state; +#endif #if defined(CONFIG_HVF) HVFX86EmulatorState *hvf_emul; #endif @@ -1370,23 +1406,12 @@ struct X86CPU { CPUNegativeOffsetState neg; CPUX86State env; - bool hyperv_vapic; - bool hyperv_relaxed_timing; int hyperv_spinlock_attempts; char *hyperv_vendor_id; - bool hyperv_time; - bool hyperv_crash; - bool hyperv_reset; - bool hyperv_vpindex; - bool hyperv_runtime; - bool hyperv_synic; bool hyperv_synic_kvm_only; - bool hyperv_stimer; - bool hyperv_frequencies; - bool hyperv_reenlightenment; - bool hyperv_tlbflush; - bool hyperv_evmcs; - bool hyperv_ipi; + uint64_t hyperv_features; + bool hyperv_passthrough; + bool check_cpuid; bool enforce_cpuid; bool expose_kvm; @@ -1837,6 +1862,11 @@ static inline int32_t x86_get_a20_mask(CPUX86State *env) } } +static inline bool cpu_has_vmx(CPUX86State *env) +{ + return env->features[FEAT_1_ECX] & CPUID_EXT_VMX; +} + /* fpu_helper.c */ void update_fp_status(CPUX86State *env); void update_mxcsr_status(CPUX86State *env); @@ -1906,4 +1936,9 @@ void x86_cpu_xrstor_all_areas(X86CPU *cpu, const X86XSaveArea *buf); void x86_cpu_xsave_all_areas(X86CPU *cpu, X86XSaveArea *buf); void x86_update_hflags(CPUX86State* env); +static inline bool hyperv_feat_enabled(X86CPU *cpu, int feat) +{ + return !!(cpu->hyperv_features & BIT(feat)); +} + #endif /* I386_CPU_H */ diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c index 64fd51ad4a..9e7b77965d 100644 --- a/target/i386/hax-all.c +++ b/target/i386/hax-all.c @@ -471,13 +471,35 @@ static int hax_vcpu_hax_exec(CPUArchState *env) return 0; } - cpu->halted = 0; - if (cpu->interrupt_request & CPU_INTERRUPT_POLL) { cpu->interrupt_request &= ~CPU_INTERRUPT_POLL; apic_poll_irq(x86_cpu->apic_state); } + /* After a vcpu is halted (either because it is an AP and has just been + * reset, or because it has executed the HLT instruction), it will not be + * run (hax_vcpu_run()) until it is unhalted. The next few if blocks check + * for events that may change the halted state of this vcpu: + * a) Maskable interrupt, when RFLAGS.IF is 1; + * Note: env->eflags may not reflect the current RFLAGS state, because + * it is not updated after each hax_vcpu_run(). We cannot afford + * to fail to recognize any unhalt-by-maskable-interrupt event + * (in which case the vcpu will halt forever), and yet we cannot + * afford the overhead of hax_vcpu_sync_state(). The current + * solution is to err on the side of caution and have the HLT + * handler (see case HAX_EXIT_HLT below) unconditionally set the + * IF_MASK bit in env->eflags, which, in effect, disables the + * RFLAGS.IF check. + * b) NMI; + * c) INIT signal; + * d) SIPI signal. + */ + if (((cpu->interrupt_request & CPU_INTERRUPT_HARD) && + (env->eflags & IF_MASK)) || + (cpu->interrupt_request & CPU_INTERRUPT_NMI)) { + cpu->halted = 0; + } + if (cpu->interrupt_request & CPU_INTERRUPT_INIT) { DPRINTF("\nhax_vcpu_hax_exec: handling INIT for %d\n", cpu->cpu_index); @@ -493,6 +515,16 @@ static int hax_vcpu_hax_exec(CPUArchState *env) hax_vcpu_sync_state(env, 1); } + if (cpu->halted) { + /* If this vcpu is halted, we must not ask HAXM to run it. Instead, we + * break out of hax_smp_cpu_exec() as if this vcpu had executed HLT. + * That way, this vcpu thread will be trapped in qemu_wait_io_event(), + * until the vcpu is unhalted. + */ + cpu->exception_index = EXCP_HLT; + return 0; + } + do { int hax_ret; diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 2751c8125c..dc4bb63536 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -605,7 +605,9 @@ static void hvf_store_events(CPUState *cpu, uint32_t ins_len, uint64_t idtvec_in X86CPU *x86_cpu = X86_CPU(cpu); CPUX86State *env = &x86_cpu->env; - env->exception_injected = -1; + env->exception_nr = -1; + env->exception_pending = 0; + env->exception_injected = 0; env->interrupt_injected = -1; env->nmi_injected = false; if (idtvec_info & VMCS_IDT_VEC_VALID) { @@ -619,7 +621,8 @@ static void hvf_store_events(CPUState *cpu, uint32_t ins_len, uint64_t idtvec_in break; case VMCS_IDT_VEC_HWEXCEPTION: case VMCS_IDT_VEC_SWEXCEPTION: - env->exception_injected = idtvec_info & VMCS_IDT_VEC_VECNUM; + env->exception_nr = idtvec_info & VMCS_IDT_VEC_VECNUM; + env->exception_injected = 1; break; case VMCS_IDT_VEC_PRIV_SWEXCEPTION: default: @@ -912,7 +915,8 @@ int hvf_vcpu_exec(CPUState *cpu) macvm_set_rip(cpu, rip + ins_len); break; case VMX_REASON_VMCALL: - env->exception_injected = EXCP0D_GPF; + env->exception_nr = EXCP0D_GPF; + env->exception_injected = 1; env->has_error_code = true; env->error_code = 0; break; diff --git a/target/i386/hvf/x86hvf.c b/target/i386/hvf/x86hvf.c index df8e946fbc..e0ea02d631 100644 --- a/target/i386/hvf/x86hvf.c +++ b/target/i386/hvf/x86hvf.c @@ -362,8 +362,8 @@ bool hvf_inject_interrupts(CPUState *cpu_state) if (env->interrupt_injected != -1) { vector = env->interrupt_injected; intr_type = VMCS_INTR_T_SWINTR; - } else if (env->exception_injected != -1) { - vector = env->exception_injected; + } else if (env->exception_nr != -1) { + vector = env->exception_nr; if (vector == EXCP03_INT3 || vector == EXCP04_INTO) { intr_type = VMCS_INTR_T_SWEXCEPTION; } else { diff --git a/target/i386/hyperv-proto.h b/target/i386/hyperv-proto.h index c0272b3a01..cffac10b45 100644 --- a/target/i386/hyperv-proto.h +++ b/target/i386/hyperv-proto.h @@ -49,6 +49,7 @@ #define HV_GUEST_IDLE_STATE_AVAILABLE (1u << 5) #define HV_FREQUENCY_MSRS_AVAILABLE (1u << 8) #define HV_GUEST_CRASH_MSR_AVAILABLE (1u << 10) +#define HV_STIMER_DIRECT_MODE_AVAILABLE (1u << 19) /* * HV_CPUID_ENLIGHTMENT_INFO.EAX bits diff --git a/target/i386/hyperv.c b/target/i386/hyperv.c index b264a28620..26efc1e0e6 100644 --- a/target/i386/hyperv.c +++ b/target/i386/hyperv.c @@ -52,7 +52,7 @@ int kvm_hv_handle_exit(X86CPU *cpu, struct kvm_hyperv_exit *exit) switch (exit->type) { case KVM_EXIT_HYPERV_SYNIC: - if (!cpu->hyperv_synic) { + if (!hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) { return -1; } diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 6899061b4e..e4b4f5756a 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -95,6 +95,7 @@ static bool has_msr_spec_ctrl; static bool has_msr_virt_ssbd; static bool has_msr_smi_count; static bool has_msr_arch_capabs; +static bool has_msr_core_capabs; static uint32_t has_architectural_pmu_version; static uint32_t num_architectural_pmu_gp_counters; @@ -103,6 +104,7 @@ static uint32_t num_architectural_pmu_fixed_counters; static int has_xsave; static int has_xcrs; static int has_pit_state2; +static int has_exception_payload; static bool has_msr_mcg_ext_ctl; @@ -583,15 +585,56 @@ void kvm_arch_on_sigbus_vcpu(CPUState *c, int code, void *addr) /* Hope we are lucky for AO MCE */ } +static void kvm_reset_exception(CPUX86State *env) +{ + env->exception_nr = -1; + env->exception_pending = 0; + env->exception_injected = 0; + env->exception_has_payload = false; + env->exception_payload = 0; +} + +static void kvm_queue_exception(CPUX86State *env, + int32_t exception_nr, + uint8_t exception_has_payload, + uint64_t exception_payload) +{ + assert(env->exception_nr == -1); + assert(!env->exception_pending); + assert(!env->exception_injected); + assert(!env->exception_has_payload); + + env->exception_nr = exception_nr; + + if (has_exception_payload) { + env->exception_pending = 1; + + env->exception_has_payload = exception_has_payload; + env->exception_payload = exception_payload; + } else { + env->exception_injected = 1; + + if (exception_nr == EXCP01_DB) { + assert(exception_has_payload); + env->dr[6] = exception_payload; + } else if (exception_nr == EXCP0E_PAGE) { + assert(exception_has_payload); + env->cr[2] = exception_payload; + } else { + assert(!exception_has_payload); + } + } +} + static int kvm_inject_mce_oldstyle(X86CPU *cpu) { CPUX86State *env = &cpu->env; - if (!kvm_has_vcpu_events() && env->exception_injected == EXCP12_MCHK) { + if (!kvm_has_vcpu_events() && env->exception_nr == EXCP12_MCHK) { unsigned int bank, bank_num = env->mcg_cap & 0xff; struct kvm_x86_mce mce; - env->exception_injected = -1; + kvm_reset_exception(env); /* * There must be at least one bank in use if an MCE is pending. @@ -634,28 +677,12 @@ unsigned long kvm_arch_vcpu_id(CPUState *cs) #define KVM_CPUID_SIGNATURE_NEXT 0x40000100 #endif -static bool hyperv_hypercall_available(X86CPU *cpu) -{ - return cpu->hyperv_vapic || - (cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY); -} - static bool hyperv_enabled(X86CPU *cpu) { CPUState *cs = CPU(cpu); return kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0 && - (hyperv_hypercall_available(cpu) || - cpu->hyperv_time || - cpu->hyperv_relaxed_timing || - cpu->hyperv_crash || - cpu->hyperv_reset || - cpu->hyperv_vpindex || - cpu->hyperv_runtime || - cpu->hyperv_synic || - cpu->hyperv_stimer || - cpu->hyperv_reenlightenment || - cpu->hyperv_tlbflush || - cpu->hyperv_ipi); + ((cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY) || + cpu->hyperv_features || cpu->hyperv_passthrough); } static int kvm_arch_set_tsc_khz(CPUState *cs) @@ -699,164 +726,573 @@ static bool tsc_is_stable_and_known(CPUX86State *env) || env->user_tsc_khz; } -static int hyperv_handle_properties(CPUState *cs) +static struct { + const char *desc; + struct { + uint32_t fw; + uint32_t bits; + } flags[2]; + uint64_t dependencies; +} kvm_hyperv_properties[] = { + [HYPERV_FEAT_RELAXED] = { + .desc = "relaxed timing (hv-relaxed)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_HYPERCALL_AVAILABLE}, + {.fw = FEAT_HV_RECOMM_EAX, + .bits = HV_RELAXED_TIMING_RECOMMENDED} + } + }, + [HYPERV_FEAT_VAPIC] = { + .desc = "virtual APIC (hv-vapic)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_HYPERCALL_AVAILABLE | HV_APIC_ACCESS_AVAILABLE}, + {.fw = FEAT_HV_RECOMM_EAX, + .bits = HV_APIC_ACCESS_RECOMMENDED} + } + }, + [HYPERV_FEAT_TIME] = { + .desc = "clocksources (hv-time)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_HYPERCALL_AVAILABLE | HV_TIME_REF_COUNT_AVAILABLE | + HV_REFERENCE_TSC_AVAILABLE} + } + }, + [HYPERV_FEAT_CRASH] = { + .desc = "crash MSRs (hv-crash)", + .flags = { + {.fw = FEAT_HYPERV_EDX, + .bits = HV_GUEST_CRASH_MSR_AVAILABLE} + } + }, + [HYPERV_FEAT_RESET] = { + .desc = "reset MSR (hv-reset)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_RESET_AVAILABLE} + } + }, + [HYPERV_FEAT_VPINDEX] = { + .desc = "VP_INDEX MSR (hv-vpindex)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_VP_INDEX_AVAILABLE} + } + }, + [HYPERV_FEAT_RUNTIME] = { + .desc = "VP_RUNTIME MSR (hv-runtime)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_VP_RUNTIME_AVAILABLE} + } + }, + [HYPERV_FEAT_SYNIC] = { + .desc = "synthetic interrupt controller (hv-synic)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_SYNIC_AVAILABLE} + } + }, + [HYPERV_FEAT_STIMER] = { + .desc = "synthetic timers (hv-stimer)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_SYNTIMERS_AVAILABLE} + }, + .dependencies = BIT(HYPERV_FEAT_SYNIC) | BIT(HYPERV_FEAT_TIME) + }, + [HYPERV_FEAT_FREQUENCIES] = { + .desc = "frequency MSRs (hv-frequencies)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_ACCESS_FREQUENCY_MSRS}, + {.fw = FEAT_HYPERV_EDX, + .bits = HV_FREQUENCY_MSRS_AVAILABLE} + } + }, + [HYPERV_FEAT_REENLIGHTENMENT] = { + .desc = "reenlightenment MSRs (hv-reenlightenment)", + .flags = { + {.fw = FEAT_HYPERV_EAX, + .bits = HV_ACCESS_REENLIGHTENMENTS_CONTROL} + } + }, + [HYPERV_FEAT_TLBFLUSH] = { + .desc = "paravirtualized TLB flush (hv-tlbflush)", + .flags = { + {.fw = FEAT_HV_RECOMM_EAX, + .bits = HV_REMOTE_TLB_FLUSH_RECOMMENDED | + HV_EX_PROCESSOR_MASKS_RECOMMENDED} + }, + .dependencies = BIT(HYPERV_FEAT_VPINDEX) + }, + [HYPERV_FEAT_EVMCS] = { + .desc = "enlightened VMCS (hv-evmcs)", + .flags = { + {.fw = FEAT_HV_RECOMM_EAX, + .bits = HV_ENLIGHTENED_VMCS_RECOMMENDED} + }, + .dependencies = BIT(HYPERV_FEAT_VAPIC) + }, + [HYPERV_FEAT_IPI] = { + .desc = "paravirtualized IPI (hv-ipi)", + .flags = { + {.fw = FEAT_HV_RECOMM_EAX, + .bits = HV_CLUSTER_IPI_RECOMMENDED | + HV_EX_PROCESSOR_MASKS_RECOMMENDED} + }, + .dependencies = BIT(HYPERV_FEAT_VPINDEX) + }, + [HYPERV_FEAT_STIMER_DIRECT] = { + .desc = "direct mode synthetic timers (hv-stimer-direct)", + .flags = { + {.fw = FEAT_HYPERV_EDX, + .bits = HV_STIMER_DIRECT_MODE_AVAILABLE} + }, + .dependencies = BIT(HYPERV_FEAT_STIMER) + }, +}; + +static struct kvm_cpuid2 *try_get_hv_cpuid(CPUState *cs, int max) +{ + struct kvm_cpuid2 *cpuid; + int r, size; + + size = sizeof(*cpuid) + max * sizeof(*cpuid->entries); + cpuid = g_malloc0(size); + cpuid->nent = max; + + r = kvm_vcpu_ioctl(cs, KVM_GET_SUPPORTED_HV_CPUID, cpuid); + if (r == 0 && cpuid->nent >= max) { + r = -E2BIG; + } + if (r < 0) { + if (r == -E2BIG) { + g_free(cpuid); + return NULL; + } else { + fprintf(stderr, "KVM_GET_SUPPORTED_HV_CPUID failed: %s\n", + strerror(-r)); + exit(1); + } + } + return cpuid; +} + +/* + * Run KVM_GET_SUPPORTED_HV_CPUID ioctl(), allocating a buffer large enough + * for all entries. + */ +static struct kvm_cpuid2 *get_supported_hv_cpuid(CPUState *cs) +{ + struct kvm_cpuid2 *cpuid; + int max = 7; /* 0x40000000..0x40000005, 0x4000000A */ + + /* + * When the buffer is too small, KVM_GET_SUPPORTED_HV_CPUID fails with + * -E2BIG, however, it doesn't report back the right size. Keep increasing + * it and re-trying until we succeed. + */ + while ((cpuid = try_get_hv_cpuid(cs, max)) == NULL) { + max++; + } + return cpuid; +} + +/* + * When KVM_GET_SUPPORTED_HV_CPUID is not supported we fill CPUID feature + * leaves from KVM_CAP_HYPERV* and present MSRs data. + */ +static struct kvm_cpuid2 *get_supported_hv_cpuid_legacy(CPUState *cs) { X86CPU *cpu = X86_CPU(cs); - CPUX86State *env = &cpu->env; + struct kvm_cpuid2 *cpuid; + struct kvm_cpuid_entry2 *entry_feat, *entry_recomm; - if (cpu->hyperv_relaxed_timing) { - env->features[FEAT_HYPERV_EAX] |= HV_HYPERCALL_AVAILABLE; + /* HV_CPUID_FEATURES, HV_CPUID_ENLIGHTMENT_INFO */ + cpuid = g_malloc0(sizeof(*cpuid) + 2 * sizeof(*cpuid->entries)); + cpuid->nent = 2; + + /* HV_CPUID_VENDOR_AND_MAX_FUNCTIONS */ + entry_feat = &cpuid->entries[0]; + entry_feat->function = HV_CPUID_FEATURES; + + entry_recomm = &cpuid->entries[1]; + entry_recomm->function = HV_CPUID_ENLIGHTMENT_INFO; + entry_recomm->ebx = cpu->hyperv_spinlock_attempts; + + if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0) { + entry_feat->eax |= HV_HYPERCALL_AVAILABLE; + entry_feat->eax |= HV_APIC_ACCESS_AVAILABLE; + entry_feat->edx |= HV_CPU_DYNAMIC_PARTITIONING_AVAILABLE; + entry_recomm->eax |= HV_RELAXED_TIMING_RECOMMENDED; + entry_recomm->eax |= HV_APIC_ACCESS_RECOMMENDED; } - if (cpu->hyperv_vapic) { - env->features[FEAT_HYPERV_EAX] |= HV_HYPERCALL_AVAILABLE; - env->features[FEAT_HYPERV_EAX] |= HV_APIC_ACCESS_AVAILABLE; + + if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_TIME) > 0) { + entry_feat->eax |= HV_TIME_REF_COUNT_AVAILABLE; + entry_feat->eax |= HV_REFERENCE_TSC_AVAILABLE; } - if (cpu->hyperv_time) { - if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_TIME) <= 0) { - fprintf(stderr, "Hyper-V clocksources " - "(requested by 'hv-time' cpu flag) " - "are not supported by kernel\n"); - return -ENOSYS; - } - env->features[FEAT_HYPERV_EAX] |= HV_HYPERCALL_AVAILABLE; - env->features[FEAT_HYPERV_EAX] |= HV_TIME_REF_COUNT_AVAILABLE; - env->features[FEAT_HYPERV_EAX] |= HV_REFERENCE_TSC_AVAILABLE; + + if (has_msr_hv_frequencies) { + entry_feat->eax |= HV_ACCESS_FREQUENCY_MSRS; + entry_feat->edx |= HV_FREQUENCY_MSRS_AVAILABLE; } - if (cpu->hyperv_frequencies) { - if (!has_msr_hv_frequencies) { - fprintf(stderr, "Hyper-V frequency MSRs " - "(requested by 'hv-frequencies' cpu flag) " - "are not supported by kernel\n"); - return -ENOSYS; - } - env->features[FEAT_HYPERV_EAX] |= HV_ACCESS_FREQUENCY_MSRS; - env->features[FEAT_HYPERV_EDX] |= HV_FREQUENCY_MSRS_AVAILABLE; + + if (has_msr_hv_crash) { + entry_feat->edx |= HV_GUEST_CRASH_MSR_AVAILABLE; } - if (cpu->hyperv_crash) { - if (!has_msr_hv_crash) { - fprintf(stderr, "Hyper-V crash MSRs " - "(requested by 'hv-crash' cpu flag) " - "are not supported by kernel\n"); - return -ENOSYS; - } - env->features[FEAT_HYPERV_EDX] |= HV_GUEST_CRASH_MSR_AVAILABLE; + + if (has_msr_hv_reenlightenment) { + entry_feat->eax |= HV_ACCESS_REENLIGHTENMENTS_CONTROL; } - if (cpu->hyperv_reenlightenment) { - if (!has_msr_hv_reenlightenment) { - fprintf(stderr, - "Hyper-V Reenlightenment MSRs " - "(requested by 'hv-reenlightenment' cpu flag) " - "are not supported by kernel\n"); - return -ENOSYS; - } - env->features[FEAT_HYPERV_EAX] |= HV_ACCESS_REENLIGHTENMENTS_CONTROL; + + if (has_msr_hv_reset) { + entry_feat->eax |= HV_RESET_AVAILABLE; } - env->features[FEAT_HYPERV_EDX] |= HV_CPU_DYNAMIC_PARTITIONING_AVAILABLE; - if (cpu->hyperv_reset) { - if (!has_msr_hv_reset) { - fprintf(stderr, "Hyper-V reset MSR " - "(requested by 'hv-reset' cpu flag) " - "is not supported by kernel\n"); - return -ENOSYS; - } - env->features[FEAT_HYPERV_EAX] |= HV_RESET_AVAILABLE; + + if (has_msr_hv_vpindex) { + entry_feat->eax |= HV_VP_INDEX_AVAILABLE; } - if (cpu->hyperv_vpindex) { - if (!has_msr_hv_vpindex) { - fprintf(stderr, "Hyper-V VP_INDEX MSR " - "(requested by 'hv-vpindex' cpu flag) " - "is not supported by kernel\n"); - return -ENOSYS; + + if (has_msr_hv_runtime) { + entry_feat->eax |= HV_VP_RUNTIME_AVAILABLE; + } + + if (has_msr_hv_synic) { + unsigned int cap = cpu->hyperv_synic_kvm_only ? + KVM_CAP_HYPERV_SYNIC : KVM_CAP_HYPERV_SYNIC2; + + if (kvm_check_extension(cs->kvm_state, cap) > 0) { + entry_feat->eax |= HV_SYNIC_AVAILABLE; } - env->features[FEAT_HYPERV_EAX] |= HV_VP_INDEX_AVAILABLE; } - if (cpu->hyperv_runtime) { - if (!has_msr_hv_runtime) { - fprintf(stderr, "Hyper-V VP_RUNTIME MSR " - "(requested by 'hv-runtime' cpu flag) " - "is not supported by kernel\n"); - return -ENOSYS; + + if (has_msr_hv_stimer) { + entry_feat->eax |= HV_SYNTIMERS_AVAILABLE; + } + + if (kvm_check_extension(cs->kvm_state, + KVM_CAP_HYPERV_TLBFLUSH) > 0) { + entry_recomm->eax |= HV_REMOTE_TLB_FLUSH_RECOMMENDED; + entry_recomm->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; + } + + if (kvm_check_extension(cs->kvm_state, + KVM_CAP_HYPERV_ENLIGHTENED_VMCS) > 0) { + entry_recomm->eax |= HV_ENLIGHTENED_VMCS_RECOMMENDED; + } + + if (kvm_check_extension(cs->kvm_state, + KVM_CAP_HYPERV_SEND_IPI) > 0) { + entry_recomm->eax |= HV_CLUSTER_IPI_RECOMMENDED; + entry_recomm->eax |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; + } + + return cpuid; +} + +static int hv_cpuid_get_fw(struct kvm_cpuid2 *cpuid, int fw, uint32_t *r) +{ + struct kvm_cpuid_entry2 *entry; + uint32_t func; + int reg; + + switch (fw) { + case FEAT_HYPERV_EAX: + reg = R_EAX; + func = HV_CPUID_FEATURES; + break; + case FEAT_HYPERV_EDX: + reg = R_EDX; + func = HV_CPUID_FEATURES; + break; + case FEAT_HV_RECOMM_EAX: + reg = R_EAX; + func = HV_CPUID_ENLIGHTMENT_INFO; + break; + default: + return -EINVAL; + } + + entry = cpuid_find_entry(cpuid, func, 0); + if (!entry) { + return -ENOENT; + } + + switch (reg) { + case R_EAX: + *r = entry->eax; + break; + case R_EDX: + *r = entry->edx; + break; + default: + return -EINVAL; + } + + return 0; +} + +static int hv_cpuid_check_and_set(CPUState *cs, struct kvm_cpuid2 *cpuid, + int feature) +{ + X86CPU *cpu = X86_CPU(cs); + CPUX86State *env = &cpu->env; + uint32_t r, fw, bits; + uint64_t deps; + int i, dep_feat = 0; + + if (!hyperv_feat_enabled(cpu, feature) && !cpu->hyperv_passthrough) { + return 0; + } + + deps = kvm_hyperv_properties[feature].dependencies; + while ((dep_feat = find_next_bit(&deps, 64, dep_feat)) < 64) { + if (!(hyperv_feat_enabled(cpu, dep_feat))) { + fprintf(stderr, + "Hyper-V %s requires Hyper-V %s\n", + kvm_hyperv_properties[feature].desc, + kvm_hyperv_properties[dep_feat].desc); + return 1; } - env->features[FEAT_HYPERV_EAX] |= HV_VP_RUNTIME_AVAILABLE; + dep_feat++; } - if (cpu->hyperv_synic) { - unsigned int cap = KVM_CAP_HYPERV_SYNIC; - if (!cpu->hyperv_synic_kvm_only) { - if (!cpu->hyperv_vpindex) { - fprintf(stderr, "Hyper-V SynIC " - "(requested by 'hv-synic' cpu flag) " - "requires Hyper-V VP_INDEX ('hv-vpindex')\n"); - return -ENOSYS; - } - cap = KVM_CAP_HYPERV_SYNIC2; + + for (i = 0; i < ARRAY_SIZE(kvm_hyperv_properties[feature].flags); i++) { + fw = kvm_hyperv_properties[feature].flags[i].fw; + bits = kvm_hyperv_properties[feature].flags[i].bits; + + if (!fw) { + continue; } - if (!has_msr_hv_synic || !kvm_check_extension(cs->kvm_state, cap)) { - fprintf(stderr, "Hyper-V SynIC (requested by 'hv-synic' cpu flag) " - "is not supported by kernel\n"); - return -ENOSYS; + if (hv_cpuid_get_fw(cpuid, fw, &r) || (r & bits) != bits) { + if (hyperv_feat_enabled(cpu, feature)) { + fprintf(stderr, + "Hyper-V %s is not supported by kernel\n", + kvm_hyperv_properties[feature].desc); + return 1; + } else { + return 0; + } } - env->features[FEAT_HYPERV_EAX] |= HV_SYNIC_AVAILABLE; + env->features[fw] |= bits; } - if (cpu->hyperv_stimer) { - if (!has_msr_hv_stimer) { - fprintf(stderr, "Hyper-V timers aren't supported by kernel\n"); + + if (cpu->hyperv_passthrough) { + cpu->hyperv_features |= BIT(feature); + } + + return 0; +} + +/* + * Fill in Hyper-V CPUIDs. Returns the number of entries filled in cpuid_ent in + * case of success, errno < 0 in case of failure and 0 when no Hyper-V + * extentions are enabled. + */ +static int hyperv_handle_properties(CPUState *cs, + struct kvm_cpuid_entry2 *cpuid_ent) +{ + X86CPU *cpu = X86_CPU(cs); + CPUX86State *env = &cpu->env; + struct kvm_cpuid2 *cpuid; + struct kvm_cpuid_entry2 *c; + uint32_t signature[3]; + uint32_t cpuid_i = 0; + int r; + + if (!hyperv_enabled(cpu)) + return 0; + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_EVMCS) || + cpu->hyperv_passthrough) { + uint16_t evmcs_version; + + r = kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_ENLIGHTENED_VMCS, 0, + (uintptr_t)&evmcs_version); + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_EVMCS) && r) { + fprintf(stderr, "Hyper-V %s is not supported by kernel\n", + kvm_hyperv_properties[HYPERV_FEAT_EVMCS].desc); return -ENOSYS; } - env->features[FEAT_HYPERV_EAX] |= HV_SYNTIMERS_AVAILABLE; - } - if (cpu->hyperv_relaxed_timing) { - env->features[FEAT_HV_RECOMM_EAX] |= HV_RELAXED_TIMING_RECOMMENDED; + + if (!r) { + env->features[FEAT_HV_RECOMM_EAX] |= + HV_ENLIGHTENED_VMCS_RECOMMENDED; + env->features[FEAT_HV_NESTED_EAX] = evmcs_version; + } } - if (cpu->hyperv_vapic) { - env->features[FEAT_HV_RECOMM_EAX] |= HV_APIC_ACCESS_RECOMMENDED; + + if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_CPUID) > 0) { + cpuid = get_supported_hv_cpuid(cs); + } else { + cpuid = get_supported_hv_cpuid_legacy(cs); } - if (cpu->hyperv_tlbflush) { - if (kvm_check_extension(cs->kvm_state, - KVM_CAP_HYPERV_TLBFLUSH) <= 0) { - fprintf(stderr, "Hyper-V TLB flush support " - "(requested by 'hv-tlbflush' cpu flag) " - " is not supported by kernel\n"); - return -ENOSYS; + + if (cpu->hyperv_passthrough) { + memcpy(cpuid_ent, &cpuid->entries[0], + cpuid->nent * sizeof(cpuid->entries[0])); + + c = cpuid_find_entry(cpuid, HV_CPUID_FEATURES, 0); + if (c) { + env->features[FEAT_HYPERV_EAX] = c->eax; + env->features[FEAT_HYPERV_EBX] = c->ebx; + env->features[FEAT_HYPERV_EDX] = c->eax; } - env->features[FEAT_HV_RECOMM_EAX] |= HV_REMOTE_TLB_FLUSH_RECOMMENDED; - env->features[FEAT_HV_RECOMM_EAX] |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; - } - if (cpu->hyperv_ipi) { - if (kvm_check_extension(cs->kvm_state, - KVM_CAP_HYPERV_SEND_IPI) <= 0) { - fprintf(stderr, "Hyper-V IPI send support " - "(requested by 'hv-ipi' cpu flag) " - " is not supported by kernel\n"); - return -ENOSYS; + c = cpuid_find_entry(cpuid, HV_CPUID_ENLIGHTMENT_INFO, 0); + if (c) { + env->features[FEAT_HV_RECOMM_EAX] = c->eax; + + /* hv-spinlocks may have been overriden */ + if (cpu->hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY) { + c->ebx = cpu->hyperv_spinlock_attempts; + } + } + c = cpuid_find_entry(cpuid, HV_CPUID_NESTED_FEATURES, 0); + if (c) { + env->features[FEAT_HV_NESTED_EAX] = c->eax; } - env->features[FEAT_HV_RECOMM_EAX] |= HV_CLUSTER_IPI_RECOMMENDED; - env->features[FEAT_HV_RECOMM_EAX] |= HV_EX_PROCESSOR_MASKS_RECOMMENDED; } - if (cpu->hyperv_evmcs) { - uint16_t evmcs_version; - if (kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_ENLIGHTENED_VMCS, 0, - (uintptr_t)&evmcs_version)) { - fprintf(stderr, "Hyper-V Enlightened VMCS " - "(requested by 'hv-evmcs' cpu flag) " - "is not supported by kernel\n"); - return -ENOSYS; + /* Features */ + r = hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_RELAXED); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_VAPIC); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_TIME); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_CRASH); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_RESET); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_VPINDEX); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_RUNTIME); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_SYNIC); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_STIMER); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_FREQUENCIES); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_REENLIGHTENMENT); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_TLBFLUSH); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_EVMCS); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_IPI); + r |= hv_cpuid_check_and_set(cs, cpuid, HYPERV_FEAT_STIMER_DIRECT); + + /* Additional dependencies not covered by kvm_hyperv_properties[] */ + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC) && + !cpu->hyperv_synic_kvm_only && + !hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX)) { + fprintf(stderr, "Hyper-V %s requires Hyper-V %s\n", + kvm_hyperv_properties[HYPERV_FEAT_SYNIC].desc, + kvm_hyperv_properties[HYPERV_FEAT_VPINDEX].desc); + r |= 1; + } + + /* Not exposed by KVM but needed to make CPU hotplug in Windows work */ + env->features[FEAT_HYPERV_EDX] |= HV_CPU_DYNAMIC_PARTITIONING_AVAILABLE; + + if (r) { + r = -ENOSYS; + goto free; + } + + if (cpu->hyperv_passthrough) { + /* We already copied all feature words from KVM as is */ + r = cpuid->nent; + goto free; + } + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_VENDOR_AND_MAX_FUNCTIONS; + if (!cpu->hyperv_vendor_id) { + memcpy(signature, "Microsoft Hv", 12); + } else { + size_t len = strlen(cpu->hyperv_vendor_id); + + if (len > 12) { + error_report("hv-vendor-id truncated to 12 characters"); + len = 12; + } + memset(signature, 0, 12); + memcpy(signature, cpu->hyperv_vendor_id, len); + } + c->eax = hyperv_feat_enabled(cpu, HYPERV_FEAT_EVMCS) ? + HV_CPUID_NESTED_FEATURES : HV_CPUID_IMPLEMENT_LIMITS; + c->ebx = signature[0]; + c->ecx = signature[1]; + c->edx = signature[2]; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_INTERFACE; + memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12); + c->eax = signature[0]; + c->ebx = 0; + c->ecx = 0; + c->edx = 0; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_VERSION; + c->eax = 0x00001bbc; + c->ebx = 0x00060001; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_FEATURES; + c->eax = env->features[FEAT_HYPERV_EAX]; + c->ebx = env->features[FEAT_HYPERV_EBX]; + c->edx = env->features[FEAT_HYPERV_EDX]; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_ENLIGHTMENT_INFO; + c->eax = env->features[FEAT_HV_RECOMM_EAX]; + c->ebx = cpu->hyperv_spinlock_attempts; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_IMPLEMENT_LIMITS; + c->eax = cpu->hv_max_vps; + c->ebx = 0x40; + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_EVMCS)) { + __u32 function; + + /* Create zeroed 0x40000006..0x40000009 leaves */ + for (function = HV_CPUID_IMPLEMENT_LIMITS + 1; + function < HV_CPUID_NESTED_FEATURES; function++) { + c = &cpuid_ent[cpuid_i++]; + c->function = function; } - env->features[FEAT_HV_RECOMM_EAX] |= HV_ENLIGHTENED_VMCS_RECOMMENDED; - env->features[FEAT_HV_NESTED_EAX] = evmcs_version; + + c = &cpuid_ent[cpuid_i++]; + c->function = HV_CPUID_NESTED_FEATURES; + c->eax = env->features[FEAT_HV_NESTED_EAX]; } + r = cpuid_i; - return 0; +free: + g_free(cpuid); + + return r; } +static Error *hv_passthrough_mig_blocker; + static int hyperv_init_vcpu(X86CPU *cpu) { CPUState *cs = CPU(cpu); + Error *local_err = NULL; int ret; - if (cpu->hyperv_vpindex && !hv_vpindex_settable) { + if (cpu->hyperv_passthrough && hv_passthrough_mig_blocker == NULL) { + error_setg(&hv_passthrough_mig_blocker, + "'hv-passthrough' CPU flag prevents migration, use explicit" + " set of hv-* flags instead"); + ret = migrate_add_blocker(hv_passthrough_mig_blocker, &local_err); + if (local_err) { + error_report_err(local_err); + error_free(hv_passthrough_mig_blocker); + return ret; + } + } + + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) && !hv_vpindex_settable) { /* * the kernel doesn't support setting vp_index; assert that its value * is in sync @@ -881,7 +1317,7 @@ static int hyperv_init_vcpu(X86CPU *cpu) } } - if (cpu->hyperv_synic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) { uint32_t synic_cap = cpu->hyperv_synic_kvm_only ? KVM_CAP_HYPERV_SYNIC : KVM_CAP_HYPERV_SYNIC2; ret = kvm_vcpu_enable_cap(cs, synic_cap, 0); @@ -905,7 +1341,7 @@ static int hyperv_init_vcpu(X86CPU *cpu) } static Error *invtsc_mig_blocker; -static Error *vmx_mig_blocker; +static Error *nested_virt_mig_blocker; #define KVM_MAX_CPUID_ENTRIES 100 @@ -930,6 +1366,7 @@ int kvm_arch_init_vcpu(CPUState *cs) struct kvm_cpuid_entry2 *c; uint32_t signature[3]; int kvm_base = KVM_CPUID_SIGNATURE; + int max_nested_state_len; int r; Error *local_err = NULL; @@ -939,7 +1376,7 @@ int kvm_arch_init_vcpu(CPUState *cs) r = kvm_arch_set_tsc_khz(cs); if (r < 0) { - goto fail; + return r; } /* vcpu's TSC frequency is either specified by user, or following @@ -957,79 +1394,13 @@ int kvm_arch_init_vcpu(CPUState *cs) } /* Paravirtualization CPUIDs */ - if (hyperv_enabled(cpu)) { - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_VENDOR_AND_MAX_FUNCTIONS; - if (!cpu->hyperv_vendor_id) { - memcpy(signature, "Microsoft Hv", 12); - } else { - size_t len = strlen(cpu->hyperv_vendor_id); - - if (len > 12) { - error_report("hv-vendor-id truncated to 12 characters"); - len = 12; - } - memset(signature, 0, 12); - memcpy(signature, cpu->hyperv_vendor_id, len); - } - c->eax = cpu->hyperv_evmcs ? - HV_CPUID_NESTED_FEATURES : HV_CPUID_IMPLEMENT_LIMITS; - c->ebx = signature[0]; - c->ecx = signature[1]; - c->edx = signature[2]; - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_INTERFACE; - memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12); - c->eax = signature[0]; - c->ebx = 0; - c->ecx = 0; - c->edx = 0; - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_VERSION; - c->eax = 0x00001bbc; - c->ebx = 0x00060001; - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_FEATURES; - r = hyperv_handle_properties(cs); - if (r) { - return r; - } - c->eax = env->features[FEAT_HYPERV_EAX]; - c->ebx = env->features[FEAT_HYPERV_EBX]; - c->edx = env->features[FEAT_HYPERV_EDX]; - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_ENLIGHTMENT_INFO; - - c->eax = env->features[FEAT_HV_RECOMM_EAX]; - c->ebx = cpu->hyperv_spinlock_attempts; - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_IMPLEMENT_LIMITS; - - c->eax = cpu->hv_max_vps; - c->ebx = 0x40; - + r = hyperv_handle_properties(cs, cpuid_data.entries); + if (r < 0) { + return r; + } else if (r > 0) { + cpuid_i = r; kvm_base = KVM_CPUID_SIGNATURE_NEXT; has_msr_hv_hypercall = true; - - if (cpu->hyperv_evmcs) { - __u32 function; - - /* Create zeroed 0x40000006..0x40000009 leaves */ - for (function = HV_CPUID_IMPLEMENT_LIMITS + 1; - function < HV_CPUID_NESTED_FEATURES; function++) { - c = &cpuid_data.entries[cpuid_i++]; - c->function = function; - } - - c = &cpuid_data.entries[cpuid_i++]; - c->function = HV_CPUID_NESTED_FEATURES; - c->eax = env->features[FEAT_HV_NESTED_EAX]; - } } if (cpu->expose_kvm) { @@ -1269,13 +1640,18 @@ int kvm_arch_init_vcpu(CPUState *cs) !!(c->ecx & CPUID_EXT_SMX); } - if ((env->features[FEAT_1_ECX] & CPUID_EXT_VMX) && !vmx_mig_blocker) { - error_setg(&vmx_mig_blocker, - "Nested VMX virtualization does not support live migration yet"); - r = migrate_add_blocker(vmx_mig_blocker, &local_err); + if (cpu_has_vmx(env) && !nested_virt_mig_blocker && + ((kvm_max_nested_state_length() <= 0) || !has_exception_payload)) { + error_setg(&nested_virt_mig_blocker, + "Kernel do not provide required capabilities for " + "nested virtualization migration. " + "(CAP_NESTED_STATE=%d, CAP_EXCEPTION_PAYLOAD=%d)", + kvm_max_nested_state_length() > 0, + has_exception_payload); + r = migrate_add_blocker(nested_virt_mig_blocker, &local_err); if (local_err) { error_report_err(local_err); - error_free(vmx_mig_blocker); + error_free(nested_virt_mig_blocker); return r; } } @@ -1294,7 +1670,7 @@ int kvm_arch_init_vcpu(CPUState *cs) if (local_err) { error_report_err(local_err); error_free(invtsc_mig_blocker); - return r; + goto fail2; } } } @@ -1330,6 +1706,24 @@ int kvm_arch_init_vcpu(CPUState *cs) if (has_xsave) { env->xsave_buf = qemu_memalign(4096, sizeof(struct kvm_xsave)); } + + max_nested_state_len = kvm_max_nested_state_length(); + if (max_nested_state_len > 0) { + assert(max_nested_state_len >= offsetof(struct kvm_nested_state, data)); + env->nested_state = g_malloc0(max_nested_state_len); + + env->nested_state->size = max_nested_state_len; + + if (IS_INTEL_CPU(env)) { + struct kvm_vmx_nested_state_hdr *vmx_hdr = + &env->nested_state->hdr.vmx; + + env->nested_state->format = KVM_STATE_NESTED_FORMAT_VMX; + vmx_hdr->vmxon_pa = -1ull; + vmx_hdr->vmcs12_pa = -1ull; + } + } + cpu->kvm_msr_buf = g_malloc0(MSR_BUF_SIZE); if (!(env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_RDTSCP)) { @@ -1345,9 +1739,30 @@ int kvm_arch_init_vcpu(CPUState *cs) fail: migrate_del_blocker(invtsc_mig_blocker); + fail2: + migrate_del_blocker(nested_virt_mig_blocker); + return r; } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + X86CPU *cpu = X86_CPU(cs); + CPUX86State *env = &cpu->env; + + if (cpu->kvm_msr_buf) { + g_free(cpu->kvm_msr_buf); + cpu->kvm_msr_buf = NULL; + } + + if (env->nested_state) { + g_free(env->nested_state); + env->nested_state = NULL; + } + + return 0; +} + void kvm_arch_reset_vcpu(X86CPU *cpu) { CPUX86State *env = &cpu->env; @@ -1360,7 +1775,7 @@ void kvm_arch_reset_vcpu(X86CPU *cpu) env->mp_state = KVM_MP_STATE_RUNNABLE; } - if (cpu->hyperv_synic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) { int i; for (i = 0; i < ARRAY_SIZE(env->msr_hv_synic_sint); i++) { env->msr_hv_synic_sint[i] = HV_SINT_MASKED; @@ -1515,6 +1930,9 @@ static int kvm_get_supported_msrs(KVMState *s) case MSR_IA32_ARCH_CAPABILITIES: has_msr_arch_capabs = true; break; + case MSR_IA32_CORE_CAPABILITY: + has_msr_core_capabs = true; + break; } } } @@ -1572,6 +1990,16 @@ int kvm_arch_init(MachineState *ms, KVMState *s) hv_vpindex_settable = kvm_check_extension(s, KVM_CAP_HYPERV_VP_INDEX); + has_exception_payload = kvm_check_extension(s, KVM_CAP_EXCEPTION_PAYLOAD); + if (has_exception_payload) { + ret = kvm_vm_enable_cap(s, KVM_CAP_EXCEPTION_PAYLOAD, 0, true); + if (ret < 0) { + error_report("kvm: Failed to enable exception payload cap: %s", + strerror(-ret)); + return ret; + } + } + ret = kvm_get_supported_msrs(s); if (ret < 0) { return ret; @@ -2041,6 +2469,11 @@ static int kvm_put_msrs(X86CPU *cpu, int level) env->features[FEAT_ARCH_CAPABILITIES]); } + if (has_msr_core_capabs) { + kvm_msr_entry_add(cpu, MSR_IA32_CORE_CAPABILITY, + env->features[FEAT_CORE_CAPABILITY]); + } + /* * The following MSRs have side effects on the guest or are too heavy * for normal writeback. Limit them to reset or full state updates. @@ -2100,11 +2533,11 @@ static int kvm_put_msrs(X86CPU *cpu, int level) kvm_msr_entry_add(cpu, HV_X64_MSR_HYPERCALL, env->msr_hv_hypercall); } - if (cpu->hyperv_time) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_TIME)) { kvm_msr_entry_add(cpu, HV_X64_MSR_REFERENCE_TSC, env->msr_hv_tsc); } - if (cpu->hyperv_reenlightenment) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_REENLIGHTENMENT)) { kvm_msr_entry_add(cpu, HV_X64_MSR_REENLIGHTENMENT_CONTROL, env->msr_hv_reenlightenment_control); kvm_msr_entry_add(cpu, HV_X64_MSR_TSC_EMULATION_CONTROL, @@ -2113,7 +2546,7 @@ static int kvm_put_msrs(X86CPU *cpu, int level) env->msr_hv_tsc_emulation_status); } } - if (cpu->hyperv_vapic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VAPIC)) { kvm_msr_entry_add(cpu, HV_X64_MSR_APIC_ASSIST_PAGE, env->msr_hv_vapic); } @@ -2129,11 +2562,12 @@ static int kvm_put_msrs(X86CPU *cpu, int level) if (has_msr_hv_runtime) { kvm_msr_entry_add(cpu, HV_X64_MSR_VP_RUNTIME, env->msr_hv_runtime); } - if (cpu->hyperv_vpindex && hv_vpindex_settable) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX) + && hv_vpindex_settable) { kvm_msr_entry_add(cpu, HV_X64_MSR_VP_INDEX, hyperv_vp_index(CPU(cpu))); } - if (cpu->hyperv_synic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) { int j; kvm_msr_entry_add(cpu, HV_X64_MSR_SVERSION, HV_SYNIC_VERSION); @@ -2473,13 +2907,13 @@ static int kvm_get_msrs(X86CPU *cpu) kvm_msr_entry_add(cpu, HV_X64_MSR_HYPERCALL, 0); kvm_msr_entry_add(cpu, HV_X64_MSR_GUEST_OS_ID, 0); } - if (cpu->hyperv_vapic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_VAPIC)) { kvm_msr_entry_add(cpu, HV_X64_MSR_APIC_ASSIST_PAGE, 0); } - if (cpu->hyperv_time) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_TIME)) { kvm_msr_entry_add(cpu, HV_X64_MSR_REFERENCE_TSC, 0); } - if (cpu->hyperv_reenlightenment) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_REENLIGHTENMENT)) { kvm_msr_entry_add(cpu, HV_X64_MSR_REENLIGHTENMENT_CONTROL, 0); kvm_msr_entry_add(cpu, HV_X64_MSR_TSC_EMULATION_CONTROL, 0); kvm_msr_entry_add(cpu, HV_X64_MSR_TSC_EMULATION_STATUS, 0); @@ -2494,7 +2928,7 @@ static int kvm_get_msrs(X86CPU *cpu) if (has_msr_hv_runtime) { kvm_msr_entry_add(cpu, HV_X64_MSR_VP_RUNTIME, 0); } - if (cpu->hyperv_synic) { + if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) { uint32_t msr; kvm_msr_entry_add(cpu, HV_X64_MSR_SCONTROL, 0); @@ -2876,8 +3310,16 @@ static int kvm_put_vcpu_events(X86CPU *cpu, int level) return 0; } - events.exception.injected = (env->exception_injected >= 0); - events.exception.nr = env->exception_injected; + events.flags = 0; + + if (has_exception_payload) { + events.flags |= KVM_VCPUEVENT_VALID_PAYLOAD; + events.exception.pending = env->exception_pending; + events.exception_has_payload = env->exception_has_payload; + events.exception_payload = env->exception_payload; + } + events.exception.nr = env->exception_nr; + events.exception.injected = env->exception_injected; events.exception.has_error_code = env->has_error_code; events.exception.error_code = env->error_code; @@ -2890,7 +3332,6 @@ static int kvm_put_vcpu_events(X86CPU *cpu, int level) events.nmi.masked = !!(env->hflags2 & HF2_NMI_MASK); events.sipi_vector = env->sipi_vector; - events.flags = 0; if (has_msr_smbase) { events.smi.smm = !!(env->hflags & HF_SMM_MASK); @@ -2940,8 +3381,19 @@ static int kvm_get_vcpu_events(X86CPU *cpu) if (ret < 0) { return ret; } - env->exception_injected = - events.exception.injected ? events.exception.nr : -1; + + if (events.flags & KVM_VCPUEVENT_VALID_PAYLOAD) { + env->exception_pending = events.exception.pending; + env->exception_has_payload = events.exception_has_payload; + env->exception_payload = events.exception_payload; + } else { + env->exception_pending = 0; + env->exception_has_payload = false; + } + env->exception_injected = events.exception.injected; + env->exception_nr = + (env->exception_pending || env->exception_injected) ? + events.exception.nr : -1; env->has_error_code = events.exception.has_error_code; env->error_code = events.exception.error_code; @@ -2993,12 +3445,12 @@ static int kvm_guest_debug_workarounds(X86CPU *cpu) unsigned long reinject_trap = 0; if (!kvm_has_vcpu_events()) { - if (env->exception_injected == 1) { + if (env->exception_nr == EXCP01_DB) { reinject_trap = KVM_GUESTDBG_INJECT_DB; - } else if (env->exception_injected == 3) { + } else if (env->exception_injected == EXCP03_INT3) { reinject_trap = KVM_GUESTDBG_INJECT_BP; } - env->exception_injected = -1; + kvm_reset_exception(env); } /* @@ -3059,6 +3511,52 @@ static int kvm_get_debugregs(X86CPU *cpu) return 0; } +static int kvm_put_nested_state(X86CPU *cpu) +{ + CPUX86State *env = &cpu->env; + int max_nested_state_len = kvm_max_nested_state_length(); + + if (max_nested_state_len <= 0) { + return 0; + } + + assert(env->nested_state->size <= max_nested_state_len); + return kvm_vcpu_ioctl(CPU(cpu), KVM_SET_NESTED_STATE, env->nested_state); +} + +static int kvm_get_nested_state(X86CPU *cpu) +{ + CPUX86State *env = &cpu->env; + int max_nested_state_len = kvm_max_nested_state_length(); + int ret; + + if (max_nested_state_len <= 0) { + return 0; + } + + /* + * It is possible that migration restored a smaller size into + * nested_state->hdr.size than what our kernel support. + * We preserve migration origin nested_state->hdr.size for + * call to KVM_SET_NESTED_STATE but wish that our next call + * to KVM_GET_NESTED_STATE will use max size our kernel support. + */ + env->nested_state->size = max_nested_state_len; + + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_NESTED_STATE, env->nested_state); + if (ret < 0) { + return ret; + } + + if (env->nested_state->flags & KVM_STATE_NESTED_GUEST_MODE) { + env->hflags |= HF_GUEST_MASK; + } else { + env->hflags &= ~HF_GUEST_MASK; + } + + return ret; +} + int kvm_arch_put_registers(CPUState *cpu, int level) { X86CPU *x86_cpu = X86_CPU(cpu); @@ -3066,6 +3564,11 @@ int kvm_arch_put_registers(CPUState *cpu, int level) assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); + ret = kvm_put_nested_state(x86_cpu); + if (ret < 0) { + return ret; + } + if (level >= KVM_PUT_RESET_STATE) { ret = kvm_put_msr_feature_control(x86_cpu); if (ret < 0) { @@ -3181,6 +3684,10 @@ int kvm_arch_get_registers(CPUState *cs) if (ret < 0) { goto out; } + ret = kvm_get_nested_state(cpu); + if (ret < 0) { + goto out; + } ret = 0; out: cpu_sync_bndcs_hflags(&cpu->env); @@ -3319,13 +3826,13 @@ int kvm_arch_process_async_events(CPUState *cs) kvm_cpu_synchronize_state(cs); - if (env->exception_injected == EXCP08_DBLE) { + if (env->exception_nr == EXCP08_DBLE) { /* this means triple fault */ qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); cs->exit_request = 1; return 0; } - env->exception_injected = EXCP12_MCHK; + kvm_queue_exception(env, EXCP12_MCHK, 0, 0); env->has_error_code = 0; cs->halted = 0; @@ -3507,8 +4014,8 @@ static int kvm_handle_debug(X86CPU *cpu, int ret = 0; int n; - if (arch_info->exception == 1) { - if (arch_info->dr6 & (1 << 14)) { + if (arch_info->exception == EXCP01_DB) { + if (arch_info->dr6 & DR6_BS) { if (cs->singlestep_enabled) { ret = EXCP_DEBUG; } @@ -3540,10 +4047,12 @@ static int kvm_handle_debug(X86CPU *cpu, } if (ret == 0) { cpu_synchronize_state(cs); - assert(env->exception_injected == -1); + assert(env->exception_nr == -1); /* pass to guest */ - env->exception_injected = arch_info->exception; + kvm_queue_exception(env, arch_info->exception, + arch_info->exception == EXCP01_DB, + arch_info->dr6); env->has_error_code = 0; } diff --git a/target/i386/machine.c b/target/i386/machine.c index 4aff1a763f..851b249d1a 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -231,6 +231,50 @@ static int cpu_pre_save(void *opaque) env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK); } +#ifdef CONFIG_KVM + /* Verify we have nested virtualization state from kernel if required */ + if (kvm_enabled() && cpu_has_vmx(env) && !env->nested_state) { + error_report("Guest enabled nested virtualization but kernel " + "does not support saving of nested state"); + return -EINVAL; + } +#endif + + /* + * When vCPU is running L2 and exception is still pending, + * it can potentially be intercepted by L1 hypervisor. + * In contrast to an injected exception which cannot be + * intercepted anymore. + * + * Furthermore, when a L2 exception is intercepted by L1 + * hypervisor, it's exception payload (CR2/DR6 on #PF/#DB) + * should not be set yet in the respective vCPU register. + * Thus, in case an exception is pending, it is + * important to save the exception payload seperately. + * + * Therefore, if an exception is not in a pending state + * or vCPU is not in guest-mode, it is not important to + * distinguish between a pending and injected exception + * and we don't need to store seperately the exception payload. + * + * In order to preserve better backwards-compatabile migration, + * convert a pending exception to an injected exception in + * case it is not important to distingiush between them + * as described above. + */ + if (env->exception_pending && !(env->hflags & HF_GUEST_MASK)) { + env->exception_pending = 0; + env->exception_injected = 1; + + if (env->exception_has_payload) { + if (env->exception_nr == EXCP01_DB) { + env->dr[6] = env->exception_payload; + } else if (env->exception_nr == EXCP0E_PAGE) { + env->cr[2] = env->exception_payload; + } + } + } + return 0; } @@ -278,6 +322,33 @@ static int cpu_post_load(void *opaque, int version_id) env->hflags &= ~HF_CPL_MASK; env->hflags |= (env->segs[R_SS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; +#ifdef CONFIG_KVM + if ((env->hflags & HF_GUEST_MASK) && + (!env->nested_state || + !(env->nested_state->flags & KVM_STATE_NESTED_GUEST_MODE))) { + error_report("vCPU set in guest-mode inconsistent with " + "migrated kernel nested state"); + return -EINVAL; + } +#endif + + /* + * There are cases that we can get valid exception_nr with both + * exception_pending and exception_injected being cleared. + * This can happen in one of the following scenarios: + * 1) Source is older QEMU without KVM_CAP_EXCEPTION_PAYLOAD support. + * 2) Source is running on kernel without KVM_CAP_EXCEPTION_PAYLOAD support. + * 3) "cpu/exception_info" subsection not sent because there is no exception + * pending or guest wasn't running L2 (See comment in cpu_pre_save()). + * + * In those cases, we can just deduce that a valid exception_nr means + * we can treat the exception as already injected. + */ + if ((env->exception_nr != -1) && + !env->exception_pending && !env->exception_injected) { + env->exception_injected = 1; + } + env->fpstt = (env->fpus_vmstate >> 11) & 7; env->fpus = env->fpus_vmstate & ~0x3800; env->fptag_vmstate ^= 0xff; @@ -323,6 +394,35 @@ static bool steal_time_msr_needed(void *opaque) return cpu->env.steal_time_msr != 0; } +static bool exception_info_needed(void *opaque) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + + /* + * It is important to save exception-info only in case + * we need to distingiush between a pending and injected + * exception. Which is only required in case there is a + * pending exception and vCPU is running L2. + * For more info, refer to comment in cpu_pre_save(). + */ + return env->exception_pending && (env->hflags & HF_GUEST_MASK); +} + +static const VMStateDescription vmstate_exception_info = { + .name = "cpu/exception_info", + .version_id = 1, + .minimum_version_id = 1, + .needed = exception_info_needed, + .fields = (VMStateField[]) { + VMSTATE_UINT8(env.exception_pending, X86CPU), + VMSTATE_UINT8(env.exception_injected, X86CPU), + VMSTATE_UINT8(env.exception_has_payload, X86CPU), + VMSTATE_UINT64(env.exception_payload, X86CPU), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_steal_time_msr = { .name = "cpu/steal_time_msr", .version_id = 1, @@ -634,7 +734,7 @@ static bool hyperv_runtime_enable_needed(void *opaque) X86CPU *cpu = opaque; CPUX86State *env = &cpu->env; - if (!cpu->hyperv_runtime) { + if (!hyperv_feat_enabled(cpu, HYPERV_FEAT_RUNTIME)) { return false; } @@ -851,6 +951,182 @@ static const VMStateDescription vmstate_tsc_khz = { } }; +#ifdef CONFIG_KVM + +static bool vmx_vmcs12_needed(void *opaque) +{ + struct kvm_nested_state *nested_state = opaque; + return (nested_state->size > + offsetof(struct kvm_nested_state, data.vmx[0].vmcs12)); +} + +static const VMStateDescription vmstate_vmx_vmcs12 = { + .name = "cpu/kvm_nested_state/vmx/vmcs12", + .version_id = 1, + .minimum_version_id = 1, + .needed = vmx_vmcs12_needed, + .fields = (VMStateField[]) { + VMSTATE_UINT8_ARRAY(data.vmx[0].vmcs12, + struct kvm_nested_state, + KVM_STATE_NESTED_VMX_VMCS_SIZE), + VMSTATE_END_OF_LIST() + } +}; + +static bool vmx_shadow_vmcs12_needed(void *opaque) +{ + struct kvm_nested_state *nested_state = opaque; + return (nested_state->size > + offsetof(struct kvm_nested_state, data.vmx[0].shadow_vmcs12)); +} + +static const VMStateDescription vmstate_vmx_shadow_vmcs12 = { + .name = "cpu/kvm_nested_state/vmx/shadow_vmcs12", + .version_id = 1, + .minimum_version_id = 1, + .needed = vmx_shadow_vmcs12_needed, + .fields = (VMStateField[]) { + VMSTATE_UINT8_ARRAY(data.vmx[0].shadow_vmcs12, + struct kvm_nested_state, + KVM_STATE_NESTED_VMX_VMCS_SIZE), + VMSTATE_END_OF_LIST() + } +}; + +static bool vmx_nested_state_needed(void *opaque) +{ + struct kvm_nested_state *nested_state = opaque; + + return ((nested_state->format == KVM_STATE_NESTED_FORMAT_VMX) && + ((nested_state->hdr.vmx.vmxon_pa != -1ull) || + (nested_state->hdr.vmx.smm.flags & KVM_STATE_NESTED_SMM_VMXON))); +} + +static const VMStateDescription vmstate_vmx_nested_state = { + .name = "cpu/kvm_nested_state/vmx", + .version_id = 1, + .minimum_version_id = 1, + .needed = vmx_nested_state_needed, + .fields = (VMStateField[]) { + VMSTATE_U64(hdr.vmx.vmxon_pa, struct kvm_nested_state), + VMSTATE_U64(hdr.vmx.vmcs12_pa, struct kvm_nested_state), + VMSTATE_U16(hdr.vmx.smm.flags, struct kvm_nested_state), + VMSTATE_END_OF_LIST() + }, + .subsections = (const VMStateDescription*[]) { + &vmstate_vmx_vmcs12, + &vmstate_vmx_shadow_vmcs12, + NULL, + } +}; + +static bool svm_nested_state_needed(void *opaque) +{ + struct kvm_nested_state *nested_state = opaque; + + return (nested_state->format == KVM_STATE_NESTED_FORMAT_SVM); +} + +static const VMStateDescription vmstate_svm_nested_state = { + .name = "cpu/kvm_nested_state/svm", + .version_id = 1, + .minimum_version_id = 1, + .needed = svm_nested_state_needed, + .fields = (VMStateField[]) { + VMSTATE_END_OF_LIST() + } +}; + +static bool nested_state_needed(void *opaque) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + + return (env->nested_state && + (vmx_nested_state_needed(env->nested_state) || + svm_nested_state_needed(env->nested_state))); +} + +static int nested_state_post_load(void *opaque, int version_id) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + struct kvm_nested_state *nested_state = env->nested_state; + int min_nested_state_len = offsetof(struct kvm_nested_state, data); + int max_nested_state_len = kvm_max_nested_state_length(); + + /* + * If our kernel don't support setting nested state + * and we have received nested state from migration stream, + * we need to fail migration + */ + if (max_nested_state_len <= 0) { + error_report("Received nested state when kernel cannot restore it"); + return -EINVAL; + } + + /* + * Verify that the size of received nested_state struct + * at least cover required header and is not larger + * than the max size that our kernel support + */ + if (nested_state->size < min_nested_state_len) { + error_report("Received nested state size less than min: " + "len=%d, min=%d", + nested_state->size, min_nested_state_len); + return -EINVAL; + } + if (nested_state->size > max_nested_state_len) { + error_report("Recieved unsupported nested state size: " + "nested_state->size=%d, max=%d", + nested_state->size, max_nested_state_len); + return -EINVAL; + } + + /* Verify format is valid */ + if ((nested_state->format != KVM_STATE_NESTED_FORMAT_VMX) && + (nested_state->format != KVM_STATE_NESTED_FORMAT_SVM)) { + error_report("Received invalid nested state format: %d", + nested_state->format); + return -EINVAL; + } + + return 0; +} + +static const VMStateDescription vmstate_kvm_nested_state = { + .name = "cpu/kvm_nested_state", + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { + VMSTATE_U16(flags, struct kvm_nested_state), + VMSTATE_U16(format, struct kvm_nested_state), + VMSTATE_U32(size, struct kvm_nested_state), + VMSTATE_END_OF_LIST() + }, + .subsections = (const VMStateDescription*[]) { + &vmstate_vmx_nested_state, + &vmstate_svm_nested_state, + NULL + } +}; + +static const VMStateDescription vmstate_nested_state = { + .name = "cpu/nested_state", + .version_id = 1, + .minimum_version_id = 1, + .needed = nested_state_needed, + .post_load = nested_state_post_load, + .fields = (VMStateField[]) { + VMSTATE_STRUCT_POINTER(env.nested_state, X86CPU, + vmstate_kvm_nested_state, + struct kvm_nested_state), + VMSTATE_END_OF_LIST() + } +}; + +#endif + static bool mcg_ext_ctl_needed(void *opaque) { X86CPU *cpu = opaque; @@ -1056,7 +1332,7 @@ VMStateDescription vmstate_x86_cpu = { VMSTATE_INT32(env.interrupt_injected, X86CPU), VMSTATE_UINT32(env.mp_state, X86CPU), VMSTATE_UINT64(env.tsc, X86CPU), - VMSTATE_INT32(env.exception_injected, X86CPU), + VMSTATE_INT32(env.exception_nr, X86CPU), VMSTATE_UINT8(env.soft_interrupt, X86CPU), VMSTATE_UINT8(env.nmi_injected, X86CPU), VMSTATE_UINT8(env.nmi_pending, X86CPU), @@ -1080,6 +1356,7 @@ VMStateDescription vmstate_x86_cpu = { /* The above list is not sorted /wrt version numbers, watch out! */ }, .subsections = (const VMStateDescription*[]) { + &vmstate_exception_info, &vmstate_async_pf_msr, &vmstate_pv_eoi_msr, &vmstate_steal_time_msr, @@ -1113,6 +1390,9 @@ VMStateDescription vmstate_x86_cpu = { #ifndef TARGET_X86_64 &vmstate_efer32, #endif +#ifdef CONFIG_KVM + &vmstate_nested_state, +#endif NULL } }; diff --git a/target/mips/kvm.c b/target/mips/kvm.c index 8e72850962..938f8f144b 100644 --- a/target/mips/kvm.c +++ b/target/mips/kvm.c @@ -91,6 +91,11 @@ int kvm_arch_init_vcpu(CPUState *cs) return ret; } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + return 0; +} + void kvm_mips_reset_vcpu(MIPSCPU *cpu) { CPUMIPSState *env = &cpu->env; diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index be059a3d6f..7a9bfb3f36 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -1737,6 +1737,24 @@ void helper_msa_ilvev_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_BYTE: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->b[8] = pws->b[9]; + pwd->b[9] = pwt->b[9]; + pwd->b[10] = pws->b[11]; + pwd->b[11] = pwt->b[11]; + pwd->b[12] = pws->b[13]; + pwd->b[13] = pwt->b[13]; + pwd->b[14] = pws->b[15]; + pwd->b[15] = pwt->b[15]; + pwd->b[0] = pws->b[1]; + pwd->b[1] = pwt->b[1]; + pwd->b[2] = pws->b[3]; + pwd->b[3] = pwt->b[3]; + pwd->b[4] = pws->b[5]; + pwd->b[5] = pwt->b[5]; + pwd->b[6] = pws->b[7]; + pwd->b[7] = pwt->b[7]; +#else pwd->b[15] = pws->b[14]; pwd->b[14] = pwt->b[14]; pwd->b[13] = pws->b[12]; @@ -1753,8 +1771,19 @@ void helper_msa_ilvev_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->b[2] = pwt->b[2]; pwd->b[1] = pws->b[0]; pwd->b[0] = pwt->b[0]; +#endif break; case DF_HALF: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->h[4] = pws->h[5]; + pwd->h[5] = pwt->h[5]; + pwd->h[6] = pws->h[7]; + pwd->h[7] = pwt->h[7]; + pwd->h[0] = pws->h[1]; + pwd->h[1] = pwt->h[1]; + pwd->h[2] = pws->h[3]; + pwd->h[3] = pwt->h[3]; +#else pwd->h[7] = pws->h[6]; pwd->h[6] = pwt->h[6]; pwd->h[5] = pws->h[4]; @@ -1763,12 +1792,20 @@ void helper_msa_ilvev_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->h[2] = pwt->h[2]; pwd->h[1] = pws->h[0]; pwd->h[0] = pwt->h[0]; +#endif break; case DF_WORD: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->w[2] = pws->w[3]; + pwd->w[3] = pwt->w[3]; + pwd->w[0] = pws->w[1]; + pwd->w[1] = pwt->w[1]; +#else pwd->w[3] = pws->w[2]; pwd->w[2] = pwt->w[2]; pwd->w[1] = pws->w[0]; pwd->w[0] = pwt->w[0]; +#endif break; case DF_DOUBLE: pwd->d[1] = pws->d[0]; @@ -1788,6 +1825,24 @@ void helper_msa_ilvod_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_BYTE: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->b[7] = pwt->b[6]; + pwd->b[6] = pws->b[6]; + pwd->b[5] = pwt->b[4]; + pwd->b[4] = pws->b[4]; + pwd->b[3] = pwt->b[2]; + pwd->b[2] = pws->b[2]; + pwd->b[1] = pwt->b[0]; + pwd->b[0] = pws->b[0]; + pwd->b[15] = pwt->b[14]; + pwd->b[14] = pws->b[14]; + pwd->b[13] = pwt->b[12]; + pwd->b[12] = pws->b[12]; + pwd->b[11] = pwt->b[10]; + pwd->b[10] = pws->b[10]; + pwd->b[9] = pwt->b[8]; + pwd->b[8] = pws->b[8]; +#else pwd->b[0] = pwt->b[1]; pwd->b[1] = pws->b[1]; pwd->b[2] = pwt->b[3]; @@ -1804,8 +1859,19 @@ void helper_msa_ilvod_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->b[13] = pws->b[13]; pwd->b[14] = pwt->b[15]; pwd->b[15] = pws->b[15]; +#endif break; case DF_HALF: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->h[3] = pwt->h[2]; + pwd->h[2] = pws->h[2]; + pwd->h[1] = pwt->h[0]; + pwd->h[0] = pws->h[0]; + pwd->h[7] = pwt->h[6]; + pwd->h[6] = pws->h[6]; + pwd->h[5] = pwt->h[4]; + pwd->h[4] = pws->h[4]; +#else pwd->h[0] = pwt->h[1]; pwd->h[1] = pws->h[1]; pwd->h[2] = pwt->h[3]; @@ -1814,12 +1880,20 @@ void helper_msa_ilvod_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->h[5] = pws->h[5]; pwd->h[6] = pwt->h[7]; pwd->h[7] = pws->h[7]; +#endif break; case DF_WORD: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->w[1] = pwt->w[0]; + pwd->w[0] = pws->w[0]; + pwd->w[3] = pwt->w[2]; + pwd->w[2] = pws->w[2]; +#else pwd->w[0] = pwt->w[1]; pwd->w[1] = pws->w[1]; pwd->w[2] = pwt->w[3]; pwd->w[3] = pws->w[3]; +#endif break; case DF_DOUBLE: pwd->d[0] = pwt->d[1]; @@ -1839,6 +1913,24 @@ void helper_msa_ilvl_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_BYTE: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->b[7] = pwt->b[15]; + pwd->b[6] = pws->b[15]; + pwd->b[5] = pwt->b[14]; + pwd->b[4] = pws->b[14]; + pwd->b[3] = pwt->b[13]; + pwd->b[2] = pws->b[13]; + pwd->b[1] = pwt->b[12]; + pwd->b[0] = pws->b[12]; + pwd->b[15] = pwt->b[11]; + pwd->b[14] = pws->b[11]; + pwd->b[13] = pwt->b[10]; + pwd->b[12] = pws->b[10]; + pwd->b[11] = pwt->b[9]; + pwd->b[10] = pws->b[9]; + pwd->b[9] = pwt->b[8]; + pwd->b[8] = pws->b[8]; +#else pwd->b[0] = pwt->b[8]; pwd->b[1] = pws->b[8]; pwd->b[2] = pwt->b[9]; @@ -1855,8 +1947,19 @@ void helper_msa_ilvl_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->b[13] = pws->b[14]; pwd->b[14] = pwt->b[15]; pwd->b[15] = pws->b[15]; +#endif break; case DF_HALF: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->h[3] = pwt->h[7]; + pwd->h[2] = pws->h[7]; + pwd->h[1] = pwt->h[6]; + pwd->h[0] = pws->h[6]; + pwd->h[7] = pwt->h[5]; + pwd->h[6] = pws->h[5]; + pwd->h[5] = pwt->h[4]; + pwd->h[4] = pws->h[4]; +#else pwd->h[0] = pwt->h[4]; pwd->h[1] = pws->h[4]; pwd->h[2] = pwt->h[5]; @@ -1865,12 +1968,20 @@ void helper_msa_ilvl_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->h[5] = pws->h[6]; pwd->h[6] = pwt->h[7]; pwd->h[7] = pws->h[7]; +#endif break; case DF_WORD: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->w[1] = pwt->w[3]; + pwd->w[0] = pws->w[3]; + pwd->w[3] = pwt->w[2]; + pwd->w[2] = pws->w[2]; +#else pwd->w[0] = pwt->w[2]; pwd->w[1] = pws->w[2]; pwd->w[2] = pwt->w[3]; pwd->w[3] = pws->w[3]; +#endif break; case DF_DOUBLE: pwd->d[0] = pwt->d[1]; @@ -1890,6 +2001,24 @@ void helper_msa_ilvr_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_BYTE: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->b[8] = pws->b[0]; + pwd->b[9] = pwt->b[0]; + pwd->b[10] = pws->b[1]; + pwd->b[11] = pwt->b[1]; + pwd->b[12] = pws->b[2]; + pwd->b[13] = pwt->b[2]; + pwd->b[14] = pws->b[3]; + pwd->b[15] = pwt->b[3]; + pwd->b[0] = pws->b[4]; + pwd->b[1] = pwt->b[4]; + pwd->b[2] = pws->b[5]; + pwd->b[3] = pwt->b[5]; + pwd->b[4] = pws->b[6]; + pwd->b[5] = pwt->b[6]; + pwd->b[6] = pws->b[7]; + pwd->b[7] = pwt->b[7]; +#else pwd->b[15] = pws->b[7]; pwd->b[14] = pwt->b[7]; pwd->b[13] = pws->b[6]; @@ -1906,8 +2035,19 @@ void helper_msa_ilvr_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->b[2] = pwt->b[1]; pwd->b[1] = pws->b[0]; pwd->b[0] = pwt->b[0]; +#endif break; case DF_HALF: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->h[4] = pws->h[0]; + pwd->h[5] = pwt->h[0]; + pwd->h[6] = pws->h[1]; + pwd->h[7] = pwt->h[1]; + pwd->h[0] = pws->h[2]; + pwd->h[1] = pwt->h[2]; + pwd->h[2] = pws->h[3]; + pwd->h[3] = pwt->h[3]; +#else pwd->h[7] = pws->h[3]; pwd->h[6] = pwt->h[3]; pwd->h[5] = pws->h[2]; @@ -1916,12 +2056,20 @@ void helper_msa_ilvr_df(CPUMIPSState *env, uint32_t df, uint32_t wd, pwd->h[2] = pwt->h[1]; pwd->h[1] = pws->h[0]; pwd->h[0] = pwt->h[0]; +#endif break; case DF_WORD: +#if defined(TARGET_WORDS_BIGENDIAN) + pwd->w[2] = pws->w[0]; + pwd->w[3] = pwt->w[0]; + pwd->w[0] = pws->w[1]; + pwd->w[1] = pwt->w[1]; +#else pwd->w[3] = pws->w[1]; pwd->w[2] = pwt->w[1]; pwd->w[1] = pws->w[0]; pwd->w[0] = pwt->w[0]; +#endif break; case DF_DOUBLE: pwd->d[1] = pws->d[0]; diff --git a/target/mips/translate.c b/target/mips/translate.c index a3cf976ab6..e3a0f08dea 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -2617,28 +2617,30 @@ static const char * const mxuregnames[] = { } while (0) /* General purpose registers moves. */ -static inline void gen_load_gpr (TCGv t, int reg) +static inline void gen_load_gpr(TCGv t, int reg) { - if (reg == 0) + if (reg == 0) { tcg_gen_movi_tl(t, 0); - else + } else { tcg_gen_mov_tl(t, cpu_gpr[reg]); + } } -static inline void gen_store_gpr (TCGv t, int reg) +static inline void gen_store_gpr(TCGv t, int reg) { - if (reg != 0) + if (reg != 0) { tcg_gen_mov_tl(cpu_gpr[reg], t); + } } /* Moves to/from shadow registers. */ -static inline void gen_load_srsgpr (int from, int to) +static inline void gen_load_srsgpr(int from, int to) { TCGv t0 = tcg_temp_new(); - if (from == 0) + if (from == 0) { tcg_gen_movi_tl(t0, 0); - else { + } else { TCGv_i32 t2 = tcg_temp_new_i32(); TCGv_ptr addr = tcg_temp_new_ptr(); @@ -2839,16 +2841,18 @@ static void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) } } -static inline int get_fp_bit (int cc) +static inline int get_fp_bit(int cc) { - if (cc) + if (cc) { return 24 + cc; - else + } else { return 23; + } } /* Addresses computation */ -static inline void gen_op_addr_add (DisasContext *ctx, TCGv ret, TCGv arg0, TCGv arg1) +static inline void gen_op_addr_add(DisasContext *ctx, TCGv ret, TCGv arg0, + TCGv arg1) { tcg_gen_add_tl(ret, arg0, arg1); @@ -2907,14 +2911,16 @@ static inline void gen_move_high32(TCGv ret, TCGv_i64 arg) static inline void check_cp0_enabled(DisasContext *ctx) { - if (unlikely(!(ctx->hflags & MIPS_HFLAG_CP0))) + if (unlikely(!(ctx->hflags & MIPS_HFLAG_CP0))) { generate_exception_err(ctx, EXCP_CpU, 0); + } } static inline void check_cp1_enabled(DisasContext *ctx) { - if (unlikely(!(ctx->hflags & MIPS_HFLAG_FPU))) + if (unlikely(!(ctx->hflags & MIPS_HFLAG_FPU))) { generate_exception_err(ctx, EXCP_CpU, 1); + } } /* Verify that the processor is running with COP1X instructions enabled. @@ -2923,8 +2929,9 @@ static inline void check_cp1_enabled(DisasContext *ctx) static inline void check_cop1x(DisasContext *ctx) { - if (unlikely(!(ctx->hflags & MIPS_HFLAG_COP1X))) + if (unlikely(!(ctx->hflags & MIPS_HFLAG_COP1X))) { generate_exception_end(ctx, EXCP_RI); + } } /* Verify that the processor is running with 64-bit floating-point @@ -2932,8 +2939,9 @@ static inline void check_cop1x(DisasContext *ctx) static inline void check_cp1_64bitmode(DisasContext *ctx) { - if (unlikely(~ctx->hflags & (MIPS_HFLAG_F64 | MIPS_HFLAG_COP1X))) + if (unlikely(~ctx->hflags & (MIPS_HFLAG_F64 | MIPS_HFLAG_COP1X))) { generate_exception_end(ctx, EXCP_RI); + } } /* @@ -2949,8 +2957,9 @@ static inline void check_cp1_64bitmode(DisasContext *ctx) */ static inline void check_cp1_registers(DisasContext *ctx, int regs) { - if (unlikely(!(ctx->hflags & MIPS_HFLAG_F64) && (regs & 1))) + if (unlikely(!(ctx->hflags & MIPS_HFLAG_F64) && (regs & 1))) { generate_exception_end(ctx, EXCP_RI); + } } /* Verify that the processor is running with DSP instructions enabled. @@ -3039,8 +3048,9 @@ static inline void check_ps(DisasContext *ctx) instructions are not enabled. */ static inline void check_mips_64(DisasContext *ctx) { - if (unlikely(!(ctx->hflags & MIPS_HFLAG_64))) + if (unlikely(!(ctx->hflags & MIPS_HFLAG_64))) { generate_exception_end(ctx, EXCP_RI); + } } #endif @@ -3125,13 +3135,12 @@ static inline void check_nms(DisasContext *ctx) */ static inline void check_nms_dl_il_sl_tl_l2c(DisasContext *ctx) { - if (unlikely(ctx->CP0_Config5 & (1 << CP0C5_NMS)) && - !(ctx->CP0_Config1 & (1 << CP0C1_DL)) && - !(ctx->CP0_Config1 & (1 << CP0C1_IL)) && - !(ctx->CP0_Config2 & (1 << CP0C2_SL)) && - !(ctx->CP0_Config2 & (1 << CP0C2_TL)) && - !(ctx->CP0_Config5 & (1 << CP0C5_L2C))) - { + if (unlikely((ctx->CP0_Config5 & (1 << CP0C5_NMS)) && + !(ctx->CP0_Config1 & (1 << CP0C1_DL)) && + !(ctx->CP0_Config1 & (1 << CP0C1_IL)) && + !(ctx->CP0_Config2 & (1 << CP0C2_SL)) && + !(ctx->CP0_Config2 & (1 << CP0C2_TL)) && + !(ctx->CP0_Config5 & (1 << CP0C5_L2C)))) { generate_exception_end(ctx, EXCP_RI); } } @@ -3179,23 +3188,56 @@ static inline void gen_cmp ## type ## _ ## fmt(DisasContext *ctx, int n, \ gen_ldcmp_fpr##bits (ctx, fp0, fs); \ gen_ldcmp_fpr##bits (ctx, fp1, ft); \ switch (n) { \ - case 0: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _f, fp0, fp1, cc); break;\ - case 1: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _un, fp0, fp1, cc); break;\ - case 2: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _eq, fp0, fp1, cc); break;\ - case 3: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ueq, fp0, fp1, cc); break;\ - case 4: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _olt, fp0, fp1, cc); break;\ - case 5: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ult, fp0, fp1, cc); break;\ - case 6: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ole, fp0, fp1, cc); break;\ - case 7: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ule, fp0, fp1, cc); break;\ - case 8: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _sf, fp0, fp1, cc); break;\ - case 9: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngle, fp0, fp1, cc); break;\ - case 10: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _seq, fp0, fp1, cc); break;\ - case 11: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngl, fp0, fp1, cc); break;\ - case 12: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _lt, fp0, fp1, cc); break;\ - case 13: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _nge, fp0, fp1, cc); break;\ - case 14: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _le, fp0, fp1, cc); break;\ - case 15: gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngt, fp0, fp1, cc); break;\ - default: abort(); \ + case 0: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _f, fp0, fp1, cc); \ + break; \ + case 1: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _un, fp0, fp1, cc); \ + break; \ + case 2: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _eq, fp0, fp1, cc); \ + break; \ + case 3: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ueq, fp0, fp1, cc); \ + break; \ + case 4: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _olt, fp0, fp1, cc); \ + break; \ + case 5: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ult, fp0, fp1, cc); \ + break; \ + case 6: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ole, fp0, fp1, cc); \ + break; \ + case 7: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ule, fp0, fp1, cc); \ + break; \ + case 8: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _sf, fp0, fp1, cc); \ + break; \ + case 9: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngle, fp0, fp1, cc); \ + break; \ + case 10: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _seq, fp0, fp1, cc); \ + break; \ + case 11: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngl, fp0, fp1, cc); \ + break; \ + case 12: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _lt, fp0, fp1, cc); \ + break; \ + case 13: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _nge, fp0, fp1, cc); \ + break; \ + case 14: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _le, fp0, fp1, cc); \ + break; \ + case 15: \ + gen_helper_0e2i(cmp ## type ## _ ## fmt ## _ngt, fp0, fp1, cc); \ + break; \ + default: \ + abort(); \ } \ tcg_temp_free_i##bits (fp0); \ tcg_temp_free_i##bits (fp1); \ @@ -3328,8 +3370,8 @@ OP_LD_ATOMIC(lld,ld64); #endif #undef OP_LD_ATOMIC -static void gen_base_offset_addr (DisasContext *ctx, TCGv addr, - int base, int offset) +static void gen_base_offset_addr(DisasContext *ctx, TCGv addr, + int base, int offset) { if (base == 0) { tcg_gen_movi_tl(addr, offset); @@ -3341,7 +3383,7 @@ static void gen_base_offset_addr (DisasContext *ctx, TCGv addr, } } -static target_ulong pc_relative_pc (DisasContext *ctx) +static target_ulong pc_relative_pc(DisasContext *ctx) { target_ulong pc = ctx->base.pc_next; @@ -3578,8 +3620,8 @@ static void gen_llwp(DisasContext *ctx, uint32_t base, int16_t offset, } /* Store */ -static void gen_st (DisasContext *ctx, uint32_t opc, int rt, - int base, int offset) +static void gen_st(DisasContext *ctx, uint32_t opc, int rt, + int base, int offset) { TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); @@ -3717,8 +3759,8 @@ static void gen_scwp(DisasContext *ctx, uint32_t base, int16_t offset, } /* Load and store */ -static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft, - TCGv t0) +static void gen_flt_ldst(DisasContext *ctx, uint32_t opc, int ft, + TCGv t0) { /* Don't do NOP if destination is zero: we must perform the actual memory access. */ @@ -3881,22 +3923,25 @@ static void gen_logic_imm(DisasContext *ctx, uint32_t opc, uimm = (uint16_t)imm; switch (opc) { case OPC_ANDI: - if (likely(rs != 0)) + if (likely(rs != 0)) { tcg_gen_andi_tl(cpu_gpr[rt], cpu_gpr[rs], uimm); - else + } else { tcg_gen_movi_tl(cpu_gpr[rt], 0); + } break; case OPC_ORI: - if (rs != 0) + if (rs != 0) { tcg_gen_ori_tl(cpu_gpr[rt], cpu_gpr[rs], uimm); - else + } else { tcg_gen_movi_tl(cpu_gpr[rt], uimm); + } break; case OPC_XORI: - if (likely(rs != 0)) + if (likely(rs != 0)) { tcg_gen_xori_tl(cpu_gpr[rt], cpu_gpr[rs], uimm); - else + } else { tcg_gen_movi_tl(cpu_gpr[rt], uimm); + } break; case OPC_LUI: if (rs != 0 && (ctx->insn_flags & ISA_MIPS32R6)) { @@ -5132,8 +5177,8 @@ static void gen_mul_txx9(DisasContext *ctx, uint32_t opc, tcg_temp_free(t1); } -static void gen_mul_vr54xx (DisasContext *ctx, uint32_t opc, - int rd, int rs, int rt) +static void gen_mul_vr54xx(DisasContext *ctx, uint32_t opc, + int rd, int rs, int rt) { TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); @@ -5196,8 +5241,8 @@ static void gen_mul_vr54xx (DisasContext *ctx, uint32_t opc, tcg_temp_free(t1); } -static void gen_cl (DisasContext *ctx, uint32_t opc, - int rd, int rs) +static void gen_cl(DisasContext *ctx, uint32_t opc, + int rd, int rs) { TCGv t0; @@ -6059,8 +6104,9 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, } out: - if (insn_bytes == 2) + if (insn_bytes == 2) { ctx->hflags |= MIPS_HFLAG_B16; + } tcg_temp_free(t0); tcg_temp_free(t1); } @@ -6188,8 +6234,8 @@ static void gen_compute_branch_nm(DisasContext *ctx, uint32_t opc, /* special3 bitfield operations */ -static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt, - int rs, int lsb, int msb) +static void gen_bitops(DisasContext *ctx, uint32_t opc, int rt, + int rs, int lsb, int msb) { TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); @@ -6259,7 +6305,7 @@ fail: tcg_temp_free(t1); } -static void gen_bshfl (DisasContext *ctx, uint32_t op2, int rt, int rd) +static void gen_bshfl(DisasContext *ctx, uint32_t op2, int rt, int rd) { TCGv t0; @@ -6502,7 +6548,7 @@ static inline void gen_mfhc0_load64(TCGv arg, target_ulong off, int shift) tcg_temp_free_i64(t0); } -static inline void gen_mfc0_load32 (TCGv arg, target_ulong off) +static inline void gen_mfc0_load32(TCGv arg, target_ulong off) { TCGv_i32 t0 = tcg_temp_new_i32(); @@ -6511,13 +6557,13 @@ static inline void gen_mfc0_load32 (TCGv arg, target_ulong off) tcg_temp_free_i32(t0); } -static inline void gen_mfc0_load64 (TCGv arg, target_ulong off) +static inline void gen_mfc0_load64(TCGv arg, target_ulong off) { tcg_gen_ld_tl(arg, cpu_env, off); tcg_gen_ext32s_tl(arg, arg); } -static inline void gen_mtc0_store32 (TCGv arg, target_ulong off) +static inline void gen_mtc0_store32(TCGv arg, target_ulong off) { TCGv_i32 t0 = tcg_temp_new_i32(); @@ -6707,8 +6753,9 @@ static void gen_mfc0(DisasContext *ctx, TCGv arg, int reg, int sel) { const char *register_name = "invalid"; - if (sel != 0) + if (sel != 0) { check_insn(ctx, ISA_MIPS32); + } switch (reg) { case CP0_REGISTER_00: @@ -7463,8 +7510,9 @@ static void gen_mtc0(DisasContext *ctx, TCGv arg, int reg, int sel) { const char *register_name = "invalid"; - if (sel != 0) + if (sel != 0) { check_insn(ctx, ISA_MIPS32); + } if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { gen_io_start(); @@ -8209,8 +8257,9 @@ static void gen_dmfc0(DisasContext *ctx, TCGv arg, int reg, int sel) { const char *register_name = "invalid"; - if (sel != 0) + if (sel != 0) { check_insn(ctx, ISA_MIPS64); + } switch (reg) { case CP0_REGISTER_00: @@ -8919,8 +8968,9 @@ static void gen_dmtc0(DisasContext *ctx, TCGv arg, int reg, int sel) { const char *register_name = "invalid"; - if (sel != 0) + if (sel != 0) { check_insn(ctx, ISA_MIPS64); + } if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { gen_io_start(); @@ -9657,12 +9707,12 @@ static void gen_mftr(CPUMIPSState *env, DisasContext *ctx, int rt, int rd, if ((env->CP0_VPEConf0 & (1 << CP0VPEC0_MVP)) == 0 && ((env->tcs[other_tc].CP0_TCBind & (0xf << CP0TCBd_CurVPE)) != - (env->active_tc.CP0_TCBind & (0xf << CP0TCBd_CurVPE)))) + (env->active_tc.CP0_TCBind & (0xf << CP0TCBd_CurVPE)))) { tcg_gen_movi_tl(t0, -1); - else if ((env->CP0_VPEControl & (0xff << CP0VPECo_TargTC)) > - (env->mvp->CP0_MVPConf0 & (0xff << CP0MVPC0_PTC))) + } else if ((env->CP0_VPEControl & (0xff << CP0VPECo_TargTC)) > + (env->mvp->CP0_MVPConf0 & (0xff << CP0MVPC0_PTC))) { tcg_gen_movi_tl(t0, -1); - else if (u == 0) { + } else if (u == 0) { switch (rt) { case 1: switch (sel) { @@ -9882,12 +9932,12 @@ static void gen_mttr(CPUMIPSState *env, DisasContext *ctx, int rd, int rt, gen_load_gpr(t0, rt); if ((env->CP0_VPEConf0 & (1 << CP0VPEC0_MVP)) == 0 && ((env->tcs[other_tc].CP0_TCBind & (0xf << CP0TCBd_CurVPE)) != - (env->active_tc.CP0_TCBind & (0xf << CP0TCBd_CurVPE)))) + (env->active_tc.CP0_TCBind & (0xf << CP0TCBd_CurVPE)))) { /* NOP */ ; - else if ((env->CP0_VPEControl & (0xff << CP0VPECo_TargTC)) > - (env->mvp->CP0_MVPConf0 & (0xff << CP0MVPC0_PTC))) + } else if ((env->CP0_VPEControl & (0xff << CP0VPECo_TargTC)) > + (env->mvp->CP0_MVPConf0 & (0xff << CP0MVPC0_PTC))) { /* NOP */ ; - else if (u == 0) { + } else if (u == 0) { switch (rd) { case 1: switch (sel) { @@ -10077,7 +10127,8 @@ die: generate_exception_end(ctx, EXCP_RI); } -static void gen_cp0 (CPUMIPSState *env, DisasContext *ctx, uint32_t opc, int rt, int rd) +static void gen_cp0(CPUMIPSState *env, DisasContext *ctx, uint32_t opc, + int rt, int rd) { const char *opn = "ldst"; @@ -10160,8 +10211,9 @@ static void gen_cp0 (CPUMIPSState *env, DisasContext *ctx, uint32_t opc, int rt, break; case OPC_TLBWI: opn = "tlbwi"; - if (!env->tlb->helper_tlbwi) + if (!env->tlb->helper_tlbwi) { goto die; + } gen_helper_tlbwi(cpu_env); break; case OPC_TLBINV: @@ -10184,20 +10236,23 @@ static void gen_cp0 (CPUMIPSState *env, DisasContext *ctx, uint32_t opc, int rt, break; case OPC_TLBWR: opn = "tlbwr"; - if (!env->tlb->helper_tlbwr) + if (!env->tlb->helper_tlbwr) { goto die; + } gen_helper_tlbwr(cpu_env); break; case OPC_TLBP: opn = "tlbp"; - if (!env->tlb->helper_tlbp) + if (!env->tlb->helper_tlbp) { goto die; + } gen_helper_tlbp(cpu_env); break; case OPC_TLBR: opn = "tlbr"; - if (!env->tlb->helper_tlbr) + if (!env->tlb->helper_tlbr) { goto die; + } gen_helper_tlbr(cpu_env); break; case OPC_ERET: /* OPC_ERETNC */ @@ -10271,8 +10326,9 @@ static void gen_compute_branch1(DisasContext *ctx, uint32_t op, goto out; } - if (cc != 0) + if (cc != 0) { check_insn(ctx, ISA_MIPS4 | ISA_MIPS32); + } btarget = ctx->base.pc_next + 4 + offset; @@ -10465,22 +10521,22 @@ enum fopcode { OPC_CVT_W_S = FOP(36, FMT_S), OPC_CVT_L_S = FOP(37, FMT_S), OPC_CVT_PS_S = FOP(38, FMT_S), - OPC_CMP_F_S = FOP (48, FMT_S), - OPC_CMP_UN_S = FOP (49, FMT_S), - OPC_CMP_EQ_S = FOP (50, FMT_S), - OPC_CMP_UEQ_S = FOP (51, FMT_S), - OPC_CMP_OLT_S = FOP (52, FMT_S), - OPC_CMP_ULT_S = FOP (53, FMT_S), - OPC_CMP_OLE_S = FOP (54, FMT_S), - OPC_CMP_ULE_S = FOP (55, FMT_S), - OPC_CMP_SF_S = FOP (56, FMT_S), - OPC_CMP_NGLE_S = FOP (57, FMT_S), - OPC_CMP_SEQ_S = FOP (58, FMT_S), - OPC_CMP_NGL_S = FOP (59, FMT_S), - OPC_CMP_LT_S = FOP (60, FMT_S), - OPC_CMP_NGE_S = FOP (61, FMT_S), - OPC_CMP_LE_S = FOP (62, FMT_S), - OPC_CMP_NGT_S = FOP (63, FMT_S), + OPC_CMP_F_S = FOP(48, FMT_S), + OPC_CMP_UN_S = FOP(49, FMT_S), + OPC_CMP_EQ_S = FOP(50, FMT_S), + OPC_CMP_UEQ_S = FOP(51, FMT_S), + OPC_CMP_OLT_S = FOP(52, FMT_S), + OPC_CMP_ULT_S = FOP(53, FMT_S), + OPC_CMP_OLE_S = FOP(54, FMT_S), + OPC_CMP_ULE_S = FOP(55, FMT_S), + OPC_CMP_SF_S = FOP(56, FMT_S), + OPC_CMP_NGLE_S = FOP(57, FMT_S), + OPC_CMP_SEQ_S = FOP(58, FMT_S), + OPC_CMP_NGL_S = FOP(59, FMT_S), + OPC_CMP_LT_S = FOP(60, FMT_S), + OPC_CMP_NGE_S = FOP(61, FMT_S), + OPC_CMP_LE_S = FOP(62, FMT_S), + OPC_CMP_NGT_S = FOP(63, FMT_S), OPC_ADD_D = FOP(0, FMT_D), OPC_SUB_D = FOP(1, FMT_D), @@ -10521,22 +10577,22 @@ enum fopcode { OPC_CVT_S_D = FOP(32, FMT_D), OPC_CVT_W_D = FOP(36, FMT_D), OPC_CVT_L_D = FOP(37, FMT_D), - OPC_CMP_F_D = FOP (48, FMT_D), - OPC_CMP_UN_D = FOP (49, FMT_D), - OPC_CMP_EQ_D = FOP (50, FMT_D), - OPC_CMP_UEQ_D = FOP (51, FMT_D), - OPC_CMP_OLT_D = FOP (52, FMT_D), - OPC_CMP_ULT_D = FOP (53, FMT_D), - OPC_CMP_OLE_D = FOP (54, FMT_D), - OPC_CMP_ULE_D = FOP (55, FMT_D), - OPC_CMP_SF_D = FOP (56, FMT_D), - OPC_CMP_NGLE_D = FOP (57, FMT_D), - OPC_CMP_SEQ_D = FOP (58, FMT_D), - OPC_CMP_NGL_D = FOP (59, FMT_D), - OPC_CMP_LT_D = FOP (60, FMT_D), - OPC_CMP_NGE_D = FOP (61, FMT_D), - OPC_CMP_LE_D = FOP (62, FMT_D), - OPC_CMP_NGT_D = FOP (63, FMT_D), + OPC_CMP_F_D = FOP(48, FMT_D), + OPC_CMP_UN_D = FOP(49, FMT_D), + OPC_CMP_EQ_D = FOP(50, FMT_D), + OPC_CMP_UEQ_D = FOP(51, FMT_D), + OPC_CMP_OLT_D = FOP(52, FMT_D), + OPC_CMP_ULT_D = FOP(53, FMT_D), + OPC_CMP_OLE_D = FOP(54, FMT_D), + OPC_CMP_ULE_D = FOP(55, FMT_D), + OPC_CMP_SF_D = FOP(56, FMT_D), + OPC_CMP_NGLE_D = FOP(57, FMT_D), + OPC_CMP_SEQ_D = FOP(58, FMT_D), + OPC_CMP_NGL_D = FOP(59, FMT_D), + OPC_CMP_LT_D = FOP(60, FMT_D), + OPC_CMP_NGE_D = FOP(61, FMT_D), + OPC_CMP_LE_D = FOP(62, FMT_D), + OPC_CMP_NGT_D = FOP(63, FMT_D), OPC_CVT_S_W = FOP(32, FMT_W), OPC_CVT_D_W = FOP(33, FMT_W), @@ -10568,22 +10624,22 @@ enum fopcode { OPC_PLU_PS = FOP(45, FMT_PS), OPC_PUL_PS = FOP(46, FMT_PS), OPC_PUU_PS = FOP(47, FMT_PS), - OPC_CMP_F_PS = FOP (48, FMT_PS), - OPC_CMP_UN_PS = FOP (49, FMT_PS), - OPC_CMP_EQ_PS = FOP (50, FMT_PS), - OPC_CMP_UEQ_PS = FOP (51, FMT_PS), - OPC_CMP_OLT_PS = FOP (52, FMT_PS), - OPC_CMP_ULT_PS = FOP (53, FMT_PS), - OPC_CMP_OLE_PS = FOP (54, FMT_PS), - OPC_CMP_ULE_PS = FOP (55, FMT_PS), - OPC_CMP_SF_PS = FOP (56, FMT_PS), - OPC_CMP_NGLE_PS = FOP (57, FMT_PS), - OPC_CMP_SEQ_PS = FOP (58, FMT_PS), - OPC_CMP_NGL_PS = FOP (59, FMT_PS), - OPC_CMP_LT_PS = FOP (60, FMT_PS), - OPC_CMP_NGE_PS = FOP (61, FMT_PS), - OPC_CMP_LE_PS = FOP (62, FMT_PS), - OPC_CMP_NGT_PS = FOP (63, FMT_PS), + OPC_CMP_F_PS = FOP(48, FMT_PS), + OPC_CMP_UN_PS = FOP(49, FMT_PS), + OPC_CMP_EQ_PS = FOP(50, FMT_PS), + OPC_CMP_UEQ_PS = FOP(51, FMT_PS), + OPC_CMP_OLT_PS = FOP(52, FMT_PS), + OPC_CMP_ULT_PS = FOP(53, FMT_PS), + OPC_CMP_OLE_PS = FOP(54, FMT_PS), + OPC_CMP_ULE_PS = FOP(55, FMT_PS), + OPC_CMP_SF_PS = FOP(56, FMT_PS), + OPC_CMP_NGLE_PS = FOP(57, FMT_PS), + OPC_CMP_SEQ_PS = FOP(58, FMT_PS), + OPC_CMP_NGL_PS = FOP(59, FMT_PS), + OPC_CMP_LT_PS = FOP(60, FMT_PS), + OPC_CMP_NGE_PS = FOP(61, FMT_PS), + OPC_CMP_LE_PS = FOP(62, FMT_PS), + OPC_CMP_NGT_PS = FOP(63, FMT_PS), }; enum r6_f_cmp_op { @@ -10633,7 +10689,8 @@ enum r6_f_cmp_op { R6_OPC_CMP_SUNE_D = FOP(26, FMT_L), R6_OPC_CMP_SNE_D = FOP(27, FMT_L), }; -static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) + +static void gen_cp1(DisasContext *ctx, uint32_t opc, int rt, int fs) { TCGv t0 = tcg_temp_new(); @@ -10714,7 +10771,7 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) tcg_temp_free(t0); } -static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf) +static void gen_movci(DisasContext *ctx, int rd, int rs, int cc, int tf) { TCGLabel *l1; TCGCond cond; @@ -10725,10 +10782,11 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf) return; } - if (tf) + if (tf) { cond = TCG_COND_EQ; - else + } else { cond = TCG_COND_NE; + } l1 = gen_new_label(); t0 = tcg_temp_new_i32(); @@ -10750,10 +10808,11 @@ static inline void gen_movcf_s(DisasContext *ctx, int fs, int fd, int cc, TCGv_i32 t0 = tcg_temp_new_i32(); TCGLabel *l1 = gen_new_label(); - if (tf) + if (tf) { cond = TCG_COND_EQ; - else + } else { cond = TCG_COND_NE; + } tcg_gen_andi_i32(t0, fpu_fcr31, 1 << get_fp_bit(cc)); tcg_gen_brcondi_i32(cond, t0, 0, l1); @@ -10763,17 +10822,19 @@ static inline void gen_movcf_s(DisasContext *ctx, int fs, int fd, int cc, tcg_temp_free_i32(t0); } -static inline void gen_movcf_d (DisasContext *ctx, int fs, int fd, int cc, int tf) +static inline void gen_movcf_d(DisasContext *ctx, int fs, int fd, int cc, + int tf) { int cond; TCGv_i32 t0 = tcg_temp_new_i32(); TCGv_i64 fp0; TCGLabel *l1 = gen_new_label(); - if (tf) + if (tf) { cond = TCG_COND_EQ; - else + } else { cond = TCG_COND_NE; + } tcg_gen_andi_i32(t0, fpu_fcr31, 1 << get_fp_bit(cc)); tcg_gen_brcondi_i32(cond, t0, 0, l1); @@ -10793,10 +10854,11 @@ static inline void gen_movcf_ps(DisasContext *ctx, int fs, int fd, TCGLabel *l1 = gen_new_label(); TCGLabel *l2 = gen_new_label(); - if (tf) + if (tf) { cond = TCG_COND_EQ; - else + } else { cond = TCG_COND_NE; + } tcg_gen_andi_i32(t0, fpu_fcr31, 1 << get_fp_bit(cc)); tcg_gen_brcondi_i32(cond, t0, 0, l1); @@ -10886,8 +10948,8 @@ static void gen_sel_d(DisasContext *ctx, enum fopcode op1, int fd, int ft, tcg_temp_free_i64(t1); } -static void gen_farith (DisasContext *ctx, enum fopcode op1, - int ft, int fs, int fd, int cc) +static void gen_farith(DisasContext *ctx, enum fopcode op1, + int ft, int fs, int fd, int cc) { uint32_t func = ctx->opcode & 0x3f; switch (op1) { @@ -12092,8 +12154,9 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1, TCGLabel *l1 = gen_new_label(); TCGv_i64 fp0; - if (ft != 0) + if (ft != 0) { tcg_gen_brcondi_tl(TCG_COND_NE, cpu_gpr[ft], 0, l1); + } fp0 = tcg_temp_new_i64(); gen_load_fpr64(ctx, fp0, fs); gen_store_fpr64(ctx, fp0, fd); @@ -12314,8 +12377,8 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1, } /* Coprocessor 3 (FPU) */ -static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, - int fd, int fs, int base, int index) +static void gen_flt3_ldst(DisasContext *ctx, uint32_t opc, + int fd, int fs, int base, int index) { TCGv t0 = tcg_temp_new(); @@ -12394,8 +12457,8 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, tcg_temp_free(t0); } -static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, - int fd, int fr, int fs, int ft) +static void gen_flt3_arith(DisasContext *ctx, uint32_t opc, + int fd, int fr, int fs, int ft) { switch (opc) { case OPC_ALNV_PS: @@ -13157,17 +13220,17 @@ enum { RR_RY_CNVT_SEW = 0x6, }; -static int xlat (int r) +static int xlat(int r) { static int map[] = { 16, 17, 2, 3, 4, 5, 6, 7 }; return map[r]; } -static void gen_mips16_save (DisasContext *ctx, - int xsregs, int aregs, - int do_ra, int do_s0, int do_s1, - int framesize) +static void gen_mips16_save(DisasContext *ctx, + int xsregs, int aregs, + int do_ra, int do_s0, int do_s1, + int framesize) { TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); @@ -13322,10 +13385,10 @@ static void gen_mips16_save (DisasContext *ctx, tcg_temp_free(t2); } -static void gen_mips16_restore (DisasContext *ctx, - int xsregs, int aregs, - int do_ra, int do_s0, int do_s1, - int framesize) +static void gen_mips16_restore(DisasContext *ctx, + int xsregs, int aregs, + int do_ra, int do_s0, int do_s1, + int framesize) { int astatic; TCGv t0 = tcg_temp_new(); @@ -13428,8 +13491,8 @@ static void gen_mips16_restore (DisasContext *ctx, tcg_temp_free(t2); } -static void gen_addiupc (DisasContext *ctx, int rx, int imm, - int is_64_bit, int extended) +static void gen_addiupc(DisasContext *ctx, int rx, int imm, + int is_64_bit, int extended) { TCGv t0; @@ -13459,9 +13522,9 @@ static void gen_cache_operation(DisasContext *ctx, uint32_t op, int base, } #if defined(TARGET_MIPS64) -static void decode_i64_mips16 (DisasContext *ctx, - int ry, int funct, int16_t offset, - int extended) +static void decode_i64_mips16(DisasContext *ctx, + int ry, int funct, int16_t offset, + int extended) { switch (funct) { case I64_LDSP: @@ -13520,7 +13583,7 @@ static void decode_i64_mips16 (DisasContext *ctx, } #endif -static int decode_extended_mips16_opc (CPUMIPSState *env, DisasContext *ctx) +static int decode_extended_mips16_opc(CPUMIPSState *env, DisasContext *ctx) { int extend = cpu_lduw_code(env, ctx->base.pc_next + 2); int op, rx, ry, funct, sa; @@ -13734,7 +13797,7 @@ static inline void gen_helper_do_semihosting(void *env) } #endif -static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx) +static int decode_mips16_opc(CPUMIPSState *env, DisasContext *ctx) { int rx, ry; int sa; @@ -13957,7 +14020,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx) case M16_OPC_LWPC: gen_ld(ctx, OPC_LWPC, rx, 0, ((uint8_t)ctx->opcode) << 2); break; -#if defined (TARGET_MIPS64) +#if defined(TARGET_MIPS64) case M16_OPC_LWU: check_insn(ctx, ISA_MIPS3); check_mips_64(ctx); @@ -14061,7 +14124,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx) case RR_SRAV: gen_shift(ctx, OPC_SRAV, ry, rx, ry); break; -#if defined (TARGET_MIPS64) +#if defined(TARGET_MIPS64) case RR_DSRL: check_insn(ctx, ISA_MIPS3); check_mips_64(ctx); @@ -14124,7 +14187,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx) case RR_MFLO: gen_HILO(ctx, OPC_MFLO, 0, rx); break; -#if defined (TARGET_MIPS64) +#if defined(TARGET_MIPS64) case RR_DSRA: check_insn(ctx, ISA_MIPS3); check_mips_64(ctx); @@ -14158,7 +14221,7 @@ static int decode_mips16_opc (CPUMIPSState *env, DisasContext *ctx) case RR_DIVU: gen_muldiv(ctx, OPC_DIVU, 0, rx, ry); break; -#if defined (TARGET_MIPS64) +#if defined(TARGET_MIPS64) case RR_DMULT: check_insn(ctx, ISA_MIPS3); check_mips_64(ctx); @@ -14802,7 +14865,7 @@ enum { ADDIUR1SP = 0x1 }; -static int mmreg (int r) +static int mmreg(int r) { static const int map[] = { 16, 17, 2, 3, 4, 5, 6, 7 }; @@ -14810,7 +14873,7 @@ static int mmreg (int r) } /* Used for 16-bit store instructions. */ -static int mmreg2 (int r) +static int mmreg2(int r) { static const int map[] = { 0, 17, 2, 3, 4, 5, 6, 7 }; @@ -14885,8 +14948,8 @@ static void gen_andi16(DisasContext *ctx) gen_logic_imm(ctx, OPC_ANDI, rd, rs, decoded_imm[encoded]); } -static void gen_ldst_multiple (DisasContext *ctx, uint32_t opc, int reglist, - int base, int16_t offset) +static void gen_ldst_multiple(DisasContext *ctx, uint32_t opc, int reglist, + int base, int16_t offset) { TCGv t0, t1; TCGv_i32 t2; @@ -15159,7 +15222,7 @@ static void gen_pool16c_r6_insn(DisasContext *ctx) } } -static void gen_ldxs (DisasContext *ctx, int base, int index, int rd) +static void gen_ldxs(DisasContext *ctx, int base, int index, int rd) { TCGv t0 = tcg_temp_new(); TCGv t1 = tcg_temp_new(); @@ -15179,8 +15242,8 @@ static void gen_ldxs (DisasContext *ctx, int base, int index, int rd) tcg_temp_free(t1); } -static void gen_ldst_pair (DisasContext *ctx, uint32_t opc, int rd, - int base, int16_t offset) +static void gen_ldst_pair(DisasContext *ctx, uint32_t opc, int rd, + int base, int16_t offset) { TCGv t0, t1; @@ -15205,14 +15268,14 @@ static void gen_ldst_pair (DisasContext *ctx, uint32_t opc, int rd, tcg_gen_movi_tl(t1, 4); gen_op_addr_add(ctx, t0, t0, t1); tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TESL); - gen_store_gpr(t1, rd+1); + gen_store_gpr(t1, rd + 1); break; case SWP: gen_load_gpr(t1, rd); tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUL); tcg_gen_movi_tl(t1, 4); gen_op_addr_add(ctx, t0, t0, t1); - gen_load_gpr(t1, rd+1); + gen_load_gpr(t1, rd + 1); tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEUL); break; #ifdef TARGET_MIPS64 @@ -15226,14 +15289,14 @@ static void gen_ldst_pair (DisasContext *ctx, uint32_t opc, int rd, tcg_gen_movi_tl(t1, 8); gen_op_addr_add(ctx, t0, t0, t1); tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_TEQ); - gen_store_gpr(t1, rd+1); + gen_store_gpr(t1, rd + 1); break; case SDP: gen_load_gpr(t1, rd); tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ); tcg_gen_movi_tl(t1, 8); gen_op_addr_add(ctx, t0, t0, t1); - gen_load_gpr(t1, rd+1); + gen_load_gpr(t1, rd + 1); tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_TEQ); break; #endif @@ -15270,7 +15333,7 @@ static void gen_sync(int stype) tcg_gen_mb(tcg_mo); } -static void gen_pool32axf (CPUMIPSState *env, DisasContext *ctx, int rt, int rs) +static void gen_pool32axf(CPUMIPSState *env, DisasContext *ctx, int rt, int rs) { int extension = (ctx->opcode >> 6) & 0x3f; int minor = (ctx->opcode >> 12) & 0xf; @@ -17234,7 +17297,7 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx) } } -static int decode_micromips_opc (CPUMIPSState *env, DisasContext *ctx) +static int decode_micromips_opc(CPUMIPSState *env, DisasContext *ctx) { uint32_t op; @@ -27881,11 +27944,11 @@ static void gen_check_zero_element(TCGv tresult, uint8_t df, uint8_t wt) eval_big = 0x8000000000000000ULL; break; } - tcg_gen_subi_i64(t0, msa_wr_d[wt<<1], eval_zero_or_big); - tcg_gen_andc_i64(t0, t0, msa_wr_d[wt<<1]); + tcg_gen_subi_i64(t0, msa_wr_d[wt << 1], eval_zero_or_big); + tcg_gen_andc_i64(t0, t0, msa_wr_d[wt << 1]); tcg_gen_andi_i64(t0, t0, eval_big); - tcg_gen_subi_i64(t1, msa_wr_d[(wt<<1)+1], eval_zero_or_big); - tcg_gen_andc_i64(t1, t1, msa_wr_d[(wt<<1)+1]); + tcg_gen_subi_i64(t1, msa_wr_d[(wt << 1) + 1], eval_zero_or_big); + tcg_gen_andc_i64(t1, t1, msa_wr_d[(wt << 1) + 1]); tcg_gen_andi_i64(t1, t1, eval_big); tcg_gen_or_i64(t0, t0, t1); /* if all bits are zero then all elements are not zero */ @@ -27913,7 +27976,7 @@ static void gen_msa_branch(CPUMIPSState *env, DisasContext *ctx, uint32_t op1) case OPC_BNZ_V: { TCGv_i64 t0 = tcg_temp_new_i64(); - tcg_gen_or_i64(t0, msa_wr_d[wt<<1], msa_wr_d[(wt<<1)+1]); + tcg_gen_or_i64(t0, msa_wr_d[wt << 1], msa_wr_d[(wt << 1) + 1]); tcg_gen_setcondi_i64((op1 == OPC_BZ_V) ? TCG_COND_EQ : TCG_COND_NE, t0, t0, 0); tcg_gen_trunc_i64_tl(bcond, t0); @@ -29987,12 +30050,14 @@ void mips_cpu_dump_state(CPUState *cs, FILE *f, int flags) env->active_tc.PC, env->active_tc.HI[0], env->active_tc.LO[0], env->hflags, env->btarget, env->bcond); for (i = 0; i < 32; i++) { - if ((i & 3) == 0) + if ((i & 3) == 0) { qemu_fprintf(f, "GPR%02d:", i); + } qemu_fprintf(f, " %s " TARGET_FMT_lx, regnames[i], env->active_tc.gpr[i]); - if ((i & 3) == 3) + if ((i & 3) == 3) { qemu_fprintf(f, "\n"); + } } qemu_fprintf(f, "CP0 Status 0x%08x Cause 0x%08x EPC 0x" TARGET_FMT_lx "\n", diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index d4107dd70d..4b4989c0af 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -521,6 +521,11 @@ int kvm_arch_init_vcpu(CPUState *cs) return ret; } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + return 0; +} + static void kvm_sw_tlb_put(PowerPCCPU *cpu) { CPUPPCState *env = &cpu->env; diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index bcec9795ec..0267c6c2f6 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -368,6 +368,16 @@ int kvm_arch_init_vcpu(CPUState *cs) return 0; } +int kvm_arch_destroy_vcpu(CPUState *cs) +{ + S390CPU *cpu = S390_CPU(cs); + + g_free(cpu->irqstate); + cpu->irqstate = NULL; + + return 0; +} + void kvm_s390_reset_vcpu(S390CPU *cpu) { CPUState *cs = CPU(cpu); diff --git a/tests/tcg/mips/include/test_utils_128.h b/tests/tcg/mips/include/test_utils_128.h index a828416d4f..2fea6102d1 100644 --- a/tests/tcg/mips/include/test_utils_128.h +++ b/tests/tcg/mips/include/test_utils_128.h @@ -30,11 +30,13 @@ #define PRINT_RESULTS 0 -static inline int32_t check_results(const char *instruction_name, - const uint32_t test_count, - const double elapsed_time, - const uint64_t *b128_result, - const uint64_t *b128_expect) +static inline int32_t check_results_128(const char *isa_ase_name, + const char *group_name, + const char *instruction_name, + const uint32_t test_count, + const double elapsed_time, + const uint64_t *b128_result, + const uint64_t *b128_expect) { #if PRINT_RESULTS uint32_t ii; @@ -56,7 +58,8 @@ static inline int32_t check_results(const char *instruction_name, uint32_t pass_count = 0; uint32_t fail_count = 0; - printf("%s: ", instruction_name); + printf("| %-10s \t| %-20s\t| %-16s \t|", + isa_ase_name, group_name, instruction_name); for (i = 0; i < test_count; i++) { if ((b128_result[2 * i] == b128_expect[2 * i]) && (b128_result[2 * i + 1] == b128_expect[2 * i + 1])) { @@ -66,7 +69,7 @@ static inline int32_t check_results(const char *instruction_name, } } - printf("\tPASS: %3d \tFAIL: %3d \telapsed time: %5.2f ms\n", + printf(" PASS: %3d \t| FAIL: %3d \t| elapsed time: %5.2f ms \t|\n", pass_count, fail_count, elapsed_time); if (fail_count > 0) { diff --git a/tests/tcg/mips/include/test_utils_64.h b/tests/tcg/mips/include/test_utils_64.h index ee3828472c..c9609d8281 100644 --- a/tests/tcg/mips/include/test_utils_64.h +++ b/tests/tcg/mips/include/test_utils_64.h @@ -30,7 +30,9 @@ #define PRINT_RESULTS 0 -static inline int32_t check_results_64(const char *instruction_name, +static inline int32_t check_results_64(const char *isa_ase_name, + const char *group_name, + const char *instruction_name, const uint32_t test_count, const double elapsed_time, const uint64_t *b64_result, @@ -55,7 +57,8 @@ static inline int32_t check_results_64(const char *instruction_name, uint32_t pass_count = 0; uint32_t fail_count = 0; - printf("%s: ", instruction_name); + printf("| %-10s \t| %-20s\t| %-16s \t|", + isa_ase_name, group_name, instruction_name); for (i = 0; i < test_count; i++) { if (b64_result[i] == b64_expect[i]) { pass_count++; @@ -64,7 +67,7 @@ static inline int32_t check_results_64(const char *instruction_name, } } - printf("PASS: %3d FAIL: %3d elapsed time: %5.2f ms\n", + printf(" PASS: %3d \t| FAIL: %3d \t| elapsed time: %5.2f ms \t|\n", pass_count, fail_count, elapsed_time); if (fail_count > 0) { diff --git a/tests/tcg/mips/include/wrappers_msa.h b/tests/tcg/mips/include/wrappers_msa.h index 5d28cb531a..9570aa8998 100644 --- a/tests/tcg/mips/include/wrappers_msa.h +++ b/tests/tcg/mips/include/wrappers_msa.h @@ -555,19 +555,43 @@ DO_MSA__WD__WS_WT(XOR_V, xor.v) */ DO_MSA__WD__WS_WT(PCKEV_B, pckev.b) +DO_MSA__WD__WD_WT(PCKEV_B__DDT, pckev.b) +DO_MSA__WD__WS_WD(PCKEV_B__DSD, pckev.b) DO_MSA__WD__WS_WT(PCKEV_H, pckev.h) +DO_MSA__WD__WD_WT(PCKEV_H__DDT, pckev.h) +DO_MSA__WD__WS_WD(PCKEV_H__DSD, pckev.h) DO_MSA__WD__WS_WT(PCKEV_W, pckev.w) +DO_MSA__WD__WD_WT(PCKEV_W__DDT, pckev.w) +DO_MSA__WD__WS_WD(PCKEV_W__DSD, pckev.w) DO_MSA__WD__WS_WT(PCKEV_D, pckev.d) +DO_MSA__WD__WD_WT(PCKEV_D__DDT, pckev.d) +DO_MSA__WD__WS_WD(PCKEV_D__DSD, pckev.d) DO_MSA__WD__WS_WT(PCKOD_B, pckod.b) +DO_MSA__WD__WD_WT(PCKOD_B__DDT, pckod.b) +DO_MSA__WD__WS_WD(PCKOD_B__DSD, pckod.b) DO_MSA__WD__WS_WT(PCKOD_H, pckod.h) +DO_MSA__WD__WD_WT(PCKOD_H__DDT, pckod.h) +DO_MSA__WD__WS_WD(PCKOD_H__DSD, pckod.h) DO_MSA__WD__WS_WT(PCKOD_W, pckod.w) +DO_MSA__WD__WD_WT(PCKOD_W__DDT, pckod.w) +DO_MSA__WD__WS_WD(PCKOD_W__DSD, pckod.w) DO_MSA__WD__WS_WT(PCKOD_D, pckod.d) +DO_MSA__WD__WD_WT(PCKOD_D__DDT, pckod.d) +DO_MSA__WD__WS_WD(PCKOD_D__DSD, pckod.d) DO_MSA__WD__WS_WT(VSHF_B, vshf.b) +DO_MSA__WD__WD_WT(VSHF_B__DDT, vshf.b) +DO_MSA__WD__WS_WD(VSHF_B__DSD, vshf.b) DO_MSA__WD__WS_WT(VSHF_H, vshf.h) +DO_MSA__WD__WD_WT(VSHF_H__DDT, vshf.h) +DO_MSA__WD__WS_WD(VSHF_H__DSD, vshf.h) DO_MSA__WD__WS_WT(VSHF_W, vshf.w) +DO_MSA__WD__WD_WT(VSHF_W__DDT, vshf.w) +DO_MSA__WD__WS_WD(VSHF_W__DSD, vshf.w) DO_MSA__WD__WS_WT(VSHF_D, vshf.d) +DO_MSA__WD__WD_WT(VSHF_D__DDT, vshf.d) +DO_MSA__WD__WS_WD(VSHF_D__DSD, vshf.d) /* diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c index 287054e716..6ceb5aab20 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLOC.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLOC.B"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c index 171abdf77c..897e90fbbc 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLOC.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLOC.D"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c index f260eba7f0..85cf3e6f70 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLOC.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLOC.H"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c index cb1981cafc..7ed97be2b4 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLOC.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLOC.W"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c index 96d05d59a1..2103d5fbfe 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLZC.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLZC.B"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c index c709d5e852..b1ca3d44aa 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLZC.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLZC.D"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c index c47e8bfe32..6531c67a86 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLZC.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLZC.H"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c index a8a471ba10..71db53c9fe 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NLZC.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "NLZC.W"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c index 067a11b48d..184f7f4a49 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "PCNT.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "PCNT.B"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c index c60635df70..3cc0d851b2 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "PCNT.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "PCNT.D"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c index 8fba20a621..f1052b3c26 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "PCNT.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "PCNT.H"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c index 24c44aefa1..625ef29406 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "PCNT.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Count"; + char *instruction_name = "PCNT.W"; int32_t ret; uint32_t i; struct timeval start, end; @@ -139,8 +141,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c index e27d3b5f13..56fdee3f31 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BCLR.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BCLR.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c index 3b8c38494b..0accccf093 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BCLR.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BCLR.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c index d1db60fb02..474e5297b8 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BCLR.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BCLR.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c index 54087b7c6e..818b12ff0a 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BCLR.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BCLR.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c index 733bc24867..78ba32f360 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BNEG.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BNEG.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c index fc092215d5..44cd608688 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BNEG.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BNEG.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c index d8347a1884..5d17ceeba3 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BNEG.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BNEG.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c index 36ef43672f..90d21f453d 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BNEG.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BNEG.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c index f6907cb3d3..8aabf4bb88 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BSET.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BSET.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c index ecd833bee0..e3f9a7e4ca 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BSET.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BSET.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c index de63f26881..cf9f608180 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BSET.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BSET.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c index b973e67065..77478116f2 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "BSET.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Bit Set"; + char *instruction_name = "BSET.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c index 39a89ac099..cce7e9e8ac 100644 --- a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MUL_Q.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Fixed Multiply"; + char *instruction_name = "MUL_Q.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c index 07f2daecac..81d2635d7d 100644 --- a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MUL_Q.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Fixed Multiply"; + char *instruction_name = "MUL_Q.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c index e35af2fb7e..d5b00f1eb0 100644 --- a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULR_Q.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Fixed Multiply"; + char *instruction_name = "MULR_Q.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c index 3cedf672af..78c9e22394 100644 --- a/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULR_Q.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Fixed Multiply"; + char *instruction_name = "MULR_Q.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c index 1807cabdd5..d9b49cea8c 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMAX_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMAX_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c index b999b1fdb5..f64276f2f1 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMAX_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMAX_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c index b5ce6c7543..ba548e4882 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMAX.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMAX.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c index 5fafd3080f..f9aa24d62b 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMAX.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMAX.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c index c0b4001eb1..555aa133ae 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMIN_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMIN_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c index d174fcd669..9a81f1c6c5 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMIN_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMIN_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c index 62c149f83a..97123c8c0b 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMIN.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMIN.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c index c5815a66ab..1e91136441 100644 --- a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "FMIN.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Float Max Min"; + char *instruction_name = "FMIN.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c index e96e4fdf72..c0a07b5552 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADD_A.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADD_A.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c index ec025b6210..0771cdbdfe 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADD_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADD_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c index d04b3a5abe..7956960d0f 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADD_A.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADD_A.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c index 7ae90a3daf..590f440406 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADD_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADD_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c index 05712a1f05..42dd260726 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_A.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_A.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c index c222a9529f..3e4e6f7f99 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c index 0348f8ca47..2901a8174b 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_A.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_A.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c index 9ad9c569f8..9e483e0754 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c index a7f4de9260..955815bf45 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c index d1048fcdd5..0795f7e2c5 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c index 6263616a63..793c5afb8c 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c index 80b69f70cc..1c72c84669 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c index d61623fec5..f20340799e 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c index 7b60457f1d..30249edca0 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c index c8b226228c..1bd8aa9d20 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c index 7880b03383..a91c69f624 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDS_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDS_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c index dbfcd3800a..2f11c76aa3 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDV.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDV.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c index 27b6d65686..4ed0b97876 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDV.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDV.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c index f7045f6151..ca6ddd4b54 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDV.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDV.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c index 111e7c89e8..dff0f70a07 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ADDV.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "ADDV.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c index e6dffbf21f..c50a9dde87 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c index 211123aa9d..586ef923cc 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c index cdab49d7dc..3589c33940 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c index 38c43cedf7..35b2021347 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c index 41863f6cf8..3b38f9bb33 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c index c30c2663fc..fd420cb8de 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HADD_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Add"; + char *instruction_name = "HADD_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c index bb73fca1a3..14ee4ab4db 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c index b8c5ab4dc1..ae7b3c8b89 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c index 24aed155f6..d0d327e80f 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c index c0082d1cc4..77010209fb 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c index 8c857c594e..c9e834e74d 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c index fd2a4b9d49..5462ffac0f 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c index 6ab8f47f40..10d57e5741 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c index be614bb238..53106dee74 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVE_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVE_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c index bccb6ac892..465f54fc13 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c index 941d889790..391cb85ff0 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c index b977aaceb4..352b57d786 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c index c41a9b0479..cfba37b0ae 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c index ed9aa28fa0..91f227b830 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c index 04fcea4d2a..fde57a2a5c 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c index 4305010389..b9ec39a3de 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c index 47cdc5c08f..dc3c2e432e 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "AVER_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Average"; + char *instruction_name = "AVER_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c index 3ffb27c237..c9a9ee227d 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CEQ.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CEQ.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c index dc60868c27..542c460f2f 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CEQ.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CEQ.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c index a3073d784b..3ebe59550c 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CEQ.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CEQ.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c index 9e81665af7..003acf1544 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CEQ.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CEQ.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c index 4235d59da7..ff20f0ea0e 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c index 796f89abb7..3dc18bd661 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c index 0b63274022..00c48d657b 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c index 8fcee89221..16f84a13e7 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c index dc50ed3cd8..24574dc30d 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c index f6635f958c..e3f571545d 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c index 0d09304fcb..8938d31c59 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c index 4671eeee7f..078a0c1815 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLE_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLE_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c index 18d5706282..02c3dfa09e 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c index 15a31660d2..40637e2761 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c index 89fcc2cfe6..ee3cd628fc 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c index c8481dfc7a..bde4d95350 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c index ee2b39c687..147bf484b7 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c index 8fef047268..5daf716726 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c index 5b236a7bea..8d51c2cc3c 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c index 918420c592..5403af8688 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "CLT_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Compare"; + char *instruction_name = "CLT_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c index 1b11d93025..f263201e72 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c index 289cf6ae3f..0458f933f6 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c index af10a04352..fffe7be072 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c index 9d3920bc53..22fa184d80 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c index 8c0623538f..8097d6c864 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c index 2a9bfff459..54d6fda1f2 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c index 95da85b4b9..5a729906ac 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c index a3984b0790..e9e2da4718 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DIV_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Divide"; + char *instruction_name = "DIV_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c index e6d72097a6..cb13ff3e75 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c index 20a7029bd2..19451ee57d 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c index 493fc10cd7..e635888e6c 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c index 7c9bd57fa7..af4337d02c 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c index 5ca7164718..a87b72b121 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c index 271666da05..05df4cb583 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "DOTP_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Dot Product"; + char *instruction_name = "DOTP_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c index eabcd2a5cf..7e984a786e 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_A.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_A.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c index 866c6839f2..3dfdb482f4 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c index 7f4c2406a7..e1d65f98dc 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_A.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_A.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c index 7fb278ea02..600f60af56 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c index 7e35435e42..ab4161f20c 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c index f0a341e08a..54a78ae56a 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c index 52de98ba8f..79b1e0adfd 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c index b2d0a22ac4..32e32456eb 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c index 6fb023a4b7..a63d226279 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c index 35ebf1fdab..815a9ef497 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c index 0e7cf1e298..b668b39507 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c index 9dee9973f3..3329455f92 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MAX_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MAX_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c index 747f54d0ac..8fdbfc3bd3 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_A.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_A.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c index 49ded49fe0..6a9f6bf10e 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_A.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_A.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c index f78104ecb6..67a40b96f3 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_A.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_A.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c index e0afa01746..d08cb9cea8 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_A.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_A.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c index 248b9681c7..048233bbab 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c index 219029a520..04e18ebdbf 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c index fb059af226..3bf32d487a 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c index dd479921f5..eeb2ec9359 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c index 7985acf5e4..bdebf68a49 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c index 45d91af127..fcd90167ed 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c index eb527bbc2b..16f54b79e1 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c index 057f22accb..574c169d03 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MIN_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Max Min"; + char *instruction_name = "MIN_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c index a8964eadf6..1533790cae 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c index 3346d37d19..a8237f4244 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c index c28c2534f5..5d6e4d63f8 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c index 593e516534..1b068f28f5 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c index 1b5e57b96f..0d9ddf5907 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c index 8aef84325f..1c3aa2bb36 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c index ae5abb8e44..a17a69f1f3 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c index da48929f4f..ac0f704b18 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MOD_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Modulo"; + char *instruction_name = "MOD_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c index fa9753cc75..de1046820c 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULV.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Multiply"; + char *instruction_name = "MULV.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c index 2503467bf2..ae2ebef559 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULV.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Multiply"; + char *instruction_name = "MULV.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c index 5162678671..27479a82c5 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULV.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Multiply"; + char *instruction_name = "MULV.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c index 7e2ff6609f..adeb1bfa98 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "MULV.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Multiply"; + char *instruction_name = "MULV.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c index f583702a6b..a3ab83b76c 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c index a9ae576610..ee46ffadf1 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c index 8c193b6705..3262365907 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c index fb8f3c1a10..51f9a69413 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c index 506500b993..e086214ef8 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c index ef7ee3fd15..5640b65007 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c index 17dab15761..a5bf2d2054 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c index 38a6395e2d..772e90eedb 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "ASUB_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "ASUB_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c index dd1dd37af2..66137f5856 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c index d725d1957a..e66261b821 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c index af13d99c0f..6d97abfe3c 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c index bd71abfc4f..8f39a4525b 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c index fbf0b6c45c..6cc82fce29 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c index fb6b91a3a2..b427e87a3a 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "HSUB_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "HSUB_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c index 38a6f402fd..5c1f810d66 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c index 989d27cb4e..546c24c5c2 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c index c847a6e6d2..24ddc826c3 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c index 0459a4e1af..f6109a5331 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c index 3533c0c3ae..f170912348 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c index 894f984f5f..bf647db221 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c index 29eea521fd..c4616be3e9 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c index 2bae876f11..61052672ca 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBS_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBS_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c index 9cb798c405..71ea14fa2d 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUS_U.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUS_U.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c index 4915d598fd..070c457c44 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUS_U.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUS_U.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c index 19d8538942..f98d010436 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUS_U.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUS_U.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c index 278488bcea..d325c19217 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUS_U.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUS_U.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c index a0d7616246..66012b5894 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUU_S.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUU_S.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c index 26cf9c5578..344a373055 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUU_S.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUU_S.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c index cbba316c68..1cacb26395 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUU_S.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUU_S.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c index 156d62cd65..42f3ee56f6 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBSUU_S.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBSUU_S.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c index dbec0466ef..b8bd085516 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBV.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBV.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c index 8b097899ce..f532e4a69d 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBV.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBV.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c index 69bf9ec7b8..ac7f8ee6b5 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBV.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBV.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c index 365dc0ed83..93eeaecc7c 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c @@ -35,7 +35,9 @@ int32_t main(void) { - char *instruction_name = "SUBV.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Int Subtract"; + char *instruction_name = "SUBV.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -150,8 +152,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c index 00b78f7ed4..3506202cd9 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVEV.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVEV.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c index a33acfa382..896b11dce0 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVEV.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVEV.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c index 51866330dc..a68fea643f 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVEV.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVEV.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c index 0e82f2199b..6e168c701e 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVEV.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVEV.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c index 6dc06c597e..11cfbf398a 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVL.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVL.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c index a8679723aa..35581ee7ea 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVL.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVL.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c index 22f6ba600a..0d89d95edd 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVL.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVL.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c index f07689e0c8..ce044889c3 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVL.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVL.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c index 2316f388ec..f7dd1d22b0 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVOD.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVOD.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c index 2feb2eb2ed..bef28d8ded 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVOD.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVOD.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c index 93abfadfdd..d2355c6676 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVOD.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVOD.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c index 9b2b0d82ac..636a62d056 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVOD.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVOD.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c index 105a710d34..75bc9de9f9 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVR.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVR.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c index 22579c48c5..a80aa446f8 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVR.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVR.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c index ca416c02e6..caa00224fd 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVR.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVR.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c index 6652c7fbf5..65c89a3712 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "ILVR.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Interleave"; + char *instruction_name = "ILVR.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c index 1f864be5f2..22d1f9cc0f 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "AND.V"; + char *isa_ase_name = "MSA"; + char *group_name = "Logic"; + char *instruction_name = "AND.V"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c index 0b0f5ddb5e..3b9e481582 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "NOR.V"; + char *isa_ase_name = "MSA"; + char *group_name = "Logic"; + char *instruction_name = "NOR.V"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c index 90f535aa29..e6e5da4efb 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "OR.V"; + char *isa_ase_name = "MSA"; + char *group_name = "Logic"; + char *instruction_name = "OR.V"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c index 398443d83a..1b699b5ca4 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "XOR.V"; + char *isa_ase_name = "MSA"; + char *group_name = "Logic"; + char *instruction_name = "XOR.V"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c index fdab88d5c9..4a4c9d6c64 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKEV.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKEV.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0xf71a3ffcbe639308ULL, 0xf1d842a04f4d314eULL, }, { 0xd8ff2b145aaacf80ULL, 0xf1d842a04f4d314eULL, }, { 0xf1d842a04f4d314eULL, 0xf1d842a04f4d314eULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_B__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_B__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c index e7083858cd..67df606aac 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKEV.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKEV.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0xfbbe00634d93c708ULL, 0x704f164d5e31e24eULL, }, { 0xac5aaeaab9cf8b80ULL, 0x704f164d5e31e24eULL, }, { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_D__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_D__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c index bfd401f379..22d043cf49 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKEV.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKEV.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0xbb1a52fc0063c708ULL, 0x88d8e2a0164de24eULL, }, { 0xc6ff2514aeaa8b80ULL, 0x88d8e2a0164de24eULL, }, { 0x88d8e2a0164de24eULL, 0x88d8e2a0164de24eULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_H__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_H__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c index e58372d750..1a9c2df2b8 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKEV.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKEV.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x153f52fc4d93c708ULL, 0xa942e2a05e31e24eULL, }, { 0xab2b2514b9cf8b80ULL, 0xa942e2a05e31e24eULL, }, { 0xa942e2a05e31e24eULL, 0xa942e2a05e31e24eULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_W__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKEV_W__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c index 4cefecd0ec..15ef3776ec 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKOD.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKOD.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x12bb1552fb004dc7ULL, 0x8d88a9e270165ee2ULL, }, { 0x27c6ab25acaeb98bULL, 0x8d88a9e270165ee2ULL, }, { 0x8d88a9e270165ee2ULL, 0x8d88a9e270165ee2ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_B__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_B__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c index a7ea137148..e3997cd9a5 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKOD.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKOD.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, }, { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, }, { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_D__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_D__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c index bc7edcc595..2a29ac0faf 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKOD.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKOD.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x12f7153ffbbe4d93ULL, 0x8df1a942704f5e31ULL, }, { 0x27d8ab2bac5ab9cfULL, 0x8df1a942704f5e31ULL, }, { 0x8df1a942704f5e31ULL, 0x8df1a942704f5e31ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_H__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_H__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c index ca8c4fb0b6..a3fbe25c6e 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "PCKOD.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "PCKOD.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x12f7bb1afbbe0063ULL, 0x8df188d8704f164dULL, }, { 0x27d8c6ffac5aaeaaULL, 0x8df188d8704f164dULL, }, { 0x8df188d8704f164dULL, 0x8df188d8704f164dULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_W__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_PCKOD_W__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c index c088643b8c..eedb7d845b 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "VSHF.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "VSHF.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0x8080808080808080ULL, 0x8080808080808080ULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_B__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_B__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c index 06f3604bef..85a8f0de73 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "VSHF.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "VSHF.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_D__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_D__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c index f28d949d02..8d416bc60b 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "VSHF.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "VSHF.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_H__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_H__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c index 78e26d4ca0..fd8f02dbd4 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c @@ -28,12 +28,14 @@ #define TEST_COUNT_TOTAL ( \ (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ - (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) int32_t main(void) { - char *instruction_name = "VSHF.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Pack"; + char *instruction_name = "VSHF.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -121,6 +123,38 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */ + { 0x00000000fc000000ULL, 0x000015000000001aULL, }, + { 0x0000000014000000ULL, 0x0000ab00000000ffULL, }, + { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, }, + { 0x000040000000000cULL, 0x9300003f00120000ULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000800000000014ULL, 0x9300003f00120000ULL, }, + { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */ + { 0x0000000000000000ULL, 0xfb000000001500aaULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x0000000000000000ULL, 0x7000000000a916aaULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */ + { 0x00000800000000fcULL, 0x6200007be64b0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeccULL, }, + { 0x00006a0000550000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x9300003f00120000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae63ULL, }, + { 0x0000be0000c70000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */ + { 0x00000800000000fcULL, 0xcf00002bae270000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abaeaaULL, }, + { 0x00005a00008b0000ULL, 0x0000000000000000ULL, }, + { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, + { 0x00000800000000fcULL, 0x31000042168d0000ULL, }, + { 0x0000000000000000ULL, 0xac00000000abae4dULL, }, + { 0x00004f0000e20000ULL, 0x0000000000000000ULL, }, }; reset_msa_registers(); @@ -143,13 +177,38 @@ int32_t main(void) } } + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_W__DDT(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + ((RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_VSHF_W__DSD(b128_random[i], b128_random[j], + b128_result[ + ((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + (2 * (RANDOM_INPUTS_SHORT_COUNT) * + (RANDOM_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + gettimeofday(&end, NULL); elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c index 6b1aa962d4..649e67b6a1 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SLL.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SLL.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c index deb3b11740..1d6fe54207 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SLL.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SLL.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c index edb3b11be5..1e6c27bfe7 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SLL.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SLL.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c index 4cafaab334..8bfbaca6fc 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SLL.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SLL.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c index b1432c2806..a5dcee3a72 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRA.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRA.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c index cb6c12dde1..95a13620b9 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRA.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRA.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c index 2e505089de..f00003d51c 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRA.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRA.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c index f4ba1b5621..f00da6d3d9 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRA.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRA.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c index 73e60314e5..dcda9c2c95 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRAR.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRAR.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c index b784897090..478098acd9 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRAR.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRAR.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c index 476d2e1004..a30025548c 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRAR.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRAR.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c index 87d717325b..027d4ce565 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRAR.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRAR.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c index e0d460bc00..0e7c453cec 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRL.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRL.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c index e4b88a3cc4..f6351f875a 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRL.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRL.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c index 1eb64403c2..93394ef47a 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRL.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRL.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c index 794833cc15..c18cd9892a 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRL.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRL.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c index 4a900174cc..d173d8fa9c 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRLR.B"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRLR.B"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c index 69ba01f0d9..ecd7bd0c22 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRLR.D"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRLR.D"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c index 514a143a6e..ca7fd75342 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRLR.H"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRLR.H"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c index 940fd6f318..ccbe6c0c84 100644 --- a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c @@ -33,7 +33,9 @@ int32_t main(void) { - char *instruction_name = "SRLR.W"; + char *isa_ase_name = "MSA"; + char *group_name = "Shift"; + char *instruction_name = "SRLR.W"; int32_t ret; uint32_t i, j; struct timeval start, end; @@ -148,8 +150,9 @@ int32_t main(void) elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; - ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, - &b128_result[0][0], &b128_expect[0][0]); + ret = check_results_128(isa_ase_name, group_name, instruction_name, + TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); return ret; } diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clo.c b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clo.c index ca9a739c50..e7ecdc5910 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clo.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clo.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "CLO"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Count"; + char *instruction_name = "CLO"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clz.c b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clz.c index 0a7d21dcbd..a77a8e4eb5 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clz.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_clz.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "CLZ"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Count"; + char *instruction_name = "CLZ"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclo.c b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclo.c index 72bb473f66..eb41fbdfdf 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclo.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclo.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DCLO"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Count"; + char *instruction_name = "DCLO"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclz.c b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclz.c index 87df12b36c..be393ac199 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclz.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-count/test_mips64r6_dclz.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DCLZ"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Count"; + char *instruction_name = "DCLZ"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_bitswap.c b/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_bitswap.c index 639850df6a..df3d1b11f6 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_bitswap.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_bitswap.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "BITSWAP"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Swap"; + char *instruction_name = "BITSWAP"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_dbitswap.c b/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_dbitswap.c index 366fe61a95..377835940d 100644 --- a/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_dbitswap.c +++ b/tests/tcg/mips/user/isa/mips64r6/bit-swap/test_mips64r6_dbitswap.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DBITSWAP"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Bit Swap"; + char *instruction_name = "DBITSWAP"; int32_t ret; uint32_t i; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuh.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuh.c index c049378573..eb21615f95 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuh.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuh.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DMUH"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "DMUH"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuhu.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuhu.c index dfb41951b1..7316d79e2a 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuhu.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmuhu.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DMUHU"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "DMUHU"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmul.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmul.c index 3c337dd648..3ac1965cca 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmul.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmul.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DMUL"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "DMUL"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmulu.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmulu.c index b20a1bafc1..0862780e3d 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmulu.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_dmulu.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DMULU"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "DMULU"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muh.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muh.c index 91340749b2..ff1ae6fd9c 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muh.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muh.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "MUH"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "MUH"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muhu.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muhu.c index 24850609c9..cb2752767a 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muhu.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_muhu.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "MUHU"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "MUHU"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mul.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mul.c index acf779c6d9..5cdc4d5632 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mul.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mul.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "MUL"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "MUL"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mulu.c b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mulu.c index 65d5803eef..ccb3bdc1ac 100644 --- a/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mulu.c +++ b/tests/tcg/mips/user/isa/mips64r6/int-multiply/test_mips64r6_mulu.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "MULU"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Int Multiply"; + char *instruction_name = "MULU"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_and.c b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_and.c index 2039dd9899..4d6cf2e1f1 100644 --- a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_and.c +++ b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_and.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "AND"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Logic"; + char *instruction_name = "AND"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_nor.c b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_nor.c index f22393b6c7..21005ddc53 100644 --- a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_nor.c +++ b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_nor.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "NOR"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Logic"; + char *instruction_name = "NOR"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_or.c b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_or.c index ed8bac1c9c..345b4544fe 100644 --- a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_or.c +++ b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_or.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "OR"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Logic"; + char *instruction_name = "OR"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_xor.c b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_xor.c index a8ba2b4ed1..7e36fee517 100644 --- a/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_xor.c +++ b/tests/tcg/mips/user/isa/mips64r6/logic/test_mips64r6_xor.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "XOR"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Logic"; + char *instruction_name = "XOR"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsllv.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsllv.c index b3eb86edb7..4f719efda1 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsllv.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsllv.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DSLLV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "DSLLV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrav.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrav.c index 025e8f8163..024d508ca8 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrav.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrav.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DSRAV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "DSRAV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrlv.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrlv.c index 680f8a1845..fd1c398ffd 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrlv.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_dsrlv.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "DSRLV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "DSRLV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_sllv.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_sllv.c index 288d087773..a5fa72b727 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_sllv.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_sllv.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "SLLV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "SLLV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srav.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srav.c index f547d9e408..79e1a047eb 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srav.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srav.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "SRAV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "SRAV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srlv.c b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srlv.c index 8b8075ca40..1f8c45d8cc 100644 --- a/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srlv.c +++ b/tests/tcg/mips/user/isa/mips64r6/shift/test_mips64r6_srlv.c @@ -31,7 +31,9 @@ int32_t main(void) { - char *instruction_name = "SRLV"; + char *isa_ase_name = "mips64r6"; + char *group_name = "Shift"; + char *instruction_name = "SRLV"; int32_t ret; uint32_t i, j; struct timeval start, end; diff --git a/util/main-loop.c b/util/main-loop.c index e1e349ca5c..a9f4e8de75 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -422,7 +422,7 @@ static int os_host_main_loop_wait(int64_t timeout) g_main_context_prepare(context, &max_priority); n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout, poll_fds, ARRAY_SIZE(poll_fds)); - g_assert(n_poll_fds <= ARRAY_SIZE(poll_fds)); + g_assert(n_poll_fds + w->num <= ARRAY_SIZE(poll_fds)); for (i = 0; i < w->num; i++) { poll_fds[n_poll_fds + i].fd = (DWORD_PTR)w->events[i]; |