From 28efd007fc148a8a51fc98a1f95577ca01b56586 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 1 May 2020 15:29:51 +0200 Subject: [PATCH 001/196] 3.16.0-0.2.GIT --- .gitignore | 1 + sources | 2 +- valgrind-3.15.0-arm-membarrier.patch | 18 - valgrind-3.15.0-arm-preadv2-pwritev2.patch | 21 - valgrind-3.15.0-arm64-ld-stpcpy.patch | 45 - valgrind-3.15.0-avx-rdrand-f16c.patch | 95 - valgrind-3.15.0-avx_estimate_insn-test.patch | 31499 ---------------- valgrind-3.15.0-copy_file_range.patch | 374 - valgrind-3.15.0-disable-s390x-z13.patch | 34 - valgrind-3.15.0-exp-sgcheck-no-aarch64.patch | 29 - valgrind-3.15.0-gcc-10-i686-asm-test.patch | 20 - valgrind-3.15.0-gcc-10-typedef-enum.patch | 13 - ...ind-3.15.0-gcc-10-x86-amd64-asm-test.patch | 644 - ...d-3.15.0-gcc10-ppc64-asm-constraints.patch | 89 - valgrind-3.15.0-glibc-dtv-supp.patch | 42 - valgrind-3.15.0-pkey.patch | 226 - valgrind-3.15.0-ppc64-filter_gdb.patch | 22 - valgrind-3.15.0-ppc64-sigframe.patch | 20 - valgrind-3.15.0-preadv2-pwritev2.patch | 751 - valgrind-3.15.0-ptrace-siginfo.patch | 170 - valgrind-3.15.0-s390x-HRcVec128.patch | 153 - ...rind-3.15.0-s390x-compare-and-signal.patch | 436 - valgrind-3.15.0-s390x-wrap-drd.patch | 194 - valgrind-3.15.0-scalar-arm64.patch | 83 - valgrind-3.15.0-scalar-x86.patch | 137 - valgrind-3.15.0-time64.patch | 1336 - valgrind-3.15.0-z14-misc.patch | 8463 ----- valgrind-3.15.0-z15.patch | 126 - ...tch => valgrind-3.16.0-pkglibexecdir.patch | 0 ...tch => valgrind-3.16.0-some-Wl-z-now.patch | 0 ...valgrind-3.16.0-some-stack-protector.patch | 0 valgrind.spec | 149 +- 32 files changed, 16 insertions(+), 45176 deletions(-) delete mode 100644 valgrind-3.15.0-arm-membarrier.patch delete mode 100644 valgrind-3.15.0-arm-preadv2-pwritev2.patch delete mode 100644 valgrind-3.15.0-arm64-ld-stpcpy.patch delete mode 100644 valgrind-3.15.0-avx-rdrand-f16c.patch delete mode 100644 valgrind-3.15.0-avx_estimate_insn-test.patch delete mode 100644 valgrind-3.15.0-copy_file_range.patch delete mode 100644 valgrind-3.15.0-disable-s390x-z13.patch delete mode 100644 valgrind-3.15.0-exp-sgcheck-no-aarch64.patch delete mode 100644 valgrind-3.15.0-gcc-10-i686-asm-test.patch delete mode 100644 valgrind-3.15.0-gcc-10-typedef-enum.patch delete mode 100644 valgrind-3.15.0-gcc-10-x86-amd64-asm-test.patch delete mode 100644 valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch delete mode 100644 valgrind-3.15.0-glibc-dtv-supp.patch delete mode 100644 valgrind-3.15.0-pkey.patch delete mode 100644 valgrind-3.15.0-ppc64-filter_gdb.patch delete mode 100644 valgrind-3.15.0-ppc64-sigframe.patch delete mode 100644 valgrind-3.15.0-preadv2-pwritev2.patch delete mode 100644 valgrind-3.15.0-ptrace-siginfo.patch delete mode 100644 valgrind-3.15.0-s390x-HRcVec128.patch delete mode 100644 valgrind-3.15.0-s390x-compare-and-signal.patch delete mode 100644 valgrind-3.15.0-s390x-wrap-drd.patch delete mode 100644 valgrind-3.15.0-scalar-arm64.patch delete mode 100644 valgrind-3.15.0-scalar-x86.patch delete mode 100644 valgrind-3.15.0-time64.patch delete mode 100644 valgrind-3.15.0-z14-misc.patch delete mode 100644 valgrind-3.15.0-z15.patch rename valgrind-3.15.0-pkglibexecdir.patch => valgrind-3.16.0-pkglibexecdir.patch (100%) rename valgrind-3.15.0-some-Wl-z-now.patch => valgrind-3.16.0-some-Wl-z-now.patch (100%) rename valgrind-3.15.0-some-stack-protector.patch => valgrind-3.16.0-some-stack-protector.patch (100%) diff --git a/.gitignore b/.gitignore index 7c3d7f2..87467ef 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ /valgrind-3.15.0.RC1.tar.bz2 /valgrind-3.15.0.RC2.tar.bz2 /valgrind-3.15.0.tar.bz2 +/valgrind-3.16.0.GIT.tar.bz2 diff --git a/sources b/sources index 48e97e7..79d281e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.15.0.tar.bz2) = 5695d1355226fb63b0c80809ed43bb077b6eed4d427792d9d7ed944c38b557a84fe3c783517b921e32f161228e10e4625bea0550faa4685872bb4454450cfa7f +SHA512 (valgrind-3.16.0.GIT.tar.bz2) = 74ed4e090ff3412458fef1b1d5c451d71551545234cff8328a2db9cd7f2b3feeba4fc53121844afafaa1f5fb0334df33446d15dabb0fa9136840d5dac9282f12 diff --git a/valgrind-3.15.0-arm-membarrier.patch b/valgrind-3.15.0-arm-membarrier.patch deleted file mode 100644 index 945e1a8..0000000 --- a/valgrind-3.15.0-arm-membarrier.patch +++ /dev/null @@ -1,18 +0,0 @@ -commit 9616e9bc9a1950f70ab1abd1c6ca9abc3f26eb7f -Author: Mark Wielaard -Date: Fri May 31 15:11:35 2019 +0200 - - Hook up membarrier syscall for arm-linux. - -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 3c5194d55..5e8baf8db 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1014,6 +1014,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_getrandom, sys_getrandom), // 384 - LINXY(__NR_memfd_create, sys_memfd_create), // 385 - -+ LINX_(__NR_membarrier, sys_membarrier), // 389 - LINX_(__NR_copy_file_range, sys_copy_file_range), // 391 - - LINXY(__NR_statx, sys_statx), // 397 diff --git a/valgrind-3.15.0-arm-preadv2-pwritev2.patch b/valgrind-3.15.0-arm-preadv2-pwritev2.patch deleted file mode 100644 index aa3e9f2..0000000 --- a/valgrind-3.15.0-arm-preadv2-pwritev2.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit 2d040ce2c7fd328b4e8b0c2363ebe0c2ea2cbc9f -Author: Mark Wielaard -Date: Sat Jan 25 15:10:22 2020 +0100 - - arm: Hook up preadv2 and pwritev2 syscalls. - - They work the same as on other linux architectures. - -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 93ebc3f4d..18468f07e 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1016,6 +1016,8 @@ static SyscallTableEntry syscall_main_table[] = { - - LINX_(__NR_membarrier, sys_membarrier), // 389 - LINX_(__NR_copy_file_range, sys_copy_file_range), // 391 -+ LINXY(__NR_preadv2, sys_preadv2), // 392 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 393 - - LINXY(__NR_statx, sys_statx), // 397 - diff --git a/valgrind-3.15.0-arm64-ld-stpcpy.patch b/valgrind-3.15.0-arm64-ld-stpcpy.patch deleted file mode 100644 index b0290ae..0000000 --- a/valgrind-3.15.0-arm64-ld-stpcpy.patch +++ /dev/null @@ -1,45 +0,0 @@ -commit 89423f5d8ba05a099c2c62227a00a4f4eec59eb3 -Author: Mark Wielaard -Date: Tue May 7 21:20:04 2019 +0200 - - Intercept stpcpy also in ld.so for arm64 - - On other arches stpcpy () is intercepted for both libc.so and ld.so. - But not on arm64, where it is only intercepted for libc.so. - - This can cause memcheck warnings about the use of stpcpy () in ld.so - when called through dlopen () because ld.so contains its own copy of - that functions. - - Fix by introducing VG_Z_LD_LINUX_AARCH64_SO_1 (the encoded name of - ld.so on arm64) and using that in vg_replace_strmem.c to intercept - stpcpy. - - https://bugs.kde.org/show_bug.cgi?id=407307 - -diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h -index c97941f..15ba67f 100644 ---- a/include/pub_tool_redir.h -+++ b/include/pub_tool_redir.h -@@ -313,7 +313,9 @@ - #define VG_Z_LD_SO_1 ldZdsoZd1 // ld.so.1 - #define VG_U_LD_SO_1 "ld.so.1" - -+#define VG_Z_LD_LINUX_AARCH64_SO_1 ldZhlinuxZhaarch64ZdsoZd1 - #define VG_U_LD_LINUX_AARCH64_SO_1 "ld-linux-aarch64.so.1" -+ - #define VG_U_LD_LINUX_ARMHF_SO_3 "ld-linux-armhf.so.3" - - #endif -diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index 89a7dcc..19143cf 100644 ---- a/shared/vg_replace_strmem.c -+++ b/shared/vg_replace_strmem.c -@@ -1160,6 +1160,7 @@ static inline void my_exit ( int x ) - STPCPY(VG_Z_LIBC_SONAME, __stpcpy_sse2_unaligned) - STPCPY(VG_Z_LD_LINUX_SO_2, stpcpy) - STPCPY(VG_Z_LD_LINUX_X86_64_SO_2, stpcpy) -+ STPCPY(VG_Z_LD_LINUX_AARCH64_SO_1,stpcpy) - - #elif defined(VGO_darwin) - //STPCPY(VG_Z_LIBC_SONAME, stpcpy) diff --git a/valgrind-3.15.0-avx-rdrand-f16c.patch b/valgrind-3.15.0-avx-rdrand-f16c.patch deleted file mode 100644 index cc041fe..0000000 --- a/valgrind-3.15.0-avx-rdrand-f16c.patch +++ /dev/null @@ -1,95 +0,0 @@ -commit 791fe5ecf909d573bcbf353b677b9404f9da0ed4 -Author: Mark Wielaard -Date: Mon May 27 22:19:27 2019 +0200 - - Expose rdrand and f16c through cpuid also if the host only has avx. - - The amd64 CPUID dirtyhelpers are mostly static since they emulate some - existing CPU "family". The avx2 ("i7-4910MQ") CPUID variant however - can "dynamicly" enable rdrand and/or f16c if the host supports them. - Do the same for the avx_and_cx16 ("i5-2300") CPUID variant. - - https://bugs.kde.org/show_bug.cgi?id=408009 - -diff --git a/VEX/priv/guest_amd64_defs.h b/VEX/priv/guest_amd64_defs.h -index 4f34b41..a5de527 100644 ---- a/VEX/priv/guest_amd64_defs.h -+++ b/VEX/priv/guest_amd64_defs.h -@@ -165,7 +165,9 @@ extern void amd64g_dirtyhelper_storeF80le ( Addr/*addr*/, ULong/*data*/ ); - extern void amd64g_dirtyhelper_CPUID_baseline ( VexGuestAMD64State* st ); - extern void amd64g_dirtyhelper_CPUID_sse3_and_cx16 ( VexGuestAMD64State* st ); - extern void amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st ); --extern void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st ); -+extern void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st, -+ ULong hasF16C, -+ ULong hasRDRAND ); - extern void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st, - ULong hasF16C, ULong hasRDRAND ); - -diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c -index e4cf7e2..182bae0 100644 ---- a/VEX/priv/guest_amd64_helpers.c -+++ b/VEX/priv/guest_amd64_helpers.c -@@ -3141,8 +3141,11 @@ void amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st ) - address sizes : 36 bits physical, 48 bits virtual - power management: - */ --void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st ) -+void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st, -+ ULong hasF16C, ULong hasRDRAND ) - { -+ vassert((hasF16C >> 1) == 0ULL); -+ vassert((hasRDRAND >> 1) == 0ULL); - # define SET_ABCD(_a,_b,_c,_d) \ - do { st->guest_RAX = (ULong)(_a); \ - st->guest_RBX = (ULong)(_b); \ -@@ -3157,9 +3160,14 @@ void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st ) - case 0x00000000: - SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69); - break; -- case 0x00000001: -- SET_ABCD(0x000206a7, 0x00100800, 0x1f9ae3bf, 0xbfebfbff); -+ case 0x00000001: { -+ // As a baseline, advertise neither F16C (ecx:29) nor RDRAND (ecx:30), -+ // but patch in support for them as directed by the caller. -+ UInt ecx_extra -+ = (hasF16C ? (1U << 29) : 0) | (hasRDRAND ? (1U << 30) : 0); -+ SET_ABCD(0x000206a7, 0x00100800, (0x1f9ae3bf | ecx_extra), 0xbfebfbff); - break; -+ } - case 0x00000002: - SET_ABCD(0x76035a01, 0x00f0b0ff, 0x00000000, 0x00ca0000); - break; -diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c -index 56e992c..96dee38 100644 ---- a/VEX/priv/guest_amd64_toIR.c -+++ b/VEX/priv/guest_amd64_toIR.c -@@ -22007,7 +22007,8 @@ Long dis_ESC_0F ( - - vassert(fName); vassert(fAddr); - IRExpr** args = NULL; -- if (fAddr == &amd64g_dirtyhelper_CPUID_avx2) { -+ if (fAddr == &amd64g_dirtyhelper_CPUID_avx2 -+ || fAddr == &amd64g_dirtyhelper_CPUID_avx_and_cx16) { - Bool hasF16C = (archinfo->hwcaps & VEX_HWCAPS_AMD64_F16C) != 0; - Bool hasRDRAND = (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDRAND) != 0; - args = mkIRExprVec_3(IRExpr_GSPTR(), -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 3536e57..56a28d1 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -1076,10 +1076,10 @@ Bool VG_(machine_get_hwcaps)( void ) - have_avx2 = (ebx & (1<<5)) != 0; /* True => have AVX2 */ - } - -- /* Sanity check for RDRAND and F16C. These don't actually *need* AVX2, but -- it's convenient to restrict them to the AVX2 case since the simulated -- CPUID we'll offer them on has AVX2 as a base. */ -- if (!have_avx2) { -+ /* Sanity check for RDRAND and F16C. These don't actually *need* AVX, but -+ it's convenient to restrict them to the AVX case since the simulated -+ CPUID we'll offer them on has AVX as a base. */ -+ if (!have_avx) { - have_f16c = False; - have_rdrand = False; - } diff --git a/valgrind-3.15.0-avx_estimate_insn-test.patch b/valgrind-3.15.0-avx_estimate_insn-test.patch deleted file mode 100644 index 59c8613..0000000 --- a/valgrind-3.15.0-avx_estimate_insn-test.patch +++ /dev/null @@ -1,31499 +0,0 @@ -commit ef9ac3aa0fd3ed41d74707ffe49abe9ad2797ddd -Author: Alexandra Hájková -Date: Mon Nov 11 14:30:26 2019 +0100 - - fix avx-1 amd64 test - - The estimate instructions (rcpss, rcpps, rsqrtps, rsqrtss) are, as the - name suggests, not expected to give a fully accurate result. They may - produce slighly different results on different CPU families because - their results are not defined by the IEEE standard. This is the - reason avx-1 test fails on amd now. - - This patch assumes there are only two implementations, the intel and - amd one. It moves these estimate instructions out of avx-1 and into - their own testcase - avx_estimate_insn and creates two different .exp - files for intel and amd. - - https://bugs.kde.org/show_bug.cgi?id=413330 - -diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am -index 2ec7682bc..3196d00ce 100644 ---- a/none/tests/amd64/Makefile.am -+++ b/none/tests/amd64/Makefile.am -@@ -24,6 +24,7 @@ EXTRA_DIST = \ - aes.vgtest aes.stdout.exp aes.stderr.exp \ - amd64locked.vgtest amd64locked.stdout.exp amd64locked.stderr.exp \ - avx-1.vgtest avx-1.stdout.exp avx-1.stderr.exp \ -+ avx_estimate_insn.vgtest avx_estimate_insn.stdout.exp avx_estimate_insn.stderr.exp \ - avx2-1.vgtest avx2-1.stdout.exp avx2-1.stderr.exp \ - asorep.stderr.exp asorep.stdout.exp asorep.vgtest \ - bmi.stderr.exp bmi.stdout.exp bmi.vgtest \ -@@ -120,7 +121,8 @@ if BUILD_ADX_TESTS - endif - if BUILD_AVX_TESTS - if BUILD_VPCLMULQDQ_TESTS -- check_PROGRAMS += avx-1 -+ check_PROGRAMS += avx-1 \ -+ avx_estimate_insn - endif - if BUILD_FMA4_TESTS - check_PROGRAMS += fma4 -diff --git a/none/tests/amd64/avx-1.c b/none/tests/amd64/avx-1.c -index 134725cdf..8042cf4fa 100644 ---- a/none/tests/amd64/avx-1.c -+++ b/none/tests/amd64/avx-1.c -@@ -1,119 +1,4 @@ -- --#include --#include --#include --#include "tests/malloc.h" -- --typedef unsigned char UChar; --typedef unsigned int UInt; --typedef unsigned long int UWord; --typedef unsigned long long int ULong; -- --#define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr))) -- --typedef union { UChar u8[32]; UInt u32[8]; } YMM; -- --typedef struct { YMM a1; YMM a2; YMM a3; YMM a4; ULong u64; } Block; -- --void showYMM ( YMM* vec ) --{ -- int i; -- assert(IS_32_ALIGNED(vec)); -- for (i = 31; i >= 0; i--) { -- printf("%02x", (UInt)vec->u8[i]); -- if (i > 0 && 0 == ((i+0) & 7)) printf("."); -- } --} -- --void showBlock ( char* msg, Block* block ) --{ -- printf(" %s\n", msg); -- printf(" "); showYMM(&block->a1); printf("\n"); -- printf(" "); showYMM(&block->a2); printf("\n"); -- printf(" "); showYMM(&block->a3); printf("\n"); -- printf(" "); showYMM(&block->a4); printf("\n"); -- printf(" %016llx\n", block->u64); --} -- --UChar randUChar ( void ) --{ -- static UInt seed = 80021; -- seed = 1103515245 * seed + 12345; -- return (seed >> 17) & 0xFF; --} -- --void randBlock ( Block* b ) --{ -- int i; -- UChar* p = (UChar*)b; -- for (i = 0; i < sizeof(Block); i++) -- p[i] = randUChar(); --} -- -- --/* Generate a function test_NAME, that tests the given insn, in both -- its mem and reg forms. The reg form of the insn may mention, as -- operands only %ymm6, %ymm7, %ymm8, %ymm9 and %r14. The mem form of -- the insn may mention as operands only (%rsi), %ymm7, %ymm8, %ymm9 -- and %r14. It's OK for the insn to clobber ymm0, rax and rdx, as these -- are needed for testing PCMPxSTRx, and ymm6, as this is needed for testing -- MOVMASK variants. */ -- --#define GEN_test_RandM(_name, _reg_form, _mem_form) \ -- \ -- __attribute__ ((noinline)) static void test_##_name ( void ) \ -- { \ -- Block* b = memalign32(sizeof(Block)); \ -- randBlock(b); \ -- printf("%s(reg)\n", #_name); \ -- showBlock("before", b); \ -- __asm__ __volatile__( \ -- "vmovdqa 0(%0),%%ymm7" "\n\t" \ -- "vmovdqa 32(%0),%%ymm8" "\n\t" \ -- "vmovdqa 64(%0),%%ymm6" "\n\t" \ -- "vmovdqa 96(%0),%%ymm9" "\n\t" \ -- "movq 128(%0),%%r14" "\n\t" \ -- _reg_form "\n\t" \ -- "vmovdqa %%ymm7, 0(%0)" "\n\t" \ -- "vmovdqa %%ymm8, 32(%0)" "\n\t" \ -- "vmovdqa %%ymm6, 64(%0)" "\n\t" \ -- "vmovdqa %%ymm9, 96(%0)" "\n\t" \ -- "movq %%r14, 128(%0)" "\n\t" \ -- : /*OUT*/ \ -- : /*IN*/"r"(b) \ -- : /*TRASH*/"xmm0","xmm7","xmm8","xmm6","xmm9","r14","memory","cc", \ -- "rax","rdx" \ -- ); \ -- showBlock("after", b); \ -- randBlock(b); \ -- printf("%s(mem)\n", #_name); \ -- showBlock("before", b); \ -- __asm__ __volatile__( \ -- "leaq 0(%0),%%rsi" "\n\t" \ -- "vmovdqa 32(%0),%%ymm8" "\n\t" \ -- "vmovdqa 64(%0),%%ymm7" "\n\t" \ -- "vmovdqa 96(%0),%%ymm9" "\n\t" \ -- "movq 128(%0),%%r14" "\n\t" \ -- _mem_form "\n\t" \ -- "vmovdqa %%ymm8, 32(%0)" "\n\t" \ -- "vmovdqa %%ymm7, 64(%0)" "\n\t" \ -- "vmovdqa %%ymm9, 96(%0)" "\n\t" \ -- "movq %%r14, 128(%0)" "\n\t" \ -- : /*OUT*/ \ -- : /*IN*/"r"(b) \ -- : /*TRASH*/"xmm6", \ -- "xmm0","xmm8","xmm7","xmm9","r14","rsi","memory","cc", \ -- "rax","rdx" \ -- ); \ -- showBlock("after", b); \ -- printf("\n"); \ -- free(b); \ -- } -- --#define GEN_test_Ronly(_name, _reg_form) \ -- GEN_test_RandM(_name, _reg_form, "") --#define GEN_test_Monly(_name, _mem_form) \ -- GEN_test_RandM(_name, "", _mem_form) -+#include"avx_tests.h" - - - GEN_test_RandM(VPOR_128, -@@ -1867,38 +1752,6 @@ GEN_test_RandM(VMOVUPS_EtoG_256, - "vmovups %%ymm6, %%ymm9", - "vmovups (%%rsi), %%ymm7") - --GEN_test_RandM(VSQRTSS_128, -- "vsqrtss %%xmm6, %%xmm8, %%xmm7", -- "vsqrtss (%%rsi), %%xmm8, %%xmm7") -- --GEN_test_RandM(VSQRTPS_128, -- "vsqrtps %%xmm6, %%xmm8", -- "vsqrtps (%%rsi), %%xmm8") -- --GEN_test_RandM(VSQRTPS_256, -- "vsqrtps %%ymm6, %%ymm8", -- "vsqrtps (%%rsi), %%ymm8") -- --GEN_test_RandM(VSQRTPD_128, -- "vsqrtpd %%xmm6, %%xmm8", -- "vsqrtpd (%%rsi), %%xmm8") -- --GEN_test_RandM(VSQRTPD_256, -- "vsqrtpd %%ymm6, %%ymm8", -- "vsqrtpd (%%rsi), %%ymm8") -- --GEN_test_RandM(VRSQRTSS_128, -- "vrsqrtss %%xmm6, %%xmm8, %%xmm7", -- "vrsqrtss (%%rsi), %%xmm8, %%xmm7") -- --GEN_test_RandM(VRSQRTPS_128, -- "vrsqrtps %%xmm6, %%xmm8", -- "vrsqrtps (%%rsi), %%xmm8") -- --GEN_test_RandM(VRSQRTPS_256, -- "vrsqrtps %%ymm6, %%ymm8", -- "vrsqrtps (%%rsi), %%ymm8") -- - GEN_test_RandM(VMOVDQU_GtoE_256, - "vmovdqu %%ymm9, %%ymm6", - "vmovdqu %%ymm7, (%%rsi)") -@@ -2530,18 +2383,6 @@ GEN_test_Monly(VMOVLPS_128_M64_XMM_XMM, "vmovlps (%%rsi), %%xmm8, %%xmm7") - - GEN_test_Monly(VMOVLPS_128_XMM_M64, "vmovlps %%xmm7, (%%rsi)") - --GEN_test_RandM(VRCPSS_128, -- "vrcpss %%xmm6, %%xmm8, %%xmm7", -- "vrcpss (%%rsi), %%xmm8, %%xmm7") -- --GEN_test_RandM(VRCPPS_128, -- "vrcpps %%xmm6, %%xmm8", -- "vrcpps (%%rsi), %%xmm8") -- --GEN_test_RandM(VRCPPS_256, -- "vrcpps %%ymm6, %%ymm8", -- "vrcpps (%%rsi), %%ymm8") -- - GEN_test_RandM(VPSADBW_128, - "vpsadbw %%xmm6, %%xmm8, %%xmm7", - "vpsadbw (%%rsi), %%xmm8, %%xmm7") -@@ -2679,25 +2520,6 @@ GEN_test_Monly(VMASKMOVPD_256_StoreForm, - "vxorpd %%ymm6, %%ymm6, %%ymm6;" - "vmaskmovpd %%ymm9, %%ymm6, (%%rsi,%%rsi,4)") - --/* Comment duplicated above, for convenient reference: -- Allowed operands in test insns: -- Reg form: %ymm6, %ymm7, %ymm8, %ymm9 and %r14. -- Mem form: (%rsi), %ymm7, %ymm8, %ymm9 and %r14. -- Imm8 etc fields are also allowed, where they make sense. -- Both forms may use ymm0, rax and rdx as scratch. -- Mem form may also use ymm6 as scratch. --*/ -- --#define N_DEFAULT_ITERS 3 -- --// Do the specified test some number of times --#define DO_N(_iters, _testfn) \ -- do { int i; for (i = 0; i < (_iters); i++) { test_##_testfn(); } } while (0) -- --// Do the specified test the default number of times --#define DO_D(_testfn) DO_N(N_DEFAULT_ITERS, _testfn) -- -- - int main ( void ) - { - DO_D( VMOVUPD_EtoG_256 ); -@@ -3041,14 +2863,6 @@ int main ( void ) - DO_D( VPBLENDW_128_0x85 ); - DO_D( VPBLENDW_128_0x29 ); - DO_D( VMOVUPS_EtoG_256 ); -- DO_D( VSQRTSS_128 ); -- DO_D( VSQRTPS_128 ); -- DO_D( VSQRTPS_256 ); -- DO_D( VSQRTPD_128 ); -- DO_D( VSQRTPD_256 ); -- DO_D( VRSQRTSS_128 ); -- DO_D( VRSQRTPS_128 ); -- DO_D( VRSQRTPS_256 ); - DO_D( VMOVDQU_GtoE_256 ); - DO_D( VCVTPS2PD_256 ); - DO_D( VCVTTPS2DQ_128 ); -@@ -3214,9 +3028,6 @@ int main ( void ) - DO_D( VMOVDDUP_YMMorMEM256_to_YMM ); - DO_D( VMOVLPS_128_M64_XMM_XMM ); - DO_D( VMOVLPS_128_XMM_M64 ); -- DO_D( VRCPSS_128 ); -- DO_D( VRCPPS_128 ); -- DO_D( VRCPPS_256 ); - DO_D( VPSADBW_128 ); - DO_D( VPSIGNB_128 ); - DO_D( VPSIGNW_128 ); -diff --git a/none/tests/amd64/avx-1.stdout.exp b/none/tests/amd64/avx-1.stdout.exp -index 33280d5c7..a6e3a15c9 100644 ---- a/none/tests/amd64/avx-1.stdout.exp -+++ b/none/tests/amd64/avx-1.stdout.exp -@@ -27457,7 +27457,7 @@ VMOVUPS_EtoG_256(mem) - b7ca346ecc3614c4.6763a2c958e164eb.bf9c4236ea0219f3.1b8e30a427b58458 - 2f4d0558a11b2bc6 - --VSQRTSS_128(reg) -+VMOVDQU_GtoE_256(reg) - before - 00a63906699e2f4d.4ce1fcbf7e092808.6e05070d458492d0.edbe12a2ed9eb7c3 - ebe6c8191bcaca96.943cd14b23127395.a0a809c00f4a7ae2.a0fdf11394aa6f06 -@@ -27465,12 +27465,12 @@ VSQRTSS_128(reg) - 7f4ae71eaf4fb825.acee8fc0b7f7a538.f921d523a7716740.0406cab144441f94 - 6e67bcb684e98f37 - after -- 0000000000000000.0000000000000000.a0a809c00f4a7ae2.a0fdf113ffc00000 -+ 00a63906699e2f4d.4ce1fcbf7e092808.6e05070d458492d0.edbe12a2ed9eb7c3 - ebe6c8191bcaca96.943cd14b23127395.a0a809c00f4a7ae2.a0fdf11394aa6f06 -- 4c58aefd542c3a50.6ba72efcd75db496.5b98a44e51c058ce.b4275b74fe33fde8 -+ 7f4ae71eaf4fb825.acee8fc0b7f7a538.f921d523a7716740.0406cab144441f94 - 7f4ae71eaf4fb825.acee8fc0b7f7a538.f921d523a7716740.0406cab144441f94 - 6e67bcb684e98f37 --VSQRTSS_128(mem) -+VMOVDQU_GtoE_256(mem) - before - cd16ab70da2f0afc.e00770e8c8c083c1.35dc7082dfeb03a6.d88e96abaee9e4e3 - fddf16c961214b10.cbda44c73d09d5d2.e13f4d2e6a458a0e.522de55201b50b64 -@@ -27478,13 +27478,13 @@ VSQRTSS_128(mem) - 3fef480c743a12d4.aef5be75a45901fd.128fedf41a5d0176.8b2c1aaefe7646af - 0125f93ade84d2d0 - after -- cd16ab70da2f0afc.e00770e8c8c083c1.35dc7082dfeb03a6.d88e96abaee9e4e3 -+ da8e76af36cb0f9f.9b105f27a7b9eb01.8ce1a3b07412f599.c448bd843d60186f - fddf16c961214b10.cbda44c73d09d5d2.e13f4d2e6a458a0e.522de55201b50b64 -- 0000000000000000.0000000000000000.e13f4d2e6a458a0e.522de552ffc00000 -+ da8e76af36cb0f9f.9b105f27a7b9eb01.8ce1a3b07412f599.c448bd843d60186f - 3fef480c743a12d4.aef5be75a45901fd.128fedf41a5d0176.8b2c1aaefe7646af - 0125f93ade84d2d0 - --VSQRTSS_128(reg) -+VMOVDQU_GtoE_256(reg) - before - 847f54967c15f880.0acd09ce377910db.5fd55b1bd0775270.4e15a7e677326acf - 6e85292c71b5f369.16f534df9c94c4e2.0afb3487c69e1b06.1e3f4e72a89eecd0 -@@ -27492,12 +27492,12 @@ VSQRTSS_128(reg) - eac92fbbd6545b97.6053b9a3bb90419a.bd4d875d8138044e.e6ae4f08f468297d - 978ca2eb47df5d80 - after -- 0000000000000000.0000000000000000.0afb3487c69e1b06.1e3f4e72ffc00000 -+ 847f54967c15f880.0acd09ce377910db.5fd55b1bd0775270.4e15a7e677326acf - 6e85292c71b5f369.16f534df9c94c4e2.0afb3487c69e1b06.1e3f4e72a89eecd0 -- 1c85736a5cf10137.3e33452dbf98ec13.0bb54424225b986c.5dd95c84c8ac42a6 -+ eac92fbbd6545b97.6053b9a3bb90419a.bd4d875d8138044e.e6ae4f08f468297d - eac92fbbd6545b97.6053b9a3bb90419a.bd4d875d8138044e.e6ae4f08f468297d - 978ca2eb47df5d80 --VSQRTSS_128(mem) -+VMOVDQU_GtoE_256(mem) - before - 4a3dd118de1c99dc.349e578b7e6a4035.56210a2dac8882a4.7e11faa07fc49d57 - dd8e597ad42c9abd.5750e946edc0eabc.fe69b6b7af8d695d.a94b9758b7889d34 -@@ -27505,13 +27505,13 @@ VSQRTSS_128(mem) - 0f4060924ff2dbbb.937a382d96598037.d0960c7c59eb1c8a.ac5344d746edc419 - 3dba4b77d5a66379 - after -- 4a3dd118de1c99dc.349e578b7e6a4035.56210a2dac8882a4.7e11faa07fc49d57 -+ 2a4bb4ff46191c4e.ad2be058c1e196d9.33f6382ee0aab3f0.99485cf1c5124091 - dd8e597ad42c9abd.5750e946edc0eabc.fe69b6b7af8d695d.a94b9758b7889d34 -- 0000000000000000.0000000000000000.fe69b6b7af8d695d.a94b97587fc49d57 -+ 2a4bb4ff46191c4e.ad2be058c1e196d9.33f6382ee0aab3f0.99485cf1c5124091 - 0f4060924ff2dbbb.937a382d96598037.d0960c7c59eb1c8a.ac5344d746edc419 - 3dba4b77d5a66379 - --VSQRTSS_128(reg) -+VMOVDQU_GtoE_256(reg) - before - a7c76e3b0fc85a5c.6638d81f0bc09232.658bee3107b5e483.b213af8e395d5f57 - 48c8a8908fdfe46f.0d0199929791fedc.7fa8fcd1b080fd69.b63a9c51990b3a82 -@@ -27519,12 +27519,12 @@ VSQRTSS_128(reg) - 9bd1519fd31ea5d3.b631e2da8d69e480.fb3a15911d9440b1.90b544964f4da2a4 - 1ea2f7f1dcf8a8f3 - after -- 0000000000000000.0000000000000000.7fa8fcd1b080fd69.b63a9c51ffc00000 -+ a7c76e3b0fc85a5c.6638d81f0bc09232.658bee3107b5e483.b213af8e395d5f57 - 48c8a8908fdfe46f.0d0199929791fedc.7fa8fcd1b080fd69.b63a9c51990b3a82 -- 7a07f5e3f2783f5d.de651dd70f70dbe8.3d1f60772e460894.b6d74faf98026637 -+ 9bd1519fd31ea5d3.b631e2da8d69e480.fb3a15911d9440b1.90b544964f4da2a4 - 9bd1519fd31ea5d3.b631e2da8d69e480.fb3a15911d9440b1.90b544964f4da2a4 - 1ea2f7f1dcf8a8f3 --VSQRTSS_128(mem) -+VMOVDQU_GtoE_256(mem) - before - 3d68e5ac5b0f3550.0571b82fcf5d527d.723163873089d6d1.1545188918f5e36b - c9d589b3e79f05e8.1535270181c28406.ec311ccb12db6d06.e78e63cdbbf62b6f -@@ -27532,13 +27532,13 @@ VSQRTSS_128(mem) - 99cfe35598585d78.98550a18782b6268.8d6027c4044779ce.2206c6e66b059c04 - 44cdd593b02b3dec - after -- 3d68e5ac5b0f3550.0571b82fcf5d527d.723163873089d6d1.1545188918f5e36b -+ 9fb35ff29db3d4e7.2868998085d8751b.01fd8a904f6c654c.cd60f4c8a3225569 - c9d589b3e79f05e8.1535270181c28406.ec311ccb12db6d06.e78e63cdbbf62b6f -- 0000000000000000.0000000000000000.ec311ccb12db6d06.e78e63cd2c316887 -+ 9fb35ff29db3d4e7.2868998085d8751b.01fd8a904f6c654c.cd60f4c8a3225569 - 99cfe35598585d78.98550a18782b6268.8d6027c4044779ce.2206c6e66b059c04 - 44cdd593b02b3dec - --VSQRTPS_128(reg) -+VCVTPS2PD_256(reg) - before - 8e021d3b0d2174cf.94f491c8f4995dc8.c2497635f6488798.6d2871524c7866b9 - 5cee9b4a1f727d57.6cf0e637ce828f02.0390da439aba1f57.7b1fe325440ce839 -@@ -27547,11 +27547,11 @@ VSQRTPS_128(reg) - 571b037d608c41eb - after - 8e021d3b0d2174cf.94f491c8f4995dc8.c2497635f6488798.6d2871524c7866b9 -- 0000000000000000.0000000000000000.ffc000001f25aea5.ffc00000233f2680 -- 09e04a2d81ab9430.fd8d5d8f4220b153.b57630ae000d6753.9412f92b070eba79 -+ 5cee9b4a1f727d57.6cf0e637ce828f02.0390da439aba1f57.7b1fe325440ce839 -+ 3ea8eedc60000000.c0b9d366a0000000.ba99a609e0000000.be515354c0000000 - f323264ed057f407.239972ba6b7e7de7.354776e3c5ce9b35.94cd304fb28a9aa6 - 571b037d608c41eb --VSQRTPS_128(mem) -+VCVTPS2PD_256(mem) - before - b9caeea12e216e75.75022b1ba702d988.badea1a665a8afe9.df4ea84c8588f6ac - 96a46da83755db70.eacb56fea238815e.9e29673e4daa0586.0fd9c057dac7b562 -@@ -27560,12 +27560,12 @@ VSQRTPS_128(mem) - 5c814c757b1da1b9 - after - b9caeea12e216e75.75022b1ba702d988.badea1a665a8afe9.df4ea84c8588f6ac -- 0000000000000000.0000000000000000.ffc000005292f128.ffc00000ffc00000 -- ca77fc7c97324607.b0c8a1655f862636.ab463f6d3e9139e9.2132bb6f63181403 -+ 96a46da83755db70.eacb56fea238815e.9e29673e4daa0586.0fd9c057dac7b562 -+ bf5bd434c0000000.44b515fd20000000.c3e9d50980000000.b8b11ed580000000 - 310d180b6bc66867.21460abb777805bc.bd00a5215569083f.71a696ffb9064f3d - 5c814c757b1da1b9 - --VSQRTPS_128(reg) -+VCVTPS2PD_256(reg) - before - 3c0fda3c42ea4726.a7333c3fcf1c00bb.9b918c6c88985a9b.b0251545ad3c2eb4 - 6d9b3ac0adf87d2e.08b4e406de41c830.79f424e42e746080.607f0bc563186673 -@@ -27574,11 +27574,11 @@ VSQRTPS_128(reg) - 75c9eca6cd56d828 - after - 3c0fda3c42ea4726.a7333c3fcf1c00bb.9b918c6c88985a9b.b0251545ad3c2eb4 -- 0000000000000000.0000000000000000.2b1bddc1218b2d98.ffc00000ffc00000 -- 4d736a6d55d47f7d.2f5e8c4ab4407df2.16bdcc8f03975516.a9db048e92096da9 -+ 6d9b3ac0adf87d2e.08b4e406de41c830.79f424e42e746080.607f0bc563186673 -+ c1e6d05b20000000.bcd1ce4140000000.44e0cf7140000000.42e33ff020000000 - 37e165afd90888c1.fafbb0f96e25db2c.cf3682d9a68e720a.67067b8a5719ff81 - 75c9eca6cd56d828 --VSQRTPS_128(mem) -+VCVTPS2PD_256(mem) - before - b1f3d3cf11ccb3c9.873227f3d222d5a3.4459cdfe27fd9d0a.01ad412eb1e4f607 - f64fadef3e854d91.99b2aca3deaea1d2.e9425e45fcd380ba.066c05fbc0251bba -@@ -27587,12 +27587,12 @@ VSQRTPS_128(mem) - a656496221e5aecd - after - b1f3d3cf11ccb3c9.873227f3d222d5a3.4459cdfe27fd9d0a.01ad412eb1e4f607 -- 0000000000000000.0000000000000000.41ec219d33b42c70.2094eb06ffc00000 -- 20a8f5f4708f61ac.c9adf12d99372af8.c483dfba08b34066.3cc0cbaa70de1ecf -+ f64fadef3e854d91.99b2aca3deaea1d2.e9425e45fcd380ba.066c05fbc0251bba -+ 408b39bfc0000000.3cffb3a140000000.3835a825c0000000.be3c9ec0e0000000 - 0acb26c9c4f6ad46.736ff0fb9e49aac1.b3e8cc4968aa993a.fdf48da95c9a3bf1 - a656496221e5aecd - --VSQRTPS_128(reg) -+VCVTPS2PD_256(reg) - before - 9330fa435a4cb20e.9285bf5956c4eb89.f243a77b89705eda.913ca2df37c34663 - 21d09db7a45a8461.929f39924107d8a4.a4771218f73981ef.394ddc66920b040d -@@ -27601,11 +27601,11 @@ VSQRTPS_128(reg) - 8ddebbe1ff6ffac6 - after - 9330fa435a4cb20e.9285bf5956c4eb89.f243a77b89705eda.913ca2df37c34663 -- 0000000000000000.0000000000000000.ffc00000ffc00000.ffc00000ffc00000 -- aa802c2a9a9b5f72.e8e8125fa1cb2fc1.e4552b3e843050ab.89e5f6cc948c8f63 -+ 21d09db7a45a8461.929f39924107d8a4.a4771218f73981ef.394ddc66920b040d -+ 39c55e0b00000000.c15be0f760000000.437a4d9f60000000.434a945240000000 - 8b8da508d99c81ec.6f2bc5ac931bae0d.0e2af058cadf07bb.5bd26cfb5a54a292 - 8ddebbe1ff6ffac6 --VSQRTPS_128(mem) -+VCVTPS2PD_256(mem) - before - f9d65d69a0e8532a.204303bdfce8247c.0233ce6632030fb3.7d425cd568d4e2cb - 7d85d07e58cb69eb.c5ed42b59f0c84ce.7fcea9779b8f0ee0.8fe96b1ef89a1d86 -@@ -27614,12 +27614,12 @@ VSQRTPS_128(mem) - 272e43006e4d6275 - after - f9d65d69a0e8532a.204303bdfce8247c.0233ce6632030fb3.7d425cd568d4e2cb -- 0000000000000000.0000000000000000.20d68c0638b72bd6.5e5f0ff9542512ec -- f3b98f0e4324f734.d6d95f5c5f92df8d.c0c6d2cce9cc69bf.9e6a19a016bef399 -+ 7d85d07e58cb69eb.c5ed42b59f0c84ce.7fcea9779b8f0ee0.8fe96b1ef89a1d86 -+ 384679ccc0000000.3e4061f660000000.47a84b9aa0000000.451a9c5960000000 - 393c17047e00ba32.af51541fd8086f65.a2e8c65239c5da7d.081363c75fcba1af - 272e43006e4d6275 - --VSQRTPS_256(reg) -+VCVTTPS2DQ_128(reg) - before - 5908b7b5e0d17396.29dce24c256a6e10.aca21f68a5fa7103.020000f3a6871e46 - f8edbb5450e210bf.a0636ed3536fcefb.2918bba562f32113.bad9fc9d4d1cf045 -@@ -27628,11 +27628,11 @@ VSQRTPS_256(reg) - 91ea5603b2501943 - after - 5908b7b5e0d17396.29dce24c256a6e10.aca21f68a5fa7103.020000f3a6871e46 -- 50d02d144cbd9ffb.5d8e4e9131c64a5e.ffc00000ffc00000.ffc000004488bb19 -- 622949485a0c759c.7b9e36832419971f.82ff2540ac7fba40.a741373b49920ea7 -+ f8edbb5450e210bf.a0636ed3536fcefb.2918bba562f32113.bad9fc9d4d1cf045 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f1075ffc9cdbded8.9459b649b57785a7.13a357a71e2a7937.a6022bb9b7f53298 - 91ea5603b2501943 --VSQRTPS_256(mem) -+VCVTTPS2DQ_128(mem) - before - 45c3330556af7ed4.02d5f7deafdc8620.c85f6a12219254c0.38504f4555819aa4 - 9e5a3eabc01f1e79.f2dd1059319baa20.f37ecfc98578bf95.4d510886ed0f5832 -@@ -27641,12 +27641,12 @@ VSQRTPS_256(mem) - c34a92530d7e9e5e - after - 45c3330556af7ed4.02d5f7deafdc8620.c85f6a12219254c0.38504f4555819aa4 -- 429e116c4b15e0c4.21257e35ffc00000.ffc000003088dbe5.3be6ed4e4a80ccae -- 797af4e10caab55b.1b6ca3d9bea28583.f2806059fc348353.adf37ed68061f18e -+ 9e5a3eabc01f1e79.f2dd1059319baa20.f37ecfc98578bf95.4d510886ed0f5832 -+ 0000000000000000.0000000000000000.fffc825800000000.0000000080000000 - b0f1cf93555fffa9.daceadcbf17f55f5.9f3299b0a3d35c26.b682ada1ad029f63 - c34a92530d7e9e5e - --VSQRTPS_256(reg) -+VCVTTPS2DQ_128(reg) - before - 309728593f612c2b.20894daeb747b78d.8c4f2b9966be5424.d760f6b995600539 - 58b56b1ddc388375.a510e91c4f709a33.8b3b18b0bae9beb9.76d6f460efe73cb9 -@@ -27655,11 +27655,11 @@ VSQRTPS_256(reg) - 55df864181d3827c - after - 309728593f612c2b.20894daeb747b78d.8c4f2b9966be5424.d760f6b995600539 -- ffc00000ffc00000.2d66d38a3cab5ac6.3a28bcb9ffc00000.4bef7f1affc00000 -- 99ef570d828ee0e9.1b5020cb39e564c9.34de707d888fd163.58600e91cc74bad1 -+ 58b56b1ddc388375.a510e91c4f709a33.8b3b18b0bae9beb9.76d6f460efe73cb9 -+ 0000000000000000.0000000000000000.8000000080000000.80000000000943ea - 4e92e993cdf07e32.5e166ca690b3d078.e383306a6d39c7cc.59c9bf3849143eae - 55df864181d3827c --VSQRTPS_256(mem) -+VCVTTPS2DQ_128(mem) - before - 286cdc9990bb4466.d2eb1b1d58e99bfd.4a2e4b9870e59c6f.f47752e50575dda0 - ae3d3f2a93da3d99.8344eb16c00571f5.bb63388ff68782d8.c306d459eace4f8d -@@ -27668,12 +27668,12 @@ VSQRTPS_256(mem) - 3c4d6dc28b012297 - after - 286cdc9990bb4466.d2eb1b1d58e99bfd.4a2e4b9870e59c6f.f47752e50575dda0 -- 33f63eb8ffc00000.ffc000004c2cec04.44d33bc7582b6f8d.ffc00000227ae1b7 -- c31e29e2a63c2c40.bbe954ea9fd13cc7.8d83af763da63edf.ac7cb131bbd0583c -+ ae3d3f2a93da3d99.8344eb16c00571f5.bb63388ff68782d8.c306d459eace4f8d -+ 0000000000000000.0000000000000000.002b92e680000000.8000000000000000 - 43db18abe4ebcb88.d828530594d83a1f.9c582d39624d8eb1.0b25e5db1108355c - 3c4d6dc28b012297 - --VSQRTPS_256(reg) -+VCVTTPS2DQ_128(reg) - before - 9b3f4353c2475a99.0940887369f5d79d.344ce2d339a6a5a8.c3af2cc580882c7a - 844865f854671b10.f318f32552660caa.2da0ffc02ac7ba0f.e0552a04b464d566 -@@ -27682,11 +27682,11 @@ VSQRTPS_256(reg) - 8c0ff132e73167af - after - 9b3f4353c2475a99.0940887369f5d79d.344ce2d339a6a5a8.c3af2cc580882c7a -- 49988c6dffc00000.ffc00000ffc00000.2e78b81b222047f0.ffc000002cade736 -- 53b5ce1eddec9ea5.dc30d7adbb4825dc.1d71a53804c8b400.ce13a2e319ec44a0 -+ 844865f854671b10.f318f32552660caa.2da0ffc02ac7ba0f.e0552a04b464d566 -+ 0000000000000000.0000000000000000.8000000080000000.80000000ff53c9ac - 64d07b31f8632207.a054aff7bea9df5e.610bd0a76335d126.69b8114fcb2c3654 - 8c0ff132e73167af --VSQRTPS_256(mem) -+VCVTTPS2DQ_128(mem) - before - 15e3c07a890693dd.13e5669e4257e2e0.1a50f7ef7a95f65d.56ba7d7ae1984b2d - df01f912ccb77509.bc428dd0565419dc.28f02b8108162604.56caa71b1d7f5ec3 -@@ -27695,12 +27695,12 @@ VSQRTPS_256(mem) - 3736eb1351c08c8c - after - 15e3c07a890693dd.13e5669e4257e2e0.1a50f7ef7a95f65d.56ba7d7ae1984b2d -- 2aaabd82ffc00000.29ab5b7540eb16ce.2ce74ab95d0a8bf3.4b1a8068ffc00000 -- c53618e5cc51cb60.ba32eb32d0e603a8.a500c899873a2a81.be8749f8b0764891 -+ df01f912ccb77509.bc428dd0565419dc.28f02b8108162604.56caa71b1d7f5ec3 -+ 0000000000000000.0000000000000000.0000000080000000.8000000080000000 - a54b99e1a6df4e0e.6b007c324d9adef0.6c4c4924100dbffd.eb3c627c39074346 - 3736eb1351c08c8c - --VSQRTPD_128(reg) -+VCVTTPS2DQ_256(reg) - before - ffc2e128962d5f10.5a0ff9f1766dbd3e.2af93d3b69fbe45f.5b9f2a0cc299a1a7 - 9f2a4129a4d9f77d.bf4db3025708d21c.526928b9be9652a2.4cc6e73fb6ed8ba9 -@@ -27709,11 +27709,11 @@ VSQRTPD_128(reg) - cb2b20cb4104d77a - after - ffc2e128962d5f10.5a0ff9f1766dbd3e.2af93d3b69fbe45f.5b9f2a0cc299a1a7 -- 0000000000000000.0000000000000000.40c540ca1eddc713.2ebefa241c9f1346 -- 73ba068216509180.b2d043fe65bb4ad6.419c3b18ebf66465.1d8dfca70a123a2f -+ 9f2a4129a4d9f77d.bf4db3025708d21c.526928b9be9652a2.4cc6e73fb6ed8ba9 -+ 8000000000000000.0000000000000000.8000000000000000.0000000080000000 - d7c02c9d891e69c4.0d6625d2bd93e196.52de71c48aa75553.a8c0e632da166a66 - cb2b20cb4104d77a --VSQRTPD_128(mem) -+VCVTTPS2DQ_256(mem) - before - 6099265e5be83c96.2787b0e798d0baf6.aed9d66a7a9b5288.e07ac72937366219 - 45d874d745cf56e7.bf5a8cccdff1c1c2.6ff6d0b3b9df5bd9.49be37b48f2ec762 -@@ -27722,12 +27722,12 @@ VSQRTPD_128(mem) - 36690469ad055c0b - after - 6099265e5be83c96.2787b0e798d0baf6.aed9d66a7a9b5288.e07ac72937366219 -- 0000000000000000.0000000000000000.fff8000000000000.fff8000000000000 -- 54b287221bc4e198.fb86beb9fb0dbad3.2d899197956bb5b5.e7f4bfcf2d1bc0db -+ 45d874d745cf56e7.bf5a8cccdff1c1c2.6ff6d0b3b9df5bd9.49be37b48f2ec762 -+ 8000000080000000.0000000000000000.0000000080000000.8000000000000000 - 6af4da2bf8d498d6.3757411888b1e1d6.c55e95042b4c1f47.18695ae8ae89882f - 36690469ad055c0b - --VSQRTPD_128(reg) -+VCVTTPS2DQ_256(reg) - before - 9f40bac0c61b781b.646ae9dff80a38cd.cf19125721687176.114056e5968d53bc - ad3a76589755170a.1ce0302838727da8.1f182be162bfa760.eefc5126f23b0e3f -@@ -27736,11 +27736,11 @@ VSQRTPD_128(reg) - 84457a61c945c0d9 - after - 9f40bac0c61b781b.646ae9dff80a38cd.cf19125721687176.114056e5968d53bc -- 0000000000000000.0000000000000000.fff8000000000000.3ca646b848f12e6e -- bda2369db9417785.6f222bf4d3182394.839f8a22e840bf3f.395f03b35d600cfd -+ ad3a76589755170a.1ce0302838727da8.1f182be162bfa760.eefc5126f23b0e3f -+ 00000000ffc50bb2.0000000080000000.800000003ebd7040.fd30622080000000 - 2cc5f5fbca6bd138.39fb572de609e5bd.57fc2a864e7af5c1.cc33e778f00b0922 - 84457a61c945c0d9 --VSQRTPD_128(mem) -+VCVTTPS2DQ_256(mem) - before - 3d60365a041cee4f.54f0afde665d64ce.57392fc18c50804e.f779077931f6848f - d352994fbc9b4eaf.926d61b228a56af3.a3a62f9be2fab073.bf631e672c42a958 -@@ -27749,12 +27749,12 @@ VSQRTPD_128(mem) - 9ea6904cc979f242 - after - 3d60365a041cee4f.54f0afde665d64ce.57392fc18c50804e.f779077931f6848f -- 0000000000000000.0000000000000000.4b941311216c4fe8.fff8000000000000 -- 22e61e2d0dcf9e27.428906e3accf2054.fa0fd3a603123059.0a0669bcdce9a0c6 -+ d352994fbc9b4eaf.926d61b228a56af3.a3a62f9be2fab073.bf631e672c42a958 -+ 0000000000000000.8000000080000000.8000000000000000.8000000000000000 - 06e741de14c398e0.c18f9ade8f65c29d.384098d00ca4be2c.36aee6e4dc78a485 - 9ea6904cc979f242 - --VSQRTPD_128(reg) -+VCVTTPS2DQ_256(reg) - before - 9d3c635e3e7bc6a9.5b227e50ec83f808.69cd190d6cf58c7a.3904f80418bd1318 - 91ba5c88d7075c65.fd63526eb21c7ccb.978d7fdee00bb996.d929712f4468ee48 -@@ -27763,11 +27763,11 @@ VSQRTPD_128(reg) - 0bce45aa9c4ef22b - after - 9d3c635e3e7bc6a9.5b227e50ec83f808.69cd190d6cf58c7a.3904f80418bd1318 -- 0000000000000000.0000000000000000.fff8000000000000.fff8000000000000 -- d56d753531abef23.c87637248299de54.a71cc9bb8732869d.f4797e3babb109e8 -+ 91ba5c88d7075c65.fd63526eb21c7ccb.978d7fdee00bb996.d929712f4468ee48 -+ fffffaf380000000.0000000080000000.8000000080000000.8000000080000000 - c4a1acd0e8f2bc8f.9826ab5d7606dbd0.f5c7f212fbf62e3d.66c29c156aa42225 - 0bce45aa9c4ef22b --VSQRTPD_128(mem) -+VCVTTPS2DQ_256(mem) - before - bf6af7e45dbb3826.bca2fdc79769fe54.49412a07ad702f6b.ddd7f64edbe3ef1f - 5e612db1caf5ae40.17bc6285da9bf31f.b7912e0e40e19550.bb9bd1dbc08603f2 -@@ -27776,12 +27776,12 @@ VSQRTPD_128(mem) - b11046a0b0268dbe - after - bf6af7e45dbb3826.bca2fdc79769fe54.49412a07ad702f6b.ddd7f64edbe3ef1f -- 0000000000000000.0000000000000000.44976fa865608029.fff8000000000000 -- c38164fcfe0a11a8.333bd8764e14d59b.bee4355c4e68caac.eb5e7f25496aa760 -+ 5e612db1caf5ae40.17bc6285da9bf31f.b7912e0e40e19550.bb9bd1dbc08603f2 -+ 0000000080000000.0000000000000000.000c12a000000000.8000000080000000 - cc9516b016061d88.6a6a5c078f61e175.3a04badef00e8aaa.c96bfd980f1b1615 - b11046a0b0268dbe - --VSQRTPD_256(reg) -+VCVTDQ2PS_128(reg) - before - ff9756a9c8164807.5468c1bb2ef38d0d.1996e9a2380d5358.07bd398044e19177 - 0f4d2920f278839c.37c7e00861df1e62.9d0b7cb4e5a466f1.00dd2e2f66ed9a3f -@@ -27790,11 +27790,11 @@ VSQRTPD_256(reg) - 9397abbbb4d91e2d - after - ff9756a9c8164807.5468c1bb2ef38d0d.1996e9a2380d5358.07bd398044e19177 -- 3eb62d11c2db8575.48363f774a86a3d0.48025b63a53f95ca.218f8a1168cc6678 -- 3d7ebc6fcbd77928.507eef83cbd68cb4.50150faa33b357ec.032f15d5713d622d -+ 0f4d2920f278839c.37c7e00861df1e62.9d0b7cb4e5a466f1.00dd2e2f66ed9a3f -+ 0000000000000000.0000000000000000.cee1febece84753a.cda40ca5cefa44b7 - e4750a04eebf6757.7d596a1989e2932f.8f00a0eebdc562f4.eb7e6b6082dda46e - 9397abbbb4d91e2d --VSQRTPD_256(mem) -+VCVTDQ2PS_128(mem) - before - d94751d2233e8a97.62800f4af7bc89d6.9924ceb4b611eefe.b7172aee2066c2b6 - 9858da90ec17a5d7.12e9c7ac835b1b51.7faa96416f6f5a4e.22a8a915f723b4dd -@@ -27803,12 +27803,12 @@ VSQRTPD_256(mem) - 9326bdab4f754d6d - after - d94751d2233e8a97.62800f4af7bc89d6.9924ceb4b611eefe.b7172aee2066c2b6 -- fff8000000000000.5136ab6c1f1957f5.fff8000000000000.fff8000000000000 -- ab96c0e32a702a1a.4ffd2e982d275873.0db83eadcf07934a.2dfd19cedf877416 -+ 9858da90ec17a5d7.12e9c7ac835b1b51.7faa96416f6f5a4e.22a8a915f723b4dd -+ 0000000000000000.0000000000000000.cecdb663ce93dc22.ce91d1aa4e019b0b - f0cf81b7fa56d78c.7708417992ad7de9.1e1b42e2f2e5541f.34637787731e3e0d - 9326bdab4f754d6d - --VSQRTPD_256(reg) -+VCVTDQ2PS_128(reg) - before - a792e9a61117dee3.41cd98f678d46658.e556fbbb4e78c65f.8d9d1ecef5155af8 - caf3f7e552902d1a.7c5e828dbef693ab.f43358cafc146e80.380b4f5cf4a46102 -@@ -27817,11 +27817,11 @@ VSQRTPD_256(reg) - 31d3b20aedfed2fc - after - a792e9a61117dee3.41cd98f678d46658.e556fbbb4e78c65f.8d9d1ecef5155af8 -- 4cc2475e604ba05e.5d9e516328d917d8.216d9275765c6806.fff8000000000000 -- 5994e1d2b06d75bf.7b4cb968ebc91cb1.02eb5413380eb2f9.f93050780a9d2569 -+ caf3f7e552902d1a.7c5e828dbef693ab.f43358cafc146e80.380b4f5cf4a46102 -+ 0000000000000000.0000000000000000.4ed593d8cec01e63.cea44ac64ea818c3 - b0c3a5dac739f47e.1b64bb741858bb95.6ac9ec009ff0ce75.adda9d0d540c6158 - 31d3b20aedfed2fc --VSQRTPD_256(mem) -+VCVTDQ2PS_128(mem) - before - 5fe90c58f17e3481.2bca3d6a3281e402.3972039c64b02d84.871a1bfecc49fea1 - 14e626e47d994212.26f6a8ec8dcf81f8.af420dcbe8dc2da9.b72bdd7a5ca27d28 -@@ -27830,12 +27830,12 @@ VSQRTPD_256(mem) - 49cc6e13712f319c - after - 5fe90c58f17e3481.2bca3d6a3281e402.3972039c64b02d84.871a1bfecc49fea1 -- 4fec4fc13d0a3c20.35dcfa285911e2cc.3cb0fa2a7a6727d1.fff8000000000000 -- 2d977c9aac5ab9db.fd93dfce75b2090b.5b9f55efc3e87931.54452edfea8988b7 -+ 14e626e47d994212.26f6a8ec8dcf81f8.af420dcbe8dc2da9.b72bdd7a5ca27d28 -+ 0000000000000000.0000000000000000.4e65c80e4ec9605b.cef1cbc8ce4ed805 - 84c88a679bcd550a.0ceddf7b85b3b6e8.175658f30ee0cb47.bbb70a98128a5bfa - 49cc6e13712f319c - --VSQRTPD_256(reg) -+VCVTDQ2PS_128(reg) - before - 58cf55bba306474a.f644cc3566fed2c8.ae4fa55f5a60c43b.c03491c3e7d1e018 - 450ebbfc439bd9b0.60d9bff227faeb44.41062ce68f4471af.32037c4b6ac673d0 -@@ -27844,11 +27844,11 @@ VSQRTPD_256(reg) - d713426c02387e16 - after - 58cf55bba306474a.f644cc3566fed2c8.ae4fa55f5a60c43b.c03491c3e7d1e018 -- 56e1b6a4b6de3804.fff8000000000000.30266da7b962dc97.44c04a106d63c486 -- 6dd39c42ee782379.9c51de88fdcd5da8.205f707cc1ebf7f1.49909577b2cc419a -+ 450ebbfc439bd9b0.60d9bff227faeb44.41062ce68f4471af.32037c4b6ac673d0 -+ 0000000000000000.0000000000000000.ceb0b723cee63ad9.cdeacd3ece1047e5 - 2a6bf5f93f2b6051.8779a5e50181e420.a7a46e8d8ce293ac.e2a65833dbee06a3 - d713426c02387e16 --VSQRTPD_256(mem) -+VCVTDQ2PS_128(mem) - before - 05a2ce0c43b76420.d922c08dd240cde5.fd1d90f452243bda.322220858ab4818d - 481e7801b97575ed.d644fb6b4441a6e1.da091ca109c120ff.1c2584d059eefc40 -@@ -27857,12 +27857,12 @@ VSQRTPD_256(mem) - b442afddc27f19f9 - after - 05a2ce0c43b76420.d922c08dd240cde5.fd1d90f452243bda.322220858ab4818d -- 22c887dcf3a6a5ba.fff8000000000000.fff8000000000000.390815a49a3cebd5 -- 7c54bc3580816da8.7e1ca1fd30bc26f1.fa09c3d844654cbe.c3f895db951b4170 -+ 481e7801b97575ed.d644fb6b4441a6e1.da091ca109c120ff.1c2584d059eefc40 -+ 0000000000000000.0000000000000000.cc389bc34ea44878.4e488882ceea96fd - 7d101796b5e4077e.2bf8afb1333d8bc0.39e803851f1b7e41.82e94f10d9c78cc9 - b442afddc27f19f9 - --VRSQRTSS_128(reg) -+VCVTDQ2PS_256(reg) - before - b750b0adebce23aa.271e040f73ac019a.3a221ff2e84e0efa.73745794b5ef70b4 - e55f4eebf040e788.5649ff8cd7e51529.07e7ef2bec7eee4d.84773cf223eee045 -@@ -27870,12 +27870,12 @@ VRSQRTSS_128(reg) - 36b0516601be8c7e.b32a0f42ffd67d4f.4b729c3a4f64b0e8.9b15a547f49a246b - 5948221690607159 - after -- 0000000000000000.0000000000000000.07e7ef2bec7eee4d.84773cf2ffc00000 -+ b750b0adebce23aa.271e040f73ac019a.3a221ff2e84e0efa.73745794b5ef70b4 - e55f4eebf040e788.5649ff8cd7e51529.07e7ef2bec7eee4d.84773cf223eee045 -- 9cbb85056e61a140.e65f84f9fc99ff57.ee931acadb566562.48be2c898423871d -+ 4e5ac1464bdf463f.ce99abe1ca260ac4.4e96e5384e9ec962.cec9d4b5cd365db9 - 36b0516601be8c7e.b32a0f42ffd67d4f.4b729c3a4f64b0e8.9b15a547f49a246b - 5948221690607159 --VRSQRTSS_128(mem) -+VCVTDQ2PS_256(mem) - before - 5e231fe4747f2b13.1189af7a44e3e5ed.98781d53fba7493e.7acf72e7e6330b89 - 8571199cba060ec6.879499add35ae83a.731329180d19204f.d7f8973d3c4fb2f1 -@@ -27885,11 +27885,11 @@ VRSQRTSS_128(mem) - after - 5e231fe4747f2b13.1189af7a44e3e5ed.98781d53fba7493e.7acf72e7e6330b89 - 8571199cba060ec6.879499add35ae83a.731329180d19204f.d7f8973d3c4fb2f1 -- 0000000000000000.0000000000000000.731329180d19204f.d7f8973dffc00000 -+ 4ebc46404ee8fe56.4d8c4d7c4e89c7cc.cecf0fc5cc8b16d8.4ef59ee6cdce67a4 - ae9af17ae3763dc6.b86b07214774db1d.78622b6fe10ddd89.8bd9be9593a0d2c9 - 9a2ab86eccedc491 - --VRSQRTSS_128(reg) -+VCVTDQ2PS_256(reg) - before - 4676f2a134b6f1cf.670cc778fc77026b.2ad08139642d430a.5aaf1ad8dba83c0b - ed096698668a9632.b2218910e90fe0b9.a99679213d6a4586.a079f7a65a13965e -@@ -27897,12 +27897,12 @@ VRSQRTSS_128(reg) - 9932f287997c3712.7269c2bfad31d5fe.3974d00d959e05d5.cdb86b1e5a8a292e - 6ac4faa012aedb01 - after -- 0000000000000000.0000000000000000.a99679213d6a4586.a079f7a6218a3000 -+ 4676f2a134b6f1cf.670cc778fc77026b.2ad08139642d430a.5aaf1ad8dba83c0b - ed096698668a9632.b2218910e90fe0b9.a99679213d6a4586.a079f7a65a13965e -- ea2e12c1fef2ef64.6da7b42ec54992db.8f08ea446fb71c3a.288d3ec47b5ba6b1 -+ cecd9a1bcecd0792.4ee4d385cea59c54.4e65d340ced4c3f4.ce491e544eb51452 - 9932f287997c3712.7269c2bfad31d5fe.3974d00d959e05d5.cdb86b1e5a8a292e - 6ac4faa012aedb01 --VRSQRTSS_128(mem) -+VCVTDQ2PS_256(mem) - before - dd7d6836bfd37857.55620056d2b3ace7.9f3231adbcd4654d.032427ea4cad3c01 - 00b130cc7e04bb5c.7c083a9946248890.cfcf7de60f3dfdf5.4a65ec462f70fd6b -@@ -27912,11 +27912,11 @@ VRSQRTSS_128(mem) - after - dd7d6836bfd37857.55620056d2b3ace7.9f3231adbcd4654d.032427ea4cad3c01 - 00b130cc7e04bb5c.7c083a9946248890.cfcf7de60f3dfdf5.4a65ec462f70fd6b -- 0000000000000000.0000000000000000.cfcf7de60f3dfdf5.4a65ec4638dc1800 -+ ce0a0a5fce80590f.4eaac401ce35314c.cec19b9dce865735.4c4909fa4e995a78 - cab6bea8a0ba2621.77e81f314de1670d.a7b598e5ee9238ff.bacaac2beb3e0ba7 - 9c86a18cfc63d1d1 - --VRSQRTSS_128(reg) -+VCVTDQ2PS_256(reg) - before - 6a02f21da96b11e9.291f7cc73b58c53a.04bbc25c1945e238.07966084b39653b8 - 808b9d488ee2069b.a83285955832fbb1.6a3481ac8f13b5e8.da7af41d2c91667a -@@ -27924,12 +27924,12 @@ VRSQRTSS_128(reg) - f4f5ee20724e017a.7a8665f286cb1c6a.354c3f6ce91b5281.4a7f71eda79967c9 - 9f3751fce2beccad - after -- 0000000000000000.0000000000000000.6a3481ac8f13b5e8.da7af41d24f3c000 -+ 6a02f21da96b11e9.291f7cc73b58c53a.04bbc25c1945e238.07966084b39653b8 - 808b9d488ee2069b.a83285955832fbb1.6a3481ac8f13b5e8.da7af41d2c91667a -- 3a6e9d7b4854ed92.24bb5400125484b2.07a1568e4bd71bc7.fd2fd09c748d2e71 -+ cd30a11e4ee49c03.4ef50ccccef269c7.4e5530fecdb7256c.4e94fee4ceb0cd30 - f4f5ee20724e017a.7a8665f286cb1c6a.354c3f6ce91b5281.4a7f71eda79967c9 - 9f3751fce2beccad --VRSQRTSS_128(mem) -+VCVTDQ2PS_256(mem) - before - d623eeb6410a1a49.0a6d8ca5a95b8001.845e3559cfa27e05.528237b4076d94c3 - cc0fc405de880dcb.d82173758907a4d1.1f103e200ae667af.b88f3bd13e591d39 -@@ -27939,11 +27939,11 @@ VRSQRTSS_128(mem) - after - d623eeb6410a1a49.0a6d8ca5a95b8001.845e3559cfa27e05.528237b4076d94c3 - cc0fc405de880dcb.d82173758907a4d1.1f103e200ae667af.b88f3bd13e591d39 -- 0000000000000000.0000000000000000.1f103e200ae667af.b88f3bd15b84e000 -+ ce2770454e821435.4d26d8cacead4900.cef74395ce417608.4ea5046f4cedb298 - 66160716494bd12b.0c710ea5b16ecdfe.7933f07ec4e2bedd.d35d53396d2bf86f - 3fb6605d9c2ac187 - --VRSQRTPS_128(reg) -+VCVTTPD2DQ_128(reg) - before - 6616690655f3c184.c1ca6db04da91a62.29a5b9de32414ab2.ef3b90ed7bb3a3bb - a2c968a13511360f.4badfb900168f82e.6f459e13cbe35d61.664c5b6c931fff57 -@@ -27952,11 +27952,11 @@ VRSQRTPS_128(reg) - 69b58f833d88335a - after - 6616690655f3c184.c1ca6db04da91a62.29a5b9de32414ab2.ef3b90ed7bb3a3bb -- 0000000000000000.0000000000000000.4265e80052416000.ffc000004a980000 -- 501b5b98d8105ad6.e08c2da2809626ba.399eb7ae19e042b5.ba34cbe829358ddd -+ a2c968a13511360f.4badfb900168f82e.6f459e13cbe35d61.664c5b6c931fff57 -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - cc583d58d97d6a85.5c337fd2e63e6233.e3fb021cb7c4345a.c7be5e4b58fe0b7a - 69b58f833d88335a --VRSQRTPS_128(mem) -+VCVTTPD2DQ_128(mem) - before - 7de6db7af4dec1a8.72cb0a4ed4e3a1c8.9b6d6e0c516d65c4.c8aa7aca411c71fd - dd1dbc1e980d7391.9fc2bee466cf3c4a.7908753cda2eee9a.46f51c225574324a -@@ -27965,12 +27965,12 @@ VRSQRTPS_128(mem) - e77dcf66d9edf2e2 - after - 7de6db7af4dec1a8.72cb0a4ed4e3a1c8.9b6d6e0c516d65c4.c8aa7aca411c71fd -- 0000000000000000.0000000000000000.ffc000003684e800.ffc000003ea3c000 -- 6526b05a45200340.ad8756882acb77b7.d2ce104e9f8db7e1.b82ae2928c56b6ec -+ dd1dbc1e980d7391.9fc2bee466cf3c4a.7908753cda2eee9a.46f51c225574324a -+ 0000000000000000.0000000000000000.0000000000000000.0000000080000000 - f3cc321a18232ee2.f967cda5bd658ebc.828dbc2ebc977ec4.7993ca8484503790 - e77dcf66d9edf2e2 - --VRSQRTPS_128(reg) -+VCVTTPD2DQ_128(reg) - before - 5c34eda326ba238d.62ddbe4a2c23b0a2.dfae1fa6ba29bc05.650ff3c94c57fc70 - 360420a70742053d.8e23d1d69e2b44ae.bba848f9bea23e3e.572133096bd9f010 -@@ -27979,11 +27979,11 @@ VRSQRTPS_128(reg) - 1eaefce83f66df65 - after - 5c34eda326ba238d.62ddbe4a2c23b0a2.dfae1fa6ba29bc05.650ff3c94c57fc70 -- 0000000000000000.0000000000000000.ffc000002d09f800.44f24000441d0800 -- cf3865de1911d6a0.536ce5aa8947a72f.e9a04509645c5012.348ef7dc362a14d1 -+ 360420a70742053d.8e23d1d69e2b44ae.bba848f9bea23e3e.572133096bd9f010 -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - 851db7b4f8b4cf60.8d8278b20a849554.c5e4104349e32e2d.d824bb2dc95525de - 1eaefce83f66df65 --VRSQRTPS_128(mem) -+VCVTTPD2DQ_128(mem) - before - e4f735f8b46afd8f.b20012963eb62f29.183105da3cedca47.abbea71108c4133c - 05cce14b456c3c8b.b32b72ee8aa330a8.cf47090f3b8e0134.f67b05e03e8a3ceb -@@ -27992,12 +27992,12 @@ VRSQRTPS_128(mem) - d6fca38dbdb5a56d - after - e4f735f8b46afd8f.b20012963eb62f29.183105da3cedca47.abbea71108c4133c -- 0000000000000000.0000000000000000.5319e80040bbd000.ffc000005aced800 -- 5df97fcd0d785883.e5ebd32976080f89.908ffe3c2474f748.0467271c86c2e4e6 -+ 05cce14b456c3c8b.b32b72ee8aa330a8.cf47090f3b8e0134.f67b05e03e8a3ceb -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - c74a8868299b0da3.a28b32b49e700877.36d4624c13aa67af.30ce07327cf649d7 - d6fca38dbdb5a56d - --VRSQRTPS_128(reg) -+VCVTTPD2DQ_128(reg) - before - 523cf698e5883552.218b7a09b4e01618.47598af99f67571f.9ce4b02d233c0f94 - ffdcfcc18ffd3433.4687cf9ccb53300e.319fd766147a372c.a08964ca7037a924 -@@ -28006,11 +28006,11 @@ VRSQRTPS_128(reg) - f1f3be41e211808c - after - 523cf698e5883552.218b7a09b4e01618.47598af99f67571f.9ce4b02d233c0f94 -- 0000000000000000.0000000000000000.ffc00000ffc00000.5070900053602800 -- 3b26b273579fdfbb.110b050e890117b0.baab15669a34e54b.1d90fb0f17a6f28b -+ ffdcfcc18ffd3433.4687cf9ccb53300e.319fd766147a372c.a08964ca7037a924 -+ 0000000000000000.0000000000000000.0000000000000000.0000000080000000 - 6167121adafb7297.60e498490bf5862b.3fc74165cc219c28.eec4efe83495a5f4 - f1f3be41e211808c --VRSQRTPS_128(mem) -+VCVTTPD2DQ_128(mem) - before - 00e7e3063d253d7e.cceb1a22b49c2973.0ddc023b6c3b3aab.1c4056cf46ce9a6e - f96eda2362de98f7.dafec5f77f0e40fa.f6c0c1cfc8e0ef5b.ad625010a5c619ca -@@ -28019,12 +28019,12 @@ VRSQRTPS_128(mem) - 30b4751636eaf817 - after - 00e7e3063d253d7e.cceb1a22b49c2973.0ddc023b6c3b3aab.1c4056cf46ce9a6e -- 0000000000000000.0000000000000000.584340002915b000.5113b0003bc98800 -- b65220856c474f22.e6eb1005daddf2d8.f55b50f13cef6167.4e782b94859555e7 -+ f96eda2362de98f7.dafec5f77f0e40fa.f6c0c1cfc8e0ef5b.ad625010a5c619ca -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 15603016786c1c2c.4b00f5b95e967cbb.e87b2b8de4754bfd.5bd0e3c881c88c72 - 30b4751636eaf817 - --VRSQRTPS_256(reg) -+VCVTTPD2DQ_256(reg) - before - 2971dceb3e87d681.f06485c4a159bc41.6787727daac5194d.a9eace8fdb7d6a47 - a25314b4382c625d.242a9e79041bea8c.94cd82bf57f4063a.1576b6e33d137a71 -@@ -28033,11 +28033,11 @@ VRSQRTPS_256(reg) - f4b7dd0402a3a5ec - after - 2971dceb3e87d681.f06485c4a159bc41.6787727daac5194d.a9eace8fdb7d6a47 -- ffc00000ffc00000.ffc00000ffc00000.4722d8005cd97000.5a3da0004b929800 -- f7a619dcbe64d756.8e7df423bcbd643a.301e21e904b17f2f.09e95d75274336a8 -+ a25314b4382c625d.242a9e79041bea8c.94cd82bf57f4063a.1576b6e33d137a71 -+ 0000000000000000.0000000000000000.0000000000000000.0000000080000000 - 84b6e8ce6cbc7219.082b05ade64ce477.95c64b694a87c0d8.5f104131b51a5b18 - f4b7dd0402a3a5ec --VRSQRTPS_256(mem) -+VCVTTPD2DQ_256(mem) - before - a4a9aed82aebd051.a5cf7bf8dfbf6f52.6ffe4b039dd2276e.2010fdaac70305e0 - 4cb42f9b4afd9772.b63cd0c5b2f909ac.9fc34411fd5ee84b.2e4a321817b089f4 -@@ -28046,12 +28046,12 @@ VRSQRTPS_256(mem) - fa88bca80c57ec2d - after - a4a9aed82aebd051.a5cf7bf8dfbf6f52.6ffe4b039dd2276e.2010fdaac70305e0 -- ffc0000049bc9800.ffc00000ffc00000.2735a000ffc00000.4f2a2000ffc00000 -- c6a2db387de5b77c.134ae2a182f67ed4.75466cc323f9e43b.19bee61fd51a89bf -+ 4cb42f9b4afd9772.b63cd0c5b2f909ac.9fc34411fd5ee84b.2e4a321817b089f4 -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - ef40309ae0afec9b.1745aef8ea430875.cb533d052bb1d76a.3eb9152b9dce40ee - fa88bca80c57ec2d - --VRSQRTPS_256(reg) -+VCVTTPD2DQ_256(reg) - before - a774d502be41c727.a35aaaaf8e68f1fa.20792e37876be33c.7eb535c430917d04 - a2cc5ea64e190d89.bebcc362a41b84c6.893260c8f4fb4dd5.6a3acfea4ea69134 -@@ -28060,11 +28060,11 @@ VRSQRTPS_256(reg) - 1c8a42065a96be03 - after - a774d502be41c727.a35aaaaf8e68f1fa.20792e37876be33c.7eb535c430917d04 -- 3b4390003305a000.5119180040465000.ffc00000ffc00000.295c7800ffc00000 -- 47db53fe586afcff.1c32f99f3dd55e2a.aebc3f18ce7e80eb.6bac8765a2fbd026 -+ a2cc5ea64e190d89.bebcc362a41b84c6.893260c8f4fb4dd5.6a3acfea4ea69134 -+ 0000000000000000.0000000000000000.8000000000000000.8000000080000000 - f2ecae7879c1ce34.9988c75275a13e53.ea62c894b080b92a.5dd8d91f479cf607 - 1c8a42065a96be03 --VRSQRTPS_256(mem) -+VCVTTPD2DQ_256(mem) - before - 848e3d05f7f4e646.ff4c6d7e4ca8c0d4.1189a9686a8bde6d.9b72f5a6378d3340 - 71b0460838c228fb.ca478a7e6ead0e8c.60021bcb35a0fca3.1b36c4bcfe322cd7 -@@ -28073,12 +28073,12 @@ VRSQRTPS_256(mem) - 15b7cf48ee255f5d - after - 848e3d05f7f4e646.ff4c6d7e4ca8c0d4.1189a9686a8bde6d.9b72f5a6378d3340 -- ffc00000ffc00000.ffc0000038dee800.5676d80029f4f000.ffc000004373c000 -- bfbbd9fb3c0c404e.b02903e37a5cf308.62bf9a68f4eb5122.c8fb3041a1fbde9b -+ 71b0460838c228fb.ca478a7e6ead0e8c.60021bcb35a0fca3.1b36c4bcfe322cd7 -+ 0000000000000000.0000000000000000.0000000080000000.0000000000000000 - 4a7c72ca1cdfec6c.0b3ed4190d3facf4.f38ca12cc3789c15.fd0d35a1bd728539 - 15b7cf48ee255f5d - --VRSQRTPS_256(reg) -+VCVTTPD2DQ_256(reg) - before - 6d47fba2cf9fa6b2.eec08e61f747e681.38d2f78cc2e575fb.ef35ac02bd5497a9 - 6207b41bfc6d97e5.8651a8ace64eebb8.92306aa836d789c9.328637d5fe8aff0a -@@ -28087,11 +28087,11 @@ VRSQRTPS_256(reg) - 3c5fb27d87c21baf - after - 6d47fba2cf9fa6b2.eec08e61f747e681.38d2f78cc2e575fb.ef35ac02bd5497a9 -- 3811f0005624d000.ffc000005bb32800.236158005ce2b800.ffc00000ffc00000 -- 4e44f61f121a6da2.f0fc3c980702b63e.77a528d904a3250b.974abf93a3269063 -+ 6207b41bfc6d97e5.8651a8ace64eebb8.92306aa836d789c9.328637d5fe8aff0a -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - 8f4bbd1bac326694.078cc60f766f043f.427e2d8bc9d4856d.fc4ebe27c73505e1 - 3c5fb27d87c21baf --VRSQRTPS_256(mem) -+VCVTTPD2DQ_256(mem) - before - 33471681fed98efa.7f6505796742bc67.a7cfc3ff4e9f91e6.4f05752b20f6e59a - bcd2671f49871aed.7be1cba7ded5abc8.ab8fad52aca01960.fa86fd23a596803f -@@ -28100,12 +28100,12 @@ VRSQRTPS_256(mem) - 46e5e75b65de11b4 - after - 33471681fed98efa.7f6505796742bc67.a7cfc3ff4e9f91e6.4f05752b20f6e59a -- 45912800ffc00000.1f8750002b92c800.ffc0000037e54800.37b148004eb85000 -- b5ce1f4483d77ab5.e00a0a0fae777163.f19a02f6ab7e57d8.9f4fc0e1f53f9408 -+ bcd2671f49871aed.7be1cba7ded5abc8.ab8fad52aca01960.fa86fd23a596803f -+ 0000000000000000.0000000000000000.0000000080000000.0000000080000000 - f906bcdac9d56b7e.082bbe1f72b548e4.54ba3dd66744087b.99abbad0ac7e5aa0 - 46e5e75b65de11b4 - --VMOVDQU_GtoE_256(reg) -+VCVTPD2DQ_128(reg) - before - 014a43f0bcebf3ef.6345b9ce368ea973.5092e342c71a6df6.afbcdbdefdfee874 - 2626cbfa4e323dfe.d158920de70defc1.148976e448321b45.e06b57fa88b8b3f1 -@@ -28115,10 +28115,10 @@ VMOVDQU_GtoE_256(reg) - after - 014a43f0bcebf3ef.6345b9ce368ea973.5092e342c71a6df6.afbcdbdefdfee874 - 2626cbfa4e323dfe.d158920de70defc1.148976e448321b45.e06b57fa88b8b3f1 -- 1d734c1d919bf847.252aca18838e8617.8159d35540ad064d.3005d81ef05ef821 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1d734c1d919bf847.252aca18838e8617.8159d35540ad064d.3005d81ef05ef821 - 0786d7fe0361eb2c --VMOVDQU_GtoE_256(mem) -+VCVTPD2DQ_128(mem) - before - 24e5a3a37d95b86b.a77c3d0f7bd5e1d8.c3811fbda6a84f77.e1cb95fcee28ba5e - 61eebaf777051c08.0c2b4a250e7922ee.d5dc425c7cb910df.2dfeb4d23985e75c -@@ -28126,13 +28126,13 @@ VMOVDQU_GtoE_256(mem) - af2eb66061cb990e.d3aea471a52d9b53.c0ccda38b4ed6d79.f9d5fbbc151b9fd1 - 31121aa8dd6ba29f - after -- 9c6d97e810bed330.a6cd6dcce912f733.3506ace122cc867c.c13d2d44bd52caf3 -+ 24e5a3a37d95b86b.a77c3d0f7bd5e1d8.c3811fbda6a84f77.e1cb95fcee28ba5e - 61eebaf777051c08.0c2b4a250e7922ee.d5dc425c7cb910df.2dfeb4d23985e75c -- 9c6d97e810bed330.a6cd6dcce912f733.3506ace122cc867c.c13d2d44bd52caf3 -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - af2eb66061cb990e.d3aea471a52d9b53.c0ccda38b4ed6d79.f9d5fbbc151b9fd1 - 31121aa8dd6ba29f - --VMOVDQU_GtoE_256(reg) -+VCVTPD2DQ_128(reg) - before - c5408673b2ce0e0c.77fc934d893829cf.ed1aeb7fe0554bfb.53fa494e4d288003 - 10ab3c8830d020c2.d0a5ab9aa111409e.525d3c61361643d7.c85c740d098a7c46 -@@ -28142,10 +28142,10 @@ VMOVDQU_GtoE_256(reg) - after - c5408673b2ce0e0c.77fc934d893829cf.ed1aeb7fe0554bfb.53fa494e4d288003 - 10ab3c8830d020c2.d0a5ab9aa111409e.525d3c61361643d7.c85c740d098a7c46 -- 4067724594e326ba.a6b379041739f319.6997f156a195f9d9.cbecef3a5cf11fa5 -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - 4067724594e326ba.a6b379041739f319.6997f156a195f9d9.cbecef3a5cf11fa5 - 12b1367f2b0e3d19 --VMOVDQU_GtoE_256(mem) -+VCVTPD2DQ_128(mem) - before - abdb2a1f8d8134f6.dc50ecc4b30c9155.dab127f9aca0061c.d3274c40ee6a3057 - 733446059f57c068.a0a69e3eea0392ea.0fb9ffffa2a390de.f7bda2afc5099fb9 -@@ -28153,13 +28153,13 @@ VMOVDQU_GtoE_256(mem) - 00a6e753415986b9.0fc99ed4129145af.ed161fe924adf84d.de2e30cc84d213d8 - 58a06053a31591ed - after -- 4689071d7c9a9c9a.e8b5861fd6576524.21967e00164e4c8a.31a6ef0fc3fd81ab -+ abdb2a1f8d8134f6.dc50ecc4b30c9155.dab127f9aca0061c.d3274c40ee6a3057 - 733446059f57c068.a0a69e3eea0392ea.0fb9ffffa2a390de.f7bda2afc5099fb9 -- 4689071d7c9a9c9a.e8b5861fd6576524.21967e00164e4c8a.31a6ef0fc3fd81ab -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - 00a6e753415986b9.0fc99ed4129145af.ed161fe924adf84d.de2e30cc84d213d8 - 58a06053a31591ed - --VMOVDQU_GtoE_256(reg) -+VCVTPD2DQ_128(reg) - before - fc4a7b0ebc513796.7d566493099d37f0.732ee4c73a3f6f38.4d035ea7e7cd4e53 - 26767e6b6c12407e.9967f9c9f1746e6c.6f2f5466ebec1f6b.1e2ab8247bba0ac7 -@@ -28169,10 +28169,10 @@ VMOVDQU_GtoE_256(reg) - after - fc4a7b0ebc513796.7d566493099d37f0.732ee4c73a3f6f38.4d035ea7e7cd4e53 - 26767e6b6c12407e.9967f9c9f1746e6c.6f2f5466ebec1f6b.1e2ab8247bba0ac7 -- 7c8828b7ff556dbc.1ed85bc88e095ae2.9e399e545775007d.8356a9108827a8ab -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7c8828b7ff556dbc.1ed85bc88e095ae2.9e399e545775007d.8356a9108827a8ab - cff3395639c00173 --VMOVDQU_GtoE_256(mem) -+VCVTPD2DQ_128(mem) - before - fbf9d30c2b56b15a.6005c87f1aef0a6b.3fd021687cdf8634.89d9717c4a68a9b5 - e535f41e7bf4738b.3a343f983c3dfa0a.6f58efaffa77287a.7d455dff358bc746 -@@ -28180,13 +28180,13 @@ VMOVDQU_GtoE_256(mem) - 6080b706a379207d.40dca36d032bc5c5.6c4793de131fb995.ecb671c6648e5625 - 1f5191e2e0863ecb - after -- 6874167844a60433.66638a6e00ce7a44.8a3c418723defae1.d4cb5e49b46998dc -+ fbf9d30c2b56b15a.6005c87f1aef0a6b.3fd021687cdf8634.89d9717c4a68a9b5 - e535f41e7bf4738b.3a343f983c3dfa0a.6f58efaffa77287a.7d455dff358bc746 -- 6874167844a60433.66638a6e00ce7a44.8a3c418723defae1.d4cb5e49b46998dc -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6080b706a379207d.40dca36d032bc5c5.6c4793de131fb995.ecb671c6648e5625 - 1f5191e2e0863ecb - --VCVTPS2PD_256(reg) -+VCVTPD2DQ_256(reg) - before - cbe9ba09c5de8b7a.a92652b5b3788396.24ed8801e0e2183a.f047629fe74621c1 - 4acae8a8af227bdf.1f31636f91afe8aa.6ee03597347eaf4f.f40628b6ba60ed92 -@@ -28196,10 +28196,10 @@ VCVTPS2PD_256(reg) - after - cbe9ba09c5de8b7a.a92652b5b3788396.24ed8801e0e2183a.f047629fe74621c1 - 4acae8a8af227bdf.1f31636f91afe8aa.6ee03597347eaf4f.f40628b6ba60ed92 -- bc93fa4ea0000000.bdd2d300e0000000.c53e91d2c0000000.c213549a20000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000080000000 - 359744faff9a2f7a.01aad9b824f7aa70.a49fd275ae969807.e9f48e96d09aa4d1 - 91bb263749d30798 --VCVTPS2PD_256(mem) -+VCVTPD2DQ_256(mem) - before - 2972a5de332ebeb3.581b6a859ee86b08.26b0351f1220807c.4802bc950d2a6203 - 8ce48978a7b7864e.bf178538b15039fb.e74bf7423eb04832.c1795d6753d4604e -@@ -28209,11 +28209,11 @@ VCVTPS2PD_256(mem) - after - 2972a5de332ebeb3.581b6a859ee86b08.26b0351f1220807c.4802bc950d2a6203 - 8ce48978a7b7864e.bf178538b15039fb.e74bf7423eb04832.c1795d6753d4604e -- 3cd606a3e0000000.3a44100f80000000.41005792a0000000.39a54c4060000000 -+ 0000000000000000.0000000000000000.0000000080000000.0000000080000000 - 222d6d31a38538b8.caaa8bc3a5a47bc3.b1729e6cbd3ba04d.a7cfb5ce0197e783 - ca46643aa2c8e8c5 - --VCVTPS2PD_256(reg) -+VCVTPD2DQ_256(reg) - before - 34ffb909993f0d07.0d9b662862e29add.25d96e73bda666ef.72977b4b494ca90b - 4048b3a4838891f4.34f5b2c21d9dfd33.34b136fabaf5d331.3f82ae9682f79423 -@@ -28223,10 +28223,10 @@ VCVTPS2PD_256(reg) - after - 34ffb909993f0d07.0d9b662862e29add.25d96e73bda666ef.72977b4b494ca90b - 4048b3a4838891f4.34f5b2c21d9dfd33.34b136fabaf5d331.3f82ae9682f79423 -- c3d16ca7a0000000.c2546454a0000000.463b00e420000000.45a8804280000000 -+ 0000000000000000.0000000000000000.0000000000000000.8000000080000000 - adb67ef19ebca981.a29c388cf45db521.de8b653dd2a322a5.71d807216d440214 - 8edc243857fffd44 --VCVTPS2PD_256(mem) -+VCVTPD2DQ_256(mem) - before - 27d6886c5e82cb7e.c673497c08c0b579.a1826a94497b8211.3126c5d2241b7d30 - 1992aea89fda27f0.f2f0a783d3c610cc.4b83dfee0a2740e1.a899faedcb0e4980 -@@ -28236,11 +28236,11 @@ VCVTPS2PD_256(mem) - after - 27d6886c5e82cb7e.c673497c08c0b579.a1826a94497b8211.3126c5d2241b7d30 - 1992aea89fda27f0.f2f0a783d3c610cc.4b83dfee0a2740e1.a899faedcb0e4980 -- bc304d5280000000.412f704220000000.3e24d8ba40000000.3c836fa600000000 -+ 0000000000000000.0000000000000000.0000000080000000.0000000000000000 - 797f31e73d377d26.ef540dba0205a636.110987493d5a7dd4.723ad36987972621 - 7d0070a2d345afca - --VCVTPS2PD_256(reg) -+VCVTPD2DQ_256(reg) - before - 1cced212e49d99e9.9e4886c3d254ee43.78d50cc09d5758a4.e426b121e8fa754e - aaf2f525552e2229.8d038d571175dd47.83458ff40bda4a1e.d38e10fb6e574e59 -@@ -28250,10 +28250,10 @@ VCVTPS2PD_256(reg) - after - 1cced212e49d99e9.9e4886c3d254ee43.78d50cc09d5758a4.e426b121e8fa754e - aaf2f525552e2229.8d038d571175dd47.83458ff40bda4a1e.d38e10fb6e574e59 -- ba0401f260000000.c1b49bdc80000000.460e6b2ce0000000.47afb23a20000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000080000000 - 08676ee4c924fcbe.347fa258faf428b2.90200f93cda4dee4.707359677d7d91d1 - d7873cd03e5e7495 --VCVTPS2PD_256(mem) -+VCVTPD2DQ_256(mem) - before - c91743ea4a2d279a.8f51bd6804a2c66b.a5d7a89cdd6bfc71.492403d75a03f789 - 22efeba3bef6670c.76c0bd400f881de9.4f524f48da153ec7.f4476bf72ac340e9 -@@ -28263,11 +28263,11 @@ VCVTPS2PD_256(mem) - after - c91743ea4a2d279a.8f51bd6804a2c66b.a5d7a89cdd6bfc71.492403d75a03f789 - 22efeba3bef6670c.76c0bd400f881de9.4f524f48da153ec7.f4476bf72ac340e9 -- bcbaf51380000000.c3ad7f8e20000000.4124807ae0000000.43407ef120000000 -+ 0000000000000000.0000000000000000.8000000000000000.0000000080000000 - 79a70ba04ca77ee6.d35cc09807b9650b.bedc76898f37ffe7.9119847f0098518d - 3a612dbe3fc49128 - --VCVTTPS2DQ_128(reg) -+VMOVSLDUP_128(reg) - before - 45f73a8b3082f12e.2f1e7bbb9ea8cca5.0121bbf02b1cce07.3b84ecf680c7f509 - 0e28a651705dad4c.bc0d7b24c7d29781.009b584c9117b484.617ef57bfabb4b71 -@@ -28277,10 +28277,10 @@ VCVTTPS2DQ_128(reg) - after - 45f73a8b3082f12e.2f1e7bbb9ea8cca5.0121bbf02b1cce07.3b84ecf680c7f509 - 0e28a651705dad4c.bc0d7b24c7d29781.009b584c9117b484.617ef57bfabb4b71 -- 0000000000000000.0000000000000000.8000000000000000.0000000080000000 -+ 0000000000000000.0000000000000000.8c03eab28c03eab2.fb0001c6fb0001c6 - 4a8b8b774b9b2780.cb831d9111d69440.ddde65bd8c03eab2.1897ad7dfb0001c6 - 614e55d2ba69db0a --VCVTTPS2DQ_128(mem) -+VMOVSLDUP_128(mem) - before - c3887fef72660344.7554fcb01e165eed.05a2b66d69c83d7a.743fcdaa5b0cb1bc - 1a0fa6c0400435a2.cee9bd93b0dfe121.8669cf4608145380.4a84c74ad9dce6f7 -@@ -28290,11 +28290,11 @@ VCVTTPS2DQ_128(mem) - after - c3887fef72660344.7554fcb01e165eed.05a2b66d69c83d7a.743fcdaa5b0cb1bc - 1a0fa6c0400435a2.cee9bd93b0dfe121.8669cf4608145380.4a84c74ad9dce6f7 -- 0000000000000000.0000000000000000.0000000080000000.8000000080000000 -+ 0000000000000000.0000000000000000.69c83d7a69c83d7a.5b0cb1bc5b0cb1bc - 1636e12f8b50ab74.7aa21c027f88b991.cc1d72a48eebb5a3.27ee5e5359038ab2 - e5aaf3949171708b - --VCVTTPS2DQ_128(reg) -+VMOVSLDUP_128(reg) - before - 547b0a39ead7b444.746feba541176641.855fb267f4808724.4aa4f400ab8e7917 - cead9dacffc0928b.3625e47e7dae1ce1.2e17882697f6902f.7f02e60a81bb9a08 -@@ -28304,10 +28304,10 @@ VCVTTPS2DQ_128(reg) - after - 547b0a39ead7b444.746feba541176641.855fb267f4808724.4aa4f400ab8e7917 - cead9dacffc0928b.3625e47e7dae1ce1.2e17882697f6902f.7f02e60a81bb9a08 -- 0000000000000000.0000000000000000.ffeb03d580000000.80000000ffffff8e -+ 0000000000000000.0000000000000000.da8a465cda8a465c.c2e5e210c2e5e210 - 56632cb1cf4c0a73.5b3c900ef47d6748.c9a7e15eda8a465c.7d750bd9c2e5e210 - ff23367565fa817f --VCVTTPS2DQ_128(mem) -+VMOVSLDUP_128(mem) - before - a7d8c17031c86c1a.1d7f201ac2071d6b.74343c9c68cd7568.74185cb0b1c06ad6 - 536128b43f5d610e.5f2c8001e175baa0.63d9c53ed21d6e0a.2db3060b26a3bb77 -@@ -28317,11 +28317,11 @@ VCVTTPS2DQ_128(mem) - after - a7d8c17031c86c1a.1d7f201ac2071d6b.74343c9c68cd7568.74185cb0b1c06ad6 - 536128b43f5d610e.5f2c8001e175baa0.63d9c53ed21d6e0a.2db3060b26a3bb77 -- 0000000000000000.0000000000000000.8000000080000000.8000000000000000 -+ 0000000000000000.0000000000000000.68cd756868cd7568.b1c06ad6b1c06ad6 - 231f7bcc970b54af.c76979ff159c8074.2f5f636ef5ef0f86.389ad98c5ca1cee1 - 427df98a55d40a01 - --VCVTTPS2DQ_128(reg) -+VMOVSLDUP_128(reg) - before - cbbc38415ce561f8.ffec5f76183bcab5.a59109ec616c226b.c4d66fd5e78930b8 - 2ea1931e0e5f1074.4fbd0f1b4d613ac3.6f79f7084a203e4f.9f2b4aff3e522b1c -@@ -28331,10 +28331,10 @@ VCVTTPS2DQ_128(reg) - after - cbbc38415ce561f8.ffec5f76183bcab5.a59109ec616c226b.c4d66fd5e78930b8 - 2ea1931e0e5f1074.4fbd0f1b4d613ac3.6f79f7084a203e4f.9f2b4aff3e522b1c -- 0000000000000000.0000000000000000.0000000080000000.0000000000000000 -+ 0000000000000000.0000000000000000.6262d2906262d290.8da7a22d8da7a22d - f1918af6e1bf65a5.b699c40440c1f3aa.37bdd97e6262d290.939f5a508da7a22d - 6456874fbd4a9631 --VCVTTPS2DQ_128(mem) -+VMOVSLDUP_128(mem) - before - ea1a72c1c24d5418.09331ec93abd83b3.873dc11f3713b4da.edb0c6b0c807c244 - 02b99894b9bd990e.6bacbd72ae54e8f5.3a157ae4518a5ec2.ff9400c03bc11d97 -@@ -28344,11 +28344,11 @@ VCVTTPS2DQ_128(mem) - after - ea1a72c1c24d5418.09331ec93abd83b3.873dc11f3713b4da.edb0c6b0c807c244 - 02b99894b9bd990e.6bacbd72ae54e8f5.3a157ae4518a5ec2.ff9400c03bc11d97 -- 0000000000000000.0000000000000000.0000000000000000.80000000fffde0f7 -+ 0000000000000000.0000000000000000.3713b4da3713b4da.c807c244c807c244 - 53b3820aea11a7d4.7e520ef3557f7bc3.ba91101d611d5d6d.a75e4d2fb69dffc4 - f5dc5765f7d8fef7 - --VCVTTPS2DQ_256(reg) -+VMOVSLDUP_256(reg) - before - 0f7c9e2ab3565778.45a73e855d0de9fe.e617b7a3c02a20a7.3ecce6698d502988 - 50881eea89a446f2.38a5241132a6a1e5.09e35bd8b59ffc6f.156c680e4ed9ce0b -@@ -28358,10 +28358,10 @@ VCVTTPS2DQ_256(reg) - after - 0f7c9e2ab3565778.45a73e855d0de9fe.e617b7a3c02a20a7.3ecce6698d502988 - 50881eea89a446f2.38a5241132a6a1e5.09e35bd8b59ffc6f.156c680e4ed9ce0b -- 0000000080000000.0000000080000000.8000000000000000.0000000080000000 -+ edded584edded584.6fdd65a16fdd65a1.b0144d5ab0144d5a.f91f92fbf91f92fb - bc16bb0bedded584.92ee60076fdd65a1.ebc08581b0144d5a.2c066018f91f92fb - 2499cf541bf329bf --VCVTTPS2DQ_256(mem) -+VMOVSLDUP_256(mem) - before - dfc0da9a414e899d.9e31cf45b3e2eef3.b0d1ad4b1093e9cc.636903ceed2d39d5 - 3946fdd6873a6ebf.17e90c2902e58b0c.3fee144f8215d367.06486c4f243f4ce3 -@@ -28371,11 +28371,11 @@ VCVTTPS2DQ_256(mem) - after - dfc0da9a414e899d.9e31cf45b3e2eef3.b0d1ad4b1093e9cc.636903ceed2d39d5 - 3946fdd6873a6ebf.17e90c2902e58b0c.3fee144f8215d367.06486c4f243f4ce3 -- 800000000000000c.0000000000000000.0000000000000000.8000000080000000 -+ 414e899d414e899d.b3e2eef3b3e2eef3.1093e9cc1093e9cc.ed2d39d5ed2d39d5 - 3aa37be1e1fbb581.425ef2a4aa1a48ea.200622464caecd97.38dcf0a1f27fda6b - 8028034ac1c5cd3c - --VCVTTPS2DQ_256(reg) -+VMOVSLDUP_256(reg) - before - 62dbf1d8fa34d751.9911cf872de79078.acb493113b63df08.2a99c012dade5485 - 3a41b7b73a593555.070f2bd40896e065.1dd74ddac4dbec7f.1595684eab093291 -@@ -28385,10 +28385,10 @@ VCVTTPS2DQ_256(reg) - after - 62dbf1d8fa34d751.9911cf872de79078.acb493113b63df08.2a99c012dade5485 - 3a41b7b73a593555.070f2bd40896e065.1dd74ddac4dbec7f.1595684eab093291 -- 0000000000000000.0000000080000000.0000000000000000.8000000000000000 -+ 3df3dcdd3df3dcdd.dd69cdcbdd69cdcb.2f8b572a2f8b572a.8086e1b68086e1b6 - 3c55b7183df3dcdd.80eaeb0fdd69cdcb.88b3fd2d2f8b572a.fdfcc7c68086e1b6 - b3fe76dabcee2b27 --VCVTTPS2DQ_256(mem) -+VMOVSLDUP_256(mem) - before - ba9a1f0faa83bc65.1e9bea7238809eb8.436047d60fa7e39d.3a05eb9049d92cb5 - ee9b3e4f66514f9f.66c4e4cdaaf2a333.84959cf341d65d14.6353e2fdcc87684b -@@ -28398,11 +28398,11 @@ VCVTTPS2DQ_256(mem) - after - ba9a1f0faa83bc65.1e9bea7238809eb8.436047d60fa7e39d.3a05eb9049d92cb5 - ee9b3e4f66514f9f.66c4e4cdaaf2a333.84959cf341d65d14.6353e2fdcc87684b -- 0000000000000000.0000000000000000.000000e000000000.00000000001b2596 -+ aa83bc65aa83bc65.38809eb838809eb8.0fa7e39d0fa7e39d.49d92cb549d92cb5 - 4c00cfa4b6c46db2.97ef1e3760b668b7.f56f1edf123d709f.8e16dca97b310043 - 4723d6bfe045d5fd - --VCVTTPS2DQ_256(reg) -+VMOVSLDUP_256(reg) - before - e95cca911ce80071.2ffc3991828371e3.3989551edd20a019.dbac4386ea8b810c - ce0fb38acea7bc4a.ae8d0a3a8baa67bf.b13544b641a00cca.b1d9513331fce6cd -@@ -28412,10 +28412,10 @@ VCVTTPS2DQ_256(reg) - after - e95cca911ce80071.2ffc3991828371e3.3989551edd20a019.dbac4386ea8b810c - ce0fb38acea7bc4a.ae8d0a3a8baa67bf.b13544b641a00cca.b1d9513331fce6cd -- 8000000080000000.80000000ffffc7fa.0000000000000000.0000000080000000 -+ fda7d9defda7d9de.c6601b27c6601b27.2b0f6ecb2b0f6ecb.7e769efd7e769efd - d40e55a0fda7d9de.f4a0cd70c6601b27.92f738a82b0f6ecb.993215507e769efd - 64f6c398bb966ac4 --VCVTTPS2DQ_256(mem) -+VMOVSLDUP_256(mem) - before - 8dda4995d9087a8f.adf30696b4ffb3f0.73bbb7d53008520a.b4a435dbea16dd73 - f2aa2435f1d98b8c.3a819c634fa30e18.ff9cf9a648486b49.1c94d96fff63701a -@@ -28425,11 +28425,11 @@ VCVTTPS2DQ_256(mem) - after - 8dda4995d9087a8f.adf30696b4ffb3f0.73bbb7d53008520a.b4a435dbea16dd73 - f2aa2435f1d98b8c.3a819c634fa30e18.ff9cf9a648486b49.1c94d96fff63701a -- 0000000080000000.0000000000000000.8000000000000000.0000000080000000 -+ d9087a8fd9087a8f.b4ffb3f0b4ffb3f0.3008520a3008520a.ea16dd73ea16dd73 - dc3dc60b85c59fc6.e1c76833a3fe3958.acde6d3defc13585.2d6c066b9dfdf118 - 8eed88aa5e6256c7 - --VCVTDQ2PS_128(reg) -+VMOVSHDUP_128(reg) - before - a6e0a0fae53cd024.1999851938f91a5b.b217950d93cc81c9.87d899dab7125edb - cf924cc8cf1899de.0110897956bb86d2.a740986fd8153bff.dec80b949c2c5a3c -@@ -28439,10 +28439,10 @@ VCVTDQ2PS_128(reg) - after - a6e0a0fae53cd024.1999851938f91a5b.b217950d93cc81c9.87d899dab7125edb - cf924cc8cf1899de.0110897956bb86d2.a740986fd8153bff.dec80b949c2c5a3c -- 0000000000000000.0000000000000000.4ed89a1dce3ed42e.4ee973624e3fa2eb -+ 0000000000000000.0000000000000000.6c4d0e776c4d0e77.74b9b10c74b9b10c - c8634e8a3a030b14.43824de0451b1f11.6c4d0e77d04af46c.74b9b10c2fe8bacd - 6a53dea114a29655 --VCVTDQ2PS_128(mem) -+VMOVSHDUP_128(mem) - before - 4d12410387553598.501a9c57f32b2ce8.541505be4ed0c531.f5c978f6ba4d6bfb - fac3561da40c52c2.59bf6c517f848cc8.81f3f19f33434ce2.124ea8ac69fc4400 -@@ -28452,11 +28452,11 @@ VCVTDQ2PS_128(mem) - after - 4d12410387553598.501a9c57f32b2ce8.541505be4ed0c531.f5c978f6ba4d6bfb - fac3561da40c52c2.59bf6c517f848cc8.81f3f19f33434ce2.124ea8ac69fc4400 -- 0000000000000000.0000000000000000.4ea82a0b4e9da18a.cd236871ce8b6528 -+ 0000000000000000.0000000000000000.541505be541505be.f5c978f6f5c978f6 - 1d2b872a49b8f979.6207887c7dfafb5a.9ac45716fe95eba5.78a1476d848c0b1a - 7908ae5028857187 - --VCVTDQ2PS_128(reg) -+VMOVSHDUP_128(reg) - before - 7da8cb1a0159281a.4c799af40ac4fb5e.1941ca85282f8365.3f4ec8851c8c7c10 - e2cd9937aa946e7e.b4ea5027e5046bda.c299806c16c53a2b.6f545da68771ddbb -@@ -28466,10 +28466,10 @@ VCVTDQ2PS_128(reg) - after - 7da8cb1a0159281a.4c799af40ac4fb5e.1941ca85282f8365.3f4ec8851c8c7c10 - e2cd9937aa946e7e.b4ea5027e5046bda.c299806c16c53a2b.6f545da68771ddbb -- 0000000000000000.0000000000000000.4eb5b06b4e21189e.cdffd8dbcea393fb -+ 0000000000000000.0000000000000000.5ad8357f5ad8357f.e004e4aee004e4ae - 3bd5381bde71926c.9f60937456538846.5ad8357f2846279a.e004e4aeae360283 - d946ce6da22e3ef8 --VCVTDQ2PS_128(mem) -+VMOVSHDUP_128(mem) - before - cd33cd8e52443a5e.e85102baa02be84e.dafe17662578ac8e.02552c858548d59b - 98985bfdda84b3e0.65816c5ca37cbcb0.beee2e717d02301c.0b21871894dca308 -@@ -28479,11 +28479,11 @@ VCVTDQ2PS_128(mem) - after - cd33cd8e52443a5e.e85102baa02be84e.dafe17662578ac8e.02552c858548d59b - 98985bfdda84b3e0.65816c5ca37cbcb0.beee2e717d02301c.0b21871894dca308 -- 0000000000000000.0000000000000000.ce1407a24e15e2b2.4c154b21cef56e55 -+ 0000000000000000.0000000000000000.dafe1766dafe1766.02552c8502552c85 - 23fa1876dfb50cea.3e301558db14ceab.f1f3027f3a7342bd.b3d656943ae78ed4 - 0a57c2560977238b - --VCVTDQ2PS_128(reg) -+VMOVSHDUP_128(reg) - before - 33578255fac8c85e.9b8f3f5895bc63ca.52464c8b4773849b.f8a0b85ad7724a27 - 8a2190fdaa67b8f9.5acce738931e2777.a74213716499a7bc.18d0effd6d05a088 -@@ -28493,10 +28493,10 @@ VCVTDQ2PS_128(reg) - after - 33578255fac8c85e.9b8f3f5895bc63ca.52464c8b4773849b.f8a0b85ad7724a27 - 8a2190fdaa67b8f9.5acce738931e2777.a74213716499a7bc.18d0effd6d05a088 -- 0000000000000000.0000000000000000.ceffcf744e01b099.4d9726aacd1e6d72 -+ 0000000000000000.0000000000000000.8018460780184607.12e4d54c12e4d54c - 31478bf9b4bc6c35.1c6da6a1d421e5e5.80184607206c2643.12e4d54cf61928dd - a5607ccf21b1d22a --VCVTDQ2PS_128(mem) -+VMOVSHDUP_128(mem) - before - c18f94cbb50ebb1d.3a3a7024488aa82e.d869b60350da5700.bc8aa98ef630fb01 - 423b9b2bce3b9fe3.e12893a909d61f9f.4b3d3613831e2697.a8118e78edec2da1 -@@ -28506,11 +28506,11 @@ VCVTDQ2PS_128(mem) - after - c18f94cbb50ebb1d.3a3a7024488aa82e.d869b60350da5700.bc8aa98ef630fb01 - 423b9b2bce3b9fe3.e12893a909d61f9f.4b3d3613831e2697.a8118e78edec2da1 -- 0000000000000000.0000000000000000.ce1e59284ea1b4ae.ce86eaadcd1cf050 -+ 0000000000000000.0000000000000000.d869b603d869b603.bc8aa98ebc8aa98e - e23e63c602364696.7924886d8816b198.c59c77ee8074caea.018dca27ac799a35 - 251a1bc2ac634d82 - --VCVTDQ2PS_256(reg) -+VMOVSHDUP_256(reg) - before - 69eddc713d744e60.b92c1cda541c82db.21ca51857d214478.85c03090829e17ff - 29500a9ffa38d87b.66c7b4029b03a9a3.d89b4aa610db027f.6beb4991ab83b040 -@@ -28520,10 +28520,10 @@ VCVTDQ2PS_256(reg) - after - 69eddc713d744e60.b92c1cda541c82db.21ca51857d214478.85c03090829e17ff - 29500a9ffa38d87b.66c7b4029b03a9a3.d89b4aa610db027f.6beb4991ab83b040 -- cee20cc24ed416f6.cea38d244ef4034d.ce00451dcefaf41b.4dec4c5bcddaa228 -+ 8ef99f288ef99f28.ae396e3eae396e3e.dfeeb8b3dfeeb8b3.1d898b5c1d898b5c - 8ef99f286a0b7b1b.ae396e3e7a01a66b.dfeeb8b38285f2b4.1d898b5ce4abbaf9 - a194adff2b07a2c8 --VCVTDQ2PS_256(mem) -+VMOVSHDUP_256(mem) - before - bbd71fb00a4dc673.ead6fd5b54310bf8.02a6882b4a30f5c3.e8082677998e9b3b - 491e5d5b9d8ae428.3275b9bedb3b14c2.9af171db7f901e4e.6f7db4f4be756098 -@@ -28533,11 +28533,11 @@ VCVTDQ2PS_256(mem) - after - bbd71fb00a4dc673.ead6fd5b54310bf8.02a6882b4a30f5c3.e8082677998e9b3b - 491e5d5b9d8ae428.3275b9bedb3b14c2.9af171db7f901e4e.6f7db4f4be756098 -- ce8851c14d24dc67.cda948154ea86218.4c29a20b4e9461ec.cdbfbecccecce2ca -+ bbd71fb0bbd71fb0.ead6fd5bead6fd5b.02a6882b02a6882b.e8082677e8082677 - 2de62e4f4c15f95a.f62437c02f2884ce.0a519c388a10f1ab.66a61ccaa40a2e8a - 8ef3effa9dd1ae77 - --VCVTDQ2PS_256(reg) -+VMOVSHDUP_256(reg) - before - a5cbd19414a53aeb.3b00b970a17d6830.2acdf23733246369.99fed7bd984913d5 - 057abf03a6120e93.2c4e003b1a0bc0bf.ba67fb8e4433aba2.ddb8d1b67be2ffe2 -@@ -28547,10 +28547,10 @@ VCVTDQ2PS_256(reg) - after - a5cbd19414a53aeb.3b00b970a17d6830.2acdf23733246369.99fed7bd984913d5 - 057abf03a6120e93.2c4e003b1a0bc0bf.ba67fb8e4433aba2.ddb8d1b67be2ffe2 -- 4da46558ceec2d08.4e22dacacdd1b722.4ebd3bc7cc8872cd.cd2781154e4998a1 -+ 148cab0f148cab0f.28b6b28028b6b280.5e9de3885e9de388.f587eeb3f587eeb3 - 148cab0f89e97c2d.28b6b280e5c91bb6.5e9de388fbbc699b.f587eeb332662853 - 80330a903e68dc10 --VCVTDQ2PS_256(mem) -+VMOVSHDUP_256(mem) - before - 301dd4928ffa4c5f.7a88a285126a8f77.ea6716d270129576.29d2bb04d94d57b4 - e211c9a34129326d.9a8a948025b5daa5.ff7d267d8eb2e89f.c127d00f34219e1b -@@ -28560,11 +28560,11 @@ VCVTDQ2PS_256(mem) - after - 301dd4928ffa4c5f.7a88a285126a8f77.ea6716d270129576.29d2bb04d94d57b4 - e211c9a34129326d.9a8a948025b5daa5.ff7d267d8eb2e89f.c127d00f34219e1b -- 4e407752cee00b67.4ef511454d93547c.cdacc7494ee0252b.4e274aecce1acaa1 -+ 301dd492301dd492.7a88a2857a88a285.ea6716d2ea6716d2.29d2bb0429d2bb04 - b74621a63b8c5274.79d35bb65cd6065c.92033a93f52308db.c564a283cfc42a81 - e8e457c347abe6d9 - --VCVTDQ2PS_256(reg) -+VMOVSHDUP_256(reg) - before - 48b53943ac05ec2e.931f7c6fb9d804c6.efb127c8b6c5603d.c80c37d5760d4d46 - 4022446d995e782d.e032f1f90af01c86.8fc7de100cade2b1.c1a9cf21fa7e5bc9 -@@ -28574,10 +28574,10 @@ VCVTDQ2PS_256(reg) - after - 48b53943ac05ec2e.931f7c6fb9d804c6.efb127c8b6c5603d.c80c37d5760d4d46 - 4022446d995e782d.e032f1f90af01c86.8fc7de100cade2b1.c1a9cf21fa7e5bc9 -- 4ece098d4efa7c24.4e74d86ccee0931c.ce8470024db4ca60.4ed99d8b4ef84584 -+ 6704c6736704c673.3d361afc3d361afc.bdc7feeebdc7feee.6ccec5886ccec588 - 6704c6737d3e11d7.3d361afc8fb67202.bdc7feee16994c05.6ccec5887c22c1ca - d6ee1b7ab36e919f --VCVTDQ2PS_256(mem) -+VMOVSHDUP_256(mem) - before - 73d2fc265d701a3d.4f103527abde96da.05bfc64efc7b2716.04495e5d03b5ac3c - 1f46e679963418cf.3ee8bd36d2ac9038.aeb17d10aa3d3349.e4329bb05afa25b7 -@@ -28587,11 +28587,11 @@ VCVTDQ2PS_256(mem) - after - 73d2fc265d701a3d.4f103527abde96da.05bfc64efc7b2716.04495e5d03b5ac3c - 1f46e679963418cf.3ee8bd36d2ac9038.aeb17d10aa3d3349.e4329bb05afa25b7 -- 4ee7a5f84ebae034.4e9e206acea842d2.4cb7f8cacc61363a.4c892bcc4c6d6b0f -+ 73d2fc2673d2fc26.4f1035274f103527.05bfc64e05bfc64e.04495e5d04495e5d - 140dc3c028346182.a53109157a07d7ae.1204f8943be53eba.e26894b7b8314c27 - b74e4a43f73b7475 - --VCVTTPD2DQ_128(reg) -+VPERMILPS_VAR_128(reg) - before - 97cacb63109da3b6.15f9ad8db88725fa.d438c5bd32ac9b20.86fcb52f56e4b650 - dd2913849fe51697.94a490b047cd4d17.7c3c8a7153b0c49c.4b8e6ce9220f74b5 -@@ -28599,12 +28599,12 @@ VCVTTPD2DQ_128(reg) - 0bc0e97a9256b7e7.816a2ea8d45fbcee.a36b20a83e063960.37afb86e3e1ab69b - 17d64611c712b073 - after -- 97cacb63109da3b6.15f9ad8db88725fa.d438c5bd32ac9b20.86fcb52f56e4b650 -+ 0000000000000000.0000000000000000.7c3c8a714b8e6ce9.7c3c8a71220f74b5 - dd2913849fe51697.94a490b047cd4d17.7c3c8a7153b0c49c.4b8e6ce9220f74b5 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ e5b71e12419f09c3.6fdbe715f2119604.f789549b789f90cd.3d8599afbb723614 - 0bc0e97a9256b7e7.816a2ea8d45fbcee.a36b20a83e063960.37afb86e3e1ab69b - 17d64611c712b073 --VCVTTPD2DQ_128(mem) -+VPERMILPS_VAR_128(mem) - before - b8c8be837166e2cb.ab8f6f272d965daf.a61de1550ac47b00.da2ee9054070fc00 - f54f9cb2582306cd.2172ac84afeb37c6.b9c07d09af4b8e68.f91eab1d1b69145a -@@ -28614,11 +28614,11 @@ VCVTTPD2DQ_128(mem) - after - b8c8be837166e2cb.ab8f6f272d965daf.a61de1550ac47b00.da2ee9054070fc00 - f54f9cb2582306cd.2172ac84afeb37c6.b9c07d09af4b8e68.f91eab1d1b69145a -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ 0000000000000000.0000000000000000.f91eab1d1b69145a.f91eab1d1b69145a - b84f7bf450051680.fea03b03d5077693.1d055d31b8f0a2e4.60b30a2dca3a36ea - 5ff2a0fed629b879 - --VCVTTPD2DQ_128(reg) -+VPERMILPS_VAR_128(reg) - before - b68c1e3a2bd87f71.f45f74df98437b8a.1e8386fcb2e453a1.263f997f54261c50 - c1d0824d64d2c87f.3e36c3368d19c2ee.83a97856e50754ae.8d99ad83cfaedac2 -@@ -28626,12 +28626,12 @@ VCVTTPD2DQ_128(reg) - 6382eaa9f4d8cf8b.686454d9f0bee876.90ed41ddbf4db078.e9dd4f5cd4e61463 - 965ed40a95ae09ea - after -- b68c1e3a2bd87f71.f45f74df98437b8a.1e8386fcb2e453a1.263f997f54261c50 -+ 0000000000000000.0000000000000000.8d99ad83cfaedac2.cfaedac2cfaedac2 - c1d0824d64d2c87f.3e36c3368d19c2ee.83a97856e50754ae.8d99ad83cfaedac2 -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ dc09c7a31ea4cf4e.709ee5e64c94a7d9.8b5d0d7d0bfbb468.30df162845959964 - 6382eaa9f4d8cf8b.686454d9f0bee876.90ed41ddbf4db078.e9dd4f5cd4e61463 - 965ed40a95ae09ea --VCVTTPD2DQ_128(mem) -+VPERMILPS_VAR_128(mem) - before - 1130211ea6f73226.b289e6c982fc06e2.00548efd96a63ff3.f0a311e39e88848d - 381db38423d04c42.2568b670659cadfe.153a0e3c59556979.05cd78f943386c50 -@@ -28641,11 +28641,11 @@ VCVTTPD2DQ_128(mem) - after - 1130211ea6f73226.b289e6c982fc06e2.00548efd96a63ff3.f0a311e39e88848d - 381db38423d04c42.2568b670659cadfe.153a0e3c59556979.05cd78f943386c50 -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ 0000000000000000.0000000000000000.05cd78f9153a0e3c.153a0e3c05cd78f9 - f57b92f7ce5b41cd.e7e1c805987d4237.2717d0c0a83d2556.c2a8fb0951286697 - 22f10fdbf281f172 - --VCVTTPD2DQ_128(reg) -+VPERMILPS_VAR_128(reg) - before - a7deab6ec97e7fac.4584d9db35269593.ee1300c921d6a8ac.dba70bdc6c8d2f05 - afbaca2e72ad4df2.afd853c277b0caea.894dfec56edb6e97.7c5c7cc4bdd6fb6e -@@ -28653,12 +28653,12 @@ VCVTTPD2DQ_128(reg) - b36d81e5adcf9950.4495d545fe2ec5f9.eb0d3912c517117d.f668f0a87781cd20 - 8657eb7c19fb4ac0 - after -- a7deab6ec97e7fac.4584d9db35269593.ee1300c921d6a8ac.dba70bdc6c8d2f05 -+ 0000000000000000.0000000000000000.bdd6fb6e894dfec5.bdd6fb6e7c5c7cc4 - afbaca2e72ad4df2.afd853c277b0caea.894dfec56edb6e97.7c5c7cc4bdd6fb6e -- 0000000000000000.0000000000000000.0000000000000000.8000000080000000 -+ 94d068878a9a97ef.10457e96b1039bfd.14ddbd641b17d3a3.e7039f64b72447bd - b36d81e5adcf9950.4495d545fe2ec5f9.eb0d3912c517117d.f668f0a87781cd20 - 8657eb7c19fb4ac0 --VCVTTPD2DQ_128(mem) -+VPERMILPS_VAR_128(mem) - before - 739b0dccb89d7acc.68dd11b476da8ec1.2795d4ba7b3a040a.692a6f3b076565d0 - 9902d1857074186e.106c15608147b3ed.9512f7e14335135b.ec80594c7e900b49 -@@ -28668,11 +28668,11 @@ VCVTTPD2DQ_128(mem) - after - 739b0dccb89d7acc.68dd11b476da8ec1.2795d4ba7b3a040a.692a6f3b076565d0 - 9902d1857074186e.106c15608147b3ed.9512f7e14335135b.ec80594c7e900b49 -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ 0000000000000000.0000000000000000.4335135b4335135b.9512f7e17e900b49 - 00642fde9eee9126.a4166600d0747c28.82ad9af526269470.6d063ed178a63b5b - 24cf301f35aa3e4d - --VCVTTPD2DQ_256(reg) -+VPERMILPD_VAR_128(reg) - before - 4f00c80495ba8314.f9f8c2574aa9e393.49caaccc4b4c988f.ba6512ba79347e8b - 49e601eb3661455d.9bdee7e781c99548.50cc542478b6d462.ecc89ee187602896 -@@ -28680,12 +28680,12 @@ VCVTTPD2DQ_256(reg) - 1e014674aaa53324.4acfd701fa660334.f4edbf2d5a6d9bfa.b0c2e3064544af2f - fbf194db2e130414 - after -- 4f00c80495ba8314.f9f8c2574aa9e393.49caaccc4b4c988f.ba6512ba79347e8b -+ 0000000000000000.0000000000000000.ecc89ee187602896.50cc542478b6d462 - 49e601eb3661455d.9bdee7e781c99548.50cc542478b6d462.ecc89ee187602896 -- 0000000000000000.0000000000000000.0000000080000000.8000000000000000 -+ 70cdd642b42bc1d4.c2e21a7c5c5a616f.15695c76f43d6c4c.f4a3bb576cb74fbe - 1e014674aaa53324.4acfd701fa660334.f4edbf2d5a6d9bfa.b0c2e3064544af2f - fbf194db2e130414 --VCVTTPD2DQ_256(mem) -+VPERMILPD_VAR_128(mem) - before - b1fc49c34231099a.b1ce4aedb45ad6fa.0f739a6274fb39c5.49a479b547d39e17 - aeaf7ea99da97bed.837fe0196fd6e701.ed98e08be925bd4b.70d9877a56fab150 -@@ -28695,11 +28695,11 @@ VCVTTPD2DQ_256(mem) - after - b1fc49c34231099a.b1ce4aedb45ad6fa.0f739a6274fb39c5.49a479b547d39e17 - aeaf7ea99da97bed.837fe0196fd6e701.ed98e08be925bd4b.70d9877a56fab150 -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ 0000000000000000.0000000000000000.70d9877a56fab150.ed98e08be925bd4b - ed3c5a1f9ad895a8.58c1ae3a66544354.6498e2e62d64a1ed.a4f18b6b4cbcf6c5 - 696b7b6f6a6fa059 - --VCVTTPD2DQ_256(reg) -+VPERMILPD_VAR_128(reg) - before - 7094ad611b144ab8.e6aef88774a7b568.13e9e008db6f05f8.b40a96f03693795f - 15b81eabfb362f8f.97f8069d050032a5.7d2692387080257e.8e2fbd71a8859078 -@@ -28707,12 +28707,12 @@ VCVTTPD2DQ_256(reg) - a820affcb5219d54.8d436383be823245.d10e6b726bba6ede.4cbe518c39e86a4e - e9c0b6fe8f6fa563 - after -- 7094ad611b144ab8.e6aef88774a7b568.13e9e008db6f05f8.b40a96f03693795f -+ 0000000000000000.0000000000000000.8e2fbd71a8859078.8e2fbd71a8859078 - 15b81eabfb362f8f.97f8069d050032a5.7d2692387080257e.8e2fbd71a8859078 -- 0000000000000000.0000000000000000.0000000000000000.8000000080000000 -+ b423cbbba5618c8a.dbe6004d6af0c88b.f3c4c238c115df91.cdd1d257a048a264 - a820affcb5219d54.8d436383be823245.d10e6b726bba6ede.4cbe518c39e86a4e - e9c0b6fe8f6fa563 --VCVTTPD2DQ_256(mem) -+VPERMILPD_VAR_128(mem) - before - 7fa47d98bfec0fcf.4ffdc7d9c8039d9a.8bdda92c1ec22dff.7452895409f90f11 - e9362346e46864bd.04040dc07a92ca07.af7e5032a5bd74e7.36da18493860fed5 -@@ -28722,11 +28722,11 @@ VCVTTPD2DQ_256(mem) - after - 7fa47d98bfec0fcf.4ffdc7d9c8039d9a.8bdda92c1ec22dff.7452895409f90f11 - e9362346e46864bd.04040dc07a92ca07.af7e5032a5bd74e7.36da18493860fed5 -- 0000000000000000.0000000000000000.8000000080000000.0000000080000000 -+ 0000000000000000.0000000000000000.af7e5032a5bd74e7.36da18493860fed5 - ad93f98f8092bdd1.07c3175928e99508.de08af099a11daeb.8ae97a1cb6d4b5c1 - d40845d23efaf542 - --VCVTTPD2DQ_256(reg) -+VPERMILPD_VAR_128(reg) - before - ae9c724bc7767305.bff621012e573a4f.0e13d4e35dc8adf4.9f895fb240837060 - 74f0fbf3ecd66bb5.15371737414d91ff.92bdaf27a085e0b8.f7425f697ddf42b2 -@@ -28734,12 +28734,12 @@ VCVTTPD2DQ_256(reg) - 350c16817b6fb78d.01835fa008fac0a8.8553b388c2c68976.dd8b3fb12d878e9b - 23b3181ad9ea7f8a - after -- ae9c724bc7767305.bff621012e573a4f.0e13d4e35dc8adf4.9f895fb240837060 -+ 0000000000000000.0000000000000000.92bdaf27a085e0b8.f7425f697ddf42b2 - 74f0fbf3ecd66bb5.15371737414d91ff.92bdaf27a085e0b8.f7425f697ddf42b2 -- 0000000000000000.0000000000000000.0000000000000000.0000000080000000 -+ 8352de374aa518fe.8c22581ed67f7f0e.f10fa58f8eab6bff.c3ff2b1a6d320e0c - 350c16817b6fb78d.01835fa008fac0a8.8553b388c2c68976.dd8b3fb12d878e9b - 23b3181ad9ea7f8a --VCVTTPD2DQ_256(mem) -+VPERMILPD_VAR_128(mem) - before - 6f4430418c679c07.e66b9f3f1ec1830e.4e26a8abf3c810f8.acd6d47fd96278c9 - 9e070512620ba23b.f4bb75dccd26ba2d.51d6b02ab5f82a2b.c0e404df6e0c72a3 -@@ -28749,11 +28749,11 @@ VCVTTPD2DQ_256(mem) - after - 6f4430418c679c07.e66b9f3f1ec1830e.4e26a8abf3c810f8.acd6d47fd96278c9 - 9e070512620ba23b.f4bb75dccd26ba2d.51d6b02ab5f82a2b.c0e404df6e0c72a3 -- 0000000000000000.0000000000000000.8000000080000000.8000000000000000 -+ 0000000000000000.0000000000000000.c0e404df6e0c72a3.c0e404df6e0c72a3 - 165bd463e9f6597e.945df962c05a54f2.e491e93427a7afe9.23d0828984b8799e - 2947c8ac3cd2fe17 - --VCVTPD2DQ_128(reg) -+VPERMILPS_VAR_256(reg) - before - 8e780de8e32a7fc7.1682c6bbd25581e5.de479f243c422ff1.2d331397113f91cb - acb04ea9154a375b.690e636d4e0a82b4.f4538275356c643e.9b13eb1e40682f40 -@@ -28761,12 +28761,12 @@ VCVTPD2DQ_128(reg) - 8665b06b871840de.7880948e71a7fe3c.f3fcf0740cbbcc70.57bc9648de9a8993 - 5c1e61c486bbbfc8 - after -- 8e780de8e32a7fc7.1682c6bbd25581e5.de479f243c422ff1.2d331397113f91cb -+ acb04ea9acb04ea9.4e0a82b4acb04ea9.9b13eb1e40682f40.9b13eb1e40682f40 - acb04ea9154a375b.690e636d4e0a82b4.f4538275356c643e.9b13eb1e40682f40 -- 0000000000000000.0000000000000000.0000000000000000.8000000080000000 -+ e03b855b6dc0647f.ebc92a647a211817.32cb9fc146662f84.0bfdeeb5d02d4374 - 8665b06b871840de.7880948e71a7fe3c.f3fcf0740cbbcc70.57bc9648de9a8993 - 5c1e61c486bbbfc8 --VCVTPD2DQ_128(mem) -+VPERMILPS_VAR_256(mem) - before - f6edca13e39d9f3f.fb7aca4300dc0825.edff1ed650a8f14c.953273fb22f876ae - 01f64e23114ce525.99c6cf50749af7ff.24124528322ead76.73b823c025a76be9 -@@ -28776,11 +28776,11 @@ VCVTPD2DQ_128(mem) - after - f6edca13e39d9f3f.fb7aca4300dc0825.edff1ed650a8f14c.953273fb22f876ae - 01f64e23114ce525.99c6cf50749af7ff.24124528322ead76.73b823c025a76be9 -- 0000000000000000.0000000000000000.0000000000000000.8000000000000000 -+ 01f64e2301f64e23.01f64e2399c6cf50.322ead7625a76be9.24124528322ead76 - dae69332523d97ee.c3318bbbba333d1f.4b23579b71fe6fc2.52e8fbb860912008 - 0c291bc3d0e35944 - --VCVTPD2DQ_128(reg) -+VPERMILPS_VAR_256(reg) - before - 71eb58bd9cd8cc2d.60654d0a9d987a28.07e93aefc5250cbc.f3b93b930560ed3d - df7aae1261fdb570.c74d115229f0b480.e508c4093a40f29d.cd13aa460d782481 -@@ -28788,12 +28788,12 @@ VCVTPD2DQ_128(reg) - 422e967d4504d7b3.a78ca8e376c41b3d.dfab599cd423f6d9.8c431e89e8fbac13 - 28b01af1f27e75b8 - after -- 71eb58bd9cd8cc2d.60654d0a9d987a28.07e93aefc5250cbc.f3b93b930560ed3d -+ 61fdb570c74d1152.61fdb570df7aae12.0d782481cd13aa46.3a40f29d3a40f29d - df7aae1261fdb570.c74d115229f0b480.e508c4093a40f29d.cd13aa460d782481 -- 0000000000000000.0000000000000000.0000000000000000.8000000000000000 -+ b022192ebbdd4fb9.eb6c5cf613500023.b9da2574b6112c6d.b7fd229ea552d0ba - 422e967d4504d7b3.a78ca8e376c41b3d.dfab599cd423f6d9.8c431e89e8fbac13 - 28b01af1f27e75b8 --VCVTPD2DQ_128(mem) -+VPERMILPS_VAR_256(mem) - before - 671293c4e0e7e7d6.efec1f6b9bff890b.d97a73036f59c1f9.b3c65ded31028b8d - 253303edcd43bd99.14a6b2645a59a16d.5c023843191aad84.91782cd3683b2934 -@@ -28803,11 +28803,11 @@ VCVTPD2DQ_128(mem) - after - 671293c4e0e7e7d6.efec1f6b9bff890b.d97a73036f59c1f9.b3c65ded31028b8d - 253303edcd43bd99.14a6b2645a59a16d.5c023843191aad84.91782cd3683b2934 -- 0000000000000000.0000000000000000.0000000000000000.8000000000000000 -+ 5a59a16dcd43bd99.253303ed253303ed.5c02384391782cd3.91782cd391782cd3 - 8de5bef1170188bc.3741e428815bf1fc.c50fa1d4f2514bb6.dbd21c0fd5e96a0d - ff10343d44768797 - --VCVTPD2DQ_128(reg) -+VPERMILPS_VAR_256(reg) - before - 9c1608affd8c9bc5.f00effa4aa7cf475.ecba7bcb211ba283.622c3dfd58df73b5 - 102f93d39cb7e342.4127285eae19b682.8a5f0b289a6aa8c3.c114c3f6e0c9d332 -@@ -28815,12 +28815,12 @@ VCVTPD2DQ_128(reg) - eac8bfdeff7efddb.2258249373ea264a.ec6106c585e7a71f.31707d07c5e32658 - fb7daaf8592b915a - after -- 9c1608affd8c9bc5.f00effa4aa7cf475.ecba7bcb211ba283.622c3dfd58df73b5 -+ ae19b682102f93d3.4127285eae19b682.c114c3f6e0c9d332.9a6aa8c39a6aa8c3 - 102f93d39cb7e342.4127285eae19b682.8a5f0b289a6aa8c3.c114c3f6e0c9d332 -- 0000000000000000.0000000000000000.0000000000000000.8000000000000000 -+ b6a6d114be849abb.5efbb6093ce48810.6b7e90ad87d54168.bd91afaaa61c255a - eac8bfdeff7efddb.2258249373ea264a.ec6106c585e7a71f.31707d07c5e32658 - fb7daaf8592b915a --VCVTPD2DQ_128(mem) -+VPERMILPS_VAR_256(mem) - before - f583b1697ffe2489.07e1579dfa32484f.6808eee66c364e5d.69556adc2f2c1694 - fd500e47526a9914.6b3d97bd4b2bb7c2.0ed891f045d5ba74.3fa6b75e2231cc72 -@@ -28830,11 +28830,11 @@ VCVTPD2DQ_128(mem) - after - f583b1697ffe2489.07e1579dfa32484f.6808eee66c364e5d.69556adc2f2c1694 - fd500e47526a9914.6b3d97bd4b2bb7c2.0ed891f045d5ba74.3fa6b75e2231cc72 -- 0000000000000000.0000000000000000.0000000000000000.8000000080000000 -+ 6b3d97bd6b3d97bd.6b3d97bdfd500e47.45d5ba743fa6b75e.2231cc722231cc72 - a36abbf5713c1be8.74edfdd0611df058.e6084ed506395061.618ffc5350a8f71b - 66beec9ec433e63e - --VCVTPD2DQ_256(reg) -+VPERMILPD_VAR_256(reg) - before - 337ab605f1ad0a7b.f950029ff5b9a08a.d2da1a9b5e2d31d2.d0ff62892516f38e - 241055f272a3a07d.cc2c906496fef837.e539cf7821b487fc.89473da39476ca70 -@@ -28842,12 +28842,12 @@ VCVTPD2DQ_256(reg) - e2f50212e1301182.5af56ff4a1121060.9e80ee146b505d0f.d9f53cbad1ec0602 - 27f4588ed61be309 - after -- 337ab605f1ad0a7b.f950029ff5b9a08a.d2da1a9b5e2d31d2.d0ff62892516f38e -+ cc2c906496fef837.241055f272a3a07d.e539cf7821b487fc.e539cf7821b487fc - 241055f272a3a07d.cc2c906496fef837.e539cf7821b487fc.89473da39476ca70 -- 0000000000000000.0000000000000000.8000000080000000.0000000080000000 -+ 95cac5d3e39fe4f1.f9cae1327118de1a.0b5717d1473b2c82.eeaa5c0f6f649133 - e2f50212e1301182.5af56ff4a1121060.9e80ee146b505d0f.d9f53cbad1ec0602 - 27f4588ed61be309 --VCVTPD2DQ_256(mem) -+VPERMILPD_VAR_256(mem) - before - b5732c789bfce576.67dc091d08df64dd.cc7bb89643f94834.fb0050ac2a7f5650 - 5d3d35653b9cc872.7fcdd45ff23a19ae.2c26360472d842c3.7f233a041f5253f0 -@@ -28857,11 +28857,11 @@ VCVTPD2DQ_256(mem) - after - b5732c789bfce576.67dc091d08df64dd.cc7bb89643f94834.fb0050ac2a7f5650 - 5d3d35653b9cc872.7fcdd45ff23a19ae.2c26360472d842c3.7f233a041f5253f0 -- 0000000000000000.0000000000000000.0000000080000000.8000000080000000 -+ 5d3d35653b9cc872.7fcdd45ff23a19ae.7f233a041f5253f0.7f233a041f5253f0 - 6ee6d2f47e461fce.ddf8ab388621985f.211ec7f4e9ae70c1.678093a91c1a47ff - 8554facd5d25b6c6 - --VCVTPD2DQ_256(reg) -+VPERMILPD_VAR_256(reg) - before - 38fad9634406199d.8f5d5f6f59690c85.daccafa766c6da99.6f03d04e68be1b88 - ddbf2ad56d49ad2f.3b4f119c7f79c97c.dbd867fd7b466df8.1a3d0024e5f679b9 -@@ -28869,12 +28869,12 @@ VCVTPD2DQ_256(reg) - 6ed51801f8215236.a5d6d0bc1e96a6dc.58cae80fb1097ad6.f7e4c2f547103c0c - e1e84cc865091a85 - after -- 38fad9634406199d.8f5d5f6f59690c85.daccafa766c6da99.6f03d04e68be1b88 -+ 3b4f119c7f79c97c.3b4f119c7f79c97c.1a3d0024e5f679b9.1a3d0024e5f679b9 - ddbf2ad56d49ad2f.3b4f119c7f79c97c.dbd867fd7b466df8.1a3d0024e5f679b9 -- 0000000000000000.0000000000000000.8000000000000000.8000000080000000 -+ d0eeeb907578ab29.4f8862670d8513e0.3b68d1a7602e8f28.fe9ad2637c634581 - 6ed51801f8215236.a5d6d0bc1e96a6dc.58cae80fb1097ad6.f7e4c2f547103c0c - e1e84cc865091a85 --VCVTPD2DQ_256(mem) -+VPERMILPD_VAR_256(mem) - before - 9872edc7f05b9a19.11beab9290d0dc03.1a04d687cfba3e9d.8d48a9a30b636bae - f84e1fde04117af3.16f6a2b1dc0f863c.8addf0b43bfc964f.35300ecd0ac99d5b -@@ -28884,11 +28884,11 @@ VCVTPD2DQ_256(mem) - after - 9872edc7f05b9a19.11beab9290d0dc03.1a04d687cfba3e9d.8d48a9a30b636bae - f84e1fde04117af3.16f6a2b1dc0f863c.8addf0b43bfc964f.35300ecd0ac99d5b -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 16f6a2b1dc0f863c.f84e1fde04117af3.35300ecd0ac99d5b.8addf0b43bfc964f - 232b2c0339da442c.b683a845fa7329a0.cac351e5b60c7933.5269b99865e6b7e7 - 7f53f610f9b5171d - --VCVTPD2DQ_256(reg) -+VPERMILPD_VAR_256(reg) - before - 8fd5c8cfa1c0a9d9.a6c5fdea9205a8e2.0970b19305af9a23.536890c1fcf17cbf - e03d2c41fa93a8c6.42e0519ae4c45a8f.2edc0c1e32ac1bc2.47e9d3ae6e252feb -@@ -28896,12 +28896,12 @@ VCVTPD2DQ_256(reg) - b1eb97ee2dbddfe5.35cc6f00e5309a7c.5e60ad9c641a3b03.e0ae567044a798d4 - 3d8b8d1ce10ec5ea - after -- 8fd5c8cfa1c0a9d9.a6c5fdea9205a8e2.0970b19305af9a23.536890c1fcf17cbf -+ 42e0519ae4c45a8f.e03d2c41fa93a8c6.47e9d3ae6e252feb.2edc0c1e32ac1bc2 - e03d2c41fa93a8c6.42e0519ae4c45a8f.2edc0c1e32ac1bc2.47e9d3ae6e252feb -- 0000000000000000.0000000000000000.0000000000000000.8000000080000000 -+ ccd51dd29fb85191.d349a3fd4c24165e.8112b7531df6e729.8212969a27b34fe3 - b1eb97ee2dbddfe5.35cc6f00e5309a7c.5e60ad9c641a3b03.e0ae567044a798d4 - 3d8b8d1ce10ec5ea --VCVTPD2DQ_256(mem) -+VPERMILPD_VAR_256(mem) - before - 7473b98a18f39351.e9c99601402d8f6f.43343190cbf4a015.2110ea66a0a353fd - 633355a60862be34.d1bc167872959edb.db4f66971b7de554.266f6a1d6f1e6bc2 -@@ -28911,11 +28911,11 @@ VCVTPD2DQ_256(mem) - after - 7473b98a18f39351.e9c99601402d8f6f.43343190cbf4a015.2110ea66a0a353fd - 633355a60862be34.d1bc167872959edb.db4f66971b7de554.266f6a1d6f1e6bc2 -- 0000000000000000.0000000000000000.8000000080000000.8000000000000000 -+ d1bc167872959edb.633355a60862be34.266f6a1d6f1e6bc2.266f6a1d6f1e6bc2 - d56ace987d101a1f.22108b3eaa7ac307.15ca15bf680b1b76.6569250435178a60 - 589d570a63ad0890 - --VMOVSLDUP_128(reg) -+VPSLLW_128(reg) - before - fdafbcae9465773c.117aa3473b67c380.42097766e610521f.70c288b69c2984b1 - afec505b64ca110f.7491d8532077b80d.8348d4a1b2cd2fc9.c49c5ed6aa3b1c42 -@@ -28925,10 +28925,10 @@ VMOVSLDUP_128(reg) - after - fdafbcae9465773c.117aa3473b67c380.42097766e610521f.70c288b69c2984b1 - afec505b64ca110f.7491d8532077b80d.8348d4a1b2cd2fc9.c49c5ed6aa3b1c42 -- 0000000000000000.0000000000000000.6dedc2826dedc282.c36cc819c36cc819 -- af17f7804ecdb9dc.1e075336d0f87a5e.d3c3d3ff6dedc282.c6251f3fc36cc819 -- 2c6d035f05a354b6 --VMOVSLDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000006 -+ 0000000000000000.0000000000000000.d2002840b340f240.2700b5808ec01080 -+ 0000000000000006 -+VPSLLW_128(mem) - before - fcc63a5791ffff5a.b39d01d0a1823e2e.1dfe90e5d480be79.9b986cfc9368f0e9 - 10fd3e13828a8431.367e2ad90214df58.b42d1ea26ff23e70.f3e166bbba3b5c92 -@@ -28938,11 +28938,11 @@ VMOVSLDUP_128(mem) - after - fcc63a5791ffff5a.b39d01d0a1823e2e.1dfe90e5d480be79.9b986cfc9368f0e9 - 10fd3e13828a8431.367e2ad90214df58.b42d1ea26ff23e70.f3e166bbba3b5c92 -- 0000000000000000.0000000000000000.d480be79d480be79.9368f0e99368f0e9 -- 7835a28905630f25.257fcac7600265e2.15621bf6dcc5e6a5.c3036e327816dc57 -+ 46de8d80f552a066.92056f080e10d805.bd607859be5ab871.37ecbda97df04128 -+ 0000000000000000.0000000000000000.d000200020000000.1000b000b0002000 - f37374c3483669cc - --VMOVSLDUP_128(reg) -+VPSLLW_128(reg) - before - 2388cbc789de2433.83cef919cfc88d9c.493939849574c19b.99008165e53e843b - af8e6fa9d6994837.44740e1e6e8dd5f4.5c7cb8a948f429db.23072892f6d2505d -@@ -28952,10 +28952,10 @@ VMOVSLDUP_128(reg) - after - 2388cbc789de2433.83cef919cfc88d9c.493939849574c19b.99008165e53e843b - af8e6fa9d6994837.44740e1e6e8dd5f4.5c7cb8a948f429db.23072892f6d2505d -- 0000000000000000.0000000000000000.9a4c0ca29a4c0ca2.9e785df79e785df7 -- 4b9d8fbc0579bec9.531b64349d68b6fe.bbd5d2e09a4c0ca2.bd7a26d79e785df7 -- 848076c76ea217c7 --VMOVSLDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000007 -+ 0000000000000000.0000000000000000.3e0054807a00ed80.8380490069002e80 -+ 0000000000000007 -+VPSLLW_128(mem) - before - c21ef524b417edd3.133d03c41fb688ae.5ab39c1d6496c607.bf8165c9703cff81 - 531f21dc8fe29c48.a6feb55bb637abe1.8789822a715592a2.21e9f9cb3569ee97 -@@ -28965,11 +28965,11 @@ VMOVSLDUP_128(mem) - after - c21ef524b417edd3.133d03c41fb688ae.5ab39c1d6496c607.bf8165c9703cff81 - 531f21dc8fe29c48.a6feb55bb637abe1.8789822a715592a2.21e9f9cb3569ee97 -- 0000000000000000.0000000000000000.6496c6076496c607.703cff81703cff81 -- df7d6e096eac741c.a213bfe6c932efdf.be1e4961ccb34840.70180ccafbacaf1b -+ 135075da1810e052.622c9fed6587640d.b4699247e0b0d4fc.3e57875285601591 -+ 0000000000000000.0000000000000000.8789822a715592a2.21e9f9cb3569ee97 - 1478859f33d9f9e0 - --VMOVSLDUP_128(reg) -+VPSLLW_128(reg) - before - 86c3ed3eca742f8d.91728657aac215d3.c2ff0fb27dc48703.81762262516bab9b - 224440115c088ccd.06fb3bb0ea5e7fa2.1d3c8dbe1eca6924.d93b99378ce3ba39 -@@ -28979,10 +28979,10 @@ VMOVSLDUP_128(reg) - after - 86c3ed3eca742f8d.91728657aac215d3.c2ff0fb27dc48703.81762262516bab9b - 224440115c088ccd.06fb3bb0ea5e7fa2.1d3c8dbe1eca6924.d93b99378ce3ba39 -- 0000000000000000.0000000000000000.9460fa0f9460fa0f.9243c6ec9243c6ec -- 491c9807de4cafb9.a9f8692ee55b9d3b.f9d801429460fa0f.b83f520f9243c6ec -- f7168ce996443c59 --VMOVSLDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000009 -+ 0000000000000000.0000000000000000.78007c0094004800.76006e00c6007200 -+ 0000000000000009 -+VPSLLW_128(mem) - before - 3b8b5446bf364db9.8b0a95020714ebbc.8f04da2cd8d2c95c.30cfef93a3082231 - 606926142923b538.675f6de29a064003.a8d4d8e53e00ae46.1447fad30d538300 -@@ -28992,11 +28992,11 @@ VMOVSLDUP_128(mem) - after - 3b8b5446bf364db9.8b0a95020714ebbc.8f04da2cd8d2c95c.30cfef93a3082231 - 606926142923b538.675f6de29a064003.a8d4d8e53e00ae46.1447fad30d538300 -- 0000000000000000.0000000000000000.d8d2c95cd8d2c95c.a3082231a3082231 -- bd94d9b132247840.5d6d9f0170951f0b.e2f06834d4af9223.4fe957cf6804e258 -+ 427e7e3ff0192f01.39671c1334ade839.cf34de4333f00824.ff8c1e6d70ce5929 -+ 0000000000000000.0000000000000000.d400e50000004600.4700d30053000000 - 5eaca2648f815838 - --VMOVSLDUP_256(reg) -+VPSRLW_128(reg) - before - 8a1ffa9984d2f876.ac78b257084e4c23.2fbff018ea4a2325.bcd3f2a33d48096f - 2d8f5bd8e182fdbe.edf6851d90a566d4.0ba70dc440592e32.39abf87b88c72933 -@@ -29006,10 +29006,10 @@ VMOVSLDUP_256(reg) - after - 8a1ffa9984d2f876.ac78b257084e4c23.2fbff018ea4a2325.bcd3f2a33d48096f - 2d8f5bd8e182fdbe.edf6851d90a566d4.0ba70dc440592e32.39abf87b88c72933 -- 44302a1944302a19.2508605125086051.e9b34cd7e9b34cd7.3ba952d53ba952d5 -- 4c96282844302a19.d2ef0aba25086051.506c998ce9b34cd7.8b656a1b3ba952d5 -- 19e0cdbad924d40b --VMOVSLDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000000b -+ 0000000000000000.0000000000000000.0001000100080005.0007001f00110005 -+ 000000000000000b -+VPSRLW_128(mem) - before - ba7f9d74cbb4ee69.7fc58d108246c886.2d02b4696a2cb676.72e1ff7f7615d6c7 - 490e54332c675e1c.9a21ebb499ebbdab.4ae048e8d0ad4419.0e1d21b84d02585b -@@ -29019,11 +29019,11 @@ VMOVSLDUP_256(mem) - after - ba7f9d74cbb4ee69.7fc58d108246c886.2d02b4696a2cb676.72e1ff7f7615d6c7 - 490e54332c675e1c.9a21ebb499ebbdab.4ae048e8d0ad4419.0e1d21b84d02585b -- cbb4ee69cbb4ee69.8246c8868246c886.6a2cb6766a2cb676.7615d6c77615d6c7 -- a62b6c74ad642a30.f98e82dcc01497d4.36281e0570f2f38c.231886a84aa6341c -+ a45870e41949de50.faf53e7f24ac4337.045342237395c467.806bfaa20a030e3e -+ 0000000000000000.0000000000000000.095c091d1a150883.01c3043709a00b0b - 5571c238a97605a3 - --VMOVSLDUP_256(reg) -+VPSRLW_128(reg) - before - 71c0a8bdc200be7d.2a51c4cd05c600e9.f439b43908aff52f.be2b597de3d08cb3 - d25236a331cf9b56.0e97f5dd3c7b1aa7.4740cf01990a98f3.76276e74e63a4d09 -@@ -29033,10 +29033,10 @@ VMOVSLDUP_256(reg) - after - 71c0a8bdc200be7d.2a51c4cd05c600e9.f439b43908aff52f.be2b597de3d08cb3 - d25236a331cf9b56.0e97f5dd3c7b1aa7.4740cf01990a98f3.76276e74e63a4d09 -- 836cafb8836cafb8.b80b0ce0b80b0ce0.032da068032da068.13e231f013e231f0 -- d86e3843836cafb8.62b3cecfb80b0ce0.6594b083032da068.ea3e169213e231f0 -- 5ef0a1927339ced9 --VMOVSLDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000009 -+ 0000000000000000.0000000000000000.00230067004c004c.003b003700730026 -+ 0000000000000009 -+VPSRLW_128(mem) - before - 72ccf7c1d54c81a1.3390a3d49e535f98.8a206f8936fe5db3.e87a6e14150e7c71 - 049e930d54280774.4526a6767fb02328.81ded9a90374e23b.33ec06c0e0de8f94 -@@ -29046,11 +29046,11 @@ VMOVSLDUP_256(mem) - after - 72ccf7c1d54c81a1.3390a3d49e535f98.8a206f8936fe5db3.e87a6e14150e7c71 - 049e930d54280774.4526a6767fb02328.81ded9a90374e23b.33ec06c0e0de8f94 -- d54c81a1d54c81a1.9e535f989e535f98.36fe5db336fe5db3.150e7c71150e7c71 -- 0d538ea81b687be9.fad9619f05f8d507.4d78f4cbfb177a18.91a7b11a0e7c44d6 -+ ee32f1600dd71b7d.687a3c96c30d3614.24b7861b3b7857a3.a23773f4ff29127c -+ 0000000000000000.0000000000000000.0004000600000007.0001000000070004 - 5c88bca0aa625f4d - --VMOVSLDUP_256(reg) -+VPSRLW_128(reg) - before - 5f2691f16e68a18e.3dcfe4d09ae4e1e4.558f12fce1fc3cad.d9ed9ea55f5c05c6 - f6cc2b79f7194344.5b7071c4a7590999.d6e7491bf5a6a6b4.a5e200968153b5d8 -@@ -29060,10 +29060,10 @@ VMOVSLDUP_256(reg) - after - 5f2691f16e68a18e.3dcfe4d09ae4e1e4.558f12fce1fc3cad.d9ed9ea55f5c05c6 - f6cc2b79f7194344.5b7071c4a7590999.d6e7491bf5a6a6b4.a5e200968153b5d8 -- c6ac9ec2c6ac9ec2.da5c93e3da5c93e3.2e19768f2e19768f.768873da768873da -- 50649edec6ac9ec2.cc541dc0da5c93e3.bbb13e4c2e19768f.687bdd69768873da -- 18b750237fdef922 --VMOVSLDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000002 -+ 0000000000000000.0000000000000000.35b912463d6929ad.2978002520542d76 -+ 0000000000000002 -+VPSRLW_128(mem) - before - 77a46ba4b817947f.cbed6f9345a7cee2.d82f35a038026ccf.d6baf3368dfb54bc - 620caad73c3eff1c.49aff62ff77d5027.415f72fd92d0f827.8896209192b225f9 -@@ -29073,11 +29073,11 @@ VMOVSLDUP_256(mem) - after - 77a46ba4b817947f.cbed6f9345a7cee2.d82f35a038026ccf.d6baf3368dfb54bc - 620caad73c3eff1c.49aff62ff77d5027.415f72fd92d0f827.8896209192b225f9 -- b817947fb817947f.45a7cee245a7cee2.38026ccf38026ccf.8dfb54bc8dfb54bc -- 477f8603978738c8.c30e13cd6aec38d1.9bf251dab11517c5.1cf7cf4bffd09351 -+ b3bb8aa8275ff726.28f62d1e7bbb5f3d.e4b252c107d2f215.2b91c0cad9ca26f1 -+ 0000000000000000.0000000000000000.0415072f092d0f82.08890209092b025f - b71349819f4fa7c4 - --VMOVSHDUP_128(reg) -+VPSRAW_128(reg) - before - 58332ad956d39ff7.fa231ad4a5c07e2f.7542a1a6629c178f.43ece932aca42365 - 5ba16fbec0e9b796.a872c2086f198487.9cdfd417ff573822.b86c97b7158cd11e -@@ -29087,10 +29087,10 @@ VMOVSHDUP_128(reg) - after - 58332ad956d39ff7.fa231ad4a5c07e2f.7542a1a6629c178f.43ece932aca42365 - 5ba16fbec0e9b796.a872c2086f198487.9cdfd417ff573822.b86c97b7158cd11e -- 0000000000000000.0000000000000000.b5841b6db5841b6d.792e27f5792e27f5 -- f89a12de1af936c6.65453f44a654c3b8.b5841b6d96212e7a.792e27f59f940692 -- 7c070086f8cd05a3 --VMOVSHDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000003 -+ 0000000000000000.0000000000000000.f39bfa82ffea0704.f70df2f602b1fa23 -+ 0000000000000003 -+VPSRAW_128(mem) - before - bd97e0f32f8e977f.49bd68f2420a15af.2b5f0c264a5074e9.6024262bc8467c96 - 17a841285fe37752.6c5e11438ede04b4.5d56dd191a99d5bb.ee5dc6300ea7fb38 -@@ -29100,11 +29100,11 @@ VMOVSHDUP_128(mem) - after - bd97e0f32f8e977f.49bd68f2420a15af.2b5f0c264a5074e9.6024262bc8467c96 - 17a841285fe37752.6c5e11438ede04b4.5d56dd191a99d5bb.ee5dc6300ea7fb38 -- 0000000000000000.0000000000000000.2b5f0c262b5f0c26.6024262b6024262b -- 86807b9a1c7b138b.974e4e4cfbf801c1.72077be7ad489af1.27c9b7bf484b7fbc -+ 6607a111a5d96148.bdcb0a3d97fe3f81.d6f52e0b323da35a.bd7bf8e805cfe80b -+ 0000000000000000.0000000000000000.0175ff74006aff56.ffb9ff18003affec - 8994ff2274a6fcf6 - --VMOVSHDUP_128(reg) -+VPSRAW_128(reg) - before - 4028cc7b256c9a66.52de4cb0e1d5474a.5834d9dd56578721.0d5a4199a7c475ad - a6d11b38f52a96b8.a8ef8e3d0ff4baaf.5bc9a75a43a70d4c.82b8fb0d3dbff1b9 -@@ -29114,10 +29114,10 @@ VMOVSHDUP_128(reg) - after - 4028cc7b256c9a66.52de4cb0e1d5474a.5834d9dd56578721.0d5a4199a7c475ad - a6d11b38f52a96b8.a8ef8e3d0ff4baaf.5bc9a75a43a70d4c.82b8fb0d3dbff1b9 -- 0000000000000000.0000000000000000.9730fecc9730fecc.6fc83beb6fc83beb -- f3922b8a68bb97b0.5f565a7117ae4c1d.9730fecc454c07b6.6fc83bebab60bb73 -- 9e11ba2dbb1e827a --VMOVSHDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000001a -+ 0000000000000000.0000000000000000.0000ffff00000000.ffffffff0000ffff -+ 000000000000001a -+VPSRAW_128(mem) - before - 17971de2d78bd980.9141e5f743a714ae.7744dbef2a62e37e.88997e9991b9f44c - b824e0f41ab27cb4.4f351178adbadf3e.8914bf95160aa936.2ae23103e047d05d -@@ -29127,11 +29127,11 @@ VMOVSHDUP_128(mem) - after - 17971de2d78bd980.9141e5f743a714ae.7744dbef2a62e37e.88997e9991b9f44c - b824e0f41ab27cb4.4f351178adbadf3e.8914bf95160aa936.2ae23103e047d05d -- 0000000000000000.0000000000000000.7744dbef7744dbef.88997e9988997e99 -- de8777e4875e9a50.9b1cab63a4864ec3.07899c09ea67b158.f63f215ef5f749a4 -+ 5b857f51a19f293f.89baa9784480340c.6f92804ff7b35a70.db551376ce82d997 -+ 0000000000000000.0000000000000000.8914bf95160aa936.2ae23103e047d05d - d6ec5627f4305c30 - --VMOVSHDUP_128(reg) -+VPSRAW_128(reg) - before - d9a8ae3d65bc50e8.1bf34298e8fc8c11.e2a712a568576a10.2bc78eaf0a346b1c - 59be250ce4245f78.f0985e5be184baaf.b8a7daaa2d80c49e.b916d22d742644e6 -@@ -29141,10 +29141,10 @@ VMOVSHDUP_128(reg) - after - d9a8ae3d65bc50e8.1bf34298e8fc8c11.e2a712a568576a10.2bc78eaf0a346b1c - 59be250ce4245f78.f0985e5be184baaf.b8a7daaa2d80c49e.b916d22d742644e6 -- 0000000000000000.0000000000000000.84357eae84357eae.7f1a42627f1a4262 -- 442c62867ebdc0ce.ceb977bb0a83be30.84357eae27062130.7f1a426294a6413d -- 6f6765f1834cde23 --VMOVSHDUP_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000003 -+ 0000000000000000.0000000000000000.f714fb5505b0f893.f722fa450e84089c -+ 0000000000000003 -+VPSRAW_128(mem) - before - 38f6ca072a478abf.671b1f08d1068bed.8fcd6b3071120a6b.325b5285957d9c8b - b792ed92a7a2003e.7795ebf4a25c6193.574aa063e0bc8433.e02677ce747b44d8 -@@ -29154,11 +29154,11 @@ VMOVSHDUP_128(mem) - after - 38f6ca072a478abf.671b1f08d1068bed.8fcd6b3071120a6b.325b5285957d9c8b - b792ed92a7a2003e.7795ebf4a25c6193.574aa063e0bc8433.e02677ce747b44d8 -- 0000000000000000.0000000000000000.8fcd6b308fcd6b30.325b5285325b5285 -- 42255eb492aa3d93.d259a1b630602026.6da9bab4458eed19.acdba56bf23c0ff6 -+ c6094b7d166afdcb.d2e6c2b58d4b7e6c.03fa9141738ce6b4.eae2e9f75f8c57c2 -+ 0000000000000000.0000000000000000.574aa063e0bc8433.e02677ce747b44d8 - 815ca695ca18a920 - --VMOVSHDUP_256(reg) -+VPSLLD_128(reg) - before - c7b3e8e382ab60eb.07b3a423386e7bc2.d53c83652426816b.722597aa72ce558f - d92a67c0b7827104.f27f99b623c27583.35d9642d0729dee7.ee39a50d1759d942 -@@ -29168,10 +29168,10 @@ VMOVSHDUP_256(reg) - after - c7b3e8e382ab60eb.07b3a423386e7bc2.d53c83652426816b.722597aa72ce558f - d92a67c0b7827104.f27f99b623c27583.35d9642d0729dee7.ee39a50d1759d942 -- d1ab0dd8d1ab0dd8.a5007cf9a5007cf9.7f7514b97f7514b9.bc5741cfbc5741cf -- d1ab0dd8062991ce.a5007cf9394c876d.7f7514b909187b37.bc5741cf377e280c -- c5fac705ea306a7c --VMOVSHDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000001c -+ 0000000000000000.0000000000000000.d000000070000000.d000000020000000 -+ 000000000000001c -+VPSLLD_128(mem) - before - b5656e59855cb9d9.6e4d2cea581117d8.264e63809d9a18ee.220ada545f1b3362 - 6864b1b7230fd14f.483f783c976de8df.3c09e8dcb6a855b2.928b90b8148cd675 -@@ -29181,11 +29181,11 @@ VMOVSHDUP_256(mem) - after - b5656e59855cb9d9.6e4d2cea581117d8.264e63809d9a18ee.220ada545f1b3362 - 6864b1b7230fd14f.483f783c976de8df.3c09e8dcb6a855b2.928b90b8148cd675 -- b5656e59b5656e59.6e4d2cea6e4d2cea.264e6380264e6380.220ada54220ada54 -- 874dfb41d9374b33.1f47874c49af5596.97f9bdbf7835bdb1.4c7dba8c09e5d101 -+ bac20b0be0546e09.bacfed385ec83d8f.c3fe87f7a082f7e4.2c433152c3f6a21b -+ 0000000000000000.0000000000000000.46e00000ad900000.85c00000b3a80000 - 4e8625d482e6a0d3 - --VMOVSHDUP_256(reg) -+VPSLLD_128(reg) - before - 8eaa7095c8844b3c.abcffa452ac525fa.d5f443e2f5ad6a9e.94c6051f59cc6144 - 6835963a7a4c0de9.02158604ee08b88a.36221c68fe4eb953.9631db036053a0ca -@@ -29195,10 +29195,10 @@ VMOVSHDUP_256(reg) - after - 8eaa7095c8844b3c.abcffa452ac525fa.d5f443e2f5ad6a9e.94c6051f59cc6144 - 6835963a7a4c0de9.02158604ee08b88a.36221c68fe4eb953.9631db036053a0ca -- 5ab064e55ab064e5.b81d315fb81d315f.6d3116f16d3116f1.1910210719102107 -- 5ab064e58c86c9bd.b81d315f41e3f8b3.6d3116f194abf477.191021074e63de5e -- 521c8aff6d0355c4 --VMOVSHDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000004 -+ 0000000000000000.0000000000000000.6221c680e4eb9530.631db030053a0ca0 -+ 0000000000000004 -+VPSLLD_128(mem) - before - 00f6712b22c457cc.2a3704c324123a3d.d0764ad407921da5.fba92ecc5a7e583d - fe6a527888b19fa3.04556f3597f7b4b0.8bc4deb3b128eb0f.a4d35446ed24e661 -@@ -29208,11 +29208,11 @@ VMOVSHDUP_256(mem) - after - 00f6712b22c457cc.2a3704c324123a3d.d0764ad407921da5.fba92ecc5a7e583d - fe6a527888b19fa3.04556f3597f7b4b0.8bc4deb3b128eb0f.a4d35446ed24e661 -- 00f6712b00f6712b.2a3704c32a3704c3.d0764ad4d0764ad4.fba92eccfba92ecc -- 5f4ff321d840f56d.468796887dfcad21.5a6a6c5e1f3570fd.bb68b7c8e71c6f72 -+ 2a44a9d0bbd6eb75.4457a1a881c171c3.c5d16be75aaf1d1e.c6f983cce82ada8f -+ 0000000000000000.0000000000000000.acc00000c3c00000.1180000098400000 - e06ceda78784e2b6 - --VMOVSHDUP_256(reg) -+VPSLLD_128(reg) - before - 92511fd663f06f09.7859aa55fbfa79b8.66314b422835a677.255b5d041bc6a0d9 - 2b624bc018ec5114.532c4c5a3f103581.00a3ba411df79671.0470bac36b6d68de -@@ -29222,10 +29222,10 @@ VMOVSHDUP_256(reg) - after - 92511fd663f06f09.7859aa55fbfa79b8.66314b422835a677.255b5d041bc6a0d9 - 2b624bc018ec5114.532c4c5a3f103581.00a3ba411df79671.0470bac36b6d68de -- 853c7f74853c7f74.bb603f84bb603f84.110bbcbd110bbcbd.6a35aa3f6a35aa3f -- 853c7f747bc00809.bb603f849b82403f.110bbcbd56484dfe.6a35aa3f752db410 -- aa7e34d5675fae97 --VMOVSHDUP_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000017 -+ 0000000000000000.0000000000000000.2080000038800000.618000006f000000 -+ 0000000000000017 -+VPSLLD_128(mem) - before - 6c1a1a341dd732f6.ff9c7e1761b25349.01598881ecf5078c.41994513d2ee8ceb - 8ed6d84ab2a1fa59.d05967258f62e4f4.774baafecef5f608.5a1e7a5e094db32b -@@ -29235,11 +29235,11 @@ VMOVSHDUP_256(mem) - after - 6c1a1a341dd732f6.ff9c7e1761b25349.01598881ecf5078c.41994513d2ee8ceb - 8ed6d84ab2a1fa59.d05967258f62e4f4.774baafecef5f608.5a1e7a5e094db32b -- 6c1a1a346c1a1a34.ff9c7e17ff9c7e17.0159888101598881.4199451341994513 -- 5edece48eb5d48de.ea1ae4323632c835.674e6f28b6c9363b.bc3dd5831769a855 -+ ea7eeb0243cac3ed.55bf350aa35ff8b4.fb0423e75d8dc7de.bae6560a97f2fe6a -+ 0000000000000000.0000000000000000.fe00000008000000.5e0000002b000000 - bb6ff335253cef98 - --VPERMILPS_VAR_128(reg) -+VPSRLD_128(reg) - before - 15c7ad8d5ef90cde.c4c1fd08c6674757.ebb5710ae6699324.99f608aef4b6014b - 2492fdf55d2b3ed4.faf5f42ef1f27a85.b4ddd6fc4f8f932d.6bc86c63345fe239 -@@ -29247,12 +29247,12 @@ VPERMILPS_VAR_128(reg) - d5b154a91f20cc7f.417b2c5ca6c16eaf.0e051de2b9d9253a.631a820e2817d861 - 40312cdc143d66f3 - after -- 0000000000000000.0000000000000000.6bc86c63b4ddd6fc.6bc86c636bc86c63 -+ 15c7ad8d5ef90cde.c4c1fd08c6674757.ebb5710ae6699324.99f608aef4b6014b - 2492fdf55d2b3ed4.faf5f42ef1f27a85.b4ddd6fc4f8f932d.6bc86c63345fe239 -- 461ce1dbbf5fbf26.da4430a6880d9d94.a1df11750c3005fb.bb90163591d19631 -- d5b154a91f20cc7f.417b2c5ca6c16eaf.0e051de2b9d9253a.631a820e2817d861 -- 40312cdc143d66f3 --VPERMILPS_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000013 -+ 0000000000000000.0000000000000000.0000169b000009f1.00000d790000068b -+ 0000000000000013 -+VPSRLD_128(mem) - before - 2fa3918a724ffa13.2f9d53cd19faa18b.0c66643c671ca702.579cf6aef3152e98 - 0a3a2c045d5a50ee.ae2cd8b24a7a79f8.15d15433e82905ba.d8ef994455715dbf -@@ -29262,11 +29262,11 @@ VPERMILPS_VAR_128(mem) - after - 2fa3918a724ffa13.2f9d53cd19faa18b.0c66643c671ca702.579cf6aef3152e98 - 0a3a2c045d5a50ee.ae2cd8b24a7a79f8.15d15433e82905ba.d8ef994455715dbf -- 0000000000000000.0000000000000000.55715dbfe82905ba.e82905ba55715dbf -- f70af40c4b893684.8f62696fc099269f.54564d12988a1f09.f2fd2a8303b61c1a -+ aec37936f16926b0.afa9e1c44e2b9270.3988782b44f54403.ed4c01127c77ee5b -+ 0000000000000000.0000000000000000.00ae8aa10741482d.06c77cca02ab8aed - 4250100387b725a5 - --VPERMILPS_VAR_128(reg) -+VPSRLD_128(reg) - before - 3b8faffea40843ab.c1db1a7287c53d97.a8a16d1f3d517132.42084ed3fff753f7 - 380704e1f434b2d6.e9016555c029f714.57b3e74060deb0d5.e06bf75996459cf9 -@@ -29274,12 +29274,12 @@ VPERMILPS_VAR_128(reg) - add1bd0aa34e774c.be805f3e9a9b72ff.e87f328609a8faf9.976f3269c2b95bec - 69a8bbca8ff74a35 - after -- 0000000000000000.0000000000000000.60deb0d557b3e740.60deb0d5e06bf759 -+ 3b8faffea40843ab.c1db1a7287c53d97.a8a16d1f3d517132.42084ed3fff753f7 - 380704e1f434b2d6.e9016555c029f714.57b3e74060deb0d5.e06bf75996459cf9 -- 95030a1615c8b0d2.494a539f12c21f28.f8e4d53ec5cc1f33.0849c4927882b53d -- add1bd0aa34e774c.be805f3e9a9b72ff.e87f328609a8faf9.976f3269c2b95bec -- 69a8bbca8ff74a35 --VPERMILPS_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000015 -+ 0000000000000000.0000000000000000.000002bd00000306.00000703000004b2 -+ 0000000000000015 -+VPSRLD_128(mem) - before - 5ac2dda1fc473e42.debc192a395544f0.2470061c74c0acc4.81d2fa82c7fd7dd2 - 468713db24b5f23f.830f1be174665269.57e6c227ba3d88a4.202729a09c57e36b -@@ -29289,11 +29289,11 @@ VPERMILPS_VAR_128(mem) - after - 5ac2dda1fc473e42.debc192a395544f0.2470061c74c0acc4.81d2fa82c7fd7dd2 - 468713db24b5f23f.830f1be174665269.57e6c227ba3d88a4.202729a09c57e36b -- 0000000000000000.0000000000000000.9c57e36b9c57e36b.ba3d88a4ba3d88a4 -- 7f46ac23161d8dbc.9820fdc346db248d.94946e7101721963.e00baeeef94c4a8c -+ 09c4da62234e235a.f717bd9aef0fde64.33ae114a8b1fc4ca.21ccbc4a24436970 -+ 0000000000000000.0000000000000000.00057e6c000ba3d8.000202720009c57e - b931fbf7baffc46c - --VPERMILPS_VAR_128(reg) -+VPSRLD_128(reg) - before - 08899fd100e611bb.84d6070b192eec94.c076d6c71657608f.566355883840469b - 296197e86a8f6e26.f3436605478efb0c.cd654512fb0ece16.54e9437b4d97069d -@@ -29301,12 +29301,12 @@ VPERMILPS_VAR_128(reg) - 51bd6f7d135646ff.84e021de95681c8d.023cd12d715e2e67.794520a57e0e2cb1 - 57b408b5d4460c1b - after -- 0000000000000000.0000000000000000.4d97069d4d97069d.fb0ece16fb0ece16 -+ 08899fd100e611bb.84d6070b192eec94.c076d6c71657608f.566355883840469b - 296197e86a8f6e26.f3436605478efb0c.cd654512fb0ece16.54e9437b4d97069d -- 7803dda891861659.aa5846fcbc487750.19384410908ca9d0.6cf0b2365b831496 -- 51bd6f7d135646ff.84e021de95681c8d.023cd12d715e2e67.794520a57e0e2cb1 -- 57b408b5d4460c1b --VPERMILPS_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000001b -+ 0000000000000000.0000000000000000.000000190000001f.0000000a00000009 -+ 000000000000001b -+VPSRLD_128(mem) - before - e209e65076376eff.10d948d38c8b3ac5.5da97596edfba5ef.e2bee7d53b0f9887 - f50f376482eb0f8b.11a4651797b12e56.117dbd10e10ccfa1.16088275892b24dd -@@ -29316,11 +29316,11 @@ VPERMILPS_VAR_128(mem) - after - e209e65076376eff.10d948d38c8b3ac5.5da97596edfba5ef.e2bee7d53b0f9887 - f50f376482eb0f8b.11a4651797b12e56.117dbd10e10ccfa1.16088275892b24dd -- 0000000000000000.0000000000000000.e10ccfa1117dbd10.16088275117dbd10 -- 28621fa347d2fd45.48765715d502048b.797919fa0bd9f5a8.eb26384923d692da -+ 6e9476db1470abe8.b06ac0b3d1555d5f.7b2975388da756d0.fb679f77f83f0e15 -+ 0000000000000000.0000000000000000.0000000800000070.0000000b00000044 - 43934b55a77cecd9 - --VPERMILPD_VAR_128(reg) -+VPSRAD_128(reg) - before - 60f9d3091fbe57bd.fe46aea7371bc2cc.371625a83f455f88.e63826437aad6a54 - 9ca3cdd028271033.ce0c9fd30159b6a9.d89426d7aca9aaff.9d3417fdf32f6f01 -@@ -29328,12 +29328,12 @@ VPERMILPD_VAR_128(reg) - e4f603475b9f5b84.c86d995391e31a18.9f5eb2befd04fe12.5d0f9578796f1b0c - 1e861a11bd443ac2 - after -- 0000000000000000.0000000000000000.d89426d7aca9aaff.d89426d7aca9aaff -+ 60f9d3091fbe57bd.fe46aea7371bc2cc.371625a83f455f88.e63826437aad6a54 - 9ca3cdd028271033.ce0c9fd30159b6a9.d89426d7aca9aaff.9d3417fdf32f6f01 -- 54de33165d4352e7.72806f13c1989509.873e5710b7ba209f.7c376816946cc0da -- e4f603475b9f5b84.c86d995391e31a18.9f5eb2befd04fe12.5d0f9578796f1b0c -- 1e861a11bd443ac2 --VPERMILPD_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000002 -+ 0000000000000000.0000000000000000.f62509b5eb2a6abf.e74d05fffccbdbc0 -+ 0000000000000002 -+VPSRAD_128(mem) - before - 996874cb7df8da29.a83738cfbdc665b7.aaa1997f90460201.7e40354d1a148004 - ac831e94d496b66d.fcecce1a2044ad2b.f6e6eb83d8cd09f1.7e32db29a875e122 -@@ -29343,11 +29343,11 @@ VPERMILPD_VAR_128(mem) - after - 996874cb7df8da29.a83738cfbdc665b7.aaa1997f90460201.7e40354d1a148004 - ac831e94d496b66d.fcecce1a2044ad2b.f6e6eb83d8cd09f1.7e32db29a875e122 -- 0000000000000000.0000000000000000.7e32db29a875e122.7e32db29a875e122 -- 06905200b8c2163a.c4e60eaa5677e589.38d676c4b4796295.567281798e5c3391 -+ 31a29457de2b8cb9.3c63c2941fa66e8d.86090c4c8585ea13.fd7fa1bf46b45e18 -+ 0000000000000000.0000000000000000.fffffffdfffffff6.0000001fffffffea - e45979c41cf99c3a - --VPERMILPD_VAR_128(reg) -+VPSRAD_128(reg) - before - 057e840d8c18d4bf.051bd57b7e67101c.f0c2b0c662444eca.e619a7d980b62da0 - 132e9ebf7c4418cb.0b0d98b54b26388a.1c43a356de97e5fd.6e9e1a7606460762 -@@ -29355,12 +29355,12 @@ VPERMILPD_VAR_128(reg) - 6a5ef00d45f4b32a.9d58ce116b24fdbc.e4646d7e99058be7.779db7f7ad95d6bb - b1afd9b4076b44a9 - after -- 0000000000000000.0000000000000000.6e9e1a7606460762.1c43a356de97e5fd -+ 057e840d8c18d4bf.051bd57b7e67101c.f0c2b0c662444eca.e619a7d980b62da0 - 132e9ebf7c4418cb.0b0d98b54b26388a.1c43a356de97e5fd.6e9e1a7606460762 -- 6bb4c3458509a40a.f53317983b0c48b0.a4b5e4c567ffe5cd.aa304c866138ab07 -- 6a5ef00d45f4b32a.9d58ce116b24fdbc.e4646d7e99058be7.779db7f7ad95d6bb -- b1afd9b4076b44a9 --VPERMILPD_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000009 -+ 0000000000000000.0000000000000000.000e21d1ffef4bf2.00374f0d00032303 -+ 0000000000000009 -+VPSRAD_128(mem) - before - 35332da98bc5b0fd.6a772082589082d4.e04a390df67b13d8.389c3cef0f3713f7 - ddf52fc254b0d8e5.c84a4f1059694db7.9ad4d576f91c4530.fca84c836520b9a8 -@@ -29370,11 +29370,11 @@ VPERMILPD_VAR_128(mem) - after - 35332da98bc5b0fd.6a772082589082d4.e04a390df67b13d8.389c3cef0f3713f7 - ddf52fc254b0d8e5.c84a4f1059694db7.9ad4d576f91c4530.fca84c836520b9a8 -- 0000000000000000.0000000000000000.fca84c836520b9a8.9ad4d576f91c4530 -- 0c622f112766461b.0f519b279604c6d3.e4de8d44d56cf047.436f1fc423484d9f -+ 86c15cec7f36758a.e1247923e50c507d.a7c11d3a8f1350f1.8cd599a6384cb8a7 -+ 0000000000000000.0000000000000000.fffffffcffffffff.ffffffff00000003 - 7fc2db4ac39fb33d - --VPERMILPD_VAR_128(reg) -+VPSRAD_128(reg) - before - 9b1ac8a2b3de282d.4ba6231e684905c2.af1db0890bddec64.2bf7a180e634e05d - f3c3e2399090e61a.1f57b7005fed70ab.1dd4b3b3de24fedd.59d8d6dadf76dd60 -@@ -29382,12 +29382,12 @@ VPERMILPD_VAR_128(reg) - c6378ed57e7e2f9d.f633a8efdda634f6.d43279130f29d535.da218f98f79aeedb - e5220cd44e9379ac - after -- 0000000000000000.0000000000000000.59d8d6dadf76dd60.1dd4b3b3de24fedd -+ 9b1ac8a2b3de282d.4ba6231e684905c2.af1db0890bddec64.2bf7a180e634e05d - f3c3e2399090e61a.1f57b7005fed70ab.1dd4b3b3de24fedd.59d8d6dadf76dd60 -- e208257cf5412ab0.644264a1275d4004.b6c1a312ab6437e9.4a4da63edb3fa37b -- c6378ed57e7e2f9d.f633a8efdda634f6.d43279130f29d535.da218f98f79aeedb -- e5220cd44e9379ac --VPERMILPD_VAR_128(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000000c -+ 0000000000000000.0000000000000000.0001dd4bfffde24f.00059d8dfffdf76d -+ 000000000000000c -+VPSRAD_128(mem) - before - 471a9adffc370119.f99a17b2c8d2338b.b1f6fdd59cd306b0.d4713321a500126d - dcd6b3a31e91424f.d97ebe7e6fc97026.7157e13f81f0735c.12cbcba70a742a3c -@@ -29397,11 +29397,11 @@ VPERMILPD_VAR_128(mem) - after - 471a9adffc370119.f99a17b2c8d2338b.b1f6fdd59cd306b0.d4713321a500126d - dcd6b3a31e91424f.d97ebe7e6fc97026.7157e13f81f0735c.12cbcba70a742a3c -- 0000000000000000.0000000000000000.12cbcba70a742a3c.12cbcba70a742a3c -- 0fca7b0a2d98dec4.0cf8549341d18716.7022444f2b2c0d3c.b8008bd0af64df51 -+ 8022d50ed0adf879.c02f7ea50eef221b.1221cf19a70a3726.ea8c3f13d9115b4f -+ 0000000000000000.0000000000000000.0000e2afffff03e0.00002597000014e8 - d872a94a27f8f2ef - --VPERMILPS_VAR_256(reg) -+VPSLLQ_128(reg) - before - a63097edde5ad2d5.64992185515db15b.17273ab4a5fbd9c2.6724bbcd2862b2c7 - 7e8450256f15b9ae.5d5d446a59082d6c.3f062e74d6f755cc.d3f4af7fbbb9e2f6 -@@ -29409,12 +29409,12 @@ VPERMILPS_VAR_256(reg) - bc21130591c68feb.a8efee2283420ea6.52082d820c9abaa9.792e043011f7d2ea - 6c2f5b070cf70a08 - after -- 7e8450257e845025.5d5d446a59082d6c.3f062e74bbb9e2f6.d6f755cc3f062e74 -+ a63097edde5ad2d5.64992185515db15b.17273ab4a5fbd9c2.6724bbcd2862b2c7 - 7e8450256f15b9ae.5d5d446a59082d6c.3f062e74d6f755cc.d3f4af7fbbb9e2f6 -- bcbbd05f77b5e427.d5e05fa561a60d20.dee22b3f6e5336e0.8f5e9f52ff3c58f3 -- bc21130591c68feb.a8efee2283420ea6.52082d820c9abaa9.792e043011f7d2ea -- 6c2f5b070cf70a08 --VPERMILPS_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000008 -+ 0000000000000000.0000000000000000.062e74d6f755cc00.f4af7fbbb9e2f600 -+ 0000000000000008 -+VPSLLQ_128(mem) - before - 442f21c10c47bc79.d902168559d5f5a7.b1566dcddee8ec28.f5c131a74a591bd3 - dcf8d14c2ef3a668.71aad4496c6d5306.cee158928ba562d2.245c321cc41b950b -@@ -29424,11 +29424,11 @@ VPERMILPS_VAR_256(mem) - after - 442f21c10c47bc79.d902168559d5f5a7.b1566dcddee8ec28.f5c131a74a591bd3 - dcf8d14c2ef3a668.71aad4496c6d5306.cee158928ba562d2.245c321cc41b950b -- 71aad44971aad449.71aad449dcf8d14c.245c321cc41b950b.cee15892cee15892 -- c018e08247910d73.7f7e7152e26ae760.b092631b51910a51.97641ba2ded9c855 -+ 1257e7938e088202.df6449bf661be5b6.da5c2c5da9842ed1.3c242b4b176c66fd -+ 0000000000000000.0000000000000000.8000000000000000.c000000000000000 - 926afb8cb6edf8be - --VPERMILPS_VAR_256(reg) -+VPSLLQ_128(reg) - before - 8980c8753a3532e4.c4073605759b02e6.ac42486e7ce694b3.2e517bb6a2d9b27d - d8f37fc9063bb175.f9ef670835301f88.c4fdcb7fd11b2959.2e63f01cb567e482 -@@ -29436,12 +29436,12 @@ VPERMILPS_VAR_256(reg) - ef1f9862e9b77182.65de473ed931bb07.2187c2301ae2fa4f.28b3ddf59786d1c6 - da894e419d2f045c - after -- 35301f88063bb175.d8f37fc935301f88.2e63f01cd11b2959.c4fdcb7fb567e482 -+ 8980c8753a3532e4.c4073605759b02e6.ac42486e7ce694b3.2e517bb6a2d9b27d - d8f37fc9063bb175.f9ef670835301f88.c4fdcb7fd11b2959.2e63f01cb567e482 -- db0f1bf4b78db21a.3a9eee77a25e1e84.22fbf5f17d96e2fe.8e953c37a8485a8c -- ef1f9862e9b77182.65de473ed931bb07.2187c2301ae2fa4f.28b3ddf59786d1c6 -- da894e419d2f045c --VPERMILPS_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000001c -+ 0000000000000000.0000000000000000.fd11b29590000000.cb567e4820000000 -+ 000000000000001c -+VPSLLQ_128(mem) - before - 7ee20b07d74fb17c.6e71f37f37432957.547cef4af6b4b43c.1fef2ea8478caef8 - f28c90335ff1924f.b54f26b83ec01745.e444618513f3c350.767e36c59d1f3aa4 -@@ -29451,11 +29451,11 @@ VPERMILPS_VAR_256(mem) - after - 7ee20b07d74fb17c.6e71f37f37432957.547cef4af6b4b43c.1fef2ea8478caef8 - f28c90335ff1924f.b54f26b83ec01745.e444618513f3c350.767e36c59d1f3aa4 -- f28c90333ec01745.f28c9033f28c9033.13f3c3509d1f3aa4.9d1f3aa49d1f3aa4 -- b5fee36dd0ebe2c5.0be2092ae4b6851f.5882933dc3d615c4.a33f069f3a31c9b8 -+ 10515ab154216304.20062f7798b777fa.f20219dd4ffaa56f.847fd5f4bb27d900 -+ 0000000000000000.0000000000000000.a800000000000000.5200000000000000 - 310ac834b9c84477 - --VPERMILPS_VAR_256(reg) -+VPSLLQ_128(reg) - before - 882c141ed17887e9.be5fa954ef5cc9bf.d22fb13bbc487c63.f38f4b908d92d17c - 06f0e8c820cecdbc.05402850ce7fd51d.d0392118bcf99a70.a0f7bec4c93b93c2 -@@ -29463,12 +29463,12 @@ VPERMILPS_VAR_256(reg) - e2921511d299552f.c0b13d3b3a0d4bb7.e6b34ee3a6ea3596.9b03c27c05811bab - a2404bd83d3659a5 - after -- ce7fd51d05402850.20cecdbcce7fd51d.c93b93c2bcf99a70.c93b93c2d0392118 -+ 882c141ed17887e9.be5fa954ef5cc9bf.d22fb13bbc487c63.f38f4b908d92d17c - 06f0e8c820cecdbc.05402850ce7fd51d.d0392118bcf99a70.a0f7bec4c93b93c2 -- 05a43fa042555399.676dda4e8861c20c.634b572c815618f2.398467c492dc17c3 -- e2921511d299552f.c0b13d3b3a0d4bb7.e6b34ee3a6ea3596.9b03c27c05811bab -- a2404bd83d3659a5 --VPERMILPS_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000025 -+ 0000000000000000.0000000000000000.9f334e0000000000.2772784000000000 -+ 0000000000000025 -+VPSLLQ_128(mem) - before - 2b077ec556088ede.fa0766876c270f28.edd9cc02008f2d4b.b5bb02a9c8422b08 - 1023d82d6d027682.a74f2e6fad8abc31.c8b2038ff4f324f4.2cb070ea82e937f4 -@@ -29478,11 +29478,11 @@ VPERMILPS_VAR_256(mem) - after - 2b077ec556088ede.fa0766876c270f28.edd9cc02008f2d4b.b5bb02a9c8422b08 - 1023d82d6d027682.a74f2e6fad8abc31.c8b2038ff4f324f4.2cb070ea82e937f4 -- a74f2e6f6d027682.1023d82dad8abc31.f4f324f4c8b2038f.2cb070ea82e937f4 -- 618eee2204a04db8.338815409300e221.fba259aadc943f33.8191668e305480e7 -+ 2e62d4fd9e31ccbc.46b66a33314e99f5.2e065ecd3546ebdd.a6de9212716b9504 -+ 0000000000000000.0000000000000000.5901c7fa79927a00.58387541749bfa00 - 1815e7c85c313547 - --VPERMILPD_VAR_256(reg) -+VPSRLQ_128(reg) - before - c7b5112e908df0d1.8574a287bb5bb5a3.ca102b036f2bd260.0b51711107e7dc21 - e9bee12a69f5ed30.76e06d17e06fbfa9.689ca9e6625ba65f.3ae121efd24d7ed4 -@@ -29490,12 +29490,12 @@ VPERMILPD_VAR_256(reg) - fa3c5f9977169b20.2f7a356de2cfacb5.24ebc9c1fbfcea4c.65d03abbb680bf38 - 19c79a830765d741 - after -- 76e06d17e06fbfa9.e9bee12a69f5ed30.689ca9e6625ba65f.3ae121efd24d7ed4 -+ c7b5112e908df0d1.8574a287bb5bb5a3.ca102b036f2bd260.0b51711107e7dc21 - e9bee12a69f5ed30.76e06d17e06fbfa9.689ca9e6625ba65f.3ae121efd24d7ed4 -- dc7d512a82f46711.109ecac08ee729f6.67768957071d9aca.641ce52e58d1e078 -- fa3c5f9977169b20.2f7a356de2cfacb5.24ebc9c1fbfcea4c.65d03abbb680bf38 -- 19c79a830765d741 --VPERMILPD_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000001 -+ 0000000000000000.0000000000000000.344e54f3312dd32f.1d7090f7e926bf6a -+ 0000000000000001 -+VPSRLQ_128(mem) - before - 5cce8370678ce4be.a14707e3e5e8c508.af3f2a0af7340712.fb47648fd984d192 - 0ab07070f302a1dc.2bec437468f52075.6cbb2583ea21f43a.48d6562f3e428c47 -@@ -29505,11 +29505,11 @@ VPERMILPD_VAR_256(mem) - after - 5cce8370678ce4be.a14707e3e5e8c508.af3f2a0af7340712.fb47648fd984d192 - 0ab07070f302a1dc.2bec437468f52075.6cbb2583ea21f43a.48d6562f3e428c47 -- 0ab07070f302a1dc.2bec437468f52075.6cbb2583ea21f43a.6cbb2583ea21f43a -- 16394755fd081eaa.5c306b1b1af15c92.0c031fb9d8c3779a.b4bc30930b8e6eb1 -+ fe3bdd6ec6d2cbc7.f67610b89bc9e915.41b8a3c4d6a23159.67e49c0cc5c15718 -+ 0000000000000000.0000000000000000.0000000000000003.0000000000000002 - 8bab102eab330cbd - --VPERMILPD_VAR_256(reg) -+VPSRLQ_128(reg) - before - 48fd384a423f6ee9.2d782913b4b155b2.bb674f0982f8b598.a868154f0b91852a - 46fea2536b3bcfe0.1fc2fe9306d82d0a.6d67b9ee6e6a2fd4.f1b301708b181535 -@@ -29517,12 +29517,12 @@ VPERMILPD_VAR_256(reg) - 7a3d30dee43882e1.03aa778aecd1af5c.3ef20b4e44c1799d.f92aac07e57eae6a - 71ee6355f6752eec - after -- 46fea2536b3bcfe0.46fea2536b3bcfe0.6d67b9ee6e6a2fd4.6d67b9ee6e6a2fd4 -+ 48fd384a423f6ee9.2d782913b4b155b2.bb674f0982f8b598.a868154f0b91852a - 46fea2536b3bcfe0.1fc2fe9306d82d0a.6d67b9ee6e6a2fd4.f1b301708b181535 -- e3fa4bb6c2b56d4f.c7e445c10f8962df.cf7ca3377bd407f2.c2af600a7663e4e6 -- 7a3d30dee43882e1.03aa778aecd1af5c.3ef20b4e44c1799d.f92aac07e57eae6a -- 71ee6355f6752eec --VPERMILPD_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.000000000000002c -+ 0000000000000000.0000000000000000.000000000006d67b.00000000000f1b30 -+ 000000000000002c -+VPSRLQ_128(mem) - before - 05c801dfc5552199.67124c366d514b44.aedf12d8b8bbd2ae.1415eca166bdc082 - 938400916c29439c.05c79b2cf88a0321.a351909890538501.ae30429b7c55194c -@@ -29532,11 +29532,11 @@ VPERMILPD_VAR_256(mem) - after - 05c801dfc5552199.67124c366d514b44.aedf12d8b8bbd2ae.1415eca166bdc082 - 938400916c29439c.05c79b2cf88a0321.a351909890538501.ae30429b7c55194c -- 05c79b2cf88a0321.05c79b2cf88a0321.a351909890538501.a351909890538501 -- 09d1151db9de0357.c9fcc49f85923400.df182b1fd1bf8d58.9f813e33f686f142 -+ f6eede570afd5023.b2a61a2b2172e827.c0ca6fb78fa68480.689009a82314c0a8 -+ 0000000000000000.0000000000000000.051a8c84c4829c28.05718214dbe2a8ca - ad4fdbab9238e7c5 - --VPERMILPD_VAR_256(reg) -+VPSRLQ_128(reg) - before - ef46de7992b5dfde.aafb24cf95d71967.a51594f4c0782358.de053ebe74ab5ab5 - c1b2430a92891538.b336845abbf44e7c.a43d89966caff3dc.975e267f9174a8c2 -@@ -29544,12 +29544,12 @@ VPERMILPD_VAR_256(reg) - 85181f2505682a62.71122ba653cc036c.77e9ca728d422117.ab836216afd3b69e - bee7aec5e780eec5 - after -- b336845abbf44e7c.b336845abbf44e7c.975e267f9174a8c2.975e267f9174a8c2 -+ ef46de7992b5dfde.aafb24cf95d71967.a51594f4c0782358.de053ebe74ab5ab5 - c1b2430a92891538.b336845abbf44e7c.a43d89966caff3dc.975e267f9174a8c2 -- 7fde04ca2f41c580.024fb2a846425dc5.21bf9cf128c4de38.e8ee5e4d462932ac -- 85181f2505682a62.71122ba653cc036c.77e9ca728d422117.ab836216afd3b69e -- bee7aec5e780eec5 --VPERMILPD_VAR_256(mem) -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000005 -+ 0000000000000000.0000000000000000.0521ec4cb3657f9e.04baf133fc8ba546 -+ 0000000000000005 -+VPSRLQ_128(mem) - before - fbe8bf470a3b964c.2faa8e88af8a8189.dd4b6a41fd9ffc9e.040510833ab5f726 - 3f500f8635106c60.d9e1505ec93405a2.23c6eb6461c60486.22606992c8aa9e11 -@@ -29559,11 +29559,11 @@ VPERMILPD_VAR_256(mem) - after - fbe8bf470a3b964c.2faa8e88af8a8189.dd4b6a41fd9ffc9e.040510833ab5f726 - 3f500f8635106c60.d9e1505ec93405a2.23c6eb6461c60486.22606992c8aa9e11 -- d9e1505ec93405a2.d9e1505ec93405a2.23c6eb6461c60486.23c6eb6461c60486 -- 4d8761ef113a8dde.9d6eb512c04e8858.a8b1a4f1c5402f2a.85034556fd474928 -+ 67ec1c6f830c2a2d.df095e12f0f1f458.1d4e2bfa9a4dd651.2f46d109d5ac5083 -+ 0000000000000000.0000000000000000.0000000000008f1b.0000000000008981 - 81e3bfe4db08c7ae - --VPSLLW_128(reg) -+VROUNDPS_128_0x0(reg) - before - 80313d1f0c7904be.ceef5bf0fba751a0.6f5b52c9d3d6fe4e.a0b9d434fdaccb3e - dc3aba732b293d07.c6ef85605b5e319e.b01e30a3c81591e5.e23336af5e9c65b9 -@@ -29573,10 +29573,10 @@ VPSLLW_128(reg) - after - 80313d1f0c7904be.ceef5bf0fba751a0.6f5b52c9d3d6fe4e.a0b9d434fdaccb3e - dc3aba732b293d07.c6ef85605b5e319e.b01e30a3c81591e5.e23336af5e9c65b9 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000008 -- 0000000000000000.0000000000000000.1e00a3001500e500.3300af009c00b900 -- 0000000000000008 --VPSLLW_128(mem) -+ f24b334cd4a1ad33.12525a29506bea05.be014b0c39977eca.48eb464e051dbbc6 -+ 0000000000000000.0000000000000000.80000000c8159200.e23336af5e9c65b9 -+ f34461a994ff8548 -+VROUNDPS_128_0x0(mem) - before - f07e643cb3797215.bdaf053d371f26e6.1174fb7b63b8d6bd.ae5a293b0096562c - 822505a488b20b25.299c572e283ca5c5.7dcbbddbb9118166.4768e4d98e2bb801 -@@ -29587,10 +29587,10 @@ VPSLLW_128(mem) - f07e643cb3797215.bdaf053d371f26e6.1174fb7b63b8d6bd.ae5a293b0096562c - 822505a488b20b25.299c572e283ca5c5.7dcbbddbb9118166.4768e4d98e2bb801 - 8506c1cc2fb909a3.bfc0945313524d37.acb61c4514eff527.1dc6ccb7083364d5 -- 0000000000000000.0000000000000000.dcb0ddb091101660.76804d90e2b08010 -+ 0000000000000000.0000000000000000.0000000063b8d6bd.8000000000000000 - eca614df33cc8a24 - --VPSLLW_128(reg) -+VROUNDPS_128_0x0(reg) - before - 9ebf6c021b767bf8.4ea6760b605a2b9b.d9dbc0ed499a0387.c3779ee7427027a4 - fc59e11460c4a679.ccfd68fb230ec66d.166ba73acce48abc.63e5b9f84f295db7 -@@ -29600,10 +29600,10 @@ VPSLLW_128(reg) - after - 9ebf6c021b767bf8.4ea6760b605a2b9b.d9dbc0ed499a0387.c3779ee7427027a4 - fc59e11460c4a679.ccfd68fb230ec66d.166ba73acce48abc.63e5b9f84f295db7 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000004 -- 0000000000000000.0000000000000000.66b073a0ce40abc0.3e509f80f290db70 -- 0000000000000004 --VPSLLW_128(mem) -+ 61c06f809d404754.2bbd645b27bdb85e.ec62696cb9572835.361761c2cf994c93 -+ 0000000000000000.0000000000000000.00000000cce48abc.63e5b9f84f295db7 -+ e5f7453599cc4454 -+VROUNDPS_128_0x0(mem) - before - 783c79b61ca7c592.b424c71b70f7d9c7.fcac6b1b64418f4b.d6b56e2f43ea9ca1 - af762aa18268ef48.59ba88223e4a43b7.26726e54d42eed9f.a2a8aa981822e9ed -@@ -29614,10 +29614,10 @@ VPSLLW_128(mem) - 783c79b61ca7c592.b424c71b70f7d9c7.fcac6b1b64418f4b.d6b56e2f43ea9ca1 - af762aa18268ef48.59ba88223e4a43b7.26726e54d42eed9f.a2a8aa981822e9ed - 656fd2e2e71c7da3.774c533375fc13b0.a1d26bacf74791c2.7733b196c7b23f2c -- 0000000000000000.0000000000000000.ce40ca8085c0b3e0.5500530004403da0 -+ 0000000000000000.0000000000000000.fcac6b1b64418f4b.d6b56e2f43ea8000 - b13c10022510f035 - --VPSLLW_128(reg) -+VROUNDPS_128_0x0(reg) - before - cd5361470bf5c557.bdd1fc16208ab8f6.8a97f5278caed370.f98f446dbf2e9f24 - 63306dd23c63911c.18d276e12c5ddc47.37e8c4e1a5c63c8e.8f8518ae9e147fba -@@ -29627,10 +29627,10 @@ VPSLLW_128(reg) - after - cd5361470bf5c557.bdd1fc16208ab8f6.8a97f5278caed370.f98f446dbf2e9f24 - 63306dd23c63911c.18d276e12c5ddc47.37e8c4e1a5c63c8e.8f8518ae9e147fba -- 0000000000000000.0000000000000000.0000000000000000.0000000000000006 -- 0000000000000000.0000000000000000.fa00384071802380.e1402b808500ee80 -- 0000000000000006 --VPSLLW_128(mem) -+ cf21300e54e69132.62c3d7b2a75256ec.cc658c57966dfa66.e544d6be9e5797d0 -+ 0000000000000000.0000000000000000.0000000080000000.8000000080000000 -+ 4650000072205a26 -+VROUNDPS_128_0x0(mem) - before - 073565097fc07dbf.986acc48a65e1bfb.32a443175cd336e4.1f17f723709a68f3 - fa13a4921cecc887.ae5b9c1f19691e07.712c4583ce77168f.94e39352933790ff -@@ -29641,10 +29641,10 @@ VPSLLW_128(mem) - 073565097fc07dbf.986acc48a65e1bfb.32a443175cd336e4.1f17f723709a68f3 - fa13a4921cecc887.ae5b9c1f19691e07.712c4583ce77168f.94e39352933790ff - f9b8398768b0f5a9.098f1457e2ba4512.0ed420a41f6e3a3e.610c17ecfd94fd76 -- 0000000000000000.0000000000000000.0000800080008000.8000000080008000 -+ 0000000000000000.0000000000000000.000000005cd336e4.00000000709a68f3 - 73a5cd121cbc994f - --VPSRLW_128(reg) -+VROUNDPS_128_0x1(reg) - before - 70acf575089e400a.8f8256667731e7ae.02f0e99be95ceed8.d6b44dbacf82405b - 3541f7f3ac701cde.dd40d528730624e8.58b43f7e5dc5e7ea.b883998667b79b20 -@@ -29654,10 +29654,10 @@ VPSRLW_128(reg) - after - 70acf575089e400a.8f8256667731e7ae.02f0e99be95ceed8.d6b44dbacf82405b - 3541f7f3ac701cde.dd40d528730624e8.58b43f7e5dc5e7ea.b883998667b79b20 -- 0000000000000000.0000000000000000.0000000000000000.000000000000000b -- 0000000000000000.0000000000000000.000b0007000b001c.00170013000c0013 -- 000000000000000b --VPSRLW_128(mem) -+ 1eaecef9a5be6a79.a9f49b058ca3342c.64eb2c7299a3f5ac.6aa3acb84e6f2a9a -+ 0000000000000000.0000000000000000.58b43f7e5dc5e7ea.bf80000067b79b20 -+ a9011bfe7a96d65b -+VROUNDPS_128_0x1(mem) - before - f0d86febf81c6bfb.cc43eb4905fb4bae.276deac58767bc85.0ce2bb3fd2ef3bef - 752f7bed355625ff.4902296ca30256a1.91cb6a7ea0a6acf2.623a55ee0976ecc7 -@@ -29668,10 +29668,10 @@ VPSRLW_128(mem) - f0d86febf81c6bfb.cc43eb4905fb4bae.276deac58767bc85.0ce2bb3fd2ef3bef - 752f7bed355625ff.4902296ca30256a1.91cb6a7ea0a6acf2.623a55ee0976ecc7 - 15d2bcf24d4dc094.5acb2dc606b5c309.e84e210447dd5e19.dd35775f76a1a000 -- 0000000000000000.0000000000000000.0001000000010001.0000000000000001 -+ 0000000000000000.0000000000000000.00000000bf800000.00000000d2ef3bef - b64340346419043f - --VPSRLW_128(reg) -+VROUNDPS_128_0x1(reg) - before - cbeedf701c7c2c9e.172bc9b180a78720.a8a774cf894db2eb.cdf62225ae64fc47 - 766cf61d7bb5470d.30798e44d3222c6e.9c52b056e149acbc.14b36397a6cb5fa6 -@@ -29681,10 +29681,10 @@ VPSRLW_128(reg) - after - cbeedf701c7c2c9e.172bc9b180a78720.a8a774cf894db2eb.cdf62225ae64fc47 - 766cf61d7bb5470d.30798e44d3222c6e.9c52b056e149acbc.14b36397a6cb5fa6 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000002 -- 0000000000000000.0000000000000000.27142c1538522b2f.052c18e529b217e9 -- 0000000000000002 --VPSRLW_128(mem) -+ 14097fa81d509237.d4437889718ba1fd.9536a0c46e22f7b3.b7c5cb859b5c756f -+ 0000000000000000.0000000000000000.bf800000e149acbc.00000000bf800000 -+ 841cfd86ed25a8f2 -+VROUNDPS_128_0x1(mem) - before - 66f8bf7182763e03.94cfdc0397d9a86e.2d7aa7d90057ee8e.02d89106959474c2 - 155a98878520762f.2f90a8ada8dfead3.9a80e5bc28d33ee7.2f2f8ab167461d32 -@@ -29695,10 +29695,10 @@ VPSRLW_128(mem) - 66f8bf7182763e03.94cfdc0397d9a86e.2d7aa7d90057ee8e.02d89106959474c2 - 155a98878520762f.2f90a8ada8dfead3.9a80e5bc28d33ee7.2f2f8ab167461d32 - 6d0e02b6112e0ea1.2ca1d6e46b774ca4.023137010c6e4e30.d0ee27f4de040777 -- 0000000000000000.0000000000000000.13501cb7051a07dc.05e511560ce803a6 -+ 0000000000000000.0000000000000000.0000000000000000.00000000bf800000 - ddd742ee28d19133 - --VPSRLW_128(reg) -+VROUNDPS_128_0x1(reg) - before - 0199b77e34f9a901.889b7f0c37a7480a.bcde4da8798a5f38.33c80862772da145 - 0af4c155555cf354.030d880b072a6358.07a28e0efc1e8853.b4457f55356b5c69 -@@ -29708,10 +29708,10 @@ VPSRLW_128(reg) - after - 0199b77e34f9a901.889b7f0c37a7480a.bcde4da8798a5f38.33c80862772da145 - 0af4c155555cf354.030d880b072a6358.07a28e0efc1e8853.b4457f55356b5c69 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000006 -- 0000000000000000.0000000000000000.001e023803f00221.02d101fd00d50171 -- 0000000000000006 --VPSRLW_128(mem) -+ 52335ddf2586aada.960014d2d141ce9c.24e621b1a173c18a.a09dfa5b1ff6c72c -+ 0000000000000000.0000000000000000.00000000fc1e8853.bf80000000000000 -+ 2812ed4de628a046 -+VROUNDPS_128_0x1(mem) - before - 7dc75c10fae785f4.139138bd49605129.799ca269c25d7eba.441a325ec39151fb - ad87c096aa240bf2.44476fe8d329b94b.80dd9c1021793cea.ffa2a7417872218c -@@ -29722,10 +29722,10 @@ VPSRLW_128(mem) - 7dc75c10fae785f4.139138bd49605129.799ca269c25d7eba.441a325ec39151fb - ad87c096aa240bf2.44476fe8d329b94b.80dd9c1021793cea.ffa2a7417872218c - 941f94cb11ecee6d.241227777ee87f4f.10cf0830e95a39c1.fcd95f10bf45f1ea -- 0000000000000000.0000000000000000.0101013800420079.01ff014e00f00043 -+ 0000000000000000.0000000000000000.799ca269c2600000.441a0000c3918000 - 2c84892674ee7fb7 - --VPSRAW_128(reg) -+VROUNDPS_128_0x2(reg) - before - 168ff3451bdcb67f.f6067ded7649ba89.64160c6da57e15ab.3afa28872598df13 - b3799101c4ecddc3.29ee8ab3acf81b82.7de830ac596b5c5b.8dcad397d20e00e6 -@@ -29735,10 +29735,10 @@ VPSRAW_128(reg) - after - 168ff3451bdcb67f.f6067ded7649ba89.64160c6da57e15ab.3afa28872598df13 - b3799101c4ecddc3.29ee8ab3acf81b82.7de830ac596b5c5b.8dcad397d20e00e6 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000017 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffff0000 -- 0000000000000017 --VPSRAW_128(mem) -+ 5e8f5dc60ba92f2f.84ddf7d80960c8a7.b5fec5ff9e80f19d.d87ce1cf58785010 -+ 0000000000000000.0000000000000000.7de830ac596b5c5b.80000000d20e00e6 -+ cab5126760596c17 -+VROUNDPS_128_0x2(mem) - before - 29d52e9f1ae8b04c.4d6a741be55c472c.1e04e2ebaa91fa27.f529348e4950f486 - f0069db01e9c1388.4ac7b683b0698416.16d357b22571f6da.b5d605a2e724da85 -@@ -29749,10 +29749,10 @@ VPSRAW_128(mem) - 29d52e9f1ae8b04c.4d6a741be55c472c.1e04e2ebaa91fa27.f529348e4950f486 - f0069db01e9c1388.4ac7b683b0698416.16d357b22571f6da.b5d605a2e724da85 - fd15d984888050f6.c48017a48954ddd8.a4d91d87393b2e6a.05f73779854efec5 -- 0000000000000000.0000000000000000.0002000a0004fffe.fff60000fffcfffb -+ 0000000000000000.0000000000000000.3f80000080000000.f529348e4950f490 - c6c9af2134d9eebb - --VPSRAW_128(reg) -+VROUNDPS_128_0x2(reg) - before - ee12edca7c5133c8.54fdad29fb084b1b.a33227c2d7f1d392.f6be8a0b95be46cf - 16ff7ce53451a6c7.586e3cd23cc58129.c0c3ce9684bbe7e2.71352892168f9cfd -@@ -29762,10 +29762,10 @@ VPSRAW_128(reg) - after - ee12edca7c5133c8.54fdad29fb084b1b.a33227c2d7f1d392.f6be8a0b95be46cf - 16ff7ce53451a6c7.586e3cd23cc58129.c0c3ce9684bbe7e2.71352892168f9cfd -- 0000000000000000.0000000000000000.0000000000000000.0000000000000001 -- 0000000000000000.0000000000000000.e061e74bc25df3f1.389a14490b47ce7e -- 0000000000000001 --VPSRAW_128(mem) -+ 99dc58e0f9648263.10ed89ef53e2811a.cadf85d4af9307bb.f41307d79f7b20b7 -+ 0000000000000000.0000000000000000.c0c0000080000000.713528923f800000 -+ 7d37754c38d19d81 -+VROUNDPS_128_0x2(mem) - before - 3c14fd537f530fe8.259be82218f46825.10434f34726dd254.19e70f3af19b5ab1 - 738ab4c93e209d8d.e5139442ab8aeaa2.0fb3bf36b2f49af4.156cda3b40e30528 -@@ -29776,10 +29776,10 @@ VPSRAW_128(mem) - 3c14fd537f530fe8.259be82218f46825.10434f34726dd254.19e70f3af19b5ab1 - 738ab4c93e209d8d.e5139442ab8aeaa2.0fb3bf36b2f49af4.156cda3b40e30528 - fc6318999043049a.71ac7df1b962c56d.3361dd5b370a1e27.70aba5557d69acd7 -- 0000000000000000.0000000000000000.0003ffefffecffe6.0005fff600100001 -+ 0000000000000000.0000000000000000.3f800000726dd254.3f800000f19b5ab1 - ae8a2985325bdd8a - --VPSRAW_128(reg) -+VROUNDPS_128_0x2(reg) - before - 4ac2da72e3e1dfe8.7771d4f65fbd4c9e.5c71f7adbc0d789b.5aa714c1811844f6 - b5e57a28f2d3cd2d.213e255c142ba5ec.74358091e9f8c956.15d625db7f285fe9 -@@ -29789,10 +29789,10 @@ VPSRAW_128(reg) - after - 4ac2da72e3e1dfe8.7771d4f65fbd4c9e.5c71f7adbc0d789b.5aa714c1811844f6 - b5e57a28f2d3cd2d.213e255c142ba5ec.74358091e9f8c956.15d625db7f285fe9 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000001 -- 0000000000000000.0000000000000000.3a1ac048f4fce4ab.0aeb12ed3f942ff4 -- 0000000000000001 --VPSRAW_128(mem) -+ 493e0514fbbfe205.8e9f12cccc20c754.c84a36b501556310.6573d4c832f8251e -+ 0000000000000000.0000000000000000.74358091e9f8c956.3f8000007f285fe9 -+ 3427fdcf2809a201 -+VROUNDPS_128_0x2(mem) - before - 6bd66fc1a362d007.5fc6cd3a6db47521.214cb07bb7cc551c.93961a69689b642b - a7236f3744ab99ff.998c024d0ed469bc.ff305991219b39d6.c36540d1ee9b44e4 -@@ -29803,10 +29803,10 @@ VPSRAW_128(mem) - 6bd66fc1a362d007.5fc6cd3a6db47521.214cb07bb7cc551c.93961a69689b642b - a7236f3744ab99ff.998c024d0ed469bc.ff305991219b39d6.c36540d1ee9b44e4 - c4d9791d26f0b915.6db91244191d769b.10d88f61ff21d657.9eb58329d13e5d4c -- 0000000000000000.0000000000000000.fff305990219039d.fc36040dfee9044e -+ 0000000000000000.0000000000000000.3f80000080000000.80000000689b642b - c90750561b9f2cd4 - --VPSLLD_128(reg) -+VROUNDPS_128_0x3(reg) - before - d1a2d303bb745a4c.11b49ce91fa1ec4e.5377b493df5cc5d3.3ba48fe186802a65 - f4ed634f271db222.f970ada86e2378c8.1da13dc3d2698185.0d60516766715948 -@@ -29816,10 +29816,10 @@ VPSLLD_128(reg) - after - d1a2d303bb745a4c.11b49ce91fa1ec4e.5377b493df5cc5d3.3ba48fe186802a65 - f4ed634f271db222.f970ada86e2378c8.1da13dc3d2698185.0d60516766715948 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000016 -- 0000000000000000.0000000000000000.70c0000061400000.59c0000052000000 -- 0000000000000016 --VPSLLD_128(mem) -+ 9036fca7fc256f01.32c6b8866ed24a11.f16192879fd0442a.810f8f582a4931a4 -+ 0000000000000000.0000000000000000.00000000d2698185.0000000066715948 -+ c4797128ccdaca76 -+VROUNDPS_128_0x3(mem) - before - 4acc0cdfe2ad0444.9eed39264f830c8d.066fad53f3e5b4bf.27d68e7e39dad2ff - e24314b04c95d63b.caf3d62706f16291.5a5b8f1aaf62c27c.41232c8a3d951487 -@@ -29830,10 +29830,10 @@ VPSLLD_128(mem) - 4acc0cdfe2ad0444.9eed39264f830c8d.066fad53f3e5b4bf.27d68e7e39dad2ff - e24314b04c95d63b.caf3d62706f16291.5a5b8f1aaf62c27c.41232c8a3d951487 - 6aaa038825a0fe86.dd276ce394ee0f4f.6e105bb08d3a08b7.d43786db8cd94eb2 -- 0000000000000000.0000000000000000.a5b8f1a0f62c27c0.1232c8a0d9514870 -+ 0000000000000000.0000000000000000.00000000f3e5b4bf.0000000000000000 - dae35bfb7a2d9aa4 - --VPSLLD_128(reg) -+VROUNDPS_128_0x3(reg) - before - 0413cfa3505523c3.b6778bf8964e3aca.2b45733babc759a8.4b08a1fe1e30275a - 173aed40e1379434.33751b6a6608c81b.1ec7ddb06bba6f9a.cae3148d08657819 -@@ -29843,10 +29843,10 @@ VPSLLD_128(reg) - after - 0413cfa3505523c3.b6778bf8964e3aca.2b45733babc759a8.4b08a1fe1e30275a - 173aed40e1379434.33751b6a6608c81b.1ec7ddb06bba6f9a.cae3148d08657819 -- 0000000000000000.0000000000000000.0000000000000000.000000000000001e -- 0000000000000000.0000000000000000.0000000080000000.4000000040000000 -- 000000000000001e --VPSLLD_128(mem) -+ 71a4b33ec85e28a6.0e93849215149a70.6aa63090746dcaf6.7bb7619c8427f106 -+ 0000000000000000.0000000000000000.000000006bba6f9a.cae3148c00000000 -+ df7e79eba07f451e -+VROUNDPS_128_0x3(mem) - before - 4a083c02782e9a9f.6670250d0aacad38.525fcdb38254fcd9.78aa8141cf40429c - 57bcca4a529905ff.ba6bc8b79dea15b0.73a4a685779f0544.f36877eb5979d63d -@@ -29857,10 +29857,10 @@ VPSLLD_128(mem) - 4a083c02782e9a9f.6670250d0aacad38.525fcdb38254fcd9.78aa8141cf40429c - 57bcca4a529905ff.ba6bc8b79dea15b0.73a4a685779f0544.f36877eb5979d63d - e0669ead49cd436a.c3d80371f69f90d8.623a48bdbc6d4264.36b247af9ba1a0f7 -- 0000000000000000.0000000000000000.494d0a003e0a8800.d0efd600f3ac7a00 -+ 0000000000000000.0000000000000000.525fcdb380000000.78aa8141cf40429c - 841d6239baefc669 - --VPSLLD_128(reg) -+VROUNDPS_128_0x3(reg) - before - 47d6a5d7ce2e9979.dacc097900bd270f.683b2ec96c97b3e6.1e84d310a5c04a72 - 424cb23f0a8b9252.021f97b9f89145a1.bbc9173fc1f4d125.a2d1b502805d8db8 -@@ -29870,10 +29870,10 @@ VPSLLD_128(reg) - after - 47d6a5d7ce2e9979.dacc097900bd270f.683b2ec96c97b3e6.1e84d310a5c04a72 - 424cb23f0a8b9252.021f97b9f89145a1.bbc9173fc1f4d125.a2d1b502805d8db8 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000014 -- 0000000000000000.0000000000000000.73f0000012500000.50200000db800000 -- 0000000000000014 --VPSLLD_128(mem) -+ d1cb83df0b94eda0.17985cc57d5e25ee.35f986764cf5f4c3.659e4f0a1bacf562 -+ 0000000000000000.0000000000000000.80000000c1f00000.8000000080000000 -+ 19e79c0dff912394 -+VROUNDPS_128_0x3(mem) - before - c1fc47e0803f6174.1a126774cad7b84e.792c78f19f111f68.0a73ebd7761934cf - 18c09a7931d0b469.8d737041c02aa005.7ddfc8e9750fb0ed.1d54d8d94c52ca94 -@@ -29884,10 +29884,10 @@ VPSLLD_128(mem) - c1fc47e0803f6174.1a126774cad7b84e.792c78f19f111f68.0a73ebd7761934cf - 18c09a7931d0b469.8d737041c02aa005.7ddfc8e9750fb0ed.1d54d8d94c52ca94 - fa0011c42d4fd79e.040d2ff6eb58dae2.dee83d5d4835f4dc.c6083d4cc9615368 -- 0000000000000000.0000000000000000.c8e90000b0ed0000.d8d90000ca940000 -+ 0000000000000000.0000000000000000.792c78f180000000.00000000761934cf - 4a195c36272f31f0 - --VPSRLD_128(reg) -+VROUNDPS_128_0x4(reg) - before - de0e0e843f06fdfc.cf235d207848807a.6d1cbbc34e7732bd.272a8b6a562a83ab - 770527f46ee3adc7.7a9f2909ffda7e79.182882b5be7fc913.c7fc5cdbca1247e2 -@@ -29897,10 +29897,10 @@ VPSRLD_128(reg) - after - de0e0e843f06fdfc.cf235d207848807a.6d1cbbc34e7732bd.272a8b6a562a83ab - 770527f46ee3adc7.7a9f2909ffda7e79.182882b5be7fc913.c7fc5cdbca1247e2 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000017 -- 0000000000000000.0000000000000000.000000300000017c.0000018f00000194 -- 0000000000000017 --VPSRLD_128(mem) -+ 724ba4f04f507dfe.20c60954418a3c69.369ded3ed293a23e.34544278ab51ad34 -+ 0000000000000000.0000000000000000.0000000080000000.c7fc5d00ca1247e0 -+ e5c642e5250a52d7 -+VROUNDPS_128_0x4(mem) - before - e177538ef69a0981.fef4b74199106c5e.cd49f6c16776ebca.3ff3a4c4590c08c5 - 1adf6b13a5b352f5.47ef456d3a7a03df.8c3cfbbb84c95493.e26be79a03890e7a -@@ -29911,10 +29911,10 @@ VPSRLD_128(mem) - e177538ef69a0981.fef4b74199106c5e.cd49f6c16776ebca.3ff3a4c4590c08c5 - 1adf6b13a5b352f5.47ef456d3a7a03df.8c3cfbbb84c95493.e26be79a03890e7a - 6cc804614d60eb60.626926d6fda5aa7c.b60a04c6cc6a6dfd.697bbfb7c14245b3 -- 0000000000000000.0000000000000000.011879f7010992a9.01c4d7cf0007121c -+ 0000000000000000.0000000000000000.cd49f6c16776ebca.40000000590c08c5 - 91972076ec963967 - --VPSRLD_128(reg) -+VROUNDPS_128_0x4(reg) - before - ec3aa0f090496e3a.ca50ae03faa8f7c9.7e08d30f5b6f17b9.ba6c12c44ec9a263 - 9aa6a562b867c442.8f87b731365ae320.37c796b72d2655b0.4d96108ec09d35b6 -@@ -29924,10 +29924,10 @@ VPSRLD_128(reg) - after - ec3aa0f090496e3a.ca50ae03faa8f7c9.7e08d30f5b6f17b9.ba6c12c44ec9a263 - 9aa6a562b867c442.8f87b731365ae320.37c796b72d2655b0.4d96108ec09d35b6 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000005 -- 0000000000000000.0000000000000000.01be3cb5016932ad.026cb0840604e9ad -- 0000000000000005 --VPSRLD_128(mem) -+ f9272b36017d782c.dd6f31d6dcd10e1d.32349c4d93cf9274.bbcc021acef0695b -+ 0000000000000000.0000000000000000.0000000000000000.4d96108ec0a00000 -+ 978cb2282c42a345 -+VROUNDPS_128_0x4(mem) - before - beae6982b55822e3.3598acb864bee954.83866d3ad53c10bb.5d4a63ef8424fd0d - 300b044f481c3182.cb1f9e3eb6021eea.944c26cf5f475fb4.468c1bd449e8a23b -@@ -29938,10 +29938,10 @@ VPSRLD_128(mem) - beae6982b55822e3.3598acb864bee954.83866d3ad53c10bb.5d4a63ef8424fd0d - 300b044f481c3182.cb1f9e3eb6021eea.944c26cf5f475fb4.468c1bd449e8a23b - c870ff79039b8c4d.82eb01d7996da112.9df4428dc347dd03.e1ac065510ce36e5 -- 0000000000000000.0000000000000000.000000120000000b.0000000800000009 -+ 0000000000000000.0000000000000000.80000000d53c10bb.5d4a63ef80000000 - 9cb966e0152e1f5b - --VPSRLD_128(reg) -+VROUNDPS_128_0x4(reg) - before - 753ed3c18bc0ea80.de83059860f71a1a.be830cf27fe980c7.0b198f3188545556 - 6fd263ef74a396d0.14c809653aedc473.fce5ab4cbc1254ac.282fb9f0207ac7b1 -@@ -29951,10 +29951,10 @@ VPSRLD_128(reg) - after - 753ed3c18bc0ea80.de83059860f71a1a.be830cf27fe980c7.0b198f3188545556 - 6fd263ef74a396d0.14c809653aedc473.fce5ab4cbc1254ac.282fb9f0207ac7b1 -- 0000000000000000.0000000000000000.0000000000000000.000000000000001b -- 0000000000000000.0000000000000000.0000001f00000017.0000000500000004 -- 000000000000001b --VPSRLD_128(mem) -+ e8c012d76b635df8.e0445d40abcdaaa8.cabdab69f89366d2.ad56358602c35813 -+ 0000000000000000.0000000000000000.fce5ab4c80000000.0000000000000000 -+ 630a15eb12f3c59b -+VROUNDPS_128_0x4(mem) - before - 4c2f6f9178f11a18.c3debf80f5ad2e7e.ae15e5d0c37c1e5a.86fbbf9de3ca3394 - 0d960dc098447e4d.dda5b41bc04db034.6702125da364222d.2cf9cb8bc9986687 -@@ -29965,10 +29965,10 @@ VPSRLD_128(mem) - 4c2f6f9178f11a18.c3debf80f5ad2e7e.ae15e5d0c37c1e5a.86fbbf9de3ca3394 - 0d960dc098447e4d.dda5b41bc04db034.6702125da364222d.2cf9cb8bc9986687 - 830b68638df7ac64.e6f7b81f09fb3e72.28567fa88a65548d.d29c28ed1feec66c -- 0000000000000000.0000000000000000.0000001900000028.0000000b00000032 -+ 0000000000000000.0000000000000000.80000000c37c0000.80000000e3ca3394 - 8e01c6b98d5f01ba - --VPSRAD_128(reg) -+VROUNDPS_256_0x0(reg) - before - 5c5afffcdd93537c.ff4d49b568af59e9.316cde1187af6e35.2d660929dee72da3 - 9a8979620d7ec2df.bcb3c73c85cb4fb0.2b26f8d8f4cd8712.2ab91e3683804db1 -@@ -29978,10 +29978,10 @@ VPSRAD_128(reg) - after - 5c5afffcdd93537c.ff4d49b568af59e9.316cde1187af6e35.2d660929dee72da3 - 9a8979620d7ec2df.bcb3c73c85cb4fb0.2b26f8d8f4cd8712.2ab91e3683804db1 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000016 -- 0000000000000000.0000000000000000.000000acffffffd3.000000aafffffe0e -- 0000000000000016 --VPSRAD_128(mem) -+ a3d83057baad8b90.9e57f4e7e8770109.839c11b84f289c27.9fa564b2a06289fb -+ 8000000000000000.8000000080000000.00000000f4cd8712.0000000080000000 -+ 5c7370a3b03748f6 -+VROUNDPS_256_0x0(mem) - before - 5dee2ef1db4142fe.8b09469ff9041b8a.41894759efb28323.bee7317340c7a9a6 - 45310d5deec549f3.21839dc9c344592b.baae66f9ca57cc3c.58552f270f22196a -@@ -29992,10 +29992,10 @@ VPSRAD_128(mem) - 5dee2ef1db4142fe.8b09469ff9041b8a.41894759efb28323.bee7317340c7a9a6 - 45310d5deec549f3.21839dc9c344592b.baae66f9ca57cc3c.58552f270f22196a - f00887d304d01900.f24d21327af8e1ca.c941236c5bbdc098.c0ad1da33beb7414 -- 0000000000000000.0000000000000000.ffffdd57ffffe52b.00002c2a00000791 -+ 5dee2ef1db4142fe.80000000f9041b8a.41880000efb28323.8000000040c00000 - 6b4fb7a721f5dfd1 - --VPSRAD_128(reg) -+VROUNDPS_256_0x0(reg) - before - 65305a07114d663a.ffa1428eaba80315.ba05a0721deabfb1.14e168800dfa99c7 - 9d2ddddfd043c93c.1bfb79aa738e9574.678a942141408c51.0986e7f767e9f5f2 -@@ -30005,10 +30005,10 @@ VPSRAD_128(reg) - after - 65305a07114d663a.ffa1428eaba80315.ba05a0721deabfb1.14e168800dfa99c7 - 9d2ddddfd043c93c.1bfb79aa738e9574.678a942141408c51.0986e7f767e9f5f2 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000014 -- 0000000000000000.0000000000000000.0000067800000414.000000980000067e -- 0000000000000014 --VPSRAD_128(mem) -+ 6f903b9df9634380.6a193d81af2ae09c.c190a5bfc139939f.03c9f5f3e5c8ec10 -+ 80000000d043c93c.00000000738e9574.678a942141400000.0000000067e9f5f2 -+ 7558ac27c3889ad4 -+VROUNDPS_256_0x0(mem) - before - a63c4d385a80c9d2.51ba7978fb4e6f85.11d1580cf2b590f5.e84f0e7848463ef3 - 4cee6c7c87998372.1919516d0c31989c.2103a99830bc6d7f.6da05f6b86715a51 -@@ -30019,10 +30019,10 @@ VPSRAD_128(mem) - a63c4d385a80c9d2.51ba7978fb4e6f85.11d1580cf2b590f5.e84f0e7848463ef3 - 4cee6c7c87998372.1919516d0c31989c.2103a99830bc6d7f.6da05f6b86715a51 - 433a85e065de83e1.eb10f3f7f76ecaa8.d328758f52a9f381.0fa1bdfd9070a00d -- 0000000000000000.0000000000000000.0001081d000185e3.00036d02fffc338a -+ 800000005a80c9d2.51ba7978fb4e6f85.00000000f2b590f5.e84f0e7848463f00 - 15e690af7a17994d - --VPSRAD_128(reg) -+VROUNDPS_256_0x0(reg) - before - 33c2fea692d8c42a.93cf96b9a61d49db.1cf18b7bcc243349.927f736bb067e89f - dc7f68ede69c0914.a5b18506402f85bd.3474784defb4e437.56489c28254fd013 -@@ -30032,10 +30032,10 @@ VPSRAD_128(reg) - after - 33c2fea692d8c42a.93cf96b9a61d49db.1cf18b7bcc243349.927f736bb067e89f - dc7f68ede69c0914.a5b18506402f85bd.3474784defb4e437.56489c28254fd013 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000012 -- 0000000000000000.0000000000000000.00000d1dfffffbed.0000159200000953 -- 0000000000000012 --VPSRAD_128(mem) -+ 6d68ccee13efa3b8.785c5f23fc9df91f.c6bd1f635ccf8cc8.2c3431ffed4e50af -+ dc7f68ede69c0914.8000000040400000.00000000efb4e437.56489c2800000000 -+ 83aa91ace6be0c12 -+VROUNDPS_256_0x0(mem) - before - baca535a5148be30.b8f270d36674c9dd.d040c27c49bf740d.c8d5911085cfb386 - 753e71d17e18fa27.292aa78ec4bdcdb5.0d114291118af3f2.ef3b527e7acdaa0a -@@ -30046,10 +30046,10 @@ VPSRAD_128(mem) - baca535a5148be30.b8f270d36674c9dd.d040c27c49bf740d.c8d5911085cfb386 - 753e71d17e18fa27.292aa78ec4bdcdb5.0d114291118af3f2.ef3b527e7acdaa0a - 8ed267ff8b3a7a23.f2bfc8b46bc616f7.7cdb9d266be29a06.0198bfe1298589e2 -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000003 -+ 800000005148be30.800000006674c9dd.d040c27c49bf7410.c8d5910080000000 - 52678a362650ee3d - --VPSLLQ_128(reg) -+VROUNDPS_256_0x1(reg) - before - 4a71e000ac7bed18.4e8acd2cb4a638d8.fc30b5f102456a69.5c8ed28143674a69 - 9ba1d16f5d90c2f6.ad4534040808efe9.f5a37ae02ad4edf0.850ea31efaabcd10 -@@ -30059,10 +30059,10 @@ VPSLLQ_128(reg) - after - 4a71e000ac7bed18.4e8acd2cb4a638d8.fc30b5f102456a69.5c8ed28143674a69 - 9ba1d16f5d90c2f6.ad4534040808efe9.f5a37ae02ad4edf0.850ea31efaabcd10 -- 0000000000000000.0000000000000000.0000000000000000.000000000000002e -- 0000000000000000.0000000000000000.3b7c000000000000.f344000000000000 -- 000000000000002e --VPSLLQ_128(mem) -+ a3445af0d41bac84.da516342abecdaaf.b6a417eb0a52a590.50b83fecb1ad6697 -+ bf8000005d90c2f6.bf80000000000000.f5a37ae000000000.bf800000faabcd10 -+ 37bac5c79514ccee -+VROUNDPS_256_0x1(mem) - before - 0daaa7adf9921218.441321d486bfaa5e.12870ba14f6a3e08.007bce01644ca7ce - f3f34473cffd5ed1.95d75810f9f13703.d44a7b99881d2ff4.41eadfe416e068c4 -@@ -30073,10 +30073,10 @@ VPSLLQ_128(mem) - 0daaa7adf9921218.441321d486bfaa5e.12870ba14f6a3e08.007bce01644ca7ce - f3f34473cffd5ed1.95d75810f9f13703.d44a7b99881d2ff4.41eadfe416e068c4 - c6621705325f6c44.0c3e150ca2c9c707.d58da3a781824544.ba16ba93f1944f83 -- 0000000000000000.0000000000000000.4f733103a5fe8000.5bfc82dc0d188000 -+ 00000000f9921218.44130000bf800000.000000004f6a3e08.00000000644ca7ce - c4d4bb028f897e0d - --VPSLLQ_128(reg) -+VROUNDPS_256_0x1(reg) - before - 0dfed99a8be23f31.a4e24f3d113ec20a.dd2416f90898e3df.05c20cb72194cfc2 - fe15b0ad1f8b15ce.668bacbbc4d281b4.ee3b52c1fca8e70a.eb4d458f0158bb48 -@@ -30086,10 +30086,10 @@ VPSLLQ_128(reg) - after - 0dfed99a8be23f31.a4e24f3d113ec20a.dd2416f90898e3df.05c20cb72194cfc2 - fe15b0ad1f8b15ce.668bacbbc4d281b4.ee3b52c1fca8e70a.eb4d458f0158bb48 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000006 -- 0000000000000000.0000000000000000.8ed4b07f2a39c280.d35163c0562ed200 -- 0000000000000006 --VPSLLQ_128(mem) -+ f2653da7e80f3c91.858a30b5758ef3ca.962504fb978dde44.8087262e0ffebce3 -+ fe15b0ad00000000.668bacbbc4d2a000.ee3b52c1fca8e70a.eb4d458f00000000 -+ 273bd16e2b22eb06 -+VROUNDPS_256_0x1(mem) - before - f14c92e770b892e6.58df660187da7138.4ab89ace40b0dee4.16a2bf7030079898 - da3eecd655603e8b.80a2fa399538f674.a88079c5912dd042.a7ccbf8567b4d30a -@@ -30100,10 +30100,10 @@ VPSLLQ_128(mem) - f14c92e770b892e6.58df660187da7138.4ab89ace40b0dee4.16a2bf7030079898 - da3eecd655603e8b.80a2fa399538f674.a88079c5912dd042.a7ccbf8567b4d30a - bedb5a27f526aa21.1dcd330747a1bc85.d3ce6de8500364b9.3efa26bab466f13b -- 0000000000000000.0000000000000000.079c5912dd042000.cbf8567b4d30a000 -+ f14c92e770b892e6.58df6601bf800000.4ab89ace40a00000.0000000000000000 - ef8d1b39010bc88c - --VPSLLQ_128(reg) -+VROUNDPS_256_0x1(reg) - before - c08ba05a3916fa03.e74a63a0d83eb5ce.228e861a0ac7fed8.002c896186e765a9 - 07bc7c4bf855ffeb.e4b3f6a052a7cc3d.43bc9736529af272.bad3a890350d4a78 -@@ -30113,10 +30113,10 @@ VPSLLQ_128(reg) - after - c08ba05a3916fa03.e74a63a0d83eb5ce.228e861a0ac7fed8.002c896186e765a9 - 07bc7c4bf855ffeb.e4b3f6a052a7cc3d.43bc9736529af272.bad3a890350d4a78 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000017 -- 0000000000000000.0000000000000000.9b294d7939000000.481a86a53c000000 -- 0000000000000017 --VPSLLQ_128(mem) -+ 206bab7ad95714ee.4cf78db1f85f934d.47833e99aea91792.b131cd9bc2bcc113 -+ 00000000f855ffeb.e4b3f6a052a7cc3d.43bc8000529af272.bf80000000000000 -+ c63d1bf6e4e35857 -+VROUNDPS_256_0x1(mem) - before - 9b843b1db173f059.3777f44073cd5cf7.cd45b8bb36e924ff.6c0b3ae415a9e812 - 1eb151d1ccbc0ad5.ee6b05ae635a0854.9de5448b07d465f9.446488a456b20acb -@@ -30127,10 +30127,10 @@ VPSLLQ_128(mem) - 9b843b1db173f059.3777f44073cd5cf7.cd45b8bb36e924ff.6c0b3ae415a9e812 - 1eb151d1ccbc0ad5.ee6b05ae635a0854.9de5448b07d465f9.446488a456b20acb - 2a8fdafc50c863f8.e70e5a0ae6d8b47e.4991c41d733d4743.71865b5b1d264eb9 -- 0000000000000000.0000000000000000.f5197e4000000000.ac82b2c000000000 -+ bf800000bf800000.0000000073cd5cf7.cd45b8bb00000000.6c0b3ae400000000 - 3555815fa7812ce6 - --VPSRLQ_128(reg) -+VROUNDPS_256_0x2(reg) - before - 8699cc84a37f3e7d.4c92326c045fc1e2.0f91bc3814d9fae3.a13d90378dbadd7a - 9ad78c50931961f9.1b4ef9886d013e01.f608c2e2f6740d77.06d5d59773e60abe -@@ -30140,10 +30140,10 @@ VPSRLQ_128(reg) - after - 8699cc84a37f3e7d.4c92326c045fc1e2.0f91bc3814d9fae3.a13d90378dbadd7a - 9ad78c50931961f9.1b4ef9886d013e01.f608c2e2f6740d77.06d5d59773e60abe -- 0000000000000000.0000000000000000.0000000000000000.000000000000003e -- 0000000000000000.0000000000000000.0000000000000003.0000000000000000 -- 000000000000003e --VPSRLQ_128(mem) -+ ce59be2f14dad207.e2ec22cbaf97ea77.8e5efb2adb301087.b6a8fe6a65c0c702 -+ 8000000080000000.3f8000006d013e01.f608c2e2f6740d77.3f80000073e60abe -+ 6633ec15dab0e33e -+VROUNDPS_256_0x2(mem) - before - 1e82a9c597deba8c.065c64d636028d88.ccfd8c7c2fd0be16.46d8f7411d3cd4c9 - 923d3b98cee9128b.c375d17610814f53.a709c4c0a58b5e97.1c93b2e8b1a30e54 -@@ -30154,10 +30154,10 @@ VPSRLQ_128(mem) - 1e82a9c597deba8c.065c64d636028d88.ccfd8c7c2fd0be16.46d8f7411d3cd4c9 - 923d3b98cee9128b.c375d17610814f53.a709c4c0a58b5e97.1c93b2e8b1a30e54 - 9c2f1d799ddfa667.0f039fd9eb584e5f.ea264edc656a1d1f.155c90dcb85d270a -- 0000000000000000.0000000000000000.00000000005384e2.00000000000e49d9 -+ 3f80000080000000.3f8000003f800000.ccfd8c7c3f800000.46d8f8003f800000 - dc4ca65c8df3e9a9 - --VPSRLQ_128(reg) -+VROUNDPS_256_0x2(reg) - before - 630bd6bf93e80aea.e6ecc11572bb7664.c7ac4f99123af7ed.1cc6494d31c6e6f2 - 7b0819207c5ffa06.dd4f7ca8afb828dd.eb6129cd955f18c6.c3e1b27a755b6996 -@@ -30167,10 +30167,10 @@ VPSRLQ_128(reg) - after - 630bd6bf93e80aea.e6ecc11572bb7664.c7ac4f99123af7ed.1cc6494d31c6e6f2 - 7b0819207c5ffa06.dd4f7ca8afb828dd.eb6129cd955f18c6.c3e1b27a755b6996 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000038 -- 0000000000000000.0000000000000000.00000000000000eb.00000000000000c3 -- 0000000000000038 --VPSRLQ_128(mem) -+ 81906be9e3e3f6aa.dc1976f9f4cf08e3.0fba54758a0b6791.423e5d2e7344fbf0 -+ 7b0819207c5ffa06.dd4f7ca880000000.eb6129cd80000000.c3e18000755b6996 -+ 3ced6ae00b423a78 -+VROUNDPS_256_0x2(mem) - before - 6ed7c4b5dd7060fe.c8702d689d430139.5d151d86047d3d45.c78a8ecd34287dab - e93350c2d82284eb.c16195f52737887c.99dec09a082c0bf9.129a955622b2bd53 -@@ -30181,10 +30181,10 @@ VPSRLQ_128(mem) - 6ed7c4b5dd7060fe.c8702d689d430139.5d151d86047d3d45.c78a8ecd34287dab - e93350c2d82284eb.c16195f52737887c.99dec09a082c0bf9.129a955622b2bd53 - 89cd8af31965646a.170cfc9ba0680bf7.4b40941b8325f5ea.ce7edd02f0f31b9c -- 0000000000000000.0000000000000000.133bd8134105817f.025352aac45657aa -+ 6ed7c4b5dd7060fe.c8702d4080000000.5d151d863f800000.c78a8e803f800000 - 06f620739ecb1fc3 - --VPSRLQ_128(reg) -+VROUNDPS_256_0x2(reg) - before - 3a211410b67b3df9.a9ebfa72dccb42d1.4dc3b8e2ceb3f442.84fabc194f251030 - 4d5039811e116a80.e00626979506b910.e667045bbae4d26c.c3eb086dd845b8de -@@ -30194,10 +30194,10 @@ VPSRLQ_128(reg) - after - 3a211410b67b3df9.a9ebfa72dccb42d1.4dc3b8e2ceb3f442.84fabc194f251030 - 4d5039811e116a80.e00626979506b910.e667045bbae4d26c.c3eb086dd845b8de -- 0000000000000000.0000000000000000.0000000000000000.0000000000000025 -- 0000000000000000.0000000000000000.0000000007333822.00000000061f5843 -- 0000000000000025 --VPSRLQ_128(mem) -+ 9dd18b30731be005.ac8ff2910402db91.4cf6409e05839c7c.e9a474de48e06d79 -+ 4d5039813f800000.e006269780000000.e667045b80000000.c3eb0000d845b8de -+ 5a9e9ecd50b3ee25 -+VROUNDPS_256_0x2(mem) - before - 5d7653211f04318d.60f5a7fc52b999b8.731b52b0736b100c.f204762e2738e305 - b746194346007192.8c3068f11465553e.26b6e0aeaaf09a5e.ea1b68533567d8d4 -@@ -30208,10 +30208,10 @@ VPSRLQ_128(mem) - 5d7653211f04318d.60f5a7fc52b999b8.731b52b0736b100c.f204762e2738e305 - b746194346007192.8c3068f11465553e.26b6e0aeaaf09a5e.ea1b68533567d8d4 - 44da6a20e0b26a60.63ec47d532b44a72.deeffc300765bfa2.204d38f21233a83c -- 0000000000000000.0000000000000000.135b705755784d2f.750db4299ab3ec6a -+ 5d7653213f800000.60f5a7fc52b999b8.731b52b0736b100c.f204762e3f800000 - b632684ba7d3cd81 - --VROUNDPS_128_0x0(reg) -+VROUNDPS_256_0x3(reg) - before - ce7cbedd97bf98b7.677ea2b7de697606.86174d19f56dd192.cc6acf70a151c9b1 - 9412e498c6793034.b526804a7b860135.8a1d6b52d1eedbd6.bb447e0616df26d5 -@@ -30222,9 +30222,9 @@ VROUNDPS_128_0x0(reg) - ce7cbedd97bf98b7.677ea2b7de697606.86174d19f56dd192.cc6acf70a151c9b1 - 9412e498c6793034.b526804a7b860135.8a1d6b52d1eedbd6.bb447e0616df26d5 - 643ed5e8cf8ccfa6.a6c1db46fb8935dd.a9d4972b79420f78.1fecaad0208e0e9b -- 0000000000000000.0000000000000000.80000000d1eedbd6.8000000000000000 -+ 80000000c6793000.800000007b860135.80000000d1eedbd6.8000000000000000 - b6d66fb1667c6ec0 --VROUNDPS_128_0x0(mem) -+VROUNDPS_256_0x3(mem) - before - a0affe9fd9d45e76.928b08f8e0ed1513.e004f52e15738647.ac8606689f96e484 - 7087fc72527cc87f.a844438f21543367.e243acf1e7711c61.471842a655acfd47 -@@ -30235,10 +30235,10 @@ VROUNDPS_128_0x0(mem) - a0affe9fd9d45e76.928b08f8e0ed1513.e004f52e15738647.ac8606689f96e484 - 7087fc72527cc87f.a844438f21543367.e243acf1e7711c61.471842a655acfd47 - 0128e415ec806a06.38c4396cac44495e.f6a5cfcf0d864aa4.6f8a7a3247c62f17 -- 0000000000000000.0000000000000000.e004f52e00000000.8000000080000000 -+ 80000000d9d45e76.80000000e0ed1513.e004f52e00000000.8000000080000000 - d142d4e95134d290 - --VROUNDPS_128_0x0(reg) -+VROUNDPS_256_0x3(reg) - before - c420eceaa1a0ba91.d5f8637bf4ce4140.354846a411f14de8.c9074a87c3226253 - b40ef1eb9d40ac50.d0bff1169b30ee4c.5be455d824c5b2d2.3e9d9a3b8bc2c217 -@@ -30249,9 +30249,9 @@ VROUNDPS_128_0x0(reg) - c420eceaa1a0ba91.d5f8637bf4ce4140.354846a411f14de8.c9074a87c3226253 - b40ef1eb9d40ac50.d0bff1169b30ee4c.5be455d824c5b2d2.3e9d9a3b8bc2c217 - fb59e057e29ee378.fd805a31d31dc285.6a771001f152ff10.378747b817a8acb4 -- 0000000000000000.0000000000000000.5be455d800000000.0000000080000000 -+ 8000000080000000.d0bff11680000000.5be455d800000000.0000000080000000 - 2187a4c2e8770927 --VROUNDPS_128_0x0(mem) -+VROUNDPS_256_0x3(mem) - before - ca354d266679f456.01356921b4ca13b6.591eaa9767cecf34.b8b277e22aca4037 - 6767420418f0590d.785ffc567aaf8323.40958abbfba98002.adf11b73cecbac78 -@@ -30262,10 +30262,10 @@ VROUNDPS_128_0x0(mem) - ca354d266679f456.01356921b4ca13b6.591eaa9767cecf34.b8b277e22aca4037 - 6767420418f0590d.785ffc567aaf8323.40958abbfba98002.adf11b73cecbac78 - d2e8ff4819eaf279.b71567a6f98329a9.c935340e914047ae.fd585ba89db6f0bc -- 0000000000000000.0000000000000000.591eaa9767cecf34.8000000000000000 -+ ca354d246679f456.0000000080000000.591eaa9767cecf34.8000000000000000 - 1ac99bb22a78efff - --VROUNDPS_128_0x0(reg) -+VROUNDPS_256_0x3(reg) - before - 9f6c955f20672256.860ac2b27994b21f.fd58ba488f2907b3.2d22d6f531d30952 - ef661960b16f1c61.8643c0b0115d51b0.bc7d9a72df13b68e.c008c66173e77da2 -@@ -30276,9 +30276,9 @@ VROUNDPS_128_0x0(reg) - 9f6c955f20672256.860ac2b27994b21f.fd58ba488f2907b3.2d22d6f531d30952 - ef661960b16f1c61.8643c0b0115d51b0.bc7d9a72df13b68e.c008c66173e77da2 - 64022523781d1bcb.c5fc77c568d815a7.b35f4267581d8b33.644771ad26e8f780 -- 0000000000000000.0000000000000000.80000000df13b68e.c000000073e77da2 -+ ef66196080000000.8000000000000000.80000000df13b68e.c000000073e77da2 - 5003e49552deef99 --VROUNDPS_128_0x0(mem) -+VROUNDPS_256_0x3(mem) - before - 4f18a60902ebe52b.3154c29c1998136f.711dfce0c416fb71.b989df6232be978a - cfb7110d9415d2fc.40a24b2a2c7e8500.951ec2be01f0959d.7f69cb40cc6d4594 -@@ -30289,10 +30289,10 @@ VROUNDPS_128_0x0(mem) - 4f18a60902ebe52b.3154c29c1998136f.711dfce0c416fb71.b989df6232be978a - cfb7110d9415d2fc.40a24b2a2c7e8500.951ec2be01f0959d.7f69cb40cc6d4594 - acaca38e23687237.e5c24b29e539eaa0.68ce32636ead44dd.ee367099fe6c0917 -- 0000000000000000.0000000000000000.711dfce0c4170000.8000000000000000 -+ 4f18a60900000000.0000000000000000.711dfce0c416c000.8000000000000000 - 34c7d76c9c88c23b - --VROUNDPS_128_0x1(reg) -+VROUNDPS_256_0x4(reg) - before - c22390bf3fbc2f33.edc629b3a9b5b99e.62aaa22bba5f80c0.8b6ef8af46fdcf4d - 699bf23ceb71a255.0985152fd8c8d921.f10bf0050fe22898.93f5482ee9a824d3 -@@ -30303,9 +30303,9 @@ VROUNDPS_128_0x1(reg) - c22390bf3fbc2f33.edc629b3a9b5b99e.62aaa22bba5f80c0.8b6ef8af46fdcf4d - 699bf23ceb71a255.0985152fd8c8d921.f10bf0050fe22898.93f5482ee9a824d3 - 847dfa513c30574c.f2c918d875349bbf.866ea601796ab42f.ba5d30232b667e1e -- 0000000000000000.0000000000000000.f10bf00500000000.bf800000e9a824d3 -+ 699bf23ceb71a255.00000000d8c8d921.f10bf00500000000.80000000e9a824d3 - d5fcb920ff492fb2 --VROUNDPS_128_0x1(mem) -+VROUNDPS_256_0x4(mem) - before - 81cb51ffc886ff52.85aae8ef3b01756b.9b12505e6744f8fa.326d360b03bb684c - bcaa7205a105c468.238ec751212b57eb.13b07d13f5010bf0.01a109f2599c0729 -@@ -30316,10 +30316,10 @@ VROUNDPS_128_0x1(mem) - 81cb51ffc886ff52.85aae8ef3b01756b.9b12505e6744f8fa.326d360b03bb684c - bcaa7205a105c468.238ec751212b57eb.13b07d13f5010bf0.01a109f2599c0729 - 6265971ca4d3391e.a60a3cfa1b906af1.c803b0a45f46b0b0.460833aa36b17a77 -- 0000000000000000.0000000000000000.bf8000006744f8fa.0000000000000000 -+ 80000000c886ff60.8000000000000000.800000006744f8fa.0000000000000000 - a29e7d3df2adcc10 - --VROUNDPS_128_0x1(reg) -+VROUNDPS_256_0x4(reg) - before - 716595f00bab22b4.5f9ede329f89261b.c7fed4d1bd3c163d.59fb1a0a3d99a340 - 2690f425190e3c78.6db4f708cd8a15bb.1d0df0d89d9b27dc.ec3848b7e8bf6968 -@@ -30330,9 +30330,9 @@ VROUNDPS_128_0x1(reg) - 716595f00bab22b4.5f9ede329f89261b.c7fed4d1bd3c163d.59fb1a0a3d99a340 - 2690f425190e3c78.6db4f708cd8a15bb.1d0df0d89d9b27dc.ec3848b7e8bf6968 - 1d699746ba625508.57d605a09709a5ac.c7e691d5026559b0.2d5b6cf1e19db10b -- 0000000000000000.0000000000000000.00000000bf800000.ec3848b7e8bf6968 -+ 0000000000000000.6db4f708cd8a15bb.0000000080000000.ec3848b7e8bf6968 - 268287b82bb3ba6f --VROUNDPS_128_0x1(mem) -+VROUNDPS_256_0x4(mem) - before - 951e761eb402f28a.40579500240f7839.2c6eeec66db2972e.88205465c86c13a9 - 22d04cc0fa3a9dcf.2505e9712480f933.ce7cc02db1f47218.561b6dd062c01225 -@@ -30343,10 +30343,10 @@ VROUNDPS_128_0x1(mem) - 951e761eb402f28a.40579500240f7839.2c6eeec66db2972e.88205465c86c13a9 - 22d04cc0fa3a9dcf.2505e9712480f933.ce7cc02db1f47218.561b6dd062c01225 - a764838a1a66776a.bc91707f271269a9.bcc5770501e5dd03.e90efbe1f0b02388 -- 0000000000000000.0000000000000000.000000006db2972e.bf800000c86c13c0 -+ 8000000080000000.4040000000000000.000000006db2972e.80000000c86c13c0 - c91067aa5a916bae - --VROUNDPS_128_0x1(reg) -+VROUNDPS_256_0x4(reg) - before - cfb63c396d9b19c9.0e62084656cba755.6f760822a5c90ab7.e83c81bc3300558a - 0984771fe570c97a.a6634e10ab1c75fc.4467118f5707b1a8.de01cd734d44da7e -@@ -30357,9 +30357,9 @@ VROUNDPS_128_0x1(reg) - cfb63c396d9b19c9.0e62084656cba755.6f760822a5c90ab7.e83c81bc3300558a - 0984771fe570c97a.a6634e10ab1c75fc.4467118f5707b1a8.de01cd734d44da7e - d3c813c85e9cb76c.a876e7b2489262aa.3b673d497c9639c4.9032ed4be366e024 -- 0000000000000000.0000000000000000.446700005707b1a8.de01cd734d44da7e -+ 00000000e570c97a.8000000080000000.446700005707b1a8.de01cd734d44da7e - 94079913f0745e30 --VROUNDPS_128_0x1(mem) -+VROUNDPS_256_0x4(mem) - before - 9e431ddaa0794eee.87de6014c02b3cc6.5503fe2fd01a87ca.fec3ef548dd9d72f - d41c65733c8cae0e.2948078fe2a64b85.ba1375e2f3443893.82b76d7eb1a465d6 -@@ -30370,10 +30370,10 @@ VROUNDPS_128_0x1(mem) - 9e431ddaa0794eee.87de6014c02b3cc6.5503fe2fd01a87ca.fec3ef548dd9d72f - d41c65733c8cae0e.2948078fe2a64b85.ba1375e2f3443893.82b76d7eb1a465d6 - 105ceecbdfba3cba.cb57007c75a78736.f7662e1ccec3f814.99eafea4b8f1c358 -- 0000000000000000.0000000000000000.5503fe2fd01a87ca.fec3ef54bf800000 -+ 8000000080000000.80000000c0400000.5503fe2fd01a87ca.fec3ef5480000000 - eb3d4a99dd3edfa0 - --VROUNDPS_128_0x2(reg) -+VROUNDPD_128_0x0(reg) - before - e0f5fc3e335715bd.0d44b063ab94cd68.7f94d6615b717a1c.6d0157da22ee93e8 - d61bb291db210a66.8783e27d0c5849c2.4959ab30e751a8a9.5de1bf35d2b1e794 -@@ -30386,7 +30386,7 @@ VROUNDPS_128_0x2(reg) - 2bfd67fd7228fb47.775b4304e567e158.83f4c12153e8f3d9.963359c8acfa39a7 - 0000000000000000.0000000000000000.4959ab30e751a8a9.5de1bf35d2b1e794 - 535d14464b47cab0 --VROUNDPS_128_0x2(mem) -+VROUNDPD_128_0x0(mem) - before - 90cd2c0a496481fe.5d20bfd1dc1fc05e.2c01870e6d9458eb.b6d7a11f3d6cd3cc - 85de67b5e1362663.f3fa5a10e6260ced.a968626854caae3f.68b86202f371e0e8 -@@ -30397,10 +30397,10 @@ VROUNDPS_128_0x2(mem) - 90cd2c0a496481fe.5d20bfd1dc1fc05e.2c01870e6d9458eb.b6d7a11f3d6cd3cc - 85de67b5e1362663.f3fa5a10e6260ced.a968626854caae3f.68b86202f371e0e8 - 0f5d40352ec8760b.58bee4184f9b4364.0d975ce0237a1180.fa9e55b8f95efa55 -- 0000000000000000.0000000000000000.3f8000006d9458eb.800000003f800000 -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - 2da8be4e671d48d5 - --VROUNDPS_128_0x2(reg) -+VROUNDPD_128_0x0(reg) - before - 87642d060708f43f.52d6bd60585d07d2.fa38b534acfc66b9.fa7da2dae779ee77 - 3056bd40670a9dab.c36659e46d77bf49.f086f520d901c9ee.3bcbe53414e1df86 -@@ -30411,9 +30411,9 @@ VROUNDPS_128_0x2(reg) - 87642d060708f43f.52d6bd60585d07d2.fa38b534acfc66b9.fa7da2dae779ee77 - 3056bd40670a9dab.c36659e46d77bf49.f086f520d901c9ee.3bcbe53414e1df86 - 86c8696a23af80c5.399583eca88312b3.24ee1485d4a308bc.d311385c98f2cd31 -- 0000000000000000.0000000000000000.f086f520d901c9ee.3f8000003f800000 -+ 0000000000000000.0000000000000000.f086f520d901c9ee.0000000000000000 - 78b500c71845900d --VROUNDPS_128_0x2(mem) -+VROUNDPD_128_0x0(mem) - before - 3dab6ce24b9ddc96.a55e0b3b2213e3b1.a4fc7238fe9a780f.b63edf69a5ef08cd - c9c9d87b45d0156c.271bf8ba9cebdbdb.50cc2e5451bf0358.ccbf83c1b3b14269 -@@ -30424,10 +30424,10 @@ VROUNDPS_128_0x2(mem) - 3dab6ce24b9ddc96.a55e0b3b2213e3b1.a4fc7238fe9a780f.b63edf69a5ef08cd - c9c9d87b45d0156c.271bf8ba9cebdbdb.50cc2e5451bf0358.ccbf83c1b3b14269 - f8dac17e23eaf7ba.c488f1d8e295fd63.726a69a43a031945.908af743ff41474c -- 0000000000000000.0000000000000000.80000000fe9a780f.8000000080000000 -+ 0000000000000000.0000000000000000.8000000000000000.8000000000000000 - 92323c70c4f8a69a - --VROUNDPS_128_0x2(reg) -+VROUNDPD_128_0x0(reg) - before - 88a605f57437765d.ae09f672f9ffa470.c3a5fda24494ae3b.85404a913c1ed5b5 - 9b958e52d3740317.eebe3b3b2914e830.dced06259801b5e4.2d0fe7068d0bf391 -@@ -30438,9 +30438,9 @@ VROUNDPS_128_0x2(reg) - 88a605f57437765d.ae09f672f9ffa470.c3a5fda24494ae3b.85404a913c1ed5b5 - 9b958e52d3740317.eebe3b3b2914e830.dced06259801b5e4.2d0fe7068d0bf391 - 294ad2f57c3a8774.4196ed1ead3ec418.81160df82871d69a.bbddf35ee3498bc0 -- 0000000000000000.0000000000000000.dced062580000000.3f80000080000000 -+ 0000000000000000.0000000000000000.dced06259801b5e4.0000000000000000 - f5a1456c11e71dc5 --VROUNDPS_128_0x2(mem) -+VROUNDPD_128_0x0(mem) - before - 5a3083f9205e8ef4.233a7bb91d9266ca.8fe484e21f073813.e03a023a6e8b55df - 14ed201aa4556925.460dd8b34e3d391a.42f0629c45bc467d.51cde8825c4d2ac6 -@@ -30451,10 +30451,10 @@ VROUNDPS_128_0x2(mem) - 5a3083f9205e8ef4.233a7bb91d9266ca.8fe484e21f073813.e03a023a6e8b55df - 14ed201aa4556925.460dd8b34e3d391a.42f0629c45bc467d.51cde8825c4d2ac6 - fea497bbbad96b85.54d6e1a239a0f4be.79509c202fb9dec0.be71bcc9f6430a6b -- 0000000000000000.0000000000000000.800000003f800000.e03a023a6e8b55df -+ 0000000000000000.0000000000000000.8000000000000000.e03a023a6e8b55df - fd1c1a04a0f7d69d - --VROUNDPS_128_0x3(reg) -+VROUNDPD_128_0x1(reg) - before - 86bb9ed0e7cf3b82.d62e032d0ab5d480.9d7ce40faec311b1.df3c1535bdb49780 - 7b9afe4c4b099ad5.7c9bf1d77c26b373.91f2d665709beb58.c6604c9f99cb3054 -@@ -30465,9 +30465,9 @@ VROUNDPS_128_0x3(reg) - 86bb9ed0e7cf3b82.d62e032d0ab5d480.9d7ce40faec311b1.df3c1535bdb49780 - 7b9afe4c4b099ad5.7c9bf1d77c26b373.91f2d665709beb58.c6604c9f99cb3054 - 380738e268342e42.c231a8b0f053a845.de8e64615d5c9d02.a108cf83a85843b2 -- 0000000000000000.0000000000000000.80000000709beb58.c6604c0080000000 -+ 0000000000000000.0000000000000000.bff0000000000000.c6604c9f99cb3054 - 9f12aa69d206c1b6 --VROUNDPS_128_0x3(mem) -+VROUNDPD_128_0x1(mem) - before - 7a0dfa43243fa6b5.7ab627103a86e718.a20a66a34c12c635.f76c41f726ca7811 - b8bc8647191ef3ed.b791d48028c685d9.f3e665956cbd68ab.7b4588693a8f19ce -@@ -30478,10 +30478,10 @@ VROUNDPS_128_0x3(mem) - 7a0dfa43243fa6b5.7ab627103a86e718.a20a66a34c12c635.f76c41f726ca7811 - b8bc8647191ef3ed.b791d48028c685d9.f3e665956cbd68ab.7b4588693a8f19ce - 35ebca62ceaf6589.2b294aba3e254864.551b1d67fe5310b0.c8745a31e96d823f -- 0000000000000000.0000000000000000.800000004c12c635.f76c41f700000000 -+ 0000000000000000.0000000000000000.bff0000000000000.f76c41f726ca7811 - 3109917085a69beb - --VROUNDPS_128_0x3(reg) -+VROUNDPD_128_0x1(reg) - before - 0405edbfab18c27f.5df86b89e618a79f.2dbf834155722f87.bdc3ad5be5756414 - 1288c413dcd4a276.bf6fc06e8108ef71.72553d658c78cc77.7ace7c55741988cc -@@ -30492,9 +30492,9 @@ VROUNDPS_128_0x3(reg) - 0405edbfab18c27f.5df86b89e618a79f.2dbf834155722f87.bdc3ad5be5756414 - 1288c413dcd4a276.bf6fc06e8108ef71.72553d658c78cc77.7ace7c55741988cc - b5de13d8b365757c.d095bd184cdb4c58.5fd8b1045dcd7de0.b863f6dfe3d9a3c3 -- 0000000000000000.0000000000000000.72553d6580000000.7ace7c55741988cc -+ 0000000000000000.0000000000000000.72553d658c78cc77.7ace7c55741988cc - 275ad854d6ddad1d --VROUNDPS_128_0x3(mem) -+VROUNDPD_128_0x1(mem) - before - 10543817923a14d7.2d330566c437e768.6f21a070e0573313.a0d5b364379413d0 - ea093219a0e46280.bac9a1063690fea6.b51f7ef5e119363f.ade63afc781f6eae -@@ -30505,10 +30505,10 @@ VROUNDPS_128_0x3(mem) - 10543817923a14d7.2d330566c437e768.6f21a070e0573313.a0d5b364379413d0 - ea093219a0e46280.bac9a1063690fea6.b51f7ef5e119363f.ade63afc781f6eae - 914343481be55244.4e63a5c8bfeef8a3.1afcf4f082ed3e30.d2156ac0c229cfb5 -- 0000000000000000.0000000000000000.6f21a070e0573313.8000000000000000 -+ 0000000000000000.0000000000000000.6f21a070e0573313.bff0000000000000 - d3f8b778e0ec91f2 - --VROUNDPS_128_0x3(reg) -+VROUNDPD_128_0x1(reg) - before - 6745cb45ecbc6b7e.b67896dac9210bcc.f6ced15e84eb878b.b18798f911fb4b10 - 84df78ed703c3be4.ec0cd21534744ce7.c338f20bf9a195cf.9bccbfdf384ec957 -@@ -30519,9 +30519,9 @@ VROUNDPS_128_0x3(reg) - 6745cb45ecbc6b7e.b67896dac9210bcc.f6ced15e84eb878b.b18798f911fb4b10 - 84df78ed703c3be4.ec0cd21534744ce7.c338f20bf9a195cf.9bccbfdf384ec957 - 8412badc08f73cd0.5f55132c7d4f1fcd.06d56a89f38d7683.14216eea6fe43c12 -- 0000000000000000.0000000000000000.c3380000f9a195cf.8000000000000000 -+ 0000000000000000.0000000000000000.c338f20bf9a195cf.bff0000000000000 - 232a54237a05ef97 --VROUNDPS_128_0x3(mem) -+VROUNDPD_128_0x1(mem) - before - 7177842987aaa7b8.a172ee3fe64fc4e8.6c39989e17ce6ea9.5ed751a8ec35a3e8 - be032b0514c045fe.7637d88b6404c36d.be6cd5d2a08a62f7.2bd4b721220867f2 -@@ -30532,10 +30532,10 @@ VROUNDPS_128_0x3(mem) - 7177842987aaa7b8.a172ee3fe64fc4e8.6c39989e17ce6ea9.5ed751a8ec35a3e8 - be032b0514c045fe.7637d88b6404c36d.be6cd5d2a08a62f7.2bd4b721220867f2 - e59bc7a33b558394.9ec548cf6724e327.bc85079176fed8c0.de34641b4f42ef1c -- 0000000000000000.0000000000000000.6c39989e00000000.5ed751a8ec35a3e8 -+ 0000000000000000.0000000000000000.6c39989e17ce6ea9.5ed751a8ec35a3e8 - 654d8443fc143a7e - --VROUNDPS_128_0x4(reg) -+VROUNDPD_128_0x2(reg) - before - f29eee49b4c5750f.361fccd5cd2ad162.5b6ca6eb69d779ec.31983e647c403d71 - d5819080d20c646f.16a32c4270835af3.a71c8d9ba081674e.5e2a3b50e325a3b1 -@@ -30546,9 +30546,9 @@ VROUNDPS_128_0x4(reg) - f29eee49b4c5750f.361fccd5cd2ad162.5b6ca6eb69d779ec.31983e647c403d71 - d5819080d20c646f.16a32c4270835af3.a71c8d9ba081674e.5e2a3b50e325a3b1 - 6a446653f373434b.426271201d897383.b7c6e9f3cdc76697.a9d21e7807f37c1c -- 0000000000000000.0000000000000000.8000000080000000.5e2a3b50e325a3b1 -+ 0000000000000000.0000000000000000.8000000000000000.5e2a3b50e325a3b1 - 0594872cf9787722 --VROUNDPS_128_0x4(mem) -+VROUNDPD_128_0x2(mem) - before - cf460590fe461014.19959a82acd7bf25.eac597e30bd14756.9433f14872548988 - 253d59e0302d0ce2.ecbcf1b57debd57c.1f0071a0832a7af1.188f951d24b4268a -@@ -30559,10 +30559,10 @@ VROUNDPS_128_0x4(mem) - cf460590fe461014.19959a82acd7bf25.eac597e30bd14756.9433f14872548988 - 253d59e0302d0ce2.ecbcf1b57debd57c.1f0071a0832a7af1.188f951d24b4268a - e5460008ac3927b6.e0f16b35c050cafe.0ea71e7f77622e3c.d0149d493adfc421 -- 0000000000000000.0000000000000000.eac597e300000000.8000000072548988 -+ 0000000000000000.0000000000000000.eac597e30bd14756.8000000000000000 - 4cc8cf5604c7f5bf - --VROUNDPS_128_0x4(reg) -+VROUNDPD_128_0x2(reg) - before - c890f010ef9c001f.0ebf3391f0eda821.9fbab9cd0d3f4435.8e68e652409c0894 - e8b066d0af6cfdc4.31c5b8caf0ad8711.22e484bc4fe04142.d61bf91f4eb7a6f9 -@@ -30573,9 +30573,9 @@ VROUNDPS_128_0x4(reg) - c890f010ef9c001f.0ebf3391f0eda821.9fbab9cd0d3f4435.8e68e652409c0894 - e8b066d0af6cfdc4.31c5b8caf0ad8711.22e484bc4fe04142.d61bf91f4eb7a6f9 - 08752d04e0c4285a.2c0e7f8baac275b7.364d63a974030d2a.4a69cfbe48e0b4be -- 0000000000000000.0000000000000000.000000004fe04142.d61bf91f4eb7a6f9 -+ 0000000000000000.0000000000000000.3ff0000000000000.d61bf91f4eb7a6f9 - 2109b9236d8e141b --VROUNDPS_128_0x4(mem) -+VROUNDPD_128_0x2(mem) - before - 3ef3c4c0d12add0a.b81d9f74023af60d.1e95c454ba196cd7.850c4b29d4fc053e - f5a884e09004060a.009941892c701280.cc6b3a354873eea9.77f94c9549eaa8c1 -@@ -30586,10 +30586,10 @@ VROUNDPS_128_0x4(mem) - 3ef3c4c0d12add0a.b81d9f74023af60d.1e95c454ba196cd7.850c4b29d4fc053e - f5a884e09004060a.009941892c701280.cc6b3a354873eea9.77f94c9549eaa8c1 - 23f6736ec7294d46.b7e925c1365d4c96.c3b3e24eff516ee2.6c564fae0f8a0bd0 -- 0000000000000000.0000000000000000.0000000080000000.80000000d4fc053e -+ 0000000000000000.0000000000000000.3ff0000000000000.8000000000000000 - ca8b5197040e0141 - --VROUNDPS_128_0x4(reg) -+VROUNDPD_128_0x2(reg) - before - edfc463f6a0a0bfa.5488d3830b822025.e739a14a5c8d0855.fdc9b8d95bca5b37 - 810c2f4592e8c5ef.0f653be350ce241f.17d03074b0e80257.f72fdf22377d40ab -@@ -30600,9 +30600,9 @@ VROUNDPS_128_0x4(reg) - edfc463f6a0a0bfa.5488d3830b822025.e739a14a5c8d0855.fdc9b8d95bca5b37 - 810c2f4592e8c5ef.0f653be350ce241f.17d03074b0e80257.f72fdf22377d40ab - e307071319336bcc.b10ac4617d943506.276bf170542b0baa.aa362853ace51336 -- 0000000000000000.0000000000000000.0000000080000000.f72fdf2200000000 -+ 0000000000000000.0000000000000000.3ff0000000000000.f72fdf22377d40ab - ab5b101ed3017640 --VROUNDPS_128_0x4(mem) -+VROUNDPD_128_0x2(mem) - before - b110a890bdce7e17.81ed74bbb2406aed.1bdc2667fdc06e4a.56e2f792fe9635f6 - e096529ab17f64b4.7670026dfd1b3a88.9aa0f7c7883d0dfe.2d54338f3bd6ce46 -@@ -30613,10 +30613,10 @@ VROUNDPS_128_0x4(mem) - b110a890bdce7e17.81ed74bbb2406aed.1bdc2667fdc06e4a.56e2f792fe9635f6 - e096529ab17f64b4.7670026dfd1b3a88.9aa0f7c7883d0dfe.2d54338f3bd6ce46 - 14bb8a28c920e544.a80e6f971593e7bb.6f5cd8f66b65a94f.55fb9110392e6698 -- 0000000000000000.0000000000000000.00000000fdc06e4a.56e2f792fe9635f6 -+ 0000000000000000.0000000000000000.3ff0000000000000.56e2f792fe9635f6 - 0418a04be7547df1 - --VROUNDPS_256_0x0(reg) -+VROUNDPD_128_0x3(reg) - before - 442649ddce3a764f.fb0e9480db64a7ec.36cbd608228bc499.90ecbc6da6e3c877 - 439804a2e6675c60.65d45f220d1e605c.4a82c9264f236b9b.9358b68d3752c2a6 -@@ -30627,9 +30627,9 @@ VROUNDPS_256_0x0(reg) - 442649ddce3a764f.fb0e9480db64a7ec.36cbd608228bc499.90ecbc6da6e3c877 - 439804a2e6675c60.65d45f220d1e605c.4a82c9264f236b9b.9358b68d3752c2a6 - 5fbccc06cb686cce.4568a8f8d3f9a46e.0c838a6db989dfe4.5decb02c8f9aa922 -- 43980000e6675c60.65d45f2200000000.4a82c9264f236b9b.8000000000000000 -+ 0000000000000000.0000000000000000.4a82c9264f236b9b.8000000000000000 - b6ba959407ec2daf --VROUNDPS_256_0x0(mem) -+VROUNDPD_128_0x3(mem) - before - fc8e78355e0c4218.5945735c6913f972.d42aa4f1913fbc2b.09966b27baeb19fe - 7ab94b04ec36347e.f1434a255bd6ee01.3bef50ecc0c3082d.fd40837188015826 -@@ -30640,10 +30640,10 @@ VROUNDPS_256_0x0(mem) - fc8e78355e0c4218.5945735c6913f972.d42aa4f1913fbc2b.09966b27baeb19fe - 7ab94b04ec36347e.f1434a255bd6ee01.3bef50ecc0c3082d.fd40837188015826 - 0b078aedce77be0d.14221f3e899cfc9d.86b36acaf597ce82.0f65599505145246 -- fc8e78355e0c4218.5945735c6913f972.d42aa4f180000000.0000000080000000 -+ 0000000000000000.0000000000000000.d42aa4f1913fbc2b.0000000000000000 - fd4f341779616a1d - --VROUNDPS_256_0x0(reg) -+VROUNDPD_128_0x3(reg) - before - 90ad304ea9b4ff2c.d5413ebefc6b8e53.6eb2b00c0b6257ae.3d63d8e4de60bcd3 - b2b5dc0ef73441e2.c7c3aa7d80374a64.5efb649a977a1b7b.5fe824f7cb6d5b27 -@@ -30654,9 +30654,9 @@ VROUNDPS_256_0x0(reg) - 90ad304ea9b4ff2c.d5413ebefc6b8e53.6eb2b00c0b6257ae.3d63d8e4de60bcd3 - b2b5dc0ef73441e2.c7c3aa7d80374a64.5efb649a977a1b7b.5fe824f7cb6d5b27 - beb432c3006e6aec.3b997207c749904d.49550627cfc5e906.d79bcf9e2dfa647e -- 80000000f73441e2.c7c3aa8080000000.5efb649a80000000.5fe824f7cb6d5b27 -+ 0000000000000000.0000000000000000.5efb649a977a1b7b.5fe824f7cb6d5b27 - 35ba2f58c3c6a7e4 --VROUNDPS_256_0x0(mem) -+VROUNDPD_128_0x3(mem) - before - d3bedc442d1d594b.03c7d1bcb23d63ab.1d7107281170a558.836c01eeb5269104 - 3721d7737e236665.f57212d892ebabb7.430bcc984b9decd3.8ac052009a54e4cf -@@ -30667,10 +30667,10 @@ VROUNDPS_256_0x0(mem) - d3bedc442d1d594b.03c7d1bcb23d63ab.1d7107281170a558.836c01eeb5269104 - 3721d7737e236665.f57212d892ebabb7.430bcc984b9decd3.8ac052009a54e4cf - 3bad9dd2cfe6895d.4045ed999d82cbc8.5b29dd82b941add6.fd5680c19ce43008 -- d3bedc4400000000.0000000080000000.0000000000000000.8000000080000000 -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - 977465016660a673 - --VROUNDPS_256_0x0(reg) -+VROUNDPD_128_0x3(reg) - before - 76941358656348fd.977277d2e7d20399.558e66bba29c82a3.d51fd4749e1b8726 - 31248e0df1f9d3a4.a6448449e612d335.d69dfbf4d43691c6.ee90b2544e691acc -@@ -30681,9 +30681,9 @@ VROUNDPS_256_0x0(reg) - 76941358656348fd.977277d2e7d20399.558e66bba29c82a3.d51fd4749e1b8726 - 31248e0df1f9d3a4.a6448449e612d335.d69dfbf4d43691c6.ee90b2544e691acc - 2472d38ea5ae8415.c66f4aa1553ea95f.22031b82a0eb679d.6ab5cc5fa15e15a9 -- 00000000f1f9d3a4.80000000e612d335.d69dfbf4d43691c6.ee90b2544e691acc -+ 0000000000000000.0000000000000000.d69dfbf4d43691c6.ee90b2544e691acc - fc4ba4a1a36b35be --VROUNDPS_256_0x0(mem) -+VROUNDPD_128_0x3(mem) - before - c9535bb2889ad34e.2274a7a1f8a74804.aa03f6a1f98c5910.8703ee4c79cf5c15 - 69403e9d82a1c9c6.e5c0300bcd03d2da.2504d32165c6abee.58359861bd18f20e -@@ -30694,10 +30694,10 @@ VROUNDPS_256_0x0(mem) - c9535bb2889ad34e.2274a7a1f8a74804.aa03f6a1f98c5910.8703ee4c79cf5c15 - 69403e9d82a1c9c6.e5c0300bcd03d2da.2504d32165c6abee.58359861bd18f20e - b8dcc94eaa89d452.4ffa71f03cad7229.218f5b32b21cf40b.63efbd7b0ca9406b -- c9535bb080000000.00000000f8a74804.80000000f98c5910.8000000079cf5c15 -+ 0000000000000000.0000000000000000.8000000000000000.8000000000000000 - 98256a6f38d9f200 - --VROUNDPS_256_0x1(reg) -+VROUNDPD_128_0x4(reg) - before - 793be8204e8ecf90.d454c8b1fa311759.8d620fdc5121e3e5.0c7258b2624d5ab0 - 0408d387debd5334.58c8343c5909c82c.182a64ba31022ca9.b362c6fbfc40ef91 -@@ -30708,9 +30708,9 @@ VROUNDPS_256_0x1(reg) - 793be8204e8ecf90.d454c8b1fa311759.8d620fdc5121e3e5.0c7258b2624d5ab0 - 0408d387debd5334.58c8343c5909c82c.182a64ba31022ca9.b362c6fbfc40ef91 - 95d7240e85f2bb97.fb1b373e58f37ec3.ba0e63c419627b96.4b0dcf84e77f6b60 -- 00000000debd5334.58c8343c5909c82c.0000000000000000.bf800000fc40ef91 -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - bebe9e052212067a --VROUNDPS_256_0x1(mem) -+VROUNDPD_128_0x4(mem) - before - 515e5dd6aa7f9e1d.39aeec31869b274b.0e92f852a42ee7ee.b75e4b0873d11a9f - 45e8a697f3670d5f.044e5ba41927a2f5.354dad3e299713db.ca612d1b1cf7e211 -@@ -30721,10 +30721,10 @@ VROUNDPS_256_0x1(mem) - 515e5dd6aa7f9e1d.39aeec31869b274b.0e92f852a42ee7ee.b75e4b0873d11a9f - 45e8a697f3670d5f.044e5ba41927a2f5.354dad3e299713db.ca612d1b1cf7e211 - 7627f6341ad80e6b.452122e731e9f10f.ec18e94fbd42343d.64b1a8093ecda05d -- 515e5dd6bf800000.00000000bf800000.00000000bf800000.bf80000073d11a9f -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - a1675a265cb6ec32 - --VROUNDPS_256_0x1(reg) -+VROUNDPD_128_0x4(reg) - before - fc65892d8fe1f313.fff797b27083b993.998fa493663cfb40.770dec958590430d - 4ee141bfabece07e.0f20e16cd7d5db07.64c358d2bae62db0.03d0a9a0f04aa9d4 -@@ -30735,9 +30735,9 @@ VROUNDPS_256_0x1(reg) - fc65892d8fe1f313.fff797b27083b993.998fa493663cfb40.770dec958590430d - 4ee141bfabece07e.0f20e16cd7d5db07.64c358d2bae62db0.03d0a9a0f04aa9d4 - f5257e484b63ee1e.cb2f22b18ce07ff5.1559539205f52340.8ed2df82da77f5c0 -- 4ee141bfbf800000.00000000d7d5db07.64c358d2bf800000.00000000f04aa9d4 -+ 0000000000000000.0000000000000000.64c358d2bae62db0.0000000000000000 - 10c6a3789d572ab5 --VROUNDPS_256_0x1(mem) -+VROUNDPD_128_0x4(mem) - before - c0502965ae238b17.ad3778f08ac160ae.bc2e75904d4d40f2.99de0f46ee744a6e - de4a18d7ae91c24d.789e2de75fc23bf7.a7b6800292c9d459.2464c812c4fbf365 -@@ -30748,10 +30748,10 @@ VROUNDPS_256_0x1(mem) - c0502965ae238b17.ad3778f08ac160ae.bc2e75904d4d40f2.99de0f46ee744a6e - de4a18d7ae91c24d.789e2de75fc23bf7.a7b6800292c9d459.2464c812c4fbf365 - 487febbbbaad8984.06fd5785295d2826.b05471b0952cdbe9.047eb80e0017502b -- c0800000bf800000.bf800000bf800000.bf8000004d4d40f2.bf800000ee744a6e -+ 0000000000000000.0000000000000000.8000000000000000.8000000000000000 - 38992d4b1c4014d6 - --VROUNDPS_256_0x1(reg) -+VROUNDPD_128_0x4(reg) - before - 4333ab633465f413.6cce2d8a6421b9a3.ded7fb660b9728e3.8802f67042dd323b - 1390505c234f78d0.df7f944d3a909ae3.e0e96d815b4cb2cb.10aa825a2542f954 -@@ -30762,9 +30762,9 @@ VROUNDPS_256_0x1(reg) - 4333ab633465f413.6cce2d8a6421b9a3.ded7fb660b9728e3.8802f67042dd323b - 1390505c234f78d0.df7f944d3a909ae3.e0e96d815b4cb2cb.10aa825a2542f954 - 06fc18a2838adcb8.0c9cd0328bdefcd4.162444f30fce3e47.2497e43035bf2347 -- 0000000000000000.df7f944d00000000.e0e96d815b4cb2cb.0000000000000000 -+ 0000000000000000.0000000000000000.e0e96d815b4cb2cb.0000000000000000 - 64741b514e328f6d --VROUNDPS_256_0x1(mem) -+VROUNDPD_128_0x4(mem) - before - 48fbe7738f4049f8.c13002c60d2532bb.0849b41111453278.8f44118c15624bb2 - 28f77a326d97560e.41901c7b6d9c9c2e.8e7254e57d767e83.89c1008c9e8d45f7 -@@ -30775,10 +30775,10 @@ VROUNDPS_256_0x1(mem) - 48fbe7738f4049f8.c13002c60d2532bb.0849b41111453278.8f44118c15624bb2 - 28f77a326d97560e.41901c7b6d9c9c2e.8e7254e57d767e83.89c1008c9e8d45f7 - e1365079054172da.542f492eaf94d67c.4036b98ad4b53aef.27974492fcb33083 -- 48fbe760bf800000.c140000000000000.0000000000000000.bf80000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.8000000000000000 - be7ebb64a522cb1a - --VROUNDPS_256_0x2(reg) -+VROUNDPD_256_0x0(reg) - before - 7027e7082983f37e.4fa9b04ed1c4c547.9f5acc3a4c3aaa5c.93c2bffab68ef697 - 36595863f10efcd7.bb7534b53db4753f.8f7e1b6cdefebc45.ee22589e77406d2d -@@ -30789,9 +30789,9 @@ VROUNDPS_256_0x2(reg) - 7027e7082983f37e.4fa9b04ed1c4c547.9f5acc3a4c3aaa5c.93c2bffab68ef697 - 36595863f10efcd7.bb7534b53db4753f.8f7e1b6cdefebc45.ee22589e77406d2d - 6c5f09e1995224d2.70b3ea54d328239d.81106d4bc3748dba.e34da5c3953144d2 -- 3f800000f10efcd7.800000003f800000.80000000defebc45.ee22589e77406d2d -+ 0000000000000000.8000000000000000.8000000000000000.ee22589e77406d2d - 0e384d4452fd0600 --VROUNDPS_256_0x2(mem) -+VROUNDPD_256_0x0(mem) - before - fc8f9f782af068e0.981a21f6fb2ebc5e.26b5ddebeace6c3e.dcb20ac0f4a45ef6 - f6e395decd521a80.45677f65eddfa545.de1112baa4177fd9.fc594d2e7876d716 -@@ -30802,10 +30802,10 @@ VROUNDPS_256_0x2(mem) - fc8f9f782af068e0.981a21f6fb2ebc5e.26b5ddebeace6c3e.dcb20ac0f4a45ef6 - f6e395decd521a80.45677f65eddfa545.de1112baa4177fd9.fc594d2e7876d716 - d6fdac62582fd90d.d3b90da82f789b7f.4f0e6972f714808a.8f9f84f9be2aff71 -- fc8f9f783f800000.80000000fb2ebc5e.3f800000eace6c3e.dcb20ac0f4a45ef6 -+ fc8f9f782af068e0.8000000000000000.0000000000000000.dcb20ac0f4a45ef6 - 7937bb5702644e8b - --VROUNDPS_256_0x2(reg) -+VROUNDPD_256_0x0(reg) - before - 8921b4c23804eda1.bbbb297493866e9c.fe9baf55158fa197.cc1f6d49db5d3fe0 - 7bdb8f39a0b52ca2.78f589da7c19bbf7.54c3b999f02529cd.90ca1340a3bf75dc -@@ -30816,9 +30816,9 @@ VROUNDPS_256_0x2(reg) - 8921b4c23804eda1.bbbb297493866e9c.fe9baf55158fa197.cc1f6d49db5d3fe0 - 7bdb8f39a0b52ca2.78f589da7c19bbf7.54c3b999f02529cd.90ca1340a3bf75dc - abaf4a2ad703473b.8c27f80fbd5705ee.fa21e5608cd3ae05.7d46cad0740689a0 -- 7bdb8f3980000000.78f589da7c19bbf7.54c3b999f02529cd.8000000080000000 -+ 7bdb8f39a0b52ca2.78f589da7c19bbf7.54c3b999f02529cd.8000000000000000 - 42e66168a3713e2a --VROUNDPS_256_0x2(mem) -+VROUNDPD_256_0x0(mem) - before - d2a0374839ad564a.35d74d2720a7ffe5.28a3f792b4018062.a5a9902676a5a22a - fb5c107048fd3ddf.47c48e0b6a15154d.69857fb8a3862837.626d07fefbe1886e -@@ -30829,10 +30829,10 @@ VROUNDPS_256_0x2(mem) - d2a0374839ad564a.35d74d2720a7ffe5.28a3f792b4018062.a5a9902676a5a22a - fb5c107048fd3ddf.47c48e0b6a15154d.69857fb8a3862837.626d07fefbe1886e - 98e667cded6eaf18.07fc9e18f350f6fc.718f085d5ae5bd58.e0969009b1645c65 -- d2a037483f800000.3f8000003f800000.3f80000080000000.8000000076a5a22a -+ d2a0374839ad564a.0000000000000000.0000000000000000.8000000000000000 - 8b45c5691e71be16 - --VROUNDPS_256_0x2(reg) -+VROUNDPD_256_0x0(reg) - before - 706469950e12c329.a3947fd166e02320.017b1b5d305f0ce2.464a09d18d629d31 - 85180fa59e2ba69e.c84f395273fa9d48.f35b806e1c4bb970.ca937a7842986041 -@@ -30843,9 +30843,9 @@ VROUNDPS_256_0x2(reg) - 706469950e12c329.a3947fd166e02320.017b1b5d305f0ce2.464a09d18d629d31 - 85180fa59e2ba69e.c84f395273fa9d48.f35b806e1c4bb970.ca937a7842986041 - 27adb1036a47a320.d10960b7866491c3.03b6a457b63422f6.8634db4d2ed8004d -- 8000000080000000.c84f394073fa9d48.f35b806e3f800000.ca937a78429a0000 -+ 8000000000000000.c84f395273fa9d48.f35b806e1c4bb970.ca937a7842986041 - 12ad5e311da8c60a --VROUNDPS_256_0x2(mem) -+VROUNDPD_256_0x0(mem) - before - 9b1e7819584f6414.7da9de5e28b9d9fd.04a5eadc2b59db60.ec0c1b66672d1599 - cb1672de3a31ceca.eaa8613152278bb0.e4204575f6fca8db.7e9f6562b556190e -@@ -30856,10 +30856,10 @@ VROUNDPS_256_0x2(mem) - 9b1e7819584f6414.7da9de5e28b9d9fd.04a5eadc2b59db60.ec0c1b66672d1599 - cb1672de3a31ceca.eaa8613152278bb0.e4204575f6fca8db.7e9f6562b556190e - 7d62c86ee059c259.53b9d00428c84721.1ac9fda23720df58.9ede5fe821acc82a -- 80000000584f6414.7da9de5e3f800000.3f8000003f800000.ec0c1b66672d1599 -+ 8000000000000000.7da9de5e28b9d9fd.0000000000000000.ec0c1b66672d1599 - f78b4f3fc6111a0a - --VROUNDPS_256_0x3(reg) -+VROUNDPD_256_0x1(reg) - before - e9913fe835373425.db26799be5ac33b1.8a3b675749d5cbeb.f4d4796888177e0a - d873cdcb34bbea97.3f36cc117eef28d1.0f4686b0cd580c9c.50ce35dad1045e97 -@@ -30870,9 +30870,9 @@ VROUNDPS_256_0x3(reg) - e9913fe835373425.db26799be5ac33b1.8a3b675749d5cbeb.f4d4796888177e0a - d873cdcb34bbea97.3f36cc117eef28d1.0f4686b0cd580c9c.50ce35dad1045e97 - 227bf6525c27780e.95ca6b0149a9977b.009282b76d3f47bb.72273e8fffa199d6 -- d873cdcb00000000.000000007eef28d1.00000000cd580c9c.50ce35dad1045e97 -+ d873cdcb34bbea97.0000000000000000.0000000000000000.50ce35dad1045e97 - 74212c767c1b0e1d --VROUNDPS_256_0x3(mem) -+VROUNDPD_256_0x1(mem) - before - 0c5a08800311c07c.33310b009ded0bb5.8bac7effeaafcd17.961b0383736799f2 - d922227edfe7be3e.b276eeffee5e883e.e294eae5f8130e62.f3f17f1f10bf2862 -@@ -30883,10 +30883,10 @@ VROUNDPS_256_0x3(mem) - 0c5a08800311c07c.33310b009ded0bb5.8bac7effeaafcd17.961b0383736799f2 - d922227edfe7be3e.b276eeffee5e883e.e294eae5f8130e62.f3f17f1f10bf2862 - b743f75b2daac28e.fc115d52d8e9cd7b.9c2e92f6aa1eb7e6.2c38c81b3aaba2ef -- 0000000000000000.0000000080000000.80000000eaafcd17.80000000736799f2 -+ 0000000000000000.0000000000000000.bff0000000000000.bff0000000000000 - a248b3e0a36e4213 - --VROUNDPS_256_0x3(reg) -+VROUNDPD_256_0x1(reg) - before - 96aa4c811a5ce001.17c3bf678c24ce8b.5c7ecba9ed799ebf.aab0864567573347 - d7aca2318e0d58bd.50baaa6ed6f34e8f.2ce6c3844f98a11e.b52ecb5bab9d7f7c -@@ -30897,9 +30897,9 @@ VROUNDPS_256_0x3(reg) - 96aa4c811a5ce001.17c3bf678c24ce8b.5c7ecba9ed799ebf.aab0864567573347 - d7aca2318e0d58bd.50baaa6ed6f34e8f.2ce6c3844f98a11e.b52ecb5bab9d7f7c - c09bb15c9a0ee6f2.0a3b3f0402dfc5d2.35d53764bbff5de1.93913c4c02b9239a -- d7aca23180000000.50baaa6ed6f34e8f.000000004f98a11e.8000000080000000 -+ d7aca2318e0d58bd.50baaa6ed6f34e8f.0000000000000000.bff0000000000000 - 3931926c5ba46540 --VROUNDPS_256_0x3(mem) -+VROUNDPD_256_0x1(mem) - before - b8077073958c7b20.f970ecd3ec2e3479.710a59916d3c87c4.65787fe424dbeb42 - 7af169045279da98.02ed0ff86a656b24.d7f1d55fe5c54aca.45c44c5b58663638 -@@ -30910,10 +30910,10 @@ VROUNDPS_256_0x3(mem) - b8077073958c7b20.f970ecd3ec2e3479.710a59916d3c87c4.65787fe424dbeb42 - 7af169045279da98.02ed0ff86a656b24.d7f1d55fe5c54aca.45c44c5b58663638 - 5bbafb0bae793ed5.2388db47f01ba7f7.2d91eb6eae9af4bf.cec68487066b2942 -- 8000000080000000.f970ecd3ec2e3479.710a59916d3c87c4.65787fe400000000 -+ bff0000000000000.f970ecd3ec2e3479.710a59916d3c87c4.65787fe424dbeb42 - 4e2026b04211f53f - --VROUNDPS_256_0x3(reg) -+VROUNDPD_256_0x1(reg) - before - fd0f888308ca468b.ea1dd82bb6e0034d.1c435f18863622cc.1c2ed7fba65aeb26 - c6e545bcb82d309b.504e1a1d995fdde0.adfc0f70cdb2d824.6dc4a4520b5cb1ee -@@ -30924,9 +30924,9 @@ VROUNDPS_256_0x3(reg) - fd0f888308ca468b.ea1dd82bb6e0034d.1c435f18863622cc.1c2ed7fba65aeb26 - c6e545bcb82d309b.504e1a1d995fdde0.adfc0f70cdb2d824.6dc4a4520b5cb1ee - 05ee59c6efc5ed1b.448fe5348c20ace7.c50258a48ddd8456.1e44fb9933db4e56 -- c6e5440080000000.504e1a1d80000000.80000000cdb2d824.6dc4a45200000000 -+ c6e545bcb82d309b.504e1a1d995fdde0.bff0000000000000.6dc4a4520b5cb1ee - 153038a7367dfbb1 --VROUNDPS_256_0x3(mem) -+VROUNDPD_256_0x1(mem) - before - 1235164749b984fc.55c877fd60c4d218.4b7003860f9a1704.fe24a64de773adf7 - e0546e868ea1d496.1e317902d24472ee.15a94f98d86a2b71.d6d9a39ab8f4a1be -@@ -30937,10 +30937,10 @@ VROUNDPS_256_0x3(mem) - 1235164749b984fc.55c877fd60c4d218.4b7003860f9a1704.fe24a64de773adf7 - e0546e868ea1d496.1e317902d24472ee.15a94f98d86a2b71.d6d9a39ab8f4a1be - 5a59bc512141a6ab.cdfdc2893b29d6e4.de21137f20ad2502.a70a297372557c0e -- 0000000049b984f8.55c877fd60c4d218.4b70038600000000.fe24a64de773adf7 -+ 0000000000000000.55c877fd60c4d218.4b7003860f9a1704.fe24a64de773adf7 - a013c1750fe5d2fc - --VROUNDPS_256_0x4(reg) -+VROUNDPD_256_0x2(reg) - before - 8083ca762a2cc6f1.c7442c3d9fdbc3f4.4cee1ac95f53d9de.dc01f3829fb9b644 - c89f4db39e829020.71c24534c2ec8580.d5ab215a53b1f03b.ca0107740e9bc54b -@@ -30951,9 +30951,9 @@ VROUNDPS_256_0x4(reg) - 8083ca762a2cc6f1.c7442c3d9fdbc3f4.4cee1ac95f53d9de.dc01f3829fb9b644 - c89f4db39e829020.71c24534c2ec8580.d5ab215a53b1f03b.ca0107740e9bc54b - d4b5459606746b35.37564468a2e6ba37.b4fa5f1daea3bb67.267184ec6c1faa27 -- c89f4dc080000000.71c24534c2ec0000.d5ab215a53b1f03b.ca01077400000000 -+ c89f4db39e829020.71c24534c2ec8580.d5ab215a53b1f03b.ca0107740e9bc54b - 9dd0a51f673ee00d --VROUNDPS_256_0x4(mem) -+VROUNDPD_256_0x2(mem) - before - 6e5743b13cf1ab6f.a9fa8503245a46be.8bf0e5340bc26dd4.e38271e606785cde - 1f7e387a70773a56.29c2c5641265bf8c.d18e7fa4ccbd6213.ec523cc43c73aa81 -@@ -30964,10 +30964,10 @@ VROUNDPS_256_0x4(mem) - 6e5743b13cf1ab6f.a9fa8503245a46be.8bf0e5340bc26dd4.e38271e606785cde - 1f7e387a70773a56.29c2c5641265bf8c.d18e7fa4ccbd6213.ec523cc43c73aa81 - 8a11026520db4aed.ddb36a1c643c39ee.a371ef00bbd0ba2c.bbe52f8349339ca4 -- 6e5743b100000000.8000000000000000.8000000000000000.e38271e600000000 -+ 6e5743b13cf1ab6f.8000000000000000.8000000000000000.e38271e606785cde - 1a837a5455325a17 - --VROUNDPS_256_0x4(reg) -+VROUNDPD_256_0x2(reg) - before - 6227cb3e8c8a9fc1.02aa0251616ddcdd.513fd442a57c2225.5f3a412d906f829f - e1bd33ba0bd8789a.c749302a2bb4d68e.c9739087cdfe0950.01b71cd6af136a50 -@@ -30978,9 +30978,9 @@ VROUNDPS_256_0x4(reg) - 6227cb3e8c8a9fc1.02aa0251616ddcdd.513fd442a57c2225.5f3a412d906f829f - e1bd33ba0bd8789a.c749302a2bb4d68e.c9739087cdfe0950.01b71cd6af136a50 - f192ae326ba6204e.b68323d5e109409f.e5ffa2d4c97ae2c2.9faabd1a6b00a58c -- e1bd33ba00000000.c749300000000000.c9739080cdfe0950.0000000080000000 -+ e1bd33ba0bd8789a.c749302a2bb4d68e.c9739087cdfe0950.3ff0000000000000 - 432142282ce20353 --VROUNDPS_256_0x4(mem) -+VROUNDPD_256_0x2(mem) - before - 003d1dc968ef9e36.3829cdcb44f7d0fa.85fb44517e0e5894.7952b532ae955925 - 2affafb5b2757c54.27826ac2f4924f49.1ed16cfb9ed77dcf.a9b0af1cd04b6f6f -@@ -30991,10 +30991,10 @@ VROUNDPS_256_0x4(mem) - 003d1dc968ef9e36.3829cdcb44f7d0fa.85fb44517e0e5894.7952b532ae955925 - 2affafb5b2757c54.27826ac2f4924f49.1ed16cfb9ed77dcf.a9b0af1cd04b6f6f - 9d3473db267f58d9.174b0a67f7de8e24.5172472619dd021b.ed98eebd352d67ae -- 0000000068ef9e36.0000000044f7e000.800000007e0e5894.7952b53280000000 -+ 3ff0000000000000.3ff0000000000000.8000000000000000.7952b532ae955925 - 21322bd43fa3ecbe - --VROUNDPS_256_0x4(reg) -+VROUNDPD_256_0x2(reg) - before - c87c21221a4ff1e6.cf21827df951fdc6.6e58436863ba3c2c.f8490bb492d52094 - f47f4dd7aa56c7b4.4573c4d291303e86.8c35d59d056222b2.2517ebedc8df301a -@@ -31005,9 +31005,9 @@ VROUNDPS_256_0x4(reg) - c87c21221a4ff1e6.cf21827df951fdc6.6e58436863ba3c2c.f8490bb492d52094 - f47f4dd7aa56c7b4.4573c4d291303e86.8c35d59d056222b2.2517ebedc8df301a - 0087aa5f8a44acd4.74662910c3c46d5d.1cb1592e6aebb873.5ce06f59c9579060 -- f47f4dd780000000.4573c00080000000.8000000000000000.00000000c8df3020 -+ f47f4dd7aa56c7b4.4573c4d291303e86.8000000000000000.3ff0000000000000 - 5b9554779ec133de --VROUNDPS_256_0x4(mem) -+VROUNDPD_256_0x2(mem) - before - db1aad01aaccee6e.27d5e799ac078eb8.6d634af3623888ff.03b62c18ead2e358 - d6ca9a6ef176e96f.fbb3c02325f403d4.ef04fd710830ec22.11d673483e48f1d4 -@@ -31018,10 +31018,10 @@ VROUNDPS_256_0x4(mem) - db1aad01aaccee6e.27d5e799ac078eb8.6d634af3623888ff.03b62c18ead2e358 - d6ca9a6ef176e96f.fbb3c02325f403d4.ef04fd710830ec22.11d673483e48f1d4 - 287298a88fc9e10c.1ec6b92f5ff877f2.9a77c386b70d2e0b.01c59c86c4ce9d3c -- db1aad0180000000.0000000080000000.6d634af3623888ff.00000000ead2e358 -+ db1aad01aaccee6e.3ff0000000000000.6d634af3623888ff.3ff0000000000000 - f74089d9d840c67e - --VROUNDPD_128_0x0(reg) -+VROUNDPD_256_0x3(reg) - before - b56445c59e43bab0.41dab337439fb8cc.c5bb0082857646e3.db02752aa2a43ee2 - c587d36f06873e7e.bf32c964903a0e47.013546a0a8081b0d.29b25a9016768527 -@@ -31032,9 +31032,9 @@ VROUNDPD_128_0x0(reg) - b56445c59e43bab0.41dab337439fb8cc.c5bb0082857646e3.db02752aa2a43ee2 - c587d36f06873e7e.bf32c964903a0e47.013546a0a8081b0d.29b25a9016768527 - 83f43143ad988e94.05b2df0ea4af510f.fc139cf1fce1ddea.1064403e035d9ae3 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ c587d36f06873e7e.8000000000000000.0000000000000000.0000000000000000 - 18fe0423ba96206e --VROUNDPD_128_0x0(mem) -+VROUNDPD_256_0x3(mem) - before - f27eda32bc020a96.79e04a1426538046.5659fd8e93588d34.a32f6ddda59a1a67 - d530a138a7b1b2e4.68f6fdeb30159b3a.1918fb3ba6a4fee9.0704df4f33910e60 -@@ -31045,10 +31045,10 @@ VROUNDPD_128_0x0(mem) - f27eda32bc020a96.79e04a1426538046.5659fd8e93588d34.a32f6ddda59a1a67 - d530a138a7b1b2e4.68f6fdeb30159b3a.1918fb3ba6a4fee9.0704df4f33910e60 - 9cdfd72397b1d484.7686709ae8d37126.122feb16f1fa4c9b.9a6e53a46100dfbb -- 0000000000000000.0000000000000000.5659fd8e93588d34.8000000000000000 -+ f27eda32bc020a96.79e04a1426538046.5659fd8e93588d34.8000000000000000 - c0302da90e730a45 - --VROUNDPD_128_0x0(reg) -+VROUNDPD_256_0x3(reg) - before - 0c218c2fc590dccc.4b677d54f9d27a6e.5c498234d5794195.1b948a079cf66ea5 - f7d6dd498c547c65.e9d8e673a20b750e.ec121bf74178b270.e17b31f434b4ba54 -@@ -31059,9 +31059,9 @@ VROUNDPD_128_0x0(reg) - 0c218c2fc590dccc.4b677d54f9d27a6e.5c498234d5794195.1b948a079cf66ea5 - f7d6dd498c547c65.e9d8e673a20b750e.ec121bf74178b270.e17b31f434b4ba54 - de9c1a62014b25bc.dd77ac26c0c5dab1.09866243cba4d0f2.4fe9b9bf74abd2b1 -- 0000000000000000.0000000000000000.ec121bf74178b270.e17b31f434b4ba54 -+ f7d6dd498c547c65.e9d8e673a20b750e.ec121bf74178b270.e17b31f434b4ba54 - 8f8d5aa15b7a5a1f --VROUNDPD_128_0x0(mem) -+VROUNDPD_256_0x3(mem) - before - 195b6b8e3a694189.108b4d415e048652.336e44f9cde9d5af.5f9fef26abb5fd9d - bbe14c0a30c2e450.134c3adf80ddb5e9.4d5f0df0f46be362.4edc2c9539b1861f -@@ -31075,7 +31075,7 @@ VROUNDPD_128_0x0(mem) - 0000000000000000.0000000000000000.0000000000000000.5f9fef26abb5fd9d - 81e38ee9aa06b55f - --VROUNDPD_128_0x0(reg) -+VROUNDPD_256_0x3(reg) - before - 905330c519bf1547.c1b9a80ab7c39387.15432185ffed0bf1.ab932e1e39451d5a - 0ece628987060036.5617a1f7233e8278.efcf6b673b9c8947.01c219ae9ed0fde0 -@@ -31086,9 +31086,9 @@ VROUNDPD_128_0x0(reg) - 905330c519bf1547.c1b9a80ab7c39387.15432185ffed0bf1.ab932e1e39451d5a - 0ece628987060036.5617a1f7233e8278.efcf6b673b9c8947.01c219ae9ed0fde0 - 55a01ea39066b2d9.4f28d70d325ed9a2.a6cc83a903def0ba.8c804132583d29c7 -- 0000000000000000.0000000000000000.efcf6b673b9c8947.0000000000000000 -+ 0000000000000000.5617a1f7233e8278.efcf6b673b9c8947.0000000000000000 - b2d43cc63de64f6f --VROUNDPD_128_0x0(mem) -+VROUNDPD_256_0x3(mem) - before - 040407aea03bc386.b2782886e1a35fe9.d895e868abc3b14f.184809f9a84d6caa - fbf0013ac8a171b1.7f176f276197d1ae.218abb844d1fab2b.8b5f70e0bd91f97e -@@ -31099,10 +31099,10 @@ VROUNDPD_128_0x0(mem) - 040407aea03bc386.b2782886e1a35fe9.d895e868abc3b14f.184809f9a84d6caa - fbf0013ac8a171b1.7f176f276197d1ae.218abb844d1fab2b.8b5f70e0bd91f97e - 7367a456d122161a.863c30cdebd5fad7.3d62b97b0251fdef.4a1794d6cf985f20 -- 0000000000000000.0000000000000000.d895e868abc3b14f.0000000000000000 -+ 0000000000000000.8000000000000000.d895e868abc3b14f.0000000000000000 - 1b9b04a05821a97c - --VROUNDPD_128_0x1(reg) -+VROUNDPD_256_0x4(reg) - before - e6fd484b07bb048e.5722daeff9ab3457.b34b14d8905c6504.5fee2ca717699be0 - 6d3139b52348291f.7aff64434eca2584.90cc2f16e2be1e60.1c3a97b4af665f66 -@@ -31113,9 +31113,9 @@ VROUNDPD_128_0x1(reg) - e6fd484b07bb048e.5722daeff9ab3457.b34b14d8905c6504.5fee2ca717699be0 - 6d3139b52348291f.7aff64434eca2584.90cc2f16e2be1e60.1c3a97b4af665f66 - 0b81d34b475454d8.8e9588d8f635fd9f.1705b508ae997ecf.1c9a1f4bca6a6c85 -- 0000000000000000.0000000000000000.bff0000000000000.0000000000000000 -+ 6d3139b52348291f.7aff64434eca2584.8000000000000000.0000000000000000 - 55c573c7fbb4503b --VROUNDPD_128_0x1(mem) -+VROUNDPD_256_0x4(mem) - before - 4628378548129f2b.01a9f3a7191aab78.f91f9071a9215051.94caf3bc26eb2699 - eacf087c89a72764.0f187146feed4fb7.08aa6b4eedb94440.41f0a3560a7ae64b -@@ -31126,10 +31126,10 @@ VROUNDPD_128_0x1(mem) - 4628378548129f2b.01a9f3a7191aab78.f91f9071a9215051.94caf3bc26eb2699 - eacf087c89a72764.0f187146feed4fb7.08aa6b4eedb94440.41f0a3560a7ae64b - 1d86619ada7fa411.a6d488c05c6ee8cf.7820d01bf2ce0fcd.08fcae55d8b33dc1 -- 0000000000000000.0000000000000000.f91f9071a9215051.bff0000000000000 -+ 4628378548129f2b.0000000000000000.f91f9071a9215051.8000000000000000 - 54f8c632a450a3a7 - --VROUNDPD_128_0x1(reg) -+VROUNDPD_256_0x4(reg) - before - 9180cae8dacc2a70.9f539bf719246b7a.db6272f5f2afed3c.eaf82936b19c1874 - 58201ab36a2238ac.a702750f400b2d8d.31cc3d886187d0e9.a5f3155ba36ecfe6 -@@ -31140,9 +31140,9 @@ VROUNDPD_128_0x1(reg) - 9180cae8dacc2a70.9f539bf719246b7a.db6272f5f2afed3c.eaf82936b19c1874 - 58201ab36a2238ac.a702750f400b2d8d.31cc3d886187d0e9.a5f3155ba36ecfe6 - 0422b1fff1dd0a08.aef0c6fde763d5c5.7fb491a6b93e991f.31087b20c6ec4da6 -- 0000000000000000.0000000000000000.0000000000000000.bff0000000000000 -+ 58201ab36a2238ac.8000000000000000.0000000000000000.8000000000000000 - 2bb0a63b101d8cc1 --VROUNDPD_128_0x1(mem) -+VROUNDPD_256_0x4(mem) - before - 52da626970e8c675.807fa5cb51b3e9ce.28bcc20b229cc252.7429c534927acbd9 - ba4e89e7718fb627.0771fa2363e66e91.54326503ef937f00.d24e9d7c4b17adb4 -@@ -31153,10 +31153,10 @@ VROUNDPD_128_0x1(mem) - 52da626970e8c675.807fa5cb51b3e9ce.28bcc20b229cc252.7429c534927acbd9 - ba4e89e7718fb627.0771fa2363e66e91.54326503ef937f00.d24e9d7c4b17adb4 - 3ed897a02f1f1904.e4f786acdcafa723.ef186f81ab2d1282.9921edfe5dc364c9 -- 0000000000000000.0000000000000000.0000000000000000.7429c534927acbd9 -+ 52da626970e8c675.8000000000000000.0000000000000000.7429c534927acbd9 - cdfdeb65fa7a4450 - --VROUNDPD_128_0x1(reg) -+VROUNDPD_256_0x4(reg) - before - f39e8f21bd9ce519.0e5e5478552828ee.0fea340070302366.e163adc06279a4b4 - f21c9dc849fe4bcc.12f2fb6ef4b84b53.16f04da4c401df6f.f060d85994421dbc -@@ -31167,9 +31167,9 @@ VROUNDPD_128_0x1(reg) - f39e8f21bd9ce519.0e5e5478552828ee.0fea340070302366.e163adc06279a4b4 - f21c9dc849fe4bcc.12f2fb6ef4b84b53.16f04da4c401df6f.f060d85994421dbc - 24c310c6392bb315.a2cb7951c061d192.e2b98e29ee963ff7.dffd5c2726dd5a48 -- 0000000000000000.0000000000000000.0000000000000000.f060d85994421dbc -+ f21c9dc849fe4bcc.0000000000000000.0000000000000000.f060d85994421dbc - c9475b17d9bb129f --VROUNDPD_128_0x1(mem) -+VROUNDPD_256_0x4(mem) - before - 7c8bd010321506c1.94bb1677b6177818.da80e889512df550.3ec476873742da37 - 7fa08cef5a72ae18.8aa4a0037cee4e29.3af3d1b84e670b27.849d14378c708d47 -@@ -31180,10 +31180,10 @@ VROUNDPD_128_0x1(mem) - 7c8bd010321506c1.94bb1677b6177818.da80e889512df550.3ec476873742da37 - 7fa08cef5a72ae18.8aa4a0037cee4e29.3af3d1b84e670b27.849d14378c708d47 - ac500ca06dddc6d0.24e6809516c11580.96dc8082e8e97489.0169ca782893d385 -- 0000000000000000.0000000000000000.da80e889512df550.0000000000000000 -+ 7c8bd010321506c1.8000000000000000.da80e889512df550.0000000000000000 - 0c0b6b5fa4ea0b42 - --VROUNDPD_128_0x2(reg) -+VROUNDSS_0x0(reg) - before - 52774fdbbc357518.f8b44a29c60f3a10.b4a53080378868b0.b63f209c65f72e9c - 3e0739998aa663cd.ce00ffd844ed0df1.62baf7aff7946ce0.31510ac3809bf7a6 -@@ -31194,9 +31194,9 @@ VROUNDPD_128_0x2(reg) - 52774fdbbc357518.f8b44a29c60f3a10.b4a53080378868b0.b63f209c65f72e9c - 3e0739998aa663cd.ce00ffd844ed0df1.62baf7aff7946ce0.31510ac3809bf7a6 - 2d052704abc8100e.3f1869091e0940e3.23580496facc5105.1909aa36a8b703ea -- 0000000000000000.0000000000000000.62baf7aff7946ce0.3ff0000000000000 -+ 0000000000000000.0000000000000000.23580496facc5105.1909aa3680000000 - a19bfcb09087d2d1 --VROUNDPD_128_0x2(mem) -+VROUNDSS_0x0(mem) - before - f80da78f89540ecd.7f7ffc91535099e2.62da48a3532dbaa9.535ddd393feeb2e1 - 2c55f76affc97db4.9c92dc8b13ceeece.cd1eb6e2e64d78d4.795da2cdb9efa5ef -@@ -31207,10 +31207,10 @@ VROUNDPD_128_0x2(mem) - f80da78f89540ecd.7f7ffc91535099e2.62da48a3532dbaa9.535ddd393feeb2e1 - 2c55f76affc97db4.9c92dc8b13ceeece.cd1eb6e2e64d78d4.795da2cdb9efa5ef - 193e6a2e0ef3dab1.2a44afe3962df2f5.425dc95446db86c1.23169bc9e64d6aa3 -- 0000000000000000.0000000000000000.62da48a3532dbaa9.535ddd393feeb2e1 -+ 0000000000000000.0000000000000000.23580496facc5105.1909aa3640000000 - 72e31ea4cf4958ac - --VROUNDPD_128_0x2(reg) -+VROUNDSS_0x0(reg) - before - d08e9f5dc200fa59.8e27a71d6a93519e.0cb41e5852c0f9a6.bdfeca7ed672858b - 2123462cda435e5b.cebe6821ed22e3e7.180bb24fc40b7488.7bf9b10f4093eec1 -@@ -31221,9 +31221,9 @@ VROUNDPD_128_0x2(reg) - d08e9f5dc200fa59.8e27a71d6a93519e.0cb41e5852c0f9a6.bdfeca7ed672858b - 2123462cda435e5b.cebe6821ed22e3e7.180bb24fc40b7488.7bf9b10f4093eec1 - c3ec0d7fb29dbf5f.37273cbc7b9553f7.06302a5368688f56.b41f2c81e5529767 -- 0000000000000000.0000000000000000.3ff0000000000000.7bf9b10f4093eec1 -+ 0000000000000000.0000000000000000.06302a5368688f56.b41f2c8140a00000 - 0720cfbc52db9cb6 --VROUNDPD_128_0x2(mem) -+VROUNDSS_0x0(mem) - before - d991ef5c51be70b7.664df15e14c76b1c.f49e0a6c2258bf19.f817b331b8869464 - 965f938ffc6e74d8.1f7c04c2d5ae2d2c.0044fd5873c03484.b471bce49c5ef6fc -@@ -31234,10 +31234,10 @@ VROUNDPD_128_0x2(mem) - d991ef5c51be70b7.664df15e14c76b1c.f49e0a6c2258bf19.f817b331b8869464 - 965f938ffc6e74d8.1f7c04c2d5ae2d2c.0044fd5873c03484.b471bce49c5ef6fc - 1955373f6ff96545.99112859c7deddee.a5ecf18d3f3c7766.c2c998542278e830 -- 0000000000000000.0000000000000000.f49e0a6c2258bf19.f817b331b8869464 -+ 0000000000000000.0000000000000000.06302a5368688f56.b41f2c8180000000 - 44a7bb1b86a16a1b - --VROUNDPD_128_0x2(reg) -+VROUNDSS_0x0(reg) - before - 70c4f94b9cc7732a.e6e870cb1acefdb6.3c9895d0ac42f738.2972d17db1a2593d - 5e10fae7c45efc84.e71dfd7e8b301c11.1d23d689d890d817.c1e8b41291a3718b -@@ -31248,9 +31248,9 @@ VROUNDPD_128_0x2(reg) - 70c4f94b9cc7732a.e6e870cb1acefdb6.3c9895d0ac42f738.2972d17db1a2593d - 5e10fae7c45efc84.e71dfd7e8b301c11.1d23d689d890d817.c1e8b41291a3718b - 6ad7bb5d9af340d6.1eaa7a5f339d1869.2e431724a3549758.62908a9e5ae947ff -- 0000000000000000.0000000000000000.3ff0000000000000.c1e8b41291a00000 -+ 0000000000000000.0000000000000000.2e431724a3549758.62908a9e80000000 - 2ea4fc5019711f0b --VROUNDPD_128_0x2(mem) -+VROUNDSS_0x0(mem) - before - 12a9904c46cc99fb.4b056a83c345ec11.a3fb355c9ac596bf.51728eb48c749eae - 6e1006f1cd9bc2c2.d904500c4d1acc52.a7586b4f91989015.1a18bb81e2e65e1b -@@ -31261,10 +31261,10 @@ VROUNDPD_128_0x2(mem) - 12a9904c46cc99fb.4b056a83c345ec11.a3fb355c9ac596bf.51728eb48c749eae - 6e1006f1cd9bc2c2.d904500c4d1acc52.a7586b4f91989015.1a18bb81e2e65e1b - 20a5db2ac9ea558b.f5afe51ef51c573a.533c81212fa65617.8483d9e14700ec9a -- 0000000000000000.0000000000000000.8000000000000000.51728eb48c749eae -+ 0000000000000000.0000000000000000.2e431724a3549758.62908a9e80000000 - a6d9d90ab45a617d - --VROUNDPD_128_0x3(reg) -+VROUNDSS_0x1(reg) - before - 175ab3abf3b3c039.f2888f09933aacd5.46340e8d11d861b1.0fcd3e0ed2a03ad1 - 98d16f8fb3e2ddb6.cb6f66869852e8ad.34a699c2bdab5798.d710dc020ea5cfe1 -@@ -31275,9 +31275,9 @@ VROUNDPD_128_0x3(reg) - 175ab3abf3b3c039.f2888f09933aacd5.46340e8d11d861b1.0fcd3e0ed2a03ad1 - 98d16f8fb3e2ddb6.cb6f66869852e8ad.34a699c2bdab5798.d710dc020ea5cfe1 - 858907228f75f4a1.68b38c47821b7f39.1ff4c330f7dae9d7.b70c4b836214204e -- 0000000000000000.0000000000000000.0000000000000000.d710dc020ea5cfe1 -+ 0000000000000000.0000000000000000.1ff4c330f7dae9d7.b70c4b8300000000 - 2b5b8ae1c161eaed --VROUNDPD_128_0x3(mem) -+VROUNDSS_0x1(mem) - before - 774651960357d978.13eabf060cf4fe70.6285b14677eeac18.6050e6688781d10b - 4a1ad988cde8760f.6c2cd82fe6f969ac.76aaa95cb910bac3.6ef6d60915119e59 -@@ -31288,10 +31288,10 @@ VROUNDPD_128_0x3(mem) - 774651960357d978.13eabf060cf4fe70.6285b14677eeac18.6050e6688781d10b - 4a1ad988cde8760f.6c2cd82fe6f969ac.76aaa95cb910bac3.6ef6d60915119e59 - 81a19da43b1f7bde.a1dfbdb64c91bf05.bf5ee066521214d1.e9a75594a12ef7ae -- 0000000000000000.0000000000000000.6285b14677eeac18.6050e6688781d10b -+ 0000000000000000.0000000000000000.1ff4c330f7dae9d7.b70c4b83bf800000 - 9a59f11425403c1f - --VROUNDPD_128_0x3(reg) -+VROUNDSS_0x1(reg) - before - 87f306e2554da093.86faca0b70afafd8.0fc7df932dab17c1.619ef706f2e796c4 - 53c79a49f31780be.0d652a2e70215759.009514c0e046917b.71c4d07433d23802 -@@ -31302,9 +31302,9 @@ VROUNDPD_128_0x3(reg) - 87f306e2554da093.86faca0b70afafd8.0fc7df932dab17c1.619ef706f2e796c4 - 53c79a49f31780be.0d652a2e70215759.009514c0e046917b.71c4d07433d23802 - 5822a9b59b2b184d.68b3b72a836a57c3.3c0306fc90a3e503.26a6d78639ce1452 -- 0000000000000000.0000000000000000.0000000000000000.71c4d07433d23802 -+ 0000000000000000.0000000000000000.3c0306fc90a3e503.26a6d78600000000 - f0d6614705266cda --VROUNDPD_128_0x3(mem) -+VROUNDSS_0x1(mem) - before - bcbadacd049b616a.819d294d7c5e5e46.052b456254ad5101.0af2125155d80b2b - 9d8d73a7384f80bd.5c559250ec968508.00ed3f7549c0c32d.530b2443a2c85423 -@@ -31315,10 +31315,10 @@ VROUNDPD_128_0x3(mem) - bcbadacd049b616a.819d294d7c5e5e46.052b456254ad5101.0af2125155d80b2b - 9d8d73a7384f80bd.5c559250ec968508.00ed3f7549c0c32d.530b2443a2c85423 - 6f19a5c2bd5186fe.e1c36609d64754dd.3ec35512c3da7ef1.57f5e3f35caa6899 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.3c0306fc90a3e503.26a6d78655d80b2b - 056a5941847adbae - --VROUNDPD_128_0x3(reg) -+VROUNDSS_0x1(reg) - before - 658e08b72b7fb3a5.568fc8682c6835fc.59f540498a45d873.f3dac59aaf50bef4 - f2b3549cafa745ca.2310b1ca4e975711.04503ea98caa058b.22b3175e5bc5bb8a -@@ -31329,9 +31329,9 @@ VROUNDPD_128_0x3(reg) - 658e08b72b7fb3a5.568fc8682c6835fc.59f540498a45d873.f3dac59aaf50bef4 - f2b3549cafa745ca.2310b1ca4e975711.04503ea98caa058b.22b3175e5bc5bb8a - 0625395cab7fcdc8.517c241d314150c5.c992976e78b8cb67.04d0765bfa70f169 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.c992976e78b8cb67.04d0765b5bc5bb8a - 510648b48299f7b0 --VROUNDPD_128_0x3(mem) -+VROUNDSS_0x1(mem) - before - 73b6b3e8a42f3f70.3720bf1d7c6cae01.3f409a44ac3bb5b8.11fa4bd680010d19 - b9db1a06292baf2a.0c4057f68a9a7e94.b83193ef7ca39a4f.4cb99e53d4540148 -@@ -31342,10 +31342,10 @@ VROUNDPD_128_0x3(mem) - 73b6b3e8a42f3f70.3720bf1d7c6cae01.3f409a44ac3bb5b8.11fa4bd680010d19 - b9db1a06292baf2a.0c4057f68a9a7e94.b83193ef7ca39a4f.4cb99e53d4540148 - fe3ffafa2d9a0507.d8dd795a80a735b0.023c083a7db74635.118e3ce482807dea -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.c992976e78b8cb67.04d0765bbf800000 - a9ad49f65e93fd39 - --VROUNDPD_128_0x4(reg) -+VROUNDSS_0x2(reg) - before - 348fb14ec393783e.f4f7121424fe4ee1.c9be4974958f4336.78d04e618414e19d - b8b8536cf39c6b67.5ee343124f0cb934.a59aef01ec8213f7.5df01915c1754977 -@@ -31356,9 +31356,9 @@ VROUNDPD_128_0x4(reg) - 348fb14ec393783e.f4f7121424fe4ee1.c9be4974958f4336.78d04e618414e19d - b8b8536cf39c6b67.5ee343124f0cb934.a59aef01ec8213f7.5df01915c1754977 - 93732dba8a3b125f.373fdb9669bcfa5c.e9230eca9c84b9f2.835a4e19a0b3674f -- 0000000000000000.0000000000000000.8000000000000000.5df01915c1754977 -+ 0000000000000000.0000000000000000.e9230eca9c84b9f2.835a4e19c1700000 - 013ce7c0b3f2b8ab --VROUNDPD_128_0x4(mem) -+VROUNDSS_0x2(mem) - before - 124c423c1e0d6387.bbd3779b5a686b6e.a57635e1dc33e8da.1a6aa7bd75e77545 - d3d6f8b99b34b412.bf0fdf05cc0e95dd.f2e9ee806d120f88.bec11abfd65f03f4 -@@ -31369,10 +31369,10 @@ VROUNDPD_128_0x4(mem) - 124c423c1e0d6387.bbd3779b5a686b6e.a57635e1dc33e8da.1a6aa7bd75e77545 - d3d6f8b99b34b412.bf0fdf05cc0e95dd.f2e9ee806d120f88.bec11abfd65f03f4 - 22a5842145736877.8a0e6e50147a63cb.1ffc00545dc3fabb.3af5f5ac0017588d -- 0000000000000000.0000000000000000.8000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.e9230eca9c84b9f2.835a4e1975e77545 - 2a24d9f71c74412d - --VROUNDPD_128_0x4(reg) -+VROUNDSS_0x2(reg) - before - 56b6d82d47324f8b.d5460f66926ae882.e184f13998d2d9d7.85321b50cbcd0e5d - ca5631ffab5f1282.f3af061a6d3a2c7f.2694ddb00cd6fa4c.76ec1d4f823eb026 -@@ -31383,9 +31383,9 @@ VROUNDPD_128_0x4(reg) - 56b6d82d47324f8b.d5460f66926ae882.e184f13998d2d9d7.85321b50cbcd0e5d - ca5631ffab5f1282.f3af061a6d3a2c7f.2694ddb00cd6fa4c.76ec1d4f823eb026 - e24edfd7e388c7bf.0d8ec36be553c306.a096e1b7c6cfaff1.b777683408b00623 -- 0000000000000000.0000000000000000.0000000000000000.76ec1d4f823eb026 -+ 0000000000000000.0000000000000000.a096e1b7c6cfaff1.b777683480000000 - 942bc560f2cdc06a --VROUNDPD_128_0x4(mem) -+VROUNDSS_0x2(mem) - before - eaedd0808f8f9c0d.6e792a4d40faf6bb.a9dd7f901e8cd966.a7a31e297ed2c37a - feaf13356b831d94.9a44bfc39d5de8d1.e2e5773d17c6d095.ec46506cb4f39bb6 -@@ -31396,10 +31396,10 @@ VROUNDPD_128_0x4(mem) - eaedd0808f8f9c0d.6e792a4d40faf6bb.a9dd7f901e8cd966.a7a31e297ed2c37a - feaf13356b831d94.9a44bfc39d5de8d1.e2e5773d17c6d095.ec46506cb4f39bb6 - ad3d0a6da2b6fe2c.da979af03febbcdc.889425361d780aff.d60c88f0a03af6d1 -- 0000000000000000.0000000000000000.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.a096e1b7c6cfaff1.b77768347ed2c37a - 0d2fff6b0c672856 - --VROUNDPD_128_0x4(reg) -+VROUNDSS_0x2(reg) - before - 1126363ac3667718.4deb06129306d43d.06090f1fc0b8f984.8c1293bcc2753533 - 2b6f63faa1ba396a.f5a50258853b400f.aabfa2f9d810da78.a1794b2198d79f55 -@@ -31410,9 +31410,9 @@ VROUNDPD_128_0x4(reg) - 1126363ac3667718.4deb06129306d43d.06090f1fc0b8f984.8c1293bcc2753533 - 2b6f63faa1ba396a.f5a50258853b400f.aabfa2f9d810da78.a1794b2198d79f55 - b756841742efabf7.a85aa2d042dffca1.d12e693aa3c38c12.93b7aa83ece33c61 -- 0000000000000000.0000000000000000.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.d12e693aa3c38c12.93b7aa8380000000 - 7ee44aea7c22fdea --VROUNDPD_128_0x4(mem) -+VROUNDSS_0x2(mem) - before - 2f6b83c7f16e9abe.96338f193a2e8e74.9fe7c0068fa257b7.1d6688a2c86c57e7 - 2df8535153935a2d.a0bf71d6ca4f77bc.9b58359c56d96e93.f8c8d8a05979e77a -@@ -31423,10 +31423,10 @@ VROUNDPD_128_0x4(mem) - 2f6b83c7f16e9abe.96338f193a2e8e74.9fe7c0068fa257b7.1d6688a2c86c57e7 - 2df8535153935a2d.a0bf71d6ca4f77bc.9b58359c56d96e93.f8c8d8a05979e77a - 54573573be9cf862.8c1a379f8c8200f0.12f43e1459aec5e0.c8124cb60f123862 -- 0000000000000000.0000000000000000.8000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.d12e693aa3c38c12.93b7aa83c86c57c0 - b39195d7571511e3 - --VROUNDPD_256_0x0(reg) -+VROUNDSS_0x3(reg) - before - 875e61b922970fd4.8dba1f2f218bc0d1.7a6d5c0a184be1ca.e1e1fd5b8264267b - be44426382d5c0cb.57561fa151896362.34fdb3831afab1c8.f1c8ab01e05ca821 -@@ -31437,9 +31437,9 @@ VROUNDPD_256_0x0(reg) - 875e61b922970fd4.8dba1f2f218bc0d1.7a6d5c0a184be1ca.e1e1fd5b8264267b - be44426382d5c0cb.57561fa151896362.34fdb3831afab1c8.f1c8ab01e05ca821 - b68e3541125b5e73.baf4225bfa9bd46a.408cdeb9beea1162.ec0cdd3ae8235ae8 -- 8000000000000000.57561fa151896362.0000000000000000.f1c8ab01e05ca821 -+ 0000000000000000.0000000000000000.408cdeb9beea1162.ec0cdd3ae05ca821 - 12d7bd116d4b4088 --VROUNDPD_256_0x0(mem) -+VROUNDSS_0x3(mem) - before - f6f7648820c5edb9.54823e44336b5389.bb661e57292d128d.bed59c0c5ebe7019 - 35a27f41ef3dbaba.b4c34c42fc0e234e.10d20f72e6c45800.e829280191bbe78e -@@ -31450,10 +31450,10 @@ VROUNDPD_256_0x0(mem) - f6f7648820c5edb9.54823e44336b5389.bb661e57292d128d.bed59c0c5ebe7019 - 35a27f41ef3dbaba.b4c34c42fc0e234e.10d20f72e6c45800.e829280191bbe78e - aaa58a28f5bf64b8.43995b246629d074.6f70f3848da05b9a.d4ab7864d828de4e -- f6f7648820c5edb9.54823e44336b5389.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.408cdeb9beea1162.ec0cdd3a5ebe7019 - 616b50200b873a62 - --VROUNDPD_256_0x0(reg) -+VROUNDSS_0x3(reg) - before - bb42d1523191180d.abe2613118133e59.62336e408bf4b397.b7708042085490f3 - 477705a0d93b65b4.edb5252a6dfce655.a99069537ebd61ea.596b23c513453808 -@@ -31464,9 +31464,9 @@ VROUNDPD_256_0x0(reg) - bb42d1523191180d.abe2613118133e59.62336e408bf4b397.b7708042085490f3 - 477705a0d93b65b4.edb5252a6dfce655.a99069537ebd61ea.596b23c513453808 - 6057e9789f145f02.d70fc90269205afd.90b155f8822ddd4f.74c8a7f078aa8ff5 -- 477705a0d93b65b4.edb5252a6dfce655.8000000000000000.596b23c513453808 -+ 0000000000000000.0000000000000000.90b155f8822ddd4f.74c8a7f000000000 - 84d846eebf013802 --VROUNDPD_256_0x0(mem) -+VROUNDSS_0x3(mem) - before - 31225a99d80b037a.ae48ad73f77c4445.0f8ca1fbc8469a04.ae72f2ad2b332efe - c8ff3f9cbbba6d79.99f1866ec124a992.1645cef56361ddba.9eaa9a9408e17ba0 -@@ -31477,10 +31477,10 @@ VROUNDPD_256_0x0(mem) - 31225a99d80b037a.ae48ad73f77c4445.0f8ca1fbc8469a04.ae72f2ad2b332efe - c8ff3f9cbbba6d79.99f1866ec124a992.1645cef56361ddba.9eaa9a9408e17ba0 - 233972e48319322a.8375ffa3192aa937.33b7cb7d15e6dccd.9dd723bf66678603 -- 0000000000000000.8000000000000000.0000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.90b155f8822ddd4f.74c8a7f000000000 - 3b3fc98c1228c4bf - --VROUNDPD_256_0x0(reg) -+VROUNDSS_0x3(reg) - before - 9212de08997b706f.99f7b4ef3417bb55.c03cbd66e57d6c37.23f225e72f6002b8 - 690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.ad547ba1d06c9fe8 -@@ -31491,9 +31491,9 @@ VROUNDPD_256_0x0(reg) - 9212de08997b706f.99f7b4ef3417bb55.c03cbd66e57d6c37.23f225e72f6002b8 - 690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.ad547ba1d06c9fe8 - 1c73774414c40dd0.72bcfe1acb677e5a.45ffc81f3bd66fa6.be9d9199f712ea25 -- 690ac47611d6ca91.6b12ba8a55cff726.cb18fbce91e3a8eb.8000000000000000 -+ 0000000000000000.0000000000000000.45ffc81f3bd66fa6.be9d9199d06c9fe8 - e616edf44e5e7575 --VROUNDPD_256_0x0(mem) -+VROUNDSS_0x3(mem) - before - b4df2b2eb41c2de0.85c735ad328a4158.90e932c628685d9a.f21e002bfb9490e3 - 79c01a5712a48307.f44a3820837aaaf8.5e0419ba46ea2dfd.dded63bf487762bd -@@ -31504,10 +31504,10 @@ VROUNDPD_256_0x0(mem) - b4df2b2eb41c2de0.85c735ad328a4158.90e932c628685d9a.f21e002bfb9490e3 - 79c01a5712a48307.f44a3820837aaaf8.5e0419ba46ea2dfd.dded63bf487762bd - 1284355983023117.af6ff8a2d12eec65.d1dd2e522a7b3774.a6f845ec0517b04e -- 8000000000000000.8000000000000000.8000000000000000.f21e002bfb9490e3 -+ 0000000000000000.0000000000000000.45ffc81f3bd66fa6.be9d9199fb9490e3 - 43ed77c138c0af48 - --VROUNDPD_256_0x1(reg) -+VROUNDSS_0x4(reg) - before - ce70be42e7e0d808.2be8df9d107187a1.79caa083d20fee5a.17f8d31fb3ffeb48 - a75d750b75ee6d30.642067b6649ba773.3f9880babd542538.a1d25b2b8f0a0efe -@@ -31518,9 +31518,9 @@ VROUNDPD_256_0x1(reg) - ce70be42e7e0d808.2be8df9d107187a1.79caa083d20fee5a.17f8d31fb3ffeb48 - a75d750b75ee6d30.642067b6649ba773.3f9880babd542538.a1d25b2b8f0a0efe - 2b0298897e75a96b.e06c0a593bca10dd.c2380db1158d2694.409b018ca1555b76 -- bff0000000000000.642067b6649ba773.0000000000000000.bff0000000000000 -+ 0000000000000000.0000000000000000.c2380db1158d2694.409b018c80000000 - 2d2598f9d5dc655f --VROUNDPD_256_0x1(mem) -+VROUNDSS_0x4(mem) - before - 337f81de30309a28.9fa00e566e1f09cd.116f97eee46cac2c.6b1a1f8b79097575 - bef678c72ff4ea63.4831597b8e5aa54b.7ebe77b7edf75768.4af49c47be643c52 -@@ -31531,10 +31531,10 @@ VROUNDPD_256_0x1(mem) - 337f81de30309a28.9fa00e566e1f09cd.116f97eee46cac2c.6b1a1f8b79097575 - bef678c72ff4ea63.4831597b8e5aa54b.7ebe77b7edf75768.4af49c47be643c52 - aa58f9a0f135113c.0ba90006983ed88d.9e5164baeab83bed.54cfb671e0e2bc5d -- 0000000000000000.bff0000000000000.0000000000000000.6b1a1f8b79097575 -+ 0000000000000000.0000000000000000.c2380db1158d2694.409b018c79097575 - 5db8b1c42879d9ab - --VROUNDPD_256_0x1(reg) -+VROUNDSS_0x4(reg) - before - 145d8bc487a9ee46.14088ad2285bd27b.4f7d50fbdc33f60b.677351202f0d9d80 - 6634f2e4332dadbf.4bef9203d558e539.8871f13d4e5c58a0.c7994b59aeb993e7 -@@ -31545,9 +31545,9 @@ VROUNDPD_256_0x1(reg) - 145d8bc487a9ee46.14088ad2285bd27b.4f7d50fbdc33f60b.677351202f0d9d80 - 6634f2e4332dadbf.4bef9203d558e539.8871f13d4e5c58a0.c7994b59aeb993e7 - b187e28ec79051c1.53f014d5b402bf45.4b7ddd951a5d43a8.4b34407d91cbb146 -- 6634f2e4332dadbf.4bef9203d558e539.bff0000000000000.c7994b59aeb993e7 -+ 0000000000000000.0000000000000000.4b7ddd951a5d43a8.4b34407d80000000 - 2cf41033f153599e --VROUNDPD_256_0x1(mem) -+VROUNDSS_0x4(mem) - before - 41b2e29da6e05aef.9dd44d3418243c13.46707708778cb6f8.de088632311d9ec3 - e814a0a12f0473e9.f865c1070d6dfaba.e886504193834cf8.67203c51b5f3882e -@@ -31558,10 +31558,10 @@ VROUNDPD_256_0x1(mem) - 41b2e29da6e05aef.9dd44d3418243c13.46707708778cb6f8.de088632311d9ec3 - e814a0a12f0473e9.f865c1070d6dfaba.e886504193834cf8.67203c51b5f3882e - ffe6c72ca7ca62b7.baa4ae165bc58d9b.cce693cb505698f6.ea7e2d3403d2e9bd -- 41b2e29da6000000.bff0000000000000.46707708778cb6f8.de088632311d9ec3 -+ 0000000000000000.0000000000000000.4b7ddd951a5d43a8.4b34407d00000000 - 4e40b0fb6edc02f5 - --VROUNDPD_256_0x1(reg) -+VROUNDSS_0x4(reg) - before - e63c3ab6c42032f6.e9093d82d66dac81.e658e39470d425b9.c6b4477f1ec2459f - e9aef0e6549ccacb.75f28427c56281d5.096524dc6fa2a24f.95bab18168721ea1 -@@ -31572,9 +31572,9 @@ VROUNDPD_256_0x1(reg) - e63c3ab6c42032f6.e9093d82d66dac81.e658e39470d425b9.c6b4477f1ec2459f - e9aef0e6549ccacb.75f28427c56281d5.096524dc6fa2a24f.95bab18168721ea1 - b2e2cdf7bade061f.df7b2302132a1aad.034fce0f36b0e4ce.143a7583c22f9d51 -- e9aef0e6549ccacb.75f28427c56281d5.0000000000000000.bff0000000000000 -+ 0000000000000000.0000000000000000.034fce0f36b0e4ce.143a758368721ea1 - 96d7fb371dfd806f --VROUNDPD_256_0x1(mem) -+VROUNDSS_0x4(mem) - before - 518cb6c254275b33.05c5ec6c7ae259f7.c19d5b093e608a9c.efe94de78fb9aa3a - 2cebbafc0d8dcd56.470a27a80cbce8d2.f0cdeb0e52e6da0a.99321a6358cda57e -@@ -31585,10 +31585,10 @@ VROUNDPD_256_0x1(mem) - 518cb6c254275b33.05c5ec6c7ae259f7.c19d5b093e608a9c.efe94de78fb9aa3a - 2cebbafc0d8dcd56.470a27a80cbce8d2.f0cdeb0e52e6da0a.99321a6358cda57e - 04c085d3633c9204.c0437876e48b0add.6fcec3f9366fdead.8b87417a5a50575b -- 518cb6c254275b33.0000000000000000.c19d5b0940000000.efe94de78fb9aa3a -+ 0000000000000000.0000000000000000.034fce0f36b0e4ce.143a758380000000 - b7898a2a76d4ca93 - --VROUNDPD_256_0x2(reg) -+VROUNDSS_0x5(reg) - before - a9cca49bc9ed0545.1cfb5e0458a204af.c3bc5274d83afa32.c96e3d32ddb7f440 - 534d0857c4a6e541.13f963372e712904.0594d17d2c3140d3.5ca6d657d78f7e89 -@@ -31599,9 +31599,9 @@ VROUNDPD_256_0x2(reg) - a9cca49bc9ed0545.1cfb5e0458a204af.c3bc5274d83afa32.c96e3d32ddb7f440 - 534d0857c4a6e541.13f963372e712904.0594d17d2c3140d3.5ca6d657d78f7e89 - 1157b0ca048aa633.789e1fb612b99194.ee9058c6364d0a55.aedea7121199adb6 -- 534d0857c4a6e541.3ff0000000000000.3ff0000000000000.5ca6d657d78f7e89 -+ 0000000000000000.0000000000000000.ee9058c6364d0a55.aedea712d78f7e89 - 007de2fbb375e96f --VROUNDPD_256_0x2(mem) -+VROUNDSS_0x5(mem) - before - b77c4401535e6e52.3834c285c103bfa7.f708aa4873e21814.20206bcddd2718a6 - 9dacce4da3aa88c9.5aa022a576b18e81.ca65703328dbb05c.224cef62b3fbd4ce -@@ -31612,10 +31612,10 @@ VROUNDPD_256_0x2(mem) - b77c4401535e6e52.3834c285c103bfa7.f708aa4873e21814.20206bcddd2718a6 - 9dacce4da3aa88c9.5aa022a576b18e81.ca65703328dbb05c.224cef62b3fbd4ce - 8ed7fccbbe63f201.00c5b82ce0ba2f01.7a99dd1b597c7b8f.3bcb6ae9af250586 -- 8000000000000000.3ff0000000000000.f708aa4873e21814.3ff0000000000000 -+ 0000000000000000.0000000000000000.ee9058c6364d0a55.aedea712dd2718a6 - 1df237788aaab054 - --VROUNDPD_256_0x2(reg) -+VROUNDSS_0x5(reg) - before - 9f31805aa21ca4c2.0150350dc752a964.476a7220410fd5a2.e1b2998ea6e79863 - a7f4b1dc5013fb70.3b3738a9ed9f6ee6.a18190647072531b.502fe0f1f8ca635d -@@ -31626,9 +31626,9 @@ VROUNDPD_256_0x2(reg) - 9f31805aa21ca4c2.0150350dc752a964.476a7220410fd5a2.e1b2998ea6e79863 - a7f4b1dc5013fb70.3b3738a9ed9f6ee6.a18190647072531b.502fe0f1f8ca635d - 9285c46c301cf20a.f049cf274e8a73d8.ef82d2c0c46093e9.0cb2be01388451f2 -- 8000000000000000.3ff0000000000000.8000000000000000.502fe0f1f8ca635d -+ 0000000000000000.0000000000000000.ef82d2c0c46093e9.0cb2be01f8ca635d - dbf92bd5f0b3849b --VROUNDPD_256_0x2(mem) -+VROUNDSS_0x5(mem) - before - a656b471a03e4108.7c448563f891afb0.3b22aa7a326c30bf.d66db76c48104736 - 2ee8c269aed212bf.340a2aa11816ed14.8980e626ee7a600c.27f05195b1e8340d -@@ -31639,10 +31639,10 @@ VROUNDPD_256_0x2(mem) - a656b471a03e4108.7c448563f891afb0.3b22aa7a326c30bf.d66db76c48104736 - 2ee8c269aed212bf.340a2aa11816ed14.8980e626ee7a600c.27f05195b1e8340d - 4f7cd3a9357ab1ed.3ecea39edadcbb14.c239a6655557c078.dd8b0085af7cd2ea -- 8000000000000000.7c448563f891afb0.3ff0000000000000.d66db76c48104736 -+ 0000000000000000.0000000000000000.ef82d2c0c46093e9.0cb2be0148104740 - e43d8f6ad7061464 - --VROUNDPD_256_0x2(reg) -+VROUNDSS_0x5(reg) - before - edec66383a14305a.ccdaebb220384b5c.b884fd7db65cf597.64f0a34995ab0264 - cae3427ca10ded05.df3cea52bc65bff6.df0dd738072eda72.8686d8c6a73b5d3b -@@ -31653,9 +31653,9 @@ VROUNDPD_256_0x2(reg) - edec66383a14305a.ccdaebb220384b5c.b884fd7db65cf597.64f0a34995ab0264 - cae3427ca10ded05.df3cea52bc65bff6.df0dd738072eda72.8686d8c6a73b5d3b - d86e1fa3a97e8811.fcd0dbeb41d7f0b6.c9c575616b723f98.03a78185d3c9d8e2 -- cae3427ca10ded05.df3cea52bc65bff6.df0dd738072eda72.8000000000000000 -+ 0000000000000000.0000000000000000.c9c575616b723f98.03a7818580000000 - 7dbd1f79ef102053 --VROUNDPD_256_0x2(mem) -+VROUNDSS_0x5(mem) - before - 33490d8617e16674.f275ce4c0af547ff.c0bc85b477b8815a.53f2e9a9db7d7878 - b3925f86c9e1bc16.b88797a49b14e339.20ad35bd613e5796.abfeb8a01e5cc389 -@@ -31666,10 +31666,10 @@ VROUNDPD_256_0x2(mem) - 33490d8617e16674.f275ce4c0af547ff.c0bc85b477b8815a.53f2e9a9db7d7878 - b3925f86c9e1bc16.b88797a49b14e339.20ad35bd613e5796.abfeb8a01e5cc389 - db629163241ade64.1d5f51903dda4d84.f900c86ea439dca8.346a3ab5e4dd7f95 -- 3ff0000000000000.f275ce4c0af547ff.c0bc850000000000.53f2e9a9db7d7878 -+ 0000000000000000.0000000000000000.c9c575616b723f98.03a78185db7d7878 - 4e8d49e668f33552 - --VROUNDPD_256_0x3(reg) -+VROUNDSD_0x0(reg) - before - 95ddccda5da0a859.8fcb85683e6d7ab6.378c8ad1228c7aff.85fc8378a6bde101 - 7fbbf39b451e7a0c.d4fb4068379e6b12.a47a00fe9d90b587.f03ca4a99d5dda9f -@@ -31680,9 +31680,9 @@ VROUNDPD_256_0x3(reg) - 95ddccda5da0a859.8fcb85683e6d7ab6.378c8ad1228c7aff.85fc8378a6bde101 - 7fbbf39b451e7a0c.d4fb4068379e6b12.a47a00fe9d90b587.f03ca4a99d5dda9f - 6775ba95bbfae817.2fe2cbf6473918cb.215c576e986caed0.450f98325ea172c4 -- 7fbbf39b451e7a0c.d4fb4068379e6b12.8000000000000000.f03ca4a99d5dda9f -+ 0000000000000000.0000000000000000.215c576e986caed0.f03ca4a99d5dda9f - 1999e5fdac476e52 --VROUNDPD_256_0x3(mem) -+VROUNDSD_0x0(mem) - before - 50e9371771c04a13.a0a914e5c3f988e3.9b09416c1dde9a02.bb3099c881d8c958 - e0fa4b39700eb40a.a9bba0138d3531fd.63e1252c1c00e5d9.90b97c8aa68263ee -@@ -31693,10 +31693,10 @@ VROUNDPD_256_0x3(mem) - 50e9371771c04a13.a0a914e5c3f988e3.9b09416c1dde9a02.bb3099c881d8c958 - e0fa4b39700eb40a.a9bba0138d3531fd.63e1252c1c00e5d9.90b97c8aa68263ee - a69a9d4ec43c6964.21d8bb2955fd661e.b3a0c82aa2bddebc.e567303ebb33aaf6 -- 50e9371771c04a13.8000000000000000.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.215c576e986caed0.8000000000000000 - 7f62fc3128da330a - --VROUNDPD_256_0x3(reg) -+VROUNDSD_0x0(reg) - before - 7c460c46b6e9ec6e.3fb3ed06dd6aa4ef.c9628fc251676327.56054191b435c558 - 6980ddffa62f42f5.cbc4e280da81a279.b368401cbc20a367.62440dd178082b68 -@@ -31707,9 +31707,9 @@ VROUNDPD_256_0x3(reg) - 7c460c46b6e9ec6e.3fb3ed06dd6aa4ef.c9628fc251676327.56054191b435c558 - 6980ddffa62f42f5.cbc4e280da81a279.b368401cbc20a367.62440dd178082b68 - a25a6bc792397248.fd93059e9ca9da15.7aa8700f96975f5e.669b8a0034a62f36 -- 6980ddffa62f42f5.cbc4e280da81a279.8000000000000000.62440dd178082b68 -+ 0000000000000000.0000000000000000.7aa8700f96975f5e.62440dd178082b68 - c1bf84d70271fcb6 --VROUNDPD_256_0x3(mem) -+VROUNDSD_0x0(mem) - before - d125f9584cb63dc2.6721af35cfc65009.be9ac677e059ea35.13093e7006eb3a24 - 48d30e77fef50b39.aca65db2586175cd.066a5c099bf93b11.9cc2d4b6d3e2d14a -@@ -31720,10 +31720,10 @@ VROUNDPD_256_0x3(mem) - d125f9584cb63dc2.6721af35cfc65009.be9ac677e059ea35.13093e7006eb3a24 - 48d30e77fef50b39.aca65db2586175cd.066a5c099bf93b11.9cc2d4b6d3e2d14a - 02954020333a224a.adfcb8ee4df0650f.632910f08bdab6b0.73e6d9467fc5d4d8 -- d125f9584cb63dc2.6721af35cfc65009.8000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.7aa8700f96975f5e.0000000000000000 - 7b9e20f0e2850dda - --VROUNDPD_256_0x3(reg) -+VROUNDSD_0x0(reg) - before - 64ca5be2d279bba7.af84e8c198091ae4.52496555ee1890bc.cc9fc3697b8d1ce5 - 0b91f5ce108ac48b.5a49579000a973c7.aedab056d1c9447f.90efbad4b3777fd3 -@@ -31734,9 +31734,9 @@ VROUNDPD_256_0x3(reg) - 64ca5be2d279bba7.af84e8c198091ae4.52496555ee1890bc.cc9fc3697b8d1ce5 - 0b91f5ce108ac48b.5a49579000a973c7.aedab056d1c9447f.90efbad4b3777fd3 - cc3fea1f38446633.b852d19a5b8005f1.376b98c7919db270.d95cbf4391d1fd34 -- 0000000000000000.5a49579000a973c7.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.376b98c7919db270.8000000000000000 - 6ac1e3ddad0739fe --VROUNDPD_256_0x3(mem) -+VROUNDSD_0x0(mem) - before - 6a50fbe023fa6fbf.0c80d5a0b8e55f7d.fd60db0b5b01c3d1.3cbf2fa615dfab8a - 5e2d1197af8eb0a2.43aac4a847e33078.9cfc624a38c367dd.701bd7ec1266af0b -@@ -31747,10 +31747,10 @@ VROUNDPD_256_0x3(mem) - 6a50fbe023fa6fbf.0c80d5a0b8e55f7d.fd60db0b5b01c3d1.3cbf2fa615dfab8a - 5e2d1197af8eb0a2.43aac4a847e33078.9cfc624a38c367dd.701bd7ec1266af0b - 2424a1ef6cceb8d4.04ebfec532bb88e6.5d0de67479eb33e2.41a70c515b3f5b6a -- 6a50fbe023fa6fbf.0000000000000000.fd60db0b5b01c3d1.0000000000000000 -+ 0000000000000000.0000000000000000.376b98c7919db270.0000000000000000 - 26820d29441da270 - --VROUNDPD_256_0x4(reg) -+VROUNDSD_0x1(reg) - before - f269d2731b38b470.9390202eea830bd4.94e243ef8527c0cd.bab9d236969f3786 - cab1138daed760fd.f39c07ede410cff9.1b3047d327d3179e.0ded32a6a943e67d -@@ -31761,9 +31761,9 @@ VROUNDPD_256_0x4(reg) - f269d2731b38b470.9390202eea830bd4.94e243ef8527c0cd.bab9d236969f3786 - cab1138daed760fd.f39c07ede410cff9.1b3047d327d3179e.0ded32a6a943e67d - 0ba6cee19a86e1c4.95f258fd7f79491e.9cc5867d9388e693.f2c57eb0907cad1d -- cab1138daed760fd.f39c07ede410cff9.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.9cc5867d9388e693.0000000000000000 - e790cb4348e37706 --VROUNDPD_256_0x4(mem) -+VROUNDSD_0x1(mem) - before - ad1cc4a45127f0a7.33c5a0ecea4056ae.0bac28bd09115212.fbf3a5cf3a3edc96 - 777b9a4e9d3273a1.d388ae7a8865c02a.98a8a0453157593a.92247d50ae577afe -@@ -31774,10 +31774,10 @@ VROUNDPD_256_0x4(mem) - ad1cc4a45127f0a7.33c5a0ecea4056ae.0bac28bd09115212.fbf3a5cf3a3edc96 - 777b9a4e9d3273a1.d388ae7a8865c02a.98a8a0453157593a.92247d50ae577afe - 1f7ac72f4910ba1f.4b2826f3edc8f18f.d51e72cd6aaa0611.93cc81465caa8039 -- 8000000000000000.0000000000000000.0000000000000000.fbf3a5cf3a3edc96 -+ 0000000000000000.0000000000000000.9cc5867d9388e693.fbf3a5cf3a3edc96 - 42b1fa41d72bb3d9 - --VROUNDPD_256_0x4(reg) -+VROUNDSD_0x1(reg) - before - a885671fdc725897.7d881b423072865a.342f4156827e92c6.d3a7148d80a5457a - e901f0218c2255d8.eb2e394da30e846e.5c2ddd18e9e87cf0.4c52dc9e95644e65 -@@ -31788,9 +31788,9 @@ VROUNDPD_256_0x4(reg) - a885671fdc725897.7d881b423072865a.342f4156827e92c6.d3a7148d80a5457a - e901f0218c2255d8.eb2e394da30e846e.5c2ddd18e9e87cf0.4c52dc9e95644e65 - 5f6f90b482c7e649.a7a59f3ee5ad36b7.cc39d17688c11bb4.e5a7ef5e2c61eeae -- e901f0218c2255d8.eb2e394da30e846e.5c2ddd18e9e87cf0.4c52dc9e95644e65 -+ 0000000000000000.0000000000000000.cc39d17688c11bb4.4c52dc9e95644e65 - eb7ee3a04e3ee30c --VROUNDPD_256_0x4(mem) -+VROUNDSD_0x1(mem) - before - 0f99bdf81137af78.5e54053fb221b26a.7d3134834722a897.f4a6b6b2e1f16bb8 - c48dd0b1c69d02f4.9f63d20d24ef6671.4edf5bae9f10e086.64a09e69d2609350 -@@ -31801,10 +31801,10 @@ VROUNDPD_256_0x4(mem) - 0f99bdf81137af78.5e54053fb221b26a.7d3134834722a897.f4a6b6b2e1f16bb8 - c48dd0b1c69d02f4.9f63d20d24ef6671.4edf5bae9f10e086.64a09e69d2609350 - e7289ab6887a98aa.8595a71d4ce19d59.de8dbb6f3730bd59.8bd7d06a6b6f6132 -- 0000000000000000.5e54053fb221b26a.7d3134834722a897.f4a6b6b2e1f16bb8 -+ 0000000000000000.0000000000000000.cc39d17688c11bb4.f4a6b6b2e1f16bb8 - 732bffff079ade83 - --VROUNDPD_256_0x4(reg) -+VROUNDSD_0x1(reg) - before - ebe0f46a42ce064a.e27e4054a4cf7b76.b49056b02f678776.ac1812659537555d - 8b0222d095d2c30a.73d115c6375e41e4.b4f3280b2311b204.a18e0170943688e6 -@@ -31815,9 +31815,9 @@ VROUNDPD_256_0x4(reg) - ebe0f46a42ce064a.e27e4054a4cf7b76.b49056b02f678776.ac1812659537555d - 8b0222d095d2c30a.73d115c6375e41e4.b4f3280b2311b204.a18e0170943688e6 - aedd869e9d315170.e1fb8f3347953a3c.caa8f2573d115022.c5331ac241985004 -- 8000000000000000.73d115c6375e41e4.8000000000000000.8000000000000000 -+ 0000000000000000.0000000000000000.caa8f2573d115022.bff0000000000000 - 0a3db2e81bb28dad --VROUNDPD_256_0x4(mem) -+VROUNDSD_0x1(mem) - before - e3392b947f837b90.f2eddd1d3a31d4dd.c50067b24f2db35d.a93a5a735441d8bc - 5b96bc3603e6eeb8.cabbc8a807eb403b.f273bd9b80a5ac7d.29b0f11a8a893990 -@@ -31828,10 +31828,10 @@ VROUNDPD_256_0x4(mem) - e3392b947f837b90.f2eddd1d3a31d4dd.c50067b24f2db35d.a93a5a735441d8bc - 5b96bc3603e6eeb8.cabbc8a807eb403b.f273bd9b80a5ac7d.29b0f11a8a893990 - 4e1ee1bac2e7a151.9571d849f92f6df0.6ceca8319df6c838.2fa870635557fea4 -- e3392b947f837b90.f2eddd1d3a31d4dd.c50067b24f2db35d.8000000000000000 -+ 0000000000000000.0000000000000000.caa8f2573d115022.bff0000000000000 - 3d51128721b2a43b - --VROUNDSS_0x0(reg) -+VROUNDSD_0x2(reg) - before - fd9a2e3b5857fc16.15e3d81963f4ba84.78c85982b98afd09.b61f32111250572d - b396224096b2a8e0.a1b7a2cc7c199876.4801c1f1c0b9d8c6.3f72c833a07142bf -@@ -31842,9 +31842,9 @@ VROUNDSS_0x0(reg) - fd9a2e3b5857fc16.15e3d81963f4ba84.78c85982b98afd09.b61f32111250572d - b396224096b2a8e0.a1b7a2cc7c199876.4801c1f1c0b9d8c6.3f72c833a07142bf - bb91e802764ee446.18e6f010410ba689.7b533f275ca36589.85fae5b18c9b419d -- 0000000000000000.0000000000000000.7b533f275ca36589.85fae5b180000000 -+ 0000000000000000.0000000000000000.7b533f275ca36589.3ff0000000000000 - b8dca071eb3866e7 --VROUNDSS_0x0(mem) -+VROUNDSD_0x2(mem) - before - 5dce378c98c304ac.31b3df6e8e7afb95.368909003e8c44c1.7e716998c0d983cf - 2e2645b21187a56b.577207effd224ed6.9695cb83ad314d3d.06d50eabc13d8cab -@@ -31855,10 +31855,10 @@ VROUNDSS_0x0(mem) - 5dce378c98c304ac.31b3df6e8e7afb95.368909003e8c44c1.7e716998c0d983cf - 2e2645b21187a56b.577207effd224ed6.9695cb83ad314d3d.06d50eabc13d8cab - 09b044d1748e0551.3f60f2dd7f3c2162.512c024838d5768b.6182b836c68c383c -- 0000000000000000.0000000000000000.7b533f275ca36589.85fae5b1c0e00000 -+ 0000000000000000.0000000000000000.7b533f275ca36589.7e716998c0d983cf - 04e70c604e1d632f - --VROUNDSS_0x0(reg) -+VROUNDSD_0x2(reg) - before - 0336aed709765ce8.4a880aa6679bf241.c5f802b12bf3350e.472ebd4810481a47 - 46ff457638ebe608.6770c8352eb8f6a3.1a3b1f6f8ca8ef85.3b30385b952f0e0e -@@ -31869,9 +31869,9 @@ VROUNDSS_0x0(reg) - 0336aed709765ce8.4a880aa6679bf241.c5f802b12bf3350e.472ebd4810481a47 - 46ff457638ebe608.6770c8352eb8f6a3.1a3b1f6f8ca8ef85.3b30385b952f0e0e - 298ccea878073e39.feb8686c4f49a9dc.a2dcf04a70ff18f7.faef1861a6451256 -- 0000000000000000.0000000000000000.a2dcf04a70ff18f7.faef186180000000 -+ 0000000000000000.0000000000000000.a2dcf04a70ff18f7.3ff0000000000000 - 48d0f4f2da2b3c17 --VROUNDSS_0x0(mem) -+VROUNDSD_0x2(mem) - before - 8f8ae9553513dae9.4025a27599654780.06a040820df80a81.b76b9a0730c1ab80 - 1230325b8b5a79eb.2bc9e6e8b2bf70ee.2fd66f39e32e3145.fdf16cc143448bed -@@ -31882,10 +31882,10 @@ VROUNDSS_0x0(mem) - 8f8ae9553513dae9.4025a27599654780.06a040820df80a81.b76b9a0730c1ab80 - 1230325b8b5a79eb.2bc9e6e8b2bf70ee.2fd66f39e32e3145.fdf16cc143448bed - ab8d4aeff90bd449.26620b9e4bf0571d.429f70498208f790.e506e1484998cc06 -- 0000000000000000.0000000000000000.a2dcf04a70ff18f7.faef186100000000 -+ 0000000000000000.0000000000000000.a2dcf04a70ff18f7.8000000000000000 - 0a0ca56d9ce45ceb - --VROUNDSS_0x0(reg) -+VROUNDSD_0x2(reg) - before - ff95ebe421f5230f.93a0dd718cdcb2cd.bca2e98470094d71.9215d91f8cda4f69 - 07ddc5d709063b8f.99ee4e37e814ab49.0fe19a8b3309d5ed.875b39bf2fea5950 -@@ -31896,9 +31896,9 @@ VROUNDSS_0x0(reg) - ff95ebe421f5230f.93a0dd718cdcb2cd.bca2e98470094d71.9215d91f8cda4f69 - 07ddc5d709063b8f.99ee4e37e814ab49.0fe19a8b3309d5ed.875b39bf2fea5950 - 7c302eb4efa5de16.2723803bcce752d2.e2451c86e60f0bda.d5625c670ccef16d -- 0000000000000000.0000000000000000.e2451c86e60f0bda.d5625c6700000000 -+ 0000000000000000.0000000000000000.e2451c86e60f0bda.8000000000000000 - ede7d77ee142befc --VROUNDSS_0x0(mem) -+VROUNDSD_0x2(mem) - before - 6efd27c612eb6bc5.21279fd827bbb7eb.467514ae9a8b95ba.78ab84048f636fbb - b8042ac6ed989774.08629df8b04a6591.90296ff5bd74a971.f3466260bbc81605 -@@ -31909,10 +31909,10 @@ VROUNDSS_0x0(mem) - 6efd27c612eb6bc5.21279fd827bbb7eb.467514ae9a8b95ba.78ab84048f636fbb - b8042ac6ed989774.08629df8b04a6591.90296ff5bd74a971.f3466260bbc81605 - a8c95c6a8d56fd36.ced91bb1a8968fee.d2f67929d7285be4.5d35015f49645b72 -- 0000000000000000.0000000000000000.e2451c86e60f0bda.d5625c6780000000 -+ 0000000000000000.0000000000000000.e2451c86e60f0bda.78ab84048f636fbb - 734372f6f572ad5f - --VROUNDSS_0x1(reg) -+VROUNDSD_0x3(reg) - before - d6f93d664bfc3338.e5bc394f8e3269a3.62a6859f54974680.a9068f0d611f84b1 - 9834b92a73ee46e2.eb82dd672668e8a5.e99569ab3f644b0c.f7e29393097a7362 -@@ -31923,9 +31923,9 @@ VROUNDSS_0x1(reg) - d6f93d664bfc3338.e5bc394f8e3269a3.62a6859f54974680.a9068f0d611f84b1 - 9834b92a73ee46e2.eb82dd672668e8a5.e99569ab3f644b0c.f7e29393097a7362 - 173fe2ac06d3230a.06379fd4f4df9169.bfeebc00091dbc00.ac0636b818cfef80 -- 0000000000000000.0000000000000000.bfeebc00091dbc00.ac0636b800000000 -+ 0000000000000000.0000000000000000.bfeebc00091dbc00.f7e29393097a7362 - bb554e8dde997eb1 --VROUNDSS_0x1(mem) -+VROUNDSD_0x3(mem) - before - cd19ba14cc25081d.b8f92c9ee3a72a83.eb996e59a0be53ea.c3129f36a889d0ce - b654b6e992dc0fa5.933f44e664aecd2c.6ddf724ab63ee4ff.aa7528efb652ec01 -@@ -31936,10 +31936,10 @@ VROUNDSS_0x1(mem) - cd19ba14cc25081d.b8f92c9ee3a72a83.eb996e59a0be53ea.c3129f36a889d0ce - b654b6e992dc0fa5.933f44e664aecd2c.6ddf724ab63ee4ff.aa7528efb652ec01 - 52d3bff94bc84f76.9a86fa9dc2d82903.7442853f722e9086.4f7210a11139644b -- 0000000000000000.0000000000000000.bfeebc00091dbc00.ac0636b8bf800000 -+ 0000000000000000.0000000000000000.bfeebc00091dbc00.c3129f36a889d0cc - 436ced9f249056d6 - --VROUNDSS_0x1(reg) -+VROUNDSD_0x3(reg) - before - 4a02dbc51417496f.13cde576077569a1.9b472e0882c6fee8.8193c6e54a90289b - 7f631793c1eb87d0.f0e0fabc434dbb54.4d58a3941da3ef50.3f18ec6e9e198c82 -@@ -31950,9 +31950,9 @@ VROUNDSS_0x1(reg) - 4a02dbc51417496f.13cde576077569a1.9b472e0882c6fee8.8193c6e54a90289b - 7f631793c1eb87d0.f0e0fabc434dbb54.4d58a3941da3ef50.3f18ec6e9e198c82 - 3eda9f76c9994ea4.f0660cebe28c35ff.9c9ba63f04d28a95.f1ec10ab0843fb8b -- 0000000000000000.0000000000000000.9c9ba63f04d28a95.f1ec10abbf800000 -+ 0000000000000000.0000000000000000.9c9ba63f04d28a95.0000000000000000 - a6ab42f28ca7e9b6 --VROUNDSS_0x1(mem) -+VROUNDSD_0x3(mem) - before - 603049d4defae02f.ca3d812c59b16157.c8fe13b9ba6b95ef.7ce243a2295bad67 - 7e323d19b51dd27b.4fc1d2d61932278e.59a8012f2b25f28c.c77fd6339dcdad4d -@@ -31963,10 +31963,10 @@ VROUNDSS_0x1(mem) - 603049d4defae02f.ca3d812c59b16157.c8fe13b9ba6b95ef.7ce243a2295bad67 - 7e323d19b51dd27b.4fc1d2d61932278e.59a8012f2b25f28c.c77fd6339dcdad4d - de7e9caf2e1d7ac5.cd8c5f46a3be64e8.7cf6dc40707567d1.1d7de592cfc247c0 -- 0000000000000000.0000000000000000.9c9ba63f04d28a95.f1ec10ab00000000 -+ 0000000000000000.0000000000000000.9c9ba63f04d28a95.7ce243a2295bad67 - 5dcb6c6fd76637ff - --VROUNDSS_0x1(reg) -+VROUNDSD_0x3(reg) - before - 00b3dcc4e52d0623.d024897b75e0df06.29251a24862035b8.edae45dee4078d06 - 1e2cb89820a85f85.1b160e897abd1454.bd8d416b180f4186.f1afcc454b62b44d -@@ -31977,9 +31977,9 @@ VROUNDSS_0x1(reg) - 00b3dcc4e52d0623.d024897b75e0df06.29251a24862035b8.edae45dee4078d06 - 1e2cb89820a85f85.1b160e897abd1454.bd8d416b180f4186.f1afcc454b62b44d - 1482fe5724617dd0.1682ee9791a5ef50.bc6b9227e338b527.f9842ff5f683e5ed -- 0000000000000000.0000000000000000.bc6b9227e338b527.f9842ff54b62b44d -+ 0000000000000000.0000000000000000.bc6b9227e338b527.f1afcc454b62b44d - 81da7ae5854850e7 --VROUNDSS_0x1(mem) -+VROUNDSD_0x3(mem) - before - b9f35afca2040299.f8f5b546f5c3fbd3.90f7ad6463cc8a05.67bba7ae9b65c493 - 650f060d73b7ae53.9ea91f4efa82d2e3.c79883fa5722c116.ccc66351be81d8b7 -@@ -31990,10 +31990,10 @@ VROUNDSS_0x1(mem) - b9f35afca2040299.f8f5b546f5c3fbd3.90f7ad6463cc8a05.67bba7ae9b65c493 - 650f060d73b7ae53.9ea91f4efa82d2e3.c79883fa5722c116.ccc66351be81d8b7 - 5ffcfb04136b0e42.8c6ae1f237b2608d.1ee3a441cbb48f85.0b77391a8c07425e -- 0000000000000000.0000000000000000.bc6b9227e338b527.f9842ff5bf800000 -+ 0000000000000000.0000000000000000.bc6b9227e338b527.67bba7ae9b65c493 - 85ff28ca977f0fe8 - --VROUNDSS_0x2(reg) -+VROUNDSD_0x4(reg) - before - 7a6d38890c89e922.b174ac54310cdc6d.b04462bacc8e8b5d.a0a6b48ea9bde02f - b8b1541e9b2c0b8f.c0986185e810c202.9ef319b65b53a1db.82b79b6d4a4cdac2 -@@ -32004,9 +32004,9 @@ VROUNDSS_0x2(reg) - 7a6d38890c89e922.b174ac54310cdc6d.b04462bacc8e8b5d.a0a6b48ea9bde02f - b8b1541e9b2c0b8f.c0986185e810c202.9ef319b65b53a1db.82b79b6d4a4cdac2 - 9d1976f4e2f5b1dd.8ebc4e4dde464d7b.44e018fe92b75ea3.f6a1bdabdd485b63 -- 0000000000000000.0000000000000000.44e018fe92b75ea3.f6a1bdab4a4cdac4 -+ 0000000000000000.0000000000000000.44e018fe92b75ea3.8000000000000000 - ff349ff947b4e182 --VROUNDSS_0x2(mem) -+VROUNDSD_0x4(mem) - before - 4d7457e1563c5e57.c781c113012677c6.d833c14ef87941cb.28a0e31f6a8eb7c0 - 9cbd39d8c66152eb.c619e13413a70fba.0b1f3f5f548f22fa.1e0ba6d04319cc6d -@@ -32017,10 +32017,10 @@ VROUNDSS_0x2(mem) - 4d7457e1563c5e57.c781c113012677c6.d833c14ef87941cb.28a0e31f6a8eb7c0 - 9cbd39d8c66152eb.c619e13413a70fba.0b1f3f5f548f22fa.1e0ba6d04319cc6d - c8ddc2cbb42f7969.da04f9464b7d1b3e.6d3ae5b7600698be.3be4a27c34737713 -- 0000000000000000.0000000000000000.44e018fe92b75ea3.f6a1bdab6a8eb7c0 -+ 0000000000000000.0000000000000000.44e018fe92b75ea3.0000000000000000 - 5f0a3776d0c47efd - --VROUNDSS_0x2(reg) -+VROUNDSD_0x4(reg) - before - 1cf1c79bb3d45298.28ceb65679f24ed6.b403feee9e597fa4.2e309ae9f64c31b3 - 7274806b1ee3acdc.133719c68700751c.33aee35bf1774fde.45a2a19bb833cd3c -@@ -32031,9 +32031,9 @@ VROUNDSS_0x2(reg) - 1cf1c79bb3d45298.28ceb65679f24ed6.b403feee9e597fa4.2e309ae9f64c31b3 - 7274806b1ee3acdc.133719c68700751c.33aee35bf1774fde.45a2a19bb833cd3c - bce15f53ad7ec877.4ba613e183e7bffd.37ddaf6adb1b8258.fb75c04399acee0a -- 0000000000000000.0000000000000000.37ddaf6adb1b8258.fb75c04380000000 -+ 0000000000000000.0000000000000000.37ddaf6adb1b8258.45a2a19bb833cd3c - b46a36262b85ad24 --VROUNDSS_0x2(mem) -+VROUNDSD_0x4(mem) - before - 6f24863813fdc4c8.9ba47b18aa85345c.12c5b9cdb36daa3e.41f2ed1ae22103bb - 396edef18b375060.e893b1cc4f0afdff.590e5d751f25c3f7.ff715794389dcafc -@@ -32044,10 +32044,10 @@ VROUNDSS_0x2(mem) - 6f24863813fdc4c8.9ba47b18aa85345c.12c5b9cdb36daa3e.41f2ed1ae22103bb - 396edef18b375060.e893b1cc4f0afdff.590e5d751f25c3f7.ff715794389dcafc - ee13ba3bae400c19.9a9afd48884a77a8.5c8c8779e9e5f0fa.b3a3995f93cee42c -- 0000000000000000.0000000000000000.37ddaf6adb1b8258.fb75c043e22103bb -+ 0000000000000000.0000000000000000.37ddaf6adb1b8258.41f2ed1ae2200000 - 6d4f9198ce7f030c - --VROUNDSS_0x2(reg) -+VROUNDSD_0x4(reg) - before - 2b6140dee5188013.89a3ef3766ec069d.9924c346292c71ba.0b5b5f4605ae7190 - 4f56b625739641ba.26243fc033a8bdc0.9e3f369fc8e6697c.6e4204e68fcf3d7b -@@ -32058,9 +32058,9 @@ VROUNDSS_0x2(reg) - 2b6140dee5188013.89a3ef3766ec069d.9924c346292c71ba.0b5b5f4605ae7190 - 4f56b625739641ba.26243fc033a8bdc0.9e3f369fc8e6697c.6e4204e68fcf3d7b - 347aefda138682ac.1f31048b1c6294b3.78a2ae6f6b8b02f3.fe901f92e6280c61 -- 0000000000000000.0000000000000000.78a2ae6f6b8b02f3.fe901f9280000000 -+ 0000000000000000.0000000000000000.78a2ae6f6b8b02f3.6e4204e68fcf3d7b - 148da9c06eb4a3cb --VROUNDSS_0x2(mem) -+VROUNDSD_0x4(mem) - before - 53d40f18d6fee3a9.b67f9c3afbe97323.911fdb97b00194bc.16729f252fc70ab1 - 2eb2db2d7cb11531.0af707be7a749a01.c398e4b093fe3629.93780fe38877f051 -@@ -32071,10 +32071,10 @@ VROUNDSS_0x2(mem) - 53d40f18d6fee3a9.b67f9c3afbe97323.911fdb97b00194bc.16729f252fc70ab1 - 2eb2db2d7cb11531.0af707be7a749a01.c398e4b093fe3629.93780fe38877f051 - 83f189ea7ad8f68f.90cf255e7ca132d9.c0cc52bc0229e716.55f674c855426857 -- 0000000000000000.0000000000000000.78a2ae6f6b8b02f3.fe901f923f800000 -+ 0000000000000000.0000000000000000.78a2ae6f6b8b02f3.0000000000000000 - 138e0db6bd59fe42 - --VROUNDSS_0x3(reg) -+VROUNDSD_0x5(reg) - before - c83f3a9890be9381.07c47d0cf5b3b380.a1ca6ba7770fa02e.8a994a59f23b6e24 - 31994c52476eaad4.eef0ba49a87f086a.e5868b27a968ef01.0fc9cdc3ab39ba9b -@@ -32085,9 +32085,9 @@ VROUNDSS_0x3(reg) - c83f3a9890be9381.07c47d0cf5b3b380.a1ca6ba7770fa02e.8a994a59f23b6e24 - 31994c52476eaad4.eef0ba49a87f086a.e5868b27a968ef01.0fc9cdc3ab39ba9b - aae73f4e7ef57fea.bfafc9df25f0fcdb.cad14e74cd929d80.d0e5a3ce60960743 -- 0000000000000000.0000000000000000.cad14e74cd929d80.d0e5a3ce80000000 -+ 0000000000000000.0000000000000000.cad14e74cd929d80.0000000000000000 - 72103d7c2b9b92d5 --VROUNDSS_0x3(mem) -+VROUNDSD_0x5(mem) - before - 0bb7f9f67a5b4a17.3d93babfdfba5209.8b114ec2ebeeb001.eb43ae265c8a0931 - 4f7bf8c235a9f139.0e88380d400fc86c.3e4dbce76c93e80d.df024362ff703fbb -@@ -32098,10 +32098,10 @@ VROUNDSS_0x3(mem) - 0bb7f9f67a5b4a17.3d93babfdfba5209.8b114ec2ebeeb001.eb43ae265c8a0931 - 4f7bf8c235a9f139.0e88380d400fc86c.3e4dbce76c93e80d.df024362ff703fbb - 1b26b8cc77914668.5fa2884d916ceb3f.4b4bec15270dae51.e4806b1c0558c4a1 -- 0000000000000000.0000000000000000.cad14e74cd929d80.d0e5a3ce5c8a0931 -+ 0000000000000000.0000000000000000.cad14e74cd929d80.eb43ae265c8a0931 - 95e964b6a75bae2e - --VROUNDSS_0x3(reg) -+VROUNDSD_0x5(reg) - before - f96b2e6f7c8f8a2f.b664684b0161e59c.f0758c58756c2cec.debb8338b9aed72b - dedd7b5524f4a63a.3f8e51988161a7f9.e9c638fa4027c11c.1dc7e206c8ecb21a -@@ -32112,9 +32112,9 @@ VROUNDSS_0x3(reg) - f96b2e6f7c8f8a2f.b664684b0161e59c.f0758c58756c2cec.debb8338b9aed72b - dedd7b5524f4a63a.3f8e51988161a7f9.e9c638fa4027c11c.1dc7e206c8ecb21a - a18947d43a163efe.bed1e9d2f92b0713.d26ba53f6c19f36e.26c4f38c80300cf0 -- 0000000000000000.0000000000000000.d26ba53f6c19f36e.26c4f38cc8ecb200 -+ 0000000000000000.0000000000000000.d26ba53f6c19f36e.0000000000000000 - 01c31c715ef32bff --VROUNDSS_0x3(mem) -+VROUNDSD_0x5(mem) - before - 8c5e2ba7bb8b6890.32c24c4d22c3d15c.11cd1bc23f4d8c2b.e4e4b36254d32128 - 501bdd46315815b8.b7e77e202b65444e.9d1fac4f45be2982.c4504b1848b395e6 -@@ -32125,10 +32125,10 @@ VROUNDSS_0x3(mem) - 8c5e2ba7bb8b6890.32c24c4d22c3d15c.11cd1bc23f4d8c2b.e4e4b36254d32128 - 501bdd46315815b8.b7e77e202b65444e.9d1fac4f45be2982.c4504b1848b395e6 - 29c5ae38dd65eca3.8a771f3b13f523a8.90b9de7ab3295346.054195210dfb9677 -- 0000000000000000.0000000000000000.d26ba53f6c19f36e.26c4f38c54d32128 -+ 0000000000000000.0000000000000000.d26ba53f6c19f36e.e4e4b36254d32128 - 16e12cdd79f032bd - --VROUNDSS_0x3(reg) -+VROUNDSD_0x5(reg) - before - 9f29726858b545ca.8a1398c945700a70.8a079ffdee0c1442.1bf4125a351f3ec4 - f82559f67712d559.ca4fab403a85c9aa.709f757c1aac9edb.6b2e0ce781c176d5 -@@ -32139,9 +32139,9 @@ VROUNDSS_0x3(reg) - 9f29726858b545ca.8a1398c945700a70.8a079ffdee0c1442.1bf4125a351f3ec4 - f82559f67712d559.ca4fab403a85c9aa.709f757c1aac9edb.6b2e0ce781c176d5 - 7c22dcf272931f16.8fa8ccbbd40ca357.13d2abf39369838b.92df96c2a48e2b03 -- 0000000000000000.0000000000000000.13d2abf39369838b.92df96c280000000 -+ 0000000000000000.0000000000000000.13d2abf39369838b.6b2e0ce781c176d5 - d5d94c13e2d6fc66 --VROUNDSS_0x3(mem) -+VROUNDSD_0x5(mem) - before - a9ba6f61346a8ff2.794eace96f2dd0c7.18e5296d689997b9.0339247ee26b52e2 - c44312adcd588f4a.aa16f0bba85faf15.94615c7c9ab929c6.08056069f0c9b2e1 -@@ -32152,10 +32152,10 @@ VROUNDSS_0x3(mem) - a9ba6f61346a8ff2.794eace96f2dd0c7.18e5296d689997b9.0339247ee26b52e2 - c44312adcd588f4a.aa16f0bba85faf15.94615c7c9ab929c6.08056069f0c9b2e1 - 023fb1e3caacb79b.760ec0ad2de53840.052a8e40e178c6f5.3b9bebfdbb735fa8 -- 0000000000000000.0000000000000000.13d2abf39369838b.92df96c2e26b52e2 -+ 0000000000000000.0000000000000000.13d2abf39369838b.0000000000000000 - 9a59ded1fee08b3c - --VROUNDSS_0x4(reg) -+VPTEST_128_1(reg) - before - 7f183ee8adba8361.56c4d5bc5eb873d7.53c1fa9c8d1a37de.35d5dd922109106b - 02d1dd598b12b6fe.25e451392e877e1a.1b145a73a0e225aa.ad50f1fa51f1350a -@@ -32166,9 +32166,9 @@ VROUNDSS_0x4(reg) - 7f183ee8adba8361.56c4d5bc5eb873d7.53c1fa9c8d1a37de.35d5dd922109106b - 02d1dd598b12b6fe.25e451392e877e1a.1b145a73a0e225aa.ad50f1fa51f1350a - 7fd2b88e337361be.87a7b94fd0eda106.f0c83818702dad03.8a48f4c607aa557c -- 0000000000000000.0000000000000000.f0c83818702dad03.8a48f4c651f1350a -- e2e3b43972be7487 --VROUNDSS_0x4(mem) -+ 5266caf5416ac04f.57db8aeb63f59ac6.2c298ff997870a96.a78a61e15e402bed -+ 0000000000000000 -+VPTEST_128_1(mem) - before - 151d6ab96030ec79.d6d80ff952820f5a.734b3ff900ab2287.2c825b80b37d7a0e - 1e04fd4d44a24fed.697584060147898e.b5c25466c51cf874.4c20981b609a3718 -@@ -32179,10 +32179,10 @@ VROUNDSS_0x4(mem) - 151d6ab96030ec79.d6d80ff952820f5a.734b3ff900ab2287.2c825b80b37d7a0e - 1e04fd4d44a24fed.697584060147898e.b5c25466c51cf874.4c20981b609a3718 - d866ebe138215810.66892488eb466b95.fb0d451cce53d7ba.e8504335396a7d60 -- 0000000000000000.0000000000000000.f0c83818702dad03.8a48f4c680000000 -- 0590cf96e1559858 -+ 1e0daf615bb8c40d.2860eaebac09f11b.1ff88f09365d7a84.5d5c563adb7a8991 -+ 0000000000000000 - --VROUNDSS_0x4(reg) -+VPTEST_128_1(reg) - before - 3d3aaab6e888e360.cdc7c5bac7734f11.0d46d59bdf1f56cd.ff4fac181a449eff - 61a5e1048b9da956.c25eaad6985fb447.7086de042011d757.75de1a359516fe57 -@@ -32193,9 +32193,9 @@ VROUNDSS_0x4(reg) - 3d3aaab6e888e360.cdc7c5bac7734f11.0d46d59bdf1f56cd.ff4fac181a449eff - 61a5e1048b9da956.c25eaad6985fb447.7086de042011d757.75de1a359516fe57 - cd1c72ed662224e6.d79fd9a3eb87b0dc.ac6e02920c6db064.5f70544cc3df57b7 -- 0000000000000000.0000000000000000.ac6e02920c6db064.5f70544c80000000 -- fbd11d18ab83e442 --VROUNDSS_0x4(mem) -+ ddec58de16a391bb.ea56ce0bdbf8fffc.1f483eb23ebe1da1.97d3d749c1aa664c -+ 0000000000000000 -+VPTEST_128_1(mem) - before - 6537a4a59c7690c4.ed618f4137ab2c82.d54f05fc85bd5dd2.23618dce529159ba - b2d1e7dcb09024fe.59c7138463c630e6.7555fa6104e2858b.1605eb54e671a15a -@@ -32206,10 +32206,10 @@ VROUNDSS_0x4(mem) - 6537a4a59c7690c4.ed618f4137ab2c82.d54f05fc85bd5dd2.23618dce529159ba - b2d1e7dcb09024fe.59c7138463c630e6.7555fa6104e2858b.1605eb54e671a15a - be6b62aa04dc5d1e.7d6ae0123980da94.a7352a2674733453.528055af93ea312d -- 0000000000000000.0000000000000000.ac6e02920c6db064.5f70544c529159ba -- 192a3993aed9171f -+ 66d191f9b367f64d.b595f35753666638.45bc0f37f27d2655.341ec54af78944e1 -+ 0000000000000000 - --VROUNDSS_0x4(reg) -+VPTEST_128_1(reg) - before - 5bf2acf55366e696.84cef1b7da3cadba.5c9647bf4d030f7d.2cb427809a0b16bd - 57c01bdc83bdedf0.f530fdcf94673c8f.d0b7d8b6c4e41310.38eaeeed872ac1b9 -@@ -32220,9 +32220,9 @@ VROUNDSS_0x4(reg) - 5bf2acf55366e696.84cef1b7da3cadba.5c9647bf4d030f7d.2cb427809a0b16bd - 57c01bdc83bdedf0.f530fdcf94673c8f.d0b7d8b6c4e41310.38eaeeed872ac1b9 - 6ae180b5d96967da.95c1312cfef460f8.6c45a3a85393ac9c.4529de6ad6e5e372 -- 0000000000000000.0000000000000000.6c45a3a85393ac9c.4529de6a80000000 -- d3f72e45075f7bd2 --VROUNDSS_0x4(mem) -+ eea1d9eaf1f691ff.404e09bc33f0d423.8c8ca201979f16ce.303f75e3a2483817 -+ 0000000000000000 -+VPTEST_128_1(mem) - before - 0b1c857a223769cf.404b21e868f1a70c.d2a3026a5067553a.8bd8d32d2b918f51 - b47bf6700edcbe3c.bc2d541cd9e5e4ac.278b972270639f69.c7743199acf751d3 -@@ -32233,10 +32233,10 @@ VROUNDSS_0x4(mem) - 0b1c857a223769cf.404b21e868f1a70c.d2a3026a5067553a.8bd8d32d2b918f51 - b47bf6700edcbe3c.bc2d541cd9e5e4ac.278b972270639f69.c7743199acf751d3 - aae0fe12e8583642.be916ef0e15e858c.1bd443d0b0f26edd.9baeb8afb55c99fd -- 0000000000000000.0000000000000000.6c45a3a85393ac9c.4529de6a00000000 -- 7a27338dd055a900 -+ c917184bcbb98c10.a2c56cd21be9c658.8a4885612b1f7dc1.62d065dde24da27e -+ 0000000000000000 - --VROUNDSS_0x5(reg) -+VPTEST_128_2(reg) - before - 3eff1e2d1b00ea2f.edebc009d40a7dd0.c413492d2411e3bb.50b5d6bffdf78943 - 09a422285edba1b8.f22a72371f58c4ae.81c8016d98631762.49e5b4d743854e8c -@@ -32245,11 +32245,11 @@ VROUNDSS_0x5(reg) - fe046eb5e2ed49d5 - after - 3eff1e2d1b00ea2f.edebc009d40a7dd0.c413492d2411e3bb.50b5d6bffdf78943 -- 09a422285edba1b8.f22a72371f58c4ae.81c8016d98631762.49e5b4d743854e8c -+ 0000000000000000.0000000000000000.332f90fd11699ff8.51a5999619d588cb - 39623bea35700a47.b39eaac1c6ae1fd7.332f90fd11699ff8.51a5999619d588cb -- 0000000000000000.0000000000000000.332f90fd11699ff8.51a5999643858000 -- fe046eb5e2ed49d5 --VROUNDSS_0x5(mem) -+ 288566df3d4e6087.0e15e593e7184877.3796f24c2db1b72a.44c004e79af4f22a -+ 0000000000000001 -+VPTEST_128_2(mem) - before - 5b3c54ee0ecc48f9.33589d7312fee025.de599e9a9ea3fcba.e84724c388c79ba4 - 3633337d3a9eadc2.b728de134f0ec5cc.ff3651c0065af6cb.a49021cfbd368611 -@@ -32258,12 +32258,12 @@ VROUNDSS_0x5(mem) - aceab3aa9312cec6 - after - 5b3c54ee0ecc48f9.33589d7312fee025.de599e9a9ea3fcba.e84724c388c79ba4 -- 3633337d3a9eadc2.b728de134f0ec5cc.ff3651c0065af6cb.a49021cfbd368611 -- 6db6864e806e325c.0e412529900a4c29.4d7a7af33c49f3d6.c6bbe5dc698ab51e -- 0000000000000000.0000000000000000.332f90fd11699ff8.51a5999680000000 -- aceab3aa9312cec6 -+ 0000000000000000.0000000000000000.21a66165615c0345.17b8db3c7738645b -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ db91c94dff4894f1.96ef6c22727cb2e8.a3f0961d5b7daf08.aa156d57274f6476 -+ 0000000000000040 - --VROUNDSS_0x5(reg) -+VPTEST_128_2(reg) - before - 2885b5434b5e30b9.5c907866d0398eb0.a97eb16b90f230b4.df631f2c7f01e68d - 79346e8ce8c0c6fd.cb7f1086124cddc3.a439ef6f87f8053a.dca0930ac5e15490 -@@ -32272,11 +32272,11 @@ VROUNDSS_0x5(reg) - f00b45bf78253c4a - after - 2885b5434b5e30b9.5c907866d0398eb0.a97eb16b90f230b4.df631f2c7f01e68d -- 79346e8ce8c0c6fd.cb7f1086124cddc3.a439ef6f87f8053a.dca0930ac5e15490 -+ 0000000000000000.0000000000000000.e36e2299f2186b26.75746ea5492ab43e - fd41daf308c3cb3b.06290c97de8d3d57.e36e2299f2186b26.75746ea5492ab43e -- 0000000000000000.0000000000000000.e36e2299f2186b26.75746ea5c5e15800 -- f00b45bf78253c4a --VROUNDSS_0x5(mem) -+ 0ff9f6e346f37d22.e75be88653096a97.c36746576ee09f23.88a92ae826e7c2c3 -+ 0000000000000001 -+VPTEST_128_2(mem) - before - 886839165ceedcff.0ba8bcc83fdc165b.4ce220408acb20b0.9e71581496dcdcdd - 2e8a84daed515f10.4c9a2a0e8f0bd295.0f8830b0a1e01ace.d1d8533c06966002 -@@ -32285,12 +32285,12 @@ VROUNDSS_0x5(mem) - 1232926f23bbe4a0 - after - 886839165ceedcff.0ba8bcc83fdc165b.4ce220408acb20b0.9e71581496dcdcdd -- 2e8a84daed515f10.4c9a2a0e8f0bd295.0f8830b0a1e01ace.d1d8533c06966002 -- bc3fa2f5485781a7.301b3b21d00cef7a.0e1a95c1b452151c.b8e8323b5b9c653b -- 0000000000000000.0000000000000000.e36e2299f2186b26.75746ea580000000 -- 1232926f23bbe4a0 -+ 0000000000000000.0000000000000000.b31ddfbf7534df4f.618ea7eb69232322 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0f510d54890efdf0.1177ec6da169a7b7.2363ca61de30ccc6.afedf47d317a2837 -+ 0000000000000040 - --VROUNDSS_0x5(reg) -+VPTEST_128_2(reg) - before - 3d050a7bceebd622.048d43e4ca819118.4df9375f9bb037f7.2c314b7b3c83fcfa - 8cb0570fcd963a6b.75bfbf8f2abcf74b.3eee1a615d6cdae7.034e94fbe95961e1 -@@ -32299,11 +32299,11 @@ VROUNDSS_0x5(reg) - fb7efa18e460258d - after - 3d050a7bceebd622.048d43e4ca819118.4df9375f9bb037f7.2c314b7b3c83fcfa -- 8cb0570fcd963a6b.75bfbf8f2abcf74b.3eee1a615d6cdae7.034e94fbe95961e1 -+ 0000000000000000.0000000000000000.42a390e1802ace32.868822cd01bdb7aa - 5b807595bc494c24.40b3fd43c2ccebb4.42a390e1802ace32.868822cd01bdb7aa -- 0000000000000000.0000000000000000.42a390e1802ace32.868822cde95961e1 -- fb7efa18e460258d --VROUNDSS_0x5(mem) -+ 06c1607b388f47fc.3f3479ebb0bc2a80.b3629549a3754d86.8fa970dea1bbba7f -+ 0000000000000001 -+VPTEST_128_2(mem) - before - a6d33c68e7b7b5ff.e9bf152cdcf5689d.4f0fb073109970da.ef7725075fd9938c - 6d73b2bbc6cd2502.60c58e134505ebb3.4c111dc7fd6e79ef.50303d8652e3def2 -@@ -32312,12 +32312,12 @@ VROUNDSS_0x5(mem) - f02387c18a582b1b - after - a6d33c68e7b7b5ff.e9bf152cdcf5689d.4f0fb073109970da.ef7725075fd9938c -- 6d73b2bbc6cd2502.60c58e134505ebb3.4c111dc7fd6e79ef.50303d8652e3def2 -- 2a2cd9fb9bad33c1.c721c99e0e4d0ceb.13043cd3944701eb.34d7d832181e6864 -- 0000000000000000.0000000000000000.42a390e1802ace32.868822cd5fd9938c -- f02387c18a582b1b -+ 0000000000000000.0000000000000000.b0f04f8cef668f25.1088daf8a0266c73 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ bac82c1685639969.791dc138d45906f1.7eb58983f030c3f9.f5baf2774c166e8e -+ 0000000000000040 - --VROUNDSD_0x0(reg) -+VPTEST_256_1(reg) - before - 815f947c6f6fddb7.f91427f79dfc1326.d406734e32b41670.6aef81c32d367c46 - 05ba131497e7be10.c3dc468a02825f23.3328d94ac5ea7815.b3809e7f6865e7fd -@@ -32328,9 +32328,9 @@ VROUNDSD_0x0(reg) - 815f947c6f6fddb7.f91427f79dfc1326.d406734e32b41670.6aef81c32d367c46 - 05ba131497e7be10.c3dc468a02825f23.3328d94ac5ea7815.b3809e7f6865e7fd - d68002f69d4d0bd0.f4ec06bbcd04378d.f2cff1992888678c.35335ea4bdc7c24b -- 0000000000000000.0000000000000000.f2cff1992888678c.8000000000000000 -- 542db5d52259b35b --VROUNDSD_0x0(mem) -+ 51fc5d8c1d2cffa3.6810e1761c8b588f.6c46b6a7f8182080.ccd33c1c476ac75c -+ 0000000000000000 -+VPTEST_256_1(mem) - before - a90d43ba6ba14175.d27c1e44b410d736.fb1455a70b257e56.ffdb25e1d029df9e - a73f64b63d4d2ed5.b54a4288fd86cf35.89c3de3ab5de640e.06d838b24d44df91 -@@ -32341,10 +32341,10 @@ VROUNDSD_0x0(mem) - a90d43ba6ba14175.d27c1e44b410d736.fb1455a70b257e56.ffdb25e1d029df9e - a73f64b63d4d2ed5.b54a4288fd86cf35.89c3de3ab5de640e.06d838b24d44df91 - 2a8e93b7b56936a8.56b3c6c69519234b.eeeaf61c37c0c7e2.dc8aed850af75e06 -- 0000000000000000.0000000000000000.f2cff1992888678c.ffdb25e1d029df9e -- 693d2ae6b553c325 -+ 0ec84ca8ee02151a.1103a56917550e25.06551b37acd963ff.df3d3fc8a3cd96a8 -+ 0000000000000000 - --VROUNDSD_0x0(reg) -+VPTEST_256_1(reg) - before - d8d6aa4bdc142326.2fb70c7505238656.4286dcdd20c7cd6e.add0c7793034f390 - 8653bc63b39cf05a.69294d0b15d84689.4587658e4bfa9cd3.bf2778cce0de35c2 -@@ -32355,9 +32355,9 @@ VROUNDSD_0x0(reg) - d8d6aa4bdc142326.2fb70c7505238656.4286dcdd20c7cd6e.add0c7793034f390 - 8653bc63b39cf05a.69294d0b15d84689.4587658e4bfa9cd3.bf2778cce0de35c2 - d1025b9ad678676a.98e88d543b2e11de.76543ee8357bb600.1826aa1ed8e2e3c1 -- 0000000000000000.0000000000000000.76543ee8357bb600.8000000000000000 -- 0e4a7d6c0d2975d3 --VROUNDSD_0x0(mem) -+ 132d835ce233c305.97c1473d9230a382.3137625779d559a0.9498d75a324cb9b8 -+ 0000000000000000 -+VPTEST_256_1(mem) - before - 640917408384d140.a9213016725942d5.447ff7b337eab7a1.d27dcd47b494bf5f - 719f21c2b0698a29.f02a5e3223771e87.7af01aa045690a66.b5727b25814424eb -@@ -32368,10 +32368,10 @@ VROUNDSD_0x0(mem) - 640917408384d140.a9213016725942d5.447ff7b337eab7a1.d27dcd47b494bf5f - 719f21c2b0698a29.f02a5e3223771e87.7af01aa045690a66.b5727b25814424eb - 11d817deb1e55bba.42940a1e901893c6.15de2bf2d8b858fe.3662695b7c72c6ee -- 0000000000000000.0000000000000000.76543ee8357bb600.d27dcd47b494bf5f -- 8162f2846f76ac0a -+ 1f827680a1030120.fcaa2f4456c8df3f.f017a6940de35c94.b199925742a9df14 -+ 0000000000000000 - --VROUNDSD_0x0(reg) -+VPTEST_256_1(reg) - before - 040b854d9e64687c.7968b9959dd03887.7bbac91210143c9d.e965077100f7d355 - 95de47206bff5016.f9555c07c056bc1a.190ed4f35b87e78d.db95ca77ccff796c -@@ -32382,9 +32382,9 @@ VROUNDSD_0x0(reg) - 040b854d9e64687c.7968b9959dd03887.7bbac91210143c9d.e965077100f7d355 - 95de47206bff5016.f9555c07c056bc1a.190ed4f35b87e78d.db95ca77ccff796c - 8f28356873d3a082.7d16dbc426a34906.33f34d53d2ad1cbb.a1726c918d070a06 -- 0000000000000000.0000000000000000.33f34d53d2ad1cbb.db95ca77ccff796c -- 1d673ab26049db72 --VROUNDSD_0x0(mem) -+ 50354a91526d946f.e077b2b6edc39a77.25b52f9e121316d2.19ca68ab601c414f -+ 0000000000000000 -+VPTEST_256_1(mem) - before - 8b175e90aa9b949c.33508207a2586787.fd445ecb2ec16c98.4ba07640b644127f - 3da45132591c27f9.93c7d93702215777.b1495aee07a97a95.01001ea55acc4c6d -@@ -32395,10 +32395,10 @@ VROUNDSD_0x0(mem) - 8b175e90aa9b949c.33508207a2586787.fd445ecb2ec16c98.4ba07640b644127f - 3da45132591c27f9.93c7d93702215777.b1495aee07a97a95.01001ea55acc4c6d - 10db8d858adb51b4.cee44c8b0b539dea.d952220b9487819c.a320233a9b38ff49 -- 0000000000000000.0000000000000000.33f34d53d2ad1cbb.4ba07640b644127f -- 1bd4369f63eac37a -+ e188907358e1cefa.3ef5d5705c7a788d.4f2a320ef0683dd7.8d4d8269151369bf -+ 0000000000000000 - --VROUNDSD_0x1(reg) -+VPTEST_256_2(reg) - before - a9ff3b4921474c27.8a77d5eae03c5af6.414472538e23220b.f19e07e337576a72 - 931b8dd2ecb83e71.e873d9d53df7b0d5.311e1f9f40d9d812.997a1c768661c49a -@@ -32407,11 +32407,11 @@ VROUNDSD_0x1(reg) - 5476b3dcb8933416 - after - a9ff3b4921474c27.8a77d5eae03c5af6.414472538e23220b.f19e07e337576a72 -- 931b8dd2ecb83e71.e873d9d53df7b0d5.311e1f9f40d9d812.997a1c768661c49a - 357329a560c9d705.d84a16208c1e8dc2.6ccfd6bf0b28d64b.248aedb4f890067b -- 0000000000000000.0000000000000000.6ccfd6bf0b28d64b.bff0000000000000 -- 5476b3dcb8933416 --VROUNDSD_0x1(mem) -+ 357329a560c9d705.d84a16208c1e8dc2.6ccfd6bf0b28d64b.248aedb4f890067b -+ eb5509301805508f.34c60ab7e8beadea.4ca295218d9d5764.6f9af687aaf3ed40 -+ 0000000000000001 -+VPTEST_256_2(mem) - before - b0e9a1a03c7e9928.110b2bdeb0f8e8ba.d9b430866de3cb79.2ee5563062c39909 - 5fc13bbe55bfd6a3.03e38b1bc52ed933.a3e004793897a49a.6fe218582526d6e6 -@@ -32420,12 +32420,12 @@ VROUNDSD_0x1(mem) - fb332e9f1d38ca81 - after - b0e9a1a03c7e9928.110b2bdeb0f8e8ba.d9b430866de3cb79.2ee5563062c39909 -- 5fc13bbe55bfd6a3.03e38b1bc52ed933.a3e004793897a49a.6fe218582526d6e6 -- 3dc8fd221d63a7b3.1d272353f23460a5.6f16037c65e8f47a.69e6d40572534aa6 -- 0000000000000000.0000000000000000.6ccfd6bf0b28d64b.0000000000000000 -- fb332e9f1d38ca81 -+ 4f165e5fc38166d7.eef4d4214f071745.264bcf79921c3486.d11aa9cf9d3c66f6 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 26cb63b7b075ca83.ba24f1f3d495b9bd.1721a87b0fe17744.793d87a3e6d532f5 -+ 0000000000000040 - --VROUNDSD_0x1(reg) -+VPTEST_256_2(reg) - before - 4c14c463b2094ef4.f696ea6b2a01f940.3825ef6506de1f26.78cf6f63528fe825 - c62b455c41d3fafa.8af40c29a913f115.f2781b16249acf8e.6eead41e4bfd0449 -@@ -32434,11 +32434,11 @@ VROUNDSD_0x1(reg) - 66c790828f40b1fb - after - 4c14c463b2094ef4.f696ea6b2a01f940.3825ef6506de1f26.78cf6f63528fe825 -- c62b455c41d3fafa.8af40c29a913f115.f2781b16249acf8e.6eead41e4bfd0449 - c6c6aef767220940.bcb347de46b86e2f.43687173cc55059e.d53f539a163787db -- 0000000000000000.0000000000000000.43687173cc55059e.6eead41e4bfd0449 -- 66c790828f40b1fb --VROUNDSD_0x1(mem) -+ c6c6aef767220940.bcb347de46b86e2f.43687173cc55059e.d53f539a163787db -+ a82ff99fbf83b872.699d16741ffc2bba.8940ebe6979cfd05.899a69c2ce492d08 -+ 0000000000000001 -+VPTEST_256_2(mem) - before - 489246c57628d0e1.c8b324bfe681423b.6c80f6d850e9e5e1.1f4d87dd23f9f26c - 0bc607799e0b45e6.829e2ac577a8e548.a32661f7f48d58d1.60db40c30cfb2182 -@@ -32447,12 +32447,12 @@ VROUNDSD_0x1(mem) - c582f247084b608c - after - 489246c57628d0e1.c8b324bfe681423b.6c80f6d850e9e5e1.1f4d87dd23f9f26c -- 0bc607799e0b45e6.829e2ac577a8e548.a32661f7f48d58d1.60db40c30cfb2182 -- 8b304d8924f7ce35.323c071c0f85db44.e95cd5bb27f43fb5.aa361204ed2bc6f1 -- 0000000000000000.0000000000000000.43687173cc55059e.0000000000000000 -- c582f247084b608c -+ b76db93a89d72f1e.374cdb40197ebdc4.937f0927af161a1e.e0b27822dc060d93 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ a39d96e223f825fb.34d8b83049a361dc.1aeecd12062858ba.57aaf90c62171c66 -+ 0000000000000040 - --VROUNDSD_0x1(reg) -+VPTEST_256_2(reg) - before - 4e0bf8217b51ce10.31d75c6eb7180763.e4c0376dc28fb2bb.12a7c6e7ad375d0c - 4f92070655b7a29d.10ab1e1afe652f9a.9e3e824015d30b8f.ad553a25372d0ad6 -@@ -32461,11 +32461,11 @@ VROUNDSD_0x1(reg) - e70c599641eb60c0 - after - 4e0bf8217b51ce10.31d75c6eb7180763.e4c0376dc28fb2bb.12a7c6e7ad375d0c -- 4f92070655b7a29d.10ab1e1afe652f9a.9e3e824015d30b8f.ad553a25372d0ad6 - 25611b63350817e0.1ce455d311eb5acb.be9f9413dffea801.c7c2a7bac0141d45 -- 0000000000000000.0000000000000000.be9f9413dffea801.bff0000000000000 -- e70c599641eb60c0 --VROUNDSD_0x1(mem) -+ 25611b63350817e0.1ce455d311eb5acb.be9f9413dffea801.c7c2a7bac0141d45 -+ 2ac530a2b5d16a85.31507e830eb44424.a02f6a53bb99c5c0.3bbb889165fa5084 -+ 0000000000000001 -+VPTEST_256_2(mem) - before - a68196b671f10824.bb094331719dd737.2ab9161811cea9ce.a03afe6d45329d76 - 53e6bcdb101a05de.357b4f7a06f899a3.e5ed987d354545f8.190c4ecb1a546dcf -@@ -32474,12 +32474,12 @@ VROUNDSD_0x1(mem) - fb2279be706b0469 - after - a68196b671f10824.bb094331719dd737.2ab9161811cea9ce.a03afe6d45329d76 -- 53e6bcdb101a05de.357b4f7a06f899a3.e5ed987d354545f8.190c4ecb1a546dcf -- cc0645f23b721317.f26550eb0f6fed75.3cb6809d9623d3cc.69f055dbd68c7178 -- 0000000000000000.0000000000000000.be9f9413dffea801.bff0000000000000 -- fb2279be706b0469 -+ 597e69498e0ef7db.44f6bcce8e6228c8.d546e9e7ee315631.5fc50192bacd6289 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ ecafafe80d03eefe.4f1542ef288d0f58.0de14b6651770f76.eb340f081464e51d -+ 0000000000000040 - --VROUNDSD_0x2(reg) -+VTESTPS_128_1(reg) - before - f4078d69872a0b09.8eab76a7a3dc52bc.a8d522f2efdf3bf8.333973c3824ab723 - 342f4975f42f36a9.90c7141d1806fa80.5af2eb60fdefac02.898c76a144aa85ff -@@ -32490,9 +32490,9 @@ VROUNDSD_0x2(reg) - f4078d69872a0b09.8eab76a7a3dc52bc.a8d522f2efdf3bf8.333973c3824ab723 - 342f4975f42f36a9.90c7141d1806fa80.5af2eb60fdefac02.898c76a144aa85ff - 15e6a84e5405c0f4.cccf0735888fa374.bfb899a5f04b9f22.eda5cfeab3a23635 -- 0000000000000000.0000000000000000.bfb899a5f04b9f22.8000000000000000 -- 4b5774700a8b3062 --VROUNDSD_0x2(mem) -+ f577a7604339e697.208ecada108208c5.3472282d647f5004.394ffa8bec3e86f2 -+ 0000000000000000 -+VTESTPS_128_1(mem) - before - fd89b8862a94f2b0.2f3040175b56e43d.66d2d9faccebe69e.156e9464f415fb53 - 2cb142b867668608.1e5b71e03be8f693.7b65b080d7d7f92c.bef6dab73c9cdbbb -@@ -32503,10 +32503,10 @@ VROUNDSD_0x2(mem) - fd89b8862a94f2b0.2f3040175b56e43d.66d2d9faccebe69e.156e9464f415fb53 - 2cb142b867668608.1e5b71e03be8f693.7b65b080d7d7f92c.bef6dab73c9cdbbb - b59b8ef1de0ba897.204535257c7c5744.3c15cc594d51fd9a.8b57f590d99d2de9 -- 0000000000000000.0000000000000000.bfb899a5f04b9f22.3ff0000000000000 -- 01d49a8881421647 -+ 7212181faa921589.8f3a8854bc9d44fd.83aca76f4b66ae15.d8dde15d67a62c89 -+ 0000000000000000 - --VROUNDSD_0x2(reg) -+VTESTPS_128_1(reg) - before - 62881d7fc3fd25ce.40e45d2de704890a.c88667d897d7f96a.2df7bfafed21c7c9 - 564565adca6496ca.fcdbd807b36fc045.2875cc1ca8b7b136.17c290064e8e05e1 -@@ -32517,9 +32517,9 @@ VROUNDSD_0x2(reg) - 62881d7fc3fd25ce.40e45d2de704890a.c88667d897d7f96a.2df7bfafed21c7c9 - 564565adca6496ca.fcdbd807b36fc045.2875cc1ca8b7b136.17c290064e8e05e1 - 3b566d7e3102a4e8.80c4059927de7666.0952b58e8cc8a90e.1bd8945e8ab9238a -- 0000000000000000.0000000000000000.0952b58e8cc8a90e.3ff0000000000000 -- e4192ac5057bf33e --VROUNDSD_0x2(mem) -+ 6c08345e95648cd4.a96b60cf615e669b.c86a1d99de961d9e.160749a5beafdfef -+ 0000000000000000 -+VTESTPS_128_1(mem) - before - 61dbb3ac7c2a1ba0.45a7b3b991158a39.539c65957dfa4d0d.c20a00a93aae4991 - 691960453ec71543.227fe8fbc2a1dac4.5a2291d896bee6eb.517c5b2b3d9b6893 -@@ -32530,10 +32530,10 @@ VROUNDSD_0x2(mem) - 61dbb3ac7c2a1ba0.45a7b3b991158a39.539c65957dfa4d0d.c20a00a93aae4991 - 691960453ec71543.227fe8fbc2a1dac4.5a2291d896bee6eb.517c5b2b3d9b6893 - d99fad7c685e9b53.5edccd91c394b721.9acb5f82c8b6ef5f.d20c298983e9b752 -- 0000000000000000.0000000000000000.0952b58e8cc8a90e.c20a00a93aa80000 -- 1bbb0e8d45dad4b1 -+ 8b39173d15fc6afc.570a61e5317b5ffb.ef614b8030ef2296.a1086630a7257277 -+ 0000000000000040 - --VROUNDSD_0x2(reg) -+VTESTPS_128_1(reg) - before - 9a701d0afa941baa.5cb3197461ac3e69.68549d65a7e10bff.35b1d1bfe9753cbb - 7b74901561e0810f.28d82f0d697ad2c6.ec087e7bc253fad8.48876e2a1052f8fa -@@ -32544,9 +32544,9 @@ VROUNDSD_0x2(reg) - 9a701d0afa941baa.5cb3197461ac3e69.68549d65a7e10bff.35b1d1bfe9753cbb - 7b74901561e0810f.28d82f0d697ad2c6.ec087e7bc253fad8.48876e2a1052f8fa - 1a1362191749428b.cb75d6f54972e340.417001951d5c6633.04af9dadc1941381 -- 0000000000000000.0000000000000000.417001951d5c6633.48876e2a1052f8fa -- e724a1aa2e755611 --VROUNDSD_0x2(mem) -+ d3998f82b75b9ccb.205688161ca12d03.c1d9211e54888cbb.45f5da331646497a -+ 0000000000000040 -+VTESTPS_128_1(mem) - before - c6096efe222cf574.025213bbdea3c97a.0547c35efe136b3a.ca8fda820464a81e - be71be191077e3cc.038aea3327ac0545.551402b70cd25b12.b6dd282dc97bf505 -@@ -32557,10 +32557,10 @@ VROUNDSD_0x2(mem) - c6096efe222cf574.025213bbdea3c97a.0547c35efe136b3a.ca8fda820464a81e - be71be191077e3cc.038aea3327ac0545.551402b70cd25b12.b6dd282dc97bf505 - ab260ce81463dc48.328c11532f038ed7.ec89c10f62ecb7b7.e311088b3e59b01e -- 0000000000000000.0000000000000000.417001951d5c6633.ca8fda820464a81e -- 6c566b10a99c6096 -+ 69f5d45749fb9c12.eba6838891329ede.a6717d511b6d3b54.ab757508ff8b1515 -+ 0000000000000000 - --VROUNDSD_0x3(reg) -+VTESTPS_128_2(reg) - before - 8001e60fd718cc4c.d3a99253cc4bde56.8a223c3eeac87203.5f99b169535fa516 - 44bfe372268b96e4.c710c3c6b8605f41.6b4d38e2d54e46f5.f2ced84327d0af28 -@@ -32569,11 +32569,11 @@ VROUNDSD_0x3(reg) - 67a9e2955f91e9fb - after - 8001e60fd718cc4c.d3a99253cc4bde56.8a223c3eeac87203.5f99b169535fa516 -- 44bfe372268b96e4.c710c3c6b8605f41.6b4d38e2d54e46f5.f2ced84327d0af28 -+ 0000000000000000.0000000000000000.e97274deee52555e.3dda71cbb2cc16b7 - 15df5ca33182fa09.20f4e29e2945dbff.e97274deee52555e.3dda71cbb2cc16b7 -- 0000000000000000.0000000000000000.e97274deee52555e.f2ced84327d0af28 -- 67a9e2955f91e9fb --VROUNDSD_0x3(mem) -+ 4dac4f1095893368.b9236ac63c060dbb.62dfeba0d25fdcea.1b89f5ed115d95ef -+ 0000000000000001 -+VTESTPS_128_2(mem) - before - ff05b2b0b974ce07.4971b724ed2b7fac.7067da2a0db0b2a2.31df99921d021746 - be68e3283a110041.657c914bd6f41882.208dabb6b74e86e0.b2bd7a226ac5421e -@@ -32582,12 +32582,12 @@ VROUNDSD_0x3(mem) - f88929b87751b843 - after - ff05b2b0b974ce07.4971b724ed2b7fac.7067da2a0db0b2a2.31df99921d021746 -- be68e3283a110041.657c914bd6f41882.208dabb6b74e86e0.b2bd7a226ac5421e -- 7f9ff1ebff743bd3.fe17d7f1eb703a96.a4605b5656ed45a0.40c68abb5537981d -- 0000000000000000.0000000000000000.e97274deee52555e.0000000000000000 -- f88929b87751b843 -+ 0000000000000000.0000000000000000.8f9825d5f24f4d5d.ce20666de2fde8b9 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 207656e323a93ae9.6e8f8782c92c2293.daae65f60797aa0f.3946c6c97be156f0 -+ 0000000000000041 - --VROUNDSD_0x3(reg) -+VTESTPS_128_2(reg) - before - d8dbaff4e612f9c1.7bb990fec3bdbab0.122f9c6a0bb30d26.9c424582e65a7258 - 378854e964b15617.6e341a27fabb7654.464512154d9134fa.c8e777e60d4259a8 -@@ -32596,11 +32596,11 @@ VROUNDSD_0x3(reg) - 583ad35c564a1d77 - after - d8dbaff4e612f9c1.7bb990fec3bdbab0.122f9c6a0bb30d26.9c424582e65a7258 -- 378854e964b15617.6e341a27fabb7654.464512154d9134fa.c8e777e60d4259a8 -+ 0000000000000000.0000000000000000.661ce5ef2c53d6bc.386a770f9b5a1a2a - 6fdb15048bb90bf0.d3b3704ae4af2b00.661ce5ef2c53d6bc.386a770f9b5a1a2a -- 0000000000000000.0000000000000000.661ce5ef2c53d6bc.c8e777e60d4259a8 -- 583ad35c564a1d77 --VROUNDSD_0x3(mem) -+ de21edaffab653f9.87010e539ea695e1.ceff126544842d18.ca97c2e7a9ae720b -+ 0000000000000001 -+VTESTPS_128_2(mem) - before - bf1f2658bb3bd799.dea6d8584a356cdd.67eb712e44ab7022.da3b94e130b076b9 - dc1138c9f68c5b9e.cdb6d26919c19049.4d3d13c7f0cb78f1.e61c67d18c64ed4c -@@ -32609,12 +32609,12 @@ VROUNDSD_0x3(mem) - a294a08a5c24bb66 - after - bf1f2658bb3bd799.dea6d8584a356cdd.67eb712e44ab7022.da3b94e130b076b9 -- dc1138c9f68c5b9e.cdb6d26919c19049.4d3d13c7f0cb78f1.e61c67d18c64ed4c -- 89de839a234a66b1.059dd75003e6fce9.16c3720bc1116877.4eee879ff52bcd7c -- 0000000000000000.0000000000000000.661ce5ef2c53d6bc.da3b94e130b076b9 -- a294a08a5c24bb66 -+ 0000000000000000.0000000000000000.98148ed1bb548fdd.25c46b1ecf4f8946 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ a35085b75d80b400.e4a7e478a330eb68.9f4909e4d189fde2.6efdf1b9079253f6 -+ 0000000000000040 - --VROUNDSD_0x3(reg) -+VTESTPS_128_2(reg) - before - 4601907e936d4077.0634b90cc13a00b4.c41ff44d962c9a73.c29b55403c3ff25e - b58ebd0145f920d6.8f569b856a8407fb.0253033b776645b6.5c84d1091f400517 -@@ -32623,11 +32623,11 @@ VROUNDSD_0x3(reg) - 8dc83d33ac794064 - after - 4601907e936d4077.0634b90cc13a00b4.c41ff44d962c9a73.c29b55403c3ff25e -- b58ebd0145f920d6.8f569b856a8407fb.0253033b776645b6.5c84d1091f400517 -+ 0000000000000000.0000000000000000.fb8d0daee26828dc.49d2f82d9597f038 - 4d88237f1155952e.1882a80e746b8501.fb8d0daee26828dc.49d2f82d9597f038 -- 0000000000000000.0000000000000000.fb8d0daee26828dc.5c84d1091f400517 -- 8dc83d33ac794064 --VROUNDSD_0x3(mem) -+ 693bbf64900cdb2c.7e835a94fcfa36f2.091a0f1274c07e91.654f4897bb516fed -+ 0000000000000001 -+VTESTPS_128_2(mem) - before - 9b0951ed851b1dc6.65f38c1d61ab307b.9d272f011e3ed5f9.894603d3c9fa8483 - 6cde02b16144c342.9cfc86141dbdcec8.5138a243f5421f42.d75ce75e7ca1765b -@@ -32636,12 +32636,12 @@ VROUNDSD_0x3(mem) - 2e1a06ebe39d290b - after - 9b0951ed851b1dc6.65f38c1d61ab307b.9d272f011e3ed5f9.894603d3c9fa8483 -- 6cde02b16144c342.9cfc86141dbdcec8.5138a243f5421f42.d75ce75e7ca1765b -- dc12cb6b5dffee02.6ca1a9b762cef2bf.768330449d12d0fa.4faab61d29418fc8 -- 0000000000000000.0000000000000000.fb8d0daee26828dc.8000000000000000 -- 2e1a06ebe39d290b -+ 0000000000000000.0000000000000000.62d8d0fee1c12a06.76b9fc2c36057b7c -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ c772280794585932.302ff170cc6ad70b.e8d453f233bba44d.4e7a6d7e6d660c74 -+ 0000000000000040 - --VROUNDSD_0x4(reg) -+VTESTPS_128_3(reg) - before - 4cd47fd22871223b.09cb9671225cc100.43f35badf61eba59.83f78938d2485667 - 04f5d39ed76e32ad.7ee78f962416e295.0337e2d97d76d755.23b84d0297c5a373 -@@ -32652,9 +32652,9 @@ VROUNDSD_0x4(reg) - 4cd47fd22871223b.09cb9671225cc100.43f35badf61eba59.83f78938d2485667 - 04f5d39ed76e32ad.7ee78f962416e295.0337e2d97d76d755.23b84d0297c5a373 - b2c8febb8d219610.01939160b6927720.ca47825ffcfc6aaa.a4e21b3c9d3f469d -- 0000000000000000.0000000000000000.ca47825ffcfc6aaa.0000000000000000 -- b9a5c6b0de5782fe --VROUNDSD_0x4(mem) -+ b29bfd95e5158a0e.709b17bdf3dc3ecb.f67138ad0f3eaf05.e24270d201c1fd12 -+ 0000000000000040 -+VTESTPS_128_3(mem) - before - 04d59bc2510e928c.60b8cb987cd64a53.a6ca9d98f701f1c2.e100fe2f53c7e111 - a19f6af475f1e8e9.186d6430edf1118d.7feea0dddf0d4c32.e93fd24f63243d7b -@@ -32665,10 +32665,10 @@ VROUNDSD_0x4(mem) - 04d59bc2510e928c.60b8cb987cd64a53.a6ca9d98f701f1c2.e100fe2f53c7e111 - a19f6af475f1e8e9.186d6430edf1118d.7feea0dddf0d4c32.e93fd24f63243d7b - 6bceb033670c4141.3504c4cad5f11c65.d7d19a77c60a0d47.687baf7adce0feee -- 0000000000000000.0000000000000000.ca47825ffcfc6aaa.e100fe2f53c7e111 -- 3f1a75a277a6a2a2 -+ 3e30e769426c59bf.15cae7d0cf63a68a.89400954c906ee2c.bb00911c5a876117 -+ 0000000000000001 - --VROUNDSD_0x4(reg) -+VTESTPS_128_3(reg) - before - 4e155576d2c8fd3a.f58f8d84221cec90.130bcaaf77d2eda6.73076860030dac0e - 453d2f060479ae8c.6eb91d6f2428b5df.8b1267d46aca2b65.70f23485912a0219 -@@ -32679,9 +32679,9 @@ VROUNDSD_0x4(reg) - 4e155576d2c8fd3a.f58f8d84221cec90.130bcaaf77d2eda6.73076860030dac0e - 453d2f060479ae8c.6eb91d6f2428b5df.8b1267d46aca2b65.70f23485912a0219 - 81ddfebdac46f044.84781316649d72d9.d92dbcaa44d79d74.5bcde7b08e69ad78 -- 0000000000000000.0000000000000000.d92dbcaa44d79d74.70f23485912a0219 -- 7082f7c9477ef2e4 --VROUNDSD_0x4(mem) -+ 5c42bf0663ba000d.1299eb65fd86dca9.58a6c59ca0867e7f.1263ffcd17d66958 -+ 0000000000000040 -+VTESTPS_128_3(mem) - before - 50f44b8e3b6c0449.33b86c4fc7611993.f6e722480befb27d.66cb7c181a620c31 - 9086780a0eac5ab2.628b030374c87983.0a3033ababe5ae7e.5ee6df894ff88137 -@@ -32692,10 +32692,10 @@ VROUNDSD_0x4(mem) - 50f44b8e3b6c0449.33b86c4fc7611993.f6e722480befb27d.66cb7c181a620c31 - 9086780a0eac5ab2.628b030374c87983.0a3033ababe5ae7e.5ee6df894ff88137 - 0a04f928dd4bb14c.45077f8f057a5a89.2c3f9a7af8738ddb.9b43e95bdad3193d -- 0000000000000000.0000000000000000.d92dbcaa44d79d74.66cb7c181a620c31 -- 59f8e2d36489a6f7 -+ 9c3a49d4c354c443.3878dc5d1703f951.36dfd3a10fa60bbd.7b3096fa587f12ee -+ 0000000000000040 - --VROUNDSD_0x4(reg) -+VTESTPS_128_3(reg) - before - 90e6ca509b7c1203.20f3e7fadcd450c2.972917da45f09186.06dd5b0d0b88e353 - 7e4848df98e491bf.73fd4c8645d511f6.be682a722bcc5fd4.7605aca80927d3c7 -@@ -32706,9 +32706,9 @@ VROUNDSD_0x4(reg) - 90e6ca509b7c1203.20f3e7fadcd450c2.972917da45f09186.06dd5b0d0b88e353 - 7e4848df98e491bf.73fd4c8645d511f6.be682a722bcc5fd4.7605aca80927d3c7 - 7d685aeaf84d61d6.7222f5641a66c30b.097f139266249fe8.63234460248f9446 -- 0000000000000000.0000000000000000.097f139266249fe8.7605aca80927d3c7 -- 257037d323e78013 --VROUNDSD_0x4(mem) -+ eb93fbdf5644bcf5.f72f5f807690222c.d4bbcda492838d6e.aa039f1f79cbe5fb -+ 0000000000000001 -+VTESTPS_128_3(mem) - before - b13889673fef22b9.221428284f55dec8.dff005c67561e985.7b6854164a756412 - 2b2512c7e8f0871a.7f39db337e0a05fa.0731632334e4d544.5ad2a5532a86617f -@@ -32719,10 +32719,10 @@ VROUNDSD_0x4(mem) - b13889673fef22b9.221428284f55dec8.dff005c67561e985.7b6854164a756412 - 2b2512c7e8f0871a.7f39db337e0a05fa.0731632334e4d544.5ad2a5532a86617f - 6d044ddf3af56b62.5f4d126b80f16b38.49bdf681ce26a192.cd44bbc7cf43c061 -- 0000000000000000.0000000000000000.097f139266249fe8.7b6854164a756412 -- df742604d6ef9337 -+ 54a1b79b520b89bc.1c9bc83cf0964d2e.826238ce60310b9e.300c92ded437bd65 -+ 0000000000000001 - --VROUNDSD_0x5(reg) -+VTESTPS_128_3(reg) - before - 35c973a570f57f82.bcc8cae74c3d9e55.1370fa126a83e687.8eeaa7f40514cd92 - 9057762d3fd8bcf3.814404b043976558.a118a2598b4674ef.4922bee1dad8a39b -@@ -32733,9 +32733,9 @@ VROUNDSD_0x5(reg) - 35c973a570f57f82.bcc8cae74c3d9e55.1370fa126a83e687.8eeaa7f40514cd92 - 9057762d3fd8bcf3.814404b043976558.a118a2598b4674ef.4922bee1dad8a39b - 4b6a2a08de218836.7fe3e0e053269cf2.20dfbe7eef6b3114.90d6fa80fa8b4be4 -- 0000000000000000.0000000000000000.20dfbe7eef6b3114.4922bee1dad8a39b -- 2de2cd848decfce8 --VROUNDSD_0x5(mem) -+ c24d8ba3ea5e1df6.936fda6599f5fd4f.ed1149eb317c599f.3dd2d5bd82387f9a -+ 0000000000000000 -+VTESTPS_128_3(mem) - before - 3cd25dc138b27efb.504e9568fe1ab8e0.97b56e293110459a.64f93f0ded072a3f - 466d01619e96c0ff.53b745c5b6e2949f.6881191a36832f00.e1e59c51c098de9e -@@ -32746,10 +32746,10 @@ VROUNDSD_0x5(mem) - 3cd25dc138b27efb.504e9568fe1ab8e0.97b56e293110459a.64f93f0ded072a3f - 466d01619e96c0ff.53b745c5b6e2949f.6881191a36832f00.e1e59c51c098de9e - 2780354edba57f1f.25d59525af41efe0.e29f5523c45b78ac.c01f5d2245bab268 -- 0000000000000000.0000000000000000.20dfbe7eef6b3114.64f93f0ded072a3f -- 15b0f81ad7e1a9f0 -+ bbd776750cea7787.24f483f385c3034e.e0dba030f8a4dccb.5ef47deb19f9e24b -+ 0000000000000000 - --VROUNDSD_0x5(reg) -+VTESTPS_128_3(reg) - before - 429fca1a1cff4406.dd3e3fc34d716365.ab600a9dd3f50c96.4000762ded681789 - 410cf05783deef37.6b810c23b94701e3.1565278e35614864.dddb5106c0b5e411 -@@ -32760,9 +32760,9 @@ VROUNDSD_0x5(reg) - 429fca1a1cff4406.dd3e3fc34d716365.ab600a9dd3f50c96.4000762ded681789 - 410cf05783deef37.6b810c23b94701e3.1565278e35614864.dddb5106c0b5e411 - 6d45643da90ae52f.406c59806c770b2d.c04ed4324896f163.9339afa78c970090 -- 0000000000000000.0000000000000000.c04ed4324896f163.dddb5106c0b5e411 -- baa9e1f281461521 --VROUNDSD_0x5(mem) -+ 249424392910649c.38caa3c8830d3d71.06690ff6a81d4440.3ee40bfc6d182731 -+ 0000000000000040 -+VTESTPS_128_3(mem) - before - e253ad73e12d858c.c1462bb5a07ba627.2f6864e6191655d8.4400d344f0847ca7 - 94b0eb6dabd7349d.a0a7761ea9d8e77f.00131ac64b9d0d91.d7601c89bc57d743 -@@ -32773,10 +32773,10 @@ VROUNDSD_0x5(mem) - e253ad73e12d858c.c1462bb5a07ba627.2f6864e6191655d8.4400d344f0847ca7 - 94b0eb6dabd7349d.a0a7761ea9d8e77f.00131ac64b9d0d91.d7601c89bc57d743 - ab8a18cafb52de80.1d03ffe1e0b2654e.8995405435ae22c6.19d5e732a9208fc0 -- 0000000000000000.0000000000000000.c04ed4324896f163.4400d344f0847ca7 -- 1e2def5c54ca0811 -+ 03afaf78ecaa3e63.94a6c468e2955a40.a5ba537cf1564fa3.67ab2ea9526de0cc -+ 0000000000000040 - --VROUNDSD_0x5(reg) -+VTESTPS_128_3(reg) - before - 98a925b64ac1413b.77e92c629ae91170.61dbc0214b0d0302.2f50cd2b9ea05155 - 3269cd22d1e0c8f7.e5050c74221d13d3.dff0ef77b6a79b40.05222c4b5598e408 -@@ -32787,9 +32787,9 @@ VROUNDSD_0x5(reg) - 98a925b64ac1413b.77e92c629ae91170.61dbc0214b0d0302.2f50cd2b9ea05155 - 3269cd22d1e0c8f7.e5050c74221d13d3.dff0ef77b6a79b40.05222c4b5598e408 - 48bae10e84b3d9f1.27cec99aa05200b9.6c2f4ed6bfee5fa5.02fbebc9354bc4e7 -- 0000000000000000.0000000000000000.6c2f4ed6bfee5fa5.0000000000000000 -- e0f57a91d90f5adc --VROUNDSD_0x5(mem) -+ 36e85fe500c4afd4.1b12e1c02f93934e.63e5d7aa036f8bde.01a8869257c4ad1f -+ 0000000000000040 -+VTESTPS_128_3(mem) - before - 79ae41b1d7398849.593f4213e0a1874d.9b9ccfd2ebec89bd.1f5e885f1db55b97 - aa9f59e06c4df292.0b0b8605c0d69d07.853710bcf1699e33.fee65c61aa4c0a7b -@@ -32800,10 +32800,10 @@ VROUNDSD_0x5(mem) - 79ae41b1d7398849.593f4213e0a1874d.9b9ccfd2ebec89bd.1f5e885f1db55b97 - aa9f59e06c4df292.0b0b8605c0d69d07.853710bcf1699e33.fee65c61aa4c0a7b - 4d943d09b45855e5.a99728253dee2caf.b3b01e6b5c178ddc.5ac8501c45c1d637 -- 0000000000000000.0000000000000000.6c2f4ed6bfee5fa5.0000000000000000 -- fdce846e1772afe5 -+ 3f586a18cc656d6b.8f3122e0f37571f1.03d377c9490113e3.91525efc8b9ff876 -+ 0000000000000040 - --VPTEST_128_1(reg) -+VTESTPS_128_3(reg) - before - fc89bddc86c6352f.5db85af9d080f653.192372a37df7a878.4f6c96c4d334ec74 - e8cf05b47328c701.81808b99dbb5acc7.a3ba13d877010df1.7447f74617bad4bd -@@ -32815,8 +32815,8 @@ VPTEST_128_1(reg) - e8cf05b47328c701.81808b99dbb5acc7.a3ba13d877010df1.7447f74617bad4bd - 1fec58617b24a107.887c78e209114af4.894202ed7e1edb07.4f2f163d30a286e7 - fb2bb34f3944feec.4f789dc1779f8d05.2606394d2ddb5067.baf270943af5bf21 -- 0000000000000000 --VPTEST_128_1(mem) -+ 0000000000000040 -+VTESTPS_128_3(mem) - before - b334c2129411b570.dada11e94a161c5d.b0407723406c3027.d854b66421c2a5bd - fa4cb2111bf2eadd.16436e9d49263406.889f80f28183f185.fa76749ef66119b4 -@@ -32830,7 +32830,7 @@ VPTEST_128_1(mem) - 65658d2c6a94751f.18761601822c49ad.0e56148cd9bfb7a8.fe6aa32bb0f64937 - 0000000000000000 - --VPTEST_128_1(reg) -+VTESTPS_128_3(reg) - before - 1140a8543bf8c050.42ff701f696d424c.97d85988f53cbd05.7345962e28fd36c4 - c7ff7092965f4c83.b406f1e71e07babc.e3258ad8c5b81d43.bffc39ee5fb5c1cd -@@ -32843,7 +32843,7 @@ VPTEST_128_1(reg) - 155b617a79c75e60.97478c6ea46d999a.59a9a85e912ea516.ce4778b899f415ee - 569f787a81b93292.c78ebea218ac9b13.55afac84f32a9028.7cf1cf78f3c5ee54 - 0000000000000000 --VPTEST_128_1(mem) -+VTESTPS_128_3(mem) - before - 2596b58b754e1d9e.e818affc49c303c6.20a7026e96cf7b52.338494b887361b25 - d8283db5d51eecda.2512046e6d700ea8.7e5ed4be38e2f684.4f745a65eae181bb -@@ -32857,7 +32857,7 @@ VPTEST_128_1(mem) - 46c8e1e85f11a45b.14b9f6cf3ce5c124.b9d4129a5e0aac70.b1d576da8b3dd25c - 0000000000000000 - --VPTEST_128_1(reg) -+VTESTPS_128_3(reg) - before - 5b31de43b69e616b.ba6df5c9c14c05f9.7efd8a961ec4e116.4e2d77fe1a365f81 - 111bc5a1458f960b.d1078514076d0e0f.03f32cfccc772b66.57535a966a839d36 -@@ -32869,8 +32869,8 @@ VPTEST_128_1(reg) - 111bc5a1458f960b.d1078514076d0e0f.03f32cfccc772b66.57535a966a839d36 - 2de873004a650f49.67600eb54d817dc9.01e5d76ee389dbbf.b213374f6cfc21b9 - 0be4e4cd63ad08d4.58450b98ad930c55.d2208756fe862cce.3a388a133cada836 -- 0000000000000000 --VPTEST_128_1(mem) -+ 0000000000000001 -+VTESTPS_128_3(mem) - before - 40e58470b4e9afd1.075b157229f2bc56.7f82f8a946af78dd.d3f03921bafb5b3f - 770522e1948ba646.7d99015d3ac0687b.bae352d432e27c8d.61a1e83cb373a4bd -@@ -32882,9 +32882,9 @@ VPTEST_128_1(mem) - 770522e1948ba646.7d99015d3ac0687b.bae352d432e27c8d.61a1e83cb373a4bd - 4bba260eb1969166.c8eaa4f832a348f0.e43493058d37d592.d67e8f12837a42f5 - 97d10ce32815295d.4699fab1ac289861.d840392974ba3f18.8fd52d0ec89d7292 -- 0000000000000000 -+ 0000000000000001 - --VPTEST_128_2(reg) -+VTESTPS_128_3(reg) - before - 3e1c362d206478ae.3915514c14152d56.52f3fff344da9379.74d5bf2a0278764a - eba59b276b21c584.0b54703592a0577e.4744b02a974676e5.92bda1f6537c3655 -@@ -32893,11 +32893,11 @@ VPTEST_128_2(reg) - 9865494df5a60042 - after - 3e1c362d206478ae.3915514c14152d56.52f3fff344da9379.74d5bf2a0278764a -- 0000000000000000.0000000000000000.83d808c240f77d51.10c55c7784d33a65 -+ eba59b276b21c584.0b54703592a0577e.4744b02a974676e5.92bda1f6537c3655 - 4cd7e5f89a299470.eb59e58abec46400.83d808c240f77d51.10c55c7784d33a65 - bdfd100c4a08211e.b3ef2c37b28d1009.61fb0327dc79e368.c8b96a9bb1873fa5 - 0000000000000001 --VPTEST_128_2(mem) -+VTESTPS_128_3(mem) - before - 5a9474796d3c3a67.9a6519d0164ba839.41e3c1298d0616c4.3cf89dc50658e5d7 - ec14680b3454a941.3f59faae9a7d646d.6f01214a683b345e.721dd3095b21bf49 -@@ -32906,12 +32906,12 @@ VPTEST_128_2(mem) - c66befe9706cb36d - after - 5a9474796d3c3a67.9a6519d0164ba839.41e3c1298d0616c4.3cf89dc50658e5d7 -- 0000000000000000.0000000000000000.be1c3ed672f9e93b.c307623af9a71a28 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ec14680b3454a941.3f59faae9a7d646d.6f01214a683b345e.721dd3095b21bf49 -+ 28af9fef66fa09fb.0827b114732b9267.1b15c78862382303.5db49f5d7660ad6b - eb329711203a16c2.5119396c3ddf6dd3.1feb2fce940aa2de.5b0aff2ff49feae8 -- 0000000000000040 -+ 0000000000000001 - --VPTEST_128_2(reg) -+VTESTPS_256_1(reg) - before - fc2369f9875344a6.1269cb5d7d218bc2.767b8f249227335c.584ed6071dbc6b1c - 577e6bcad4ded83e.7720b7c09aba2526.d39bada7118f1eaf.a30c3621165b3be9 -@@ -32920,11 +32920,11 @@ VPTEST_128_2(reg) - 7f578de7c4382c5e - after - fc2369f9875344a6.1269cb5d7d218bc2.767b8f249227335c.584ed6071dbc6b1c -- 0000000000000000.0000000000000000.c4c4916054a26b78.daefcd079df2ce70 -+ 577e6bcad4ded83e.7720b7c09aba2526.d39bada7118f1eaf.a30c3621165b3be9 - 34c7f0c8f39bace2.f722d82493129f1b.c4c4916054a26b78.daefcd079df2ce70 - f04bf45f8215fc3e.6e3da8778234b7cc.a54136bdf7ec5562.dac416a5ce8de0dd -- 0000000000000001 --VPTEST_128_2(mem) -+ 0000000000000000 -+VTESTPS_256_1(mem) - before - a574afba9b006f1c.e55773fb1ad904fd.b83ba5a4862c2766.d15f982997f9191a - 28e6f60870f06446.703569085972ffcb.b2e94a96b806ab15.a66bb311cf56f34b -@@ -32933,12 +32933,12 @@ VPTEST_128_2(mem) - ac1135e123c15b71 - after - a574afba9b006f1c.e55773fb1ad904fd.b83ba5a4862c2766.d15f982997f9191a -- 0000000000000000.0000000000000000.47c45a5b79d3d899.2ea067d66806e6e5 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 28e6f60870f06446.703569085972ffcb.b2e94a96b806ab15.a66bb311cf56f34b -+ e57be0be5f15c906.ed32d3f2da6d2a55.3613133b37cf0104.7fae84df3c8e1fa2 - b6fde8c9837a5888.b999ac263a54c147.21857d7e1c93e360.b8770600792ed8cb -- 0000000000000040 -+ 0000000000000000 - --VPTEST_128_2(reg) -+VTESTPS_256_1(reg) - before - b9c70decd5d3e441.78398b13f82bcefa.2eb8f00e15b5ff4d.4f0b034b855c0e54 - 39e78b8f2bf1afe6.07fb438adb35e685.a9d99c18061c2212.9c71218f8e383e0d -@@ -32947,11 +32947,11 @@ VPTEST_128_2(reg) - d5d8e4557db2418c - after - b9c70decd5d3e441.78398b13f82bcefa.2eb8f00e15b5ff4d.4f0b034b855c0e54 -- 0000000000000000.0000000000000000.8649aaaea9136442.e482533452322eb7 -+ 39e78b8f2bf1afe6.07fb438adb35e685.a9d99c18061c2212.9c71218f8e383e0d - 8abba934c2a5f70d.3f0f8e1947a35d58.8649aaaea9136442.e482533452322eb7 - 07906549367ef961.fc41e7ac5981ef9d.2155183e9b28018b.030b1527ee579b7d -- 0000000000000001 --VPTEST_128_2(mem) -+ 0000000000000000 -+VTESTPS_256_1(mem) - before - 36b53ba81b4fdb0f.0bb2bb392205f18f.1a5cca2f2cdc5880.d646e13377e73796 - 016e960ee53b2733.f46ca57022c81a43.742eb48eddbf532e.016b01f9dadb4012 -@@ -32960,12 +32960,12 @@ VPTEST_128_2(mem) - de034569416ea9d9 - after - 36b53ba81b4fdb0f.0bb2bb392205f18f.1a5cca2f2cdc5880.d646e13377e73796 -- 0000000000000000.0000000000000000.e5a335d0d323a77f.29b91ecc8818c869 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 016e960ee53b2733.f46ca57022c81a43.742eb48eddbf532e.016b01f9dadb4012 -+ 14cf7171f781df24.1c0c205ad353b128.e8811fb587369dd3.fe0f75fc5f9058a9 - 4aa348bf6b2dbf0d.e1dc2963d130f2eb.51228990474ef29b.297d37a8a392bd07 - 0000000000000040 - --VPTEST_256_1(reg) -+VTESTPS_256_1(reg) - before - 79eb9bacd5af59cb.7fb898e3604c851b.9d2abbf7b7ed1938.8bdd6d0c38120eb0 - 568233dbfce20989.8fd8dcc9f0e9eb79.ad40d383211561ba.727d4813778eac41 -@@ -32977,8 +32977,8 @@ VPTEST_256_1(reg) - 568233dbfce20989.8fd8dcc9f0e9eb79.ad40d383211561ba.727d4813778eac41 - d1140a635291f4be.55d0905d3710ae54.6e6b6b71ac35071d.e1d094931fcf8978 - 45ec1db1724b5716.af6c308b52ce89d7.3af6812ff3d8470f.b6a0cf764ce06182 -- 0000000000000000 --VPTEST_256_1(mem) -+ 0000000000000040 -+VTESTPS_256_1(mem) - before - feebff1aa8a3f0bd.10586730f9996e3e.787739405c2e3930.6e2f1027938a5c39 - 2afdedb20e6d2047.8da2e44b810975e2.8bbf2666723c7a88.666014c727d8844a -@@ -32992,7 +32992,7 @@ VPTEST_256_1(mem) - dcf6de0ad60efc0d.0c03690a0b7d414c.03319cb930949feb.13de6cac9d76f7cc - 0000000000000000 - --VPTEST_256_1(reg) -+VTESTPS_256_2(reg) - before - 1fcf683d341081f4.1a76daa270fd20a3.c7b2678543997e6b.20f41dbe10f6fa4e - 4f507b74b39b8594.c20728125410633f.a3708a4dee069cb5.f72373e56b35d661 -@@ -33001,11 +33001,11 @@ VPTEST_256_1(reg) - 782f455d7ba3c576 - after - 1fcf683d341081f4.1a76daa270fd20a3.c7b2678543997e6b.20f41dbe10f6fa4e -- 4f507b74b39b8594.c20728125410633f.a3708a4dee069cb5.f72373e56b35d661 -+ 6b93eadbce080322.ae7645479d54800d.fe89cbcfa750d5d7.668a19195e60ee51 - 6b93eadbce080322.ae7645479d54800d.fe89cbcfa750d5d7.668a19195e60ee51 - cfe2b3dc22e6364a.bc8fac2b68d4343a.334827750b04667c.47f58b480580ff49 -- 0000000000000000 --VPTEST_256_1(mem) -+ 0000000000000001 -+VTESTPS_256_2(mem) - before - d305c445dcd4fc03.d78ad0e44abe5bb7.c61ed8acd09d3bf2.9dfa9badb5ae8a51 - 354483ea451f601d.dfd74060e21eae16.aaef48b5f2ba5160.9aeb22e142d87f01 -@@ -33014,12 +33014,12 @@ VPTEST_256_1(mem) - 933002a54fd892f0 - after - d305c445dcd4fc03.d78ad0e44abe5bb7.c61ed8acd09d3bf2.9dfa9badb5ae8a51 -- 354483ea451f601d.dfd74060e21eae16.aaef48b5f2ba5160.9aeb22e142d87f01 -- 7bb5fe39d291acf0.4315fcbb87916a12.42cd7531e93731b1.8467b87f4d107f39 -+ 2cfa3bba232b03fc.28752f1bb541a448.39e127532f62c40d.620564524a5175ae -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7f27b11e9d359da7.5f900160d4a3cc58.6b86dd0ed2209810.b8ba5af173e1c6a5 -- 0000000000000000 -+ 0000000000000040 - --VPTEST_256_1(reg) -+VTESTPS_256_2(reg) - before - 6f14ae067d801dc7.1e651886c518ee6f.8f944cbd66e11093.01e4fa37c88242aa - a9b459809a65a4d6.343ab05c64455d74.2f6cd83dd8d67171.e1b44a98e768eaab -@@ -33028,11 +33028,11 @@ VPTEST_256_1(reg) - ccc7404457ad34cc - after - 6f14ae067d801dc7.1e651886c518ee6f.8f944cbd66e11093.01e4fa37c88242aa -- a9b459809a65a4d6.343ab05c64455d74.2f6cd83dd8d67171.e1b44a98e768eaab -+ 9e5a007f421463c8.9d74f48b96c8a4e1.9b65a14cc70f2d9b.e5c2491d4ddf4d3e - 9e5a007f421463c8.9d74f48b96c8a4e1.9b65a14cc70f2d9b.e5c2491d4ddf4d3e - a8539d6f10189549.36dd600178ae7fe2.2ecba456ce177ec0.eada71b313f22790 -- 0000000000000000 --VPTEST_256_1(mem) -+ 0000000000000001 -+VTESTPS_256_2(mem) - before - 675731bd341d2f1f.24eb2ebda0fd7706.d94270a92502aca4.46eadbc88a7aa08a - 9754c00bc74dd5b5.6e6daed38f5045ab.636fa16fb9d0e553.3e0e440c96c4d1a5 -@@ -33041,12 +33041,12 @@ VPTEST_256_1(mem) - fd8e7e03b6880c99 - after - 675731bd341d2f1f.24eb2ebda0fd7706.d94270a92502aca4.46eadbc88a7aa08a -- 9754c00bc74dd5b5.6e6daed38f5045ab.636fa16fb9d0e553.3e0e440c96c4d1a5 -- 388b69192c49e2b9.e327191e799c3ae4.b0306d3f5224e71b.7283da8f8f824bbe -+ 98a8ce42cbe2d0e0.db14d1425f0288f9.26bd8f56dafd535b.b915243775855f75 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 26c8a9d27e1d1258.dd636b0bf96e935c.9c505205090b6e27.3d9499be103f4b81 -- 0000000000000000 -+ 0000000000000040 - --VPTEST_256_2(reg) -+VTESTPS_256_2(reg) - before - 0cbe84cc1ce8cbb3.3dd7fb24d9d620bd.b96fa105ab508cbf.039dccadfc9135a3 - c86ea684deebc47b.5984dafa5a80c915.d395b6772cd061bb.c1e1552447c0f9bc -@@ -33059,7 +33059,7 @@ VPTEST_256_2(reg) - 8beae397991e339c.569ac5401c25c88c.8722a6cf177a4df9.b2e96b5405a6769e - b3803471e90c54c2.10e735e23cd3db4d.31616d7809d98d28.b281882b524e6774 - 0000000000000001 --VPTEST_256_2(mem) -+VTESTPS_256_2(mem) - before - 4e90cd7a0c1699af.9a7b977e6941629b.6335a8ccd596bc85.2da007de9d795df2 - a3a0ebcbb04d506b.9e26062ab54a9ad1.2b5199ea0478285f.d72a716d70e6f903 -@@ -33073,7 +33073,7 @@ VPTEST_256_2(mem) - a6ca8d5b129faafd.69bffe1023057605.8922e57391cf8fac.a54da2b7405983ad - 0000000000000040 - --VPTEST_256_2(reg) -+VTESTPS_256_3(reg) - before - 7a2ce0b55b910c86.0b7d087208d1c42b.e8457d217dcf935c.d87039b6285a0376 - eea01a658a352611.8454efa3521a7682.f3acfa82139dcac0.0cbbfadcc536f293 -@@ -33082,11 +33082,11 @@ VPTEST_256_2(reg) - 9c89ade1d324f690 - after - 7a2ce0b55b910c86.0b7d087208d1c42b.e8457d217dcf935c.d87039b6285a0376 -- 38260bc79fef74ec.ec1bbfda0b857d2d.e740709d82fb57de.00d1a6d3836f172e -+ eea01a658a352611.8454efa3521a7682.f3acfa82139dcac0.0cbbfadcc536f293 - 38260bc79fef74ec.ec1bbfda0b857d2d.e740709d82fb57de.00d1a6d3836f172e - b40baf46374a31c3.1e9df304501f9558.1e4cdbe065747561.927cb8867e0f3074 -- 0000000000000001 --VPTEST_256_2(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - fcc400d09eba28af.bd9c024eeed29b41.f8a8070b3cf27a31.f51d37b6599461f6 - 8df82c3ffadc80fd.b123014b5f14ec13.540677ddec0ce8e2.c800818bf9e75649 -@@ -33095,12 +33095,12 @@ VPTEST_256_2(mem) - c203c53cfc8dca6a - after - fcc400d09eba28af.bd9c024eeed29b41.f8a8070b3cf27a31.f51d37b6599461f6 -- 033bff2f6145d750.4263fdb1112d64be.0757f8f4c30d85ce.0ae2c849a66b9e09 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 8df82c3ffadc80fd.b123014b5f14ec13.540677ddec0ce8e2.c800818bf9e75649 -+ 2af3af1a0396bba5.ebeda7a9269a60e5.1084bf647b799a97.f33fb3cbe2fa9205 - b07f054ed6f495d4.c645f0d4e0f33562.06ee5c8e05444d7d.d226cbe2af584fd7 -- 0000000000000040 -+ 0000000000000000 - --VPTEST_256_2(reg) -+VTESTPS_256_3(reg) - before - 1d219b4566263e6b.fc69a8c58e03c9b6.a079d83828a8a536.1410c946a779bcc0 - 40cb4b6a89aee886.e87d166c48ce1576.d3d35c419b47ed0f.14b582787d24a48b -@@ -33109,11 +33109,11 @@ VPTEST_256_2(reg) - 5fb54f224a658ad9 - after - 1d219b4566263e6b.fc69a8c58e03c9b6.a079d83828a8a536.1410c946a779bcc0 -- 874ed01500b10466.5287ca301f623240.bda1775cd45b4897.e4ab0310a252c10b -+ 40cb4b6a89aee886.e87d166c48ce1576.d3d35c419b47ed0f.14b582787d24a48b - 874ed01500b10466.5287ca301f623240.bda1775cd45b4897.e4ab0310a252c10b - 4ef626b467bcceb8.145340fc30c9df42.b82d25f37071f37a.5ebcc9fa320ecf6c -- 0000000000000001 --VPTEST_256_2(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - c46211750661ad7e.f10f49b15b5a8127.0bacf4bb9612d6a6.22c462740a142b65 - 678f8bdd8111f588.cbe5357a78185a60.1460635b6d46d498.55b22a4a3fd02904 -@@ -33122,12 +33122,12 @@ VPTEST_256_2(mem) - 437c9f0193152ccd - after - c46211750661ad7e.f10f49b15b5a8127.0bacf4bb9612d6a6.22c462740a142b65 -- 3b9dee8af99e5281.0ef0b64ea4a57ed8.f4530b4469ed2959.dd3b9d8bf5ebd49a -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 678f8bdd8111f588.cbe5357a78185a60.1460635b6d46d498.55b22a4a3fd02904 -+ 25073948d77e1d23.3ac3e77a5981950f.093908c7d3739545.af427ae1aa322c02 - da9898a025b6e37b.99f75a1d9a216edf.c7045febe1a4d5d9.8ac24da4e7c56e0c -- 0000000000000040 -+ 0000000000000001 - --VTESTPS_128_1(reg) -+VTESTPS_256_3(reg) - before - 37bd6c634aafa1f3.630c23d386c401bb.44cb8acfd884207d.2a8de4b3b5e64f7f - c0d1b137a71e0b27.9a3156cc17b5330f.978c74fcae37e894.0ea0130c6b43c064 -@@ -33139,8 +33139,8 @@ VTESTPS_128_1(reg) - c0d1b137a71e0b27.9a3156cc17b5330f.978c74fcae37e894.0ea0130c6b43c064 - 3b0468e746eea417.5cd1ad77f39437a5.ed861210b9c501d1.500869e01ecae3b3 - 04a28fe0c4aca86f.85b8a5bf376dc7a6.a405627894bba9e0.ca93611cea847699 -- 0000000000000001 --VTESTPS_128_1(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - d93d287e3fc6d7d9.77f6218fbde355db.f1b4b893fe4da041.17545f9edba41a6c - 26f5ee7a00661d8b.f14e1b5ecc1fe506.7c9064dc643e7ea0.a1c105f02c0c9121 -@@ -33152,9 +33152,9 @@ VTESTPS_128_1(mem) - 26f5ee7a00661d8b.f14e1b5ecc1fe506.7c9064dc643e7ea0.a1c105f02c0c9121 - 1cff478f4b6ac283.ccf477bb8ded959c.02172487864f1cef.a09651d8207f49ad - 9727aea83ade82ee.653533119dd8a14a.5f1675808089375c.6f203ec4558a80ba -- 0000000000000040 -+ 0000000000000000 - --VTESTPS_128_1(reg) -+VTESTPS_256_3(reg) - before - ec83eb55f1965508.73389fb1eccf19f8.185d4acc976d44bc.6f59d1b46dfa8b10 - 52f4a3d28faf6da2.8b0097967a4842cc.41b8b9581836bb9e.0eacb60d6aaed33a -@@ -33166,8 +33166,8 @@ VTESTPS_128_1(reg) - 52f4a3d28faf6da2.8b0097967a4842cc.41b8b9581836bb9e.0eacb60d6aaed33a - f949ed02de8ff26d.bd4910430355ba97.3c917a21bbc2429b.18db9f7992afcd04 - 3bd0c4517ac32116.e4e088a5a0033d84.65368b931c9a145f.68b209e3010b339a -- 0000000000000040 --VTESTPS_128_1(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - 4f874c60260235dd.76d3242bfdd63549.dc917aa66f5d87c0.18f1e71ad94c6f97 - 9d1d1e4c14b549e1.049f09fc06546cb1.812762338c6f5376.b00f8a228b638def -@@ -33179,9 +33179,9 @@ VTESTPS_128_1(mem) - 9d1d1e4c14b549e1.049f09fc06546cb1.812762338c6f5376.b00f8a228b638def - a18b60e6b9f3ba62.42806f312fca00fa.ae70bd3912465ed4.8bdc7018d06baa13 - 399d8e1b32c6438c.8dc2533414c32dd2.413606a31eed6403.04a4966644f104ad -- 0000000000000001 -+ 0000000000000040 - --VTESTPS_128_1(reg) -+VTESTPS_256_3(reg) - before - 40548ebe26a55afa.401e25d59a3ca18a.3fb0b07352cb31e2.1547b95ccb702032 - bad55aa0cdebce04.91dca0010e619089.b5988259846f46d9.056d525235dc4f8b -@@ -33193,8 +33193,8 @@ VTESTPS_128_1(reg) - bad55aa0cdebce04.91dca0010e619089.b5988259846f46d9.056d525235dc4f8b - 4380548b13de6e35.0aa17b8ca93fccb4.4bc4c552463aa961.ef754d70793cad3a - 36a27aeb930a763a.853a326088e51138.5d8176ca36b89626.ae2b27a2b29cf56c -- 0000000000000040 --VTESTPS_128_1(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - 1ad065f2768e3708.ee87c72ce9fc22bf.e073416bc65c1a40.481b902ded7648d6 - 7f57c1e93738a7ca.c97b37bab240ad6f.f518259880b2a4f9.66de0fe709fffc1b -@@ -33208,7 +33208,7 @@ VTESTPS_128_1(mem) - f5cb600e0728d512.54bf716e0bea5302.c1d65908d528292d.ae0e2c10dfa35915 - 0000000000000000 - --VTESTPS_128_2(reg) -+VTESTPS_256_3(reg) - before - 1672afa696058d76.bd509b144e860aef.bda7326bd369e63d.3086a123a9619d00 - 9c75ec68cdbbceba.5f1718a34d394e83.b7ce07667e6a4853.c9d2ae1069a88234 -@@ -33217,11 +33217,11 @@ VTESTPS_128_2(reg) - 2f5645fc444c2dca - after - 1672afa696058d76.bd509b144e860aef.bda7326bd369e63d.3086a123a9619d00 -- 0000000000000000.0000000000000000.a080ecc9a778b6f1.6987fbbb300a94f4 -+ 9c75ec68cdbbceba.5f1718a34d394e83.b7ce07667e6a4853.c9d2ae1069a88234 - 7e6976081084789d.b5eb54a6234c5cfa.a080ecc9a778b6f1.6987fbbb300a94f4 - 18994af4fbecc8c9.9c9ac908e9ccf180.d209db02eb1f6cc3.ed6f03101a928e6c -- 0000000000000001 --VTESTPS_128_2(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - 0c0a3a69c9442c38.c65362972b80faea.f0eef5b7bdc4c940.aab4d27ce5eca574 - 60556045c68749e2.e3e1bc5d3bcb4aae.8eb4539ebb409f66.85cfcba3316a9fb1 -@@ -33230,12 +33230,12 @@ VTESTPS_128_2(mem) - b8afa45e1e846065 - after - 0c0a3a69c9442c38.c65362972b80faea.f0eef5b7bdc4c940.aab4d27ce5eca574 -- 0000000000000000.0000000000000000.0f110a48423b36bf.554b2d831a135a8b -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 60556045c68749e2.e3e1bc5d3bcb4aae.8eb4539ebb409f66.85cfcba3316a9fb1 -+ 0805327a56203ef5.cd9153b2c85af3be.50b85faafe4c3020.bda4c4e36c259325 - dee42cf6961cc79d.dfad24026db732c9.13c696c5a2f53897.af80b9a832aac07d -- 0000000000000040 -+ 0000000000000000 - --VTESTPS_128_2(reg) -+VTESTPS_256_3(reg) - before - 327d8371cc3fb088.bfbfcaa4a186a205.758229b9c7714379.b3a973dcc44673fa - 7a36514ed968ec93.87628870946a895a.ea5c60447111617a.0c2f71dc804c9c73 -@@ -33244,11 +33244,11 @@ VTESTPS_128_2(reg) - 05821382630f091d - after - 327d8371cc3fb088.bfbfcaa4a186a205.758229b9c7714379.b3a973dcc44673fa -- 0000000000000000.0000000000000000.9c86c40d0825c979.fa220faff112702e -+ 7a36514ed968ec93.87628870946a895a.ea5c60447111617a.0c2f71dc804c9c73 - ec260a5fe18a5032.1299e3468ad539c7.9c86c40d0825c979.fa220faff112702e - e498aa127e311710.3c2f5612a0d26e79.e64e52822738b722.594fc64333a4ab59 -- 0000000000000001 --VTESTPS_128_2(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - da87735a9c5e45a9.bed92ed14fea7ed9.e1f25dc1f16de39c.23fe040d6bd76720 - b42a61b6fb9d1c27.d735910aee40c03a.ddac753d99b2555b.b1e3d81c6f8d1420 -@@ -33257,12 +33257,12 @@ VTESTPS_128_2(mem) - d2c8f29216b266e1 - after - da87735a9c5e45a9.bed92ed14fea7ed9.e1f25dc1f16de39c.23fe040d6bd76720 -- 0000000000000000.0000000000000000.1e0da23e0e921c63.dc01fbf2942898df -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ b42a61b6fb9d1c27.d735910aee40c03a.ddac753d99b2555b.b1e3d81c6f8d1420 -+ 6f3659829bd949c3.89f8cf28f7c01bdf.0c2a1873b5ae80e3.eb49c91acfe6fbce - e779d8aa991d8aab.316ee49707f4c974.4a38c450616d1f5f.2c7cd372286f58d5 -- 0000000000000040 -+ 0000000000000000 - --VTESTPS_128_2(reg) -+VTESTPS_256_3(reg) - before - 377823e6343e62a0.f8bd591a10759908.2be3cdc3b96a07a4.73a2f4beb8f9f0fc - b8da61d81e9c88bc.7ecf57bf1ded3309.d3a28418a9ae101b.623324abd660ade5 -@@ -33271,11 +33271,11 @@ VTESTPS_128_2(reg) - 74cf8f9ef62bc826 - after - 377823e6343e62a0.f8bd591a10759908.2be3cdc3b96a07a4.73a2f4beb8f9f0fc -- 0000000000000000.0000000000000000.84f80702754b2186.f5b9d102d8ae1248 -+ b8da61d81e9c88bc.7ecf57bf1ded3309.d3a28418a9ae101b.623324abd660ade5 - b238a8d5715a14e1.547b5083db9213d8.84f80702754b2186.f5b9d102d8ae1248 - 7fdff449c80441bc.588cc0536770f6a1.9c3251eeb6cd7691.07fe76afd9eddd4e -- 0000000000000001 --VTESTPS_128_2(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - 17f898bb4b7490fa.7d1b41a1c0244cf9.65d0211cdc929891.769a5f460ac04be7 - ce450df2f2d2f0f6.06388c47f4487143.5711f1c95604b5d4.6e7c2b770db1db35 -@@ -33284,12 +33284,12 @@ VTESTPS_128_2(mem) - a1fee45a43ec4ba5 - after - 17f898bb4b7490fa.7d1b41a1c0244cf9.65d0211cdc929891.769a5f460ac04be7 -- 0000000000000000.0000000000000000.9a2fdee3236d676e.8965a0b9f53fb418 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ce450df2f2d2f0f6.06388c47f4487143.5711f1c95604b5d4.6e7c2b770db1db35 -+ 74826b300a54a547.7781d0a901fceb47.091dab45f2d20895.e026b3ee5a2b6327 - e47a2c5fac036b19.2c44093282caf7b0.59becb7ecc094f01.28e3f2168dbb1f68 -- 0000000000000040 -+ 0000000000000001 - --VTESTPS_128_3(reg) -+VTESTPS_256_3(reg) - before - a9c48628184a2289.fcfbce6cf6edfe97.82cb334e1440d12b.22c1ce5fffb44344 - 9b81d2eba761e1c1.96cfcd44041d1aee.d3634b6852eab564.3ff22ed4a7dfa389 -@@ -33301,8 +33301,8 @@ VTESTPS_128_3(reg) - 9b81d2eba761e1c1.96cfcd44041d1aee.d3634b6852eab564.3ff22ed4a7dfa389 - d281c60f8cbec4f9.90c3a3d2f19f7a4a.7c584ceed952de06.8e1c69c9e19729fd - ac105d0164ed06dc.c4a3ce01da80dbd6.d9f6324c440689be.e90dfa2ac8e792cb -- 0000000000000001 --VTESTPS_128_3(mem) -+ 0000000000000000 -+VTESTPS_256_3(mem) - before - 376f0fe10f80fc27.8379942bca78e416.103bc9bfdacbf8be.4689f9ec2f92f237 - e1798b0fa7e1760d.b50a65fa5bed9a55.4e5610f70d8c8e30.1f5c9d3b3781541e -@@ -33314,9 +33314,9 @@ VTESTPS_128_3(mem) - e1798b0fa7e1760d.b50a65fa5bed9a55.4e5610f70d8c8e30.1f5c9d3b3781541e - 09794d585c0bc1fe.9c0dcedbb2d76443.5cc21f9590d05956.c0bc1ba5f85fed1f - 893bd1aa4b099c25.96cfca386cc37d8c.144973857fa2155c.85f66e970db8f7e5 -- 0000000000000040 -+ 0000000000000000 - --VTESTPS_128_3(reg) -+VTESTPS_256_3(reg) - before - eb2383bfa40d5072.3e8a93f08fe7c1af.fd9c557f243c22dd.53b886b4f50f7e6f - 44ae3ece5f211791.0534101645b1edc7.2fc06c1a77ce8fe2.f6dbd60c0e224fbb -@@ -33329,7 +33329,7 @@ VTESTPS_128_3(reg) - 3143bd14dddf4026.b803c2078874dc9b.868709770006ff46.d77edf7ae7e7456b - 0e2cfefdbdd506dc.34c428b2753b4a54.603c2a015b6fafb6.d36d1beb9b6a1bac - 0000000000000001 --VTESTPS_128_3(mem) -+VTESTPS_256_3(mem) - before - 8d5d208206dd5b8f.37b7fdf5988fa660.5543bb002713f220.172dca242595dbdd - 02f8e281f5e33b8a.072eb4680d985c5d.f84cf8deba07912b.08a4e54cfa05bf68 -@@ -33341,9 +33341,9 @@ VTESTPS_128_3(mem) - 02f8e281f5e33b8a.072eb4680d985c5d.f84cf8deba07912b.08a4e54cfa05bf68 - 020ec7322fd8edc5.dcde21c2b57c6480.f7aa5c384b23e2a1.8fee78e5754a9603 - 696b4c81d1c72b6d.11123e6f2fc8f975.2f2b62fbf574a3ad.09577e5c32f09d59 -- 0000000000000041 -+ 0000000000000040 - --VTESTPS_128_3(reg) -+VTESTPD_128_1(reg) - before - 41b5d38fe5912ae9.13ddee5af6bdb2ad.011809dc140658e7.7c998611d5048e7b - b8421a2511a3297a.dc2f28a9bbc53eb2.0a3a7e7302c5bd82.bac1446807e26038 -@@ -33355,8 +33355,8 @@ VTESTPS_128_3(reg) - b8421a2511a3297a.dc2f28a9bbc53eb2.0a3a7e7302c5bd82.bac1446807e26038 - 911fc548f1474776.a02c765a3beb8aa8.87c697a2958e64f4.c56f19eaa617d410 - 2896ce631e08c08a.3ba15559923c53ba.d30652d468ef88e7.796f8085ceb1a72f -- 0000000000000040 --VTESTPS_128_3(mem) -+ 0000000000000000 -+VTESTPD_128_1(mem) - before - 4c94f4b32b425aef.d9f434e43772d162.895a3f93ddc35515.4c47aa7418736607 - 2352f91e9851b1e9.0084f036d512b7aa.6623b2f2388c4be4.4cd59bf040a73a01 -@@ -33368,9 +33368,9 @@ VTESTPS_128_3(mem) - 2352f91e9851b1e9.0084f036d512b7aa.6623b2f2388c4be4.4cd59bf040a73a01 - 12918151fef457da.f994ffc59773ab0d.aec82964bea4f354.31fc21b37c163f81 - f71e07397a3808ed.206e5efd1622ec37.3c1520d48b160791.55073929694cb232 -- 0000000000000000 -+ 0000000000000040 - --VTESTPS_128_3(reg) -+VTESTPD_128_1(reg) - before - cefd0cdfc43fd2d9.adc507c02728804f.d160084bf0aab4d5.eed5142ebcee43c6 - db7fbff66b13f628.1051fdd421d07a2c.68b4f919c1974093.9fd67f5e6d396520 -@@ -33382,8 +33382,8 @@ VTESTPS_128_3(reg) - db7fbff66b13f628.1051fdd421d07a2c.68b4f919c1974093.9fd67f5e6d396520 - 9716f37131df7857.fc90665f853db3af.41b72dd42475cc1c.2be2df50b80227ca - 5f0da5bab52e9414.4c4cbc4f6f7ae705.b8b5a1e9b6d1931d.6dc6b0f0bc5546f1 -- 0000000000000000 --VTESTPS_128_3(mem) -+ 0000000000000041 -+VTESTPD_128_1(mem) - before - 884590ea59cb8964.8fb2d03f908c850b.de537d8efa94d159.29f950c21236d242 - 1779991c2a052609.844f706b618689e8.8c6f250a42952ed8.efd136cdd431c536 -@@ -33395,9 +33395,9 @@ VTESTPS_128_3(mem) - 1779991c2a052609.844f706b618689e8.8c6f250a42952ed8.efd136cdd431c536 - ceb402ad24fa10da.983281a9c1a7d956.346d2eae648bbaad.68874f75994da8a6 - 88c3488860b50304.28a500674e7bb401.b11916667c823006.ef689726fd16b63d -- 0000000000000000 -+ 0000000000000001 - --VTESTPS_128_3(reg) -+VTESTPD_128_1(reg) - before - 96dba6530fe04593.2073e598fc42bab3.90f5e810a48f5497.de3e571ea5854e0c - 6f0564a7f6f93fa9.748d57cb14aef212.2c6e35105e6ef6c1.99aa70c3fba0ceee -@@ -33409,8 +33409,8 @@ VTESTPS_128_3(reg) - 6f0564a7f6f93fa9.748d57cb14aef212.2c6e35105e6ef6c1.99aa70c3fba0ceee - c58a41b4ebf05496.5ee0190cc304664e.585be3d419a4d62e.bc27da3f9bdf6cd5 - f6b53ae68b50c108.bb37a7472651d392.710aeec670be3088.2582127fa04fe6f0 -- 0000000000000000 --VTESTPS_128_3(mem) -+ 0000000000000001 -+VTESTPD_128_1(mem) - before - 3402defc4bef596d.5cd34aaa71a5c1a9.685d7d68589ff50b.d1c55353ff473f7b - 94bf69112938cb27.55316d6a3a7c9225.3f1f175b75fd88e4.d5d90de863cc40b5 -@@ -33422,9 +33422,9 @@ VTESTPS_128_3(mem) - 94bf69112938cb27.55316d6a3a7c9225.3f1f175b75fd88e4.d5d90de863cc40b5 - a889b29adce107c4.3b199f9481606e29.1e4af20c9a74484a.d89218ef38d76fdf - 4d2e368381f7ca6f.6cd7dc93e2dd9161.dfa88967e212f069.383c70d619f607a8 -- 0000000000000040 -+ 0000000000000001 - --VTESTPS_128_3(reg) -+VTESTPD_128_2(reg) - before - 7c93f9f1709f65c1.607870b83385d055.42b921d3fb803978.5f0558596ae23d6c - 18d721fd1e40a26a.bb34dc250e97d4a2.1a0969bf65d4a01b.7a2fdccc4df1ea80 -@@ -33433,11 +33433,11 @@ VTESTPS_128_3(reg) - 066b776b340a8fd7 - after - 7c93f9f1709f65c1.607870b83385d055.42b921d3fb803978.5f0558596ae23d6c -- 18d721fd1e40a26a.bb34dc250e97d4a2.1a0969bf65d4a01b.7a2fdccc4df1ea80 -+ 0000000000000000.0000000000000000.5115b0c5be6503f5.0df18faea849b5d0 - 803c869849243a61.3b2ef6b62f3a9381.5115b0c5be6503f5.0df18faea849b5d0 - 100e242e8cd86652.bc323b57b278c91f.4127f251a2c09eb3.f216efea97f95889 - 0000000000000041 --VTESTPS_128_3(mem) -+VTESTPD_128_2(mem) - before - 25bca41f9e8a18e5.2399f82b84e765e7.1a0b25f4b26032a7.478c2bcdac70ac01 - 2bd5f0f1ee84ade0.1729fdfbccde72cf.3187327a4bfb8946.bf9058a678016a8a -@@ -33446,12 +33446,12 @@ VTESTPS_128_3(mem) - 6c4d6a9884751a44 - after - 25bca41f9e8a18e5.2399f82b84e765e7.1a0b25f4b26032a7.478c2bcdac70ac01 -- 2bd5f0f1ee84ade0.1729fdfbccde72cf.3187327a4bfb8946.bf9058a678016a8a -- f482d9cd42050bf3.470a2f0b0148c8b4.dd70ddd39a578b28.067f7448a30014fb -+ 0000000000000000.0000000000000000.e5f4da0b4d9fcd58.b873d432538f53fe -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 5c8eda9fb618ee4b.0e878ac5beb1a443.fa93a3edba7ff478.76a47b20c8f8e500 -- 0000000000000001 -+ 0000000000000041 - --VTESTPS_128_3(reg) -+VTESTPD_128_2(reg) - before - 44c43b1e7304ef73.3fc76f5465c91114.caee0a979fa64127.64bcfeb3c8807f63 - 5a56ec1d2f30a03a.79f714d66c253179.d689aceb41b1dc0d.f7b76c10e065ea14 -@@ -33460,11 +33460,11 @@ VTESTPS_128_3(reg) - 3e8bfbf276e6b988 - after - 44c43b1e7304ef73.3fc76f5465c91114.caee0a979fa64127.64bcfeb3c8807f63 -- 5a56ec1d2f30a03a.79f714d66c253179.d689aceb41b1dc0d.f7b76c10e065ea14 -+ 0000000000000000.0000000000000000.8da56b2f4061b1a1.8f5068f21c3aefb8 - 0a4f780157856845.e6eb4612e6370aa7.8da56b2f4061b1a1.8f5068f21c3aefb8 - b0fbdb3684908440.626f80f5ef0b57c9.4d8e43ce373ffc8e.08526e449b0c4a7b -- 0000000000000000 --VTESTPS_128_3(mem) -+ 0000000000000001 -+VTESTPD_128_2(mem) - before - 0dc589e9ccd4f60c.a8a5122855dc30d6.c94f3e6aa4aed60c.708f3034c2d9f880 - 51cd9613b6e3be32.4e9b184363f6a8b3.f756fc5c202b419c.54f62fcd7ebbe325 -@@ -33473,12 +33473,12 @@ VTESTPS_128_3(mem) - 167f6a03ed828bf3 - after - 0dc589e9ccd4f60c.a8a5122855dc30d6.c94f3e6aa4aed60c.708f3034c2d9f880 -- 51cd9613b6e3be32.4e9b184363f6a8b3.f756fc5c202b419c.54f62fcd7ebbe325 -- e66f9d5d521ecc27.fe27e8f34c682784.c75237b9808e54a4.530d3b05076ff626 -+ 0000000000000000.0000000000000000.36b0c1955b5129f3.8f70cfcb3d26077f -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - a7761bb4bc91dd17.149681a4acc1eaf5.170d696ce0e4cd51.ca215049f8837032 -- 0000000000000000 -+ 0000000000000040 - --VTESTPS_128_3(reg) -+VTESTPD_128_2(reg) - before - 917086a083f98416.72b08a020f49ad2d.ec34dcc31e8a2cb1.c25410615b3866ce - 98439e8d55739746.22e768356851f895.e24df7ba3f512b65.a4f3a7840d96dc48 -@@ -33487,11 +33487,11 @@ VTESTPS_128_3(reg) - 2ad7e63a8967c159 - after - 917086a083f98416.72b08a020f49ad2d.ec34dcc31e8a2cb1.c25410615b3866ce -- 98439e8d55739746.22e768356851f895.e24df7ba3f512b65.a4f3a7840d96dc48 -+ 0000000000000000.0000000000000000.512dccf7aaa121bd.98b6abc1130beaeb - 8843b035007c0030.92e93038e2b5797d.512dccf7aaa121bd.98b6abc1130beaeb - bbbbb7031fa1fa7f.a0805ef69982ee0f.971f59e4fb074b64.7c69960588a24de2 -- 0000000000000000 --VTESTPS_128_3(mem) -+ 0000000000000001 -+VTESTPD_128_2(mem) - before - 80ce164e3167027e.8ef9b0654f6dc2e0.27796e5daac31077.0f719aefcf0de407 - 5918a22b9cadcc7b.5d4795c62b6d93ff.02a0dd5830849ee2.156d8983c2422a51 -@@ -33500,12 +33500,12 @@ VTESTPS_128_3(mem) - 115a4bad686658d6 - after - 80ce164e3167027e.8ef9b0654f6dc2e0.27796e5daac31077.0f719aefcf0de407 -- 5918a22b9cadcc7b.5d4795c62b6d93ff.02a0dd5830849ee2.156d8983c2422a51 -- 908207bfe845da7c.85f26492502bab87.0fc026d348d2527c.0460240c6e2f57ef -+ 0000000000000000.0000000000000000.d88691a2553cef88.f08e651030f21bf8 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 03d8bff52e3ce9ae.6045183559354425.28a7c5bb0eb8e970.3a9665f67262a78d -- 0000000000000040 -+ 0000000000000041 - --VTESTPS_128_3(reg) -+VTESTPD_128_3(reg) - before - e7facf9decc8a476.8ce648b88c9db43d.4b8ead1be2179a84.2b1f36fa9c431feb - 17c0ee339b13c81b.08771df61e75f854.a21820b1885beb51.f2f5f67d117eaf19 -@@ -33517,8 +33517,8 @@ VTESTPS_128_3(reg) - 17c0ee339b13c81b.08771df61e75f854.a21820b1885beb51.f2f5f67d117eaf19 - fcfaa5d910d3ff6f.5459bb9affcf7120.c12e6b61e7907138.5bf57f3187755725 - f4f2effde895861e.4a569c904bb7dbcc.041d8c999a3f69e4.40eb4f001a34d03b -- 0000000000000000 --VTESTPS_128_3(mem) -+ 0000000000000040 -+VTESTPD_128_3(mem) - before - f2e8b2a4093c2c38.59f5c809bee499d5.c83b3ec51f39f285.c7317ec33df60f02 - 76883c509c9d8677.884f2d6b2e4c7440.a8d41c2396627177.66b63d4d6d409e3d -@@ -33532,7 +33532,7 @@ VTESTPS_128_3(mem) - 210470f888533f50.b53787de4f9971e0.01527d0ee0d799b4.a742142de2be6abd - 0000000000000000 - --VTESTPS_128_3(reg) -+VTESTPD_128_3(reg) - before - a922ef9ad91aadc3.017911cc18c01542.6a5d75c737950b6d.33cef772e93bbb58 - f84f7454ec7951a6.61785d30894ae273.5a0adfb52adb5c5e.372e9eb1077535e4 -@@ -33545,7 +33545,7 @@ VTESTPS_128_3(reg) - 4bb5aff432b346af.1ecccf10f8fc610e.df8abf14c3f6a25f.ea3fedb65391c384 - fda09be74954ca89.1443e35981e35040.562913509e72171b.28cb616dec9c2365 - 0000000000000041 --VTESTPS_128_3(mem) -+VTESTPD_128_3(mem) - before - b586a4a16fad449a.6c5c349acde917e2.1fa715f53f0a6935.1b33d6d658dcf73f - bc4e6cf691cb7e45.f334767759fd6a63.1bc5e1d24e7d6818.8bf304108cbf8076 -@@ -33559,7 +33559,7 @@ VTESTPS_128_3(mem) - 97acb4b3256eef98.b86be663fbd41194.565f38fbd1790c5a.d7c99254d52178d0 - 0000000000000041 - --VTESTPS_256_1(reg) -+VTESTPD_128_3(reg) - before - 1b0a9d7d57f8df88.23dc2df2ce0b9f99.ae630c4a48aedd9a.4d73bb207d192811 - 40d1a795136e3236.3e1a2e5886ea430f.2da6cb0c0e389e7a.a570c935ea351b67 -@@ -33571,8 +33571,8 @@ VTESTPS_256_1(reg) - 40d1a795136e3236.3e1a2e5886ea430f.2da6cb0c0e389e7a.a570c935ea351b67 - 371604eaf3a595fe.c43533cf6a189925.8f832015e9fd92e0.3a24dc2635daa087 - 5c27b1e8902a438f.91f8b84596a05b07.324505d17489f377.e85972e07914749d -- 0000000000000040 --VTESTPS_256_1(mem) -+ 0000000000000001 -+VTESTPD_128_3(mem) - before - fe79145a5e73f95f.0b4ea9fb88877a93.802e3aa5258e45e2.703778ac4b69feec - 1ffc18f437b22161.a0d8e890774b74b7.6fa533db33ef15e2.a7a674120b28eeea -@@ -33584,9 +33584,9 @@ VTESTPS_256_1(mem) - 1ffc18f437b22161.a0d8e890774b74b7.6fa533db33ef15e2.a7a674120b28eeea - c9308e0579b4880a.77116b11f8ff6da6.392721d3ddce8532.31def5704f52011e - d7e3f37b4088ea86.eb452ceba831a30d.ba817f793e3752ff.6b2bf830b4737134 -- 0000000000000040 -+ 0000000000000001 - --VTESTPS_256_1(reg) -+VTESTPD_128_3(reg) - before - 6034708a4fcd5ab4.27dfc241a9370200.5ac0298b226c5098.cd7fcab973373775 - d287defcbd1d4b77.94f17742d0cf8da5.1fcd5d5c023cb0f2.50ec7c7f97d9f1bf -@@ -33598,8 +33598,8 @@ VTESTPS_256_1(reg) - d287defcbd1d4b77.94f17742d0cf8da5.1fcd5d5c023cb0f2.50ec7c7f97d9f1bf - 651fbe81bc948acb.f9e58f6cd05b47a1.96bac4c9e52e01c8.1e9613b8c7293c0a - 73480a85e7be535c.348784aac5e7eb1f.1ad15b4066ce7dc5.12470a4e1e34d481 -- 0000000000000000 --VTESTPS_256_1(mem) -+ 0000000000000041 -+VTESTPD_128_3(mem) - before - e0f20945b3a9daa5.594ec074db28e1d8.1fa2d4e8cc80374c.095f1c2c22a66196 - 7282087e282ac0aa.737ddbba335d71e8.9804fa130031e553.beb005f9b544e9e6 -@@ -33611,9 +33611,9 @@ VTESTPS_256_1(mem) - 7282087e282ac0aa.737ddbba335d71e8.9804fa130031e553.beb005f9b544e9e6 - 9a4b58c53596e28c.1d2157c38ce93f3b.797773157e06b161.94101114ba335063 - 36187406f6f9fd76.b38531fc8159867b.a0c8b9db610c59a1.e9ca3de7cd00d3b6 -- 0000000000000040 -+ 0000000000000041 - --VTESTPS_256_1(reg) -+VTESTPD_128_3(reg) - before - 7c80e1698f611d94.20b4d92d865ecd95.91f763cfae388354.e7c34a52c64e9740 - 721352ef760e5b77.35ed012601d10e15.13c1eba9b0127274.2b34a164c8d9286a -@@ -33625,8 +33625,8 @@ VTESTPS_256_1(reg) - 721352ef760e5b77.35ed012601d10e15.13c1eba9b0127274.2b34a164c8d9286a - 5731d2dfdbc8a5e1.528d6add845e7c21.9530c4f723748f84.49e73aff84b8c84a - 85265da35a1b377f.51618f3f2b12d2e5.7390eb24a1e91533.1ba7910e15f7320d -- 0000000000000000 --VTESTPS_256_1(mem) -+ 0000000000000041 -+VTESTPD_128_3(mem) - before - 4f826b3828c657eb.5a3ef0a990934cfc.0f34ec3611f8cd8f.092d5a9bc9fe412b - 6834e52be26e895d.30c4865c19bd2205.68d4feaf521d2848.b3520fca353e4f18 -@@ -33638,9 +33638,9 @@ VTESTPS_256_1(mem) - 6834e52be26e895d.30c4865c19bd2205.68d4feaf521d2848.b3520fca353e4f18 - a6240d42e1a77662.64051b289025f245.390c3f970b8ca13f.cd4d051c81357ba7 - e51e5f69417cda26.534eab799255fb69.5ca72dd95751f29e.b26838fd4a6f0084 -- 0000000000000040 -+ 0000000000000041 - --VTESTPS_256_2(reg) -+VTESTPD_128_3(reg) - before - 5231461dc1de08d6.01ed588c1ff971d5.57e933bbbadb771d.ae7243615379d791 - c4771933a72b02a4.d65f7398972bf69a.cd22ad5ba443a30c.0b39fd1a1a0e0e46 -@@ -33649,11 +33649,11 @@ VTESTPS_256_2(reg) - fc6ddead4cdeee9e - after - 5231461dc1de08d6.01ed588c1ff971d5.57e933bbbadb771d.ae7243615379d791 -- 710d19887aeb466f.413e2c77c31c26a1.114717c3ed17bbe3.4fc8d8f2c91f51e6 -+ c4771933a72b02a4.d65f7398972bf69a.cd22ad5ba443a30c.0b39fd1a1a0e0e46 - 710d19887aeb466f.413e2c77c31c26a1.114717c3ed17bbe3.4fc8d8f2c91f51e6 - b7414289d5aa10e4.1c57ff17c2dbbd18.7fa36d6030e6fb4d.56eb4fd47bb55da0 -- 0000000000000001 --VTESTPS_256_2(mem) -+ 0000000000000040 -+VTESTPD_128_3(mem) - before - 1d1c016759a5bf0c.f15d91a054f49cae.44766963ae717628.7481a99f0a399ef7 - 95c234efbe178d18.7aae003b9456257a.9567e547a3ec0f00.4a2ec9eb169ee18d -@@ -33662,12 +33662,12 @@ VTESTPS_256_2(mem) - b007535482acc08b - after - 1d1c016759a5bf0c.f15d91a054f49cae.44766963ae717628.7481a99f0a399ef7 -- e2e3fe98a65a40f3.0ea26e5fab0b6351.bb89969c518e89d7.8b7e5660f5c66108 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 95c234efbe178d18.7aae003b9456257a.9567e547a3ec0f00.4a2ec9eb169ee18d -+ 402cf432963f14eb.b0808dc5315ce8f3.eaf6efaebe5742ca.5ef6c7aff1a0ffba - fa26bc1afd290fb4.ed1f33aac69021c7.21ee03861abfcbb2.0c25a15937cb362b -- 0000000000000040 -+ 0000000000000041 - --VTESTPS_256_2(reg) -+VTESTPD_128_3(reg) - before - a6e8d70c70ceda87.9f7c089510e23c9d.8fd7ef56ef800b9f.151d9dbbd42f68e5 - 4a132bed9dbdbfcb.0bf9548eeb7555d2.f0f3bb3549b7e32a.a24d3a3707b3d38f -@@ -33676,11 +33676,11 @@ VTESTPS_256_2(reg) - 76e1f5949132440c - after - a6e8d70c70ceda87.9f7c089510e23c9d.8fd7ef56ef800b9f.151d9dbbd42f68e5 -- f8d64a64a406ac02.196b1cf0a9ee1680.6ec195b370c2e511.a44b55e7d058c9dc -+ 4a132bed9dbdbfcb.0bf9548eeb7555d2.f0f3bb3549b7e32a.a24d3a3707b3d38f - f8d64a64a406ac02.196b1cf0a9ee1680.6ec195b370c2e511.a44b55e7d058c9dc - 0c7b30db2234ddd9.a79cdda9665a3dd3.638b783cff2c4d03.f7e36ab74a2905f6 -- 0000000000000001 --VTESTPS_256_2(mem) -+ 0000000000000000 -+VTESTPD_128_3(mem) - before - ff107368c2804248.e14fd9bfb2d48efb.905912a43fc484f6.2c9e603d928156aa - 6d3e5f21f91ebbd7.d59d427df171fa15.b06e37cd4f38a816.26464a20c64e3db3 -@@ -33689,12 +33689,12 @@ VTESTPS_256_2(mem) - cab3e5553cf87cce - after - ff107368c2804248.e14fd9bfb2d48efb.905912a43fc484f6.2c9e603d928156aa -- 00ef8c973d7fbdb7.1eb026404d2b7104.6fa6ed5bc03b7b09.d3619fc26d7ea955 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 6d3e5f21f91ebbd7.d59d427df171fa15.b06e37cd4f38a816.26464a20c64e3db3 -+ 9c3535aa51196ae4.43b3667f7a975ed3.e2a7c811b3c3645f.abcf3053361e3ec9 - 67c271efe67b0d9c.87dc4133e9d2f6e0.04d0425a867075fc.188410407f7d9499 - 0000000000000040 - --VTESTPS_256_2(reg) -+VTESTPD_128_3(reg) - before - 1ba6acfd0a1a3215.acb18fdbd5525d2b.fc63cf04dbaffee9.f1b42095e54b971a - 68aa5fa4846ff21a.45ce0c5c3aaa19bc.00950c5eebb9b199.8421deafeb6186e4 -@@ -33703,11 +33703,11 @@ VTESTPS_256_2(reg) - c18d316802797607 - after - 1ba6acfd0a1a3215.acb18fdbd5525d2b.fc63cf04dbaffee9.f1b42095e54b971a -- 0d0bfcb64684f788.10e4635e308dfb7b.eebef5adb67d4c9d.9be1f892b5bdfd87 -+ 68aa5fa4846ff21a.45ce0c5c3aaa19bc.00950c5eebb9b199.8421deafeb6186e4 - 0d0bfcb64684f788.10e4635e308dfb7b.eebef5adb67d4c9d.9be1f892b5bdfd87 - 66157e9fede47e0c.e7c110cbd30ac096.212a855dd8860ba0.10c1eb2c5e6cba2e -- 0000000000000001 --VTESTPS_256_2(mem) -+ 0000000000000040 -+VTESTPD_128_3(mem) - before - 88114832bff0f03b.cf14e1cb151bc351.a82f8f90402a2437.f725b8daeb602950 - 4318ab75aedde2f8.a45322a659b60104.2dfb5c9992fbe28a.cbfb8a908e98e356 -@@ -33716,12 +33716,12 @@ VTESTPS_256_2(mem) - d1949441e3e61030 - after - 88114832bff0f03b.cf14e1cb151bc351.a82f8f90402a2437.f725b8daeb602950 -- 77eeb7cd400f0fc4.30eb1e34eae43cae.57d0706fbfd5dbc8.08da4725149fd6af -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 4318ab75aedde2f8.a45322a659b60104.2dfb5c9992fbe28a.cbfb8a908e98e356 -+ cc70d71fed4d096a.41203b9d564076d1.54f1f4d3e688b8bc.f8f7f8eb5bb97561 - 00e3461c984b21bd.02c52a1aa7465c63.f7ddd22957dd5ff9.dc66fc58ee4f1b1a -- 0000000000000040 -+ 0000000000000001 - --VTESTPS_256_3(reg) -+VTESTPD_128_3(reg) - before - 35cdbc14d80b914d.bc3e7656c9e4e61c.438fea8be853ef67.f38b72860207966c - 625d6e3c664ada1e.da4de2ba9f2213b4.60ca785ab6f36d88.25c651d802111742 -@@ -33733,8 +33733,8 @@ VTESTPS_256_3(reg) - 625d6e3c664ada1e.da4de2ba9f2213b4.60ca785ab6f36d88.25c651d802111742 - b590a8252b2d264e.37dc0635341465b0.b5c1cef5acb21073.675ce90a74089fa6 - 8bb1643ac342b28a.afb75eb1a4c3973d.9ec2eac7671d14d4.9617b80873f7eac5 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000041 -+VTESTPD_128_3(mem) - before - 2c2fe81889edb8e3.3e0ea1e9c915ba7d.1fa9671c0c3d6786.7717c73c82bfb756 - 4a244202d90db33a.2bf1589ed9307ad4.617f9c60878d8fb8.9c0e61c09a2533a6 -@@ -33746,9 +33746,9 @@ VTESTPS_256_3(mem) - 4a244202d90db33a.2bf1589ed9307ad4.617f9c60878d8fb8.9c0e61c09a2533a6 - c56ec169265660fb.afa786c390212d3b.5206796b32c0cbff.69f1b4bf4ad9c56f - 79dbe3378cd27d53.247c28c58a74105d.ce087a2828e1d986.390dbda52f6aa95e -- 0000000000000000 -+ 0000000000000041 - --VTESTPS_256_3(reg) -+VTESTPD_128_3(reg) - before - 571fded7064c555d.4235235a288fc46e.e7bb391062b35fe7.b1521c8386fc737a - 5baeeefb30b696c4.fc49febc1598f177.54b2b511b46c5584.d7afda68671d5606 -@@ -33760,8 +33760,8 @@ VTESTPS_256_3(reg) - 5baeeefb30b696c4.fc49febc1598f177.54b2b511b46c5584.d7afda68671d5606 - d4a5a4b5ff2c1902.83e3ee4b70fac29b.c7ab99321d2b30e1.1ced2fc3e7513e57 - 1d51fa730e3919c0.b3cf71f255c0f105.9cf4dfe1387b29aa.5cd69a8024a4e699 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000040 -+VTESTPD_128_3(mem) - before - 3ddd9bd13ed3699e.91feeea0f969d3ad.68d9029ddef63be2.30d78589a2e87f8a - 9692293d55c8bbb9.8ef87ba85d498373.7ecc1d382aa95c5e.dda18696f6fe6c2e -@@ -33773,9 +33773,9 @@ VTESTPS_256_3(mem) - 9692293d55c8bbb9.8ef87ba85d498373.7ecc1d382aa95c5e.dda18696f6fe6c2e - 5a22bdba970cbf75.6e8b9ef7d66364bf.d1763faf52e40fa4.009dde74d14a2e41 - 655bd03620aa2ffd.8f0251f9ff46b33c.3da1e2ee75b311e1.f5198a8fce57fe70 -- 0000000000000000 -+ 0000000000000041 - --VTESTPS_256_3(reg) -+VTESTPD_256_1(reg) - before - c4bdca2ca0e5bfd1.9207df9c0daec77f.4bab921a747bac97.9d1a84e1ac231e40 - 577d5786ad7e275b.bff467d879254524.ffd05cc6d2908b7b.cfada074153ff2ee -@@ -33787,8 +33787,8 @@ VTESTPS_256_3(reg) - 577d5786ad7e275b.bff467d879254524.ffd05cc6d2908b7b.cfada074153ff2ee - 2cec28ce4c098fb0.c7ece3d6811a631b.08beab6ab4118b95.ae26b394cc134817 - 9f56376e1911327d.86bccf824099de8e.c0c17c70b788e991.1650372becacdde6 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000001 -+VTESTPD_256_1(mem) - before - f0eb8773d95ab328.0c0682d4b1224d6e.d730a7c8d3af71a9.8424ca467683e11a - 1bf34afbdd886cf3.cf4a046ab0c81c2e.9813e8945567d999.b13590568e8eaedd -@@ -33802,7 +33802,7 @@ VTESTPS_256_3(mem) - 3775736f8ecc26b8.c6ba9edb5005c5cd.d65a926f98ee18a7.b18d7ad93700bac0 - 0000000000000000 - --VTESTPS_256_3(reg) -+VTESTPD_256_1(reg) - before - a12818589240ed98.e086d13373fba00b.b37ead8d2ab41704.0c56f35691d5661d - 3a0d01e488cb6b8f.17de05e386427c38.6504e420db280cba.20f1ac73e98f7a18 -@@ -33814,8 +33814,8 @@ VTESTPS_256_3(reg) - 3a0d01e488cb6b8f.17de05e386427c38.6504e420db280cba.20f1ac73e98f7a18 - 62664b337eae27c8.b6478b6be2ae766c.3a9a3e00fdede29d.f0f83ab1bd270dc3 - 7681f3b111745dee.9b8ee0b8a3494cd3.8c8bb8992f90d356.563618fe28a9de4a -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000040 -+VTESTPD_256_1(mem) - before - 588bb472349c25a0.d2a8f4cbdda948ad.a07f7eb4e622b898.b9224c580a9b1c94 - ab3a6b710e2514c5.d22849eb7dd925b2.a3e6e34dc64277e7.1cadf8a72d9df800 -@@ -33829,7 +33829,7 @@ VTESTPS_256_3(mem) - 439a1596f39334e2.2e63e5f1aa5ca43e.0e45f002cf8cddd7.f2ca85a9b5af5d19 - 0000000000000000 - --VTESTPS_256_3(reg) -+VTESTPD_256_1(reg) - before - f1423f00a627e000.3fe30093378fdd31.42b622af70c7be1c.30d690f72fcefcce - c6ff23794d27236f.d7f99f13d6c9e691.6992a5247a5cbaef.be0ce5389d875e00 -@@ -33841,8 +33841,8 @@ VTESTPS_256_3(reg) - c6ff23794d27236f.d7f99f13d6c9e691.6992a5247a5cbaef.be0ce5389d875e00 - f876060be2656215.e5a76f00ed4e0d2d.014269bc64a9d364.95b46db135c6be99 - e4f4e422016bd99f.46b8eb4897290c32.65136ae3cb3a4727.919aa44e1294d9c4 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000001 -+VTESTPD_256_1(mem) - before - 684f0ba50c123082.e6c5ba2a47c7c3b9.d6f98fd6f1679fcc.f151a5054a9a4fe3 - fcb7343662dae36d.5b35838f50055d0e.7136d79616138426.0148148e7e552a45 -@@ -33856,7 +33856,7 @@ VTESTPS_256_3(mem) - bd9bdcc149b60637.0921de211853901b.38d4445c33e62fcc.1c918386720d45aa - 0000000000000040 - --VTESTPS_256_3(reg) -+VTESTPD_256_2(reg) - before - 974d972a89c376b5.a3b0549313e3ed6e.fb366826107da12b.1ccc613a63246e70 - 9f54d50b677bed67.b297ddfde6f4b46b.cf19d6373ab75227.7bf113face02ed85 -@@ -33865,11 +33865,11 @@ VTESTPS_256_3(reg) - 125d77bf8cc8471e - after - 974d972a89c376b5.a3b0549313e3ed6e.fb366826107da12b.1ccc613a63246e70 -- 9f54d50b677bed67.b297ddfde6f4b46b.cf19d6373ab75227.7bf113face02ed85 -+ 52dc2fdba2d69ec6.c61cf5ebdff5155b.e11723c23390dfba.310dd48890896936 - 52dc2fdba2d69ec6.c61cf5ebdff5155b.e11723c23390dfba.310dd48890896936 - 0e31a406d561c57f.ba0a184919f2cc6a.8d7c4b3296918391.1aed22d1c6c79eb0 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000001 -+VTESTPD_256_2(mem) - before - f5295140fd9622ad.2d9e2df79ca79d3e.6c2fc003b1f897c3.2f944af300487b57 - 9f1c2c3f353fe989.0d71c81d943464ae.b7556b05c2133093.23aa1c710c4003b9 -@@ -33878,12 +33878,12 @@ VTESTPS_256_3(mem) - 83df5f921828513d - after - f5295140fd9622ad.2d9e2df79ca79d3e.6c2fc003b1f897c3.2f944af300487b57 -- 9f1c2c3f353fe989.0d71c81d943464ae.b7556b05c2133093.23aa1c710c4003b9 -- ec0482a851cf58dd.08f46fe15995537c.7749943b694d5405.c50cbe1857055763 -+ 0ad6aebf0269dd52.d261d208635862c1.93d03ffc4e07683c.d06bb50cffb784a8 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - b7abd1666c502dd6.7c7520b08555a954.88d7b791c1b4be46.71042b547c24b200 -- 0000000000000000 -+ 0000000000000040 - --VTESTPS_256_3(reg) -+VTESTPD_256_2(reg) - before - 57e9563cc69e6fc5.dede9467a3d0229f.c33ed7f6b700a0e1.c6cb50f4e7542b81 - 496e0dbf22114a45.3c694797125bf465.3a9c8e20892375d0.0cf0dc4ef63757e4 -@@ -33892,11 +33892,11 @@ VTESTPS_256_3(reg) - ae840367b4f5acaa - after - 57e9563cc69e6fc5.dede9467a3d0229f.c33ed7f6b700a0e1.c6cb50f4e7542b81 -- 496e0dbf22114a45.3c694797125bf465.3a9c8e20892375d0.0cf0dc4ef63757e4 -+ b5ba7f88c90d1c69.ac1866e0d3fb5e53.3eda4398974964cc.3814d58d0a6bfe98 - b5ba7f88c90d1c69.ac1866e0d3fb5e53.3eda4398974964cc.3814d58d0a6bfe98 - f618a802571e22dc.0cb76e2f05be1d96.2946f1cc7efea982.2501b99c40fcdbcc -- 0000000000000040 --VTESTPS_256_3(mem) -+ 0000000000000001 -+VTESTPD_256_2(mem) - before - b16930da81622a5e.6ad6849867d1974b.3711da70c1b0ed5a.582a9427d9cf7f9d - 087cbae1c34f1415.6c3e0fb895b1b961.08f4269025dc8aca.27d42815444723ca -@@ -33905,12 +33905,12 @@ VTESTPS_256_3(mem) - ed65648902133973 - after - b16930da81622a5e.6ad6849867d1974b.3711da70c1b0ed5a.582a9427d9cf7f9d -- 087cbae1c34f1415.6c3e0fb895b1b961.08f4269025dc8aca.27d42815444723ca -- 91881f6897c924fb.579d46cd7e4bc1cb.5d2ace794d4eaf13.f38eaa015df2d0b5 -+ 4e96cf257e9dd5a1.95297b67982e68b4.c8ee258f3e4f12a5.a7d56bd826308062 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 265bda5b18db173b.893f2443bd2aee34.10804e1954121a61.16a51459bd5dc409 -- 0000000000000000 -+ 0000000000000040 - --VTESTPS_256_3(reg) -+VTESTPD_256_2(reg) - before - d41996fbc8a06b9e.a5bf68a66391a902.5d70a587efda7b49.ffc2235b573584df - 270fa41caa919837.e881433693f8957b.2e7bc503b0e7a3b6.04bcc82b71c2acba -@@ -33919,11 +33919,11 @@ VTESTPS_256_3(reg) - 36f07027645fe72d - after - d41996fbc8a06b9e.a5bf68a66391a902.5d70a587efda7b49.ffc2235b573584df -- 270fa41caa919837.e881433693f8957b.2e7bc503b0e7a3b6.04bcc82b71c2acba -+ 42918c584471faea.cd6de9f5c51b99d4.5aae81249adea326.fd39b975bec54c1d - 42918c584471faea.cd6de9f5c51b99d4.5aae81249adea326.fd39b975bec54c1d - 81ec491c33cdce62.2e4fd5d114076e36.3b53d4574c4bb646.c40772255b4b2135 -- 0000000000000040 --VTESTPS_256_3(mem) -+ 0000000000000001 -+VTESTPD_256_2(mem) - before - 30c12e67f40e5a32.406cd7d2132f504c.e8f383b49dc7d3cf.2fb7ba065fb819c2 - 8c4628d127633570.db5d32e87f25bb53.d8246f8c7b6782cb.90262f9f71b30845 -@@ -33932,12 +33932,12 @@ VTESTPS_256_3(mem) - e0acc217b76c74b4 - after - 30c12e67f40e5a32.406cd7d2132f504c.e8f383b49dc7d3cf.2fb7ba065fb819c2 -- 8c4628d127633570.db5d32e87f25bb53.d8246f8c7b6782cb.90262f9f71b30845 -- 274bda521a6a3512.ae0b56c9133b4c24.d8b01644cbf33856.bcec2f8c1ec8bf7c -+ cf3ed1980bf1a5cd.bf93282decd0afb3.170c7c4b62382c30.d04845f9a047e63d -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - de9cc0d4e82f1545.15c140e16cfc3f6b.c561f3c8a878b19b.0d54b73b01817a12 -- 0000000000000001 -+ 0000000000000040 - --VTESTPS_256_3(reg) -+VTESTPD_256_3(reg) - before - 923e4c8cdb14ea0d.8b045745aebf9334.6ccdeb9c25f4d0d3.7c0482042f01a9c6 - 7d575106090617ca.0b511a908725690c.0e795366dbaf3a08.d7653fe47b9bdb05 -@@ -33950,7 +33950,7 @@ VTESTPS_256_3(reg) - fe43cef1decd3997.3a4d85a0906e53f9.591275ab29babab8.b350a654a8510481 - 714ebdbaf6f58a1f.f4c51463e4a50f26.a8e44bd7aca08b8d.ec903441d32fdf69 - 0000000000000001 --VTESTPS_256_3(mem) -+VTESTPD_256_3(mem) - before - e543b23e91949f27.33c41ccbec0b460f.158544c4a0d657c0.573bd356ffeeeb33 - 5d4d9a265d34fa57.9ef1e6915c9aab12.79588fafdf0ee8f2.c1630895bf2f1457 -@@ -33962,9 +33962,9 @@ VTESTPS_256_3(mem) - 5d4d9a265d34fa57.9ef1e6915c9aab12.79588fafdf0ee8f2.c1630895bf2f1457 - a2dd993b962bf9a0.0f201879e32ff3d5.fc0c7310be587ee9.44a7e6fe87ef43a5 - 90bf2a6858875631.e29eacee1c545b04.7a6b6bd458c0d4d1.3b546afff4bbb3c8 -- 0000000000000000 -+ 0000000000000001 - --VTESTPS_256_3(reg) -+VTESTPD_256_3(reg) - before - f41a51752aa44a40.03bfc999c053ce34.73b7a05ba4971f4a.cf43f4e5c953a7d5 - 6ec9acc32cd9e7ec.d7a8f2bae99c1dd5.1eb7ef2e16847a54.d75e88302f1bb322 -@@ -33976,8 +33976,8 @@ VTESTPS_256_3(reg) - 6ec9acc32cd9e7ec.d7a8f2bae99c1dd5.1eb7ef2e16847a54.d75e88302f1bb322 - cd129c58434ab71e.e84821b7f06dfe42.3fea95d20fa6a9cd.6e89a5a2a327b3e3 - 6b401ea00a83f481.1269d37cf0d22ea4.329c8fb32a89e862.708fc62643806545 -- 0000000000000000 --VTESTPS_256_3(mem) -+ 0000000000000040 -+VTESTPD_256_3(mem) - before - 25600513754fc99b.a69e2c081d0edbc2.31d883f506d8692a.5318d83d04b972bf - 8fc31b5540dbf5e7.d879c4fa1979a78c.2061ad0f4d8a6bfe.feab6cdd38c3858f -@@ -33991,7 +33991,7 @@ VTESTPS_256_3(mem) - d2779f0bc37cea9c.95d680303a1de26e.e3f060d2df23b241.6246650a2093303a - 0000000000000001 - --VTESTPD_128_1(reg) -+VTESTPD_256_3(reg) - before - 3dcd5b9cc158cbc4.61610557b4a72b5e.d7f09c4b976ec7dd.6e8fe15363226f09 - fe472bf9ded407ea.60bad42a947641f4.81b731a24dce8386.3977cc2588fde4cf -@@ -34003,8 +34003,8 @@ VTESTPD_128_1(reg) - fe472bf9ded407ea.60bad42a947641f4.81b731a24dce8386.3977cc2588fde4cf - 719f2ff3fd72348c.aa50866e7ff2e88a.f0763ba0f7ca5015.22759d336ac1cbc0 - f22261f6babd8c55.1aed99109329dc4e.7e7ab6b032ed6b35.0355d0692679e108 -- 0000000000000001 --VTESTPD_128_1(mem) -+ 0000000000000000 -+VTESTPD_256_3(mem) - before - 22ea4efd9bf6894b.dc1cbf6eb2424cf2.8e5f89fde926d86a.88109f4099c31092 - 163890338bd4939e.8dd944c7808cb00e.e070d0209ff59a0a.6a81f0bbc9d97ad9 -@@ -34018,7 +34018,7 @@ VTESTPD_128_1(mem) - 16d486146407bf84.b0cbb3cc119f5276.92a158b79a3b5a89.262cc023f1f390d5 - 0000000000000000 - --VTESTPD_128_1(reg) -+VTESTPD_256_3(reg) - before - 92da04468c9a8c86.d9bb33968575596f.db9996500a810919.aa5a900417cad1bf - 101028adca205771.9a18a6b5432b46e5.3b598f664b5954ec.10e21037635afd2a -@@ -34030,8 +34030,8 @@ VTESTPD_128_1(reg) - 101028adca205771.9a18a6b5432b46e5.3b598f664b5954ec.10e21037635afd2a - 8eeb9d86782e504e.33b75b5bbb364111.2e589c786db16e9b.a207553c9af99af5 - 68b75f3f334fb2c9.8164cf7608a10820.0ee2b8f40e1794d1.3a93d900d9b3644e -- 0000000000000040 --VTESTPD_128_1(mem) -+ 0000000000000001 -+VTESTPD_256_3(mem) - before - ef139470dda56d53.fac06b43970fba8c.61ea7cf14779553d.3843e045ca16023b - c59ec1f6dbf52459.a051bbfe3efba446.ad16e0b893c9e595.09c70ed73c3bf384 -@@ -34043,9 +34043,9 @@ VTESTPD_128_1(mem) - c59ec1f6dbf52459.a051bbfe3efba446.ad16e0b893c9e595.09c70ed73c3bf384 - 11c21fe94f90f99c.b6b84ddcc79eaca1.42b476b7089d7354.dbb940150111a559 - b04929375882a647.983f1c49cb850d4a.fc90badac301bca5.0c66716db4245165 -- 0000000000000041 -+ 0000000000000001 - --VTESTPD_128_1(reg) -+VTESTPD_256_3(reg) - before - f622c11955338ed5.7e005bcb0fd5e786.a13325b1e93b04ec.b776290de0027cb5 - 68c8d8447c469690.57b3319193977a87.2fe06280ba4ccd34.50323d3d7aac6fb0 -@@ -34057,8 +34057,8 @@ VTESTPD_128_1(reg) - 68c8d8447c469690.57b3319193977a87.2fe06280ba4ccd34.50323d3d7aac6fb0 - a858de3801c78a33.172e2775fdd31973.9d92d122dd44a3ce.a18f7454ad0950c1 - 1320cf628041a669.9a3dba636b968179.47946d04ebb0c365.875a49409627dc14 -- 0000000000000040 --VTESTPD_128_1(mem) -+ 0000000000000041 -+VTESTPD_256_3(mem) - before - 826abe43f8d4e433.036aa72c964125df.bcab6547f9eb6ec3.88343390821b69a6 - 4f475633aa7bd957.d5836304de514441.5946a40dc2de9b7d.bebc1d343e12d13c -@@ -34072,7 +34072,7 @@ VTESTPD_128_1(mem) - d4a6ac8b99a64da1.8f52748b76d75177.742ecff077d0a8f4.75b7527093d1d519 - 0000000000000000 - --VTESTPD_128_2(reg) -+VTESTPD_256_3(reg) - before - 4ce6eb19c94eb05d.43c163cb0e424620.2fa0c112fe64b7a3.aa14b3e59ae6ff09 - a96e54845f3164b3.4cdd1b53fef20d16.21ede2562832ad6b.cb561b6b69cb883e -@@ -34081,11 +34081,11 @@ VTESTPD_128_2(reg) - 473a45a4f3c79d58 - after - 4ce6eb19c94eb05d.43c163cb0e424620.2fa0c112fe64b7a3.aa14b3e59ae6ff09 -- 0000000000000000.0000000000000000.c184d1c391cd6e7b.b3c08370008afdbf -+ a96e54845f3164b3.4cdd1b53fef20d16.21ede2562832ad6b.cb561b6b69cb883e - 23a8ca8ec1e84267.cac7520f82c35fae.c184d1c391cd6e7b.b3c08370008afdbf - 14de49a48cfe8625.994b83ecb8c0f715.6bb38cc5d4c2377e.3e1d68df792f1ab9 -- 0000000000000001 --VTESTPD_128_2(mem) -+ 0000000000000040 -+VTESTPD_256_3(mem) - before - ace395ab885d40c7.da5dcd305cff6b98.95352bd4bcf59277.7bc40ec88e9c4421 - 48e4d7e054fdc033.cf71529fcb772e6c.9950c4b5a96fecff.4d0454395ae7d10f -@@ -34094,12 +34094,12 @@ VTESTPD_128_2(mem) - e6d58f5045eacd58 - after - ace395ab885d40c7.da5dcd305cff6b98.95352bd4bcf59277.7bc40ec88e9c4421 -- 0000000000000000.0000000000000000.6acad42b430a6d88.843bf1377163bbde -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 48e4d7e054fdc033.cf71529fcb772e6c.9950c4b5a96fecff.4d0454395ae7d10f -+ f709842f74b4d8c8.5066d55e78f30b4f.836acc799c39c1da.3cbf5882d43019f5 - 941e1a84038d45b1.ba8751d8fcff3deb.2e4dbe0eb05fcc33.a64018119902597f -- 0000000000000040 -+ 0000000000000000 - --VTESTPD_128_2(reg) -+VTESTPD_256_3(reg) - before - 58c8b9ad7373b12d.fdef13cc1e94c31b.6722c278f62501ec.75c6165f01eecb37 - 57669393bf2940a9.0c47edf1e0d60e31.b48124acfff493ff.36a15158acf17711 -@@ -34108,11 +34108,11 @@ VTESTPD_128_2(reg) - e675256bde2cee61 - after - 58c8b9ad7373b12d.fdef13cc1e94c31b.6722c278f62501ec.75c6165f01eecb37 -- 0000000000000000.0000000000000000.fdf174dfb5f52fd0.4caae9e5cc748fef -+ 57669393bf2940a9.0c47edf1e0d60e31.b48124acfff493ff.36a15158acf17711 - 41fb176ec699b779.9ff324e1665ee120.fdf174dfb5f52fd0.4caae9e5cc748fef - 71d343aa234d5248.90bf3286cb38fa13.9ebead7db4b6100a.92ac5cf27e84cdfa - 0000000000000001 --VTESTPD_128_2(mem) -+VTESTPD_256_3(mem) - before - 22cfc03c0779ae4d.423a12b373d44cc3.bd7795ce2b711237.f334cbf297c2735a - 2387aa521575c8ed.127c81f551b7e296.00e7c8a4a314e8b8.599fcaaafba5946b -@@ -34121,12 +34121,12 @@ VTESTPD_128_2(mem) - 8094e79e40d3c1e1 - after - 22cfc03c0779ae4d.423a12b373d44cc3.bd7795ce2b711237.f334cbf297c2735a -- 0000000000000000.0000000000000000.42886a31d48eedc8.0ccb340d683d8ca5 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 2387aa521575c8ed.127c81f551b7e296.00e7c8a4a314e8b8.599fcaaafba5946b -+ c6695e97252ffa6b.3be48add5a84506c.37da47f44f2e36c1.2a4aa6127becaeea - e54158f952b0fdf4.1bbf2bd529c6d2f2.3c1e8eaa4ac9b97f.c3835c94b322ff83 -- 0000000000000040 -+ 0000000000000000 - --VTESTPD_128_2(reg) -+VTESTPD_256_3(reg) - before - bdca439abe8c30b1.5edb1463b90690b3.0c595f4b5b0aa3d4.ed7d1ab2b0f42d1e - d6716cf6c8d88a9e.0b030ec0753c6dd5.6cfe22a98bdb00bd.24c465f89eb84ec9 -@@ -34135,11 +34135,11 @@ VTESTPD_128_2(reg) - 8c01a277ad1c13cd - after - bdca439abe8c30b1.5edb1463b90690b3.0c595f4b5b0aa3d4.ed7d1ab2b0f42d1e -- 0000000000000000.0000000000000000.95fa705d56c5255a.bebfed693023d7ac -+ d6716cf6c8d88a9e.0b030ec0753c6dd5.6cfe22a98bdb00bd.24c465f89eb84ec9 - 26d45f1dfa440955.c984c3fea25e5185.95fa705d56c5255a.bebfed693023d7ac - 0b41167af15be982.742bad085d79f8f0.e59946d257554d56.973a2def804085f5 -- 0000000000000001 --VTESTPD_128_2(mem) -+ 0000000000000040 -+VTESTPD_256_3(mem) - before - 77dfc7eed1c23f63.e0028f7b48a968d0.e9c44acac2991e42.b6269f742b16b55e - 35a2173f083ec3e1.0165c68b9cbac0eb.021b1630ecc87ea6.65ef77af6d94991d -@@ -34148,12 +34148,12 @@ VTESTPD_128_2(mem) - 3fa1d32ee2f78361 - after - 77dfc7eed1c23f63.e0028f7b48a968d0.e9c44acac2991e42.b6269f742b16b55e -- 0000000000000000.0000000000000000.163bb5353d66e1bd.49d9608bd4e94aa1 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 35a2173f083ec3e1.0165c68b9cbac0eb.021b1630ecc87ea6.65ef77af6d94991d -+ a21410556f9c5b74.cab4b517881b2e81.9cfc8b27f814d549.4f3ecaefb95c3540 - 9a022e1e21e9c547.963c5a89a957ee3c.933327990088de56.ce6095a0acf9c473 -- 0000000000000040 -+ 0000000000000001 - --VTESTPD_128_3(reg) -+VTESTPD_256_3(reg) - before - fe4d7f06f6e3aeb7.f938eb853a30bb87.c349af4e9afb3bc8.c38b6573233157fa - 67af989284488020.9b81c576d87efa5f.ac26b2d3f89252d2.08d1c1a27b1afa61 -@@ -34166,7 +34166,7 @@ VTESTPD_128_3(reg) - d714174029b23749.5cab37de14de3efc.ad215f825ea86f06.3ed1b710244f83b6 - a8c9fa7a80ae0cde.1880bda70c5c4289.2184b0c968c9ce0f.4157c4ab3bddb026 - 0000000000000040 --VTESTPD_128_3(mem) -+VTESTPD_256_3(mem) - before - 1e2510152131e105.37183bae26c73e8a.abced4bedc05c334.669ca312b382aa9a - b00447bc280f5ecd.e04ed847b68a07fa.f15ff6109fe47d26.d6b533cbdb5f4053 -@@ -34180,7 +34180,7 @@ VTESTPD_128_3(mem) - 67b1448aeb72cbe8.f09e1458063b51d4.067c50116f758b96.ab1a1a3a2fb189fd - 0000000000000040 - --VTESTPD_128_3(reg) -+VTESTPD_256_3(reg) - before - 801247754621896d.44160289df0d3493.0f51aba8fe414a97.8da17f98b53f576a - 31a3adaee0e2441d.f1953a290455648d.b81a8d0d5021cacd.373aab0a5e6f4b37 -@@ -34193,7 +34193,7 @@ VTESTPD_128_3(reg) - 35fd98ddfe0e2003.4cfa685477561602.4746b6f499660e23.df124e5286122529 - e96c046f3d325acb.301009f8531a071d.172122c7749c5244.63f6e65c4a339f6c - 0000000000000040 --VTESTPD_128_3(mem) -+VTESTPD_256_3(mem) - before - 6c12e36614206592.aa3ceed138d92e20.79a597ffb4aff20a.86f7cef37d50d1dd - a8e23f3f520429ce.d2b8516d8c8fd7af.02839057b72195f7.ef14b5e5510dc89a -@@ -34205,9 +34205,9 @@ VTESTPD_128_3(mem) - a8e23f3f520429ce.d2b8516d8c8fd7af.02839057b72195f7.ef14b5e5510dc89a - 30ed80899c967e0b.be2e29b1d4e19223.a97770eb787baa0e.aec3d3088c607326 - de0021320de32074.cae87208ad5a9b29.494db1a712c9ee7b.1e5124c7c9d40d2d -- 0000000000000040 -+ 0000000000000000 - --VTESTPD_128_3(reg) -+VBLENDVPS_128(reg) - before - 863b50ceba4f0260.90e89e24c2f6ca36.533329deb2862e6d.bdd1d177a1171c6b - 342e23eda66fd3e2.206f744dd6db3a7d.b35b499f80f2869a.e3ce4a474272f20a -@@ -34215,12 +34215,12 @@ VTESTPD_128_3(reg) - 548c2e7f722f5216.4e8c17f08c4d5647.6b72b492e4b77862.b1673d98287c8003 - 119aadf0a644b2b6 - after -- 863b50ceba4f0260.90e89e24c2f6ca36.533329deb2862e6d.bdd1d177a1171c6b -+ 0000000000000000.0000000000000000.b35b499fb229e05d.95129a034272f20a - 342e23eda66fd3e2.206f744dd6db3a7d.b35b499f80f2869a.e3ce4a474272f20a - 052f195a05e18590.6c621e98659f2974.47acceb7b229e05d.95129a0310e52a83 - 548c2e7f722f5216.4e8c17f08c4d5647.6b72b492e4b77862.b1673d98287c8003 -- 0000000000000000 --VTESTPD_128_3(mem) -+ 119aadf0a644b2b6 -+VBLENDVPS_128(mem) - before - 927768f8a4487ac7.7c8f5fc98ae7771f.a4bbde4367f27b24.7bf8f79db3298a54 - 11cae99d40959562.db86a7a5e8942f58.48b9ec7c11995534.d38b9442bb0a51df -@@ -34230,11 +34230,11 @@ VTESTPD_128_3(mem) - after - 927768f8a4487ac7.7c8f5fc98ae7771f.a4bbde4367f27b24.7bf8f79db3298a54 - 11cae99d40959562.db86a7a5e8942f58.48b9ec7c11995534.d38b9442bb0a51df -- 685facca9635beb5.cbbb017d29c3b86d.1854be88a64ea0a6.cf7886ee97e70ab0 -+ 0000000000000000.0000000000000000.a4bbde4311995534.7bf8f79db3298a54 - 74022d6ac137b3e9.aa7b6cbfe8ff4c09.ee56d151431d18a4.cb09c90ee34bf073 -- 0000000000000001 -+ 238b590d3cc241d3 - --VTESTPD_128_3(reg) -+VBLENDVPS_128(reg) - before - 334933563dd8377d.127ee96bdea42e2d.d212e1d5c2d427d8.a78ca0c40413785b - 57915157831a0f1d.1ca05bb8088aecab.a0cb5e2d52cf8788.20c2a7cd043b7df6 -@@ -34242,12 +34242,12 @@ VTESTPD_128_3(reg) - 4aea4f2e4c5053ed.e70651e6f5ef1f07.9fd75d500664c135.bd5d4e533253658a - 9a5ae6a6985ac0db - after -- 334933563dd8377d.127ee96bdea42e2d.d212e1d5c2d427d8.a78ca0c40413785b -+ 0000000000000000.0000000000000000.71f4de3252cf8788.33c36359043b7df6 - 57915157831a0f1d.1ca05bb8088aecab.a0cb5e2d52cf8788.20c2a7cd043b7df6 - eaadb17baa13045e.6f34ff3d5cf4a890.71f4de32357ba6c3.33c363595fa2e2a2 - 4aea4f2e4c5053ed.e70651e6f5ef1f07.9fd75d500664c135.bd5d4e533253658a -- 0000000000000001 --VTESTPD_128_3(mem) -+ 9a5ae6a6985ac0db -+VBLENDVPS_128(mem) - before - a687a640aec3afc1.d29525dc085b3875.61e2cea0ef860d3d.87c1d7f36117138b - bdb00b0c8f9bf067.def831f277c3efa3.b794f05567c52e5d.86fe4887e31fda71 -@@ -34257,11 +34257,11 @@ VTESTPD_128_3(mem) - after - a687a640aec3afc1.d29525dc085b3875.61e2cea0ef860d3d.87c1d7f36117138b - bdb00b0c8f9bf067.def831f277c3efa3.b794f05567c52e5d.86fe4887e31fda71 -- bba18ff658ee3dfa.ca5f6dda3711b423.c6e735f279b83d94.f6daad7928085092 -+ 0000000000000000.0000000000000000.b794f05567c52e5d.86fe48876117138b - 7d26b0ea24c653a5.f118d801e4d3c2a0.6aa81864406cf70e.34a10133ca5fb29b -- 0000000000000040 -+ 9c9e402268af3b37 - --VTESTPD_128_3(reg) -+VBLENDVPS_128(reg) - before - 8a1f67b39c842813.dd0ae9d40f31ee95.b16d6bd4199455c7.7fa31696d8ed18f6 - 5b6e7051026bb5db.b81bb6a0363ac9f6.64ac23bd73e1ab43.e1a4a9735e455b79 -@@ -34269,12 +34269,12 @@ VTESTPD_128_3(reg) - 11a91d63d69d9edd.4eeffd8fa75832b9.1813f486034c8bec.fce883e3a2af3bfe - 6dc2c14d98d94e59 - after -- 8a1f67b39c842813.dd0ae9d40f31ee95.b16d6bd4199455c7.7fa31696d8ed18f6 -+ 0000000000000000.0000000000000000.64ac23bd73e1ab43.6c774fe9ed827ec2 - 5b6e7051026bb5db.b81bb6a0363ac9f6.64ac23bd73e1ab43.e1a4a9735e455b79 - 69d8596737ef1e3a.e923933bb5eea1f3.681ffd2a8d45fec1.6c774fe9ed827ec2 - 11a91d63d69d9edd.4eeffd8fa75832b9.1813f486034c8bec.fce883e3a2af3bfe -- 0000000000000001 --VTESTPD_128_3(mem) -+ 6dc2c14d98d94e59 -+VBLENDVPS_128(mem) - before - 9bd38613ec0b75fe.af2db8b07cff726f.c24b6f8a29843773.cfd4043d72838e71 - 61e54c21b9516a19.9faf27bac4a3d69d.21036516557f6e4e.ebad29bb767442fc -@@ -34284,11 +34284,11 @@ VTESTPD_128_3(mem) - after - 9bd38613ec0b75fe.af2db8b07cff726f.c24b6f8a29843773.cfd4043d72838e71 - 61e54c21b9516a19.9faf27bac4a3d69d.21036516557f6e4e.ebad29bb767442fc -- 9dc591631cb8ead8.3d7d64ed4b150613.47e35b214a549176.c6ec606caaaee538 -+ 0000000000000000.0000000000000000.21036516557f6e4e.cfd4043d72838e71 - 2a3fd0c6304bb065.e4e16db6ace03d7c.10b6ce96220f5c16.bedba4bcaabab0d2 -- 0000000000000000 -+ 2dc8f1171326e276 - --VTESTPD_128_3(reg) -+VBLENDVPS_256(reg) - before - 70fd43ea807eb5cf.e41f8534111679ec.f2283e7f8390b885.58493861f9bd8d5a - e4c7979f8e4c6689.a7302d9bdc26019a.c29ed1b56eb1b2d9.fa68176eec69de70 -@@ -34296,12 +34296,12 @@ VTESTPD_128_3(reg) - ca493163fb8052d3.b71943009f423d1a.18473119e9781715.c17a22fe94ecd2bc - 9c05455981dbed4b - after -- 70fd43ea807eb5cf.e41f8534111679ec.f2283e7f8390b885.58493861f9bd8d5a -+ e371e7a4d91e3152.4e4043e5ad86049b.c29ed1b506d06925.d4dfe6a9161f0c82 - e4c7979f8e4c6689.a7302d9bdc26019a.c29ed1b56eb1b2d9.fa68176eec69de70 - e371e7a4d91e3152.4e4043e5ad86049b.b08f23c506d06925.d4dfe6a9161f0c82 - ca493163fb8052d3.b71943009f423d1a.18473119e9781715.c17a22fe94ecd2bc -- 0000000000000000 --VTESTPD_128_3(mem) -+ 9c05455981dbed4b -+VBLENDVPS_256(mem) - before - 434ccda7faf8195b.f599704a93fc04bb.bc88a9d7ce676944.5611f61fb336f954 - 901a35d21a501217.c1afa1c43a2084b4.3b59f15657004445.c53b6e42ff954a8e -@@ -34311,11 +34311,11 @@ VTESTPD_128_3(mem) - after - 434ccda7faf8195b.f599704a93fc04bb.bc88a9d7ce676944.5611f61fb336f954 - 901a35d21a501217.c1afa1c43a2084b4.3b59f15657004445.c53b6e42ff954a8e -- 613cf9c8feee93ac.88d5be3d8e780d6b.0f589869561a8a48.c30f96ee69214771 -+ 434ccda7faf8195b.f599704a3a2084b4.3b59f156ce676944.5611f61fb336f954 - 917e9673c1df5a46.a758c5212b8edd8b.135019fce6bff67a.abda698f8e662ca7 -- 0000000000000040 -+ d8e8e29109f135dc - --VTESTPD_128_3(reg) -+VBLENDVPS_256(reg) - before - a8850060774d9ebd.fbac86c1802d2010.7a84b1dcacf02ec1.250ff0fb23fd4506 - 75fcbc687307a2f6.7c92479d56e7a436.5da47edaae2a3cb8.1f5f99532ae03319 -@@ -34323,12 +34323,12 @@ VTESTPD_128_3(reg) - 7bac02d487c26d1e.34b52aafb8c8d14a.c3f4ac50a253839c.3fe552b904c2da82 - 1cb35aa10fd90c31 - after -- a8850060774d9ebd.fbac86c1802d2010.7a84b1dcacf02ec1.250ff0fb23fd4506 -+ 75fcbc689aaa7e32.7c92479d5f16a0e6.ac062887ccc7451d.1f5f99532ae03319 - 75fcbc687307a2f6.7c92479d56e7a436.5da47edaae2a3cb8.1f5f99532ae03319 - 9d9b13159aaa7e32.f1fb54f35f16a0e6.ac062887ccc7451d.df0d91ee16737bde - 7bac02d487c26d1e.34b52aafb8c8d14a.c3f4ac50a253839c.3fe552b904c2da82 -- 0000000000000041 --VTESTPD_128_3(mem) -+ 1cb35aa10fd90c31 -+VBLENDVPS_256(mem) - before - 5343249154c5cd16.6a7c840fd7dcac66.238a43bd7d08f38e.febb059fcd5a33e0 - be612d75ee91d85e.c7579534258377b5.98471d09c9e2c2df.b9a72fe2e9699196 -@@ -34338,11 +34338,11 @@ VTESTPD_128_3(mem) - after - 5343249154c5cd16.6a7c840fd7dcac66.238a43bd7d08f38e.febb059fcd5a33e0 - be612d75ee91d85e.c7579534258377b5.98471d09c9e2c2df.b9a72fe2e9699196 -- 3ad8ef38fa4aea35.ef8932ae0e430ab7.70b83380b863f969.50042683900bd869 -+ 5343249154c5cd16.c7579534258377b5.238a43bdc9e2c2df.b9a72fe2e9699196 - a475e8c893fbbfc6.3c5d55e92da9a11a.88a9010c67965557.1f1ee7f061cd4506 -- 0000000000000040 -+ 82416d94f6391418 - --VTESTPD_128_3(reg) -+VBLENDVPS_256(reg) - before - d5b8b4dbebdd804d.d6049310d5b0133d.0c21fc501f407788.bae6049bf18891d6 - 74d0b831dd45c74e.ad516cfddd75a1c7.b91f22517f94c9ad.e33ab61773446b11 -@@ -34350,12 +34350,12 @@ VTESTPD_128_3(reg) - 0513e8ba268ed06b.ba559a71ae615dc4.1dfcdccffaa5d0cf.8a5b1c8bcd4be36e - c0bfc85addadfbe7 - after -- d5b8b4dbebdd804d.d6049310d5b0133d.0c21fc501f407788.bae6049bf18891d6 -+ 74d0b831dd45c74e.0528f079c7572690.b91f2251e932d236.df73956e08d69d35 - 74d0b831dd45c74e.ad516cfddd75a1c7.b91f22517f94c9ad.e33ab61773446b11 - bad5750267fc23ca.0528f079c7572690.a0a4c458e932d236.df73956e08d69d35 - 0513e8ba268ed06b.ba559a71ae615dc4.1dfcdccffaa5d0cf.8a5b1c8bcd4be36e -- 0000000000000000 --VTESTPD_128_3(mem) -+ c0bfc85addadfbe7 -+VBLENDVPS_256(mem) - before - 5e6b13c7550b9fcd.b0d60cc6b5880cdd.a8a3e5d2aea0048e.8d7368234e79fd23 - 3e2a7bbe506e8c4b.166add90b17411cd.abdf5086e41fd51a.4a5563c07f3b95df -@@ -34365,11 +34365,11 @@ VTESTPD_128_3(mem) - after - 5e6b13c7550b9fcd.b0d60cc6b5880cdd.a8a3e5d2aea0048e.8d7368234e79fd23 - 3e2a7bbe506e8c4b.166add90b17411cd.abdf5086e41fd51a.4a5563c07f3b95df -- 3dca7b2bebe47e8e.951a5786b5e11ce7.9fd5547b6cea8c96.b1eec9132c76d6ae -+ 3e2a7bbe506e8c4b.b0d60cc6b17411cd.abdf5086e41fd51a.4a5563c04e79fd23 - 37158ffa417830c2.883476125d5868d6.60516e9b600ee72b.1e899686efb6fa3d -- 0000000000000040 -+ ed73c78764883e38 - --VTESTPD_128_3(reg) -+VBLENDVPD_128(reg) - before - 7af857812877de4a.08d933176e375f12.4a0237a246673347.ca1f1bd4df96a008 - 216442e0d60f1520.8be0e46f8f2cc7ab.39d195a10c99b7e6.b90bd611038e7457 -@@ -34377,12 +34377,12 @@ VTESTPD_128_3(reg) - 2d21197d626c3bc6.1ce95a7c1ce93166.0aa1199c9c98dc5b.966c6747ab005cfc - 3c7935186791e8ab - after -- 7af857812877de4a.08d933176e375f12.4a0237a246673347.ca1f1bd4df96a008 -+ 0000000000000000.0000000000000000.39d195a10c99b7e6.09e01b3ee8031f44 - 216442e0d60f1520.8be0e46f8f2cc7ab.39d195a10c99b7e6.b90bd611038e7457 - 3e0384100bdd2065.9ef71decc06323b8.afed8c7b4a7b305e.09e01b3ee8031f44 - 2d21197d626c3bc6.1ce95a7c1ce93166.0aa1199c9c98dc5b.966c6747ab005cfc -- 0000000000000001 --VTESTPD_128_3(mem) -+ 3c7935186791e8ab -+VBLENDVPD_128(mem) - before - d7d4009e38c37f7c.4a09fe937849a1ef.e184170abfc9abe1.a43b36709f7cf58b - 434947c33ba1dd9c.f1082ebee8ff908b.c993d081c60f4d54.db05e163efb4b898 -@@ -34392,11 +34392,11 @@ VTESTPD_128_3(mem) - after - d7d4009e38c37f7c.4a09fe937849a1ef.e184170abfc9abe1.a43b36709f7cf58b - 434947c33ba1dd9c.f1082ebee8ff908b.c993d081c60f4d54.db05e163efb4b898 -- 5ba483748c37bd37.7e6ba56a4e1a4147.b0e102cf4cc8d5ec.094c15e127cb602e -+ 0000000000000000.0000000000000000.c993d081c60f4d54.a43b36709f7cf58b - fdb0319e4692dc78.4d7c5f044726f3ce.713b28df6efffdd4.8c5cce57e34d2bfa -- 0000000000000000 -+ be81092fc0c753a8 - --VTESTPD_128_3(reg) -+VBLENDVPD_128(reg) - before - fc07c0d759c414e3.043bce2c86bdf58c.ba8759f66fb0e0cd.ea6dbe9d47c08239 - a33af1b94bd0ac58.4b0fd50967c4c69e.21da8eae614346f0.f64341f6f4181f46 -@@ -34404,12 +34404,12 @@ VTESTPD_128_3(reg) - 97d5afe0a8474c9e.0ec512657d987b6f.4c84991c14b6674f.360afa2438bb940b - 239329d3071de41b - after -- fc07c0d759c414e3.043bce2c86bdf58c.ba8759f66fb0e0cd.ea6dbe9d47c08239 -+ 0000000000000000.0000000000000000.21da8eae614346f0.f64341f6f4181f46 - a33af1b94bd0ac58.4b0fd50967c4c69e.21da8eae614346f0.f64341f6f4181f46 - 0d659743317855b2.b0f9c22305b409db.ddc0fa96ba6c5ee2.70892bd491129129 - 97d5afe0a8474c9e.0ec512657d987b6f.4c84991c14b6674f.360afa2438bb940b -- 0000000000000040 --VTESTPD_128_3(mem) -+ 239329d3071de41b -+VBLENDVPD_128(mem) - before - 12f134cb1a463c82.9dd733fc4bc9ccc8.403f3fbbeb7cd785.c97368ab0ead9be5 - e1ee98fa8c425a6f.7bb52103b68b13db.2432c711696ddb49.afd961af42dd374e -@@ -34419,11 +34419,11 @@ VTESTPD_128_3(mem) - after - 12f134cb1a463c82.9dd733fc4bc9ccc8.403f3fbbeb7cd785.c97368ab0ead9be5 - e1ee98fa8c425a6f.7bb52103b68b13db.2432c711696ddb49.afd961af42dd374e -- 6a57cf4b7a1cf70c.8dbb746186185b84.946c2553167641e9.5c0282944cd37736 -+ 0000000000000000.0000000000000000.2432c711696ddb49.afd961af42dd374e - 8bf757aaffe0d286.2f37288257fce16e.6eb7d56e0ca4c58f.2b3ac6c6c91a964a -- 0000000000000040 -+ 77cc29b1543fd136 - --VTESTPD_256_1(reg) -+VBLENDVPD_128(reg) - before - 9e06a8c28acd64a5.1e9cab03379aa508.be743ad2c4c4e046.8ce0544c67012567 - fa323e6306508b44.001048423f572dbf.94bda4be6afb95b8.ccb31ddb449b1b9e -@@ -34431,12 +34431,12 @@ VTESTPD_256_1(reg) - c5939f09426783c1.229949222e084c7a.88a67516cee71118.1d877db8f2b5bbd8 - e8200cdffb4cde33 - after -- 9e06a8c28acd64a5.1e9cab03379aa508.be743ad2c4c4e046.8ce0544c67012567 -+ 0000000000000000.0000000000000000.0e5f64b0e42e3c6f.ccb31ddb449b1b9e - fa323e6306508b44.001048423f572dbf.94bda4be6afb95b8.ccb31ddb449b1b9e - e99de702655581bf.0e21a853332226d6.0e5f64b0e42e3c6f.08fcac05be7e6460 - c5939f09426783c1.229949222e084c7a.88a67516cee71118.1d877db8f2b5bbd8 -- 0000000000000001 --VTESTPD_256_1(mem) -+ e8200cdffb4cde33 -+VBLENDVPD_128(mem) - before - 4392d665f54f879c.ec6062e63a12cdf6.1945a69b4c135ad7.5dded35ac5b44f5e - 0baa5638fdcb7340.b8502d04e8e39a0c.d0f13babaa520d18.eb537bea642133ee -@@ -34446,11 +34446,11 @@ VTESTPD_256_1(mem) - after - 4392d665f54f879c.ec6062e63a12cdf6.1945a69b4c135ad7.5dded35ac5b44f5e - 0baa5638fdcb7340.b8502d04e8e39a0c.d0f13babaa520d18.eb537bea642133ee -- 1c3408432fcb5d4b.86aefbcfe86527ad.2168853c63ce206a.8d50683148b9f974 -+ 0000000000000000.0000000000000000.1945a69b4c135ad7.5dded35ac5b44f5e - 53fc6873a65c02e8.b3c8c8b3d724b085.e978fe3c949551f8.9f23969b0c08dd9b -- 0000000000000001 -+ 7d1601944d9a1a10 - --VTESTPD_256_1(reg) -+VBLENDVPD_256(reg) - before - 8376a588a6fced7e.8acef2b27f891e44.99e8901c51ad7141.04eb249558b25af0 - 0c8f7fe3b4b99292.9e7623edd55e6d8a.955b5076f18ba58d.4e8e7235cc32f77b -@@ -34458,12 +34458,12 @@ VTESTPD_256_1(reg) - 1c1bc27f5d76405b.cd76670869329287.4069a4ae14775983.e09477f73288e100 - df8f26f15c76a552 - after -- 8376a588a6fced7e.8acef2b27f891e44.99e8901c51ad7141.04eb249558b25af0 -+ 0c8f7fe3b4b99292.6bbf7611c4e8aae7.955b5076f18ba58d.a32d64070b20e6c7 - 0c8f7fe3b4b99292.9e7623edd55e6d8a.955b5076f18ba58d.4e8e7235cc32f77b - 76ad8a12125e44f8.6bbf7611c4e8aae7.046d022d534a8914.a32d64070b20e6c7 - 1c1bc27f5d76405b.cd76670869329287.4069a4ae14775983.e09477f73288e100 -- 0000000000000040 --VTESTPD_256_1(mem) -+ df8f26f15c76a552 -+VBLENDVPD_256(mem) - before - 7deaede1a6f7eee8.59272398308dc267.a06772c0df48e195.a69d3163d09d5185 - 967048b42b1777ee.8b1baac7283006ca.c05e14234336523e.9253a6ba2248acc7 -@@ -34473,11 +34473,11 @@ VTESTPD_256_1(mem) - after - 7deaede1a6f7eee8.59272398308dc267.a06772c0df48e195.a69d3163d09d5185 - 967048b42b1777ee.8b1baac7283006ca.c05e14234336523e.9253a6ba2248acc7 -- 06eeb35407e0fd91.0d44517ae0e9472e.0927c81fb009a3ad.60d9fd1da605a7f5 -+ 7deaede1a6f7eee8.8b1baac7283006ca.c05e14234336523e.9253a6ba2248acc7 - a830abae57603cfd.3aee161cf447c23f.578e0a9f43cd8e0f.6c7934faf95f7dba -- 0000000000000001 -+ 128046bcb6e26cc3 - --VTESTPD_256_1(reg) -+VBLENDVPD_256(reg) - before - ae3930cf7a1baebb.5a02abaf37a3ef5d.7065f41901d3b2aa.865e568f178ccf90 - 9cf2ec9fe095804f.f7302f42c2b3d4de.09f5e8dda31b551b.726528db4954245b -@@ -34485,12 +34485,12 @@ VTESTPD_256_1(reg) - de90cf26047dc2fa.62cfb3cd4a6f1ef2.d88ffe6a130d9fbd.f0435038352df581 - 3bb39d202756e934 - after -- ae3930cf7a1baebb.5a02abaf37a3ef5d.7065f41901d3b2aa.865e568f178ccf90 -+ 38f5789885dd1d2b.f7302f42c2b3d4de.63eaecd475abe53d.f76dfd6ff431479d - 9cf2ec9fe095804f.f7302f42c2b3d4de.09f5e8dda31b551b.726528db4954245b - 38f5789885dd1d2b.5b86b352149ea5ac.63eaecd475abe53d.f76dfd6ff431479d - de90cf26047dc2fa.62cfb3cd4a6f1ef2.d88ffe6a130d9fbd.f0435038352df581 -- 0000000000000040 --VTESTPD_256_1(mem) -+ 3bb39d202756e934 -+VBLENDVPD_256(mem) - before - b3896014e7b8e0e2.ea0dedb6f904ab69.e8d8ac9e8033fddd.c631190b1acfbf47 - 34901601905d96b6.b8b9ceb201fb1423.c86e19b1d0f5fc98.871c3923257c8086 -@@ -34500,11 +34500,11 @@ VTESTPD_256_1(mem) - after - b3896014e7b8e0e2.ea0dedb6f904ab69.e8d8ac9e8033fddd.c631190b1acfbf47 - 34901601905d96b6.b8b9ceb201fb1423.c86e19b1d0f5fc98.871c3923257c8086 -- 999639d23e53c7dd.a4e06f87b8f038d5.e05b76f259c2d850.789c5b1fd1a11f26 -+ b3896014e7b8e0e2.b8b9ceb201fb1423.c86e19b1d0f5fc98.c631190b1acfbf47 - c06547720ea62e82.09cdcaa2b96e542b.0b6b3f4d34a44c31.f6fd7969b9c9d8d5 -- 0000000000000000 -+ 5b8b916f7a80e63c - --VTESTPD_256_2(reg) -+VBLENDVPD_256(reg) - before - 04919e9caf53860a.84cabccf1c6088d2.45cedd6ea002a4d0.246cf1af80a91566 - 4d5c9d5cf5cdf4e9.c09112d4839091f8.b32da4560a366470.0929070256ddef1b -@@ -34512,12 +34512,12 @@ VTESTPD_256_2(reg) - 30715d4422e7298c.14755586cd7b9f79.94393a2fd6b42255.a3054f2f16ffc5b9 - 11bd79e137053af8 - after -- 04919e9caf53860a.84cabccf1c6088d2.45cedd6ea002a4d0.246cf1af80a91566 -- 9238881ae77a6c85.5286c76d5f3f0521.af3719c89399cfb9.956dfd33d54a967e -+ 4d5c9d5cf5cdf4e9.c09112d4839091f8.af3719c89399cfb9.956dfd33d54a967e -+ 4d5c9d5cf5cdf4e9.c09112d4839091f8.b32da4560a366470.0929070256ddef1b - 9238881ae77a6c85.5286c76d5f3f0521.af3719c89399cfb9.956dfd33d54a967e - 30715d4422e7298c.14755586cd7b9f79.94393a2fd6b42255.a3054f2f16ffc5b9 -- 0000000000000001 --VTESTPD_256_2(mem) -+ 11bd79e137053af8 -+VBLENDVPD_256(mem) - before - b961f834546aae68.81531746419f68a7.e4293b0be84f1c2b.c07c02f76f1599f0 - 79bd47168839e035.e22ab28ae02f6585.9c6ff2e9cdc73864.8e4f6d8dfb476f37 -@@ -34526,12 +34526,12 @@ VTESTPD_256_2(mem) - 5a185953653e89ca - after - b961f834546aae68.81531746419f68a7.e4293b0be84f1c2b.c07c02f76f1599f0 -- 469e07cbab955197.7eace8b9be609758.1bd6c4f417b0e3d4.3f83fd0890ea660f -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 79bd47168839e035.e22ab28ae02f6585.9c6ff2e9cdc73864.8e4f6d8dfb476f37 -+ b961f834546aae68.e22ab28ae02f6585.9c6ff2e9cdc73864.8e4f6d8dfb476f37 - accc4534a6466994.44e67c8b11048834.38e2c75c63d53b1a.7fd11dce5a502b78 -- 0000000000000040 -+ 5a185953653e89ca - --VTESTPD_256_2(reg) -+VPMULDQ_128(reg) - before - 481f2954d32e3678.d917ed48c99c397f.fd63a321da61265f.d3a5ddc94d839bee - a330893f3fab6f2d.8c4a559b738db676.36059ba993c671fa.c82bb53f6f048afa -@@ -34539,12 +34539,12 @@ VTESTPD_256_2(reg) - 14a2e57f837d745e.f89855a9cd6da539.98e8ef4448d50237.2bac9cf3d1b50364 - 533fa30848fc061b - after -- 481f2954d32e3678.d917ed48c99c397f.fd63a321da61265f.d3a5ddc94d839bee -- c897737e46417095.a231f917c0249ba5.4b186191d9bea7b4.f13fcba9e767c368 -+ 0000000000000000.0000000000000000.102c2b05dd6e39c8.f5558dff104ae390 -+ a330893f3fab6f2d.8c4a559b738db676.36059ba993c671fa.c82bb53f6f048afa - c897737e46417095.a231f917c0249ba5.4b186191d9bea7b4.f13fcba9e767c368 - 14a2e57f837d745e.f89855a9cd6da539.98e8ef4448d50237.2bac9cf3d1b50364 -- 0000000000000001 --VTESTPD_256_2(mem) -+ 533fa30848fc061b -+VPMULDQ_128(mem) - before - 43c45cd7694788b9.e19bd9ad92eab831.684be53eb5748f5e.79c0432e7b98be2f - d80743494fa34469.8dd04d74101478bd.cf1526c095461740.49ee58bb0e92194a -@@ -34553,12 +34553,12 @@ VTESTPD_256_2(mem) - f46bf66c2345331a - after - 43c45cd7694788b9.e19bd9ad92eab831.684be53eb5748f5e.79c0432e7b98be2f -- bc3ba32896b87746.1e6426526d1547ce.97b41ac14a8b70a1.863fbcd1846741d0 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ d80743494fa34469.8dd04d74101478bd.cf1526c095461740.49ee58bb0e92194a -+ 0000000000000000.0000000000000000.1f13df2dbfb94980.0708e3b8ad879096 - 61f78cc9dbbb5cb1.ed19a37dc8d15bab.f222a840ab79ebe8.2b77b56ec65d9793 -- 0000000000000040 -+ f46bf66c2345331a - --VTESTPD_256_2(reg) -+VPMULDQ_128(reg) - before - 1ce4e8bd50945c72.0d3be6b0ba8f31a1.5ac67d98397bf665.67fce11519f2b108 - 012d87cee9d74f48.cf6d5eeacea43054.16dec6fb8913fd87.421ebb88ef650393 -@@ -34566,12 +34566,12 @@ VTESTPD_256_2(reg) - 6e63bddcd267831d.00cc990c06bf9eb1.e67e954d353a3eb1.9d693ef8416b3ea1 - d52ae1cdf5159e7a - after -- 1ce4e8bd50945c72.0d3be6b0ba8f31a1.5ac67d98397bf665.67fce11519f2b108 -- fe94cf098c994848.815a7165330615f5.7bac7a135424abbc.6053b08548df9eb8 -+ 0000000000000000.0000000000000000.d8e98638f8035c24.fb45e7b3dddc4ba8 -+ 012d87cee9d74f48.cf6d5eeacea43054.16dec6fb8913fd87.421ebb88ef650393 - fe94cf098c994848.815a7165330615f5.7bac7a135424abbc.6053b08548df9eb8 - 6e63bddcd267831d.00cc990c06bf9eb1.e67e954d353a3eb1.9d693ef8416b3ea1 -- 0000000000000001 --VTESTPD_256_2(mem) -+ d52ae1cdf5159e7a -+VPMULDQ_128(mem) - before - e46413f181e97b71.afe74bb259cc3b74.288f54ca62dd85b3.b39e1414c8e2ef12 - a6e1524e00f491af.1c6c77f6bd54adf9.d4711d8d646b8728.3e59f2d3aaa7fd8a -@@ -34580,12 +34580,12 @@ VTESTPD_256_2(mem) - eb239f213e1ea438 - after - e46413f181e97b71.afe74bb259cc3b74.288f54ca62dd85b3.b39e1414c8e2ef12 -- 1b9bec0e7e16848e.5018b44da633c48b.d770ab359d227a4c.4c61ebeb371d10ed -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ a6e1524e00f491af.1c6c77f6bd54adf9.d4711d8d646b8728.3e59f2d3aaa7fd8a -+ 0000000000000000.0000000000000000.26c80f0311ef48f8.125f99247957a9b4 - b2d6e36748dd57b7.e9a9977d89ffae3a.2dbecacfc809cb1a.fed0bbeec9b91b71 -- 0000000000000040 -+ eb239f213e1ea438 - --VTESTPD_256_3(reg) -+VPMULDQ_128(reg) - before - 0642d1fd72d179c7.b5e72ffb49d37fd7.01f882972a39b550.91c1a526623085ef - ab774fef005cd5c9.db6c7679ae30cff0.b579fbd118c76643.ea127f3212f84ae6 -@@ -34593,12 +34593,12 @@ VTESTPD_256_3(reg) - 03561dc09b3015d8.ff00eae3134bdbbc.623c8450480cb571.eace1e152198e4ec - 4ad0dac4ba893154 - after -- 0642d1fd72d179c7.b5e72ffb49d37fd7.01f882972a39b550.91c1a526623085ef -+ 0000000000000000.0000000000000000.fe2e5479597182fd.ff1174d0bc512388 - ab774fef005cd5c9.db6c7679ae30cff0.b579fbd118c76643.ea127f3212f84ae6 - 360f1461844df5eb.003036cd93fe052e.6276fd95ed34fdbf.147dd3ddf36cd62c - 03561dc09b3015d8.ff00eae3134bdbbc.623c8450480cb571.eace1e152198e4ec -- 0000000000000000 --VTESTPD_256_3(mem) -+ 4ad0dac4ba893154 -+VPMULDQ_128(mem) - before - 0f5185d8d74a788d.6d986479e190703d.b6a80ea74a230ec7.13178d6fc3dbcb05 - 151b9a3b96e777c6.d221e7f6f1f943c5.00f41e055590597b.cf53135cfa2e7b26 -@@ -34608,11 +34608,11 @@ VTESTPD_256_3(mem) - after - 0f5185d8d74a788d.6d986479e190703d.b6a80ea74a230ec7.13178d6fc3dbcb05 - 151b9a3b96e777c6.d221e7f6f1f943c5.00f41e055590597b.cf53135cfa2e7b26 -- 37fb95db136de828.8d3ca1a567f7ca1e.b8b097e94fa07903.f33b11858a910081 -+ 0000000000000000.0000000000000000.18c7718a31eb489d.015dedce0a1189be - 53bdf2a368e788e2.fa378ef1e01740f1.bca7f440555f2a8c.db1d86550e8e97c1 -- 0000000000000001 -+ e4436b3722b47c93 - --VTESTPD_256_3(reg) -+VCMPPD_256_0x4(reg) - before - 68fabd99648ceba3.432d2e7fb462121e.745cab46f8e5e3ed.e7a7b1f482d82841 - c48e79e66da41f9c.e517c45b11e84409.59f8f2104aebedbc.147a4af3f2172e4f -@@ -34620,12 +34620,12 @@ VTESTPD_256_3(reg) - 747d1cf24ac1c9fb.ab87eec46f4b8a9a.d0c4f3b30dd42884.e8cc017e0e184524 - 47e217e3f1f2ce44 - after -- 68fabd99648ceba3.432d2e7fb462121e.745cab46f8e5e3ed.e7a7b1f482d82841 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c48e79e66da41f9c.e517c45b11e84409.59f8f2104aebedbc.147a4af3f2172e4f - 544b9a8adb87552b.134630249b87d8ce.045761bb72b79a0a.21ed3b27c328fae1 - 747d1cf24ac1c9fb.ab87eec46f4b8a9a.d0c4f3b30dd42884.e8cc017e0e184524 -- 0000000000000000 --VTESTPD_256_3(mem) -+ 47e217e3f1f2ce44 -+VCMPPD_256_0x4(mem) - before - 18fdf94288c24f6c.806ffc8855dfb7b9.87a77b28a83f1898.1b8da564b6cfd1d6 - 38e72387ee9585c9.d46e34b9986c5a11.8570513d636f3cf5.3ffc713a0a33d2ab -@@ -34635,11 +34635,11 @@ VTESTPD_256_3(mem) - after - 18fdf94288c24f6c.806ffc8855dfb7b9.87a77b28a83f1898.1b8da564b6cfd1d6 - 38e72387ee9585c9.d46e34b9986c5a11.8570513d636f3cf5.3ffc713a0a33d2ab -- 846e129e3f762c87.ccc7c2f2b0f4efae.7faeeeedbbe7b3dd.9a5f55a2a48c66b0 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - d65c4173987200d1.c4c4a19d3904b13d.522fcd26cdb4387b.86004c062167cb91 -- 0000000000000000 -+ 612c52d41c4f3bf9 - --VTESTPD_256_3(reg) -+VCMPPD_256_0x4(reg) - before - 852f647732d0f294.0b7e2cf21494bcd3.18b2ce28ce27de69.dbbe6bd3b4e189fc - 50547c5bfe762e10.00a04f08d0e81dbb.24dc43fe0beab0df.f42642e08d7b608c -@@ -34647,12 +34647,12 @@ VTESTPD_256_3(reg) - 4638b39529642055.95132ea57657bde7.d418fa3bef7d3558.49b490ca82239286 - 3e72ff7fd749654a - after -- 852f647732d0f294.0b7e2cf21494bcd3.18b2ce28ce27de69.dbbe6bd3b4e189fc -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 50547c5bfe762e10.00a04f08d0e81dbb.24dc43fe0beab0df.f42642e08d7b608c - 1ce998eb1cce2916.8f8d269fe87adeb2.4490fe8b8dd8644b.7a34d039738d7a56 - 4638b39529642055.95132ea57657bde7.d418fa3bef7d3558.49b490ca82239286 -- 0000000000000040 --VTESTPD_256_3(mem) -+ 3e72ff7fd749654a -+VCMPPD_256_0x4(mem) - before - 333a97448e0cafcb.2b8ec9c5c1c24e77.eefce205998a7484.2fc2337ace6560b3 - 05d8d605c2772c38.2537d7e57f76f129.7615beaa6a20bfb6.b3d8a5b4c51d2107 -@@ -34662,11 +34662,11 @@ VTESTPD_256_3(mem) - after - 333a97448e0cafcb.2b8ec9c5c1c24e77.eefce205998a7484.2fc2337ace6560b3 - 05d8d605c2772c38.2537d7e57f76f129.7615beaa6a20bfb6.b3d8a5b4c51d2107 -- 901737af8f9797bb.917fd862ff0c4316.0a2a3e8208245ca8.bba74d557130b401 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - b0c4362c1277ad80.cbb2c8a8de0e81eb.8407df788ca20587.a37a26c96d2b544d -- 0000000000000001 -+ c69f2c7d56993f96 - --VTESTPD_256_3(reg) -+VCMPPD_256_0x4(reg) - before - 82615bdbc706ae88.41ac4f6a67232ab5.2f1ba324b80be653.c1781b7814a7777e - 320bb0515dfee0d1.1f99ff54a8a8c983.1a086540278caffb.9d49706ebc3e6eba -@@ -34674,12 +34674,12 @@ VTESTPD_256_3(reg) - dd4ab83165c27812.32b410db656a61a1.f099900d3b4f5dba.a23953edda53d9b0 - 83f1d84e88e8c6c1 - after -- 82615bdbc706ae88.41ac4f6a67232ab5.2f1ba324b80be653.c1781b7814a7777e -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 320bb0515dfee0d1.1f99ff54a8a8c983.1a086540278caffb.9d49706ebc3e6eba - 31ea254ab30e0f1b.2657c0d5f4114819.e6c30b6aca1f188f.f44559479f73a567 - dd4ab83165c27812.32b410db656a61a1.f099900d3b4f5dba.a23953edda53d9b0 -- 0000000000000001 --VTESTPD_256_3(mem) -+ 83f1d84e88e8c6c1 -+VCMPPD_256_0x4(mem) - before - 72396654c54127c8.9077657410a45763.1f7b6b5117c0d047.94d6f09516a8b929 - 4ddd78edae67baef.a8bd267e5042e7ba.c9774b23271e5339.2ec6276ef8b76987 -@@ -34689,11 +34689,11 @@ VTESTPD_256_3(mem) - after - 72396654c54127c8.9077657410a45763.1f7b6b5117c0d047.94d6f09516a8b929 - 4ddd78edae67baef.a8bd267e5042e7ba.c9774b23271e5339.2ec6276ef8b76987 -- efa98b035f683962.7f67f8bbc02766c2.0c752e3eb090a4a0.1ab431047c07a981 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 34681984f350604f.73c2d897fce00d28.c3418f8cce237fab.b4ee0bc33e24b5c3 -- 0000000000000000 -+ 58beb017dc9bc8f8 - --VTESTPD_256_3(reg) -+VCMPPS_128_0x4(reg) - before - 62711c6ceff71fcd.f8e7a05b8629eddf.de1bc17fa1f81b97.cca7eafa9fe2a284 - 2d534b2f15c5f5ed.16f39b7435019a41.1dbcb0dd4afbcabd.0273bb753cd9c757 -@@ -34701,12 +34701,12 @@ VTESTPD_256_3(reg) - 7bd4e4ab09e412c0.d5dcdd1c55dd4625.88088caf1af4fed7.646cb03e50a10a9e - 4931cc65fe899f69 - after -- 62711c6ceff71fcd.f8e7a05b8629eddf.de1bc17fa1f81b97.cca7eafa9fe2a284 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 2d534b2f15c5f5ed.16f39b7435019a41.1dbcb0dd4afbcabd.0273bb753cd9c757 - 17b03acaea908805.6c5686bb1be4239f.8df29f1e94765743.41707ee7c315ab51 - 7bd4e4ab09e412c0.d5dcdd1c55dd4625.88088caf1af4fed7.646cb03e50a10a9e -- 0000000000000041 --VTESTPD_256_3(mem) -+ 4931cc65fe899f69 -+VCMPPS_128_0x4(mem) - before - cb8c4e47e9da27df.b50a453c0e4dd0cc.2d531d84fef8bd00.6b4c72fb7901fb25 - c549b3d22e9f5e2c.21a059eb9658fdd2.4f86c1dd3341455c.93094d6d4c2a89d9 -@@ -34716,11 +34716,11 @@ VTESTPD_256_3(mem) - after - cb8c4e47e9da27df.b50a453c0e4dd0cc.2d531d84fef8bd00.6b4c72fb7901fb25 - c549b3d22e9f5e2c.21a059eb9658fdd2.4f86c1dd3341455c.93094d6d4c2a89d9 -- 153475f1e9e4007b.1ae01c233d90d681.194045150fc59a64.5a8a197330fae59e -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 9519129034b6c8f8.fe178b509e829783.654e2516af8f7745.1d1cd378c0fd4a20 -- 0000000000000001 -+ 380b75e899c0f60d - --VTESTPD_256_3(reg) -+VCMPPS_128_0x4(reg) - before - 07a3fd2f56ce230e.23c3059c2e2073d1.2891a1de55b97c84.117cddce2eab9a2b - e62f67b993b30dd2.99ffcbfff12fbd30.f39a5a39ffc1c131.f796ea28a826bc41 -@@ -34728,12 +34728,12 @@ VTESTPD_256_3(reg) - 4457cd4700340c4d.b15ebc7e43681c31.e088a6079a76593e.e5bef0710067f4af - a563e1391544815e - after -- 07a3fd2f56ce230e.23c3059c2e2073d1.2891a1de55b97c84.117cddce2eab9a2b -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e62f67b993b30dd2.99ffcbfff12fbd30.f39a5a39ffc1c131.f796ea28a826bc41 - 31fdadf3edfcf203.d59adea699ed6141.bd7db2cd3727a136.f568c70f3a0b9cb3 - 4457cd4700340c4d.b15ebc7e43681c31.e088a6079a76593e.e5bef0710067f4af -- 0000000000000000 --VTESTPD_256_3(mem) -+ a563e1391544815e -+VCMPPS_128_0x4(mem) - before - 0f24175395b1ffef.7b8ac12367e8985e.0b17e0710aacaa2c.ba053151c33a24f6 - 00cd0dac9db7298c.32e288f1bea3d2df.bd93c66d0bc4c75d.a5414f194fff3f0a -@@ -34743,11 +34743,11 @@ VTESTPD_256_3(mem) - after - 0f24175395b1ffef.7b8ac12367e8985e.0b17e0710aacaa2c.ba053151c33a24f6 - 00cd0dac9db7298c.32e288f1bea3d2df.bd93c66d0bc4c75d.a5414f194fff3f0a -- 552a3e2e4964bd62.c5ab1b1fa2f1f57f.a49dea5d61bc2ef1.ff88fcc9d952e625 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e80729c6b3c3759c.90317718af5e3ee8.9d00c92d28a09c13.222634cffebf55f3 -- 0000000000000040 -+ 6b67f49659d0c822 - --VTESTPD_256_3(reg) -+VCMPPS_128_0x4(reg) - before - 3796378a86137a5b.96304761fae10d67.efc099477f77e9c6.8289dec97d7dcdf0 - e000f9172214a84d.3b7016ea38c842ee.3ea37c1ab1c731c6.3004a51d7c5e7cb4 -@@ -34755,12 +34755,12 @@ VTESTPD_256_3(reg) - 3db6ebac167c6707.db69b4750a2773e3.1c98765aa53d8cdc.5700399de65e489f - 8819ffa18994db1f - after -- 3796378a86137a5b.96304761fae10d67.efc099477f77e9c6.8289dec97d7dcdf0 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e000f9172214a84d.3b7016ea38c842ee.3ea37c1ab1c731c6.3004a51d7c5e7cb4 - c3f236a9c95d8da2.b395114c8987d15e.d9271cfcdedb5494.833d9a154050678a - 3db6ebac167c6707.db69b4750a2773e3.1c98765aa53d8cdc.5700399de65e489f -- 0000000000000040 --VTESTPD_256_3(mem) -+ 8819ffa18994db1f -+VCMPPS_128_0x4(mem) - before - f353670e45ffde35.a898128ca5fd7027.8db97b50d6b6e7a8.6242849e9f7c1548 - 727bedce37aa0b0d.61e6a9b6136ae4af.a651e2c90a3fe7da.097144356b212d87 -@@ -34770,11 +34770,11 @@ VTESTPD_256_3(mem) - after - f353670e45ffde35.a898128ca5fd7027.8db97b50d6b6e7a8.6242849e9f7c1548 - 727bedce37aa0b0d.61e6a9b6136ae4af.a651e2c90a3fe7da.097144356b212d87 -- e25e0dcf7aa11ed4.c4ebab94fc51014a.02fd66ccc1cf30a4.6c71b18ca2ba0e43 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1fc644fc2bf0d5b6.2df21594fa3e01a5.7d88824517717e33.e68dc70de2d2f529 -- 0000000000000040 -+ d5138326c7f61de4 - --VTESTPD_256_3(reg) -+VCMPPS_256_0x4(reg) - before - 944de041ecb1c421.057f0d4065a4eadf.f948e120acbc216c.f3bfb22029318cb3 - 7e88d9ccee8f238c.7057e48945c91a79.82390da6ac579d4a.406f734a131c174f -@@ -34782,12 +34782,12 @@ VTESTPD_256_3(reg) - 473095dff6e50199.4490acd76592bab7.3e1c724d071597fd.cf659437dca0938d - c844edd2f452fd87 - after -- 944de041ecb1c421.057f0d4065a4eadf.f948e120acbc216c.f3bfb22029318cb3 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7e88d9ccee8f238c.7057e48945c91a79.82390da6ac579d4a.406f734a131c174f - f1106d32681c79d0.3b1945c2e76921b3.25119491969bb0ec.40623fadf03ddb34 - 473095dff6e50199.4490acd76592bab7.3e1c724d071597fd.cf659437dca0938d -- 0000000000000040 --VTESTPD_256_3(mem) -+ c844edd2f452fd87 -+VCMPPS_256_0x4(mem) - before - 09cac66c545ed24e.de364f3f3576f695.668996b5dd50a2b2.29a6a4469a508e2a - 6dc59cf017d0d10d.106c95bec059956d.7dd07e466bad95cf.42fa25e8ebd8d01f -@@ -34797,11 +34797,11 @@ VTESTPD_256_3(mem) - after - 09cac66c545ed24e.de364f3f3576f695.668996b5dd50a2b2.29a6a4469a508e2a - 6dc59cf017d0d10d.106c95bec059956d.7dd07e466bad95cf.42fa25e8ebd8d01f -- d0ffea4a59b5b5f0.3a1f65c9341c19d0.6531e0772ab74f3b.e466f09f983a9a87 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 0e452c6637183925.b99cbbca2d4bc068.fa783835377a8b22.6d3404d83a01280f -- 0000000000000001 -+ 38b15afd6fbab662 - --VTESTPD_256_3(reg) -+VCMPPS_256_0x4(reg) - before - a128f07bd3f07f2d.0263de30cc0519d6.e72c912e4570c4e2.1770036aad0006af - 04e7c0bf012fc11b.8a257c943589132f.211ee5621b1961e9.9ae7bc04a8577b0f -@@ -34809,12 +34809,12 @@ VTESTPD_256_3(reg) - 276904462cf99a13.c2c46ddbf183408c.2a54f4e66b255a50.3e7de813a0a647f6 - 18355361d4b615d5 - after -- a128f07bd3f07f2d.0263de30cc0519d6.e72c912e4570c4e2.1770036aad0006af -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 04e7c0bf012fc11b.8a257c943589132f.211ee5621b1961e9.9ae7bc04a8577b0f - bd39c8349503b5da.8157837e8dafe15d.c4bdb2d048d2d52a.5ea7dfee458ba86d - 276904462cf99a13.c2c46ddbf183408c.2a54f4e66b255a50.3e7de813a0a647f6 -- 0000000000000000 --VTESTPD_256_3(mem) -+ 18355361d4b615d5 -+VCMPPS_256_0x4(mem) - before - c69b9dc3fdc7cd38.a0c46e60629caa75.2b3ab8957c12ece7.b031a70f1da02d08 - 267b412638e42d48.839604f0d17922aa.9683e09a4b67a09b.b29ec8b7fccf89fe -@@ -34824,11 +34824,11 @@ VTESTPD_256_3(mem) - after - c69b9dc3fdc7cd38.a0c46e60629caa75.2b3ab8957c12ece7.b031a70f1da02d08 - 267b412638e42d48.839604f0d17922aa.9683e09a4b67a09b.b29ec8b7fccf89fe -- 12a0bb74a019ef33.2b2bc161181b3e5e.e16c5fd4798e1ad4.8de8514aa43cacdd -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 68d7879a5272cf25.f6cfa120d10e393e.e6c1b331229413bd.9b5a4034b075d052 -- 0000000000000000 -+ 394291e1bd063208 - --VTESTPD_256_3(reg) -+VCMPPS_256_0x4(reg) - before - c3eb3ebe667a0dac.02ed21846afc8b4a.3ecea09798df50f6.834d579c64844a83 - 95a04535475d9eea.beac061f02c2ddcd.6173ba330a18bf31.92dec701586b7951 -@@ -34836,12 +34836,12 @@ VTESTPD_256_3(reg) - 81614ea524a1d2e2.07579e142833359f.a4e2318b5df894e3.7a3bfc69cb4bb2b7 - 0a9fb844825c33a7 - after -- c3eb3ebe667a0dac.02ed21846afc8b4a.3ecea09798df50f6.834d579c64844a83 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 95a04535475d9eea.beac061f02c2ddcd.6173ba330a18bf31.92dec701586b7951 - 0baea1b3fd3b216d.76e0b15539d182db.ba0bec61c248c29c.f13f7f4c1c545d54 - 81614ea524a1d2e2.07579e142833359f.a4e2318b5df894e3.7a3bfc69cb4bb2b7 -- 0000000000000000 --VTESTPD_256_3(mem) -+ 0a9fb844825c33a7 -+VCMPPS_256_0x4(mem) - before - 7e3731ca5d949e50.53054876571aecf4.4edc4a47edf7b446.7c44851f76b672b1 - b0cfe3e577feaddd.dde68b913232ac50.253a2fdaa426b9fb.9f7de587a90e98b2 -@@ -34851,11 +34851,11 @@ VTESTPD_256_3(mem) - after - 7e3731ca5d949e50.53054876571aecf4.4edc4a47edf7b446.7c44851f76b672b1 - b0cfe3e577feaddd.dde68b913232ac50.253a2fdaa426b9fb.9f7de587a90e98b2 -- 7d324883eca71c7b.7a4f146452764ea2.693ecbb968ce01eb.67d94b31948a4194 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c12ede8ed99aa855.888ede5a52710e95.f7b499d056fa4742.32a3b588d0b8aa00 -- 0000000000000041 -+ 5a291ef8fb240fa5 - --VBLENDVPS_128(reg) -+VPCMPGTB_128(reg) - before - 3cb583edb158ac2d.588d1ff459e30e98.62ede5dfcfb027d6.a968150b89b7482b - 3594ded38de2bc45.1f1c8aa0898e0770.64b9265f64bed610.5c26bc561d0fc0d3 -@@ -34863,12 +34863,12 @@ VBLENDVPS_128(reg) - d77a6b23282628d3.a8fac679673ca98d.4fc842014878e521.35ef77cddbc6040e - 139284d03c3c48fa - after -- 0000000000000000.0000000000000000.64b9265f64bed610.5c26bc562f116b65 -+ 0000000000000000.0000000000000000.ff00ffffff0000ff.ffff00ff00000000 - 3594ded38de2bc45.1f1c8aa0898e0770.64b9265f64bed610.5c26bc561d0fc0d3 - 9f122d172b4e7c98.f0a7987d84a85208.ea3e9b47ae2757f0.ecba089e2f116b65 - d77a6b23282628d3.a8fac679673ca98d.4fc842014878e521.35ef77cddbc6040e - 139284d03c3c48fa --VBLENDVPS_128(mem) -+VPCMPGTB_128(mem) - before - 6270ac946e7ef354.391a94651ff8fca1.23e191804d57c92a.f1a316facf3bbd51 - fe5369048e99c049.213ca447ad5033af.3d28747c52046e0c.2b1a139fdeff1b29 -@@ -34878,11 +34878,11 @@ VBLENDVPS_128(mem) - after - 6270ac946e7ef354.391a94651ff8fca1.23e191804d57c92a.f1a316facf3bbd51 - fe5369048e99c049.213ca447ad5033af.3d28747c52046e0c.2b1a139fdeff1b29 -- 0000000000000000.0000000000000000.23e1918052046e0c.f1a316fadeff1b29 -+ 0000000000000000.0000000000000000.ffffffffff00ff00.ffff0000ff00ff00 - 8d5a97970687b4b2.f33a6b9ffcbfbc3a.be0473062c45354e.d6107a9905b35888 - ff26dbc756bcaf65 - --VBLENDVPS_128(reg) -+VPCMPGTB_128(reg) - before - 310855509ff57b9c.3817ff939673517f.95ad19edf6ee870f.dd32866d38f1d006 - c604e4a07ce9fad9.a009eeec84670296.2dd29e8cf5d3a5d3.0bf0a279d45fdfb2 -@@ -34890,12 +34890,12 @@ VBLENDVPS_128(reg) - 8d7632456533fc13.17bf4d60e8988a54.af661e6d78ecccdb.034ce23529b34c99 - 8681ffbb1bb0222b - after -- 0000000000000000.0000000000000000.17f7f7e8f5d3a5d3.0bf0a279d45fdfb2 -+ 0000000000000000.0000000000000000.ff000000ff000000.000000ff00ff0000 - c604e4a07ce9fad9.a009eeec84670296.2dd29e8cf5d3a5d3.0bf0a279d45fdfb2 - 1c6585238a2466c7.a1fdde8ceb6f8124.17f7f7e898f95233.230a42181b9c207f - 8d7632456533fc13.17bf4d60e8988a54.af661e6d78ecccdb.034ce23529b34c99 - 8681ffbb1bb0222b --VBLENDVPS_128(mem) -+VPCMPGTB_128(mem) - before - 887613980ca05d62.7784ea72a8a1f768.dd1bb65496eddb53.516d118833394d76 - e5f89cb7198eb869.34dba617effa9573.d1dd9655117a2e4d.5956cba3656b12b0 -@@ -34905,11 +34905,11 @@ VBLENDVPS_128(mem) - after - 887613980ca05d62.7784ea72a8a1f768.dd1bb65496eddb53.516d118833394d76 - e5f89cb7198eb869.34dba617effa9573.d1dd9655117a2e4d.5956cba3656b12b0 -- 0000000000000000.0000000000000000.dd1bb65496eddb53.5956cba333394d76 -+ 0000000000000000.0000000000000000.000000ffffffff00.ff0000ffffff0000 - 1fcdfb6cf595c099.9b941e75fb9fa55a.b0c2a72ae16ecddf.0b01858d9caf57b5 - 6d5a7d33d9da4fd6 - --VBLENDVPS_128(reg) -+VPCMPGTB_128(reg) - before - a4c72c8bfc197b47.b5bac8d9fcc6e51b.fc8ed206f8028f8e.527dd1d76dec90d1 - 0e928e00a2fa17b4.1563fa388f251b1c.a1007bbf69810b28.92ce614037d3466d -@@ -34917,12 +34917,12 @@ VBLENDVPS_128(reg) - e7765cf1e5d08d30.a7177b7dc79fa951.287f9d561900a93b.5862a4f6f20a7b54 - 963d4f1b1c7171f8 - after -- 0000000000000000.0000000000000000.a1007bbf69810b28.92ce61405a2eabdf -+ 0000000000000000.0000000000000000.0000ff00ff0000ff.00ffff000000ffff - 0e928e00a2fa17b4.1563fa388f251b1c.a1007bbf69810b28.92ce614037d3466d - 0609a0fe67085ec9.1d930c76c9bf1ecb.e637150beba755d3.4a81d3505a2eabdf - e7765cf1e5d08d30.a7177b7dc79fa951.287f9d561900a93b.5862a4f6f20a7b54 - 963d4f1b1c7171f8 --VBLENDVPS_128(mem) -+VPCMPGTB_128(mem) - before - e2dd50acf3714af6.0f26c045bbdde098.91bbc13ba4d27add.c1240e0c9019420e - 160f23959416c27b.d964c76683bb92ab.b54b5c9b7d624a99.0e726499eb7d5df5 -@@ -34932,11 +34932,11 @@ VBLENDVPS_128(mem) - after - e2dd50acf3714af6.0f26c045bbdde098.91bbc13ba4d27add.c1240e0c9019420e - 160f23959416c27b.d964c76683bb92ab.b54b5c9b7d624a99.0e726499eb7d5df5 -- 0000000000000000.0000000000000000.b54b5c9ba4d27add.0e7264999019420e -+ 0000000000000000.0000000000000000.ffffff00ffff0000.ffffff00ffffff00 - aa5a3120a27c7dc9.c2beafbf5a1b0684.1f5f7ef090cfde53.3438afe8be5708b6 - c5499d836fe511e6 - --VBLENDVPS_256(reg) -+VPCMPGTW_128(reg) - before - 7a3260a474ef8add.c209629a475539e9.997288d0a1b640a2.1d7afdbf03c319a9 - af40f4b969ffb244.327b571b26038441.83e4f45d4b51c91b.c5b1c0dfe24545df -@@ -34944,12 +34944,12 @@ VBLENDVPS_256(reg) - 09fb806b9567fb19.8ed476e7000cb543.fc3475a035bcbbd1.87a304c551245f9e - 58f67c641a99c57e - after -- af40f4b9eba3c4ca.d77b899126038441.da61efd44b51c91b.f4d0443de24545df -+ 0000000000000000.0000000000000000.0000ffffffff0000.000000000000ffff - af40f4b969ffb244.327b571b26038441.83e4f45d4b51c91b.c5b1c0dfe24545df - c0bf552deba3c4ca.d77b89915a9119fa.da61efd4f37ade9d.f4d0443d48611d22 - 09fb806b9567fb19.8ed476e7000cb543.fc3475a035bcbbd1.87a304c551245f9e - 58f67c641a99c57e --VBLENDVPS_256(mem) -+VPCMPGTW_128(mem) - before - 44952904becd0bef.e63f6fe104d693dd.31539809337f1446.43ab832dafa49b65 - 274b85935acbee1d.b3d920fad47ccac3.9dc46de30ff6f130.0c1114e6fabdbb05 -@@ -34959,11 +34959,11 @@ VBLENDVPS_256(mem) - after - 44952904becd0bef.e63f6fe104d693dd.31539809337f1446.43ab832dafa49b65 - 274b85935acbee1d.b3d920fad47ccac3.9dc46de30ff6f130.0c1114e6fabdbb05 -- 274b8593becd0bef.e63f6fe1d47ccac3.9dc46de30ff6f130.43ab832dfabdbb05 -+ 0000000000000000.0000000000000000.0000ffff00000000.0000ffffffffffff - 43303f2ae8557b5d.8c3ab6c5049e00a4.40ac1e6f35211967.95d8af9279b3ab18 - 0cd2b25be4a8f2e2 - --VBLENDVPS_256(reg) -+VPCMPGTW_128(reg) - before - 76eb270191fe6969.33f6950b12fa9dc8.519a924f9c3278f7.30bbf2fab6edda0c - 2d6f0cf01d424c57.8a048a8aa49a4ba0.767f202d052e7d1c.58eb68ec50ee0b48 -@@ -34971,12 +34971,12 @@ VBLENDVPS_256(reg) - f5e7145a40c24419.dd2746126ef73e46.4f074091b98b218a.c3e22ab942bca734 - be406f6cd1a28c3c - after -- 8ea95d951d424c57.24269c93a49a4ba0.767f202ddb1d4cbe.9509fc3350ee0b48 -+ 0000000000000000.0000000000000000.ffff0000ffffffff.ffffffffffff0000 - 2d6f0cf01d424c57.8a048a8aa49a4ba0.767f202d052e7d1c.58eb68ec50ee0b48 - 8ea95d9523ffd658.24269c93b93f4211.56345bc9db1d4cbe.9509fc33202f6647 - f5e7145a40c24419.dd2746126ef73e46.4f074091b98b218a.c3e22ab942bca734 - be406f6cd1a28c3c --VBLENDVPS_256(mem) -+VPCMPGTW_128(mem) - before - 62ef4537e9eccf8a.be732fad1015d246.91d504f3decdfa6b.bc42c9ef3c05382b - 8bbd2a06a7a62d4b.459aa8f92d86bc8a.1cfa522325ce33ad.f832f451ff15cc4e -@@ -34986,11 +34986,11 @@ VBLENDVPS_256(mem) - after - 62ef4537e9eccf8a.be732fad1015d246.91d504f3decdfa6b.bc42c9ef3c05382b - 8bbd2a06a7a62d4b.459aa8f92d86bc8a.1cfa522325ce33ad.f832f451ff15cc4e -- 62ef4537e9eccf8a.be732fad1015d246.1cfa5223decdfa6b.f832f4513c05382b -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - dbe20f60839c29d5.fde9aa2cc4f19209.27dc901cab7e0b37.51611dceb62d5ec9 - 263813c1e34cd378 - --VBLENDVPS_256(reg) -+VPCMPGTW_128(reg) - before - 3af39b67c033b65a.bbd107c3d9ef3ff5.e6a829eb7602f79c.5f3177bd214623d7 - ebe0b02ce96c4318.900efdda44e36039.fd33f853e560a8f7.dd2dde5dde68a644 -@@ -34998,12 +34998,12 @@ VBLENDVPS_256(reg) - 8f7b71c491094adf.89a2d3d5ccdbb2d7.25d873ce7035dcb2.204e1d479febe533 - 9c0aed69db64170d - after -- 93494e7cfb85b661.36656d91e28348cb.fd33f853e560a8f7.dd2dde5dfff053a9 -+ 0000000000000000.0000000000000000.ffff0000ffff0000.0000000000000000 - ebe0b02ce96c4318.900efdda44e36039.fd33f853e560a8f7.dd2dde5dde68a644 - 93494e7cfb85b661.36656d91e28348cb.9ed412d0af98e0c5.7f9e42e7fff053a9 - 8f7b71c491094adf.89a2d3d5ccdbb2d7.25d873ce7035dcb2.204e1d479febe533 - 9c0aed69db64170d --VBLENDVPS_256(mem) -+VPCMPGTW_128(mem) - before - ce9e2d39cf67a564.3cc2156e48853c3f.6490ac9020f85b8a.ee8b17bac3c4d86c - 94d65aa395014d64.f46a37e8bc84c82c.a5fd72b0fae5fe10.5539fbfe45cf0f9d -@@ -35013,11 +35013,11 @@ VBLENDVPS_256(mem) - after - ce9e2d39cf67a564.3cc2156e48853c3f.6490ac9020f85b8a.ee8b17bac3c4d86c - 94d65aa395014d64.f46a37e8bc84c82c.a5fd72b0fae5fe10.5539fbfe45cf0f9d -- 94d65aa395014d64.3cc2156ebc84c82c.6490ac9020f85b8a.5539fbfe45cf0f9d -+ 0000000000000000.0000000000000000.0000ffff00000000.ffff0000ffffffff - 486167f60d27d60d.f90ce2f8483c9c5f.c57fbaccad602643.6cb57042438f2115 - d51cf91af85b73b5 - --VBLENDVPD_128(reg) -+VPMADDWD_128(reg) - before - 4cadb1fb4bd4f27d.ef4d40b6f6cc300e.fd9e6367980d5dfd.5d2d34a0bf062249 - 2cb59551d987d817.980cf5c123379268.7dc152551591a8d9.ca898b88c7ac08d1 -@@ -35025,12 +35025,12 @@ VBLENDVPD_128(reg) - 9c5ace0c15c8cb78.6436e464b79061d5.61ea675e05e4caf9.927ac544262a8619 - a5a7a0f0b6199431 - after -- 0000000000000000.0000000000000000.7dc152551591a8d9.e75f3d70df5f9608 -+ 0000000000000000.0000000000000000.cfa5a0c71ffee213.e9313b570387a95c - 2cb59551d987d817.980cf5c123379268.7dc152551591a8d9.ca898b88c7ac08d1 - d380a0883eff6132.216b0302af75ba46.d5c1aa2e5b55b89e.e75f3d70df5f9608 - 9c5ace0c15c8cb78.6436e464b79061d5.61ea675e05e4caf9.927ac544262a8619 - a5a7a0f0b6199431 --VBLENDVPD_128(mem) -+VPMADDWD_128(mem) - before - fdb34861ab397e7b.e28e1b49fa6e5096.3f3916d556974641.7d888551b0cb1a95 - 77683b812295fe24.036a84ac8a7e2d37.8c3f1440a89323b5.85e60073f794e41f -@@ -35040,11 +35040,11 @@ VBLENDVPD_128(mem) - after - fdb34861ab397e7b.e28e1b49fa6e5096.3f3916d556974641.7d888551b0cb1a95 - 77683b812295fe24.036a84ac8a7e2d37.8c3f1440a89323b5.85e60073f794e41f -- 0000000000000000.0000000000000000.3f3916d556974641.7d888551b0cb1a95 -+ 0000000000000000.0000000000000000.e5381447ec3a5faa.c3e95393ffb5fe67 - 3dffef820433b242.42459690190adeb4.f08865b4d89fb868.c916fff5ca02d4ac - bd7f7a2d8fbe7207 - --VBLENDVPD_128(reg) -+VPMADDWD_128(reg) - before - 0dd942435f8d7bff.417aa83ba78c5f0f.18dd39e9509e2ae9.be62b095edc6e7fe - 156f54a5d9fb2941.d6ce9c543b5192eb.384ce618a1cbbd50.7070b7212514004c -@@ -35052,12 +35052,12 @@ VBLENDVPD_128(reg) - bd8342fa35e66652.24342256a9517c7d.c7de53a50422ac6a.eb57eae67053dac3 - 6dc90df7bb5c1444 - after -- 0000000000000000.0000000000000000.ffdd9b88a91ed597.e07ef6429d94bd80 -+ 0000000000000000.0000000000000000.0a23125c2b0532fa.f4ef43a2f1aaf590 - 156f54a5d9fb2941.d6ce9c543b5192eb.384ce618a1cbbd50.7070b7212514004c - 318faabe9795b979.d8c846b9de8f0801.ffdd9b88a91ed597.e07ef6429d94bd80 - bd8342fa35e66652.24342256a9517c7d.c7de53a50422ac6a.eb57eae67053dac3 - 6dc90df7bb5c1444 --VBLENDVPD_128(mem) -+VPMADDWD_128(mem) - before - 439edd6399bb282d.159918c5507b6d79.94deac17baa4ab8c.ee990adb4d637f75 - 47a3d515277dcfaa.941b268b83df0a99.059260e82d93515a.ce5bbc96216e8963 -@@ -35067,11 +35067,11 @@ VBLENDVPD_128(mem) - after - 439edd6399bb282d.159918c5507b6d79.94deac17baa4ab8c.ee990adb4d637f75 - 47a3d515277dcfaa.941b268b83df0a99.059260e82d93515a.ce5bbc96216e8963 -- 0000000000000000.0000000000000000.059260e82d93515a.ce5bbc96216e8963 -+ 0000000000000000.0000000000000000.dde7d174d8d09b64.00841eb5cf0ceac9 - 4c6d2efbc157cd13.7c96deb9a344f576.5a47386ba676f1e2.2c24024bd70f369a - 63c38e1ef2be503a - --VBLENDVPD_128(reg) -+VPMADDWD_128(reg) - before - c39905250766916f.05ca870705879b57.9c2680f8c85ebc8c.f6e053f5e58163f3 - a9f164ceb39436e3.5d87f809694aeedf.53544ce37577074a.03b4893ef55a3c73 -@@ -35079,12 +35079,12 @@ VBLENDVPD_128(reg) - 775ac6b23eae9c3a.5a4f129ffeb7116d.fab54e69d8d82074.e03732c2fb9f1270 - 68809ed427258744 - after -- 0000000000000000.0000000000000000.ff6a3ce4461c155f.5d8d5434f30a378e -+ 0000000000000000.0000000000000000.1218daf420c7297a.da4aa6bc0da8404e - a9f164ceb39436e3.5d87f809694aeedf.53544ce37577074a.03b4893ef55a3c73 - 7118a58392d27b43.306ffded08ac81d7.ff6a3ce4461c155f.5d8d5434f30a378e - 775ac6b23eae9c3a.5a4f129ffeb7116d.fab54e69d8d82074.e03732c2fb9f1270 - 68809ed427258744 --VBLENDVPD_128(mem) -+VPMADDWD_128(mem) - before - d133145696a65236.1703c2c656b4d475.b7f3b40c68795aca.a2817dddc7376538 - f71b103461303173.ad5f952b736e609f.23275e1e62fd171d.521ac5acaec62055 -@@ -35094,11 +35094,11 @@ VBLENDVPD_128(mem) - after - d133145696a65236.1703c2c656b4d475.b7f3b40c68795aca.a2817dddc7376538 - f71b103461303173.ad5f952b736e609f.23275e1e62fd171d.521ac5acaec62055 -- 0000000000000000.0000000000000000.b7f3b40c68795aca.521ac5acaec62055 -+ 0000000000000000.0000000000000000.da2ec06d30980077.c55674961ecd1222 - eabd8cb4818d157d.2b5fb19832346372.976fbae6737de04f.39e2910bd5a1e74c - 28aa0d734e066a7e - --VBLENDVPD_256(reg) -+VADDSUBPS_128(reg) - before - 8f6e92e62fc954b9.6e0f032f0d7894a2.cb9bf2780b575374.581a6573c3906487 - cb7b1cd01479dfaa.20c7f0b5679c15c2.d1bafa5a5b5f8614.9886075513964d64 -@@ -35106,12 +35106,12 @@ VBLENDVPD_256(reg) - 2da030ba5cc9cb5d.7b981e96f2bb10a1.7ed150cfce4fa7e5.04cc25ce20a83bbb - e93f993b16cdba8e - after -- cb7b1cd01479dfaa.20c7f0b5679c15c2.d1bafa5a5b5f8614.9886075513964d64 -+ 0000000000000000.0000000000000000.d1bafa5a5b5f8614.337d1e7afd9a5611 - cb7b1cd01479dfaa.20c7f0b5679c15c2.d1bafa5a5b5f8614.9886075513964d64 - 361da79e9a9f48fd.dbb0d034aa035508.9908c6a8bdd83801.337d1e7a7d9a5611 - 2da030ba5cc9cb5d.7b981e96f2bb10a1.7ed150cfce4fa7e5.04cc25ce20a83bbb - e93f993b16cdba8e --VBLENDVPD_256(mem) -+VADDSUBPS_128(mem) - before - bda1f4ae7b148db5.0d4fb292f783a377.db4956c95cd001b8.de61963c294f0d6c - 5bc0b4136b8a715d.3078299106570ef7.d990f4b8044ce57a.1404935a6a65a743 -@@ -35121,11 +35121,11 @@ VBLENDVPD_256(mem) - after - bda1f4ae7b148db5.0d4fb292f783a377.db4956c95cd001b8.de61963c294f0d6c - 5bc0b4136b8a715d.3078299106570ef7.d990f4b8044ce57a.1404935a6a65a743 -- 5bc0b4136b8a715d.0d4fb292f783a377.d990f4b8044ce57a.1404935a6a65a743 -+ 0000000000000000.0000000000000000.db5b7560dcd001b8.de61963c6a65a743 - 696050645f2f5bde.b263e7b3f28387d6.1b10537a7baf76ae.71b1a35810006590 - 5154ad11ad9e025e - --VBLENDVPD_256(reg) -+VADDSUBPS_128(reg) - before - 773a5f2ba180c32c.917a25289a78da0f.c9be26af06f20f8e.18e10c2583ad9a77 - 3eafb4138635e3a5.f3804d8ed11f5871.95c24a83ffac185c.21771b3c3943a19c -@@ -35133,12 +35133,12 @@ VBLENDVPD_256(reg) - 237538f89a41334a.d9808bf0a1b74877.b7f4315e0f329fe9.cb262c5f1c6847a4 - 23d62542810f5ee0 - after -- 3eafb4138635e3a5.6d3e46821f309430.70ba4f99793ddeec.149ffcabb77d4747 -+ 0000000000000000.0000000000000000.70ba4f99ffec185c.21771b3c39537610 - 3eafb4138635e3a5.f3804d8ed11f5871.95c24a83ffac185c.21771b3c3943a19c - 04fea933fb46a076.6d3e46821f309430.70ba4f99793ddeec.149ffcabb77d4747 - 237538f89a41334a.d9808bf0a1b74877.b7f4315e0f329fe9.cb262c5f1c6847a4 - 23d62542810f5ee0 --VBLENDVPD_256(mem) -+VADDSUBPS_128(mem) - before - f97c6542057e4827.f95e5fcfffb1dbce.151199c472c13173.c6baed3e5e1695ff - 27e36749c1c2c1a4.e0061922c623d2ad.fbbeeaeaae590b50.f95a7ea60175fddb -@@ -35148,11 +35148,11 @@ VBLENDVPD_256(mem) - after - f97c6542057e4827.f95e5fcfffb1dbce.151199c472c13173.c6baed3e5e1695ff - 27e36749c1c2c1a4.e0061922c623d2ad.fbbeeaeaae590b50.f95a7ea60175fddb -- f97c6542057e4827.e0061922c623d2ad.fbbeeaeaae590b50.f95a7ea60175fddb -+ 0000000000000000.0000000000000000.fbbeeaeaf2c13173.f95a7ea6de1695ff - ff28a22157f74ef2.55c337f0ed3aa02f.399c4adcd964815a.3b520fbab4d61295 - 0244083ffcf037ca - --VBLENDVPD_256(reg) -+VADDSUBPS_128(reg) - before - 5c3fc6fb09b5be74.609dd3c96800db1b.9b70924384f8ef29.4865508100f095e1 - a78e455a76b1e240.8a04b629230de62b.620b71c3eee77d2f.727a8b27033989f8 -@@ -35160,12 +35160,12 @@ VBLENDVPD_256(reg) - 7d5c76b1e27ff5ed.aad883c104646aae.e73fa8faa989480e.88b78c2b0a370587 - 2b774b5f46040358 - after -- a78e455a76b1e240.5929c72da32b2d4d.07e1cfdcc69387ed.93a675bcfc4d1acb -+ 0000000000000000.0000000000000000.620b71c3eee77d2f.727a8b277c4d1acb - a78e455a76b1e240.8a04b629230de62b.620b71c3eee77d2f.727a8b27033989f8 - 3e7e81c8e070e1da.5929c72da32b2d4d.07e1cfdcc69387ed.93a675bcfc4d1acb - 7d5c76b1e27ff5ed.aad883c104646aae.e73fa8faa989480e.88b78c2b0a370587 - 2b774b5f46040358 --VBLENDVPD_256(mem) -+VADDSUBPS_128(mem) - before - 59b32e46cfbfd369.c071218119695a26.57dd65d263c75979.5c6ff9893154fd3e - ee37b2cbbe742fe7.620c7da420bb4e31.3d03e84adc5db8db.c3bebdf6fd80e32b -@@ -35175,11 +35175,11 @@ VBLENDVPD_256(mem) - after - 59b32e46cfbfd369.c071218119695a26.57dd65d263c75979.5c6ff9893154fd3e - ee37b2cbbe742fe7.620c7da420bb4e31.3d03e84adc5db8db.c3bebdf6fd80e32b -- 59b32e46cfbfd369.620c7da420bb4e31.3d03e84adc5db8db.5c6ff9893154fd3e -+ 0000000000000000.0000000000000000.57dd65d2e3c75b34.5c6ff989fd80e32b - bd468a5f44fd7ed8.3800389410c4ce6b.24e6c7238957b013.d8e88e16cb2d2ce6 - 3d5b93a106c5080d - --VPMULDQ_128(reg) -+VADDSUBPS_256(reg) - before - 041dfcbaf3ef049f.af6ad64712eae8a4.22f28f393193d2f2.dd3a195cf6d3c341 - 897bc4cb2f365c4a.7805b27cb800cf8c.dd9888e192fa54fb.3fdffeadecb334b5 -@@ -35187,12 +35187,12 @@ VPMULDQ_128(reg) - 3d35618a024c0e95.ffd30c81f9dd0362.32334de985bec241.6e516e47e5d02322 - f3b4f26820251872 - after -- 0000000000000000.0000000000000000.14a534620d1e740b.090bb6df6adade4c -+ 28bee742d5274bb7.7803e944d14defbd.dd9888e14f859031.3fdffeadecb334b5 - 897bc4cb2f365c4a.7805b27cb800cf8c.dd9888e192fa54fb.3fdffeadecb334b5 - 28bee74255274bb7.f4e49beb514defbd.c33f1ef7cf859031.26a3f1028803c09c - 3d35618a024c0e95.ffd30c81f9dd0362.32334de985bec241.6e516e47e5d02322 - f3b4f26820251872 --VPMULDQ_128(mem) -+VADDSUBPS_256(mem) - before - 9099f851540e5cb9.242b2e0fd133e18e.759e8129cdbac9a8.84bf1122503326d7 - 23ccfbee9e98ab22.39eb4b3d5f68ff4e.311076cee9f2faba.1731670ecb6ff79e -@@ -35202,11 +35202,11 @@ VPMULDQ_128(mem) - after - 9099f851540e5cb9.242b2e0fd133e18e.759e8129cdbac9a8.84bf1122503326d7 - 23ccfbee9e98ab22.39eb4b3d5f68ff4e.311076cee9f2faba.1731670ecb6ff79e -- 0000000000000000.0000000000000000.045481386b749410.ef887cb62e4469b2 -+ 23ccfbeed40e5cb9.39eb4b3d5f68ff4e.759e8129e9f2faba.1731670ed03362d5 - 984ceef5e2bc590d.5dfd624526e90fd6.f01dd1c466a195f5.6cf3b6b0426ed272 - e6dba73d764855d6 - --VPMULDQ_128(reg) -+VADDSUBPS_256(reg) - before - 10d81a2ecb1a351c.3130d437146f30e6.23e654f6974d79f6.aa4f2fec00307576 - 473509eddc6faeef.3093a9dccbf20192.88ca8601362f1e8d.1a59fdc2514ab173 -@@ -35214,12 +35214,12 @@ VPMULDQ_128(reg) - 4743508aa4d35fee.cc010d043b998511.9cb297d1719b0cd1.9125da298a4b3192 - 4e7ee191aa4cec0d - after -- 0000000000000000.0000000000000000.ebb3e2164c8c851b.25c781b244b5c7c8 -+ e54072e8dc6faeef.703fe8d2cbf20192.e7f4f3d0362f1e8d.1e089230f6f90718 - 473509eddc6faeef.3093a9dccbf20192.88ca8601362f1e8d.1a59fdc2514ab173 - e54072e846d3fefc.703fe8d224518a3c.e7f4f3d0a01a3c47.1e07b83276f90718 - 4743508aa4d35fee.cc010d043b998511.9cb297d1719b0cd1.9125da298a4b3192 - 4e7ee191aa4cec0d --VPMULDQ_128(mem) -+VADDSUBPS_256(mem) - before - 33e04857f106f4b4.c98ca03e93fa0e72.22a5955e2bd5af3c.034e6e6f443dcdd7 - 1b158b687b8804b4.c8655c72aed44634.4df7facc1011c3ea.77157416b58cb904 -@@ -35229,11 +35229,11 @@ VPMULDQ_128(mem) - after - 33e04857f106f4b4.c98ca03e93fa0e72.22a5955e2bd5af3c.034e6e6f443dcdd7 - 1b158b687b8804b4.c8655c72aed44634.4df7facc1011c3ea.77157416b58cb904 -- 0000000000000000.0000000000000000.02c065b038c8e0d8.ec2767d04f4b965c -+ 33e048577b8804b8.c9a94bccaed44634.4df7faccabd5af3c.77157416c43dcdd7 - 632b9617cb0d2f6e.a8fa0d07dad34520.91d450942bbb9d7e.fb54ff2fe4620586 - c1647b79d802dc32 - --VPMULDQ_128(reg) -+VADDSUBPS_256(reg) - before - 06cf167cdc7ecfb6.7ba4568ec829c27f.424df941220f83a2.62f738c69941d9bc - 24e0cda489641abd.0620e2ff793b4d9a.c86243a9082f3a12.79f9efbd6cf7f12d -@@ -35241,12 +35241,12 @@ VPMULDQ_128(reg) - 5f277c14549ca706.e6554f7f64733e98.08fdddb71749066b.e4c5b7a6b323a055 - f227c0715fb2af66 - after -- 0000000000000000.0000000000000000.0134ebc9676817f8.e5926d69b1d15b4c -+ 79e49b5efe3ff9f4.e16db75679c5edc2.c86243a9a5bea71c.79f9efbd6cf7f12d - 24e0cda489641abd.0620e2ff793b4d9a.c86243a9082f3a12.79f9efbd6cf7f12d - 79e49b5e7e3ff9f4.e16db756f9508de9.9683e5ac25bea71c.b0a4f063c1e99ffc - 5f277c14549ca706.e6554f7f64733e98.08fdddb71749066b.e4c5b7a6b323a055 - f227c0715fb2af66 --VPMULDQ_128(mem) -+VADDSUBPS_256(mem) - before - b49887afe0a18a59.34f56c34aa0661a0.f2a52867d7b11bd4.7a1c2634795b93ac - 07e2894e53fdeb5a.529a67291909636e.e229bdf86e15e2c9.482cbc91e880898a -@@ -35256,11 +35256,11 @@ VPMULDQ_128(mem) - after - b49887afe0a18a59.34f56c34aa0661a0.f2a52867d7b11bd4.7a1c2634795b93ac - 07e2894e53fdeb5a.529a67291909636e.e229bdf86e15e2c9.482cbc91e880898a -- 0000000000000000.0000000000000000.eeaaa7c715040174.f4dc59252364a6b8 -+ b49887af60a18a59.529a67292a0661a0.f2a528676e15e2c9.7a1c2634f95b93ac - d1342a5c7c293139.dd987041b80c2d54.d9fc0bc9757f188c.684fc1985c34a3d0 - 72f9271a98db3f8f - --VCMPPD_256_0x4(reg) -+VADDSUBPD_128(reg) - before - 47c4ca2b51c6349b.ffd4c3a36b118e6e.018a753d1f236ec5.99e4bde01e9e00b2 - 45fca637227fbfa2.2e7e85fbbc966262.df8275bf1004e719.ad2f1b525a13c241 -@@ -35268,12 +35268,12 @@ VCMPPD_256_0x4(reg) - 29e3fbf07e91864b.ff1f7989f1a55e35.3ab7570003516f1c.3c22cbf4fd31be49 - 706016fc9bf1711a - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.df8275bf1004e719.6faba10a46eb1765 - 45fca637227fbfa2.2e7e85fbbc966262.df8275bf1004e719.ad2f1b525a13c241 - c7edb8aaa8951c4e.3afeee4e8ac36940.d4cd6d31283ad3fc.efaba10a46eb1765 - 29e3fbf07e91864b.ff1f7989f1a55e35.3ab7570003516f1c.3c22cbf4fd31be49 - 706016fc9bf1711a --VCMPPD_256_0x4(mem) -+VADDSUBPD_128(mem) - before - 6733fd0e3e38ed03.c62a6b7640013a46.59afa2990e47fe6d.6e8c31983cd6f722 - fd66fb16ff11ee31.fc0d04a68c7074eb.2478e568fdb50513.cc97f6666f54a7bd -@@ -35283,11 +35283,11 @@ VCMPPD_256_0x4(mem) - after - 6733fd0e3e38ed03.c62a6b7640013a46.59afa2990e47fe6d.6e8c31983cd6f722 - fd66fb16ff11ee31.fc0d04a68c7074eb.2478e568fdb50513.cc97f6666f54a7bd -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.59afa2990e47fe6d.ee8c31983cd6f722 - 761a32b951a96d0b.9fdba2b92b7d69e1.7de7abf8be27375b.77833250356c6d5c - 7bfba145001efbba - --VCMPPD_256_0x4(reg) -+VADDSUBPD_128(reg) - before - 19daeb1f35faa25a.1134622b1981640f.c55d9f72b8329c8b.c3262590c942da55 - ad6b0d4a718a9ceb.bbde9944701ccf07.f2acb5873d16448e.eacfa9981559d36e -@@ -35295,12 +35295,12 @@ VCMPPD_256_0x4(reg) - 27d8c5436cfc7b8a.ac1212173ec7f486.d5e01d72a09ee751.4b8dc0a8e2aebbab - 3d3b4b889a022027 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.f2acb5873d16448e.eacfa9981559d36e - ad6b0d4a718a9ceb.bbde9944701ccf07.f2acb5873d16448e.eacfa9981559d36e - 93fc01324f5c2517.50e456ee73846c20.8413e16356b69f97.ceadb3fcbf79e0d1 - 27d8c5436cfc7b8a.ac1212173ec7f486.d5e01d72a09ee751.4b8dc0a8e2aebbab - 3d3b4b889a022027 --VCMPPD_256_0x4(mem) -+VADDSUBPD_128(mem) - before - 8083d0890583cd72.c54a54e963f5d8f2.aa334aaaecf12664.435d6720b7585969 - ef31cb953c3d7cb7.c89faa90d1d379f8.28157b93990cbde7.28d7bada3572308a -@@ -35310,11 +35310,11 @@ VCMPPD_256_0x4(mem) - after - 8083d0890583cd72.c54a54e963f5d8f2.aa334aaaecf12664.435d6720b7585969 - ef31cb953c3d7cb7.c89faa90d1d379f8.28157b93990cbde7.28d7bada3572308a -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.aa334aaaecebc77f.c35d6720b7585969 - c6ee14828489d3e2.72229c927f6f7695.1147b517624b078a.cbf26c1dddf4019a - 402bc2803d7472e0 - --VCMPPD_256_0x4(reg) -+VADDSUBPD_128(reg) - before - 9d91129e768438e0.e4955a3bcc33f220.d0e82fc5f8454a82.3330b68ab6853402 - 3e6f57e223ae9046.a0d207b051460407.04c07aa8583152bf.4508a00379e2b5cf -@@ -35322,12 +35322,12 @@ VCMPPD_256_0x4(reg) - bdc7b1914b86e6f1.5e3e827e85d4f187.5dda26333a78edd8.a5b91cb8be34a617 - ac29a6cc78408dea - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.69f779a93abecaf8.4508a00379e2b5cf - 3e6f57e223ae9046.a0d207b051460407.04c07aa8583152bf.4508a00379e2b5cf - 80128ebae080b6bd.d57195cd30cdc5c6.69f779a93abecaf8.219dee6fc86e471d - bdc7b1914b86e6f1.5e3e827e85d4f187.5dda26333a78edd8.a5b91cb8be34a617 - ac29a6cc78408dea --VCMPPD_256_0x4(mem) -+VADDSUBPD_128(mem) - before - 11b90895119ebac2.52d8bed3fd4a5b8f.190548af6b684377.3bb37fb2f5ebf80c - b235bf01a55be6ca.9b91b0ec945a5243.e091654cfe9478c1.5ecf7f9206a42740 -@@ -35337,11 +35337,11 @@ VCMPPD_256_0x4(mem) - after - 11b90895119ebac2.52d8bed3fd4a5b8f.190548af6b684377.3bb37fb2f5ebf80c - b235bf01a55be6ca.9b91b0ec945a5243.e091654cfe9478c1.5ecf7f9206a42740 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.e091654cfe9478c1.5ecf7f9206a42740 - 1321196f311f321c.b9303454e08db59c.062c927b9de57a15.e8ff64259d16df56 - 05ab42b159e7e190 - --VCMPPS_128_0x4(reg) -+VADDSUBPD_256(reg) - before - d9cbb64ddd2df77a.8d28b449603fc9be.46acbd7accc79a98.1dd29ae4e122bf77 - bea9be67c2755cbf.b14b9475faed5140.f7011c280d7cef5a.b06ee86a4228d7e4 -@@ -35349,12 +35349,12 @@ VCMPPS_128_0x4(reg) - 2fd278c12538060d.6b161074e2252397.35664ac8fd89e0e0.beb74679cdbc6f8d - f0fc4fdb2e626722 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ bea9be67c2755cbf.dd5734df1c3685cf.f7011c280d7cef5a.b06ee86a4228d7e4 - bea9be67c2755cbf.b14b9475faed5140.f7011c280d7cef5a.b06ee86a4228d7e4 - 11925569a64a4d0c.5d5734df1c3685cf.287b4cc83f39f38e.9ccbf8f8dd027e87 - 2fd278c12538060d.6b161074e2252397.35664ac8fd89e0e0.beb74679cdbc6f8d - f0fc4fdb2e626722 --VCMPPS_128_0x4(mem) -+VADDSUBPD_256(mem) - before - 0f678e091e012271.72b422dadaccc26d.b854a41e67c6e5c3.7a0e1093e3f8f4fa - f7c57fefb6a45ba6.38864e206291bed9.20df6ccac7258780.53be9c948e13688b -@@ -35364,11 +35364,11 @@ VCMPPS_128_0x4(mem) - after - 0f678e091e012271.72b422dadaccc26d.b854a41e67c6e5c3.7a0e1093e3f8f4fa - f7c57fefb6a45ba6.38864e206291bed9.20df6ccac7258780.53be9c948e13688b -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ f7c57fefb6a45ba6.f2b422dadaccc26d.b854a41e67c6e5c3.fa0e1093e3f8f4fa - 9384689454283b75.b82522e358df6684.b2088ada8a505e5b.316af3eda17b67bd - edfdb61d41e069b6 - --VCMPPS_128_0x4(reg) -+VADDSUBPD_256(reg) - before - aec92f331620bdd5.fe7f572a91205867.2c8bc038ff80891a.933ed71525320bd2 - cf1a599cbbc89ec6.a29be928e74de5ef.9110d26ae982dc6d.fff048010b038989 -@@ -35376,12 +35376,12 @@ VCMPPS_128_0x4(reg) - a07ab018e77dfacc.056ae40d50733973.a1a63f16f3db01f4.e8f887a12aa0e669 - 1de54d2d9a843eea - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ cf1a599cbbc89ec6.dba6997b73b99c39.440053e6b1729b26.fff848010b038989 - cf1a599cbbc89ec6.a29be928e74de5ef.9110d26ae982dc6d.fff048010b038989 - ac3b30c5cd624934.5ba6997b73b99c39.440053e6b1729b26.d2ea5a8c59ce93ad - a07ab018e77dfacc.056ae40d50733973.a1a63f16f3db01f4.e8f887a12aa0e669 - 1de54d2d9a843eea --VCMPPS_128_0x4(mem) -+VADDSUBPD_256(mem) - before - 4d7f281ac686565c.0921d603a6a2ed39.7cb444cc9b847ac6.045092684c494b81 - 54909255cab3ebea.417d9cf0a55f5d28.9c5037a370fa1961.c94849465749b579 -@@ -35391,11 +35391,11 @@ VCMPPS_128_0x4(mem) - after - 4d7f281ac686565c.0921d603a6a2ed39.7cb444cc9b847ac6.045092684c494b81 - 54909255cab3ebea.417d9cf0a55f5d28.9c5037a370fa1961.c94849465749b579 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 54909255cab3ebea.417d9cf0a55f5d28.7cb444cc9b847ac6.c94849465749b579 - 574a0766c8bb7b0c.9284fd85d4cfa73a.47adc34925436419.e955d05bf52cd85d - fc029869c02809a1 - --VCMPPS_128_0x4(reg) -+VADDSUBPD_256(reg) - before - e12db4b4ade54a00.0b8b0a14f9aeeef8.63c790043d9af8b6.8a0655f03d2e878f - f4241ea859f0d726.06738ec073fcceb1.73efb336562cb763.e6e1685f4fadf9fc -@@ -35403,12 +35403,12 @@ VCMPPS_128_0x4(reg) - 14a1d13c5c1dc37a.406c05c1acd7c538.c41c9e6409d76f03.584d0646d099b96a - 27768995771d80c2 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ f4241ea859f0d726.a3d00d5550b1d762.73efb336562cb763.e6e1685f4fadf9fc - f4241ea859f0d726.06738ec073fcceb1.73efb336562cb763.e6e1685f4fadf9fc - 9131d4b15fd4ebc1.23d00d5550b1d762.20476487bb1220ee.360a7a8277cd768c - 14a1d13c5c1dc37a.406c05c1acd7c538.c41c9e6409d76f03.584d0646d099b96a - 27768995771d80c2 --VCMPPS_128_0x4(mem) -+VADDSUBPD_256(mem) - before - 7f517d5d876685c1.d9c012b3eb579b00.3814f1efa47d535e.bdba5d37db07df4d - 3ba960881c7f8493.3cda9183a80faefd.e7944dcb53ac3d01.656d9e6dce2fad78 -@@ -35418,11 +35418,11 @@ VCMPPS_128_0x4(mem) - after - 7f517d5d876685c1.d9c012b3eb579b00.3814f1efa47d535e.bdba5d37db07df4d - 3ba960881c7f8493.3cda9183a80faefd.e7944dcb53ac3d01.656d9e6dce2fad78 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 7f517d5d876685c1.59c012b3eb579b00.e7944dcb53ac3d01.656d9e6dce2fad78 - 5403e0bc4852645e.4b2e3ee01f27780d.d94c463e48da196d.364192b485945225 - 16fb3e9b81eaa1fd - --VCMPPS_256_0x4(reg) -+VCVTSS2SI_64(reg) - before - 16f95c960e673e67.679d759c1624bcb0.b0016344109fa679.d51bdbacc6f0828d - 9288e610c797650f.50e5e990d9f7fe84.23feb8b09fc4010c.f7f3d0796bc138db -@@ -35430,12 +35430,12 @@ VCMPPS_256_0x4(reg) - 6e8933312f423fc7.10ae5b64b1cd3464.a2a9de550946285a.21e9cadc9cc17aab - e1a0c84b60097d86 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 16f95c960e673e67.679d759c1624bcb0.b0016344109fa679.d51bdbacc6f0828d - 9288e610c797650f.50e5e990d9f7fe84.23feb8b09fc4010c.f7f3d0796bc138db - e6f4da75490751a0.e9a7b784aed6e806.007237926922c373.1d9ea18f5458f681 - 6e8933312f423fc7.10ae5b64b1cd3464.a2a9de550946285a.21e9cadc9cc17aab -- e1a0c84b60097d86 --VCMPPS_256_0x4(mem) -+ 8000000000000000 -+VCVTSS2SI_64(mem) - before - 378f16c7bb3bbe3e.8793edb015d46b2f.9fc8511dfce89ec8.67efa8661cbb6e6c - 0181303ec964f7fe.8b5d055f984a1185.74bf1699ae34e45e.a98f922f3e0ecf56 -@@ -35445,11 +35445,11 @@ VCMPPS_256_0x4(mem) - after - 378f16c7bb3bbe3e.8793edb015d46b2f.9fc8511dfce89ec8.67efa8661cbb6e6c - 0181303ec964f7fe.8b5d055f984a1185.74bf1699ae34e45e.a98f922f3e0ecf56 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 1944929ba78ee5f3.d73575a8542f6c75.696024c5e0bcc053.c6d7961d09ca88c3 - 5ca2b9cb71c84448.c7653bf8e410b9aa.5b77f98eb18cefd3.1811b29d1c7bd460 -- fd8ae11910aef1d8 -+ 0000000000000000 - --VCMPPS_256_0x4(reg) -+VCVTSS2SI_64(reg) - before - cf8e1fff83ee19d8.a76820b8411bcf2a.b73a52bce47733d1.27cf10df3ab12c09 - ec6969b911c7880c.d462434f369544c5.0300b75ff1f21895.a736e6a39a363522 -@@ -35457,12 +35457,12 @@ VCMPPS_256_0x4(reg) - 72d30d5eec762fbe.4722ad2cf92cd6d4.1e8e57f1a0530ea7.375cbb39489295ab - feb5b3e2d0806674 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ cf8e1fff83ee19d8.a76820b8411bcf2a.b73a52bce47733d1.27cf10df3ab12c09 - ec6969b911c7880c.d462434f369544c5.0300b75ff1f21895.a736e6a39a363522 - ae66b9b555c67c1f.c05c9e7d6a415d44.0603644ca70da2a3.b876f5c8ea28c449 - 72d30d5eec762fbe.4722ad2cf92cd6d4.1e8e57f1a0530ea7.375cbb39489295ab -- feb5b3e2d0806674 --VCMPPS_256_0x4(mem) -+ 0000000000000000 -+VCVTSS2SI_64(mem) - before - ea4a59af9dfff1cf.95fa60207163de95.467fed4a00606ca1.a6ee8bb97b50974c - d7ea2a8dcb19f3e9.7128ae67801ac44f.9740d9c19aecdbd6.fa70fc10d1907a3e -@@ -35472,11 +35472,11 @@ VCMPPS_256_0x4(mem) - after - ea4a59af9dfff1cf.95fa60207163de95.467fed4a00606ca1.a6ee8bb97b50974c - d7ea2a8dcb19f3e9.7128ae67801ac44f.9740d9c19aecdbd6.fa70fc10d1907a3e -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ a160a16677dd28ee.63a9f49fb6261f98.1732ed7fe4d9df9f.765ea66241a0f32b - 24773a27bd544b09.c8c92d35af13291e.a21fa56ff9353429.7505861c640b3ebd -- 55b197a8d95e96a0 -+ 8000000000000000 - --VCMPPS_256_0x4(reg) -+VCVTSS2SI_64(reg) - before - 71add57339243981.3dfd71bdb88c1966.fad45493066e1f8a.14d37e7df60b95a0 - 24473cea22e9600c.c6bcc21384904e32.5616682757c23c8b.491cf295f668bf30 -@@ -35484,12 +35484,12 @@ VCMPPS_256_0x4(reg) - c4807688fea131ce.9b18a3ae012edcc6.fc6d409d5986def6.6c99a09371e45d48 - 1265d252231c4929 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 71add57339243981.3dfd71bdb88c1966.fad45493066e1f8a.14d37e7df60b95a0 - 24473cea22e9600c.c6bcc21384904e32.5616682757c23c8b.491cf295f668bf30 - ccc9c978303a4aec.9c81aa143e6da599.38da625b3f9bbdcb.1dc57fa316576e04 - c4807688fea131ce.9b18a3ae012edcc6.fc6d409d5986def6.6c99a09371e45d48 -- 1265d252231c4929 --VCMPPS_256_0x4(mem) -+ 8000000000000000 -+VCVTSS2SI_64(mem) - before - ebf58fca490aeed3.67b8418829ad525e.9e4c2bcceadface6.fe1bfc57420edbba - d31555e9ffba0772.13bd25e34ce7e947.83ebbe5a148dd425.9a3094f795bfefc0 -@@ -35499,11 +35499,11 @@ VCMPPS_256_0x4(mem) - after - ebf58fca490aeed3.67b8418829ad525e.9e4c2bcceadface6.fe1bfc57420edbba - d31555e9ffba0772.13bd25e34ce7e947.83ebbe5a148dd425.9a3094f795bfefc0 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ a6919f9960395131.22db1f0503dd3136.25bfd6449c430fae.2cf804e8ef2657b7 - 4035eac88892883c.f25d295aeb1a67d6.6095f1769d0d18ae.10bf4696ebce4f49 -- a2d0586d26441222 -+ 0000000000000024 - --VPCMPGTB_128(reg) -+VCVTSS2SI_32(reg) - before - 3e7835da3b12deef.7cccb06194d168c0.dd91414e9f2bc7d4.103989dc34f8ab50 - 4004d947c7c7ed5c.38246f509f03ade9.41c1624dbc9b8ddb.11771d637c0f86c1 -@@ -35511,12 +35511,12 @@ VPCMPGTB_128(reg) - e6f267d5b10fc6c5.9d42c5e0246d53d8.df48b01d9fc939b7.75f1218091f2ffbf - 91c48bef95d616a4 - after -- 0000000000000000.0000000000000000.0000ffff000000ff.00ff00ffff000000 -+ 3e7835da3b12deef.7cccb06194d168c0.dd91414e9f2bc7d4.103989dc34f8ab50 - 4004d947c7c7ed5c.38246f509f03ade9.41c1624dbc9b8ddb.11771d637c0f86c1 - 04be402165ec7b15.4f07a281c63312e2.783a88c4def6f498.3e1b26f5925e632d - e6f267d5b10fc6c5.9d42c5e0246d53d8.df48b01d9fc939b7.75f1218091f2ffbf -- 91c48bef95d616a4 --VPCMPGTB_128(mem) -+ 0000000080000000 -+VCVTSS2SI_32(mem) - before - 6e61df2dbb166307.41ee49cd48bb0818.fda15459d6be2ef7.d337d5c69e9f98e3 - e79499281fbfa315.73fde277c67d7ebb.4defccd8f7315d6a.ae52f22974044cc9 -@@ -35526,11 +35526,11 @@ VPCMPGTB_128(mem) - after - 6e61df2dbb166307.41ee49cd48bb0818.fda15459d6be2ef7.d337d5c69e9f98e3 - e79499281fbfa315.73fde277c67d7ebb.4defccd8f7315d6a.ae52f22974044cc9 -- 0000000000000000.0000000000000000.ffff0000ffffffff.00ffffffffffff00 -+ da2936cbdcdc92f9.d76a2e3ec6df635a.68faa74aa4d29d5e.cde706b4c0859314 - 21ec30020e79ece0.c982298ee470f4a0.298c6399f8aeaafe.8c400ad21bada771 -- 47aafbef2308c48c -+ 0000000000000000 - --VPCMPGTB_128(reg) -+VCVTSS2SI_32(reg) - before - 5b71d67774232710.9aa905b9d2a36cf6.a491d0d3bdb96d3a.6e727cb310d03f77 - 22e196d6a9890daa.1f2b30dc4365cf66.c6e31e79ec480ad4.11796c82074419f4 -@@ -35538,12 +35538,12 @@ VPCMPGTB_128(reg) - 3cebb6c931674ccf.c1b279179ee22d07.4b7f9f98be669fb6.e514c6f404548cad - ce42276e41089c40 - after -- 0000000000000000.0000000000000000.ffffffff00ffff00.ffffff00ffffffff -+ 5b71d67774232710.9aa905b9d2a36cf6.a491d0d3bdb96d3a.6e727cb310d03f77 - 22e196d6a9890daa.1f2b30dc4365cf66.c6e31e79ec480ad4.11796c82074419f4 - f94637785fc7af06.8e402d587eccd15d.8ac40fec0ea80619.f06ab1f4fa17f4a2 - 3cebb6c931674ccf.c1b279179ee22d07.4b7f9f98be669fb6.e514c6f404548cad -- ce42276e41089c40 --VPCMPGTB_128(mem) -+ 0000000000000000 -+VCVTSS2SI_32(mem) - before - 85bf504ece3ee188.471d0e36bbf71eb1.964e8f07c0b6a08f.6762cbe9990d0e56 - e758be80c70217b1.76293a299a036259.e7e0eb12ff51e622.38b78e4c3a2992a6 -@@ -35553,11 +35553,11 @@ VPCMPGTB_128(mem) - after - 85bf504ece3ee188.471d0e36bbf71eb1.964e8f07c0b6a08f.6762cbe9990d0e56 - e758be80c70217b1.76293a299a036259.e7e0eb12ff51e622.38b78e4c3a2992a6 -- 0000000000000000.0000000000000000.ff00ffffffffffff.000000ffffff0000 -+ d1daebf04760f9e6.255938106a165473.9133092678c1bbeb.1ccbe42b3e476551 - 1d0f558b6a654553.b0fa0456c6bc2faa.7115652e4611da17.6deac9f440f2c404 -- 89603912ddb6eb6b -+ 0000000000000000 - --VPCMPGTB_128(reg) -+VCVTSS2SI_32(reg) - before - ca7931f1b0201531.a8c3783b4d1cb426.735798664a8130ab.61507c15864e00d1 - 8d80acfc56bb8003.4ec4ceee0b920588.cabef2ae93f29322.3eb1c9c95382e946 -@@ -35565,12 +35565,12 @@ VPCMPGTB_128(reg) - 0a8c1b4c88b4037a.5cd908098ae838b0.a3d6e593e2066e20.3015f5460605f310 - fcb0cce6236b8cbd - after -- 0000000000000000.0000000000000000.000000ff00ff00ff.ff00ff00ff0000ff -+ ca7931f1b0201531.a8c3783b4d1cb426.735798664a8130ab.61507c15864e00d1 - 8d80acfc56bb8003.4ec4ceee0b920588.cabef2ae93f29322.3eb1c9c95382e946 - 2fc3a6a16a13668d.ecddd58ec1d2f2a8.10790d993c9a93ba.e405c835c9bc50a2 - 0a8c1b4c88b4037a.5cd908098ae838b0.a3d6e593e2066e20.3015f5460605f310 -- fcb0cce6236b8cbd --VPCMPGTB_128(mem) -+ 0000000080000000 -+VCVTSS2SI_32(mem) - before - 25a1ca023ef9d7d4.7b2807674d2c9476.7b85e34a83e093cc.de1f770820c15eff - 87b36a8772bc9182.dee3675f5504552e.25ade23dc7c7bf2a.1da1bd6493579f04 -@@ -35580,11 +35580,11 @@ VPCMPGTB_128(mem) - after - 25a1ca023ef9d7d4.7b2807674d2c9476.7b85e34a83e093cc.de1f770820c15eff - 87b36a8772bc9182.dee3675f5504552e.25ade23dc7c7bf2a.1da1bd6493579f04 -- 0000000000000000.0000000000000000.00ff0000ff00ffff.ff0000ff00ff00ff -+ feb4285fdcbf77f3.900836a03bca824e.361d81ce73a877f3.bba7b514d6546fdb - 666e8078980e4252.ebe570979b095782.8aa13de9a2907856.167f5a828645082f -- 8973a81c3eb5a7ad -+ 0000000000000000 - --VPCMPGTW_128(reg) -+VCVTSD2SI_32(reg) - before - 6fd19c4c9a318700.9baeefbcc1b6b1cc.4cc412ae124d0f75.fd04917a718a7d7d - 26e331803744e5d5.7940f01973c27e8c.0ff316533b23e7d3.6b14f96dfba24494 -@@ -35592,12 +35592,12 @@ VPCMPGTW_128(reg) - 73562ea1a3600bb3.a08998cbe4362591.2b6c39f415b2e683.a866f62ab15e0345 - 2f4183cb16197337 - after -- 0000000000000000.0000000000000000.ffff0000ffff0000.ffffffff0000ffff -+ 6fd19c4c9a318700.9baeefbcc1b6b1cc.4cc412ae124d0f75.fd04917a718a7d7d - 26e331803744e5d5.7940f01973c27e8c.0ff316533b23e7d3.6b14f96dfba24494 - 09f66223b17afdd7.dcefff7acb3e66bf.90bc7af1b3161a4a.b09bf2ae5ce587c9 - 73562ea1a3600bb3.a08998cbe4362591.2b6c39f415b2e683.a866f62ab15e0345 -- 2f4183cb16197337 --VPCMPGTW_128(mem) -+ 0000000080000000 -+VCVTSD2SI_32(mem) - before - 21f8147fa62394c9.c24f8e66a9814b15.a1d837f8dbb7762d.3c4e4fc8fe84852d - 5a5625317d872227.502c80de6069f8a8.bba959edcbcd16c0.1fb0b9d9091734f2 -@@ -35607,11 +35607,11 @@ VPCMPGTW_128(mem) - after - 21f8147fa62394c9.c24f8e66a9814b15.a1d837f8dbb7762d.3c4e4fc8fe84852d - 5a5625317d872227.502c80de6069f8a8.bba959edcbcd16c0.1fb0b9d9091734f2 -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ b52933cdb851d97e.7a3afe7564a54f19.c9c87997d182c175.30dc7293d3f82e7e - 103bb93e738e74fa.9dc6069750bf8b14.a90113e008e43279.cb207562f7b1b07e -- 4cc6c1b212d0f69e -+ 0000000000000000 - --VPCMPGTW_128(reg) -+VCVTSD2SI_32(reg) - before - 0f1b4ff0bfe13c8a.46593272c849b1c6.131a94b1c046e944.3620a3b58cff27f8 - 6f6b1c869a6fbded.334f1d55d68e490f.3a83a22d51c3a555.4cf1a6037add5a1d -@@ -35619,12 +35619,12 @@ VPCMPGTW_128(reg) - 7b2b656e4d3263c9.a1f332d387e881c7.06c333ff44d527cd.82d7f1b603186c0b - 5b8533f4d58cc32c - after -- 0000000000000000.0000000000000000.00000000ffff0000.ffffffffffffffff -+ 0f1b4ff0bfe13c8a.46593272c849b1c6.131a94b1c046e944.3620a3b58cff27f8 - 6f6b1c869a6fbded.334f1d55d68e490f.3a83a22d51c3a555.4cf1a6037add5a1d - ca0125e24006b773.b2e9f3d1b66afb01.6c4c2e799ec4fbf5.c63f97b5ee8c8714 - 7b2b656e4d3263c9.a1f332d387e881c7.06c333ff44d527cd.82d7f1b603186c0b -- 5b8533f4d58cc32c --VPCMPGTW_128(mem) -+ 0000000080000000 -+VCVTSD2SI_32(mem) - before - 2c15d65a81f449a3.de33d8985c80009b.db3854476214988e.6432ad2dde80648c - d35358d4235cb99d.4e667bcb097cc894.3b86d71a66fbfc81.e3e7986e0953efdc -@@ -35634,11 +35634,11 @@ VPCMPGTW_128(mem) - after - 2c15d65a81f449a3.de33d8985c80009b.db3854476214988e.6432ad2dde80648c - d35358d4235cb99d.4e667bcb097cc894.3b86d71a66fbfc81.e3e7986e0953efdc -- 0000000000000000.0000000000000000.ffff0000ffffffff.00000000ffff0000 -+ 2a0b344ed6d1d146.29114973f1b0f861.9fa73736aca868cd.dd2cf12e60da036a - 0f08e6b4b65e4bc9.ca7d3dfcafaaccae.e168ee895228999d.af4eb2d980a0dee1 -- b599d9db0431baee -+ 0000000080000000 - --VPCMPGTW_128(reg) -+VCVTSD2SI_32(reg) - before - 4b5862a08819d43c.5c18eaf3e00fe353.8cf956d2e0f57f26.df957afe74854b1f - cdd94794a9e56778.ef05bcf56ff15710.cdd08d611f1e4e76.73fa56812dcd3a7c -@@ -35646,12 +35646,12 @@ VPCMPGTW_128(reg) - 054c19ba3156eb69.53a9bcf62e76bed0.38bd495b3937304c.d19bee61d54dbd7d - 526fa396fd9cca79 - after -- 0000000000000000.0000000000000000.00000000ffff0000.0000ffffffffffff -+ 4b5862a08819d43c.5c18eaf3e00fe353.8cf956d2e0f57f26.df957afe74854b1f - cdd94794a9e56778.ef05bcf56ff15710.cdd08d611f1e4e76.73fa56812dcd3a7c - 976686240320b04e.a29cd9a8800f612b.e74ddf1609b07549.7b62fefe990c21e2 - 054c19ba3156eb69.53a9bcf62e76bed0.38bd495b3937304c.d19bee61d54dbd7d -- 526fa396fd9cca79 --VPCMPGTW_128(mem) -+ 0000000080000000 -+VCVTSD2SI_32(mem) - before - dbab97892c050301.73d7ffc4cf145476.dcf7e1cd9631292d.1a6dc69e4c40ba2a - 461b48267e952642.3d5331ac7ae52620.1a54c518d34c606b.eba75249dd555090 -@@ -35661,11 +35661,11 @@ VPCMPGTW_128(mem) - after - dbab97892c050301.73d7ffc4cf145476.dcf7e1cd9631292d.1a6dc69e4c40ba2a - 461b48267e952642.3d5331ac7ae52620.1a54c518d34c606b.eba75249dd555090 -- 0000000000000000.0000000000000000.ffff0000ffffffff.0000ffff0000ffff -+ 708b315a1057ec67.bf0cace0cd569e14.ea8ae2c201d31db9.05b7eaca89052e2a - 36c7cf0ffd58149d.554e6dcb65f1f8fd.2667b6b93ed31c41.c6eb888cebd98fa3 -- 888d2afba05fb0a8 -+ 0000000000000000 - --VPMADDWD_128(reg) -+VCVTSD2SI_64(reg) - before - a8ebcb834323cde5.729a9d3362a3580f.5b646fd9de457089.abb5bce8a3571b2f - 834f689070af2205.01d116b05b4475ea.2d9bae76d2db4161.5541703c4e6cd4b1 -@@ -35673,12 +35673,12 @@ VPMADDWD_128(reg) - d55c82e9db55629f.889cff6a75b92a8a.a49cd40da102e1ac.8842d3fee576671b - ca4f7a460883b85c - after -- 0000000000000000.0000000000000000.fa5fbf99ef2d194f.232f7d9a1b1344dd -+ a8ebcb834323cde5.729a9d3362a3580f.5b646fd9de457089.abb5bce8a3571b2f - 834f689070af2205.01d116b05b4475ea.2d9bae76d2db4161.5541703c4e6cd4b1 - 7306fb8ec491eab4.bf39b8740247275a.263f270ee041a834.00d64f9f5b1d04f1 - d55c82e9db55629f.889cff6a75b92a8a.a49cd40da102e1ac.8842d3fee576671b -- ca4f7a460883b85c --VPMADDWD_128(mem) -+ 8000000000000000 -+VCVTSD2SI_64(mem) - before - a0cbbf61e151b4e0.059df80e5085c672.38c7657ed0a639a7.02feb3e0b3ab2775 - e7801f3d8bec17d2.60145967bfb051d9.ab85689c2e1811dc.9bb1bff1b2c7b73c -@@ -35688,11 +35688,11 @@ VPMADDWD_128(mem) - after - a0cbbf61e151b4e0.059df80e5085c672.38c7657ed0a639a7.02feb3e0b3ab2775 - e7801f3d8bec17d2.60145967bfb051d9.ab85689c2e1811dc.9bb1bff1b2c7b73c -- 0000000000000000.0000000000000000.16bc752bfb7f0614.11e0517e0bcf7259 -+ 7b3b14c4235e9c5f.400fa162c55f417f.bda483b0ac1d6d56.cd00f4ae39e2cdad - 38c81ce4c5b501b2.02d8cd69fd20d010.4aee32a765c00b41.f3394f81e588a473 -- 68a6cbd851467a3b -+ 0000000000000000 - --VPMADDWD_128(reg) -+VCVTSD2SI_64(reg) - before - 8a94641e19a789b1.faf2b2888bfcfff8.02bcd8ea047e3a3a.2e30f26b760ea5c8 - b34f16bfda380d80.9c87529c9440555c.9c07be507505bda6.45373de9fa12f818 -@@ -35700,12 +35700,12 @@ VPMADDWD_128(reg) - 8e5bb6c2b61768db.f51da1c4d9ecf531.0e010b7b07c0f8fb.7cbe69c5cc6db7c1 - 54d841f952dc9c72 - after -- 0000000000000000.0000000000000000.cf3de45313ae573c.0250809201acf9d0 -+ 8a94641e19a789b1.faf2b2888bfcfff8.02bcd8ea047e3a3a.2e30f26b760ea5c8 - b34f16bfda380d80.9c87529c9440555c.9c07be507505bda6.45373de9fa12f818 - 4122dd2730844454.fc51790cf98cbe0c.2c057b07ed429303.6bcc910e0dd8bf5c - 8e5bb6c2b61768db.f51da1c4d9ecf531.0e010b7b07c0f8fb.7cbe69c5cc6db7c1 -- 54d841f952dc9c72 --VPMADDWD_128(mem) -+ 8000000000000000 -+VCVTSD2SI_64(mem) - before - cfe59698bc312a9d.f8449bfc087eb6bf.63b748b14d6db6fa.9e496b18600b2a3a - c8b3e28d26791c6b.d92a8a41c34469ac.22ebe9bd731abf91.3827964a93b0636d -@@ -35715,11 +35715,11 @@ VPMADDWD_128(mem) - after - cfe59698bc312a9d.f8449bfc087eb6bf.63b748b14d6db6fa.9e496b18600b2a3a - c8b3e28d26791c6b.d92a8a41c34469ac.22ebe9bd731abf91.3827964a93b0636d -- 0000000000000000.0000000000000000.07479aaa3530fdac.be581a0fe7c3c142 -+ 1d0ca3c4abbf300b.8f5a7ffd82f5bf4f.0e8501d567ffca22.38e8887e3c3ae040 - a9bd5429670f1fa7.741d749de21ef254.02510ae6442994da.f9d83e1ef936dd5f -- d943b297632f9574 -+ 0000000000000000 - --VPMADDWD_128(reg) -+VCVTSD2SI_64(reg) - before - 3375e25618b1452e.479272a87776a86b.e5c2678b7f4a3e66.dc1a82db27a3d9e5 - 63b9c9c6b4482937.d556772ef6ff8584.3e945335f305e132.77ade49f2b7a546e -@@ -35727,12 +35727,12 @@ VPMADDWD_128(reg) - b4abad680ee77ce8.2ddf2bfab3a82e64.19ee066ad65a17a6.5f615649076bdfad - 641a5f06179f67ba - after -- 0000000000000000.0000000000000000.08522b96ff2859a2.e307087efe39814c -+ 3375e25618b1452e.479272a87776a86b.e5c2678b7f4a3e66.dc1a82db27a3d9e5 - 63b9c9c6b4482937.d556772ef6ff8584.3e945335f305e132.77ade49f2b7a546e - c55d6353d2817d3c.2ed7e1a501b6731e.dcde3406dddc1563.aed6ac206cb8c2a2 - b4abad680ee77ce8.2ddf2bfab3a82e64.19ee066ad65a17a6.5f615649076bdfad -- 641a5f06179f67ba --VPMADDWD_128(mem) -+ 8000000000000000 -+VCVTSD2SI_64(mem) - before - 9bcd4243b95e15f6.8ef0a173050763e8.b03bd11a28e07183.520ec6cc7c0b23a7 - de457bed09b7a68c.ae783ddf526c6ee8.91b850f07d6bf9a7.e38b6e9a6b7c7411 -@@ -35742,11 +35742,11 @@ VPMADDWD_128(mem) - after - 9bcd4243b95e15f6.8ef0a173050763e8.b03bd11a28e07183.520ec6cc7c0b23a7 - de457bed09b7a68c.ae783ddf526c6ee8.91b850f07d6bf9a7.e38b6e9a6b7c7411 -- 0000000000000000.0000000000000000.13893dc81135ed15.de2a3652443eb86b -+ 0b5086ee21b3d6a9.6f8e7c1992a2d893.ae1f2367ce5382fb.28b0fc403e384791 - fcb8e03320606078.2f805a8b6036de95.e13fc56d36a7c8ab.7dcb6c2892cbd8d2 -- 3f27b8bf02c26281 -+ 8000000000000000 - --VADDSUBPS_128(reg) -+VDPPS_128_1of4(reg) - before - c80fde712aa8234a.8f4a03a91fc90126.4898d4a259b3bc9c.08e3b5edd27086e5 - 75d0d9aba70a54d8.9ed26d3a3dfa75df.1824e5cb18a5ae52.fdd66cd3bdbc79d3 -@@ -35754,12 +35754,12 @@ VADDSUBPS_128(reg) - aa0d3e630e6ffdf5.a4f3046240e6c520.49c3bcff5a19bc7c.c5dd2382f10aed7c - 4f881b227225e790 - after -- 0000000000000000.0000000000000000.f96e8970ba98ef63.fdd66cd3bdbc79d3 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 75d0d9aba70a54d8.9ed26d3a3dfa75df.1824e5cb18a5ae52.fdd66cd3bdbc79d3 - a1b6a5d8157234d8.061b9ad4930078ce.f96e89703a98ef63.9de6670b13965da1 - aa0d3e630e6ffdf5.a4f3046240e6c520.49c3bcff5a19bc7c.c5dd2382f10aed7c - 4f881b227225e790 --VADDSUBPS_128(mem) -+VDPPS_128_1of4(mem) - before - 18b2cbd8b3f30408.eb21a1ba318aeddc.522428d05db91901.626f7ae215b45149 - fd29b091d07e0311.c03dc84818513d39.ed7c830a0884309c.a2bdc08706f3e975 -@@ -35769,11 +35769,11 @@ VADDSUBPS_128(mem) - after - 18b2cbd8b3f30408.eb21a1ba318aeddc.522428d05db91901.626f7ae215b45149 - fd29b091d07e0311.c03dc84818513d39.ed7c830a0884309c.a2bdc08706f3e975 -- 0000000000000000.0000000000000000.ed7c830addb91901.626f7ae295b45149 -+ d8b84437e3d49ed6.85afb1795f4f2cb7.52c590fc5d53c51d.63fb8959ca64c1ad - 862a05b80b009284.96c157b9a311f403.5bcccc92773296b1.0273d1c4fc93159c - db729434380a21f0 - --VADDSUBPS_128(reg) -+VDPPS_128_1of4(reg) - before - 4b44cf151b572052.e34c6eff610f9b47.4fc0b7747f21d2c8.e55cb1b8722e5d84 - ac357cd441064f70.cbeafcf8040c754a.0bf8cb16900e02b3.cc43bd5a6b53d6c2 -@@ -35781,12 +35781,12 @@ VADDSUBPS_128(reg) - b4a32298c3b62c90.acca73b09a008ac2.014304c0bfa846aa.214237c3c644d22c - 47f29d625f29cbb1 - after -- 0000000000000000.0000000000000000.28b5910bf161bf70.ec4b6b65feabbe96 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ac357cd441064f70.cbeafcf8040c754a.0bf8cb16900e02b3.cc43bd5a6b53d6c2 - 5b9199db44a1eaf6.1ad0298f0d03dbba.28b5910b7161bf70.ec4b6b657eabbe96 - b4a32298c3b62c90.acca73b09a008ac2.014304c0bfa846aa.214237c3c644d22c - 47f29d625f29cbb1 --VADDSUBPS_128(mem) -+VDPPS_128_1of4(mem) - before - 3a281a2d66676851.13b9117558d152e9.5da35547c7103d8f.f1ed219f156ed30d - d6b0280ff6096338.d51d63e09f7d98ad.09294b40af3fb24d.5600e2160f40a247 -@@ -35796,11 +35796,11 @@ VADDSUBPS_128(mem) - after - 3a281a2d66676851.13b9117558d152e9.5da35547c7103d8f.f1ed219f156ed30d - d6b0280ff6096338.d51d63e09f7d98ad.09294b40af3fb24d.5600e2160f40a247 -- 0000000000000000.0000000000000000.5da3554747103d8f.f1ed219f956ec703 -+ f75545f62c1b7991.541c154335463a89.8c26d1886f97a327.8bc945904aa9ee02 - 79e5edcd23aa6688.ed02220cb5b87329.c26764092226cd4a.eb9245796235f4ea - d4a7de3cf270f0ac - --VADDSUBPS_128(reg) -+VDPPS_128_1of4(reg) - before - a0560c4796e71df4.382a9a80f8c1e54a.fc1b87a6bc608039.87b87fb1e4f7ebe1 - adeacc05eb26b86d.10f1cafbc66cb303.ddb23e7de5c99d64.b7e59e6ad217ba19 -@@ -35808,12 +35808,12 @@ VADDSUBPS_128(reg) - f5efef4b172828a5.7a35a0fabfb02b08.858e97930f0ff6bc.c802d9c4a1715b1b - 608aec3cb9c4a43d - after -- 0000000000000000.0000000000000000.ec1545fde5c99d64.b7e59e3cd217ba19 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - adeacc05eb26b86d.10f1cafbc66cb303.ddb23e7de5c99d64.b7e59e6ad217ba19 - 55ae19e38db7fdc4.dd06f82baab88cde.ec1545fdcd7f0656.2eb93d220891f61e - f5efef4b172828a5.7a35a0fabfb02b08.858e97930f0ff6bc.c802d9c4a1715b1b - 608aec3cb9c4a43d --VADDSUBPS_128(mem) -+VDPPS_128_1of4(mem) - before - d41ef4766d958faf.eaf94aaa250574bb.c54a3e5622604ead.036a30a94704aa42 - ff8a6c5ed8f0d59e.8e18266d54d81eb2.99114f29eed5aff8.c4f50cac12eb5e94 -@@ -35823,11 +35823,11 @@ VADDSUBPS_128(mem) - after - d41ef4766d958faf.eaf94aaa250574bb.c54a3e5622604ead.036a30a94704aa42 - ff8a6c5ed8f0d59e.8e18266d54d81eb2.99114f29eed5aff8.c4f50cac12eb5e94 -- 0000000000000000.0000000000000000.c54a3e56eed5aff8.c4f50cacc704aa42 -+ bc9ad1e017e23535.3e9880fe3f2f6238.d2554d613f1a0a16.237b28090c4f4d5c - e91a9de8457669a1.57c553cb83967bf6.4be3b6e9323b1d32.7c487e2ad0bcb449 - 2ba70c7dfbbecf05 - --VADDSUBPS_256(reg) -+VDPPS_128_2of4(reg) - before - 8be6ce6d27e2d93d.61d54e637fb92e0e.33ea9b3fbb97a69b.e28705ace345a279 - fa4fbe66f3b3109c.ff995f3be0b540a7.2f5454c584c01fd1.710db7986d435617 -@@ -35835,12 +35835,12 @@ VADDSUBPS_256(reg) - 71d21d23d58eef82.216792b6890e3910.f8270bbc36b8eaa2.ebef30987d4c3a05 - 8ee2f0853b6fe2af - after -- fa4fbe6679bea39e.ffd95f3be0b540a7.2f5453f6f99d2244.710db7986d73d325 -+ 0000000000000000.0000000000000000.ff80000000000000.ff80000000000000 - fa4fbe66f3b3109c.ff995f3be0b540a7.2f5454c584c01fd1.710db7986d435617 - d32fdad4f9beaecf.a1304c5e85785a99.a74f7bcb799d2244.d6414698ec41f437 - 71d21d23d58eef82.216792b6890e3910.f8270bbc36b8eaa2.ebef30987d4c3a05 - 8ee2f0853b6fe2af --VADDSUBPS_256(mem) -+VDPPS_128_2of4(mem) - before - 99e8034943b7a85e.328483bf24af1160.5d0aab3108829937.7c280004599fb494 - eacbe3d1b02e4a41.7190081481ae4e15.2fe515ba1fe0363b.909e56107bdebcc9 -@@ -35850,11 +35850,11 @@ VADDSUBPS_256(mem) - after - 99e8034943b7a85e.328483bf24af1160.5d0aab3108829937.7c280004599fb494 - eacbe3d1b02e4a41.7190081481ae4e15.2fe515ba1fe0363b.909e56107bdebcc9 -- eacbe3d1c3b7a85e.71900814a4af1160.5d0aab311fe0363b.7c2800047bdebcc9 -+ 5b580e0a9fe38282.8944a98e8915e34f.75c34b3dea34cb47.90d4094a3a003eeb - ca5bffde2bdf0d4e.d8ea609ad7730bb8.0972caa6848b1588.d818161f329175a6 - c4b478fcfe1d9ea8 - --VADDSUBPS_256(reg) -+VDPPS_128_2of4(reg) - before - b0f52b4b3a31f49a.119f323b7130a6d0.b8cf2ba2085104fc.c8bc0ce109f0d029 - f8272b7a8358b52b.0df2230c8ce10b35.873f0614b73d08c8.8f6e8fda9670b757 -@@ -35862,12 +35862,12 @@ VADDSUBPS_256(reg) - 0c8d0325aa1063d4.95f131bab3942356.5df0d8e3016d23a7.a03a45b736eefc09 - a4ec71728204d2e5 - after -- f8ea0bb1f41e1b05.9b1e4f3d19fff6a8.9f86eb5bb73d08c8.3854ce7dc715883e -+ 0000000000000000.0000000000000000.9e0c9ad100000000.9e0c9ad100000000 - f8272b7a8358b52b.0df2230c8ce10b35.873f0614b73d08c8.8f6e8fda9670b757 - f89675f4741e1b05.9b1e4f3d99fff6a8.9f86eb5b81c353c8.3854ce7d4715883e - 0c8d0325aa1063d4.95f131bab3942356.5df0d8e3016d23a7.a03a45b736eefc09 - a4ec71728204d2e5 --VADDSUBPS_256(mem) -+VDPPS_128_2of4(mem) - before - 1e35cc9c4565c4fd.8f5ad379c0b9c846.d835456ff7af506b.1ec8c717d3c9b212 - ebe2d4209b1c8f7e.df47e15c53a68704.40b7074880593712.3c5bb76595633db4 -@@ -35877,11 +35877,11 @@ VADDSUBPS_256(mem) - after - 1e35cc9c4565c4fd.8f5ad379c0b9c846.d835456ff7af506b.1ec8c717d3c9b212 - ebe2d4209b1c8f7e.df47e15c53a68704.40b7074880593712.3c5bb76595633db4 -- ebe2d420c565c4fd.df47e15c53a68704.d835456f77af506b.3c5bb76553c9b212 -+ e7c004e9a136ef94.57a1273afe62dcbd.a942f3316aa09578.14f6a139e0c5ff3a - ee99d9e572bea06a.53b4a37f5e79031b.f0a48616d28f26c8.03e382fd527d3650 - 636e571e86171ca1 - --VADDSUBPS_256(reg) -+VDPPS_128_2of4(reg) - before - 91e51b08191dedda.dc3acdff2ac05d2d.2ecc4f970e7737ca.efa73be4d333a52f - e993ca28a71de7a7.8d6e5e23e749e309.463429efabe9b677.83198e858a97cfd9 -@@ -35889,12 +35889,12 @@ VADDSUBPS_256(reg) - 87c2dab6213941aa.a8c3443ad91d39b9.9928550b1a577f7a.da75fff589d013a4 - 55f8159a08bca61d - after -- e993ca284ba344b3.dd03073ee749e309.f63a2df1505bb9ce.88c50f1993c76117 -+ 0000000000000000.0000000000000000.3cc898b900000000.3cc898b900000000 - e993ca28a71de7a7.8d6e5e23e749e309.463429efabe9b677.83198e858a97cfd9 - c7c361e8cba344b3.dd03073ec263ed28.f63a2df1d05bb9ce.88c4fbe713c760f1 - 87c2dab6213941aa.a8c3443ad91d39b9.9928550b1a577f7a.da75fff589d013a4 - 55f8159a08bca61d --VADDSUBPS_256(mem) -+VDPPS_128_2of4(mem) - before - d518b9c4ad9ad289.85dc33fd466d1a39.ca7b9104488081e6.8d4b9fa8246b4228 - 36a3675e93735614.1d5d6729d5cb0a0c.1ff86b892a9a82dc.2cef06338a223f84 -@@ -35904,11 +35904,11 @@ VADDSUBPS_256(mem) - after - d518b9c4ad9ad289.85dc33fd466d1a39.ca7b9104488081e6.8d4b9fa8246b4228 - 36a3675e93735614.1d5d6729d5cb0a0c.1ff86b892a9a82dc.2cef06338a223f84 -- d518b9c42d9ad289.1d5d6729d5cb0a0c.ca7b9104c88081e6.2cef0633a46b4228 -+ 53639b54d755ece9.ab9172a66bde4ecf.83044db39b77f7c6.d460861ae909b239 - 0a25d293944c5235.8bc451e0a332222d.d26bb370b8219dd1.dfea1bc8ddabd6f3 - abd8c2a90194e860 - --VADDSUBPD_128(reg) -+VDPPS_128_3of4(reg) - before - 92787629f151242a.36b58705e7624123.1941fe431a53c1d2.e8fb19aa9da63029 - f21433b54a6dc6fd.b3df3697eba578e0.b156773b6bce696b.a17efb4f65126cf9 -@@ -35916,12 +35916,12 @@ VADDSUBPD_128(reg) - 8873b89da5f32a71.0f3173cc77e0a976.6f73bb9b0c00be28.6b9125870fcbceb3 - 35b864f229326bf5 - after -- 0000000000000000.0000000000000000.b156773b6bdd4505.58c2d64a2c6f0c6e -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f21433b54a6dc6fd.b3df3697eba578e0.b156773b6bce696b.a17efb4f65126cf9 - 25f9f5b7a7740986.5d6f5b36bc21b198.af4db734322e54a4.d8c2d64a2c6f0c6e - 8873b89da5f32a71.0f3173cc77e0a976.6f73bb9b0c00be28.6b9125870fcbceb3 - 35b864f229326bf5 --VADDSUBPD_128(mem) -+VDPPS_128_3of4(mem) - before - 1203107797aea260.78ce79d1df756569.a7f0f94738f01ca6.4d147dda95cee5a4 - dd3da303744d2d1f.4f5533c1f286f51b.007969921a5dc556.a57bfb5f682703c4 -@@ -35931,11 +35931,11 @@ VADDSUBPD_128(mem) - after - 1203107797aea260.78ce79d1df756569.a7f0f94738f01ca6.4d147dda95cee5a4 - dd3da303744d2d1f.4f5533c1f286f51b.007969921a5dc556.a57bfb5f682703c4 -- 0000000000000000.0000000000000000.a7f0f94738f01ca6.cd147dda95cee5a4 -+ 74349b80dd1bc95e.6a56e2d779b31832.f5983f98393261b0.d2f6309421945533 - b1b273dced23324b.261b82811187085b.6419f747b27bace0.32cf18e75da3169e - 2053b0c3b8df83b0 - --VADDSUBPD_128(reg) -+VDPPS_128_3of4(reg) - before - f8cef294cdd5d816.7285a701c1712310.ddf1102a558e0142.28c80e8aa1446213 - 158cdcc63810517c.9177b4dd741159d9.ec24873ee2554092.1c71ff4d219a3e75 -@@ -35943,12 +35943,12 @@ VADDSUBPD_128(reg) - 920196fd82859ef5.5dea4566e879842a.82d120574450801f.08e05f04451a5b74 - b73ec6cf215d136a - after -- 0000000000000000.0000000000000000.ec24873ee2554092.9edf467d4e88b534 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 158cdcc63810517c.9177b4dd741159d9.ec24873ee2554092.1c71ff4d219a3e75 - d5d969c5961c298d.ec55145b221090d3.af00e329536702f8.1edf467d4e88fd31 - 920196fd82859ef5.5dea4566e879842a.82d120574450801f.08e05f04451a5b74 - b73ec6cf215d136a --VADDSUBPD_128(mem) -+VDPPS_128_3of4(mem) - before - 08c6f8cbff5ce23e.aa4f5ddb99d8e962.c204c2ece258f009.c1e23a35539df9b4 - d54470e2fa24841c.7710bcc976a1497e.f56d08d82bba919d.c8812e2d19d9a763 -@@ -35958,11 +35958,11 @@ VADDSUBPD_128(mem) - after - 08c6f8cbff5ce23e.aa4f5ddb99d8e962.c204c2ece258f009.c1e23a35539df9b4 - d54470e2fa24841c.7710bcc976a1497e.f56d08d82bba919d.c8812e2d19d9a763 -- 0000000000000000.0000000000000000.f56d08d82bba919d.c8812e2d19d9a763 -+ fc83aa022fc0b532.5790ae35b66af8f5.d4f39117dfaa2311.f3f8f7ad3491c7d7 - 57512316b93c30aa.a41b2f89f4c13374.3960db931b356193.9e94911f3f4f95bd - 25a1f8f1d7a14cc0 - --VADDSUBPD_128(reg) -+VDPPS_128_3of4(reg) - before - e46a298e9813298d.c378550ab5a4b2b0.bcfd3c33cd3136a7.01816139fb66094c - 373d1e611d3068d0.1cc6beca3e05f771.f982cf9edc473c39.08219ff59a49d46a -@@ -35970,12 +35970,12 @@ VADDSUBPD_128(reg) - 082d4a5ee49bfb66.0602225e68e0b9d3.56a47c670d92452c.441334618656ca85 - 30fb83e70b986cd9 - after -- 0000000000000000.0000000000000000.f982cf9edc473c39.ab0e12b414ea8119 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 373d1e611d3068d0.1cc6beca3e05f771.f982cf9edc473c39.08219ff59a49d46a - 7a64d5d802844434.3f05d942706aba19.b8f5e636bd8e83d7.2b0e12b414ea8119 - 082d4a5ee49bfb66.0602225e68e0b9d3.56a47c670d92452c.441334618656ca85 - 30fb83e70b986cd9 --VADDSUBPD_128(mem) -+VDPPS_128_3of4(mem) - before - cb937a34c0bd2341.3fe277605e02c711.4e88160a4272adcc.2dd98d9d68e0bee5 - f1a79533c0d0abeb.7ad05a480d44e4e2.f3652f32192c552f.9ae1164469032bae -@@ -35985,11 +35985,11 @@ VADDSUBPD_128(mem) - after - cb937a34c0bd2341.3fe277605e02c711.4e88160a4272adcc.2dd98d9d68e0bee5 - f1a79533c0d0abeb.7ad05a480d44e4e2.f3652f32192c552f.9ae1164469032bae -- 0000000000000000.0000000000000000.f3652f32192c552f.add98d9d68e0bee5 -+ 7e0351d028ddbf00.1542ed838cee9085.d163ebc3091a6b29.fa0812c8ac87c832 - 4e7329f713f11caf.6b862f7e778b05a5.c450c5a72f49ade6.a7997d96cef9d11e - fee253186be4821e - --VADDSUBPD_256(reg) -+VDPPS_128_4of4(reg) - before - 5b2d90bc1ed516dd.3dc299949d177d22.dae719a36ca780ee.a8f63acca6c5d491 - 1ac831ec8356ca07.27be1d93e45ba085.bdb0a86004cf3c0e.5922c41d8b989f57 -@@ -35997,12 +35997,12 @@ VADDSUBPD_256(reg) - 2e198ca5d53e814f.5ce85268126e17ce.4eada74e93706a7d.923b0cf20d780ce2 - d2c1c14fe39d2700 - after -- 1ac831ec8356c91d.683131e101c93f05.6f2ed91fdd8d76af.5922c41d8b989f57 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1ac831ec8356ca07.27be1d93e45ba085.bdb0a86004cf3c0e.5922c41d8b989f57 - 97fd311637f5d949.e83131e101c93f05.6f2ed91fdd8d76af.b3a0e186fad0c863 - 2e198ca5d53e814f.5ce85268126e17ce.4eada74e93706a7d.923b0cf20d780ce2 - d2c1c14fe39d2700 --VADDSUBPD_256(mem) -+VDPPS_128_4of4(mem) - before - 4ffc7d88954ad4e8.3b673e05fabcfcc5.5faffb163356e30c.b4790e58c1015425 - e5b9ba8a428bd0c7.1a3543a241fb8756.cd52a8d57f8b60ea.ffde0aa903ce7053 -@@ -36012,11 +36012,11 @@ VADDSUBPD_256(mem) - after - 4ffc7d88954ad4e8.3b673e05fabcfcc5.5faffb163356e30c.b4790e58c1015425 - e5b9ba8a428bd0c7.1a3543a241fb8756.cd52a8d57f8b60ea.ffde0aa903ce7053 -- e5b9ba8a428bd0c7.bb673e05fabcfcc5.5faffb163356e30c.ffde0aa903ce7053 -+ 70c4f63f036dd7c8.27cd98e847875dae.829cd593121b4a94.892798adf662f9b2 - cbe9ac94f6fba418.be7d3843a7edbb7a.5a5bfe3b09125d37.b0a2b3d0364a2cef - ce99577f5d1144b5 - --VADDSUBPD_256(reg) -+VDPPS_128_4of4(reg) - before - 405980240a437eb2.d4f459763741f5e2.3b8f1f20fdb8dd66.3059a0b97f7a54ff - 632e2b2cd76d168f.66b177cfe14c8453.fa5049e9e675ff1d.e26336f99161ed17 -@@ -36024,12 +36024,12 @@ VADDSUBPD_256(reg) - 2746f31742d6509f.946ffb9be2de4eda.ad0e58f3e0f2319f.47cb2e6ff7daefea - b1c1897d8385d1fc - after -- 632e2b2cd76d168f.66b177cfe14c8453.fa5049e9e675ff1d.e26336f99161ed17 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 632e2b2cd76d168f.66b177cfe14c8453.fa5049e9e675ff1d.e26336f99161ed17 - 91645204601a48fa.5deb848d11270d97.570cb30bfeae5c4c.4b453ce75ad3e1ac - 2746f31742d6509f.946ffb9be2de4eda.ad0e58f3e0f2319f.47cb2e6ff7daefea - b1c1897d8385d1fc --VADDSUBPD_256(mem) -+VDPPS_128_4of4(mem) - before - 67f2c8fe1bdd440f.822209d0182e692a.e90958e5707e0146.5aa4340c28cabac1 - 432c67dcdaf0044e.fc42919d7eadd046.37851856d812e30a.b91843c273c4335f -@@ -36039,11 +36039,11 @@ VADDSUBPD_256(mem) - after - 67f2c8fe1bdd440f.822209d0182e692a.e90958e5707e0146.5aa4340c28cabac1 - 432c67dcdaf0044e.fc42919d7eadd046.37851856d812e30a.b91843c273c4335f -- 67f2c8fe1bdd440f.fc42919d7eadd046.e90958e5707e0146.daa4340c28cabac1 -+ 2339e205ddc9cce6.f2f385e912dfc09f.59afb5dc35a7af50.26b881805d6bd724 - e1e6b6633f745902.c081e3206d5177e3.2d53ad63a4472345.fcceebb4814ce3bd - 99a77cc97bf293d6 - --VADDSUBPD_256(reg) -+VDPPS_128_4of4(reg) - before - 588e302ce8e9221a.5bff5de41dfe67cf.c238a6ae2d8e2fbb.8d3c7bd54101f914 - 94d1034763bdcd35.6b5055739272b279.5463caffee2325d6.57389b1f26deedea -@@ -36051,12 +36051,12 @@ VADDSUBPD_256(reg) - f797f859f52f67a4.c1c9256bb249ed12.9849269be081b97f.9494c3ec3e362359 - c18dc147a9c8dc4b - after -- abbaf28789fbd0d5.6fa419fcbaddf52b.5463caffee1b0016.e5118a2d72ecbdf2 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 94d1034763bdcd35.6b5055739272b279.5463caffee2325d6.57389b1f26deedea - abbaf28789fbd0d5.efa419fcbaddf52b.d2504b804b9a94de.65118a2d72ecbdf2 - f797f859f52f67a4.c1c9256bb249ed12.9849269be081b97f.9494c3ec3e362359 - c18dc147a9c8dc4b --VADDSUBPD_256(mem) -+VDPPS_128_4of4(mem) - before - c6c70329ccafa3f3.d6b2112744e3cd4e.bf89f6ac96c4565a.029c56bd4a64d067 - 80100280c6f6367e.a258395f11a53f80.c3b107ab815aeb2e.6c93d75325ce153f -@@ -36066,11 +36066,11 @@ VADDSUBPD_256(mem) - after - c6c70329ccafa3f3.d6b2112744e3cd4e.bf89f6ac96c4565a.029c56bd4a64d067 - 80100280c6f6367e.a258395f11a53f80.c3b107ab815aeb2e.6c93d75325ce153f -- c6c70329ccafa3f3.56b2112744e3cd4e.c3b107ab815aeb2e.6c93d75325ce153f -+ cc323c37b0aa4f18.b9d46c6bf900f9e6.aa0dd4558f166aba.327aa5c80c4bc3b6 - 84fb2b3aa8d6aaec.7574a7b99781362b.5069d994dd048c2c.b09fbd879b671776 - 424d1afe6faf4d2b - --VCVTSS2SI_64(reg) -+VDPPS_256_1of4(reg) - before - 44cfb89823aea182.85354d75ca860526.3383e5b487b333fc.92919256863010ad - 127293c154f14e27.abad1ed431c61af4.504c22c866222c04.4a507c85a7a7b06c -@@ -36078,12 +36078,12 @@ VCVTSS2SI_64(reg) - 814bf1719b70a509.d786b9af3f2865f6.123f8aeb60e9016c.8fc7d0dfbfa4374f - d41632e0ee4296cb - after -- 44cfb89823aea182.85354d75ca860526.3383e5b487b333fc.92919256863010ad -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 127293c154f14e27.abad1ed431c61af4.504c22c866222c04.4a507c85a7a7b06c - 0882a7e59d0391c6.d32e1843f9a3a67f.261c5a61d05b5df0.5574120f5b752993 - 814bf1719b70a509.d786b9af3f2865f6.123f8aeb60e9016c.8fc7d0dfbfa4374f -- 0000000000000000 --VCVTSS2SI_64(mem) -+ d41632e0ee4296cb -+VDPPS_256_1of4(mem) - before - 002db500055a0134.db196ccfe9c4c89f.947f7c021f621283.7001acd3b2585523 - efd7d32b1ff935b5.7138146c248c3432.e6e7dd29b45c6a52.9daebe83633595c2 -@@ -36095,9 +36095,9 @@ VCVTSS2SI_64(mem) - efd7d32b1ff935b5.7138146c248c3432.e6e7dd29b45c6a52.9daebe83633595c2 - 7ee20a4b592aed7b.9ef3e5b5e753266f.a98858111a222991.f391bb690f0bfcf5 - 8618d64dcef9e7b1.c098db15cfa6d901.b92f6aa56ec10a69.cff8a0ef5066c867 -- 0000000000000000 -+ 8d2d6783c5d333c4 - --VCVTSS2SI_64(reg) -+VDPPS_256_1of4(reg) - before - 897d0e8f08dd79b9.e647b11d9a73dd85.3271f3f777108b95.f2a88ed1cb44cb09 - 1f349081b511d8f2.793919a8daa38c20.4fcb28c97b1d76d7.30be40814eb7259b -@@ -36105,12 +36105,12 @@ VCVTSS2SI_64(reg) - 890616c4bf24cbdf.a8987c9b25560362.fe31daea0a52e912.2bf53e1d349f9b46 - 9fad83e1cf2b2fb8 - after -- 897d0e8f08dd79b9.e647b11d9a73dd85.3271f3f777108b95.f2a88ed1cb44cb09 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1f349081b511d8f2.793919a8daa38c20.4fcb28c97b1d76d7.30be40814eb7259b - ab9ee9c469f98a1b.1bbb88d8aa95afb1.75f276f6785ad672.4f3ffca01227d74b - 890616c4bf24cbdf.a8987c9b25560362.fe31daea0a52e912.2bf53e1d349f9b46 -- 000000005b92cd80 --VCVTSS2SI_64(mem) -+ 9fad83e1cf2b2fb8 -+VDPPS_256_1of4(mem) - before - 893346d900d84ccd.15ba12ed531bd9ea.fc9e71dc67f1445f.48d64e11cc91e965 - c45303f1e2b1b1b0.ab04d9acc36ceee9.f397e1868d722ed5.ad2bd0d75aa41314 -@@ -36122,9 +36122,9 @@ VCVTSS2SI_64(mem) - c45303f1e2b1b1b0.ab04d9acc36ceee9.f397e1868d722ed5.ad2bd0d75aa41314 - 2cd9361692c2188d.a731676ba8a24788.69514a87b2e67cf0.8a7e5ba85115a2ce - 9c915c322b183e91.658db897a0492072.399627caf358ecdc.3c19ebf14c73d43d -- fffffffffb70b4d8 -+ 1d497d1ce847e30e - --VCVTSS2SI_64(reg) -+VDPPS_256_1of4(reg) - before - 8a590b97c01f0bec.f246ef33c9bedfe8.4164c99d47eeb454.4133f43b6cd437c3 - e09793cc71878a84.09c56d0489c0b6bd.960294e7381c40da.5cf42dc737671cd4 -@@ -36132,12 +36132,12 @@ VCVTSS2SI_64(reg) - b2c97f19cc337890.e95118c6de0af994.20c24efc69453080.3a11d5db39ff9f1f - b5053b3da71db6b1 - after -- 8a590b97c01f0bec.f246ef33c9bedfe8.4164c99d47eeb454.4133f43b6cd437c3 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - e09793cc71878a84.09c56d0489c0b6bd.960294e7381c40da.5cf42dc737671cd4 - 794d102996099a81.bcda5291872b803d.c2b217e30f6000af.65a44f58731c5539 - b2c97f19cc337890.e95118c6de0af994.20c24efc69453080.3a11d5db39ff9f1f -- 0000000000000000 --VCVTSS2SI_64(mem) -+ b5053b3da71db6b1 -+VDPPS_256_1of4(mem) - before - b44efd68d981551c.e755da08ae91605d.6bf63d8faa69dded.0b7c339ee2570bf8 - 12b6974aea37398c.743e1f62d9ae8d93.1d953bd80855e774.e12dc4351523cec4 -@@ -36149,9 +36149,9 @@ VCVTSS2SI_64(mem) - 12b6974aea37398c.743e1f62d9ae8d93.1d953bd80855e774.e12dc4351523cec4 - aa0a86cef74c1e2c.b6d04993e8163cdf.ddf9908d13d9d457.fd21fc2d9e33b590 - 591545e01bcbc028.075654077755a9ec.85f0b89ae80260c0.baa4d7f21a16fb07 -- 8000000000000000 -+ 760151f02455ddd5 - --VCVTSS2SI_32(reg) -+VDPPS_256_2of4(reg) - before - 8c866693597e97a8.fca5506c72c1daae.c41e3d2a23f80f67.f3442deca2da46db - 577d1348541c642a.6d84235e193829e7.4972fe69888aabfc.01c26d6d5e7043d5 -@@ -36159,12 +36159,12 @@ VCVTSS2SI_32(reg) - 80f422940ee92bec.2d631324c6df5529.1bf1fde7eaac7522.716b3bb04aff7215 - 8a2fc14ab2111bb3 - after -- 8c866693597e97a8.fca5506c72c1daae.c41e3d2a23f80f67.f3442deca2da46db -+ c76651fc00000000.c76651fc00000000.56c078f300000000.56c078f300000000 - 577d1348541c642a.6d84235e193829e7.4972fe69888aabfc.01c26d6d5e7043d5 - 34335379b2bc8207.8a803ba22c3f6902.f29f952e4197b956.8c36f30b37cd13da - 80f422940ee92bec.2d631324c6df5529.1bf1fde7eaac7522.716b3bb04aff7215 -- 0000000080000000 --VCVTSS2SI_32(mem) -+ 8a2fc14ab2111bb3 -+VDPPS_256_2of4(mem) - before - b44c02c48c0fcbdf.950c7d04052f9b85.33fa27d00326ab89.20b432ff20541a0b - cc90790af3063ec6.d1c65e35321b107d.7911f393001f244d.5d3431e17f1ce6be -@@ -36176,9 +36176,9 @@ VCVTSS2SI_32(mem) - cc90790af3063ec6.d1c65e35321b107d.7911f393001f244d.5d3431e17f1ce6be - acc5a20804022f94.8e70c3923138c481.d973f357d8d77fa2.2dbcf5fba18e12e7 - 31b8f9aada0d5c74.2954a7899f12f43c.30eea40aa85876b3.ee9a7ab82539dd31 -- 0000000000000000 -+ fb18bc84a4a68149 - --VCVTSS2SI_32(reg) -+VDPPS_256_2of4(reg) - before - b083b7cbbd633bda.3734fbdc91357e93.ffbf07861836dc5b.5a4c81968bb1c6ad - 692768fa09fb4791.9a07228b4685541d.6afdddf3372fb78a.335a06e99eeb2bbc -@@ -36186,12 +36186,12 @@ VCVTSS2SI_32(reg) - 564ad9bbb0ee4320.e7ded40c18cf081f.7222e0d0d8d139c6.62b6f991c23723c7 - 719c5ebe0b612e1b - after -- b083b7cbbd633bda.3734fbdc91357e93.ffbf07861836dc5b.5a4c81968bb1c6ad -+ 1c105d4300000000.1c105d4300000000.5b884e6e00000000.5b884e6e00000000 - 692768fa09fb4791.9a07228b4685541d.6afdddf3372fb78a.335a06e99eeb2bbc - 8150ca7b27fbe019.36fbeca1150a983d.c75a273d9889c274.97e4afeefc14610b - 564ad9bbb0ee4320.e7ded40c18cf081f.7222e0d0d8d139c6.62b6f991c23723c7 -- 0000000000000000 --VCVTSS2SI_32(mem) -+ 719c5ebe0b612e1b -+VDPPS_256_2of4(mem) - before - 9e615c61f49d3d34.436091274260ac4f.897a57b66ee05df0.c8a104199392572b - c6d36e6798f70e3e.a3dfee2979dd5755.f89cef8d314956dc.23228f8263585950 -@@ -36203,9 +36203,9 @@ VCVTSS2SI_32(mem) - c6d36e6798f70e3e.a3dfee2979dd5755.f89cef8d314956dc.23228f8263585950 - c5bc11ba137c5b64.d414ed2ff0f27fdc.10101a7c7d17ad0e.e0f27e79e7b07be1 - 76e9bf478237e1d3.304989a4442a6190.ada1536f6f561fb3.5b5dcc69b925f989 -- 0000000000000000 -+ f0af75be75440ef5 - --VCVTSS2SI_32(reg) -+VDPPS_256_2of4(reg) - before - fb3475e4b897f7d0.b726f6fb01345bb6.15cabef41012391e.ab1d1652221068f7 - d838c9471dacf0c7.633f31c0ab80863a.dde5898bf0354232.e64ee011b3534305 -@@ -36213,12 +36213,12 @@ VCVTSS2SI_32(reg) - 78eb5974bf4b01b8.6c34a432f132dfd4.8a15cd3e5e5dda9a.830375d3dda2a231 - 9d1d39aeaec69da7 - after -- fb3475e4b897f7d0.b726f6fb01345bb6.15cabef41012391e.ab1d1652221068f7 -+ 1e417d4f00000000.1e417d4f00000000.319b72fc00000000.319b72fc00000000 - d838c9471dacf0c7.633f31c0ab80863a.dde5898bf0354232.e64ee011b3534305 - e3066b53400f3586.5600ed849c261e8b.e6e5e4d5811fb977.3a012b983d2b6d0a - 78eb5974bf4b01b8.6c34a432f132dfd4.8a15cd3e5e5dda9a.830375d3dda2a231 -- 0000000000000000 --VCVTSS2SI_32(mem) -+ 9d1d39aeaec69da7 -+VDPPS_256_2of4(mem) - before - 631ef316cca31c98.f3338e1633ec910a.81a8d4b6c6b18441.27c23f32247ae146 - b3d120f55443d92f.af2a07a63a7e2027.7028f8fc35aecb00.1738361e6f020928 -@@ -36230,9 +36230,9 @@ VCVTSS2SI_32(mem) - b3d120f55443d92f.af2a07a63a7e2027.7028f8fc35aecb00.1738361e6f020928 - 68013b3962b49099.0a1cbe8e708eecbc.17808cf05d356d3b.b7c3af6cd9828fec - 5d7bc0cd1102ff01.5f55b13c70a72f75.517c0c7e5853291e.64afa48a0185af3d -- 0000000000000000 -+ 784813e28097a4c8 - --VCVTSD2SI_32(reg) -+VDPPS_256_3of4(reg) - before - 50d9f7e2f545ab39.700c2b9d7d37e094.0a21db1ad65626fd.f9e8f5924213b9d6 - 48af4df5f91a003b.7c7df895c362f07d.67cb38963f260c01.ed90c2193781da8f -@@ -36240,12 +36240,12 @@ VCVTSD2SI_32(reg) - 095b3b04246a83a4.ee37aaad4cc38c04.a6ec7c158959992b.25c2f82cb599beb2 - 22e55991755af975 - after -- 50d9f7e2f545ab39.700c2b9d7d37e094.0a21db1ad65626fd.f9e8f5924213b9d6 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 48af4df5f91a003b.7c7df895c362f07d.67cb38963f260c01.ed90c2193781da8f - bd170f872ba2df7a.5c9da4a1ff8ceae9.d1a0c51b47a31f2c.083feffd55aa4874 - 095b3b04246a83a4.ee37aaad4cc38c04.a6ec7c158959992b.25c2f82cb599beb2 -- 0000000080000000 --VCVTSD2SI_32(mem) -+ 22e55991755af975 -+VDPPS_256_3of4(mem) - before - d9748f17b1fab5e8.89c7ccd882fd2962.0c1686a5c61290f9.41fb5bf0a1d5b6a9 - 283b15ac8484ae37.99a9be6fe1e70d63.9408b4758a85b2f5.fd195d182ca3b454 -@@ -36257,9 +36257,9 @@ VCVTSD2SI_32(mem) - 283b15ac8484ae37.99a9be6fe1e70d63.9408b4758a85b2f5.fd195d182ca3b454 - e905673b0b059f90.954c0e35dcb56b51.60d7b10ab329b024.38917ff9c54dcdd5 - f9a001b06188451d.d9fbb6970ff27ed8.4e50f74e5e0944b1.4cb1bb0009613edb -- 0000000080000000 -+ 97c30f97936a420f - --VCVTSD2SI_32(reg) -+VDPPS_256_3of4(reg) - before - 7314762c00f51720.35d660f7a2195c0a.c103b4ff172b83a6.383f042fa6322bc9 - 3ef0ec29eb8df7b8.7774fffcebc49f84.a9b003db90eab564.fb6f5397a8ae2097 -@@ -36267,12 +36267,12 @@ VCVTSD2SI_32(reg) - 0d79f610ad15ca2f.8118edf1039a9cce.e929859b42309467.7dc6a8b148d52807 - f385a63a1e97b101 - after -- 7314762c00f51720.35d660f7a2195c0a.c103b4ff172b83a6.383f042fa6322bc9 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 3ef0ec29eb8df7b8.7774fffcebc49f84.a9b003db90eab564.fb6f5397a8ae2097 - 52a36dfcf0be1e84.9c465aac5796ccb7.ed4ea09515be52c1.74ae61747f8ce148 - 0d79f610ad15ca2f.8118edf1039a9cce.e929859b42309467.7dc6a8b148d52807 -- 0000000080000000 --VCVTSD2SI_32(mem) -+ f385a63a1e97b101 -+VDPPS_256_3of4(mem) - before - b2b5d6fb1ddd3a62.c9bd82d1bb1d3566.00b634b90bddcef6.f98cb058b4ceb802 - 9723b4e062b47d55.e3bc0dabb8629cd4.f6ebacee896a1c5a.79c51c380623f93f -@@ -36284,9 +36284,9 @@ VCVTSD2SI_32(mem) - 9723b4e062b47d55.e3bc0dabb8629cd4.f6ebacee896a1c5a.79c51c380623f93f - 7c9abdd509273707.b8c3930a40713a26.3f85d07e9c4d4327.c41ec5a7d5bc94ca - 3ee86cc72d4224a3.a21c115aeed54d08.b74e1c545d92ff89.38e4a711bc23c54e -- 0000000080000000 -+ 3063bfe258e7c878 - --VCVTSD2SI_32(reg) -+VDPPS_256_3of4(reg) - before - 08e708874491d8f4.b9d73ca0ea11ff56.fe1481075e1a0f25.3a130c5ceb460cab - 1bbb7e6a1daf326d.c935ac4e5da1854c.28f6e17e2dcdbc2a.a5a01c825f7525ba -@@ -36294,12 +36294,12 @@ VCVTSD2SI_32(reg) - 6787e29e0375b408.186954d5d33281af.56ac5f7656aacb9a.9e418ed86f706d4d - e5ede7e04255152a - after -- 08e708874491d8f4.b9d73ca0ea11ff56.fe1481075e1a0f25.3a130c5ceb460cab -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1bbb7e6a1daf326d.c935ac4e5da1854c.28f6e17e2dcdbc2a.a5a01c825f7525ba - c72d1df97ecc1290.4acc35bba1fe72b0.7c102d29f67992c2.d2c0c9b2d72907e1 - 6787e29e0375b408.186954d5d33281af.56ac5f7656aacb9a.9e418ed86f706d4d -- 0000000000000000 --VCVTSD2SI_32(mem) -+ e5ede7e04255152a -+VDPPS_256_3of4(mem) - before - 839251b66de5b9a3.5616c7c749355382.0fd886870f4b6f74.131775cfe9eda45e - 53fa46470b2b16e5.f226cadfec982ca9.0be446bd6f54f82c.0d9e69a249cd59b9 -@@ -36311,9 +36311,9 @@ VCVTSD2SI_32(mem) - 53fa46470b2b16e5.f226cadfec982ca9.0be446bd6f54f82c.0d9e69a249cd59b9 - 33f2447d3833e71b.9503e652872a7b2b.e85b1063125ad803.a18a395a15d72558 - fe45c646110ae972.9df9188cb6787bb1.820761651168ca24.2b2ae163e69545e6 -- 0000000000000000 -+ 07c95b295b95f510 - --VCVTSD2SI_64(reg) -+VDPPS_256_4of4(reg) - before - 91b2a5180d637082.90c1488db2bbd816.64535af9160e69ea.b5b5b4af8b8a8cbc - 2533ba9c9a8af4e7.c530473e35527032.485faa054376817f.5c32842d99cdd7f6 -@@ -36321,12 +36321,12 @@ VCVTSD2SI_64(reg) - da283514b413013c.871ba98e58648a84.d2b861aa71f21e74.7bc39176e7e3ff02 - aa71c4195ecf532d - after -- 91b2a5180d637082.90c1488db2bbd816.64535af9160e69ea.b5b5b4af8b8a8cbc -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2533ba9c9a8af4e7.c530473e35527032.485faa054376817f.5c32842d99cdd7f6 - 1e9696229e96bbec.79603e45b9dc6cf3.a367031cd83eff1f.554750cc593c6aff - da283514b413013c.871ba98e58648a84.d2b861aa71f21e74.7bc39176e7e3ff02 -- 8000000000000000 --VCVTSD2SI_64(mem) -+ aa71c4195ecf532d -+VDPPS_256_4of4(mem) - before - bd1c669fdb0b22a9.b43594df798e0484.cd2e04052ef68312.329ec11cab1c1b2b - 9291f2f679a327a5.0808aef08892fe70.2665cb96589f16c8.1d651edc214a32ef -@@ -36338,9 +36338,9 @@ VCVTSD2SI_64(mem) - 9291f2f679a327a5.0808aef08892fe70.2665cb96589f16c8.1d651edc214a32ef - 049de40954a41f4b.32ef7fb27dac2cab.6d8b7b2df16afdd4.f058735870089e6d - ee09b9c48919c6c7.8d340391f567c9e2.806e8eb61663f55f.08c5bffb33e09d50 -- 0000000000000000 -+ bff6fb3107606845 - --VCVTSD2SI_64(reg) -+VDPPS_256_4of4(reg) - before - 7238246687143ef8.2ea4eb13330fd846.772436f88c4f12c0.3ad8821ee297ba98 - 7dd7370650865914.9e39f8e26f9010f4.4b0b1555dcf043f2.7697d34f711107a8 -@@ -36348,12 +36348,12 @@ VCVTSD2SI_64(reg) - 0b5c08372ada5139.828090b00b69e58b.20eec49f1e8f4c01.e83f78c14b082c04 - d6c0c5d9cd9d7ca7 - after -- 7238246687143ef8.2ea4eb13330fd846.772436f88c4f12c0.3ad8821ee297ba98 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7dd7370650865914.9e39f8e26f9010f4.4b0b1555dcf043f2.7697d34f711107a8 - 3c1f2f7dfd44f646.1c935b1d59aa2bfc.64359b1384d79823.1275fb37e1de99be - 0b5c08372ada5139.828090b00b69e58b.20eec49f1e8f4c01.e83f78c14b082c04 -- 8000000000000000 --VCVTSD2SI_64(mem) -+ d6c0c5d9cd9d7ca7 -+VDPPS_256_4of4(mem) - before - b6c65e6b83a944d2.46d9bfa074d3a69a.aeca1488a4d8f9cd.da828c6346a59d35 - 651bbf63883741b2.49e44e2477bb3015.7a3e628f3e0324ed.ed3cf0cc99a4c46e -@@ -36365,9 +36365,9 @@ VCVTSD2SI_64(mem) - 651bbf63883741b2.49e44e2477bb3015.7a3e628f3e0324ed.ed3cf0cc99a4c46e - c08d65adf8532f72.70c7b330ce1e2c55.c3a8f6b3f5f62217.b769ea47b2180055 - a1e6ca35f009c93f.17cfe92f1589d607.66d34cdee5beaf79.9255783e2e8e8b99 -- 8000000000000000 -+ dc4c961fa891a2e4 - --VCVTSD2SI_64(reg) -+VDPPS_256_4of4(reg) - before - ef9a3e54bcad81e3.e5f36ce78b66cd45.9a48ed8ce98769d6.3d8de0fe2c66863c - 288b6e4b086f6341.6980c7b0e675f4af.557db9b5e5a4226f.25a02ffee3fb648f -@@ -36375,12 +36375,12 @@ VCVTSD2SI_64(reg) - 7d85532cb11223cc.9c4994334bdba262.e34f9e18c86df5ae.9905eb4e1719248f - dcee5076cbba7f96 - after -- ef9a3e54bcad81e3.e5f36ce78b66cd45.9a48ed8ce98769d6.3d8de0fe2c66863c -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 288b6e4b086f6341.6980c7b0e675f4af.557db9b5e5a4226f.25a02ffee3fb648f - e46a216f256286ab.0758557a1d43fdaa.a4bc4b15a66d3d7e.fbdab4ca2888059c - 7d85532cb11223cc.9c4994334bdba262.e34f9e18c86df5ae.9905eb4e1719248f -- 0000000000000000 --VCVTSD2SI_64(mem) -+ dcee5076cbba7f96 -+VDPPS_256_4of4(mem) - before - a0605f2e6078cfdb.502600ee480c7951.041dfec68c49a002.6e84ae2ae53188ac - c1299563f35ed38a.ba9a242185dbc2e6.1ba1121efd9ab3b6.a0a577b79c443023 -@@ -36392,9 +36392,9 @@ VCVTSD2SI_64(mem) - c1299563f35ed38a.ba9a242185dbc2e6.1ba1121efd9ab3b6.a0a577b79c443023 - 1b136dffa07945d0.152dbc32040b3b36.bea14929b9d897ab.d7fff62b863229c0 - 8bec63f082d4e2d9.be2bc38b622920ee.c7e920d2dc12070d.6ede26f34187b12e -- 8000000000000000 -+ c18d037969d0021a - --VDPPS_128_1of4(reg) -+VHADDPS_128(reg) - before - 2b5a892a99995930.eb7ef320b57b66d0.11df359a3ac0adb9.134514058451c008 - 0a8fb5736e6cf11c.18969a7d567b8de2.6a960fc9295c1d44.7e80a0aecaa37dc7 -@@ -36402,12 +36402,12 @@ VDPPS_128_1of4(reg) - 9364eb7a7465d723.48871a6b50b3b205.9e3ee73bbad59849.21c77113a6aef742 - 116aada6737f2b57 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.cb8aad3be46840ba.6a960fc97e80a0ae - 0a8fb5736e6cf11c.18969a7d567b8de2.6a960fc9295c1d44.7e80a0aecaa37dc7 - b87981bf83d70788.ee00d3f280df123a.259d4b86cb8aad3b.e46840bacc13fc76 - 9364eb7a7465d723.48871a6b50b3b205.9e3ee73bbad59849.21c77113a6aef742 - 116aada6737f2b57 --VDPPS_128_1of4(mem) -+VHADDPS_128(mem) - before - 8f1d72604f9253e0.f69cef0fdea39d97.04f9ebd4e104296e.32c6de5695c91c1b - 79ac3b2c57f42c0a.3c6d87ec5d1c9591.fd20c21950dd32a3.3b812c42f5f3735c -@@ -36417,11 +36417,11 @@ VDPPS_128_1of4(mem) - after - 8f1d72604f9253e0.f69cef0fdea39d97.04f9ebd4e104296e.32c6de5695c91c1b - 79ac3b2c57f42c0a.3c6d87ec5d1c9591.fd20c21950dd32a3.3b812c42f5f3735c -- aae384f5a7b07201.c222b07c8c5cfabc.0fca1c26b84a8acd.16bace6b79dedab9 -+ 0000000000000000.0000000000000000.e104296e32c6de56.fd20c219f5f3735c - fe8dcaa95ad2e1f0.e509672c07f009c5.16c174e73658ed1b.1ebfbe3dba178cde - b1dafa255629c676 - --VDPPS_128_1of4(reg) -+VHADDPS_128(reg) - before - 2a587d8de9a0c42e.517788338c673404.ff6ca7666b63fd57.eed14649e51216b7 - e58544e20e08c2b1.7e6d397f5a7a2968.6e986d975341131f.72c80e36e284c3cd -@@ -36429,12 +36429,12 @@ VDPPS_128_1of4(reg) - 911c8a0480ddaccb.dbad6a0d384be3d3.b67b778f22709500.f397716533c2931a - a607047fc0a530a8 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.5c1787c948bbae8a.6e986d9772c80e36 - e58544e20e08c2b1.7e6d397f5a7a2968.6e986d975341131f.72c80e36e284c3cd - 3ead499162eefbac.633b5c79df177949.8cd9b32c5c1787c9.8071499c48bbae8a - 911c8a0480ddaccb.dbad6a0d384be3d3.b67b778f22709500.f397716533c2931a - a607047fc0a530a8 --VDPPS_128_1of4(mem) -+VHADDPS_128(mem) - before - 778e7ed50b713f61.391d02a9046211b9.c18fe02880212131.49c9b42e3fd87971 - 41f659532f317d71.94fdadeb8b086623.f3ad3bb4d4a6f08f.9f11667452dc6ec8 -@@ -36444,11 +36444,11 @@ VDPPS_128_1of4(mem) - after - 778e7ed50b713f61.391d02a9046211b9.c18fe02880212131.49c9b42e3fd87971 - 41f659532f317d71.94fdadeb8b086623.f3ad3bb4d4a6f08f.9f11667452dc6ec8 -- df0b13e548f1a503.fd098836b05be6b4.4cd2f69f4fe40c1b.159d89ccf407b1b0 -+ 0000000000000000.0000000000000000.c18fe02849c9b43c.f3ad3bb452dc6ec8 - 2f9b267773be7544.d08b8ef610e7ce19.a7cb8ed30ee930ff.07ba1aa4c3e57dd5 - d1b413675b0310e4 - --VDPPS_128_1of4(reg) -+VHADDPS_128(reg) - before - d0d7728157eca489.0b7011f5cba3a75f.68d0ba9747395afd.e2647d3e2cc11967 - 5e6f325f542c7570.51584d4b6dadf781.23230a85f0dcc50e.d76941cac5778380 -@@ -36456,12 +36456,12 @@ VDPPS_128_1of4(reg) - 9a2cc712bee3c2b1.878cac30fd5ce588.6e2704f909472b61.63e635fadbadc974 - b1f75d758f461da7 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.5bd27a2cf6172a76.f0dcc50ed76941ca - 5e6f325f542c7570.51584d4b6dadf781.23230a85f0dcc50e.d76941cac5778380 - d8c7506bed50c144.db1d576674e623d5.5bd27a2ca75d4cf5.64a65565f6172a76 - 9a2cc712bee3c2b1.878cac30fd5ce588.6e2704f909472b61.63e635fadbadc974 - b1f75d758f461da7 --VDPPS_128_1of4(mem) -+VHADDPS_128(mem) - before - 2ba349c22eede23b.00eb92c16472b564.2f71c797231bfac6.b670a656b1269efb - abb776ced5afd35b.664eb0e27b87d609.b0982486032e1dba.91f75bb03c87e072 -@@ -36471,11 +36471,11 @@ VDPPS_128_1of4(mem) - after - 2ba349c22eede23b.00eb92c16472b564.2f71c797231bfac6.b670a656b1269efb - abb776ced5afd35b.664eb0e27b87d609.b0982486032e1dba.91f75bb03c87e072 -- 0eff5f83a096ae33.28a21ae39db0604c.e7cc3fe8b8a10c91.59091f7445f52e70 -+ 0000000000000000.0000000000000000.2f71c798b670cffe.b09824863c87e072 - 314780ceaab12cf0.a132cd2f697990d8.aeda95ab5f808177.6cf2ef0d68fcc4a2 - 24fdc5e74229ddb3 - --VDPPS_128_2of4(reg) -+VHADDPS_256(reg) - before - df789f6e6f07b650.ee5b569c0f090cbe.2f4cc632796da259.e28fa1ba13d83897 - f7ad780d8a228b24.22065bd7ecac08c9.2d3a00586918d27c.5fb5df01f1b4ef1d -@@ -36483,12 +36483,12 @@ VDPPS_128_2of4(reg) - b1781849fc411824.5f55e7497c014743.e9c628bd5bc47a57.a586e2e8982a480e - 25ca9e5f9adb63d1 - after -- 0000000000000000.0000000000000000.ff80000000000000.ff80000000000000 -+ c9e94c335ca5dd3c.f7ad780decac08c9.f749770d14216036.6918d27cf1b4ef1d - f7ad780d8a228b24.22065bd7ecac08c9.2d3a00586918d27c.5fb5df01f1b4ef1d - c9e94c33300798dc.a9160d6d5ca5dd3c.f749770dd6065bed.0219cb6c14216036 - b1781849fc411824.5f55e7497c014743.e9c628bd5bc47a57.a586e2e8982a480e - 25ca9e5f9adb63d1 --VDPPS_128_2of4(mem) -+VHADDPS_256(mem) - before - 5eb07dbe36416caa.0ca6d7bc8a5c48a7.2190665767cb020c.5efb0dd495dd6a67 - 2c03faf2866720c5.34bf85f877e56412.c99304833a0fc9c0.b43424be1fde69c9 -@@ -36498,11 +36498,11 @@ VDPPS_128_2of4(mem) - after - 5eb07dbe36416caa.0ca6d7bc8a5c48a7.2190665767cb020c.5efb0dd495dd6a67 - 2c03faf2866720c5.34bf85f877e56412.c99304833a0fc9c0.b43424be1fde69c9 -- 6b9092e5a9593b4f.860e1e6a5e67a710.34293fb910d9598e.46bf68e89652b128 -+ 5eb07dbe0c9ff577.2c03faf277e56412.67cb020c5efb0dd4.c9930483b43424be - f723bf85b9237874.5ee19e7cdc6e4f4e.3e2092e505366da0.70e6d5bc95c57f31 - 8df768a8b8c40e8f - --VDPPS_128_2of4(reg) -+VHADDPS_256(reg) - before - fb3c1c179cd99cef.ac88ffbdd2d29460.1882029c8d879678.c34279f33632c322 - 1402ec74dd9363fc.668acd7911724b3e.103e45350b3db839.9f5d70d0bfd71542 -@@ -36510,12 +36510,12 @@ VDPPS_128_2of4(reg) - bb40d6ade31f8ed0.5999042d6fb17981.2a375882e4b18132.cba980a346519f06 - d47290717d3e4f03 - after -- 0000000000000000.0000000000000000.c0e87b6d00000000.c0e87b6d00000000 -+ 3695d72d910d593a.dd9363fc668acd79.f51cf33ebb332029.103e74a3bfd71542 - 1402ec74dd9363fc.668acd7911724b3e.103e45350b3db839.9f5d70d0bfd71542 - 3695d72d167b9f63.01f7a5a5910d593a.a26163b3f51cf33e.ae3bf466bb332029 - bb40d6ade31f8ed0.5999042d6fb17981.2a375882e4b18132.cba980a346519f06 - d47290717d3e4f03 --VDPPS_128_2of4(mem) -+VHADDPS_256(mem) - before - a464a0be7c05ec4c.0151e760e10a6aee.4a3e64fdc66a693f.040b200e77879ec2 - 174a2d755eb2320e.621204b2acc9706a.afb04301b342e29f.8c2bb8c3472b889a -@@ -36525,11 +36525,11 @@ VDPPS_128_2of4(mem) - after - a464a0be7c05ec4c.0151e760e10a6aee.4a3e64fdc66a693f.040b200e77879ec2 - 174a2d755eb2320e.621204b2acc9706a.afb04301b342e29f.8c2bb8c3472b889a -- 09efb1823f52dc75.3cd12b10dfe7dbf0.66bb1c265147a3ce.1ee11b0df2277965 -+ 7c05ec4ce10a6aee.5eb2320e621204b2.4a3d7a9477879ec2.b3444325472b889a - 5520aad13cf0a8ac.e9d858e416f0e92b.4a2d6c56bc8566f8.167a4558140aaed0 - d0423211485d6386 - --VDPPS_128_2of4(reg) -+VHADDPS_256(reg) - before - a885dfa22baed334.d9a9934e70994fe0.c674859cee71d4c8.37d1ad7f1106e848 - fa8f477958883b86.7056e9e5f857903d.30f0b0a202f5d872.08725d8b6cd8e5eb -@@ -36537,12 +36537,12 @@ VDPPS_128_2of4(reg) - 7b2738a50108e3c4.464bc8127248cb20.16bced4c50371f9f.cbdff701a19d3ed8 - 7342d942b4a8137a - after -- 0000000000000000.0000000000000000.ff80000000000000.ff80000000000000 -+ 6b78d727f5f32c43.fa8f4779f8578f66.ef0833d6e807180c.30f0b0a26cd8e5eb - fa8f477958883b86.7056e9e5f857903d.30f0b0a202f5d872.08725d8b6cd8e5eb - 21ab66006b78d727.f5f32682ef3825ee.819ad464ef0833d6.9bddf768e807180c - 7b2738a50108e3c4.464bc8127248cb20.16bced4c50371f9f.cbdff701a19d3ed8 - 7342d942b4a8137a --VDPPS_128_2of4(mem) -+VHADDPS_256(mem) - before - 71d21a173d345320.634db9d3b5c79a08.3e2b4a7f9c913efe.4ba4f7c8c20dd97a - 9f5d356c574cb9f3.346ae6f6243e39a0.b86028b78a2139b5.7d9cef43e0169d13 -@@ -36552,11 +36552,11 @@ VDPPS_128_2of4(mem) - after - 71d21a173d345320.634db9d3b5c79a08.3e2b4a7f9c913efe.4ba4f7c8c20dd97a - 9f5d356c574cb9f3.346ae6f6243e39a0.b86028b78a2139b5.7d9cef43e0169d13 -- dbada62d1efc0222.4ccaba7aeafbfb37.92b4dfa457047970.06f1cf2946dfa615 -+ 71d21a17634db9d3.574cb9f3346ae6f6.3e2b4a7f4ba4f7b6.b86028b77d9cef43 - ff90e946af50ead6.06b931cba1891e7a.a6f4ea342045ba5c.43ef95e692f3312d - 90e13de65ddf7a06 - --VDPPS_128_3of4(reg) -+VHADDPD_128(reg) - before - 4915c196452dbc4d.e9d07ba425552c3e.bd824755e875dc15.d2ebc45200f0b8a5 - cad51f60e66b34ae.733ad6319d168584.cf73f985594a72b3.f067ebea13112e76 -@@ -36564,12 +36564,12 @@ VDPPS_128_3of4(reg) - 942c56f6c0e6b66c.dbbcdc8d01fd6c5c.70f81e8329e015ab.761a0e3845e77563 - 95e902c69ab4bdd6 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.de32dbe876b5d9fc.f067ebea13112e76 - cad51f60e66b34ae.733ad6319d168584.cf73f985594a72b3.f067ebea13112e76 - 6f6e52b2db251ed4.7b9a78db32a0b1d5.96d642c590941b01.de32dbe876b5d9fc - 942c56f6c0e6b66c.dbbcdc8d01fd6c5c.70f81e8329e015ab.761a0e3845e77563 - 95e902c69ab4bdd6 --VDPPS_128_3of4(mem) -+VHADDPD_128(mem) - before - 186c327f94276f81.955b279a323a3721.706b7f32253c7146.b7258929c2b99a5c - d96f1a4d4d4c4492.ce47c109ccaddea0.1774dbb8bb667dbe.c9a97f25f4abe6c1 -@@ -36579,11 +36579,11 @@ VDPPS_128_3of4(mem) - after - 186c327f94276f81.955b279a323a3721.706b7f32253c7146.b7258929c2b99a5c - d96f1a4d4d4c4492.ce47c109ccaddea0.1774dbb8bb667dbe.c9a97f25f4abe6c1 -- b5bd371de12ffb33.9b3c21af2bcce795.aaa46e0ade894cf1.00cffde25d433785 -+ 0000000000000000.0000000000000000.706b7f32253c7146.c9a97f25f4abe6c1 - 882403dc6ddd4e90.578542f7ea228eab.06c5b314aab0990b.b9e5fecc990bc755 - 51357e4f4392d3dc - --VDPPS_128_3of4(reg) -+VHADDPD_128(reg) - before - 220c79d7f86197c7.2e6efc750c61fad6.606f204fa63c0e8e.07a427c23ce82237 - 89b6ecd053064ec2.84689dd4dbc8bb31.1146b823faa5a4ec.890c4401b03ca0a2 -@@ -36591,12 +36591,12 @@ VDPPS_128_3of4(reg) - 8ab326c66c018896.ab9cc893776c6bd4.dbeb02eadc9401c3.81ac6eddab6872e3 - ae7a72546b593d12 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.68cb88bb21b8d277.1146b823faa5a4ec - 89b6ecd053064ec2.84689dd4dbc8bb31.1146b823faa5a4ec.890c4401b03ca0a2 - e27fd1a6f00d3578.64de63e4f51d4dcc.c65604dd83e98c6f.68cb88bb21b8d277 - 8ab326c66c018896.ab9cc893776c6bd4.dbeb02eadc9401c3.81ac6eddab6872e3 - ae7a72546b593d12 --VDPPS_128_3of4(mem) -+VHADDPD_128(mem) - before - cc02100b7d96ef2f.db9ee69a626e82c7.356e4acc7cc2d274.ab51adb7a2334095 - b710c5edfb2c4467.328b0e906fe060b8.de1f647c21293dd9.94d301ae70518591 -@@ -36606,11 +36606,11 @@ VDPPS_128_3of4(mem) - after - cc02100b7d96ef2f.db9ee69a626e82c7.356e4acc7cc2d274.ab51adb7a2334095 - b710c5edfb2c4467.328b0e906fe060b8.de1f647c21293dd9.94d301ae70518591 -- 4b700be80426f7e5.ebc798122ee45e15.827d928d81b06a2f.f0bffb3de37b0c62 -+ 0000000000000000.0000000000000000.356e4acc7cc2d274.de1f647c21293dd9 - 64ed60e7b190c5d6.629e828e3c05b889.fd5250ecb86013a1.1d5f96ce963c10b5 - 7600cecf2520ce36 - --VDPPS_128_3of4(reg) -+VHADDPD_128(reg) - before - 56ee9fab2db48290.dd5540d621776a66.f35cc76f35cfa9c1.2b6b1b86e347f55c - 1b7405ce4a836770.947225a16de6a1c0.fa4d6421b3cf6e68.e8946e451e71cb8b -@@ -36618,12 +36618,12 @@ VDPPS_128_3of4(reg) - c07c81993003b770.29fff37b0f8db884.daf792a8b49f64b6.7e469ce731ba46f7 - 106670a042f3638d - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.d3bd53105490432b.fa4d6421b3cf6e68 - 1b7405ce4a836770.947225a16de6a1c0.fa4d6421b3cf6e68.e8946e451e71cb8b - 1fe0fda41719ba81.64128d34b4e92711.d3bd53105490432b.0f99c51784e8525b - c07c81993003b770.29fff37b0f8db884.daf792a8b49f64b6.7e469ce731ba46f7 - 106670a042f3638d --VDPPS_128_3of4(mem) -+VHADDPD_128(mem) - before - a1c6bb30d29d6446.5895901a32cb9ae8.bf05d3639cdd0f46.6b481c556e860cb4 - 0d33fb82fec60751.44772391b8009e96.02f2a9d677e5ea83.e2fded841fd378d2 -@@ -36633,11 +36633,11 @@ VDPPS_128_3of4(mem) - after - a1c6bb30d29d6446.5895901a32cb9ae8.bf05d3639cdd0f46.6b481c556e860cb4 - 0d33fb82fec60751.44772391b8009e96.02f2a9d677e5ea83.e2fded841fd378d2 -- 2f77ab82e17a05d8.e16e376b5f2b0026.cd91f1c2bbb20366.9b60019f6212e3bb -+ 0000000000000000.0000000000000000.6b481c556e860cb4.e2fded841fd378d2 - e55e481d98c31d07.89c6c915c2dafc43.fead2811854f161b.f2bd5514d3ce8b1c - 4262e34d0f93aaa1 - --VDPPS_128_4of4(reg) -+VHADDPD_256(reg) - before - e99aa9b8b2ed7df5.0ab64c3d3eaf090b.99cbd4fa7e99cd9a.7013c9b1f0c8e1d0 - 42b0a3c057693fc5.794a35cff04a8610.6dc854852ef2b0d6.fe90508d182a1eaf -@@ -36645,12 +36645,12 @@ VDPPS_128_4of4(reg) - 79a91f5618f58487.a954a3fae6ba22cb.d2dea442dca89cb0.e2f901a911d7e09c - f07f23c11a39de03 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ a9f1cbd09a922ebc.794a35cff04a8610.620a45246f73e1a5.fe90508d182a1eaf - 42b0a3c057693fc5.794a35cff04a8610.6dc854852ef2b0d6.fe90508d182a1eaf - a9f1cbd09a922ebc.10e57ec0c99f5041.620a45246f73e1a5.86ee3a911a808ae4 - 79a91f5618f58487.a954a3fae6ba22cb.d2dea442dca89cb0.e2f901a911d7e09c - f07f23c11a39de03 --VDPPS_128_4of4(mem) -+VHADDPD_256(mem) - before - 8a4a1bc551b43e44.10249abd6d1d7dd1.2263216b62a7b9da.1a8e6c4b121c1ca5 - 8e2866a2d154bc8c.c8ae387233965747.55de72fe5a73d199.966699abac5b9e30 -@@ -36660,11 +36660,11 @@ VDPPS_128_4of4(mem) - after - 8a4a1bc551b43e44.10249abd6d1d7dd1.2263216b62a7b9da.1a8e6c4b121c1ca5 - 8e2866a2d154bc8c.c8ae387233965747.55de72fe5a73d199.966699abac5b9e30 -- d6e37e42b6241607.ff92f5df09ed4c95.2091149fe9292634.a2b427ce47f15efd -+ 10249abd6d1d7dd1.c8ae387233965747.2263216b62a7b9da.55de72fe5a73d199 - 4048e1921d3006e0.101ece7188ad9966.5d4882392bd573d9.9ac312217e6b97b7 - dade570eed54870a - --VDPPS_128_4of4(reg) -+VHADDPD_256(reg) - before - be52f102313868a3.a6230a7f21844943.569cbd954f627967.eace39ba3d8475b1 - a26bdc6ae5a4762e.e54075f4de2d9a5e.2f59c0b5f7992944.a1f0b30e3b41e8eb -@@ -36672,12 +36672,12 @@ VDPPS_128_4of4(reg) - dabc964210420dc8.5f6f0225f6ac5a66.05c0f09d60bae940.0138e5da68171030 - 61f6942cd0473c93 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ e27514b1a623ef57.e54075f4de2d9a5e.f5a1d23f1fdce5a8.2f59c0b5f7992944 - a26bdc6ae5a4762e.e54075f4de2d9a5e.2f59c0b5f7992944.a1f0b30e3b41e8eb - e27514b1a623ef57.da6a9edc7236b75a.f5a1d23f1fdce5a8.5f7a6e1f401987b1 - dabc964210420dc8.5f6f0225f6ac5a66.05c0f09d60bae940.0138e5da68171030 - 61f6942cd0473c93 --VDPPS_128_4of4(mem) -+VHADDPD_256(mem) - before - 5c80f8ff93b5ca07.e68b5c8bbe8b0d30.51191cba889a3fac.bc02153d58bc71b7 - cea18b41ce6e74b7.623064f74c8d2a39.8d356887440c2459.74b23c8aa370b8ba -@@ -36687,11 +36687,11 @@ VDPPS_128_4of4(mem) - after - 5c80f8ff93b5ca07.e68b5c8bbe8b0d30.51191cba889a3fac.bc02153d58bc71b7 - cea18b41ce6e74b7.623064f74c8d2a39.8d356887440c2459.74b23c8aa370b8ba -- 9327cbdc9c7df7d0.aaf5a9f257d1a190.ed8f6278450ec398.8a1e63f0dc62fbf4 -+ e68b5c8bbe8b0d30.623064f74c8d2a39.51191cba889a3fac.74b23c8aa370b8ba - 88dc33be1aef0f7e.192728e87ae5aee0.4ef3867aa7add996.5b9086db9f1c7512 - 41559fb7892c64c0 - --VDPPS_128_4of4(reg) -+VHADDPD_256(reg) - before - 99b9acf1361e02a9.878d3fd263cf78ec.0d12db4652548dd6.8c2c517787f4227e - bf07a8f3417c8b7a.6d066c049429ed47.e102c0767aab791e.83083e5c01f0597d -@@ -36699,12 +36699,12 @@ VDPPS_128_4of4(reg) - e6955d03e2b25282.5e7f16721c7ded72.98200e002c3e6b52.0cd46e903034846f - 565daab51e95efba - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 16123540c80a2bba.6d066c049429ed47.f043d2e58e75af63.e102c0767aab791e - bf07a8f3417c8b7a.6d066c049429ed47.e102c0767aab791e.83083e5c01f0597d - 108d8f2b46d43dde.16123540c80a2bba.f043d2e58e75af63.0f51c91630ac3bbf - e6955d03e2b25282.5e7f16721c7ded72.98200e002c3e6b52.0cd46e903034846f - 565daab51e95efba --VDPPS_128_4of4(mem) -+VHADDPD_256(mem) - before - c9b8f87315da39cb.9e6d0fe9b0a10712.21178b86ab8ef19b.34e66e32ed92e996 - 41b0d4b5320f1ecf.945fa0484d2d9839.3ba81069914af160.1fe1f0e66ffe64dc -@@ -36714,11 +36714,11 @@ VDPPS_128_4of4(mem) - after - c9b8f87315da39cb.9e6d0fe9b0a10712.21178b86ab8ef19b.34e66e32ed92e996 - 41b0d4b5320f1ecf.945fa0484d2d9839.3ba81069914af160.1fe1f0e66ffe64dc -- 9a13ba6790415af2.24b80c8b54e240a4.88fc2205ebbbaaee.b75d8f8a4e0d19cf -+ c9b8f87315da39cb.41b0d4b5320f1ecf.34e66e32ed92e996.3ba81069914af160 - b0ab26754c7ba85f.aac34f20624d3cfe.e4e03c48d5f0d770.56a64789254c441c - 5a08144f9046206f - --VDPPS_256_1of4(reg) -+VHSUBPS_128(reg) - before - 1dcff3482c87ea73.5f4695cb81c9c642.82ce667212f9c8f4.2a1fda1c6af23513 - fd46dfe0959cded5.83ae82564c386dc9.08234bed01721f32.3887786fc6cf8003 -@@ -36726,12 +36726,12 @@ VDPPS_256_1of4(reg) - 8077ce9e3b6f3362.9917c6b612a64d6d.8edf740f0afd2234.19fea53f4548cc77 - a4a52c94a0fc4655 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ca457f6369e3922c.88234825c6cf8003 - fd46dfe0959cded5.83ae82564c386dc9.08234bed01721f32.3887786fc6cf8003 - 54bad48365103841.f7b06900c8d35c1e.9810fcfeca457f63.e9e3922c0693746b - 8077ce9e3b6f3362.9917c6b612a64d6d.8edf740f0afd2234.19fea53f4548cc77 - a4a52c94a0fc4655 --VDPPS_256_1of4(mem) -+VHSUBPS_128(mem) - before - 65a4a31733bb9b2f.dbc9c99bb1460ce4.44b1166545befde3.46ddb08d5c274450 - 3ac787b418908a31.c2fcc2e86320ff75.d448d4f87d2628ac.1b56aae55c4e2364 -@@ -36741,11 +36741,11 @@ VDPPS_256_1of4(mem) - after - 65a4a31733bb9b2f.dbc9c99bb1460ce4.44b1166545befde3.46ddb08d5c274450 - 3ac787b418908a31.c2fcc2e86320ff75.d448d4f87d2628ac.1b56aae55c4e2364 -- feda52576e87cd88.925cb4efee8947bf.24aa7c5ad7ea89f4.6b956081a7fef91c -+ 0000000000000000.0000000000000000.4592b84a5c274450.7d2628ac5c4e2364 - 8ca882ed4eac2160.a5349b1eed0e226e.12a18a796f17dde5.91e8cdcfd9c30223 - e999ed3a8d2a7c26 - --VDPPS_256_1of4(reg) -+VHSUBPS_128(reg) - before - cef5bd2e5fbea1d0.c2fe9260d70c42e4.58d173e0fd3ac92f.78fa7a4060b8e0ae - 9e493717ec0caece.7aa9fe9e22b2eb41.077f39a1b9997bae.3480c99bc6d94e79 -@@ -36753,12 +36753,12 @@ VDPPS_256_1of4(reg) - 6b031e78a5036f74.e429db277401c835.c93e7cd0a622eb94.1a4871bd63cd59c7 - fc20c25dd2b76fa2 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.bdb87296be87e273.b9997baec6d94e79 - 9e493717ec0caece.7aa9fe9e22b2eb41.077f39a1b9997bae.3480c99bc6d94e79 - b4de5961d09fdfcb.927343924daad9a3.0e8ae8cdbdb87296.2001f276be87e273 - 6b031e78a5036f74.e429db277401c835.c93e7cd0a622eb94.1a4871bd63cd59c7 - fc20c25dd2b76fa2 --VDPPS_256_1of4(mem) -+VHSUBPS_128(mem) - before - a45661402752df2f.210383c80ac59c75.4e96444bb2c27424.95e7f11610632253 - ecb6cb547ca9669b.302982be98709f79.aa88f9e923fa989b.ccd0430b96085380 -@@ -36768,11 +36768,11 @@ VDPPS_256_1of4(mem) - after - a45661402752df2f.210383c80ac59c75.4e96444bb2c27424.95e7f11610632253 - ecb6cb547ca9669b.302982be98709f79.aa88f9e923fa989b.ccd0430b96085380 -- b20c7b83efc9c012.f6c219c4ee90b72d.d6c977ede4b3f1c7.cb476f1cd49cb9c7 -+ 0000000000000000.0000000000000000.ce96444b15e80d7a.2a88fdd34cd0430b - d024edbb9cbda9bf.cd1b4347a5b11e3d.ac27384311fb3bd3.ee9670b367ac91d3 - 910a423eebc21751 - --VDPPS_256_1of4(reg) -+VHSUBPS_128(reg) - before - 0fefe128fb6d86ec.23c99ee79e91dccf.137efcb45c601154.096cbad7c5de31ec - c6914adc33361b51.88c908f21251166e.22374176ac29cc1f.ca6578961c67913e -@@ -36780,12 +36780,12 @@ VDPPS_256_1of4(reg) - 4c3b66578d57a628.f305fc5abec78e06.0fdf5ba98d35897f.e3a29841259c793b - f47ff3050f5f7a3e - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.d8940cf949deee6a.ac29cc2a4a657896 - c6914adc33361b51.88c908f21251166e.22374176ac29cc1f.ca6578961c67913e - 113b77c830ab122c.d9eea9ca130a13c7.58940cf933968a49.c9deee6a33a214f4 - 4c3b66578d57a628.f305fc5abec78e06.0fdf5ba98d35897f.e3a29841259c793b - f47ff3050f5f7a3e --VDPPS_256_1of4(mem) -+VHSUBPS_128(mem) - before - d83f7aa40cfad42a.d3db13f5e7c715f1.b2da7d8f2e954559.a46629f25592026c - 6cafa9093976432b.0268780ed9859835.f239a9537f7ff1e9.74737240273734bd -@@ -36795,11 +36795,11 @@ VDPPS_256_1of4(mem) - after - d83f7aa40cfad42a.d3db13f5e7c715f1.b2da7d8f2e954559.a46629f25592026c - 6cafa9093976432b.0268780ed9859835.f239a9537f7ff1e9.74737240273734bd -- 8a9bfc20b1e1836c.342e930f00206e9e.90edfa93ce9151e5.d95333ffa0b2591e -+ 0000000000000000.0000000000000000.32db12d45592026c.7f7ff1e9f4737240 - 0fcff0d591464f1a.c7795e62f721d2d8.66c4ee3c37d81f77.3052679b5c8fae3a - d5bc0a80f6586fbe - --VDPPS_256_2of4(reg) -+VHSUBPS_256(reg) - before - 24dc181b0a9bd855.d7170014f4b26460.1694d7745b16ff90.51880038d55f18cb - 7a008dd635e424ac.be3fa8c9f7307d6b.7ccdfab2c78a3272.2d06ad75c432f80f -@@ -36807,12 +36807,12 @@ VDPPS_256_2of4(reg) - a67f9d613eb55749.595db0454b93af7f.02c42a5e29219862.2860c45e07ed5c11 - ffd427e393ee5828 - after -- 6d8ce0e300000000.6d8ce0e300000000.6015b1c900000000.6015b1c900000000 -+ b172661fb5cc5867.fa008dd6f7307d6b.d846568a560a6fdd.fccdfab2c432f80f - 7a008dd635e424ac.be3fa8c9f7307d6b.7ccdfab2c78a3272.2d06ad75c432f80f - 3172661f12be906f.a01264e0b5cc5867.576ec186d80aa629.d60a6fdd215d7b6c - a67f9d613eb55749.595db0454b93af7f.02c42a5e29219862.2860c45e07ed5c11 - ffd427e393ee5828 --VDPPS_256_2of4(mem) -+VHSUBPS_256(mem) - before - 37311458e06a2bdd.357331085455b7e7.c5ec09e5d4903fe0.d81b30a5565b44c9 - ab4408a90b6f905d.3a9a1b80f12beaf4.c08be9aa6ccfc3b5.37bfcfc7fc44e609 -@@ -36822,11 +36822,11 @@ VDPPS_256_2of4(mem) - after - 37311458e06a2bdd.357331085455b7e7.c5ec09e5d4903fe0.d81b30a5565b44c9 - ab4408a90b6f905d.3a9a1b80f12beaf4.c08be9aa6ccfc3b5.37bfcfc7fc44e609 -- 39da7dc22f0944d4.113f5835b0c22d1d.2606cf82305df82b.79fc0330b769b9cf -+ e06a2bdd5455b7e7.2b4408a9f12beaf4.d4903fe05828e4f2.6ccfc3b5fc44e609 - bcbdf1906942036e.16b0e5932ea6bb0e.d22934583b459a6e.fc1dc94c2256fbc6 - 1a701c87d995e59b - --VDPPS_256_2of4(reg) -+VHSUBPS_256(reg) - before - 313ff84d79b4b6f9.10badffdd4288855.a537bd060664d172.a2bf9518aa9365a9 - 9bd7590b9d3fa88d.119cc4f68cc791b8.1921dcfad587abf6.71956fad99541409 -@@ -36834,12 +36834,12 @@ VDPPS_256_2of4(reg) - dc929b1be3c5e206.89435f3e565c199d.254ee016c52e9a0c.7b327b0c645c11e6 - 6f8fa5ac79bcd7bb - after -- 4090781700000000.4090781700000000.cca5e6d600000000.cca5e6d600000000 -+ e2c0f803ae29d8c1.9d24bd6c919cf6da.50ba3edc2393653d.d587abf6f1956fad - 9bd7590b9d3fa88d.119cc4f68cc791b8.1921dcfad587abf6.71956fad99541409 - b5843b2be2c0f803.9a311a68ae29d8c1.d0ba3edc369c8545.1b783d05239365b9 - dc929b1be3c5e206.89435f3e565c199d.254ee016c52e9a0c.7b327b0c645c11e6 - 6f8fa5ac79bcd7bb --VDPPS_256_2of4(mem) -+VHSUBPS_256(mem) - before - d25d38d27dbe7166.6a4c74453ddaa243.b9a00e639f6c1277.7429bd161fc927f7 - 7f67af6a8d6e9c10.bc00c2178b897365.0512a3c5a5637d7c.1996d146e0f968b1 -@@ -36849,11 +36849,11 @@ VDPPS_256_2of4(mem) - after - d25d38d27dbe7166.6a4c74453ddaa243.b9a00e639f6c1277.7429bd161fc927f7 - 7f67af6a8d6e9c10.bc00c2178b897365.0512a3c5a5637d7c.1996d146e0f968b1 -- 54788661c4d914e8.2ef881fc6a609219.4b669a4f854f17d8.6fe31814a34b99e6 -+ 7dbe7166ea4c7445.ff67af6a3c00c217.39a00e63f429bd16.a5637d7ce0f968b1 - 2b5d39a13e0a9418.1c81ae6075eb3a0b.666770ed5b3c9bb6.d45a8eeb044af544 - a3483037a083b975 - --VDPPS_256_2of4(reg) -+VHSUBPS_256(reg) - before - 37f9f96412812125.e2e24418180dd9cc.e3e744af49b4a9e6.31e3a08b4235c642 - eeb8e5def7d06801.53d324b16eef9f31.dd763f5581491957.8aa5a615564654aa -@@ -36861,12 +36861,12 @@ VDPPS_256_2of4(reg) - 3194176a889286ec.d72950f9fc7e9dbd.dd3e54568e06eeaa.5129259e77e189b8 - 79849575bc83a7b7 - after -- 7f80000000000000.7f80000000000000.cb4275dc00000000.cb4275dc00000000 -+ ebfdcbb5dccd6bbb.f7d067d36eef9f31.e77a9bbecb78fe78.5d763f55564654aa - eeb8e5def7d06801.53d324b16eef9f31.dd763f5581491957.8aa5a615564654aa - 23d3f012ebfdcbb5.5cfc54585bbba273.677a9bbeb936c60a.4b78fe78b47b0118 - 3194176a889286ec.d72950f9fc7e9dbd.dd3e54568e06eeaa.5129259e77e189b8 - 79849575bc83a7b7 --VDPPS_256_2of4(mem) -+VHSUBPS_256(mem) - before - 9d55cce79e6e1841.764955536d1ed553.a22594806c424d3c.9b0f678a9c45cbe3 - 9b6846e23aac9781.4c3ca63a332af396.97bd9dd9c7166e1b.fd3acfc47e7f9a62 -@@ -36876,11 +36876,11 @@ VDPPS_256_2of4(mem) - after - 9d55cce79e6e1841.764955536d1ed553.a22594806c424d3c.9b0f678a9c45cbe3 - 9b6846e23aac9781.4c3ca63a332af396.97bd9dd9c7166e1b.fd3acfc47e7f9a62 -- 4d887d51ab4be2a4.11ba068978441d60.93bde6f02a03bb87.5f098872d04197d3 -+ 9e38a507f649552b.3aac9781cc3ca63a.6c424d3c9c21f200.c7166e1b7e97272a - 9083ef200e57b3d5.1f0f71aed8f88f5d.73f1ebb1b017f2ac.1dc98efe2f16fde1 - 93c5ded6378a0939 - --VDPPS_256_3of4(reg) -+VHSUBPD_128(reg) - before - 1d4b7365822af787.4023163a7edbc641.d386e414eed0843b.11252809765dccb5 - 16a54817af810376.3a35708e17e3d914.8a6d5a27575a39a4.4a2519e298e208cf -@@ -36888,12 +36888,12 @@ VDPPS_256_3of4(reg) - ca09a894198663e9.77dfab8c37b0ea9d.6cb63f048fb2d3c8.feb809cc5dd691e5 - 30e3ffb3385d5738 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.fabc3b2a30b16026.4a2519e298e208cf - 16a54817af810376.3a35708e17e3d914.8a6d5a27575a39a4.4a2519e298e208cf - dc215c58571c68b3.58857905f67ca679.9e0ecf53ae22ea44.fabc3b2a30b16026 - ca09a894198663e9.77dfab8c37b0ea9d.6cb63f048fb2d3c8.feb809cc5dd691e5 - 30e3ffb3385d5738 --VDPPS_256_3of4(mem) -+VHSUBPD_128(mem) - before - 6d0a99cde0536e4c.3caa2a378e4b2fc5.730e840ff58e61ab.51b1a6a697982fdc - 91f954056ec3914d.8d4fddae55f70af3.28e07f7b4c1fc6d0.a74b01a562603b2b -@@ -36903,11 +36903,11 @@ VDPPS_256_3of4(mem) - after - 6d0a99cde0536e4c.3caa2a378e4b2fc5.730e840ff58e61ab.51b1a6a697982fdc - 91f954056ec3914d.8d4fddae55f70af3.28e07f7b4c1fc6d0.a74b01a562603b2b -- 787caa4700ba7d67.1b46bd6307172e1e.721f18ba5971d638.cbd04b6e8b943362 -+ 0000000000000000.0000000000000000.f30e840ff58e61ab.a8e07f7b52e03029 - fe5e197fb243edc5.41dac6c44237d8f3.2d98cbba388f4d0e.198b806baec2522c - edca9d0a6876d636 - --VDPPS_256_3of4(reg) -+VHSUBPD_128(reg) - before - a3d79cb5543af82c.ff6c1d9a9f6a9f93.5a56f43ba2e1431d.351715650386e67f - 97ff7bda0f9cf7b9.57733082e43c4dfe.c4074436c2a3ad49.666870a9d9615eb6 -@@ -36915,12 +36915,12 @@ VDPPS_256_3of4(reg) - aad0c63f6069784a.7c97776de30e8f5b.f7383765b49d6855.b3af4fa910f4db29 - 873dc93daac457bc - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.5a39b1203f085022.666870a9d9615eb6 - 97ff7bda0f9cf7b9.57733082e43c4dfe.c4074436c2a3ad49.666870a9d9615eb6 - 268e35e434280d8a.e23dd0249cc4b432.da39b1203f085022.9c575a71d42c71e0 - aad0c63f6069784a.7c97776de30e8f5b.f7383765b49d6855.b3af4fa910f4db29 - 873dc93daac457bc --VDPPS_256_3of4(mem) -+VHSUBPD_128(mem) - before - f4ce4619bda8a3c6.80102b572eeb71a6.014da348d6279ba3.7950d271bded338e - d62c412a65ad7872.039c5f983b3a374a.4c2ad0a0911a9439.bacc7fb0f784eb78 -@@ -36930,11 +36930,11 @@ VDPPS_256_3of4(mem) - after - f4ce4619bda8a3c6.80102b572eeb71a6.014da348d6279ba3.7950d271bded338e - d62c412a65ad7872.039c5f983b3a374a.4c2ad0a0911a9439.bacc7fb0f784eb78 -- 0824365abfde95ed.91be5d6e22e304e1.3bfc78632ef33647.17fa398efdefcdc0 -+ 0000000000000000.0000000000000000.7950d271bded338e.cc2ad0a0911a9439 - 6881a197e747b463.85c3244680711518.a98d197cccbf3cfa.ed24fc776cb91412 - 9697c4d7e06efe19 - --VDPPS_256_3of4(reg) -+VHSUBPD_128(reg) - before - 709f8e1bf39bc581.d111ffcbf8f592ff.3bf7ad8af071a69a.72aa2ed78589647d - d58754ad44cba5f8.1f9ecae40ff3ebee.0fa6f5a80e6df214.711f3360755d67fd -@@ -36942,12 +36942,12 @@ VDPPS_256_3of4(reg) - b32cc9700a65a4bd.d9e39c71bc10fc73.80a4b41ec78fae9f.8641fead6c55f5a3 - 5285bc48ab90f721 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.dd1cf90a77f43632.711f3360755d67fd - d58754ad44cba5f8.1f9ecae40ff3ebee.0fa6f5a80e6df214.711f3360755d67fd - 229d14fb6c8adc27.2df680cc474d7a5b.5d1cf90a77f43632.84b8a403b94804a6 - b32cc9700a65a4bd.d9e39c71bc10fc73.80a4b41ec78fae9f.8641fead6c55f5a3 - 5285bc48ab90f721 --VDPPS_256_3of4(mem) -+VHSUBPD_128(mem) - before - c6525ac19106c64b.e57f7078b7e73a64.fd329bbe8b472d61.d68c234f99cc9607 - bc7254053bc21d4e.12e3037f129cdac9.77aef79fd0fec952.ba1e400889362918 -@@ -36957,11 +36957,11 @@ VDPPS_256_3of4(mem) - after - c6525ac19106c64b.e57f7078b7e73a64.fd329bbe8b472d61.d68c234f99cc9607 - bc7254053bc21d4e.12e3037f129cdac9.77aef79fd0fec952.ba1e400889362918 -- 12b226ffc4d0b955.97a480f1b411bf97.22252e00a5428b72.88a709b7345aa47c -+ 0000000000000000.0000000000000000.7d329bbe8b472d61.f7aef79fd0fec952 - a2de4d9a483d568d.d00ee23a3bd1267b.d962bbce291e30ec.9b7378c735c342df - 51ce8ca529fd41ee - --VDPPS_256_4of4(reg) -+VHSUBPD_256(reg) - before - 04033ebbab94db55.4ac144c4e414b022.196c25c643684b20.7a301bf3769f74ed - 12608b7658154dbf.e4298768b462823f.ce0c460167636933.df5cc85ca8d012a1 -@@ -36969,12 +36969,12 @@ VDPPS_256_4of4(reg) - abbde88ca103a84f.62b4e2ce5d9081c4.ec3d0e3574b28352.69fefeab2d724fd0 - 450c7e69b8fc66a3 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 552f7043cb0cd2d9.e4298768b462823f.e5b240f6dcbdc733.df5cc85ca8d012a1 - 12608b7658154dbf.e4298768b462823f.ce0c460167636933.df5cc85ca8d012a1 - d52f7043cb0cd2d9.4ee19272d3328911.4b383f58434dbd60.e5b240f6dcbdc733 - abbde88ca103a84f.62b4e2ce5d9081c4.ec3d0e3574b28352.69fefeab2d724fd0 - 450c7e69b8fc66a3 --VDPPS_256_4of4(mem) -+VHSUBPD_256(mem) - before - 56a73c1b9866c7d9.ee56efbf758809cc.fd6ff2696f882583.0d68ae06961ff7b6 - 799db5ade9bd2f9d.fc468246e42631fc.fcde3e2d2527327a.0a021b35441f5437 -@@ -36984,11 +36984,11 @@ VDPPS_256_4of4(mem) - after - 56a73c1b9866c7d9.ee56efbf758809cc.fd6ff2696f882583.0d68ae06961ff7b6 - 799db5ade9bd2f9d.fc468246e42631fc.fcde3e2d2527327a.0a021b35441f5437 -- 88b8640bc80c5a1c.2fd99b8f896a5e8d.39cd4207997864d7.3f5a52301a3fd782 -+ ee56efbf758809cc.fc468246e42635b3.7d6ff2696f882583.7cde3e2d2527327a - 60c5c521515f0382.e55a380501dfca29.91077ae4ea8877c3.08bb4e62b50abc42 - c1700b37b00c3f25 - --VDPPS_256_4of4(reg) -+VHSUBPD_256(reg) - before - c5c6851ba8d19bd4.dd9054db9fc2e8fa.78165414e711b27c.e05a63ae3262266d - 7209b87a38e60dfe.dce58d25cf42c2b1.455aec28d78d5233.039078538d122eff -@@ -36996,12 +36996,12 @@ VDPPS_256_4of4(reg) - 34863b5a922e226d.cb5cef1a42c74c8a.fea47c104890a87c.30d816dbee25398d - f38298962ba1b3e0 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 378fedebfcea50d2.f209b87a38e60dfe.d47635be18a44ba5.c55aec28d78d5233 - 7209b87a38e60dfe.dce58d25cf42c2b1.455aec28d78d5233.039078538d122eff - 2385a1c0fdd6d14d.378fedebfcea50d2.a870faad6edee5fa.d47635be18a44ba5 - 34863b5a922e226d.cb5cef1a42c74c8a.fea47c104890a87c.30d816dbee25398d - f38298962ba1b3e0 --VDPPS_256_4of4(mem) -+VHSUBPD_256(mem) - before - f94035dbed2276cd.005882b294793d0b.74160f9cbee47305.a1446dbb0030d766 - 1ede6b964db63d7e.e54672359e435ed3.0e8ac95f8b4d816e.ee9bc91c3249ad63 -@@ -37011,11 +37011,11 @@ VDPPS_256_4of4(mem) - after - f94035dbed2276cd.005882b294793d0b.74160f9cbee47305.a1446dbb0030d766 - 1ede6b964db63d7e.e54672359e435ed3.0e8ac95f8b4d816e.ee9bc91c3249ad63 -- 3e27b5b36968c61f.3e9e07504c19c170.75849a4ec60f32f2.41f48c9d7b686720 -+ 794035dbed2276cd.e54672359e435ed3.f4160f9cbee47305.ee9bc91c3249ad63 - 35e8901f5d45cbde.66aa3e6e3c85a18f.85d0fd548a3541bc.f69cb3ac76174149 - 69df39b4c0e47789 - --VDPPS_256_4of4(reg) -+VHSUBPD_256(reg) - before - f6091a20f45b448d.dfed76c4445809e4.bbb712fb07163bdc.1a3a6e5ff4cb6bf9 - f966525eaf07e500.1802e5903aad3b60.97117f624b55cb02.108d695a1fde6cd5 -@@ -37023,12 +37023,12 @@ VDPPS_256_4of4(reg) - d1e8b8fd282e93e6.a68c4c49c64f6e64.58db1573ac12bb8b.8e22eed12aa8e118 - cffb70244277ced7 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 4e42ddd98c74968f.7966525eaf07e500.d8038211a3d08cad.17117f624b55cb02 - f966525eaf07e500.1802e5903aad3b60.97117f624b55cb02.108d695a1fde6cd5 - ce42ddd98c74968f.bcf3586d5c511e7c.58038211a3d08cad.43966a312878ff7b - d1e8b8fd282e93e6.a68c4c49c64f6e64.58db1573ac12bb8b.8e22eed12aa8e118 - cffb70244277ced7 --VDPPS_256_4of4(mem) -+VHSUBPD_256(mem) - before - e1ee6c178bf381e5.5ea6de371ec217b0.b4983b0f93b3e745.f5e336f502a89446 - a0c65e972228b86d.d1c64bf10bbb5f9a.c1e4a3abdf8a444b.8969e001401d538a -@@ -37038,11 +37038,11 @@ VDPPS_256_4of4(mem) - after - e1ee6c178bf381e5.5ea6de371ec217b0.b4983b0f93b3e745.f5e336f502a89446 - a0c65e972228b86d.d1c64bf10bbb5f9a.c1e4a3abdf8a444b.8969e001401d538a -- e751c38e22212d9d.8695fc988aa6a64f.a93dff09c7df42a1.72b70f0402fd3304 -+ 61ee6c178bf381e6.d1c64bf10bbb5f9a.f5e336f502a89446.41e4a3abdf8a444b - 945916eaa7ea9c9e.d95feb99370d2a7c.476dcb1566be9d74.0a19c06be5d57160 - aeddeda084304949 - --VHADDPS_128(reg) -+VEXTRACTPS_0x0(reg) - before - ba4e94117c9af66c.82acd396ce8fc39f.266f165eaf7f25cd.794083bbd93411f0 - 8bb7b02968a0b574.8c14767db31d5cca.c81378558e85d4ed.1a84a4e73b4c5940 -@@ -37050,12 +37050,12 @@ VHADDPS_128(reg) - e7a538fd8ead59e6.69555fb12421d64f.8042d286ee823d4c.188b0d823e93580e - 2ee64fc917da86e4 - after -- 0000000000000000.0000000000000000.6fad7288a9123291.c81378553b4c5940 -+ ba4e94117c9af66c.82acd396ce8fc39f.266f165eaf7f25cd.794083bbd93411f0 - 8bb7b02968a0b574.8c14767db31d5cca.c81378558e85d4ed.1a84a4e73b4c5940 - 7b663e53e5cdc20e.905e7b8d719f244b.1d950de96fad7288.0504a886a9123291 - e7a538fd8ead59e6.69555fb12421d64f.8042d286ee823d4c.188b0d823e93580e -- 2ee64fc917da86e4 --VHADDPS_128(mem) -+ 000000003b4c5940 -+VEXTRACTPS_0x0(mem) - before - 22e1e8454ff4793e.2bc19c9200cdb5a7.f2c79dd5e9b02f02.4c66c198a8916ee3 - d24856e402ebed4a.a306657ed6b813fe.097fb1e6db57eb8f.df4dd88b386544f9 -@@ -37063,13 +37063,13 @@ VHADDPS_128(mem) - d18a9e384ca64721.9f3a170c1f20c41c.4def4c7ab91e7ce9.c6946cc44c8ccb55 - d38be0e308f8f4f2 - after -- 22e1e8454ff4793e.2bc19c9200cdb5a7.f2c79dd5e9b02f02.4c66c198a8916ee3 -+ 22e1e8454ff4793e.2bc19c9200cdb5a7.f2c79dd5e9b02f02.4c66c198386544f9 - d24856e402ebed4a.a306657ed6b813fe.097fb1e6db57eb8f.df4dd88b386544f9 -- 0000000000000000.0000000000000000.f2c79e014c66c198.db57eb8fdf4dd88b -+ 18e714914dce9e31.abbf8f2eacfbaf96.884817ce1722c623.944312cb3b8afa3b - d18a9e384ca64721.9f3a170c1f20c41c.4def4c7ab91e7ce9.c6946cc44c8ccb55 - d38be0e308f8f4f2 - --VHADDPS_128(reg) -+VEXTRACTPS_0x0(reg) - before - 15756c920a5ab0bf.dafc70c51a81a546.dcc1f785cbb5903c.3240cad7db56c80f - ea9e0b3eef3c3c68.0d0a0724d36a74cc.bba12d064b464da1.14070fcf9cd767be -@@ -37077,12 +37077,12 @@ VHADDPS_128(reg) - b9dd723fd0b5b4fb.652a7008799753a8.d79c89cc38898cec.4026dc4564e18d6d - 41175b9aa5828cc5 - after -- 0000000000000000.0000000000000000.3b5e37f8d0109650.4b464da19cd7677a -+ 15756c920a5ab0bf.dafc70c51a81a546.dcc1f785cbb5903c.3240cad7db56c80f - ea9e0b3eef3c3c68.0d0a0724d36a74cc.bba12d064b464da1.14070fcf9cd767be - ac52b954522cd498.4780dd41946d6fde.9b26b4f93b5e37f8.d010965015ac1424 - b9dd723fd0b5b4fb.652a7008799753a8.d79c89cc38898cec.4026dc4564e18d6d -- 41175b9aa5828cc5 --VHADDPS_128(mem) -+ 000000009cd767be -+VEXTRACTPS_0x0(mem) - before - b0ad913bf39ccd57.6b8b336b0464183f.41d43c669df3dc58.cb4fa6eadd53862a - 67b5f9146b3a0e4f.1fa7f7448bc43b0e.b84abb451c8ec618.d38a09bfc749615e -@@ -37090,13 +37090,13 @@ VHADDPS_128(mem) - 204b501e46347b24.fe5d78adffc8b0fe.e8c9c73b9daeab79.8fcc8e3ed8e7ae56 - fb6aa8c038a79772 - after -- b0ad913bf39ccd57.6b8b336b0464183f.41d43c669df3dc58.cb4fa6eadd53862a -+ b0ad913bf39ccd57.6b8b336b0464183f.41d43c669df3dc58.cb4fa6eac749615e - 67b5f9146b3a0e4f.1fa7f7448bc43b0e.b84abb451c8ec618.d38a09bfc749615e -- 0000000000000000.0000000000000000.41d43c66dd53862a.b84abb45d38a09bf -+ 43fb0f11286909db.327fba3600615a14.a6576b931373cc14.4b9badb792f65b33 - 204b501e46347b24.fe5d78adffc8b0fe.e8c9c73b9daeab79.8fcc8e3ed8e7ae56 - fb6aa8c038a79772 - --VHADDPS_128(reg) -+VEXTRACTPS_0x0(reg) - before - eac1f8a94bc25234.da703627e2a72059.e08e2e1525847b78.586a4b28d74c1f73 - ba1d7965b0c41a48.4d383f1918cfb3a4.345ed6da0e21f52d.d3077348dc57e42d -@@ -37104,12 +37104,12 @@ VHADDPS_128(reg) - 6913fe07d9afc413.cedca864bf6b962e.a30af22c9630e8fa.5a65a0ceb9ea4f93 - 1ebd9d0dc8896d97 - after -- 0000000000000000.0000000000000000.57233415c9deb5d4.345ed6dadc57e44f -+ eac1f8a94bc25234.da703627e2a72059.e08e2e1525847b78.586a4b28d74c1f73 - ba1d7965b0c41a48.4d383f1918cfb3a4.345ed6da0e21f52d.d3077348dc57e42d - c6ca2761003a2c59.556de7de03b6f132.57186e68552c5aca.356cbb86c9deb5d4 - 6913fe07d9afc413.cedca864bf6b962e.a30af22c9630e8fa.5a65a0ceb9ea4f93 -- 1ebd9d0dc8896d97 --VHADDPS_128(mem) -+ 00000000dc57e42d -+VEXTRACTPS_0x0(mem) - before - 5d422e2d14c6cd0c.0145fbc5d7b01e24.9451ff9669f75dc4.757e5c906eb9d96a - f3bed01bb6ae291d.e9ad180695c87536.8398695f1c680322.29c2aa0278546ac6 -@@ -37117,13 +37117,13 @@ VHADDPS_128(mem) - 94ce331272acc7c5.1849a7c0c26e0d0e.4ccb636b0f27dce0.a7e5debd94ee5bf0 - 295cbedede043316 - after -- 5d422e2d14c6cd0c.0145fbc5d7b01e24.9451ff9669f75dc4.757e5c906eb9d96a -+ 5d422e2d14c6cd0c.0145fbc5d7b01e24.9451ff9669f75dc4.757e5c9078546ac6 - f3bed01bb6ae291d.e9ad180695c87536.8398695f1c680322.29c2aa0278546ac6 -- 0000000000000000.0000000000000000.69f75dc4757e625f.1c68032278546ac6 -+ bcfefdc4cc4c3ef7.7c955335af8306f5.777d61adf5ca4472.1b20d6ed518cd7b9 - 94ce331272acc7c5.1849a7c0c26e0d0e.4ccb636b0f27dce0.a7e5debd94ee5bf0 - 295cbedede043316 - --VHADDPS_256(reg) -+VEXTRACTPS_0x1(reg) - before - fdd370bcca5d9bd8.57faedf3c3db81b4.171711126a14c52d.de4fec85878d869a - 7f94f2c3f582cee2.e14da751dbe428ef.d74a8b9742016bfd.09d676e87807ffc9 -@@ -37131,12 +37131,12 @@ VHADDPS_256(reg) - fd2853fc7665887c.b99c0d39d2b52cfc.050da4ebf3e17163.9a18823437694e3d - b76bfcf73c689bd8 - after -- fa010adfd7d378a4.7fd4f2c3e14dc3d6.e6c13b2bffe2039c.d74a8b977807ffc9 -+ fdd370bcca5d9bd8.57faedf3c3db81b4.171711126a14c52d.de4fec85878d869a - 7f94f2c3f582cee2.e14da751dbe428ef.d74a8b9742016bfd.09d676e87807ffc9 - 0bed3f5ffa010adf.0d95de1ad7d378a4.b22d13bbe6c13b2b.a92a7f7effa2039c - fd2853fc7665887c.b99c0d39d2b52cfc.050da4ebf3e17163.9a18823437694e3d -- b76bfcf73c689bd8 --VHADDPS_256(mem) -+ 0000000009d676e8 -+VEXTRACTPS_0x1(mem) - before - def167b12caca79a.b1922a07043a8764.c02faf9ae9950126.2d363a9104ed4850 - ea74415020402eaf.8377c1ea400d4244.fe1a4329377fb34c.84f4d21bb66ffd9e -@@ -37144,13 +37144,13 @@ VHADDPS_256(mem) - 20a52fe98a899b80.f0e11cec35dbd99b.8e282a82eaa39d3d.335ff4876b0bf010 - 42a37741a73ba78c - after -- def167b12caca79a.b1922a07043a8764.c02faf9ae9950126.2d363a9104ed4850 -+ def167b12caca79a.b1922a07043a8764.c02faf9ae9950126.2d363a9184f4d21b - ea74415020402eaf.8377c1ea400d4244.fe1a4329377fb34c.84f4d21bb66ffd9e -- def167b1b1922a07.ea744150400d4244.e99501262d363a91.fe1a4329b66ffd9e -+ b6c205bf3631eb42.ce221313c769f4c7.4e2942d2d980fe9a.679366f3a5f5ccfb - 20a52fe98a899b80.f0e11cec35dbd99b.8e282a82eaa39d3d.335ff4876b0bf010 - 42a37741a73ba78c - --VHADDPS_256(reg) -+VEXTRACTPS_0x1(reg) - before - f1acec8ff2132a19.03ea3cbc3656fa95.44fed8e325ee2f69.98e2752387f54d61 - 9cc64ddcea1fb863.3a5ca62359a4c4ac.26c74363332e30e0.4a25a1a3cb80ca31 -@@ -37158,12 +37158,12 @@ VHADDPS_256(reg) - 575dc8235000e0e1.18fc865e6ef08792.038818ae1b662673.12718aecba771988 - e1133f8e9dfa6466 - after -- 2bea8b17a3c9eb0b.ea1fb86359a4c4ac.fc2819ae7ffb2aec.332e30e0cb582bf9 -+ f1acec8ff2132a19.03ea3cbc3656fa95.44fed8e325ee2f69.98e2752387f54d61 - 9cc64ddcea1fb863.3a5ca62359a4c4ac.26c74363332e30e0.4a25a1a3cb80ca31 - a03d98942bea8b18.a3c9eb0b0d7eb4f2.f1865ad8fc2819aa.7fbb2aecd352cfda - 575dc8235000e0e1.18fc865e6ef08792.038818ae1b662673.12718aecba771988 -- e1133f8e9dfa6466 --VHADDPS_256(mem) -+ 000000004a25a1a3 -+VEXTRACTPS_0x1(mem) - before - c66dc4bd97e76ca0.1e72d9f6f6edf36d.77c0f3099906f9b9.b61879512d7792e8 - 9e4a9567c44aec64.51c7c877b83e0066.9ae2aff8a9cdc592.6884792ecde49ab5 -@@ -37171,13 +37171,13 @@ VHADDPS_256(mem) - 98c10cda2aa44734.6b652c370139f651.a0700153ea9b5e0d.351c474129076e05 - 09e00d511dd5b1e1 - after -- c66dc4bd97e76ca0.1e72d9f6f6edf36d.77c0f3099906f9b9.b61879512d7792e8 -+ c66dc4bd97e76ca0.1e72d9f6f6edf36d.77c0f3099906f9b9.b61879516884792e - 9e4a9567c44aec64.51c7c877b83e0066.9ae2aff8a9cdc592.6884792ecde49ab5 -- c66dc4bdf6edf36d.c44aec6451c7c877.77c0f309b6187913.a9cdc5926884792e -+ 46782e774130a1dc.4caa8f13327e4278.5f2e3518bb50a84a.741615af983b7a85 - 98c10cda2aa44734.6b652c370139f651.a0700153ea9b5e0d.351c474129076e05 - 09e00d511dd5b1e1 - --VHADDPS_256(reg) -+VEXTRACTPS_0x1(reg) - before - 4aaf63490f3080c4.72f2a97a9ab39999.0a459a4dc1fc579a.3a748f9753bba306 - 55d443979ca4175a.aed78344ad675437.8596d6c30c52a302.0a055bcf11bb3262 -@@ -37185,12 +37185,12 @@ VHADDPS_256(reg) - 3a5595e2f5098c52.bfecdc072ef4f5cc.7ebaa47cbae8e7d9.b7029ecbfe8d21f2 - 4d050d676476f87d - after -- 5fbeb151293c1624.55d44397aef46dcb.38a4da04eaf1e2e7.0c529e4b11bb336d -+ 4aaf63490f3080c4.72f2a97a9ab39999.0a459a4dc1fc579a.3a748f9753bba306 - 55d443979ca4175a.aed78344ad675437.8596d6c30c52a302.0a055bcf11bb3262 - 879daba65fbeb151.293c162480cf3439.38a4da0481c81433.eaf1e2e741a8c84c - 3a5595e2f5098c52.bfecdc072ef4f5cc.7ebaa47cbae8e7d9.b7029ecbfe8d21f2 -- 4d050d676476f87d --VHADDPS_256(mem) -+ 000000000a055bcf -+VEXTRACTPS_0x1(mem) - before - 89c6aba790700a1b.cb4700b7f911e10c.4db553d8d4e4521b.b5262f96534157a2 - 4511f2779e8513f8.97c0e5910763ef29.ad61f5828daa0853.383277c1e95ca137 -@@ -37198,13 +37198,13 @@ VHADDPS_256(mem) - b0747078cd36f91e.4b771104b412213e.5695b016aaea6f2d.925d2ff27a0db37c - 201497d1adbbf382 - after -- 89c6aba790700a1b.cb4700b7f911e10c.4db553d8d4e4521b.b5262f96534157a2 -+ 89c6aba790700a1b.cb4700b7f911e10c.4db553d8d4e4521b.b5262f96383277c1 - 4511f2779e8513f8.97c0e5910763ef29.ad61f5828daa0853.383277c1e95ca137 -- 90701050f911e10c.4511f27797c0e591.d4e44f46534157a2.ad61f582e95ca137 -+ 5eb160c3a9c4cf40.f80c41dcbc8af056.bcbd40f37653d3a0.632b786617c70147 - b0747078cd36f91e.4b771104b412213e.5695b016aaea6f2d.925d2ff27a0db37c - 201497d1adbbf382 - --VHADDPD_128(reg) -+VEXTRACTPS_0x2(reg) - before - 6b9bac704d5cfc06.17249e8027e94ebe.ec4d50768988be8e.57b5bfd7467b9727 - ce406a39f57c0ab4.6f8e66c9d3e88a4d.38d9fa9cda7703f1.9be9eb22651208b9 -@@ -37212,12 +37212,12 @@ VHADDPD_128(reg) - 4b0fd2fdce6a293c.62c0b6cb8efca6e8.3c4780b85af173a3.5cbc87069e85b458 - 91f3f078ef7767bc - after -- 0000000000000000.0000000000000000.fefdafe324bc7d10.38d9fa9cda7703f1 -+ 6b9bac704d5cfc06.17249e8027e94ebe.ec4d50768988be8e.57b5bfd7467b9727 - ce406a39f57c0ab4.6f8e66c9d3e88a4d.38d9fa9cda7703f1.9be9eb22651208b9 - a44dce9a41a75b37.947e453eeb4069f7.89690ce4416b2b14.fefdafe324bc7d10 - 4b0fd2fdce6a293c.62c0b6cb8efca6e8.3c4780b85af173a3.5cbc87069e85b458 -- 91f3f078ef7767bc --VHADDPD_128(mem) -+ 00000000da7703f1 -+VEXTRACTPS_0x2(mem) - before - 796e642334a05369.1dd274d03850b16f.b520355bd628fe4b.adc05486c2941649 - f0f961f5890c338a.78e2af7e1ae62f7b.69693edcdfd12d4c.382083b914e152b3 -@@ -37225,13 +37225,13 @@ VHADDPD_128(mem) - fb6fe3bad0d9c2db.3518e11bb74ffcd0.64eadf5fa6c7fedb.0cc4e3fee8a58081 - 0da10be8a236ea3e - after -- 796e642334a05369.1dd274d03850b16f.b520355bd628fe4b.adc05486c2941649 -+ 796e642334a05369.1dd274d03850b16f.b520355bd628fe4b.adc05486dfd12d4c - f0f961f5890c338a.78e2af7e1ae62f7b.69693edcdfd12d4c.382083b914e152b3 -- 0000000000000000.0000000000000000.b520355bd628fe4b.69693edcdfd12d4c -+ d26062d809c5c44c.b68b807310b7de0c.5a684d3ac602ee18.39b309bded62618c - fb6fe3bad0d9c2db.3518e11bb74ffcd0.64eadf5fa6c7fedb.0cc4e3fee8a58081 - 0da10be8a236ea3e - --VHADDPD_128(reg) -+VEXTRACTPS_0x2(reg) - before - 98947fe7b6a0dc6e.46f16186fb53e962.4fd7d0e2ab3bc271.62b96f389b2d19c0 - 09ea3a68c06f92be.91b45628a540f40e.6212483587066f9b.32a279b1c33ffaf4 -@@ -37239,12 +37239,12 @@ VHADDPD_128(reg) - 0cef769c296d396c.94289a9ee9a1a983.de2fc42a686a693d.b5f1ec34159802f8 - 1fef4c1679f79f20 - after -- 0000000000000000.0000000000000000.c816457ee73c3dfb.6212483587066f9b -+ 98947fe7b6a0dc6e.46f16186fb53e962.4fd7d0e2ab3bc271.62b96f389b2d19c0 - 09ea3a68c06f92be.91b45628a540f40e.6212483587066f9b.32a279b1c33ffaf4 - bcef39d55e2f48d9.b782408cebaba00a.c816457ee73c3dfb.af7079b737095fa3 - 0cef769c296d396c.94289a9ee9a1a983.de2fc42a686a693d.b5f1ec34159802f8 -- 1fef4c1679f79f20 --VHADDPD_128(mem) -+ 0000000087066f9b -+VEXTRACTPS_0x2(mem) - before - cb3817487e32f446.5736ef27bfb4a222.0372e14ab92ccba4.01a9c0a6a51b2f0c - 9496c9b64056bb97.f80f9fe4bc91bfa9.e22b8f7c7a5ac19a.8bcf345d3bdbcb15 -@@ -37252,13 +37252,13 @@ VHADDPD_128(mem) - ecc3cef56e869169.abab95a0583a04d4.5c1e152338cd1cb4.47537a2be0ba7383 - 3248421b27f0f741 - after -- cb3817487e32f446.5736ef27bfb4a222.0372e14ab92ccba4.01a9c0a6a51b2f0c -+ cb3817487e32f446.5736ef27bfb4a222.0372e14ab92ccba4.01a9c0a67a5ac19a - 9496c9b64056bb97.f80f9fe4bc91bfa9.e22b8f7c7a5ac19a.8bcf345d3bdbcb15 -- 0000000000000000.0000000000000000.0372e14ab9fad0d9.e22b8f7c7a5ac19a -+ 55d6dc4bdc6eb13e.4bc8823eba8fccaa.0b21222145374891.d9ef1fbac5377803 - ecc3cef56e869169.abab95a0583a04d4.5c1e152338cd1cb4.47537a2be0ba7383 - 3248421b27f0f741 - --VHADDPD_128(reg) -+VEXTRACTPS_0x2(reg) - before - f41a74f6366642e8.332b19a010ab1841.7605d278301ea4d1.b0efe4706f2bf830 - ea150b28aba78e25.08d93b36e1e802f5.07223731dec8e84d.e2600cf2055a9931 -@@ -37266,12 +37266,12 @@ VHADDPD_128(reg) - e2b5594230bb1b0f.c835f2d67adcef9b.ead467f72e9c4a75.5452534ac0601a70 - 4c6b6cf71c4e7106 - after -- 0000000000000000.0000000000000000.d03d08971768bbe2.e2600cf2055a9931 -+ f41a74f6366642e8.332b19a010ab1841.7605d278301ea4d1.b0efe4706f2bf830 - ea150b28aba78e25.08d93b36e1e802f5.07223731dec8e84d.e2600cf2055a9931 - 7085031d1f3f17a3.4598b0a4fb4a0bae.b94ebf38ffc40bf5.d03d08971768bbe2 - e2b5594230bb1b0f.c835f2d67adcef9b.ead467f72e9c4a75.5452534ac0601a70 -- 4c6b6cf71c4e7106 --VHADDPD_128(mem) -+ 00000000dec8e84d -+VEXTRACTPS_0x2(mem) - before - 9253cc8a483f7dd1.9cf308017aa6d415.6b7c7fb97baa69e6.f40229db08dee178 - 03d7f0ef603efafc.fa890bc7988d7f60.0b39d23819c036bc.3522035128150cab -@@ -37279,13 +37279,13 @@ VHADDPD_128(mem) - d7e376e0c1983525.12f0031ac17c9a77.b344bab99ef6b8b7.c86bec9fac940c50 - d22cf44f48f35a19 - after -- 9253cc8a483f7dd1.9cf308017aa6d415.6b7c7fb97baa69e6.f40229db08dee178 -+ 9253cc8a483f7dd1.9cf308017aa6d415.6b7c7fb97baa69e6.f40229db19c036bc - 03d7f0ef603efafc.fa890bc7988d7f60.0b39d23819c036bc.3522035128150cab -- 0000000000000000.0000000000000000.f40229db08dee178.3522035128150cab -+ 7cc355127f58a3b4.58c4600126fa589d.8538673e712b1148.0781f0c32bce06ba - d7e376e0c1983525.12f0031ac17c9a77.b344bab99ef6b8b7.c86bec9fac940c50 - d22cf44f48f35a19 - --VHADDPD_256(reg) -+VEXTRACTPS_0x3(reg) - before - 830f02419a782bc3.f103cf43430a6c7a.8458ee7d049c829b.722b4894bc2ee534 - 356214e03eaebcf7.a6efdd2920ba04e0.0a4a1f988ce84cb5.9fb78cbbe8dd54ec -@@ -37293,12 +37293,12 @@ VHADDPD_256(reg) - 108331d5ef5e0eb4.525a042a5d06458d.c1f840a3d9327579.aef1269dd9d6ecbc - 49377530d6378c2c - after -- d3721a7c75b5b882.356214e03eaebcf7.14b5021a3e12c30b.9fb78cbbe8dd54ec -+ 830f02419a782bc3.f103cf43430a6c7a.8458ee7d049c829b.722b4894bc2ee534 - 356214e03eaebcf7.a6efdd2920ba04e0.0a4a1f988ce84cb5.9fb78cbbe8dd54ec - 456f2598d2214964.d3721a7c75b5b882.001091d6f4eb3370.14b5021a3e12c30b - 108331d5ef5e0eb4.525a042a5d06458d.c1f840a3d9327579.aef1269dd9d6ecbc -- 49377530d6378c2c --VHADDPD_256(mem) -+ 000000000a4a1f98 -+VEXTRACTPS_0x3(mem) - before - c15269c050405f86.f0ea350333f04694.0071161ef5ba672d.ab4c296bd6474c7b - f210803763fe20f7.42f02c8f39632eaf.b984cd4458dcda8d.1959469b88b9f423 -@@ -37306,13 +37306,13 @@ VHADDPD_256(mem) - f0a0058ec6c65fcd.ac09e36dfe1efd48.bcce16d6f19ba13f.f0cd11de79ddab14 - 12cdb6cbf0a831b4 - after -- c15269c050405f86.f0ea350333f04694.0071161ef5ba672d.ab4c296bd6474c7b -+ c15269c050405f86.f0ea350333f04694.0071161ef5ba672d.ab4c296bb984cd44 - f210803763fe20f7.42f02c8f39632eaf.b984cd4458dcda8d.1959469b88b9f423 -- f0ea350333f04694.f210803763fe20f7.ab4c296bd6474c7b.b984cd4458dcda8d -+ b93b35832c7c8cab.62e112e39e4402b2.595fa387a37859da.676b959d8a11ab1d - f0a0058ec6c65fcd.ac09e36dfe1efd48.bcce16d6f19ba13f.f0cd11de79ddab14 - 12cdb6cbf0a831b4 - --VHADDPD_256(reg) -+VEXTRACTPS_0x3(reg) - before - 28b581cf8cff78ab.740b6a464ee9548a.7db39b97f47d5d1e.be9ca11a5f506de9 - 8dd26c55e86dbea3.2148e296dff0280d.2f2c37cf1cee5be0.3b97c04008a37b04 -@@ -37320,12 +37320,12 @@ VHADDPD_256(reg) - b8db989c51be3147.6567f8ae8eda5d18.a9bb0815743328d6.163fabe37c54483b - 2c856f3780cb7faf - after -- d223e86a96e79783.2148e296dff0280d.1fc0b28013fc3639.3b97c04008a37b04 -+ 28b581cf8cff78ab.740b6a464ee9548a.7db39b97f47d5d1e.be9ca11a5f506de9 - 8dd26c55e86dbea3.2148e296dff0280d.2f2c37cf1cee5be0.3b97c04008a37b04 - 9f7075cba07e3d48.d223e86a96e79783.1fc0b28013fc3639.0f89ef3408a085bb - b8db989c51be3147.6567f8ae8eda5d18.a9bb0815743328d6.163fabe37c54483b -- 2c856f3780cb7faf --VHADDPD_256(mem) -+ 000000002f2c37cf -+VEXTRACTPS_0x3(mem) - before - 2d27b71e2f0fe744.365fcf3497bad84c.b5e28f4ee4d635f7.296935fcdc206f62 - f5f0ff83a52e3c26.734718ff0dfe6c02.9e5e2736b3e7dc4d.fb1635a0e64e448a -@@ -37333,13 +37333,13 @@ VHADDPD_256(mem) - 492b8076592b9c7f.9e77ccdefa8a4d33.ab8c4f8e2e74870c.059ba0d0529f8f5d - f40d0233ebd97c60 - after -- 2d27b71e2f0fe744.365fcf3497bad84c.b5e28f4ee4d635f7.296935fcdc206f62 -+ 2d27b71e2f0fe744.365fcf3497bad84c.b5e28f4ee4d635f7.296935fc9e5e2736 - f5f0ff83a52e3c26.734718ff0dfe6c02.9e5e2736b3e7dc4d.fb1635a0e64e448a -- 365fcf3497bad84c.f5f0ff83a52e3943.b5e28f4ee4d635f7.fb1635a0e64e448a -+ 5faec451ff343a80.cde16d694f142a16.fca83e5218170e45.7b0d056d2f4ae6fa - 492b8076592b9c7f.9e77ccdefa8a4d33.ab8c4f8e2e74870c.059ba0d0529f8f5d - f40d0233ebd97c60 - --VHADDPD_256(reg) -+VEXTRACTPS_0x3(reg) - before - a6ac27039784e9ae.8e34b1ddcd211f4e.435631cba9ec1307.86d5d6d7120a02ce - 76c70cadf22d11f4.0a95d2727a227f1a.19ca969af9c4b63b.6b515017dfe33cb6 -@@ -37347,12 +37347,12 @@ VHADDPD_256(reg) - e09e033b22a78517.168fd5d7e971c558.c3a05592ea0c8579.bf0e0a31a594dcaa - e7e742e2d783ba0e - after -- c0a9ac9b975f31dd.76c70cadf22d11f4.7a1ff9b985a0727d.6b515017dfe33cb6 -+ a6ac27039784e9ae.8e34b1ddcd211f4e.435631cba9ec1307.86d5d6d7120a02ce - 76c70cadf22d11f4.0a95d2727a227f1a.19ca969af9c4b63b.6b515017dfe33cb6 - c0a9ac9b975f31dd.981a60227938780f.7a1ff9b985a0727d.35ca383cb10df1f0 - e09e033b22a78517.168fd5d7e971c558.c3a05592ea0c8579.bf0e0a31a594dcaa -- e7e742e2d783ba0e --VHADDPD_256(mem) -+ 0000000019ca969a -+VEXTRACTPS_0x3(mem) - before - 88225c3b62e64748.31f10df83090484b.5fbfaf7ee3d92321.519ba693c39229db - 7d8bd52862c93f85.11efc63e5da6b828.4e786904867b4e98.7e5ae827adc09b4e -@@ -37360,13 +37360,13 @@ VHADDPD_256(mem) - d716d16e33415eb7.ea1c3715818a8987.92b06e59309df93a.285730b82242d819 - 5d2d2e8de5ae1bc8 - after -- 88225c3b62e64748.31f10df83090484b.5fbfaf7ee3d92321.519ba693c39229db -+ 88225c3b62e64748.31f10df83090484b.5fbfaf7ee3d92321.519ba6934e786904 - 7d8bd52862c93f85.11efc63e5da6b828.4e786904867b4e98.7e5ae827adc09b4e -- 31f10df83090484b.7d8bd52862c93f85.5fbfaf7ee3d92321.7e5ae827adc09b4e -+ a4ed2895f4395df1.dbe42b7944750f58.c1847f53eb6301e7.a72a18ba4322177e - d716d16e33415eb7.ea1c3715818a8987.92b06e59309df93a.285730b82242d819 - 5d2d2e8de5ae1bc8 - --VHSUBPS_128(reg) -+VLDDQU_128(reg) - before - a2f80ea529f21c3a.f4d04c9f3cedfe04.9ce3e67eb1706462.9fc8b0017136f2be - 5303ca6c89991619.d5e816152b4af804.4c8434206fb4da95.c298c337c939a89f -@@ -37374,12 +37374,12 @@ VHSUBPS_128(reg) - 690dcab80e40e8d0.5762837c2845edca.15889fc0078389b1.be8f4afd30ae3926 - 4e4eb56576388d24 - after -- 0000000000000000.0000000000000000.58df8e8e59ebd5bd.6fb4da95c939a3d9 -+ a2f80ea529f21c3a.f4d04c9f3cedfe04.9ce3e67eb1706462.9fc8b0017136f2be - 5303ca6c89991619.d5e816152b4af804.4c8434206fb4da95.c298c337c939a89f - cc9b604fa12f4611.582aa9ba1a6309e2.554d1e6858e128cb.d9eb22e755b2d608 - 690dcab80e40e8d0.5762837c2845edca.15889fc0078389b1.be8f4afd30ae3926 - 4e4eb56576388d24 --VHSUBPS_128(mem) -+VLDDQU_128(mem) - before - 66f5e10b445d8d2f.86a307156b5938ff.af5c1f456efb60ea.e682b39519273bf3 - e05049dbb528f673.7fa910d15505714d.3de3fa030a911d6b.268756542958783c -@@ -37388,12 +37388,12 @@ VHSUBPS_128(mem) - 10cf733f68b3cdfc - after - 66f5e10b445d8d2f.86a307156b5938ff.af5c1f456efb60ea.e682b39519273bf3 -- e05049dbb528f673.7fa910d15505714d.3de3fa030a911d6b.268756542958783c -- 0000000000000000.0000000000000000.6efb60ea6682b395.bde3fa0329543d89 -+ 0000000000000000.0000000000000000.ffaf5c1f456efb60.eae682b39519273b -+ 992b69c2e6a5841b.b06de25768d0d064.dbc58ea11813e17c.2fe38468d4a27c38 - 6d51beaaf2e0f354.753a7a153f4791f0.66cc590bb38e6847.5ee23a3db5928595 - 10cf733f68b3cdfc - --VHSUBPS_128(reg) -+VLDDQU_128(reg) - before - 9ff72bda8a91911c.3990c281f6e6fe4a.2a5bd37676f5f09e.bac5d62df80d6df9 - 68a75e7ab7b90c9f.d7b2f3310ec26228.2b1de9e6aa67281a.b47c81f3029dadbd -@@ -37401,12 +37401,12 @@ VHSUBPS_128(reg) - 19ca26799f141b80.fcd3cad1e72e254d.80b53da477c4162a.0553531cd61dce2d - 150c7056d9252631 - after -- 0000000000000000.0000000000000000.76287610ed49e4c0.ab57b3ec347c81f3 -+ 9ff72bda8a91911c.3990c281f6e6fe4a.2a5bd37676f5f09e.bac5d62df80d6df9 - 68a75e7ab7b90c9f.d7b2f3310ec26228.2b1de9e6aa67281a.b47c81f3029dadbd - c829098b8ab67c32.2484cca85481db1a.d3cdb9d176287610.2ebdd749ed49e4c0 - 19ca26799f141b80.fcd3cad1e72e254d.80b53da477c4162a.0553531cd61dce2d - 150c7056d9252631 --VHSUBPS_128(mem) -+VLDDQU_128(mem) - before - 3ab2ade5116ea9f8.b8d5b3b093602636.3b686798e0d5fbed.8d2173c948c74317 - 501283b39a0413ad.0198ab9d0225d8ff.bd1221e95d831a26.565f56ad85be3a81 -@@ -37415,12 +37415,12 @@ VHSUBPS_128(mem) - aff5e70de1cf3269 - after - 3ab2ade5116ea9f8.b8d5b3b093602636.3b686798e0d5fbed.8d2173c948c74317 -- 501283b39a0413ad.0198ab9d0225d8ff.bd1221e95d831a26.565f56ad85be3a81 -- 0000000000000000.0000000000000000.e0d5fbed48c74317.5d831a26d65f56ad -+ 0000000000000000.0000000000000000.363b686798e0d5fb.ed8d2173c948c743 -+ 33f870ae91f1207d.505d0baa87ef6e88.5e9c73b07a433d23.36b9e2bdcc353715 - bf30eec111438b93.0171cd45be4b247d.fad1d9da52212210.8b7d1463b6b6767e - aff5e70de1cf3269 - --VHSUBPS_128(reg) -+VLDDQU_128(reg) - before - 006e5726e90ba882.d0867bd83705111c.7121efd944c43689.6d7ecf51022a831a - d934601a69f71474.42c593df1e446e44.fab66cd2b4e6df59.936fd202a5691d6d -@@ -37428,12 +37428,12 @@ VHSUBPS_128(reg) - 92d62e43420cbc95.b932506da1669b1e.cac768a3c457e9f3.684decc435b9ea9d - cfd2fbab5ae396d1 - after -- 0000000000000000.0000000000000000.797f409c57eaab35.7ab66cd2a5691d6d -+ 006e5726e90ba882.d0867bd83705111c.7121efd944c43689.6d7ecf51022a831a - d934601a69f71474.42c593df1e446e44.fab66cd2b4e6df59.936fd202a5691d6d - 9592fe55fd1eb1eb.f1bbb0c2e30b5d36.f97f409cab3e5c98.48705dda57eaab35 - 92d62e43420cbc95.b932506da1669b1e.cac768a3c457e9f3.684decc435b9ea9d - cfd2fbab5ae396d1 --VHSUBPS_128(mem) -+VLDDQU_128(mem) - before - 58ca067de3746bfe.2a4aea50d44e711b.75f7edcc7562e42a.c8d9df539cbec216 - e1038a25ec762450.ba3c30e84d6f0c2c.03d606cb7a0af384.5103a118cefe22ac -@@ -37442,12 +37442,12 @@ VHSUBPS_128(mem) - c000821e9b4dc9dc - after - 58ca067de3746bfe.2a4aea50d44e711b.75f7edcc7562e42a.c8d9df539cbec216 -- e1038a25ec762450.ba3c30e84d6f0c2c.03d606cb7a0af384.5103a118cefe22ac -- 0000000000000000.0000000000000000.f5867bb748d9df53.7a0af384d10b922d -+ 0000000000000000.0000000000000000.1b75f7edcc7562e4.2ac8d9df539cbec2 -+ 4547028f90f77ef2.9ff6fc784cfbc872.3e9a1457cc6a8658.c08faa5ef6a34662 - 6063eaa7eb033511.33c5486a6b7fe29a.0211945a898f57d3.71caf692b13969e3 - c000821e9b4dc9dc - --VHSUBPS_256(reg) -+VLDDQU_256(reg) - before - 097c48704f6aa0f8.0d23bf591aa505d9.d3f4122c4686964f.2a0503c2ca842221 - a88c46f2691d2be5.2a52fb9238e9a975.dcd155287a9c1f3e.9444dc7aad56a56d -@@ -37455,12 +37455,12 @@ VHSUBPS_256(reg) - 5793d83b42724bdc.20319d44b38860db.94c136835b27a378.9acebd8ac8bdbeb2 - efb2bcba376ccc02 - after -- 787a781262dbde12.691d2be538e9a975.28a607564e0f9ae4.7a9c1f3ead56a56d -+ 097c48704f6aa0f8.0d23bf591aa505d9.d3f4122c4686964f.2a0503c2ca842221 - a88c46f2691d2be5.2a52fb9238e9a975.dcd155287a9c1f3e.9444dc7aad56a56d - f87a781286f0a54c.92be1c3c62dbde12.a8a60dcca24eba12.1b989b6e4e0f9ae4 - 5793d83b42724bdc.20319d44b38860db.94c136835b27a378.9acebd8ac8bdbeb2 - efb2bcba376ccc02 --VHSUBPS_256(mem) -+VLDDQU_256(mem) - before - f40f16eab8268101.202364d9382c593e.b278fa9747fbeafd.fc6ccdb940b3161c - 87b3460666fa99da.ae76175804ac0b21.225fb0203c4039a3.3cf4ccdaed7f4ea9 -@@ -37469,12 +37469,12 @@ VHSUBPS_256(mem) - a5b11bf7c1d6f182 - after - f40f16eab8268101.202364d9382c593e.b278fa9747fbeafd.fc6ccdb940b3161c -- 87b3460666fa99da.ae76175804ac0b21.225fb0203c4039a3.3cf4ccdaed7f4ea9 -- 740f16ea382c593e.66fa99da2e761758.47fbeafd7c6ccdb9.3c4039a3ed7f4ea9 -+ a9f40f16eab82681.01202364d9382c59.3eb278fa9747fbea.fdfc6ccdb940b316 -+ 8268c8fa5ef1d0ba.5fd8ed24437d9d2f.4eb239caab6409fa.b1a53152ff1688cc - c3fb19b3bb19e2cc.8d95e2aa902c4a15.103d1383b272162e.b5caf88d12040030 - a5b11bf7c1d6f182 - --VHSUBPS_256(reg) -+VLDDQU_256(reg) - before - dda498fda817996e.2438b41b9a7d8a3d.96f8f35488444f7e.46ccb9366d771b6a - b9f06a096453329f.83eb152016298539.d44e1a8fc651e717.ca2aa8cff77dd5db -@@ -37482,12 +37482,12 @@ VHSUBPS_256(reg) - cdc3fde7caee2982.a6e219ad578b6380.63039f69867cc388.30874d64e9c2570b - c91dfc3789189721 - after -- 15e1418d4c2a8eeb.6453329f16298539.e7e04f8bf9245a3a.544e1a8ff77dd5db -+ dda498fda817996e.2438b41b9a7d8a3d.96f8f35488444f7e.46ccb9366d771b6a - b9f06a096453329f.83eb152016298539.d44e1a8fc651e717.ca2aa8cff77dd5db - 95e18d899117f8c2.bae0b8ac4c2a8eeb.a5e355c8e7e04f8b.79245a3a6c9300ad - cdc3fde7caee2982.a6e219ad578b6380.63039f69867cc388.30874d64e9c2570b - c91dfc3789189721 --VHSUBPS_256(mem) -+VLDDQU_256(mem) - before - 21b2e3a069a07c1d.bde2b791ab65ff8c.24bfb50e5459be24.6cfaf5e040b17fb7 - 14147f8ca567c228.c08ab5f2d107b68c.0e4107bb5e9f5b02.1a145198b00cbfc6 -@@ -37496,12 +37496,12 @@ VHSUBPS_256(mem) - a12a6b7e5f74ebea - after - 21b2e3a069a07c1d.bde2b791ab65ff8c.24bfb50e5459be24.6cfaf5e040b17fb7 -- 14147f8ca567c228.c08ab5f2d107b68c.0e4107bb5e9f5b02.1a145198b00cbfc6 -- 69a07c1d3de2b791.a567c228d107b68c.5459be24ecfaf5e0.5e9f5b02b00cbfc6 -+ c621b2e3a069a07c.1dbde2b791ab65ff.8c24bfb50e5459be.246cfaf5e040b17f -+ 7f0d4ae557772471.3406f576d7608c2d.41358ba09169f846.cb9cb1fd7218be61 - 3c6bc2999edf5f22.74a372895afcbb1c.9967bda90ac34f1e.d9e0107b2361b934 - a12a6b7e5f74ebea - --VHSUBPS_256(reg) -+VLDDQU_256(reg) - before - 7fc7bc72c1dc922f.28f8629393a82f67.dcad2997f5688004.f2a319c2e5ba1db3 - d00301c3e525e8b1.1f81a6bf55e0506e.c870140c452f1792.28b41cd83d5a1d34 -@@ -37509,12 +37509,12 @@ VHSUBPS_256(reg) - 3687542de68c9316.9eb70c5daacb736c.9b517bdc7200a94f.9c8904a7d5c1a7a4 - 91e4e1384ea1a8ed - after -- 6e2a51637cfe36a4.e525e8b155e0506e.e5debb712ead0dcb.4872d06a3d5a1d34 -+ 7fc7bc72c1dc922f.28f8629393a82f67.dcad2997f5688004.f2a319c2e5ba1db3 - d00301c3e525e8b1.1f81a6bf55e0506e.c870140c452f1792.28b41cd83d5a1d34 - ee2a35de68dc291a.fdd20b09fd927d60.93383155e5debb71.186841d52ead0dcb - 3687542de68c9316.9eb70c5daacb736c.9b517bdc7200a94f.9c8904a7d5c1a7a4 - 91e4e1384ea1a8ed --VHSUBPS_256(mem) -+VLDDQU_256(mem) - before - d3455576b35acbcf.04675a1ef9c16052.defb25a77596edbc.3b06ef0f87211dd5 - 3e78db4c23f7cd79.b417441b4008cd7a.996cd2d37cffa97c.cea48758c1ce53b2 -@@ -37523,12 +37523,12 @@ VHSUBPS_256(mem) - d9ed08f8608fd600 - after - d3455576b35acbcf.04675a1ef9c16052.defb25a77596edbc.3b06ef0f87211dd5 -- 3e78db4c23f7cd79.b417441b4008cd7a.996cd2d37cffa97c.cea48758c1ce53b2 -- 53455576f9c16052.be78db4c4008cd7b.7596edbcbb06ef0f.7cffa97c4ea48758 -+ b2d3455576b35acb.cf04675a1ef9c160.52defb25a77596ed.bc3b06ef0f87211d -+ ae49efa6b8846a15.a2e10d9255ec1639.abd48fcddb1361da.b2784125bb91868f - fe830d708e0e5ecf.2a12b1eed4f9763c.f000d982adddd2ff.41cc18e111f9f31b - d9ed08f8608fd600 - --VHSUBPD_128(reg) -+VMAXPS_256(reg) - before - d4260dd644e16aeb.0cf4b196c2a064d4.a8f62c9b5abc2a2e.44bc2bdc0e69b71a - 90c524e7587aec87.b36658046f463950.78d87b0582c06ebc.83d401c91bc4cd55 -@@ -37536,12 +37536,12 @@ VHSUBPD_128(reg) - b760755281b3aa84.3c809c69a600405b.7eca81c02abc955b.32472909a8147cdc - 593a74345f228c81 - after -- 0000000000000000.0000000000000000.76069898e8927d92.f8d87b0582c06ebc -+ 90c524e7587aec87.3c809c696f463950.7eca81c02abc955b.324729091bc4cd55 - 90c524e7587aec87.b36658046f463950.78d87b0582c06ebc.83d401c91bc4cd55 - 6714489738e79881.cfa67da6b10d996f.f6069898e8927d92.8913d734f0f9d0dc - b760755281b3aa84.3c809c69a600405b.7eca81c02abc955b.32472909a8147cdc - 593a74345f228c81 --VHSUBPD_128(mem) -+VMAXPS_256(mem) - before - dcb933a1322ebdf7.daf5a784ce6a5d3d.d6bf3137672be943.6c7131eae1cdefc3 - 9690e23c3c44cb68.2d1fda9abc99ee58.7831b9fe129b5151.1c47a580ab4eca78 -@@ -37551,11 +37551,11 @@ VHSUBPD_128(mem) - after - dcb933a1322ebdf7.daf5a784ce6a5d3d.d6bf3137672be943.6c7131eae1cdefc3 - 9690e23c3c44cb68.2d1fda9abc99ee58.7831b9fe129b5151.1c47a580ab4eca78 -- 0000000000000000.0000000000000000.6c7131eae1cdefc3.f831b9fe129b5151 -+ 9690e23c3c44cb68.2d1fda9abc99ee58.7831b9fe672be943.6c7131eaab4eca78 - 1e7601ac67c06df2.d462351ee98c9962.49da8e2395774d91.32b0c5a4e7d5ef73 - 4fda6a0a90f3b012 - --VHSUBPD_128(reg) -+VMAXPS_256(reg) - before - 9f63c28dbcb1e2ad.a51c6959c03d7962.df12546560692baa.2ea9d55aa4fc591b - 7d98ca98079ebff0.d24bb1e5c0f5527e.8a87643fe8ed8b03.8ddafd390df5147c -@@ -37563,12 +37563,12 @@ VHSUBPD_128(reg) - 5231d6fb672e6d1b.926fd2462743596c.31f1495c991ba49a.2591e59f5b748670 - 16b09cfe7912b55d - after -- 0000000000000000.0000000000000000.403984acec6e3adf.8ddafd390df5147b -+ 7d98ca98672e6d1b.926fd2462743596c.31f1495c991ba49a.2591e59f5b748670 - 7d98ca98079ebff0.d24bb1e5c0f5527e.8a87643fe8ed8b03.8ddafd390df5147c - 44c37c990c438485.83cd553b84f3b373.320e62181ca4f519.403984acec6e3adf - 5231d6fb672e6d1b.926fd2462743596c.31f1495c991ba49a.2591e59f5b748670 - 16b09cfe7912b55d --VHSUBPD_128(mem) -+VMAXPS_256(mem) - before - f16025b5605583d0.022dd32bb5eab55c.ddfda2f4c5f20097.e47c1577faddd52f - 906efcb12c47abf5.af057093910499f5.3e4343307b0b641d.a7fdc2d5db77c487 -@@ -37578,11 +37578,11 @@ VHSUBPD_128(mem) - after - f16025b5605583d0.022dd32bb5eab55c.ddfda2f4c5f20097.e47c1577faddd52f - 906efcb12c47abf5.af057093910499f5.3e4343307b0b641d.a7fdc2d5db77c487 -- 0000000000000000.0000000000000000.e47c1577faddd52f.be4343307b0b641d -+ 906efcb1605583d0.022dd32b910499f5.3e4343307b0b641d.a7fdc2d5db77c487 - 8ed48624e56efc08.747576bf657f25dd.b626e5029ead51f0.cd0db00b905fcb2a - e834e9ba9bc75bcf - --VHSUBPD_128(reg) -+VMAXPS_256(reg) - before - 8380f35d963698e4.a4c430730aba9d4d.44a5d85a95f94484.845bdf70424d5395 - fa3dca5e1e38c018.f04119b784e688f5.81e0c9dfc300ef34.da78991c6e870146 -@@ -37590,12 +37590,12 @@ VHSUBPD_128(reg) - ec39d02f4326bc87.951694cbe90f2f1c.b6a649538be5d858.899a3ddfcdfb547e - 9c371fcd374d715d - after -- 0000000000000000.0000000000000000.92498ff23e681830.da78991c6e870146 -+ ec39d02f4326bc87.951694cb84e688f5.81e0c9df8be5d858.899a3ddf6e870146 - fa3dca5e1e38c018.f04119b784e688f5.81e0c9dfc300ef34.da78991c6e870146 - a9b76b2bcf590d15.4c19bbdb6fff7a2b.897245b88c206296.92498ff23e681830 - ec39d02f4326bc87.951694cbe90f2f1c.b6a649538be5d858.899a3ddfcdfb547e - 9c371fcd374d715d --VHSUBPD_128(mem) -+VMAXPS_256(mem) - before - a5ebb2aa99692af8.1f11f7d6192a081b.a8051f730b2562f4.65cad01b5cdc8e26 - 818371610e5b3c7c.9d89db8cebf22e7d.5fb2d8bff34ad0de.f328d67c9c91c0ac -@@ -37605,11 +37605,11 @@ VHSUBPD_128(mem) - after - a5ebb2aa99692af8.1f11f7d6192a081b.a8051f730b2562f4.65cad01b5cdc8e26 - 818371610e5b3c7c.9d89db8cebf22e7d.5fb2d8bff34ad0de.f328d67c9c91c0ac -- 0000000000000000.0000000000000000.65cad01b5cdc8e26.f328d67c9c91c0ac -+ 818371610e5b3c7c.1f11f7d6192a081b.5fb2d8bf0b2562f4.65cad01b5cdc8e26 - 2290630ca3f25bee.ef8cccd5f3fbf859.2c75c5f484f64d9a.17c550b9d861878d - 669cbc6e0b969442 - --VHSUBPD_256(reg) -+VMAXPD_128(reg) - before - 04de966b1db80d5e.9f9b8fd9fbafdf34.7aafcf416354142c.fa24f1b46495d3c4 - 4bd6dd1eaa532e8d.5fbbd630d673ac12.c0a2806b3ea1f97c.ddc03bc97a7484b1 -@@ -37617,12 +37617,12 @@ VHSUBPD_256(reg) - 471c9b52a22556d7.1866ab2d863d1049.f22cdaadab451045.52f21a9eb6235782 - 9c20a737140af0be - after -- 3ebbb6fd50497db5.5fbbd630d673ac12.b116201de19f1c8c.ddc03bc97a7484b1 -+ 0000000000000000.0000000000000000.c0a2806b3ea1f97c.52f21a9eb6235782 - 4bd6dd1eaa532e8d.5fbbd630d673ac12.c0a2806b3ea1f97c.ddc03bc97a7484b1 - 98d28af14cf3327c.3ebbb6fd50497db5.1fb3dbc0226de3f6.b116201de19f1c8c - 471c9b52a22556d7.1866ab2d863d1049.f22cdaadab451045.52f21a9eb6235782 - 9c20a737140af0be --VHSUBPD_256(mem) -+VMAXPD_128(mem) - before - 6b6c42d41863a46d.b4010aac4674d549.c9892faa945c1ff9.945a7b9d74b4ba16 - 9ba16761de372ebb.3bcdd56ad46ced7f.2df0c06295b167f2.6389b9fc1a461e14 -@@ -37632,11 +37632,11 @@ VHSUBPD_256(mem) - after - 6b6c42d41863a46d.b4010aac4674d549.c9892faa945c1ff9.945a7b9d74b4ba16 - 9ba16761de372ebb.3bcdd56ad46ced7f.2df0c06295b167f2.6389b9fc1a461e14 -- eb6c42d41863a46d.3bcdd56ad46ced7f.49892faa945c1ff9.6389b9fc1a461e14 -+ 0000000000000000.0000000000000000.2df0c06295b167f2.6389b9fc1a461e14 - 8efa40fb1c86b8e2.07496dc72089d3e5.7ebaf52fe12e906d.f41afcb66a05034a - 6e14faea4d49fdda - --VHSUBPD_256(reg) -+VMAXPD_128(reg) - before - 853e853e7ce09f46.09b5ece0ce172f13.0492323d15c6196e.23b5931c656eea47 - 93e5991c9457283d.548a1266b1556c93.8bf142c966dbe76a.eb232cf44c146d1b -@@ -37644,12 +37644,12 @@ VHSUBPD_256(reg) - 08da4c2aed13da77.cfb1bd017c062c2f.a72433ce85c30b6d.538c4412b4c4dc5b - ac1eba306de54120 - after -- 755532f1313ad269.548a1266b1556c93.78b399d5ac567985.eb232cf44c146d1b -+ 0000000000000000.0000000000000000.8bf142c966dbe76a.538c4412b4c4dc5b - 93e5991c9457283d.548a1266b1556c93.8bf142c966dbe76a.eb232cf44c146d1b - f55532f1313ad269.4d442f77e24c2d8e.f8b399d5ac567985.b1d23ea2b22dd412 - 08da4c2aed13da77.cfb1bd017c062c2f.a72433ce85c30b6d.538c4412b4c4dc5b - ac1eba306de54120 --VHSUBPD_256(mem) -+VMAXPD_128(mem) - before - 97541ce8fa9dbf8d.26c0e43167707c12.b59b3aee9b9125a3.f4900d218dadd8cc - f2f9e72776f711cf.ac52f57438ddf4e7.ddd0212c5cf9d615.3a4322385fa01d4e -@@ -37659,11 +37659,11 @@ VHSUBPD_256(mem) - after - 97541ce8fa9dbf8d.26c0e43167707c12.b59b3aee9b9125a3.f4900d218dadd8cc - f2f9e72776f711cf.ac52f57438ddf4e7.ddd0212c5cf9d615.3a4322385fa01d4e -- 26c0e43167707c12.72f9e72776f711cf.f4900d218dadd8cc.5dd0212c5cf9d615 -+ 0000000000000000.0000000000000000.b59b3aee9b9125a3.3a4322385fa01d4e - 64c4a5e6adc22481.61ae725a551354ed.5f461d48338d4ba5.26aded67d2d2ff6e - 83fc9b56ac291363 - --VHSUBPD_256(reg) -+VMAXPD_128(reg) - before - 49c275bac0ba8f2c.3481903ea04b5c49.470fd7d6d9f6b477.72202bfe80d1871b - d64b76ffaa10af75.e2ded3cdf2a75996.054da53d2418dbea.357393b4df226a40 -@@ -37671,12 +37671,12 @@ VHSUBPD_256(reg) - b1d5dddc723cc935.4ca8533c2504926c.79906c7d8549683d.3fb861d041181545 - 3e41c00f7dd6557e - after -- 4ca7eb7ebfe0d793.e2ded3cdf2a75996.77b4d8fbd40503f3.357393b4df226a40 -+ 0000000000000000.0000000000000000.79906c7d8549683d.3fb861d041181545 - d64b76ffaa10af75.e2ded3cdf2a75996.054da53d2418dbea.357393b4df226a40 - 84e39a9107b7aee9.4ca7eb7ebfe0d793.f7b4d8fbd40503f3.860dd1566c8bb03f - b1d5dddc723cc935.4ca8533c2504926c.79906c7d8549683d.3fb861d041181545 - 3e41c00f7dd6557e --VHSUBPD_256(mem) -+VMAXPD_128(mem) - before - 5d7468fd39d02b15.b86f3c4d882a3c04.c0ad87f53d1f454f.e72c5d2dd2714875 - 7a1dd78894135436.f4fbb24ee40d4303.82810394253cad66.9dd6a8785708dd47 -@@ -37686,11 +37686,11 @@ VHSUBPD_256(mem) - after - 5d7468fd39d02b15.b86f3c4d882a3c04.c0ad87f53d1f454f.e72c5d2dd2714875 - 7a1dd78894135436.f4fbb24ee40d4303.82810394253cad66.9dd6a8785708dd47 -- dd7468fd39d02b15.fa1dd78894135436.e72c5d2dd2714875.9dd6a8785708dd47 -+ 0000000000000000.0000000000000000.82810394253cad66.9dd6a8785708dd47 - 1900f82190a18eca.7f1cd3b4e0e3fb3f.64cac535d3ac8be1.517f39907cb41967 - 0717773553e1370d - --VEXTRACTPS_0x0(reg) -+VMAXPD_256(reg) - before - 75ecff25d2aefbfd.55d3a1086b041793.854976f1b8ef25d5.3bd6020ed218799e - f749cbcc96a5a1e3.fd4b013b53e0e297.3298216f461fd24a.d1e1777d10b60c3f -@@ -37698,12 +37698,12 @@ VEXTRACTPS_0x0(reg) - a7cf25ef5b47823f.045dd435bc3132ff.ecd07cdef521a884.ab29facfbaba10df - a6fc00885e37f936 - after -- 75ecff25d2aefbfd.55d3a1086b041793.854976f1b8ef25d5.3bd6020ed218799e -+ a7cf25ef5b47823f.045dd435bc3132ff.3298216f461fd24a.ab29facfbaba10df - f749cbcc96a5a1e3.fd4b013b53e0e297.3298216f461fd24a.d1e1777d10b60c3f - e97cd9963a55646a.ee3593a66540ad02.e057cf9a26013f4b.03b9a06fa99300f1 - a7cf25ef5b47823f.045dd435bc3132ff.ecd07cdef521a884.ab29facfbaba10df -- 0000000010b60c3f --VEXTRACTPS_0x0(mem) -+ a6fc00885e37f936 -+VMAXPD_256(mem) - before - d0ff2e88b2167722.8c8fa9439409350d.1b8f3ed574be2ebb.b35024a74f0949a0 - 05fe00bad16446ce.f60863fe8226b981.10964f70aaf35c61.8f23c361cf475d4b -@@ -37711,13 +37711,13 @@ VEXTRACTPS_0x0(mem) - 00208164e27bc518.c654665aeba32809.ff57534bff86421e.f9f2d858b2f3d101 - 4086456e4d79a864 - after -- d0ff2e88b2167722.8c8fa9439409350d.1b8f3ed574be2ebb.b35024a7cf475d4b -+ d0ff2e88b2167722.8c8fa9439409350d.1b8f3ed574be2ebb.b35024a74f0949a0 - 05fe00bad16446ce.f60863fe8226b981.10964f70aaf35c61.8f23c361cf475d4b -- 21c5f30ad82d2167.40864d8cc02b4c46.bd4082f37adc7a1e.dd95567811672133 -+ 05fe00bad16446ce.8c8fa9439409350d.1b8f3ed574be2ebb.8f23c361cf475d4b - 00208164e27bc518.c654665aeba32809.ff57534bff86421e.f9f2d858b2f3d101 - 4086456e4d79a864 - --VEXTRACTPS_0x0(reg) -+VMAXPD_256(reg) - before - 0c9c9a247f85e406.7eda28b40b5ced0e.e3c0a7d29e1a8a76.b2a83e6255fd718c - ba81d1e8e4a2be94.77c163e671db5775.f5140d62751cad39.b2ffc026994bc295 -@@ -37725,12 +37725,12 @@ VEXTRACTPS_0x0(reg) - 2ce8da47b43f4322.4a4186a15de5dc44.64a73a7602f32a6e.09ef756259a1bd26 - 181fa2b20dc1df07 - after -- 0c9c9a247f85e406.7eda28b40b5ced0e.e3c0a7d29e1a8a76.b2a83e6255fd718c -+ 2ce8da47b43f4322.77c163e671db5775.64a73a7602f32a6e.09ef756259a1bd26 - ba81d1e8e4a2be94.77c163e671db5775.f5140d62751cad39.b2ffc026994bc295 - a681e825165c75b9.c79fafe72d05bd78.569d95750e36cffc.db285382e67ef264 - 2ce8da47b43f4322.4a4186a15de5dc44.64a73a7602f32a6e.09ef756259a1bd26 -- 00000000994bc295 --VEXTRACTPS_0x0(mem) -+ 181fa2b20dc1df07 -+VMAXPD_256(mem) - before - e386545e1fe91332.a802a3ba57d8657a.dc7366021d876f04.797ef8d3efe0fa39 - 48ee0952aa2516d4.761b40ea9eb2176e.5901caf488f833e5.f36ecbf771887d0a -@@ -37738,13 +37738,13 @@ VEXTRACTPS_0x0(mem) - 4df469c39d0b792b.7878e231815a1ad9.84600f40d0743eb9.82c8a244a13a876c - 4fca9d46885c8655 - after -- e386545e1fe91332.a802a3ba57d8657a.dc7366021d876f04.797ef8d371887d0a -+ e386545e1fe91332.a802a3ba57d8657a.dc7366021d876f04.797ef8d3efe0fa39 - 48ee0952aa2516d4.761b40ea9eb2176e.5901caf488f833e5.f36ecbf771887d0a -- 22243c7acb82a418.f27eab43225995a9.9db62f65ba43e413.2cc2b04e2277ed8c -+ 48ee0952aa2516d4.761b40ea9eb2176e.5901caf488f833e5.797ef8d3efe0fa39 - 4df469c39d0b792b.7878e231815a1ad9.84600f40d0743eb9.82c8a244a13a876c - 4fca9d46885c8655 - --VEXTRACTPS_0x0(reg) -+VMAXPD_256(reg) - before - f1159dbe736928f4.a5290c173dcc5038.6456e1205740e3a7.e9c9e871e598fc04 - c2f59e1affeea7f5.0591a164c6d2e66d.1262a27d3f982cc2.aabe35e416badb1f -@@ -37752,12 +37752,12 @@ VEXTRACTPS_0x0(reg) - 65a3952a688d2ecb.5226939504da3ef9.23365e2db7cb2c89.ad7c1b403a29ec77 - a6ddad01658e950c - after -- f1159dbe736928f4.a5290c173dcc5038.6456e1205740e3a7.e9c9e871e598fc04 -+ 65a3952a688d2ecb.5226939504da3ef9.23365e2db7cb2c89.aabe35e416badb1f - c2f59e1affeea7f5.0591a164c6d2e66d.1262a27d3f982cc2.aabe35e416badb1f - 1fb69dc4c7763f03.4bf6a5945428f7f3.dde822b2d6ed30d4.a20b72857ee69737 - 65a3952a688d2ecb.5226939504da3ef9.23365e2db7cb2c89.ad7c1b403a29ec77 -- 0000000016badb1f --VEXTRACTPS_0x0(mem) -+ a6ddad01658e950c -+VMAXPD_256(mem) - before - 6bf9a3b51c214f22.ee0a82b67dc0aef9.f5ebe752f2f578a9.3f9751587ebe5c8e - d69e79467aefd6e5.173561d6a39afc38.12121eb73984612f.8d56f7a1c853fb8f -@@ -37765,13 +37765,13 @@ VEXTRACTPS_0x0(mem) - 12aeb5b39d6a391f.b90ae17f9074f19a.26b52129432f2f70.2e214e3a53917a33 - 3ac5f562cd52d02f - after -- 6bf9a3b51c214f22.ee0a82b67dc0aef9.f5ebe752f2f578a9.3f975158c853fb8f -+ 6bf9a3b51c214f22.ee0a82b67dc0aef9.f5ebe752f2f578a9.3f9751587ebe5c8e - d69e79467aefd6e5.173561d6a39afc38.12121eb73984612f.8d56f7a1c853fb8f -- c596aba29c03e57f.3c712cf575a75334.8367b2b0f594b5b8.68c04d7331154737 -+ 6bf9a3b51c214f22.173561d6a39afc38.12121eb73984612f.3f9751587ebe5c8e - 12aeb5b39d6a391f.b90ae17f9074f19a.26b52129432f2f70.2e214e3a53917a33 - 3ac5f562cd52d02f - --VEXTRACTPS_0x1(reg) -+VMINPS_256(reg) - before - e7f8415739e487d6.9bb214679a2e8eef.ea4c7be08f8c1016.d6cae60e3e648c82 - 93052b8633d4d9d5.3a6e43a9ae5ea01c.2c83f6850e7bed54.6e707e4c033c881b -@@ -37779,12 +37779,12 @@ VEXTRACTPS_0x1(reg) - 54e1cd3d43fb4089.2e3d01878c2be93b.4efe8046ff10cfc3.caa2137e590a4b91 - 45c6094c22178bc5 - after -- e7f8415739e487d6.9bb214679a2e8eef.ea4c7be08f8c1016.d6cae60e3e648c82 -+ 93052b8633d4d9d5.2e3d0187ae5ea01c.2c83f685ff10cfc3.caa2137e033c881b - 93052b8633d4d9d5.3a6e43a9ae5ea01c.2c83f6850e7bed54.6e707e4c033c881b - 983ab05958ad03d7.cdadbe65f5032ad1.d9fa4ed8aacec3ff.cb7463cdadc5de66 - 54e1cd3d43fb4089.2e3d01878c2be93b.4efe8046ff10cfc3.caa2137e590a4b91 -- 000000006e707e4c --VEXTRACTPS_0x1(mem) -+ 45c6094c22178bc5 -+VMINPS_256(mem) - before - 1aacc12225f95a30.21477d9f914ace96.3be889fb8fe19985.e7dc873ca8ce4d4d - 231fb7eb7dbb73fe.5db8bce9dd27e7ab.ce7bd1ad1931f5dc.00de5f2441927949 -@@ -37792,13 +37792,13 @@ VEXTRACTPS_0x1(mem) - 44e04f0b9e117672.8eebd8eae1b9ac9c.f989917c33d1a460.2180737fb562c946 - e2b9a7c9c885669e - after -- 1aacc12225f95a30.21477d9f914ace96.3be889fb8fe19985.e7dc873c00de5f24 -+ 1aacc12225f95a30.21477d9f914ace96.3be889fb8fe19985.e7dc873ca8ce4d4d - 231fb7eb7dbb73fe.5db8bce9dd27e7ab.ce7bd1ad1931f5dc.00de5f2441927949 -- 3ded6895476a935b.62808789c31ec774.c4c2558a4628ba6c.f551046c67eb8e63 -+ 1aacc12225f95a30.21477d9fdd27e7ab.ce7bd1ad8fe19985.e7dc873ca8ce4d4d - 44e04f0b9e117672.8eebd8eae1b9ac9c.f989917c33d1a460.2180737fb562c946 - e2b9a7c9c885669e - --VEXTRACTPS_0x1(reg) -+VMINPS_256(reg) - before - 93469cb53cdfa118.15c5e8399ebcd76f.3b44ad78d086d0d0.4a9c0171fb396fe5 - 90754eb2abfdb560.8a68af0b64777380.c6d9019f2e1170bc.91c62253bb6bd626 -@@ -37806,12 +37806,12 @@ VEXTRACTPS_0x1(reg) - dde4da87f0b25b08.d317b84cb1504c88.e7e21768a68d1369.74936493915e6b8f - c8cd7dc7df37110e - after -- 93469cb53cdfa118.15c5e8399ebcd76f.3b44ad78d086d0d0.4a9c0171fb396fe5 -+ dde4da87f0b25b08.d317b84cb1504c88.e7e21768a68d1369.91c62253bb6bd626 - 90754eb2abfdb560.8a68af0b64777380.c6d9019f2e1170bc.91c62253bb6bd626 - 3590b929b469df21.8095206e0c4f06ce.8cf4d1cb97e4c70b.abd46f108e739650 - dde4da87f0b25b08.d317b84cb1504c88.e7e21768a68d1369.74936493915e6b8f -- 0000000091c62253 --VEXTRACTPS_0x1(mem) -+ c8cd7dc7df37110e -+VMINPS_256(mem) - before - 834e369a950a43fa.e6bcac38fe6164c1.5fbcf2926f8400d8.34efd1e2f7988e84 - 81e40cf7cee3be7f.ab662ba9770437f7.004e4a2d63f9dfea.cf66faa6278f7505 -@@ -37819,13 +37819,13 @@ VEXTRACTPS_0x1(mem) - b67bfc003bda7e01.d85c207720542a8c.f16c450e5cd40e07.60c689b8927775f0 - 0d47e8de067e07b0 - after -- 834e369a950a43fa.e6bcac38fe6164c1.5fbcf2926f8400d8.34efd1e2cf66faa6 -+ 834e369a950a43fa.e6bcac38fe6164c1.5fbcf2926f8400d8.34efd1e2f7988e84 - 81e40cf7cee3be7f.ab662ba9770437f7.004e4a2d63f9dfea.cf66faa6278f7505 -- 9e5a7acba7cf3dc7.872c5344f9261057.929a3c08a9baa5ec.14958e1ed100039b -+ 834e369acee3be7f.e6bcac38fe6164c1.004e4a2d63f9dfea.cf66faa6f7988e84 - b67bfc003bda7e01.d85c207720542a8c.f16c450e5cd40e07.60c689b8927775f0 - 0d47e8de067e07b0 - --VEXTRACTPS_0x1(reg) -+VMINPS_256(reg) - before - 7862a6fec7a4f589.a5140f83a60e3b57.f9408fac8719c343.f990e02d9852d56a - fd64bf8374727a24.47f22d41057931f6.45259b51ca011527.86d289507a40b73f -@@ -37833,12 +37833,12 @@ VEXTRACTPS_0x1(reg) - c54cf26cfc3b3c57.14a77f1a0e22b6bd.d2227b98576bd629.9fdff5529e9ebbf1 - e342b10918255525 - after -- 7862a6fec7a4f589.a5140f83a60e3b57.f9408fac8719c343.f990e02d9852d56a -+ fd64bf83fc3b3c57.14a77f1a057931f6.d2227b98ca011527.9fdff5529e9ebbf1 - fd64bf8374727a24.47f22d41057931f6.45259b51ca011527.86d289507a40b73f - f8982fd9a676d330.78ded42474261b09.1a5740d186985ce5.74fdbc631dab6fb2 - c54cf26cfc3b3c57.14a77f1a0e22b6bd.d2227b98576bd629.9fdff5529e9ebbf1 -- 0000000086d28950 --VEXTRACTPS_0x1(mem) -+ e342b10918255525 -+VMINPS_256(mem) - before - 1cf36b74a74dfa7d.c0ca05a80f4df145.f718aa0eef78be3e.cbd14612d806bd9e - 25be9f8069216523.456063f97d392da8.fdfcd2eb3434efb7.5fb19faba5f34ef1 -@@ -37846,13 +37846,13 @@ VEXTRACTPS_0x1(mem) - 1cd16627effe810a.5cfff08bd9cd2c77.e15106155810ba43.cc35e8eb95f95de0 - 5c70d169f02853d3 - after -- 1cf36b74a74dfa7d.c0ca05a80f4df145.f718aa0eef78be3e.cbd146125fb19fab -+ 1cf36b74a74dfa7d.c0ca05a80f4df145.f718aa0eef78be3e.cbd14612d806bd9e - 25be9f8069216523.456063f97d392da8.fdfcd2eb3434efb7.5fb19faba5f34ef1 -- dc6fc91777ad5443.b05808cce28a2d29.0121729ff8630455.ec0f81d05bc0c4ce -+ 1cf36b74a74dfa7d.c0ca05a80f4df145.fdfcd2ebef78be3e.cbd14612d806bd9e - 1cd16627effe810a.5cfff08bd9cd2c77.e15106155810ba43.cc35e8eb95f95de0 - 5c70d169f02853d3 - --VEXTRACTPS_0x2(reg) -+VMINPD_128(reg) - before - f90b36b708dbe355.c1b2f19aed1fa8a4.a7a118a4ff8d683c.78590a397047cdae - fd541540779e4810.a6dce65e8c1c873c.ec897b81ef561b24.a205faf85a15f9c2 -@@ -37860,12 +37860,12 @@ VEXTRACTPS_0x2(reg) - ad1c2fb2d08084e2.a43efe861edc5819.d35fe23c9e34d810.1e788ff21aa48a92 - 28d72c07287c68a8 - after -- f90b36b708dbe355.c1b2f19aed1fa8a4.a7a118a4ff8d683c.78590a397047cdae -+ 0000000000000000.0000000000000000.ec897b81ef561b24.a205faf85a15f9c2 - fd541540779e4810.a6dce65e8c1c873c.ec897b81ef561b24.a205faf85a15f9c2 - c595696fdcfbbfb0.a91cc15ee802d8ff.8705159045b482dc.3a20533c3585f9aa - ad1c2fb2d08084e2.a43efe861edc5819.d35fe23c9e34d810.1e788ff21aa48a92 -- 00000000ef561b24 --VEXTRACTPS_0x2(mem) -+ 28d72c07287c68a8 -+VMINPD_128(mem) - before - 360aa665781b4e16.12336174f1b9d352.750e1ac24ab6c2b5.2ee4def095615a6b - 22de77fa288df908.4e27fd21db30e7ab.f75790fe879dd300.f3e1061ac7c8449a -@@ -37873,13 +37873,13 @@ VEXTRACTPS_0x2(mem) - 0893137617178e2b.bed560ec780e51ca.7d887a27a5c0da51.2a6dc77e4b714023 - 5596588fd4ccc9d5 - after -- 360aa665781b4e16.12336174f1b9d352.750e1ac24ab6c2b5.2ee4def0879dd300 -+ 360aa665781b4e16.12336174f1b9d352.750e1ac24ab6c2b5.2ee4def095615a6b - 22de77fa288df908.4e27fd21db30e7ab.f75790fe879dd300.f3e1061ac7c8449a -- ca1c1db154dd25ab.be44fe252973fd9a.05e7dc26f19c4725.7d9f5525d0f4d249 -+ 0000000000000000.0000000000000000.f75790fe879dd300.f3e1061ac7c8449a - 0893137617178e2b.bed560ec780e51ca.7d887a27a5c0da51.2a6dc77e4b714023 - 5596588fd4ccc9d5 - --VEXTRACTPS_0x2(reg) -+VMINPD_128(reg) - before - 596505c5088faa0a.ba0ed5348d47efb3.aa2820e3638c1ee8.3907e6ebbe1348af - 9427c98d82491e6f.ba58dfdad37a0570.de8738748679a2a0.16309d5f59a44c6c -@@ -37887,12 +37887,12 @@ VEXTRACTPS_0x2(reg) - 1bb5867fbacbb277.188dbc863e173f38.8e9c6518e7d1b98c.a4b0d90983a908b2 - 0c9e57164a363993 - after -- 596505c5088faa0a.ba0ed5348d47efb3.aa2820e3638c1ee8.3907e6ebbe1348af -+ 0000000000000000.0000000000000000.de8738748679a2a0.a4b0d90983a908b2 - 9427c98d82491e6f.ba58dfdad37a0570.de8738748679a2a0.16309d5f59a44c6c - 6029a051df8362af.e63fae5105bb8c8d.b63fa60d7e61179d.f1cf1a70917ca3b4 - 1bb5867fbacbb277.188dbc863e173f38.8e9c6518e7d1b98c.a4b0d90983a908b2 -- 000000008679a2a0 --VEXTRACTPS_0x2(mem) -+ 0c9e57164a363993 -+VMINPD_128(mem) - before - 06670e82022ff082.1f177781afad4a73.2d0f87659a98db9a.c2ea71035b54c618 - 6cd57c3bc9a1e9ad.c99d70c55bb3664e.01908bdb364d1ce1.ae75c739797678ee -@@ -37900,13 +37900,13 @@ VEXTRACTPS_0x2(mem) - efd36a42ed1e9560.804167c047601854.57c42a389c7c7cce.1d713e351dc9bd27 - 597a57d4dc12c8e1 - after -- 06670e82022ff082.1f177781afad4a73.2d0f87659a98db9a.c2ea7103364d1ce1 -+ 06670e82022ff082.1f177781afad4a73.2d0f87659a98db9a.c2ea71035b54c618 - 6cd57c3bc9a1e9ad.c99d70c55bb3664e.01908bdb364d1ce1.ae75c739797678ee -- 1bb51c2cb898e23d.76916cb65a6b41b5.71de42d22d3fbe39.ae896225dbc40bba -+ 0000000000000000.0000000000000000.01908bdb364d1ce1.c2ea71035b54c618 - efd36a42ed1e9560.804167c047601854.57c42a389c7c7cce.1d713e351dc9bd27 - 597a57d4dc12c8e1 - --VEXTRACTPS_0x2(reg) -+VMINPD_128(reg) - before - bdf0a96eb32a6996.c5fbe3678441bf42.44f75d4fbf1f26d6.900dbdf79e0f13cb - a51f31703f9ddcf0.77f80188980c1b0f.1f004bcf5d33a9e7.f8867afd50053f5c -@@ -37914,12 +37914,12 @@ VEXTRACTPS_0x2(reg) - 70d8d057e4c52644.e2a5216fa8cc5d17.853bfb537c8bf869.c5385a8b324745ed - e20977eb9aab9745 - after -- bdf0a96eb32a6996.c5fbe3678441bf42.44f75d4fbf1f26d6.900dbdf79e0f13cb -+ 0000000000000000.0000000000000000.853bfb537c8bf869.f8867afd50053f5c - a51f31703f9ddcf0.77f80188980c1b0f.1f004bcf5d33a9e7.f8867afd50053f5c - 6c53ea441bf75c9b.e2984292458c67f2.6ba82badbd29db35.6bfbda35cd69bcaf - 70d8d057e4c52644.e2a5216fa8cc5d17.853bfb537c8bf869.c5385a8b324745ed -- 000000005d33a9e7 --VEXTRACTPS_0x2(mem) -+ e20977eb9aab9745 -+VMINPD_128(mem) - before - 9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.c904b62f35e73e32 - d5967579e53885ed.9b0413ecaaeb883f.1139aa56febc39da.935159ab85c9e73a -@@ -37927,13 +37927,13 @@ VEXTRACTPS_0x2(mem) - 2402b4408e6d6608.0703dc8c736ee041.e4157c9e7a3f90b8.2aa24338584b55b9 - ae3f831f14059187 - after -- 9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.c904b62ffebc39da -+ 9e39ac4122a26de1.0cf9df1635937697.53ec1b0ddcd8baab.c904b62f35e73e32 - d5967579e53885ed.9b0413ecaaeb883f.1139aa56febc39da.935159ab85c9e73a -- 63ea4f80ff779996.7b436944e05b97e9.f8584c382a8597d0.3f6cde3508bb302d -+ 0000000000000000.0000000000000000.1139aa56febc39da.c904b62f35e73e32 - 2402b4408e6d6608.0703dc8c736ee041.e4157c9e7a3f90b8.2aa24338584b55b9 - ae3f831f14059187 - --VEXTRACTPS_0x3(reg) -+VMINPD_256(reg) - before - 288f9b58d5742146.f4aa22a7ab26a76f.9a90682ffeb19ff2.b13bb6740df4e0be - f4dd854e3a2441a0.afae149f74ac19f6.92350a991daf0fa9.3b9877a6fcb2420f -@@ -37941,12 +37941,12 @@ VEXTRACTPS_0x3(reg) - f1a7c42259781fd7.56f975f778558015.1cfb7c728a0df5d7.f5227acf64772f41 - dee8b59d1496327a - after -- 288f9b58d5742146.f4aa22a7ab26a76f.9a90682ffeb19ff2.b13bb6740df4e0be -+ f4dd854e3a2441a0.afae149f74ac19f6.92350a991daf0fa9.f5227acf64772f41 - f4dd854e3a2441a0.afae149f74ac19f6.92350a991daf0fa9.3b9877a6fcb2420f - 6e773f6ddca12c41.31d90616040d78c9.4940bc366df46d11.5df63920658573d7 - f1a7c42259781fd7.56f975f778558015.1cfb7c728a0df5d7.f5227acf64772f41 -- 0000000092350a99 --VEXTRACTPS_0x3(mem) -+ dee8b59d1496327a -+VMINPD_256(mem) - before - f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.68b345b90f85e3a6 - 12710a4af989fb08.87fc1ff953620d8c.f843b6a77ac679c7.87b5137898e8722b -@@ -37954,13 +37954,13 @@ VEXTRACTPS_0x3(mem) - dbf21887f3beafe0.953d77350741ea1f.77edb90f5b61e66c.b2c1af0a28a16606 - 756575b5670e42b4 - after -- f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.68b345b9f843b6a7 -+ f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.68b345b90f85e3a6 - 12710a4af989fb08.87fc1ff953620d8c.f843b6a77ac679c7.87b5137898e8722b -- 16cd1c0165753ab5.51b9eef5088c7f04.2e06824e4109e385.d74ae319c2c3df12 -+ f414677792ee37ae.dbba10d74d34560b.fad8dc2eec8eec06.87b5137898e8722b - dbf21887f3beafe0.953d77350741ea1f.77edb90f5b61e66c.b2c1af0a28a16606 - 756575b5670e42b4 - --VEXTRACTPS_0x3(reg) -+VMINPD_256(reg) - before - 7c8130881a97b0c7.3cad7acabf6e17b6.afd3b827ec0a878a.aec4d8d6e4dc3da7 - 2463ddeedec7eced.17cabfb5e4942e62.fac9ad36547595f1.b1565c90f986a563 -@@ -37968,12 +37968,12 @@ VEXTRACTPS_0x3(reg) - c2a4f923064dbd1b.a759de33aa6b58ef.98009f5b1b5fef61.87df81893494970c - 136d19a193109951 - after -- 7c8130881a97b0c7.3cad7acabf6e17b6.afd3b827ec0a878a.aec4d8d6e4dc3da7 -+ c2a4f923064dbd1b.a759de33aa6b58ef.fac9ad36547595f1.b1565c90f986a563 - 2463ddeedec7eced.17cabfb5e4942e62.fac9ad36547595f1.b1565c90f986a563 - c75576534e2a32cf.471561347e39b012.d46950ceda0d4eff.5a71c027b569dacb - c2a4f923064dbd1b.a759de33aa6b58ef.98009f5b1b5fef61.87df81893494970c -- 00000000fac9ad36 --VEXTRACTPS_0x3(mem) -+ 136d19a193109951 -+VMINPD_256(mem) - before - d9e7065aeeeb9cc7.719b61caa4bbca7d.1564b19e8435e328.a1da9549b3f6b4c3 - b619c3a260305c9a.3088aab4c10095a1.6b00566226a30de6.4d422e043c5ed8d0 -@@ -37981,13 +37981,13 @@ VEXTRACTPS_0x3(mem) - 26d49d8cfb290105.4e70d002ee4154dc.431e08a1389d2ca8.faf03a9298d2309d - b3cea43ca1f7dcb5 - after -- d9e7065aeeeb9cc7.719b61caa4bbca7d.1564b19e8435e328.a1da95496b005662 -+ d9e7065aeeeb9cc7.719b61caa4bbca7d.1564b19e8435e328.a1da9549b3f6b4c3 - b619c3a260305c9a.3088aab4c10095a1.6b00566226a30de6.4d422e043c5ed8d0 -- 87cecc6406eb94f5.5bb6d14dfba95a32.87fa4a69afc29158.f68666f855239835 -+ d9e7065aeeeb9cc7.3088aab4c10095a1.1564b19e8435e328.a1da9549b3f6b4c3 - 26d49d8cfb290105.4e70d002ee4154dc.431e08a1389d2ca8.faf03a9298d2309d - b3cea43ca1f7dcb5 - --VEXTRACTPS_0x3(reg) -+VMINPD_256(reg) - before - 7f6aa2630c1cd728.71f5b3065bf55ff6.6503a53d3554c04c.7c380bf4e0419a03 - b811307477cf5ea3.42fe88be435c69f3.fcbb4b6c6c6fd92e.0f14d250c0b89794 -@@ -37995,12 +37995,12 @@ VEXTRACTPS_0x3(reg) - e5afe801b60dff60.eaf86499192874c3.1acafb521ceb06f6.ae4195cf9e552c0a - 742a89cbd3923d47 - after -- 7f6aa2630c1cd728.71f5b3065bf55ff6.6503a53d3554c04c.7c380bf4e0419a03 -+ e5afe801b60dff60.eaf86499192874c3.fcbb4b6c6c6fd92e.ae4195cf9e552c0a - b811307477cf5ea3.42fe88be435c69f3.fcbb4b6c6c6fd92e.0f14d250c0b89794 - bc0f48da7b9badd2.76bb9aa1ce69dc28.6fe4bffa301ddd2e.d67dd6a0f611de88 - e5afe801b60dff60.eaf86499192874c3.1acafb521ceb06f6.ae4195cf9e552c0a -- 00000000fcbb4b6c --VEXTRACTPS_0x3(mem) -+ 742a89cbd3923d47 -+VMINPD_256(mem) - before - 0205307fb2d3cc6b.913f0a55c4b091fa.7881639440a5eded.59b8fde2cd649135 - 359e06d8562596a1.1a09ac4240109f4c.fd21117c5ded02d5.88fcc015de14b995 -@@ -38008,13 +38008,13 @@ VEXTRACTPS_0x3(mem) - fa392b245e29cbf5.367e5e97f4391ec5.5cda6fc8ef0cf38a.25b17914924ad36a - 4cbb68b96de83d37 - after -- 0205307fb2d3cc6b.913f0a55c4b091fa.7881639440a5eded.59b8fde2fd21117c -+ 0205307fb2d3cc6b.913f0a55c4b091fa.7881639440a5eded.59b8fde2cd649135 - 359e06d8562596a1.1a09ac4240109f4c.fd21117c5ded02d5.88fcc015de14b995 -- e9c185c0db935716.dd5aca34c7ba6501.55a5ec3f8f0b70a5.03e04057ec87bbc3 -+ 0205307fb2d3cc6b.913f0a55c4b091fa.fd21117c5ded02d5.88fcc015de14b995 - fa392b245e29cbf5.367e5e97f4391ec5.5cda6fc8ef0cf38a.25b17914924ad36a - 4cbb68b96de83d37 - --VLDDQU_128(reg) -+VMOVHPS_128_StoreForm(reg) - before - d34a08b018ee34d6.44d473f1fbf3ad6b.82c166d763190746.ee8a17039cfb47af - 15aa556630e7f6f2.a35cd911cdfebaa4.1b6fdd60b1e75c2d.e7825edcafe42741 -@@ -38027,7 +38027,7 @@ VLDDQU_128(reg) - 70264b48505fbc38.f39ed972f056aecb.5ed3bf9f792e5929.248dc23f46d4506b - 3f0be7c015e3c553.1066f0fe8105450d.a73b08fe587b39e4.7f79be187dd67d5a - d510ce536ff66c3a --VLDDQU_128(mem) -+VMOVHPS_128_StoreForm(mem) - before - 011f6edc3940d736.dda6233c1afd4bf0.d68098a39b193a95.52f1b5ebe958390a - e1731ba0f6c17b7a.a841fd27fb3c8bba.21b84f4c5b9d4a90.bb42c1d1c9539449 -@@ -38035,13 +38035,13 @@ VLDDQU_128(mem) - 2a148985ba965c8e.31a979fac4522888.b6b1d85a3b27aa8e.37e5e638e4d24fbc - 02cef891576d2549 - after -- 011f6edc3940d736.dda6233c1afd4bf0.d68098a39b193a95.52f1b5ebe958390a -- 0000000000000000.0000000000000000.f0d68098a39b193a.9552f1b5ebe95839 -+ 011f6edc3940d736.dda6233c1afd4bf0.d68098a39b193a95.21b84f4c5b9d4a90 -+ e1731ba0f6c17b7a.a841fd27fb3c8bba.21b84f4c5b9d4a90.bb42c1d1c9539449 - 50d65089c2851334.fa2870ed5529c15e.cdd991e5dc9e302a.3e7a281c94f8884a - 2a148985ba965c8e.31a979fac4522888.b6b1d85a3b27aa8e.37e5e638e4d24fbc - 02cef891576d2549 - --VLDDQU_128(reg) -+VMOVHPS_128_StoreForm(reg) - before - fb8358938955489d.4bfb427ffa0212b4.a70f12bae342fee3.b80aa297934472e9 - 7e4e04aa1517f266.8f55f8639cd5f1d3.baa539994e867c1c.afb16a8901024566 -@@ -38054,7 +38054,7 @@ VLDDQU_128(reg) - e77cf742983e604d.d2f0251cbf19b417.c4b8e903a2a9e1df.7772ac1aa06cde32 - 92592ec8ad57ce01.ef9647987ddc18ac.23941e657a3767d7.eb19e4378d8efb79 - e9718fcde3755566 --VLDDQU_128(mem) -+VMOVHPS_128_StoreForm(mem) - before - 4c4827c7be2cab25.db31a3a6f0ec772c.c414d9c3f22ad9bc.3185d52973bd4bb0 - ef682a103bbfb8e4.1e50544aff8c987a.2c3658873b0db376.4bd709bd28c6c918 -@@ -38062,13 +38062,13 @@ VLDDQU_128(mem) - 6ab65f448aabe50c.01925790ea163232.2495098db7c8a093.14cdd8013892823f - 7a096b8acb6d3557 - after -- 4c4827c7be2cab25.db31a3a6f0ec772c.c414d9c3f22ad9bc.3185d52973bd4bb0 -- 0000000000000000.0000000000000000.2cc414d9c3f22ad9.bc3185d52973bd4b -+ 4c4827c7be2cab25.db31a3a6f0ec772c.c414d9c3f22ad9bc.2c3658873b0db376 -+ ef682a103bbfb8e4.1e50544aff8c987a.2c3658873b0db376.4bd709bd28c6c918 - b09e1396763b37cd.b6013c1e73c06d98.02c73ed173936104.cdd6b58b36de1db9 - 6ab65f448aabe50c.01925790ea163232.2495098db7c8a093.14cdd8013892823f - 7a096b8acb6d3557 - --VLDDQU_128(reg) -+VMOVHPS_128_StoreForm(reg) - before - 5cd66b928afb71ad.f87c8906931c7dce.5a4da20bff1922f3.6d6a34a822b72c4e - 1680d58512c974ec.38bb0cc8ae98bc3f.1c7f17fb4f567a88.b8143b0cd16cc062 -@@ -38081,7 +38081,7 @@ VLDDQU_128(reg) - 0453a4cffe6278c1.04416676f62d5e8a.a574b4cc7658769d.e35d9ba7dff319fb - 829bd4dceb53b9d7.3ad813fd88e71fdc.507874ea0eab51dd.c811cf646859f344 - 45fe522f89a90a69 --VLDDQU_128(mem) -+VMOVHPS_128_StoreForm(mem) - before - 34efa3f45eef1998.eda36218742675db.b44d8d477fd1bb61.78d654c2b6db48f5 - 72af3b9f0238ddfa.9fb948f03569e679.506c5242f8f7ed44.7bdc4ebe07759790 -@@ -38089,13 +38089,13 @@ VLDDQU_128(mem) - 4cd034572801730e.4b3a1120d16eda31.59d8aaf7de2805d6.7e0b85d61a152c01 - 36cdb9c91433ea2f - after -- 34efa3f45eef1998.eda36218742675db.b44d8d477fd1bb61.78d654c2b6db48f5 -- 0000000000000000.0000000000000000.dbb44d8d477fd1bb.6178d654c2b6db48 -+ 34efa3f45eef1998.eda36218742675db.b44d8d477fd1bb61.506c5242f8f7ed44 -+ 72af3b9f0238ddfa.9fb948f03569e679.506c5242f8f7ed44.7bdc4ebe07759790 - dc0c971c918f12be.f52784cecba8495c.e801ddd80e6572b1.b3d4604ba0047a5b - 4cd034572801730e.4b3a1120d16eda31.59d8aaf7de2805d6.7e0b85d61a152c01 - 36cdb9c91433ea2f - --VLDDQU_256(reg) -+VMOVNTDQ_256(reg) - before - 3966f99227eaf091.9fc88d3ce399bd17.fc3eec50e447d4a3.80bc358a834b63dc - e1223f9cf1c779d2.b2bf1eb8dc63ac04.667f0fcca0bf745f.377bfb7d1adb49f2 -@@ -38108,7 +38108,7 @@ VLDDQU_256(reg) - 8b4c89530e55c29f.5f8364b5326bfc02.e44878ffa063f610.5bdf77bcbee37042 - 9431d223192007a4.83dfd921ffbe683c.d2e7225580be9564.c8b525338b6f97f9 - 5ac981ce9f8b7842 --VLDDQU_256(mem) -+VMOVNTDQ_256(mem) - before - eee707791344d04a.561e1678aeb5848c.fa9efbe75f68addf.8ca6093add5d8f04 - 5eda342005a55a3c.2e5d52be6a9f7403.a08d45f26f738717.6ed2291a52cb1e9f -@@ -38116,13 +38116,13 @@ VLDDQU_256(mem) - 45737013d191f891.91039fcec6a3a051.ea2b428c0ce1e9f4.19a1067cf644ed70 - 9bdbbad55c68a5ff - after -- eee707791344d04a.561e1678aeb5848c.fa9efbe75f68addf.8ca6093add5d8f04 -- 9feee707791344d0.4a561e1678aeb584.8cfa9efbe75f68ad.df8ca6093add5d8f -+ 5eda342005a55a3c.2e5d52be6a9f7403.a08d45f26f738717.6ed2291a52cb1e9f -+ 5eda342005a55a3c.2e5d52be6a9f7403.a08d45f26f738717.6ed2291a52cb1e9f - 877083b090bbd445.783a8161e96a14b6.517834304aedb20f.d3b77f617c947edf - 45737013d191f891.91039fcec6a3a051.ea2b428c0ce1e9f4.19a1067cf644ed70 - 9bdbbad55c68a5ff - --VLDDQU_256(reg) -+VMOVNTDQ_256(reg) - before - b4b397da4c8be338.74b07837e433834b.d303a86f9dd55380.4572edf2d35ce9f1 - c2739af55f3ae2c6.f0f31507e4ae30a0.9b8598b20b8c6aee.3f18b04eb8696d33 -@@ -38135,7 +38135,7 @@ VLDDQU_256(reg) - 2068bd943300df56.9508c56eed0dbcbb.45d66c01ab552147.b4eb078dd91433e6 - 29defe2264691694.3fbb035a1c5ce3c9.2d421eca1abbb439.80b56e99526af535 - 7e43625f3e76704d --VLDDQU_256(mem) -+VMOVNTDQ_256(mem) - before - 8c615eccb9445f59.3b21590b8d02c32b.cad74bb68ca861f6.af15ad78f34b5e6d - 85dbdecbe0e07f86.b07dc8bb4a5622c8.122a1a6e5afcf16d.279b1277d38f5c92 -@@ -38143,13 +38143,13 @@ VLDDQU_256(mem) - a8125b2ea1b542f2.37afd620f35fe4c2.48a039a37eed3aeb.69ef521816694459 - eb562592b116a554 - after -- 8c615eccb9445f59.3b21590b8d02c32b.cad74bb68ca861f6.af15ad78f34b5e6d -- 928c615eccb9445f.593b21590b8d02c3.2bcad74bb68ca861.f6af15ad78f34b5e -+ 85dbdecbe0e07f86.b07dc8bb4a5622c8.122a1a6e5afcf16d.279b1277d38f5c92 -+ 85dbdecbe0e07f86.b07dc8bb4a5622c8.122a1a6e5afcf16d.279b1277d38f5c92 - 457c5e47cf578c00.e63d489e38f16e16.f37eea6ea164505a.f1204a335516ea52 - a8125b2ea1b542f2.37afd620f35fe4c2.48a039a37eed3aeb.69ef521816694459 - eb562592b116a554 - --VLDDQU_256(reg) -+VMOVNTDQ_256(reg) - before - d39fbf0ec3a84aef.8a674f6b72045c88.001d6dad152dbf77.ef5c82f70ca26b4a - 7d171cf6e7ab6fd6.c648b8ea5f5397f0.9ed40ab13de73de2.c37e4158678f9ea3 -@@ -38162,7 +38162,7 @@ VLDDQU_256(reg) - 450a39b8b9ac4fb4.3a81119783abaf54.6b20a799051798af.a0d1f3b0acc19023 - 86c311bed6362735.c1ded75efb1a60e0.c54d42cf094b0c89.612313edf743fdf6 - e43e1df96321a047 --VLDDQU_256(mem) -+VMOVNTDQ_256(mem) - before - 04ef8dc20c683643.9e90a076dad63306.362b842ce2ab65c1.06a6d6c1e60fd71d - 9c02df330f237b16.e8bbe24b6017aed3.773396eb556a7b23.8b795fda37ed3316 -@@ -38170,13 +38170,13 @@ VLDDQU_256(mem) - a87d1bbd922601ef.815e70fb63ade50f.c9a8d6f04da4c918.d1b84131a72d90ea - 4bbd9147fda60a1c - after -- 04ef8dc20c683643.9e90a076dad63306.362b842ce2ab65c1.06a6d6c1e60fd71d -- 1604ef8dc20c6836.439e90a076dad633.06362b842ce2ab65.c106a6d6c1e60fd7 -+ 9c02df330f237b16.e8bbe24b6017aed3.773396eb556a7b23.8b795fda37ed3316 -+ 9c02df330f237b16.e8bbe24b6017aed3.773396eb556a7b23.8b795fda37ed3316 - 8a439038885e2beb.c091d3a80485d647.5fc488886f645e31.b010d98699735d21 - a87d1bbd922601ef.815e70fb63ade50f.c9a8d6f04da4c918.d1b84131a72d90ea - 4bbd9147fda60a1c - --VMAXPS_256(reg) -+VMOVHPS_128_LoadForm(reg) - before - 786bc734386a0564.d47efcaf4986ba4d.896eb4af191917d7.93acfd0e0a367904 - b50ede64f405be6d.e810aff8ca8b1232.320d9b31c058aa4a.979c77cdc2272a20 -@@ -38184,12 +38184,12 @@ VMAXPS_256(reg) - cf62a13e5cf25875.3c1a7c4398b08d3f.dc27434a5778dee3.c16f59e396547e9a - 9eebb911e9a79950 - after -- b50ede645cf25875.3c1a7c4398b08d3f.320d9b315778dee3.979c77cd96547e9a -+ 786bc734386a0564.d47efcaf4986ba4d.896eb4af191917d7.93acfd0e0a367904 - b50ede64f405be6d.e810aff8ca8b1232.320d9b31c058aa4a.979c77cdc2272a20 - 5ef1d343cc0470e4.c200b185303fc4c9.da8721ebf7f3d815.b344c21b92829899 - cf62a13e5cf25875.3c1a7c4398b08d3f.dc27434a5778dee3.c16f59e396547e9a - 9eebb911e9a79950 --VMAXPS_256(mem) -+VMOVHPS_128_LoadForm(mem) - before - 27825c91a78aa5e6.64ab43bf415bb2cb.332a8e1c1dea29c0.933afcbb7f72f761 - 3601c050ed065d89.7919b83417ccba93.84fc62fedcf85477.5d0c48a8086e613a -@@ -38199,11 +38199,11 @@ VMAXPS_256(mem) - after - 27825c91a78aa5e6.64ab43bf415bb2cb.332a8e1c1dea29c0.933afcbb7f72f761 - 3601c050ed065d89.7919b83417ccba93.84fc62fedcf85477.5d0c48a8086e613a -- 3601c050a78aa5e6.7919b834415bb2cb.332a8e1c1dea29c0.5d0c48a87f72f761 -+ 0000000000000000.0000000000000000.933afcbb7f72f761.5d0c48a8086e613a - 5ae7b83680fec4a5.939303a603f4c227.9f15418a75c0453a.951d89abb39912b0 - bdf477970ce1d3a4 - --VMAXPS_256(reg) -+VMOVHPS_128_LoadForm(reg) - before - 66b9e8b1385ad3a4.26e645370492eb76.5038d37c52c23b4c.23f4440c8993849d - eebad864d2904f5c.e9fc812580efae03.fc3164f501c95292.6fc5f946456a41e6 -@@ -38211,12 +38211,12 @@ VMAXPS_256(reg) - 069b2545c165aaa1.c4a1fb7dce3afb04.9653ba80f1ab4833.d26d6a922b5628dd - a1db1e7c8c82cae3 - after -- 069b2545c165aaa1.c4a1fb7d80efae03.9653ba8001c95292.6fc5f946456a41e6 -+ 66b9e8b1385ad3a4.26e645370492eb76.5038d37c52c23b4c.23f4440c8993849d - eebad864d2904f5c.e9fc812580efae03.fc3164f501c95292.6fc5f946456a41e6 - af41431c76108277.7ff6eaee0f24ca79.f5ccb27dad9242a6.6054dc24c7523942 - 069b2545c165aaa1.c4a1fb7dce3afb04.9653ba80f1ab4833.d26d6a922b5628dd - a1db1e7c8c82cae3 --VMAXPS_256(mem) -+VMOVHPS_128_LoadForm(mem) - before - a96c73cf06e3da7f.4f147b4c4f1b0187.95c730bed83ffdcf.3b13766a6a9fa0e6 - c6eae875b68415dd.e6f7409bbbbfc4d5.cc35069d4a3e8b07.3f57e4a8b3fb856b -@@ -38226,11 +38226,11 @@ VMAXPS_256(mem) - after - a96c73cf06e3da7f.4f147b4c4f1b0187.95c730bed83ffdcf.3b13766a6a9fa0e6 - c6eae875b68415dd.e6f7409bbbbfc4d5.cc35069d4a3e8b07.3f57e4a8b3fb856b -- a96c73cf06e3da7f.4f147b4c4f1b0187.95c730be4a3e8b07.3f57e4a86a9fa0e6 -+ 0000000000000000.0000000000000000.3b13766a6a9fa0e6.3f57e4a8b3fb856b - b0e01a6f26b6fc92.6f2f08c59efe7c58.df1882e5d35c3d6c.d9a0c3cb2718e999 - 253b2d8a8af1df9a - --VMAXPS_256(reg) -+VMOVHPS_128_LoadForm(reg) - before - 428b384c2d62541d.33f0d1991f601f41.181c02784db2eae4.732520262392daf2 - 8adcdf7dacf682cd.3c1e96c8bc7b5d62.7fa35c244b83b489.deab4eb64bf3f394 -@@ -38238,12 +38238,12 @@ VMAXPS_256(reg) - 0fb1f7dbb1b9fb67.4d033be2583019ab.f7b11d16a2ad4ac8.a84d4c6f91638bde - c0011370e78b82de - after -- 0fb1f7dbacf682cd.4d033be2583019ab.f7b11d164b83b489.a84d4c6f4bf3f394 -+ 428b384c2d62541d.33f0d1991f601f41.181c02784db2eae4.732520262392daf2 - 8adcdf7dacf682cd.3c1e96c8bc7b5d62.7fa35c244b83b489.deab4eb64bf3f394 - 5b7a2188a43aa557.a635e5e71c117121.0011113433fe15f0.fc74897f668a457f - 0fb1f7dbb1b9fb67.4d033be2583019ab.f7b11d16a2ad4ac8.a84d4c6f91638bde - c0011370e78b82de --VMAXPS_256(mem) -+VMOVHPS_128_LoadForm(mem) - before - 1f5e5a70840de6ab.04cc5fe26effbea8.0d5213a68fe40f2c.c0d17d35331e8fbb - a12e9d5a85f57370.9419530777992bc7.c2efe81dda3710d0.b7bc2cfd83dd1f75 -@@ -38253,11 +38253,11 @@ VMAXPS_256(mem) - after - 1f5e5a70840de6ab.04cc5fe26effbea8.0d5213a68fe40f2c.c0d17d35331e8fbb - a12e9d5a85f57370.9419530777992bc7.c2efe81dda3710d0.b7bc2cfd83dd1f75 -- 1f5e5a70840de6ab.04cc5fe277992bc7.0d5213a68fe40f2c.b7bc2cfd331e8fbb -+ 0000000000000000.0000000000000000.c0d17d35331e8fbb.b7bc2cfd83dd1f75 - 7d5b099c2129f694.f974d55edff6f24e.7a437fd822f0222e.9f216739ce7214f1 - 4834eb840160ef0b - --VMAXPD_128(reg) -+VMOVNTDQA_128(reg) - before - 8e42af2962cc079c.904f29ccf48c654b.851b596976d2c40d.369137f3566caa41 - cf96ad928e419650.36e736969b86edaa.1e235b42c931305b.575ede7310b92e27 -@@ -38265,12 +38265,12 @@ VMAXPD_128(reg) - af444d65b6780bd4.aa3203a9d36c3613.e285c61315a9c44e.37a0e64e83f4161a - afae408275fbf280 - after -- 0000000000000000.0000000000000000.1e235b42c931305b.575ede7310b92e27 -+ 8e42af2962cc079c.904f29ccf48c654b.851b596976d2c40d.369137f3566caa41 - cf96ad928e419650.36e736969b86edaa.1e235b42c931305b.575ede7310b92e27 - 667ee32d214cd9d4.4aeeaae6312249df.1ed7d657759f71e1.b874ef436be3690b - af444d65b6780bd4.aa3203a9d36c3613.e285c61315a9c44e.37a0e64e83f4161a - afae408275fbf280 --VMAXPD_128(mem) -+VMOVNTDQA_128(mem) - before - fb6a77ca5c01b868.0536e5a6e95169fb.317dbcc99c717075.c77727e146da654c - f99f0912551425fe.c69ea95c57632ff6.ba9d5134a93cb22e.27faf62fa3be9088 -@@ -38280,11 +38280,11 @@ VMAXPD_128(mem) - after - fb6a77ca5c01b868.0536e5a6e95169fb.317dbcc99c717075.c77727e146da654c - f99f0912551425fe.c69ea95c57632ff6.ba9d5134a93cb22e.27faf62fa3be9088 -- 0000000000000000.0000000000000000.317dbcc99c717075.27faf62fa3be9088 -- 77a82b53eb8ee4e8.f502a2d75265e317.46870097fd55415c.cbe3caf953d17268 -+ 831b71477c3ff570.4dc994f39b3b9971.235c3fd415d9b96d.5f5a2d68c9e280ad -+ 0000000000000000.0000000000000000.317dbcc99c717075.c77727e146da654c - c7e0c94cdd17a264 - --VMAXPD_128(reg) -+VMOVNTDQA_128(reg) - before - af9f24ce04414b4e.af13b423c10eae92.1c97cf74186b4895.01e912687cbb0628 - df6ad9eb64daabd2.092887a417ca0e9b.1cd2173787db0496.2e50f033ae18c3fc -@@ -38292,12 +38292,12 @@ VMAXPD_128(reg) - 87583ea73c8a7a56.8e80fb65b9278279.1b6eeadbd62775d3.525901679ee4186e - 00932ca8936b2764 - after -- 0000000000000000.0000000000000000.1cd2173787db0496.525901679ee4186e -+ af9f24ce04414b4e.af13b423c10eae92.1c97cf74186b4895.01e912687cbb0628 - df6ad9eb64daabd2.092887a417ca0e9b.1cd2173787db0496.2e50f033ae18c3fc - b38fe310986ffb9b.5fb320c00ccfc12f.5301778a3e4055c7.aa8617e4b0773505 - 87583ea73c8a7a56.8e80fb65b9278279.1b6eeadbd62775d3.525901679ee4186e - 00932ca8936b2764 --VMAXPD_128(mem) -+VMOVNTDQA_128(mem) - before - 91011394ab191f13.b711e61eedba63ae.735a947e3de10ea6.d2666c94ed1ba167 - e26f321503f9bca6.9f08d7e04788f150.e80f68f7b10622e1.d234fa231fa8152f -@@ -38307,11 +38307,11 @@ VMAXPD_128(mem) - after - 91011394ab191f13.b711e61eedba63ae.735a947e3de10ea6.d2666c94ed1ba167 - e26f321503f9bca6.9f08d7e04788f150.e80f68f7b10622e1.d234fa231fa8152f -- 0000000000000000.0000000000000000.735a947e3de10ea6.d234fa231fa8152f -- 2f7a098ae181d42b.07dc86f56333ee21.f535aeb9dfc6cc34.2187267042bfc409 -+ cda80518b618ba4a.9b880e59e48260e7.ca69f1bc33a47757.79268ef3075b0dd6 -+ 0000000000000000.0000000000000000.735a947e3de10ea6.d2666c94ed1ba167 - 27a2bd066b607773 - --VMAXPD_128(reg) -+VMOVNTDQA_128(reg) - before - e8c450211ecb61c2.e4afb9569f40c774.3e513b205e28d5a7.463f18dad079dba3 - be39d92df88bbf9f.c81491680d614f51.9e342a4671eb5228.9753ac0b22c861d1 -@@ -38319,12 +38319,12 @@ VMAXPD_128(reg) - 1c4cc2c8903bc7b9.8e9eaa0d67fb0d7a.466ea2335111fdc5.acc8444e5c6ac118 - 28c13f377bd6138a - after -- 0000000000000000.0000000000000000.466ea2335111fdc5.9753ac0b22c861d1 -+ e8c450211ecb61c2.e4afb9569f40c774.3e513b205e28d5a7.463f18dad079dba3 - be39d92df88bbf9f.c81491680d614f51.9e342a4671eb5228.9753ac0b22c861d1 - 064d5696952cceb8.b8750dab46f128ef.82ce4dd3380ba14e.c53ce738f2bf19e9 - 1c4cc2c8903bc7b9.8e9eaa0d67fb0d7a.466ea2335111fdc5.acc8444e5c6ac118 - 28c13f377bd6138a --VMAXPD_128(mem) -+VMOVNTDQA_128(mem) - before - 15f454e16b0ecc6a.5c8119308543e94e.275be3798b8cbb1e.455f24d3558ba33a - 4f2d0037491fa7e5.233a573811d06e22.5f7734dccfafed06.ddeccf1de204cf59 -@@ -38334,11 +38334,11 @@ VMAXPD_128(mem) - after - 15f454e16b0ecc6a.5c8119308543e94e.275be3798b8cbb1e.455f24d3558ba33a - 4f2d0037491fa7e5.233a573811d06e22.5f7734dccfafed06.ddeccf1de204cf59 -- 0000000000000000.0000000000000000.5f7734dccfafed06.455f24d3558ba33a -- 1ae10a963df9b65a.b1637add5cab9438.1c000e3224dcd153.440e92640625a843 -+ b238be2430146126.cbc1794ecf6f93e1.12c019204e70615e.6963a07f9409bdcd -+ 0000000000000000.0000000000000000.275be3798b8cbb1e.455f24d3558ba33a - cc3aa137d5e4cd67 - --VMAXPD_256(reg) -+VMASKMOVDQU_128(reg) - before - 5b33c9669cd268e4.63f360788bdb62ad.316c56515310acd3.590490ff6efefa11 - 4f44065cf77cb466.693c3cb637c5204a.a7280916512b185e.a498197148e297c3 -@@ -38346,12 +38346,12 @@ VMAXPD_256(reg) - d2e2b04edb32522d.1b9e78f717e2c514.e5e8e543d0b1dbf1.d99f36f9192220b6 - 7aabc0e54995844e - after -- 4f44065cf77cb466.693c3cb637c5204a.a7280916512b185e.a498197148e297c3 -+ 5b33c9669cd268e4.63f360788bdb62ad.316c56515310acd3.590490ff6efefa11 - 4f44065cf77cb466.693c3cb637c5204a.a7280916512b185e.a498197148e297c3 - 02bb5585836eee9b.08861b3d5cc3ad5e.6fe28f98f1871484.db882876cd956596 - d2e2b04edb32522d.1b9e78f717e2c514.e5e8e543d0b1dbf1.d99f36f9192220b6 - 7aabc0e54995844e --VMAXPD_256(mem) -+VMASKMOVDQU_128(mem) - before - 9a76432878fb4c8b.190716219c561cc8.8050cfd1832d2499.658406838934aa52 - 14cd3aadc35f3598.3474806b62668719.12689cb8bdb08519.4b03eec4b99cbd53 -@@ -38359,13 +38359,13 @@ VMAXPD_256(mem) - 8b4f742e1b525ad5.575854156a76338c.2cf98959089040b8.b8da04faeb4c9ee3 - f8ca2ac726ace5cb - after -- 9a76432878fb4c8b.190716219c561cc8.8050cfd1832d2499.658406838934aa52 -+ 9a76432878fb4c8b.190716219c561cc8.8050895908904099.658404faeb4c9e52 - 14cd3aadc35f3598.3474806b62668719.12689cb8bdb08519.4b03eec4b99cbd53 -- 14cd3aadc35f3598.3474806b62668719.12689cb8bdb08519.658406838934aa52 -+ c67c216046cdfba2.8076eb99c7ecd0cc.adb15c96e078a5bf.f2b19a73fb7550a0 - 8b4f742e1b525ad5.575854156a76338c.2cf98959089040b8.b8da04faeb4c9ee3 - f8ca2ac726ace5cb - --VMAXPD_256(reg) -+VMASKMOVDQU_128(reg) - before - 0ecc074448225e02.3e12b00161f90d5c.1668b64de490eb06.6d0aa1ec5204112f - 552e97dfec394835.bd9050c631ced163.1af00dabd4c435e5.4bb1203adae1d551 -@@ -38373,12 +38373,12 @@ VMAXPD_256(reg) - eb3dc11c2b7a5a3d.8bf1acd7e5347ba5.5c9c8b8e80b06f85.4df13fbc11042644 - 2921d7c8f9612a6e - after -- 552e97dfec394835.8bf1acd7e5347ba5.5c9c8b8e80b06f85.4df13fbc11042644 -+ 0ecc074448225e02.3e12b00161f90d5c.1668b64de490eb06.6d0aa1ec5204112f - 552e97dfec394835.bd9050c631ced163.1af00dabd4c435e5.4bb1203adae1d551 - 2b3ad703ae7ddd0f.e397d06aa9de6218.bd3e559dd3a04dd6.a1ba8031bb324849 - eb3dc11c2b7a5a3d.8bf1acd7e5347ba5.5c9c8b8e80b06f85.4df13fbc11042644 - 2921d7c8f9612a6e --VMAXPD_256(mem) -+VMASKMOVDQU_128(mem) - before - 1318c73f8e5711f2.f0835396febdfb6b.936b60fb00ddd936.5357aaea747ed69d - e5a0880eedf297fd.985888ddc4d1fb44.d5d169c117e338f8.febbae1d4d98bfcb -@@ -38386,13 +38386,13 @@ VMAXPD_256(mem) - b596716577446e57.3ddecc83979e0ba9.7b9067e2a63ce8be.e0ad55b91ddf0717 - cfd3f1f94b23dd8e - after -- 1318c73f8e5711f2.f0835396febdfb6b.936b60fb00ddd936.5357aaea747ed69d -+ 1318c73f8e5711f2.f0835396febdfb6b.7b9060e2003cd9be.e0ad55ea74df0717 - e5a0880eedf297fd.985888ddc4d1fb44.d5d169c117e338f8.febbae1d4d98bfcb -- 1318c73f8e5711f2.985888ddc4d1fb44.936b60fb00ddd936.5357aaea747ed69d -+ 7d869721313d77bb.3e075d5e19439774.2fef421445545417.b9139394a78a66ba - b596716577446e57.3ddecc83979e0ba9.7b9067e2a63ce8be.e0ad55b91ddf0717 - cfd3f1f94b23dd8e - --VMAXPD_256(reg) -+VMASKMOVDQU_128(reg) - before - e2d262c1cee225ca.6b9c91c5da1338fd.f327d3b9dd6e938d.9682541657a6b11a - 75f6a47b42a91a78.7964732c77b791db.ba2f6d6d84406acc.5d8f869d749e6b57 -@@ -38400,12 +38400,12 @@ VMAXPD_256(reg) - 8bdd8c7a6a7cffd8.10696ec4cdacdee9.efac4afb6b17f80e.5a2da64f5f69a021 - 4a568c5466549407 - after -- 75f6a47b42a91a78.7964732c77b791db.ba2f6d6d84406acc.5d8f869d749e6b57 -+ e2d262c1cee225ca.6b9c91c5da1338fd.f327d3b9dd6e938d.9682541657a6b11a - 75f6a47b42a91a78.7964732c77b791db.ba2f6d6d84406acc.5d8f869d749e6b57 - e48bb3954203fa43.bcba9388693b341b.f04296092a9fcd13.aa8478611830d1a0 - 8bdd8c7a6a7cffd8.10696ec4cdacdee9.efac4afb6b17f80e.5a2da64f5f69a021 - 4a568c5466549407 --VMAXPD_256(mem) -+VMASKMOVDQU_128(mem) - before - 54cba65a48fe697e.c638299657a166e3.523e7fccbe154b72.14b886aee2352668 - 5557714f2272dab2.f1e78854a4fd6a0f.5c05428c598236e2.bcb4458e2c8494ce -@@ -38413,13 +38413,13 @@ VMAXPD_256(mem) - ade807b22ce983fe.87747a6cd08c3c7c.3b99cfe4fa997925.00a73c85a6e6206d - 56376d740f11b5fd - after -- 54cba65a48fe697e.c638299657a166e3.523e7fccbe154b72.14b886aee2352668 -+ 54cba65a48fe697e.c638299657a166e3.523e7fe4be994b25.00a78685e2e6206d - 5557714f2272dab2.f1e78854a4fd6a0f.5c05428c598236e2.bcb4458e2c8494ce -- 5557714f2272dab2.c638299657a166e3.5c05428c598236e2.14b886aee2352668 -+ 29c8681d0fbca4ce.6837a423ee1d4809.0b8a33f0b9ff5c64.41ea8307e4907eeb - ade807b22ce983fe.87747a6cd08c3c7c.3b99cfe4fa997925.00a73c85a6e6206d - 56376d740f11b5fd - --VMINPS_256(reg) -+VMOVMSKPD_128(reg) - before - 9de61040bb9d7a49.bb84caf994033370.a9ea049ce7d68215.c8fe9055395b4950 - 320023564517abfd.30682ede64196f4d.2ce5401fce875580.8f84f42d91528712 -@@ -38427,12 +38427,12 @@ VMINPS_256(reg) - b6a4870c6402404c.bf37c532aa627dff.c199bccf7e519579.362693c6ff0c400a - cfdac55f4ce83398 - after -- b6a4870c4517abfd.bf37c532aa627dff.c199bccfce875580.8f84f42dff0c400a -+ 9de61040bb9d7a49.bb84caf994033370.a9ea049ce7d68215.c8fe9055395b4950 - 320023564517abfd.30682ede64196f4d.2ce5401fce875580.8f84f42d91528712 - 71d1a220490a84c5.e85fad4db734f4c4.6bb12962222cf368.6af876591f89f097 - b6a4870c6402404c.bf37c532aa627dff.c199bccf7e519579.362693c6ff0c400a -- cfdac55f4ce83398 --VMINPS_256(mem) -+ 0000000000000002 -+VMOVMSKPD_128(mem) - before - 11e08a102228846c.5dc6d084318c1c3e.91baf27958aec82a.8ceaf3d47e807a61 - d8045dc49ed8f0b3.c38377f64d335348.3ab6ae0fdd258f73.27f1ccdbc047dcca -@@ -38442,11 +38442,11 @@ VMINPS_256(mem) - after - 11e08a102228846c.5dc6d084318c1c3e.91baf27958aec82a.8ceaf3d47e807a61 - d8045dc49ed8f0b3.c38377f64d335348.3ab6ae0fdd258f73.27f1ccdbc047dcca -- d8045dc49ed8f0b3.c38377f6318c1c3e.91baf279dd258f73.8ceaf3d4c047dcca -+ ff11ba69db053299.42277acd53832316.96f577de56d28f03.edf84252dd31f860 - 64d51eebf6ba0849.37fed575e009c654.8144c7d4dfc18309.3c4b51a473cb0ad0 - 6e38f53d1ea04dc6 - --VMINPS_256(reg) -+VMOVMSKPD_128(reg) - before - e10a2b89783cffed.e21a03340a032cf0.fe54825a8f5078ad.d66e1cdb93ff28af - ef0ceef4202c59f2.55ade73134ed5bb9.f3747fe8fde577cd.7341f2e18e973a21 -@@ -38454,12 +38454,12 @@ VMINPS_256(reg) - 50d30bd8c435fc45.8aed9af837d1c863.d64656b084264715.f20e0d97cc06941c - 8ca04b1f45f554fc - after -- ef0ceef4c435fc45.8aed9af834ed5bb9.f3747fe8fde577cd.f20e0d97cc06941c -+ e10a2b89783cffed.e21a03340a032cf0.fe54825a8f5078ad.d66e1cdb93ff28af - ef0ceef4202c59f2.55ade73134ed5bb9.f3747fe8fde577cd.7341f2e18e973a21 - f58b3aebb0fb9a81.995a45ce8f8350d1.71abc78bc552fd61.3387c3d1ed95758c - 50d30bd8c435fc45.8aed9af837d1c863.d64656b084264715.f20e0d97cc06941c -- 8ca04b1f45f554fc --VMINPS_256(mem) -+ 0000000000000003 -+VMOVMSKPD_128(mem) - before - dc0af955776e7159.5a305d28f967bcea.0331609949e47f9d.7d8f28c1d5ea9194 - c01893257b7ea75f.70ee2d48ea1c161e.e2f4159fe1c731a8.c2d23a2c542c168b -@@ -38469,11 +38469,11 @@ VMINPS_256(mem) - after - dc0af955776e7159.5a305d28f967bcea.0331609949e47f9d.7d8f28c1d5ea9194 - c01893257b7ea75f.70ee2d48ea1c161e.e2f4159fe1c731a8.c2d23a2c542c168b -- dc0af955776e7159.5a305d28f967bcea.e2f4159fe1c731a8.c2d23a2cd5ea9194 -+ 1395967b7030b139.ef5976a334e0458a.020034f51a869ab3.015d875b9e7713a6 - b04f7d446f904c14.31bc34a4724087dd.3e223987102e75e7.967b0bbc4f58c490 - dc77c2ba025965f6 - --VMINPS_256(reg) -+VMOVMSKPD_128(reg) - before - 319ea8c053093183.7510c46a97ab341b.936463b941c716c1.7426a040e0ca7f73 - f03cba3cdff165e4.3ca6e7db018c247b.719e004d3c012ee2.7ed8e60fa6667381 -@@ -38481,12 +38481,12 @@ VMINPS_256(reg) - 1b0d4f44169ef4d1.447cb24a11d10ff4.12f271a228c0ed8e.8275fc9781d00cd5 - 34f8c429cfb62973 - after -- f03cba3cdff165e4.3ca6e7db018c247b.12f271a228c0ed8e.8275fc97a6667381 -+ 319ea8c053093183.7510c46a97ab341b.936463b941c716c1.7426a040e0ca7f73 - f03cba3cdff165e4.3ca6e7db018c247b.719e004d3c012ee2.7ed8e60fa6667381 - 749df399419f3dc5.e3db6281cb40d95f.27b406cc007b0dee.3a0386dd7d0f0e3e - 1b0d4f44169ef4d1.447cb24a11d10ff4.12f271a228c0ed8e.8275fc9781d00cd5 -- 34f8c429cfb62973 --VMINPS_256(mem) -+ 0000000000000001 -+VMOVMSKPD_128(mem) - before - 2a595b8082cb2143.3fd7caa7f97bc7b4.3d545221ee4e8266.8ca63d3b505c0a71 - 42643b86b71daf73.3e49612f87c1f21c.a831bef27fc0ede0.f21b660415dca241 -@@ -38496,11 +38496,11 @@ VMINPS_256(mem) - after - 2a595b8082cb2143.3fd7caa7f97bc7b4.3d545221ee4e8266.8ca63d3b505c0a71 - 42643b86b71daf73.3e49612f87c1f21c.a831bef27fc0ede0.f21b660415dca241 -- 2a595b80b71daf73.3e49612ff97bc7b4.a831bef2ee4e8266.f21b660415dca241 -+ 56e5e22989b8902c.73ad0e495bfcb1b3.63dd72a9de350d8f.a09ce96713cbefaa - 43a8cb5315a77f9c.3950cf5f12b93f25.4826eb322ab89e9f.f276c1d2e5b52e5a - 44f5eaaf27279bfa - --VMINPD_128(reg) -+VMOVMSKPD_256(reg) - before - f265606c76ac7139.e67973f276f639ef.ed7ea0df4783d91f.34d6a4797d565b3b - 581220746dd1edc1.192354f1c9b17a51.ec837b3497e6bb4d.04ba196bf319018f -@@ -38508,12 +38508,12 @@ VMINPD_128(reg) - bb526a14c628c65d.a335b6bfb29d81ef.3741430cf6a945f3.bb4d27fcba44f813 - 5b95b97343c3c099 - after -- 0000000000000000.0000000000000000.ec837b3497e6bb4d.bb4d27fcba44f813 -+ f265606c76ac7139.e67973f276f639ef.ed7ea0df4783d91f.34d6a4797d565b3b - 581220746dd1edc1.192354f1c9b17a51.ec837b3497e6bb4d.04ba196bf319018f - d1472432a9214b3e.b973ec3c29e5feed.90ab5ec99d6f205a.929ec6f2a9104cc9 - bb526a14c628c65d.a335b6bfb29d81ef.3741430cf6a945f3.bb4d27fcba44f813 -- 5b95b97343c3c099 --VMINPD_128(mem) -+ 000000000000000d -+VMOVMSKPD_256(mem) - before - 4e40f74560986188.717dee855e729cca.b1352e6681e6be85.3b9229683d2066c3 - 711b5d5d2bd0970c.4f15aaf2108c0731.c03fd11db2cb72d8.f9eb09490e61bf77 -@@ -38523,11 +38523,11 @@ VMINPD_128(mem) - after - 4e40f74560986188.717dee855e729cca.b1352e6681e6be85.3b9229683d2066c3 - 711b5d5d2bd0970c.4f15aaf2108c0731.c03fd11db2cb72d8.f9eb09490e61bf77 -- 0000000000000000.0000000000000000.c03fd11db2cb72d8.f9eb09490e61bf77 -+ 9ef267a7c2761e50.b1669cc57501433d.ac1f1ad160585817.cd96e01b06f78bbb - b291920f4196b181.f2bcbe6b2c5e8e9a.51a0856ca79a2e6c.14e0ab4bc16e073a - 28146543da536fa1 - --VMINPD_128(reg) -+VMOVMSKPD_256(reg) - before - 66800a71ed31fe9c.89c45881c33c0dca.70620e50ce2e22f5.8b8f8edca49cae03 - 2a6e973f9794f1d6.ff5637e96575ed58.86a688e1f9fd3cfa.36b8b10b726a950a -@@ -38535,12 +38535,12 @@ VMINPD_128(reg) - b40455701e1bf3b8.38cb2e4b77ce2df2.e933e6b359c9f0b0.4fe8365bf49b8612 - 75879053de17096c - after -- 0000000000000000.0000000000000000.e933e6b359c9f0b0.36b8b10b726a950a -+ 66800a71ed31fe9c.89c45881c33c0dca.70620e50ce2e22f5.8b8f8edca49cae03 - 2a6e973f9794f1d6.ff5637e96575ed58.86a688e1f9fd3cfa.36b8b10b726a950a - d02b061b730984fb.f015aa33424d0f57.8fd2268949571754.2ee76be72e109eaa - b40455701e1bf3b8.38cb2e4b77ce2df2.e933e6b359c9f0b0.4fe8365bf49b8612 -- 75879053de17096c --VMINPD_128(mem) -+ 000000000000000a -+VMOVMSKPD_256(mem) - before - 7c8ff5bb0b8ee3e4.32427fa9335679b9.b3453d1e1f060456.ee15c3cdc5df03ba - 40cedf7f940ecfa8.a63480344f4753aa.3d4f559656004fae.fcc4b9422a238c1d -@@ -38550,11 +38550,11 @@ VMINPD_128(mem) - after - 7c8ff5bb0b8ee3e4.32427fa9335679b9.b3453d1e1f060456.ee15c3cdc5df03ba - 40cedf7f940ecfa8.a63480344f4753aa.3d4f559656004fae.fcc4b9422a238c1d -- 0000000000000000.0000000000000000.b3453d1e1f060456.fcc4b9422a238c1d -+ 9d0ecc8b98a38ae1.6c25557c0d79bd36.b1b5f1a139c9cb27.6d8cc47e2423c785 - 6f1c36cb3057d0be.e060f8ed0a79f309.ed438e2ae36c34ec.9fb8e1ed4e6aefa0 - ec960bfb44854118 - --VMINPD_128(reg) -+VMOVMSKPD_256(reg) - before - b2703e14a3fff899.91c49c2b7a385d69.5e3367f4e1d130d0.ccc4a61c71f5462b - 4b9376a5066451d0.e1d277989252ec0e.42e89dfb2f10b137.2a05b765ff71bc0d -@@ -38562,12 +38562,12 @@ VMINPD_128(reg) - 6ae4e6db4b21d90f.774f80459a5d03f9.ac2b4fbd9d6c6e93.d2f7b1aa886fc771 - d540927dbc0ad449 - after -- 0000000000000000.0000000000000000.ac2b4fbd9d6c6e93.d2f7b1aa886fc771 -+ b2703e14a3fff899.91c49c2b7a385d69.5e3367f4e1d130d0.ccc4a61c71f5462b - 4b9376a5066451d0.e1d277989252ec0e.42e89dfb2f10b137.2a05b765ff71bc0d - 144baf180a418969.3a1144fc93af3ada.e8cc976f8fbfb2e9.e3d23cf0a8eb53c1 - 6ae4e6db4b21d90f.774f80459a5d03f9.ac2b4fbd9d6c6e93.d2f7b1aa886fc771 -- d540927dbc0ad449 --VMINPD_128(mem) -+ 0000000000000003 -+VMOVMSKPD_256(mem) - before - c7795c565fc73576.a7a916586390806f.7656a65ec2680296.ea50c34ff6a222e1 - 836e89218eb3a724.28e83bfdf11bb834.12f3323327daf4de.fd89ee9336ee0a7e -@@ -38577,11 +38577,11 @@ VMINPD_128(mem) - after - c7795c565fc73576.a7a916586390806f.7656a65ec2680296.ea50c34ff6a222e1 - 836e89218eb3a724.28e83bfdf11bb834.12f3323327daf4de.fd89ee9336ee0a7e -- 0000000000000000.0000000000000000.12f3323327daf4de.fd89ee9336ee0a7e -+ e7ea98cb64d8e67e.49eb51358e4dbe0b.26f2a1b0e6c195fd.4320ccf4f8da6117 - cdba023efd44adb1.67ff556cd8b2cda0.901f6dc11a29a11e.17625aded8f56557 - d49b92bd73c850eb - --VMINPD_256(reg) -+VMOVMSKPS_128(reg) - before - d81772fd64e15e7f.13aa44687703b9e9.dc70420e6bd7239e.2a451452e01dd36e - 7e22f50a48cbcdbe.9386db34eb20c651.058a1487e247fab2.d232114f54a9e818 -@@ -38589,12 +38589,12 @@ VMINPD_256(reg) - 1f14d53c5744b9ef.b531f56237a4d263.e3e857aeee391dca.b88cfe3eb3baaa2c - ae92e607d657cfee - after -- 1f14d53c5744b9ef.b531f56237a4d263.e3e857aeee391dca.d232114f54a9e818 -+ d81772fd64e15e7f.13aa44687703b9e9.dc70420e6bd7239e.2a451452e01dd36e - 7e22f50a48cbcdbe.9386db34eb20c651.058a1487e247fab2.d232114f54a9e818 - 21081850ba13d754.2b1a428e77a79015.3e99c743da8f8f87.62b0e1a490d99c49 - 1f14d53c5744b9ef.b531f56237a4d263.e3e857aeee391dca.b88cfe3eb3baaa2c -- ae92e607d657cfee --VMINPD_256(mem) -+ 000000000000000f -+VMOVMSKPS_128(mem) - before - 228e14ed18bdc7bb.d2932a38baeaae39.0f99709c46244964.50c5c135bad3e127 - ee4c04da92f64ebe.98d212b28092f4de.131c3028c032b147.e17a0042dbe91749 -@@ -38604,11 +38604,11 @@ VMINPD_256(mem) - after - 228e14ed18bdc7bb.d2932a38baeaae39.0f99709c46244964.50c5c135bad3e127 - ee4c04da92f64ebe.98d212b28092f4de.131c3028c032b147.e17a0042dbe91749 -- ee4c04da92f64ebe.d2932a38baeaae39.0f99709c46244964.e17a0042dbe91749 -+ ef9832bc63111f24.cb1a891444c7c58b.9e87aff2c2dbc536.f2541043ed06fbdd - 023d1b7ea417f718.c9ba8ccca3155dec.8da66be66729425e.df9feda38ab6c88e - 04a694cd5185bb09 - --VMINPD_256(reg) -+VMOVMSKPS_128(reg) - before - bdb7002fdc0010fa.01083a0c731692c7.ecfd15453808faac.ba45e0f1cc2be4ea - 661c2c34c7b2030c.c9c50b52ec19ab5d.912e22eba02dd678.023088fd0dea6707 -@@ -38616,12 +38616,12 @@ VMINPD_256(reg) - f716bad72fedb145.2445b3b6495c4aec.d28eb56e563b3de2.531966cc90d4fea2 - 15af93670a178b79 - after -- f716bad72fedb145.c9c50b52ec19ab5d.d28eb56e563b3de2.023088fd0dea6707 -+ bdb7002fdc0010fa.01083a0c731692c7.ecfd15453808faac.ba45e0f1cc2be4ea - 661c2c34c7b2030c.c9c50b52ec19ab5d.912e22eba02dd678.023088fd0dea6707 - 5a231748af28cfec.36400a3c2a2dff05.159bae2a76102efb.4132e1f8447486e0 - f716bad72fedb145.2445b3b6495c4aec.d28eb56e563b3de2.531966cc90d4fea2 -- 15af93670a178b79 --VMINPD_256(mem) -+ 0000000000000009 -+VMOVMSKPS_128(mem) - before - 61c1e4b4d148e890.9842134ee48de5c4.70a083ad66b5483e.25543423dd3c41d9 - 141bd59ffe73d314.99f31d176994a615.f41cf50b9d41b426.6b3926b5a79f748b -@@ -38631,11 +38631,11 @@ VMINPD_256(mem) - after - 61c1e4b4d148e890.9842134ee48de5c4.70a083ad66b5483e.25543423dd3c41d9 - 141bd59ffe73d314.99f31d176994a615.f41cf50b9d41b426.6b3926b5a79f748b -- 141bd59ffe73d314.99f31d176994a615.f41cf50b9d41b426.25543423dd3c41d9 -+ 0a88e314afa50630.5574d49f5b8f31e3.8d8685be090e4bd0.fe8987904eef13a5 - 1fd689ff00e83d11.2a1334535509c2da.17aaafb0c627c969.3b8f532171b859d3 - 7e9886d2aa8683c0 - --VMINPD_256(reg) -+VMOVMSKPS_128(reg) - before - 23f11d1195e6cd18.2fcf434d0c4b36e3.731a399df38f94a8.6e54f0cff199ea1d - 86e41349cf637388.16418ee8f0d7abd1.8bd6e0ebd2ace5f7.6e50c306a56f6918 -@@ -38643,12 +38643,12 @@ VMINPD_256(reg) - f6cb0c549ee5c160.d9bbc3b9ada0fbb3.9c9d0140c2dceec9.d96d0f6c1a787390 - fb27807313c37766 - after -- f6cb0c549ee5c160.d9bbc3b9ada0fbb3.9c9d0140c2dceec9.d96d0f6c1a787390 -+ 23f11d1195e6cd18.2fcf434d0c4b36e3.731a399df38f94a8.6e54f0cff199ea1d - 86e41349cf637388.16418ee8f0d7abd1.8bd6e0ebd2ace5f7.6e50c306a56f6918 - 03be64e6f389b0bc.b0f6e4bdc79a5808.d09324a88eecef73.f36aa441ffb50385 - f6cb0c549ee5c160.d9bbc3b9ada0fbb3.9c9d0140c2dceec9.d96d0f6c1a787390 -- fb27807313c37766 --VMINPD_256(mem) -+ 000000000000000e -+VMOVMSKPS_128(mem) - before - 3762744205a2c933.bb5607ff6b02e21f.6c5ba6c7bff34eff.4d40731f0a0720a5 - 68eb66c50d222622.aead5253f76c4ea5.47a409d219a10e18.3dc777b103f9bfb2 -@@ -38658,11 +38658,11 @@ VMINPD_256(mem) - after - 3762744205a2c933.bb5607ff6b02e21f.6c5ba6c7bff34eff.4d40731f0a0720a5 - 68eb66c50d222622.aead5253f76c4ea5.47a409d219a10e18.3dc777b103f9bfb2 -- 3762744205a2c933.bb5607ff6b02e21f.47a409d219a10e18.3dc777b103f9bfb2 -+ 6a8ed2e9464e4960.2b1ae8bcddb0439f.456169c8d6b6f729.ca800862493e089d - 19173498cd32ef19.8eeac5a6b959fbb9.425d4194123cc45e.4eb5229e77633611 - 26b3c1d229f487bc - --VMOVHPS_128_StoreForm(reg) -+VMOVMSKPS_256(reg) - before - afc6e268fc7b3547.505109c0bddbd478.3369e57e29f4b29e.1a650c22ea4132e5 - 433a7fce8b867d60.ed0acc4b3254b4aa.76e345aec60ca6fb.a845495e79d1fde8 -@@ -38674,8 +38674,8 @@ VMOVHPS_128_StoreForm(reg) - 433a7fce8b867d60.ed0acc4b3254b4aa.76e345aec60ca6fb.a845495e79d1fde8 - 3f5a966e73a19ab3.cb0cf82749a94bda.b2a4e0a42e2d117c.cac97134dcf6e193 - 007422b64f56c9ec.c5240c3f1ee75435.45f7b2cafde330cc.5bbd02912ebe9913 -- 36ec765f8c35e294 --VMOVHPS_128_StoreForm(mem) -+ 0000000000000024 -+VMOVMSKPS_256(mem) - before - 39234b8b11667841.e0d22011bc3346b6.b91e817fcc198ce6.8a29b78ecebb3e98 - 3e2ffd02da5d1647.3cc18aeb55c44dbd.81c6d5d36f4cae1b.dd87eb5b3d40788b -@@ -38683,13 +38683,13 @@ VMOVHPS_128_StoreForm(mem) - c2f1e47da5ce5d0d.d88297cc7d2fe735.024f076706e1a3bb.1cf2d2c067836099 - c1977c305a58850b - after -- 39234b8b11667841.e0d22011bc3346b6.b91e817fcc198ce6.81c6d5d36f4cae1b -+ 39234b8b11667841.e0d22011bc3346b6.b91e817fcc198ce6.8a29b78ecebb3e98 - 3e2ffd02da5d1647.3cc18aeb55c44dbd.81c6d5d36f4cae1b.dd87eb5b3d40788b - 23da06af022679d2.708d5eb0b69419af.fbe78327248a77fd.995b4b9de7ff1a52 - c2f1e47da5ce5d0d.d88297cc7d2fe735.024f076706e1a3bb.1cf2d2c067836099 - c1977c305a58850b - --VMOVHPS_128_StoreForm(reg) -+VMOVMSKPS_256(reg) - before - e398455a5b0bc754.f93f125ae0607e25.d0ec31ab4321f3fe.71c8dd7f325dee7e - e03f2aa807275f22.a2920c31cfe89745.b41629b9a6f778b4.251f815cc3091475 -@@ -38701,8 +38701,8 @@ VMOVHPS_128_StoreForm(reg) - e03f2aa807275f22.a2920c31cfe89745.b41629b9a6f778b4.251f815cc3091475 - 12da2687f9388c1f.9bb44eee8d73659a.e04d7963423cb403.fb2070e8d6f1d0ca - d7b33564ceca88f7.be73557d360ca44f.b0de1f13b27ce099.cd9725118621dfaa -- 79501cc1f0a6fc40 --VMOVHPS_128_StoreForm(mem) -+ 00000000000000ef -+VMOVMSKPS_256(mem) - before - d917d2e62f8be4b9.891753a9216a9057.e8999bcbe7c00f91.8013163792443b1f - cab7c16b60dd5340.85527cc48fa4e0eb.f6f39ec2bc9a638c.ac395a397f1fff44 -@@ -38710,13 +38710,13 @@ VMOVHPS_128_StoreForm(mem) - d0b53f4506f5b62b.cc7ce1292912475d.2972c95f3ff0b65b.8887bb8cee3fb515 - f047cfb4a89d1f1a - after -- d917d2e62f8be4b9.891753a9216a9057.e8999bcbe7c00f91.f6f39ec2bc9a638c -+ d917d2e62f8be4b9.891753a9216a9057.e8999bcbe7c00f91.8013163792443b1f - cab7c16b60dd5340.85527cc48fa4e0eb.f6f39ec2bc9a638c.ac395a397f1fff44 - 28fd673c9ea70502.28afad20b302b35e.c24dda4fcfa65c6b.909be887149a6ab2 - d0b53f4506f5b62b.cc7ce1292912475d.2972c95f3ff0b65b.8887bb8cee3fb515 - f047cfb4a89d1f1a - --VMOVHPS_128_StoreForm(reg) -+VMOVMSKPS_256(reg) - before - 2429206bdf3de26d.9cabc572b3d321e6.cf03144b8f60d693.0730e9dc26852c87 - 7f77aa1d2ead3bba.69ab76afc14e0360.8b9142f27e769cad.3951b4b4a0707b1c -@@ -38728,8 +38728,8 @@ VMOVHPS_128_StoreForm(reg) - 7f77aa1d2ead3bba.69ab76afc14e0360.8b9142f27e769cad.3951b4b4a0707b1c - 5f7e6a36327866ab.1381cce94d7117c4.5d72688a94e2d657.99a2a8d2cabe5f46 - 1f895b23862b9eef.76f8450a73491b3f.a1f2807f6c30c13c.04ef4122bf7a9330 -- 5604f9909cb0d507 --VMOVHPS_128_StoreForm(mem) -+ 0000000000000049 -+VMOVMSKPS_256(mem) - before - 6bad4e087c6ddff6.1be6794ec7512030.6edd5c004de1c9fd.b45d883ea3ea9609 - 1fb5bb767bbc6d2a.aedfc0259076281b.d7fc8eb5fa45de29.f0fe7b31d59e946a -@@ -38737,13 +38737,13 @@ VMOVHPS_128_StoreForm(mem) - d416cee549400910.0dd9ba832ceeb99d.6c182f1137a32b7d.561613679723f695 - 3824b082600bd2b8 - after -- 6bad4e087c6ddff6.1be6794ec7512030.6edd5c004de1c9fd.d7fc8eb5fa45de29 -+ 6bad4e087c6ddff6.1be6794ec7512030.6edd5c004de1c9fd.b45d883ea3ea9609 - 1fb5bb767bbc6d2a.aedfc0259076281b.d7fc8eb5fa45de29.f0fe7b31d59e946a - 4eeabcc6b6a93dcf.36c22c127e26f25b.8d215517948215f0.b22356c69dd8f50a - d416cee549400910.0dd9ba832ceeb99d.6c182f1137a32b7d.561613679723f695 - 3824b082600bd2b8 - --VMOVNTDQ_256(reg) -+VMOVNTPD_128(reg) - before - b4992882931cc71f.8d066bbd4f8e8d1a.917165e33659ba8d.50ad978f00b4dcfd - 26c177d3cde30f76.5586113ce49f8718.1dd6299e39f431d6.15ab097d0ac2e49c -@@ -38756,7 +38756,7 @@ VMOVNTDQ_256(reg) - eae79ae1a9ebe767.08623b4c257db137.0c530320d14a5924.97e002c772d8fe85 - 5c598c18c4c08aa1.816665db2e36c8a3.bb36edd599e76f25.b216fc595302e7e5 - 421a751fca4c5be7 --VMOVNTDQ_256(mem) -+VMOVNTPD_128(mem) - before - 22b8e806f2c416b8.d86149e4b9ef35ce.9e5d0cd41ad68887.87c9e5292d58af82 - 30bcd2f8e773d384.ba4ccdb22403249b.3a14aa230567ac10.ca5ae6882a2855ea -@@ -38764,13 +38764,13 @@ VMOVNTDQ_256(mem) - 4325f7b1abab46ba.1ffb1b00cf0cbdc3.5ef3c1734a9213bf.29a1f418cd16c186 - fceff820ab4c0012 - after -- 30bcd2f8e773d384.ba4ccdb22403249b.3a14aa230567ac10.ca5ae6882a2855ea -+ 22b8e806f2c416b8.d86149e4b9ef35ce.5ef3c1734a9213bf.29a1f418cd16c186 - 30bcd2f8e773d384.ba4ccdb22403249b.3a14aa230567ac10.ca5ae6882a2855ea - 47f1ade3c6674f76.5e6614eca28993b3.3158bdb40cf7f169.e233ec5e2be39c07 - 4325f7b1abab46ba.1ffb1b00cf0cbdc3.5ef3c1734a9213bf.29a1f418cd16c186 - fceff820ab4c0012 - --VMOVNTDQ_256(reg) -+VMOVNTPD_128(reg) - before - b86bf6e462119458.ff222b50b14b737e.5b57dc584618e077.9fb1304cdc42ce3d - b75fe9cf8df2ba03.59b5c5abf45493ec.6dc55562a339357a.cf60872bdd16dd11 -@@ -38783,7 +38783,7 @@ VMOVNTDQ_256(reg) - 5619ce4dc97aaec0.2baa41ae91d16230.b193828983fcfb79.c9cb43fd6a17fd64 - f1e39fcab135ac3b.53cd1c45a4ce9c77.820b5d3882ec6c1f.6bbddfac9e53ea65 - 8f03d72696d55f3e --VMOVNTDQ_256(mem) -+VMOVNTPD_128(mem) - before - 1369a8556da9191b.e40a5ab2e2b0ef1f.ace9d15c4858fced.3e7ae4dd3b96c519 - d1bbcd273fdcd429.8cdafa71f776b419.11ccdcdf997a3fbd.402c12e34a854213 -@@ -38791,13 +38791,13 @@ VMOVNTDQ_256(mem) - 6f530361478d3c87.66a4da243f14b4fd.7312e5dab4b75d1e.858853c3dc6396b4 - 80cb5f74976ae6b5 - after -- d1bbcd273fdcd429.8cdafa71f776b419.11ccdcdf997a3fbd.402c12e34a854213 -+ 1369a8556da9191b.e40a5ab2e2b0ef1f.7312e5dab4b75d1e.858853c3dc6396b4 - d1bbcd273fdcd429.8cdafa71f776b419.11ccdcdf997a3fbd.402c12e34a854213 - a7c5c1872a794c94.439e7b738d1337d4.6040b9bab4402114.e36de3b74c451eb8 - 6f530361478d3c87.66a4da243f14b4fd.7312e5dab4b75d1e.858853c3dc6396b4 - 80cb5f74976ae6b5 - --VMOVNTDQ_256(reg) -+VMOVNTPD_128(reg) - before - 3280013718e64a64.07300ca1b422612f.513611f1a9046640.270eda29b6eab006 - f5f43776fc63fd70.492959338c4677b7.60a11e4468708a48.59001695d5e6d6f8 -@@ -38810,7 +38810,7 @@ VMOVNTDQ_256(reg) - 2773fc9fde6e3c83.120a6703ec05394c.ef31fc8b17e25bc2.e3b415092eb68b22 - 22494d1d5b93434a.3f9fb1fdf06a641a.5a32a83053e91759.a2f65170dc668aad - 739148b8fc0290c8 --VMOVNTDQ_256(mem) -+VMOVNTPD_128(mem) - before - 305274cca997599d.44c1245b0e5c4d70.aab4b30eb381b44c.fcf01ca1b80ef8ba - b6055398ff30a059.e7297fc7935797a2.3015ea205156e50f.33b75649e1df3b91 -@@ -38818,13 +38818,13 @@ VMOVNTDQ_256(mem) - 8e71180919a09b34.24f4afd68611dbd8.feeae3fc906dd8f7.cd8e09eef0b2d54f - e8377ac30ecda58e - after -- b6055398ff30a059.e7297fc7935797a2.3015ea205156e50f.33b75649e1df3b91 -+ 305274cca997599d.44c1245b0e5c4d70.feeae3fc906dd8f7.cd8e09eef0b2d54f - b6055398ff30a059.e7297fc7935797a2.3015ea205156e50f.33b75649e1df3b91 - e17661081bda2227.68cb59cc87105d8b.ad8dd021e7f6b28f.5ad251946ae71b89 - 8e71180919a09b34.24f4afd68611dbd8.feeae3fc906dd8f7.cd8e09eef0b2d54f - e8377ac30ecda58e - --VMOVHPS_128_LoadForm(reg) -+VMOVNTPD_256(reg) - before - 0719a17f61c4c7f3.97c2f685148ec7ab.75f17b512be84c35.fdf69e9c69c51373 - 8580798f84217629.d934766928b161b9.b80bbbaa1221ed4d.877e7eef8d0c1e30 -@@ -38837,7 +38837,7 @@ VMOVHPS_128_LoadForm(reg) - c0b8fe5d1372f0de.309414a27213268a.49916a4bd846facd.784efde0194db75a - 130c2c56ac426ebb.78ae4c1a0dc3d249.84ce84a219e5ae60.ac31995b2895981d - fff5cd4dd6ef7da4 --VMOVHPS_128_LoadForm(mem) -+VMOVNTPD_256(mem) - before - 4d6415a04167241b.d9ca00e7e81e2f6f.8d4e9bbf16ca2123.c60d0519708a47b3 - 724ced41820a47af.703c747b65916da3.4b407b7ca936ce43.699bea1e79bfff72 -@@ -38845,13 +38845,13 @@ VMOVHPS_128_LoadForm(mem) - b1b23f1efcfef3de.7d6f315b916c5342.324ae4eeda6b3408.45d4cd7e130fbee2 - 3617c3b2dc413deb - after -- 4d6415a04167241b.d9ca00e7e81e2f6f.8d4e9bbf16ca2123.c60d0519708a47b3 -+ b1b23f1efcfef3de.7d6f315b916c5342.324ae4eeda6b3408.45d4cd7e130fbee2 - 724ced41820a47af.703c747b65916da3.4b407b7ca936ce43.699bea1e79bfff72 -- 0000000000000000.0000000000000000.c60d0519708a47b3.699bea1e79bfff72 -+ 4a77d21db7e3a28c.32af867ebf276506.8e506a3de01396d6.cac42e1cd1131248 - b1b23f1efcfef3de.7d6f315b916c5342.324ae4eeda6b3408.45d4cd7e130fbee2 - 3617c3b2dc413deb - --VMOVHPS_128_LoadForm(reg) -+VMOVNTPD_256(reg) - before - f9d90d23c734cb10.83c8b0326c68f4cf.abc7728077ed7204.13f9637bb04c6604 - ea65a53d7174a6fd.9b87a143232c628e.1a0543590e36fff7.0c2a65d081c1e6f6 -@@ -38864,7 +38864,7 @@ VMOVHPS_128_LoadForm(reg) - 6508896d758e085d.d7ba8f3f3e56f945.2473a250f2d136c8.fba965d966d7710c - c60fb41d6f0d2edd.122cf411d8f37421.275e8ad2bd4c5322.bb42df837d99c270 - 28c14fb8e213964e --VMOVHPS_128_LoadForm(mem) -+VMOVNTPD_256(mem) - before - 1df13266b052a9d3.68c423bafc7e5428.28aa4ea50e0e904d.7d12f74b0e3391b2 - 78a002770461b72b.a973d0b1b86cb5eb.f40018e7fbb309f6.83dbe6287f102d24 -@@ -38872,13 +38872,13 @@ VMOVHPS_128_LoadForm(mem) - cca65e77ab20b302.75f4d9592aef1b88.2364ed266ccd016e.10dc36ba32e26e5c - 4eab9048aced8c7b - after -- 1df13266b052a9d3.68c423bafc7e5428.28aa4ea50e0e904d.7d12f74b0e3391b2 -+ cca65e77ab20b302.75f4d9592aef1b88.2364ed266ccd016e.10dc36ba32e26e5c - 78a002770461b72b.a973d0b1b86cb5eb.f40018e7fbb309f6.83dbe6287f102d24 -- 0000000000000000.0000000000000000.7d12f74b0e3391b2.83dbe6287f102d24 -+ 14983dd9f94d7c81.e46ab96c3e638ed2.54facfc3bcef9b48.960551d3ac716323 - cca65e77ab20b302.75f4d9592aef1b88.2364ed266ccd016e.10dc36ba32e26e5c - 4eab9048aced8c7b - --VMOVHPS_128_LoadForm(reg) -+VMOVNTPD_256(reg) - before - acc05ce8b720f72b.7e96e23d37e818da.b85c2ce3199d98ba.3c09f0fa2859f895 - 87659408ee07eb18.05344317b8b16934.08efaf76a7f84013.7db6532d0ba03ce8 -@@ -38891,7 +38891,7 @@ VMOVHPS_128_LoadForm(reg) - 39e73613ed2ca5f0.3c4cfff14b86603d.c3f95c7e6f8d5040.c03892a932ad8894 - 1f913d76511d625c.01a991b70c73ba20.44c631670de704ec.e3592a5cb88c99c4 - c0e69531ba4a2ba5 --VMOVHPS_128_LoadForm(mem) -+VMOVNTPD_256(mem) - before - 35aa511353f2fa63.95b1a59bb6665b0b.2e1876551584330a.e6a2299d1e9297c5 - 1c73d9f09f91c129.f7926befb792cfa7.a16528b885c68626.07d9418c3d1b4674 -@@ -38899,13 +38899,13 @@ VMOVHPS_128_LoadForm(mem) - b4403e49c3e12a80.efc5fdd5fec31357.c4c9e879040aaea7.3286bd4617f4e80a - f4951ae90a5c5249 - after -- 35aa511353f2fa63.95b1a59bb6665b0b.2e1876551584330a.e6a2299d1e9297c5 -+ b4403e49c3e12a80.efc5fdd5fec31357.c4c9e879040aaea7.3286bd4617f4e80a - 1c73d9f09f91c129.f7926befb792cfa7.a16528b885c68626.07d9418c3d1b4674 -- 0000000000000000.0000000000000000.e6a2299d1e9297c5.07d9418c3d1b4674 -+ 530baab3bb313d24.a17f89def02df8dc.345d25ca764471a1.01b673a1070c4da8 - b4403e49c3e12a80.efc5fdd5fec31357.c4c9e879040aaea7.3286bd4617f4e80a - f4951ae90a5c5249 - --VMOVNTDQA_128(reg) -+VMOVNTPS_128(reg) - before - a52f86f47bd2c80f.1cdc139cd2aa4368.3db0c23e7de15cc4.2e78edb04b25f963 - 9fa0fdd507e28609.68aca499049a4508.e78cd58708120ecf.4c35b05a69a00f02 -@@ -38918,7 +38918,7 @@ VMOVNTDQA_128(reg) - 3f347cf74916c7e2.727c6d2c76bcec8e.49a5301b3be26623.fbcbae657788acb0 - e236fec6ddfcc847.1717eb42431df423.bf46d166b3dea06c.180762bc93e88c98 - 7db5484bd9cc6be6 --VMOVNTDQA_128(mem) -+VMOVNTPS_128(mem) - before - 07a1dcfe644104c7.e2f47fae601fc5e3.334b98c688c718f6.a4bdb3d40b91f757 - 92979ac250511467.9cb8fb1b6e0cfa63.a3e2f2a360c91531.5654d2d1e088a990 -@@ -38926,13 +38926,13 @@ VMOVNTDQA_128(mem) - 1bd08628be788893.af85d6349872fabe.ea6c9b1d3bfe8991.8e15b8286f6f089a - ccd7775a61772fc4 - after -- 07a1dcfe644104c7.e2f47fae601fc5e3.334b98c688c718f6.a4bdb3d40b91f757 -+ 07a1dcfe644104c7.e2f47fae601fc5e3.ea6c9b1d3bfe8991.8e15b8286f6f089a - 92979ac250511467.9cb8fb1b6e0cfa63.a3e2f2a360c91531.5654d2d1e088a990 - fa63ff81ba0b56f2.6dcf6f79a24ea273.41a974c7e82ca700.30582ac9cd4ef0c2 -- 0000000000000000.0000000000000000.334b98c688c718f6.a4bdb3d40b91f757 -+ 1bd08628be788893.af85d6349872fabe.ea6c9b1d3bfe8991.8e15b8286f6f089a - ccd7775a61772fc4 - --VMOVNTDQA_128(reg) -+VMOVNTPS_128(reg) - before - 45ea63cc40f39feb.d1ababa477a66476.bf252bb8ed023ef1.7af7e191764a790d - 579978e8a76f95bc.f8c1eae001a0a7c9.f9fd6d723d8ca9b7.cd16c40fb41d31a3 -@@ -38945,7 +38945,7 @@ VMOVNTDQA_128(reg) - 5c31b31c33754ce2.6cdcc0c779730cb5.b95795cc239c78bd.bf95bf8312826d7d - b2fe0ed37f93010a.09c8a847fa2a5069.5c81a1343bbce7af.2c3f4ed9ab85ebc7 - f0e1edfe9b3365af --VMOVNTDQA_128(mem) -+VMOVNTPS_128(mem) - before - e74719dcff97975e.b44c87782754f0df.ab531e4ba1d12f0f.3cc58b15227a3238 - ed3d4d61f3bd3f03.bd671979c845550f.2e489ebf897565d3.b67051db73629405 -@@ -38953,13 +38953,13 @@ VMOVNTDQA_128(mem) - 9509bd0cf881dcd9.5834793c64e4702a.479eada78ee1c468.e82a5fc6c5dd9019 - 58d19fc3fd88a2b9 - after -- e74719dcff97975e.b44c87782754f0df.ab531e4ba1d12f0f.3cc58b15227a3238 -+ e74719dcff97975e.b44c87782754f0df.479eada78ee1c468.e82a5fc6c5dd9019 - ed3d4d61f3bd3f03.bd671979c845550f.2e489ebf897565d3.b67051db73629405 - de8f057792b217c8.2b9bc141fef16c43.6e72a48fcf21ade2.26cdeff2cbff4ac1 -- 0000000000000000.0000000000000000.ab531e4ba1d12f0f.3cc58b15227a3238 -+ 9509bd0cf881dcd9.5834793c64e4702a.479eada78ee1c468.e82a5fc6c5dd9019 - 58d19fc3fd88a2b9 - --VMOVNTDQA_128(reg) -+VMOVNTPS_128(reg) - before - d110aa55118dbb4c.f076f10b42364a63.a27d3fd796ab9e6d.959834f3e3c26690 - b1317ce89a77187f.caa31e608bde1c92.63c30e7c31d131bb.342cb560e9cf4f87 -@@ -38972,7 +38972,7 @@ VMOVNTDQA_128(reg) - 538111e936d3f5fd.ff5dbff7f0840f91.f852e298d0e266be.ff26acd8bd143a79 - 134c66c2812b8d73.6a6e50bc8d34df8d.be76b898106b7923.d45196497a9ee491 - 8e7bee9d3c7809fc --VMOVNTDQA_128(mem) -+VMOVNTPS_128(mem) - before - 086e30c220ae64e5.4ddd76e1160e1d8d.e9a24e9b7cfb48b2.0f7b8be68cf7a695 - 20f7d8a3424db279.5d823db09105e1f6.57c73380dce4052b.48ad56f0e11229c1 -@@ -38980,13 +38980,13 @@ VMOVNTDQA_128(mem) - 96fb4b49adf31751.6e33e013ac64f467.6f10a70d584d6ecb.e3c6cae484271ff5 - fc4669a70a380a56 - after -- 086e30c220ae64e5.4ddd76e1160e1d8d.e9a24e9b7cfb48b2.0f7b8be68cf7a695 -+ 086e30c220ae64e5.4ddd76e1160e1d8d.6f10a70d584d6ecb.e3c6cae484271ff5 - 20f7d8a3424db279.5d823db09105e1f6.57c73380dce4052b.48ad56f0e11229c1 - b1e2622cbd60afe4.9e85b79d8f9e145b.8fa87d58c6fbd325.c5571820aa493d52 -- 0000000000000000.0000000000000000.e9a24e9b7cfb48b2.0f7b8be68cf7a695 -+ 96fb4b49adf31751.6e33e013ac64f467.6f10a70d584d6ecb.e3c6cae484271ff5 - fc4669a70a380a56 - --VMASKMOVDQU_128(reg) -+VMOVNTPS_256(reg) - before - 6d23f2d5d9093c20.ad0e0ee62f13a5ec.28d9b57e83e4bbc7.d2cc2d8daee5914a - 92a960da8c25ef00.d0e627ef5ecb16e3.27c0314ab0a9a526.93a88cc2e3cff9cd -@@ -38999,7 +38999,7 @@ VMASKMOVDQU_128(reg) - c724af23bf1860a1.dd50125157282660.c93750e3d03ff032.90703e9a14186282 - 68dfdc1a0f6fcab0.ae194bf63535908f.68890eb67e32d694.a3f0c1005ccb8892 - a9f490e0d7f5262b --VMASKMOVDQU_128(mem) -+VMOVNTPS_256(mem) - before - 7f472826a2a1f979.d128e12c18b56ad9.210b4fcb15fe119d.6201682d570f94fb - ffb603bed9dbbda8.5e49bcc675767cc7.10f299bd128f65b6.12ec59b5f6626510 -@@ -39007,13 +39007,13 @@ VMASKMOVDQU_128(mem) - 71187795f82a0656.5446e23e9c9be5a4.d6d4f0a4d53b75b7.024cf0a9f89634fb - fc578eed9390a828 - after -- 7f472826a2a1f979.d128e12c18b56ad9.21d4f0a4153b11b7.624c68a9f80f94fb -+ 71187795f82a0656.5446e23e9c9be5a4.d6d4f0a4d53b75b7.024cf0a9f89634fb - ffb603bed9dbbda8.5e49bcc675767cc7.10f299bd128f65b6.12ec59b5f6626510 - 070d9f9497af2de3.6b8f6852c23f3c27.589ca5b749f54805.d397ddbbf8b58782 - 71187795f82a0656.5446e23e9c9be5a4.d6d4f0a4d53b75b7.024cf0a9f89634fb - fc578eed9390a828 - --VMASKMOVDQU_128(reg) -+VMOVNTPS_256(reg) - before - 1b06b4f2643021b4.1aa307ab1957042f.75ba24f59f17b4eb.6465f472d36ea9f7 - bda45d240701d94c.de7accc41543e398.2a362ce3653ee5a8.df1c2f0c5e98a0f2 -@@ -39026,7 +39026,7 @@ VMASKMOVDQU_128(reg) - 3c7c85ef198f0d9b.9a6840ca09f95ebd.cf08f5748d9cb486.23c51c5e93c815d4 - f5db28bf3667f84e.283be1ab108532cb.c07a7b14b1bd5c32.0c2c37548d07c5c8 - 771dfddb68636cfb --VMASKMOVDQU_128(mem) -+VMOVNTPS_256(mem) - before - 3e64e8dd41e7c698.440d4200f914d811.65bd2a5247f31bee.58d9bb2f6d2e1a57 - 3ecc764734a08ecc.865ed01efe22e78f.2dbb97aac950d451.f571af315d7a29a2 -@@ -39034,13 +39034,13 @@ VMASKMOVDQU_128(mem) - 59336905d5de5ba8.4e8c35a24193846e.ce5acf232005aa89.ab7ba89b4cd52e58 - 7b86a4da82fb9b1c - after -- 3e64e8dd41e7c698.440d4200f914d811.655acf2320f3aaee.abd9a82f6d2e1a58 -+ 59336905d5de5ba8.4e8c35a24193846e.ce5acf232005aa89.ab7ba89b4cd52e58 - 3ecc764734a08ecc.865ed01efe22e78f.2dbb97aac950d451.f571af315d7a29a2 - 532222065b9981c3.151acd86e21e6175.5c01a5a1b3a81b21.f28e55861f2ec7be - 59336905d5de5ba8.4e8c35a24193846e.ce5acf232005aa89.ab7ba89b4cd52e58 - 7b86a4da82fb9b1c - --VMASKMOVDQU_128(reg) -+VMOVNTPS_256(reg) - before - c0f946b15d2c49b6.2cc9c52fbc7cd8a8.8d0205e0b50e8a27.5f94911a2d753db6 - d421888a78f576d0.a8b0b4722c7eb3ee.2ec637aadd19b04c.eb796773f50392d4 -@@ -39053,7 +39053,7 @@ VMASKMOVDQU_128(reg) - 154a68d370e25c19.a9b6b1b942f0a9a7.8d25c96e53423288.4ed7cd1a94bc630e - ddc0e2f7e07d373b.0ba638f019de75ff.066bb697b3154b88.647840fc27ab6c91 - 09293b03cadc6b88 --VMASKMOVDQU_128(mem) -+VMOVNTPS_256(mem) - before - 19b63a1d985c1a20.8acff062645445e3.aa4bc603ce55d521.f5e4fa919a1d38f7 - 70eab935ad363684.76c2908099f2c0bc.6272d5de7c61833a.b6db92c8a3e63582 -@@ -39061,13 +39061,13 @@ VMASKMOVDQU_128(mem) - 627b280e1f29a463.7f88728684b5efb3.8c766b9d3564bbff.1e77aa9d8dec4e9b - 7db32414a541e281 - after -- 19b63a1d985c1a20.8acff062645445e3.aa4b6b9dce55bb21.1e77aa9d8dec389b -+ 627b280e1f29a463.7f88728684b5efb3.8c766b9d3564bbff.1e77aa9d8dec4e9b - 70eab935ad363684.76c2908099f2c0bc.6272d5de7c61833a.b6db92c8a3e63582 - e993343626767be2.ffe7bcbd1ae4e573.0ee7e36e400c3c75.a59e79a86afc7dd5 - 627b280e1f29a463.7f88728684b5efb3.8c766b9d3564bbff.1e77aa9d8dec4e9b - 7db32414a541e281 - --VMOVMSKPD_128(reg) -+VPACKSSWB_128(reg) - before - 1e9ee07750877532.b66f10a8b25a6e36.54f2ae4573f11c29.b7ebea587775bd04 - 5d84db342a4b455b.c13b68f0fe159585.d8716a678125a681.6b11da8c2349feaf -@@ -39075,12 +39075,12 @@ VMOVMSKPD_128(reg) - 24708068d87b87c4.6b8b593b2b5be948.61dd578670a2c385.dda4020b28702da9 - 54a8312fb8da9250 - after -- 1e9ee07750877532.b66f10a8b25a6e36.54f2ae4573f11c29.b7ebea587775bd04 -+ 0000000000000000.0000000000000000.7f807f8080807f7f.807f80807f807f80 - 5d84db342a4b455b.c13b68f0fe159585.d8716a678125a681.6b11da8c2349feaf - 96b112b5ce188ca8.5eabacd31d67d57c.6851a4594ddcc966.83b6b92455ef3a2d - 24708068d87b87c4.6b8b593b2b5be948.61dd578670a2c385.dda4020b28702da9 -- 0000000000000001 --VMOVMSKPD_128(mem) -+ 54a8312fb8da9250 -+VPACKSSWB_128(mem) - before - c38ec37b2238254d.650f21b8e5ff715c.c2a6ea1544fd8e15.1d637f598904ce8a - 082232db8296a4cd.b4d8f2109130871b.41cadb4e865a800e.f92d1840318d2720 -@@ -39090,11 +39090,11 @@ VMOVMSKPD_128(mem) - after - c38ec37b2238254d.650f21b8e5ff715c.c2a6ea1544fd8e15.1d637f598904ce8a - 082232db8296a4cd.b4d8f2109130871b.41cadb4e865a800e.f92d1840318d2720 -- fd30fc3bf301c9fc.6c18eede779b05ae.c3c1a8d00a7d7a60.51881fa607c90af3 -+ 0000000000000000.0000000000000000.80807f807f7f8080.7f808080807f7f7f - 80839c8791845105.eb1b108e33ca27c0.2358ce89ee733937.81c08ef7a445b2b0 - e521639fa68c5c03 - --VMOVMSKPD_128(reg) -+VPACKSSWB_128(reg) - before - daf79a0aa92b4498.6be88eac792bf815.8c2c578a624c28fe.3f5bc7644e4679be - ba8d2da548aca51a.9c2c4f94c6037958.aa99bc3f9faa4614.f195114d4504f621 -@@ -39102,12 +39102,12 @@ VMOVMSKPD_128(reg) - ae2d5b17cb8ac596.3b7b2a610174fd24.d1b3d485b52fc376.8be385f96a70952f - 2a8da894cf353030 - after -- daf79a0aa92b4498.6be88eac792bf815.8c2c578a624c28fe.3f5bc7644e4679be -+ 0000000000000000.0000000000000000.807f80807f7f807f.8080807f807f7f80 - ba8d2da548aca51a.9c2c4f94c6037958.aa99bc3f9faa4614.f195114d4504f621 - e2311ada1f9dbc35.ed195a2d951792f9.a3ac3c198772baad.16d42730f0b96b8e - ae2d5b17cb8ac596.3b7b2a610174fd24.d1b3d485b52fc376.8be385f96a70952f -- 0000000000000003 --VMOVMSKPD_128(mem) -+ 2a8da894cf353030 -+VPACKSSWB_128(mem) - before - d19f0bed3c14f7be.7aceefc6e8fefce9.63203e1e27257607.92f87fedc66e9b1b - 5ae52af0cc1aa705.a160cf5511859cda.3fd30f4f2236bacc.40c839bf55ba7f47 -@@ -39117,11 +39117,11 @@ VMOVMSKPD_128(mem) - after - d19f0bed3c14f7be.7aceefc6e8fefce9.63203e1e27257607.92f87fedc66e9b1b - 5ae52af0cc1aa705.a160cf5511859cda.3fd30f4f2236bacc.40c839bf55ba7f47 -- a22b818a9c52fc30.812ef82fe2abe314.ac5f1bdf0fb3859f.396fff66ff9faba7 -+ 0000000000000000.0000000000000000.7f7f7f7f807f8080.7f7f7f807f7f7f7f - 853c8ca5c8c9b26c.758667bff8fd0a43.8791dcbc09a993ad.d738cb4d5faa5ae6 - 77719be21166cab1 - --VMOVMSKPD_128(reg) -+VPACKSSWB_128(reg) - before - 76646a90b25f35b3.e0e6c82f6a8a84e4.d9b21773ee065014.aa35d0d12c23a022 - 2e5e35c3de22d799.8df3b012a1a12fc5.090004b66153ef33.f217730b952e6729 -@@ -39129,12 +39129,12 @@ VMOVMSKPD_128(reg) - 3d97ab694433b3c0.506974983802ff71.3c2d869a2ce62b09.61c5b299a824159f - 402847c789287566 - after -- 76646a90b25f35b3.e0e6c82f6a8a84e4.d9b21773ee065014.aa35d0d12c23a022 -+ 0000000000000000.0000000000000000.7f7f807f7f7f7f80.7f7f7f80807f807f - 2e5e35c3de22d799.8df3b012a1a12fc5.090004b66153ef33.f217730b952e6729 - fcabf6e8303aed0f.6930c03c861b6f3b.61ba2bf5ec6f244b.3b033f5460d5a5ef - 3d97ab694433b3c0.506974983802ff71.3c2d869a2ce62b09.61c5b299a824159f -- 0000000000000000 --VMOVMSKPD_128(mem) -+ 402847c789287566 -+VPACKSSWB_128(mem) - before - b4f97ac820eb7f70.4b6e4fb3b79a6559.1e6a4912d0659d94.f8a41312bc443f19 - 9a05c78a897cf0e8.837bde3325fa3f85.afffba966c4d03cf.f06dcdc939169d26 -@@ -39144,11 +39144,11 @@ VMOVMSKPD_128(mem) - after - b4f97ac820eb7f70.4b6e4fb3b79a6559.1e6a4912d0659d94.f8a41312bc443f19 - 9a05c78a897cf0e8.837bde3325fa3f85.afffba966c4d03cf.f06dcdc939169d26 -- cc16abf7dee483fb.410c545328df7cf1.dff4421028c8ed4f.7fd3b02c3ee781dd -+ 0000000000000000.0000000000000000.7f7f8080807f807f.80807f7f80807f80 - 26f8a1fd3e31f5d4.e16bae815fd65949.8a14606d1fe11940.0321b9a6674427e9 - d7a4e3a252b8caf7 - --VMOVMSKPD_256(reg) -+VPAVGB_128(reg) - before - 56a82a8e98cfa7b2.86792587c26f02a0.bfe5e728636a1138.8c2c8d976ea541cd - de798ad5d716fac7.c764b38189a8668b.37c6fbb3d328e26b.c108477b301f2123 -@@ -39156,12 +39156,12 @@ VMOVMSKPD_256(reg) - 75b18624ae61f0ae.5ca6de754a40216c.65eda42a614fba4b.343c4e227e66fdd8 - 2a2c95bd434b7090 - after -- 56a82a8e98cfa7b2.86792587c26f02a0.bfe5e728636a1138.8c2c8d976ea541cd -+ 0000000000000000.0000000000000000.6e90f1a28e61747c.633e2841593d4c48 - de798ad5d716fac7.c764b38189a8668b.37c6fbb3d328e26b.c108477b301f2123 - c963ffe3ab18fee2.c584c7d7aceadcc0.a55ae690489a068d.05740806815b776d - 75b18624ae61f0ae.5ca6de754a40216c.65eda42a614fba4b.343c4e227e66fdd8 -- 0000000000000000 --VMOVMSKPD_256(mem) -+ 2a2c95bd434b7090 -+VPAVGB_128(mem) - before - c20f57c2ea168cc0.3cb119047f7d0cd8.689673487cb7f1ba.d3ca32edb7d03951 - dab2121d92d40c95.7cadb6efb8f98e0c.c520023a605a08d7.4b3e8b46e8abc04a -@@ -39171,11 +39171,11 @@ VMOVMSKPD_256(mem) - after - c20f57c2ea168cc0.3cb119047f7d0cd8.689673487cb7f1ba.d3ca32edb7d03951 - dab2121d92d40c95.7cadb6efb8f98e0c.c520023a605a08d7.4b3e8b46e8abc04a -- 4de241ba5590ad3a.8ff25952f561b1f5.4e100738123521ee.2995ab9f906b8be3 -+ 0000000000000000.0000000000000000.975b3b416e897dc9.8f845f9ad0be7d4e - f76960854f562bdc.d2ccfc97d33fb23f.e131ff2fad55f92d.c91b8f654a9cd6c7 - 871c3105b3cbdca3 - --VMOVMSKPD_256(reg) -+VPAVGB_128(reg) - before - bee48fe96683da23.b313eb6a9d3342a6.a2869d2ced21cd98.5951640a4ec54cbd - ccbea47fff510cf2.5fae5f555a32adc5.596e377be0933daa.913ab4b41092d5cd -@@ -39183,12 +39183,12 @@ VMOVMSKPD_256(reg) - dadce46e565cfb2f.f3e3efee93c772b1.eff446fcbf530faa.b69a032a686f7c17 - 59a9facd369912aa - after -- bee48fe96683da23.b313eb6a9d3342a6.a2869d2ced21cd98.5951640a4ec54cbd -+ 0000000000000000.0000000000000000.579f7fb794593e66.7c7a906810ac93aa - ccbea47fff510cf2.5fae5f555a32adc5.596e377be0933daa.913ab4b41092d5cd - 0cf86c321bc0aebd.d6053733a3602965.54cfc6f2471f3f21.67b96b1b0fc65186 - dadce46e565cfb2f.f3e3efee93c772b1.eff446fcbf530faa.b69a032a686f7c17 -- 000000000000000f --VMOVMSKPD_256(mem) -+ 59a9facd369912aa -+VPAVGB_128(mem) - before - 2eb2caf0964fce6c.91b7069f4ab230f5.94150374467543d6.862ab405e3bbe9f1 - 0f80f17fa49d6d88.8fd5d031964c89ba.9367efb0da765900.76bd0a7950e208a1 -@@ -39198,11 +39198,11 @@ VMOVMSKPD_256(mem) - after - 2eb2caf0964fce6c.91b7069f4ab230f5.94150374467543d6.862ab405e3bbe9f1 - 0f80f17fa49d6d88.8fd5d031964c89ba.9367efb0da765900.76bd0a7950e208a1 -- dae0eb677b8fab2b.2f823d90d4b9412b.cea5308d68d5705a.19f946c4a154a967 -+ 0000000000000000.0000000000000000.943e799290764e6b.7e745f3f9acf79c9 - 699f329237324380.cc094928a08295f4.1f9b41f90e9e4411.cc296452729d08ee - eb9b5e90604a61e3 - --VMOVMSKPD_256(reg) -+VPAVGB_128(reg) - before - d29932e807e6eff2.9a8744eef591f2b4.c4b8f1669735c1c0.64159edfe8dd9050 - dd70dbc702fdefc6.47649c65d0b874f3.71d930b4545d013c.77dec32b119f1144 -@@ -39210,12 +39210,12 @@ VMOVMSKPD_256(reg) - cfd99ccc65ce346f.89320e594f90e040.5ea46334923eabf3.7b9057a5c1daa1f9 - 2311bdac816a2813 - after -- d29932e807e6eff2.9a8744eef591f2b4.c4b8f1669735c1c0.64159edfe8dd9050 -+ 0000000000000000.0000000000000000.51c9199a64724928.56d1787a5bc74a2e - dd70dbc702fdefc6.47649c65d0b874f3.71d930b4545d013c.77dec32b119f1144 - 686d559aed1c9c0c.4d04b6e5e4b48568.31b9028074879014.35c32dc9a5ef8318 - cfd99ccc65ce346f.89320e594f90e040.5ea46334923eabf3.7b9057a5c1daa1f9 -- 000000000000000c --VMOVMSKPD_256(mem) -+ 2311bdac816a2813 -+VPAVGB_128(mem) - before - 0a12dbc8ffaed491.6e03acc805a0f19c.d5b921ac2a5942a7.55e64f3e4a0e8e86 - 0c5f2de75aaf61a0.a13682fc6a1c103f.0e666acc931a67c8.73cbc3093a847478 -@@ -39225,11 +39225,11 @@ VMOVMSKPD_256(mem) - after - 0a12dbc8ffaed491.6e03acc805a0f19c.d5b921ac2a5942a7.55e64f3e4a0e8e86 - 0c5f2de75aaf61a0.a13682fc6a1c103f.0e666acc931a67c8.73cbc3093a847478 -- 06c330f3ac7b8a6b.c3bd19d330d1cc03.100565a4a6df0acf.129eba01fb2b9a76 -+ 0000000000000000.0000000000000000.729046bc5f3a55b8.64d989244249817f - d20c5fda111d0c1f.32e56db9f1486294.b8628e217eb4e8ea.90ac30922b8f3c2b - 47422128663d9644 - --VMOVMSKPS_128(reg) -+VPAVGW_128(reg) - before - 94aa8a2f47c0e36d.4d043687a6a2a3e8.49fa7b1a4c0f0ea0.e049622d37a6bd42 - d33065136aa46051.537831e686150af1.64483d63dab10cd1.65865bb5eec14506 -@@ -39237,12 +39237,12 @@ VMOVMSKPS_128(reg) - 98cb6623e8c1d9fc.7004846a99f53c75.15bfd25805b8ec53.f630b1eac59e5c7c - ba37066f1c796488 - after -- 94aa8a2f47c0e36d.4d043687a6a2a3e8.49fa7b1a4c0f0ea0.e049622d37a6bd42 -+ 0000000000000000.0000000000000000.a13277b18ab65252.44b5a9aed6e84033 - d33065136aa46051.537831e686150af1.64483d63dab10cd1.65865bb5eec14506 - 6122b0406c76499d.c034cde3cd82ff67.de1bb1fe3abb97d3.23e4f7a6bf0f3b60 - 98cb6623e8c1d9fc.7004846a99f53c75.15bfd25805b8ec53.f630b1eac59e5c7c -- 0000000000000003 --VMOVMSKPS_128(mem) -+ ba37066f1c796488 -+VPAVGW_128(mem) - before - 4bc3701fe1ad0fad.d57684277b114e1b.3fb3d467037b7d48.647f9dded93447fd - 85a06de82f45181a.747004b7c1f3e2a6.090f38c62920800c.26a90cfa52bbe47c -@@ -39252,11 +39252,11 @@ VMOVMSKPS_128(mem) - after - 4bc3701fe1ad0fad.d57684277b114e1b.3fb3d467037b7d48.647f9dded93447fd - 85a06de82f45181a.747004b7c1f3e2a6.090f38c62920800c.26a90cfa52bbe47c -- 449c78b5234d3cf9.d105e44154f2d148.aae22d7327eeffec.b9871d1a0bdafe7d -+ 0000000000000000.0000000000000000.24618697164e7eaa.4594556c95f8963d - 64820d72d8d23676.48811f30d39b59ae.fef92d5b18f3b615.7866cba9a01cd2ac - be921213ae0e9cb4 - --VMOVMSKPS_128(reg) -+VPAVGW_128(reg) - before - e956eec4d13b9742.c11da90b6bdfc4bf.3530b2f0d778b483.e120b668183a63b2 - 53005c28a42f0001.373ac66cf780a0fd.f45e97edff171e74.2f23438844d0c0f0 -@@ -39264,12 +39264,12 @@ VMOVMSKPS_128(reg) - 5832dbb9cb9e0cc4.dd2a78376cb0340f.58664c4e24ca1359.7bec5aae8f167dfe - 324adc8ce5df5426 - after -- e956eec4d13b9742.c11da90b6bdfc4bf.3530b2f0d778b483.e120b668183a63b2 -+ 0000000000000000.0000000000000000.eadab240f18e79d1.79f84a977ec8a5f6 - 53005c28a42f0001.373ac66cf780a0fd.f45e97edff171e74.2f23438844d0c0f0 - 59da57abc377139e.a1a5e28299c2875f.e156cc93e404d52d.c4cd51a6b8c08afb - 5832dbb9cb9e0cc4.dd2a78376cb0340f.58664c4e24ca1359.7bec5aae8f167dfe -- 0000000000000001 --VMOVMSKPS_128(mem) -+ 324adc8ce5df5426 -+VPAVGW_128(mem) - before - c4b4522cd726cc9e.aa52e4bf58302620.c69504788d566439.b5d8138a5bf515a5 - 0df6387a80f8a193.ad876e2704ba9e5e.38b1033217c1d30a.54f91db4241117bc -@@ -39279,11 +39279,11 @@ VMOVMSKPS_128(mem) - after - c4b4522cd726cc9e.aa52e4bf58302620.c69504788d566439.b5d8138a5bf515a5 - 0df6387a80f8a193.ad876e2704ba9e5e.38b1033217c1d30a.54f91db4241117bc -- e8dc0a62fd5f8f31.bb1c765f6ec7b029.0e4cf05026fc3dae.901567361cab544b -+ 0000000000000000.0000000000000000.7fa303d5528c9ba2.8569189f400316b1 - 333245d0696951a3.315ff7d12fe3972e.263047bdd7135d50.c777eb7ede4e09fe - 546da7f706877280 - --VMOVMSKPS_128(reg) -+VPAVGW_128(reg) - before - 9341970c31e1cb7e.c9c364b0e122a415.6b9aedebe69b9118.5b2a84674613f11d - df40b52bfbe84fa3.855de3ef809444b5.c61b54182c7ad795.880623398e07b241 -@@ -39291,12 +39291,12 @@ VMOVMSKPS_128(reg) - 13ef7034d92ecb14.e3d7f136a5d95929.4a1a675bdbde3ef1.3e9479051afcb23b - 7fdd27d89615686b - after -- 9341970c31e1cb7e.c9c364b0e122a415.6b9aedebe69b9118.5b2a84674613f11d -+ 0000000000000000.0000000000000000.b1243eee65c3bff2.89cb622cad018914 - df40b52bfbe84fa3.855de3ef809444b5.c61b54182c7ad795.880623398e07b241 - 96b6ffbffe283b9c.45ca3e7763cdecad.9c2c29c49f0ca84e.8b90a11fcbfb5fe7 - 13ef7034d92ecb14.e3d7f136a5d95929.4a1a675bdbde3ef1.3e9479051afcb23b -- 0000000000000004 --VMOVMSKPS_128(mem) -+ 7fdd27d89615686b -+VPAVGW_128(mem) - before - 283827825c533da1.b13704f626863ab8.3d50791762c34756.2c310a497b7bd72a - 1772f6f087c0ec09.cedab77281bac534.2d015106b7977260.9ebc0efa1c6faca5 -@@ -39306,11 +39306,11 @@ VMOVMSKPS_128(mem) - after - 283827825c533da1.b13704f626863ab8.3d50791762c34756.2c310a497b7bd72a - 1772f6f087c0ec09.cedab77281bac534.2d015106b7977260.9ebc0efa1c6faca5 -- 26550e0f346b33d0.c42386128758a833.91b5f5efc0619572.fc096fda5947fc0d -+ 0000000000000000.0000000000000000.3529650f8d2d5cdb.65770ca24bf5c1e8 - 33adedc97e5dcb22.f15f6b43d3eb1e62.433ae1be982e6db9.a2622a56ce8e010e - ec143ad818d1f855 - --VMOVMSKPS_256(reg) -+VPADDSB_128(reg) - before - 366b9bced39a1d8e.18480e0c82a4732a.afda64720200656d.205a925f5b09b660 - dcb349a29a78ab64.b2f1eec35b4be515.5ce06d09af22b7ff.05e283be26ff2b94 -@@ -39318,12 +39318,12 @@ VMOVMSKPS_256(reg) - ac457d99bd9cf59a.769bd73dfeea1a42.efbd9b24f4be6e6a.525a156743698c52 - 73e1ae88ccf5f034 - after -- 366b9bced39a1d8e.18480e0c82a4732a.afda64720200656d.205a925f5b09b660 -+ 0000000000000000.0000000000000000.7f9ded7f25ff08c4.d180b3853b1ab480 - dcb349a29a78ab64.b2f1eec35b4be515.5ce06d09af22b7ff.05e283be26ff2b94 - 3a3841c209f4df84.dd7307da265fde0e.52bd807676dd51c5.cc9e30c7151b8981 - ac457d99bd9cf59a.769bd73dfeea1a42.efbd9b24f4be6e6a.525a156743698c52 -- 00000000000000dc --VMOVMSKPS_256(mem) -+ 73e1ae88ccf5f034 -+VPADDSB_128(mem) - before - 0c017818cdcc7053.8e28fb9351fb2851.5735d9d800fb55dd.8d2bb87fc5504b9b - f784ee0261f9c9da.3c2bb61c629db656.5d0d8997479b4a0a.8955d5f3841f2403 -@@ -39333,11 +39333,11 @@ VMOVMSKPS_256(mem) - after - 0c017818cdcc7053.8e28fb9351fb2851.5735d9d800fb55dd.8d2bb87fc5504b9b - f784ee0261f9c9da.3c2bb61c629db656.5d0d8997479b4a0a.8955d5f3841f2403 -- 11378c31a589b7f5.119baba08b0fd954.64ef6466efd8b6f6.4085eeecceb8354f -+ 0000000000000000.0000000000000000.7f42808047967fe7.807f8d72806f6f9e - 36e6ce93b487f5d1.6bc4d48b69ddcdf8.48a7e53115bd54cd.0c08fdd63ea6b92b - 4a2a001d7075ed42 - --VMOVMSKPS_256(reg) -+VPADDSB_128(reg) - before - 5636f22e01b20d41.425d3113abff419a.a5f22f4a9791d0ee.e60087e5d557e2ba - 8c7acf738ce854d3.11682f9da5fe557c.1a71b747b2b91ce1.18c7c96c49b11ae9 -@@ -39345,12 +39345,12 @@ VMOVMSKPS_256(reg) - e7d63b4d03704a63.6869f18013bec738.2a903faf1c938170.abd015a8c4d67ac0 - c4a8193301b91ac0 - after -- 5636f22e01b20d41.425d3113abff419a.a5f22f4a9791d0ee.e60087e5d557e2ba -+ 0000000000000000.0000000000000000.42fd203707990a5f.d390ed20d988d380 - 8c7acf738ce854d3.11682f9da5fe557c.1a71b747b2b91ce1.18c7c96c49b11ae9 - 4940935aaea3ffa5.7fd3461dbe8eeda2.288c69f055e0ee7e.bbc924b490d7b987 - e7d63b4d03704a63.6869f18013bec738.2a903faf1c938170.abd015a8c4d67ac0 -- 0000000000000083 --VMOVMSKPS_256(mem) -+ c4a8193301b91ac0 -+VPADDSB_128(mem) - before - e21fab43648c55b1.c386c2ba25da71b8.a8f7adb0c0979d6b.7bca37f2a45d1264 - e00047c3085be7c2.399d240cb36daf51.1b49f49ae0272b67.79844c2489cadd05 -@@ -39360,11 +39360,11 @@ VMOVMSKPS_256(mem) - after - e21fab43648c55b1.c386c2ba25da71b8.a8f7adb0c0979d6b.7bca37f2a45d1264 - e00047c3085be7c2.399d240cb36daf51.1b49f49ae0272b67.79844c2489cadd05 -- 9c166a9f0a338b1d.a5665daf46b641d9.9d2b442b907a2f58.7e0a7ab166661e00 -+ 0000000000000000.0000000000000000.c340a180a0bec87f.7f807f168027ef69 - f12e8fc38520feef.632f6a0f7d4063fd.0a69184eea9a6369.e8aabd05d7be1101 - 11af128c795ef1b3 - --VMOVMSKPS_256(reg) -+VPADDSB_128(reg) - before - 576474b2e8d0fbc3.bb14311c962cfc63.cf434598f1985169.3ecfecee0d9584c6 - 1416dfe3bfa26add.d694cf94586541a6.45edecb6404946c8.15283df913774e9c -@@ -39372,12 +39372,12 @@ VMOVMSKPS_256(reg) - 67a1c01716946adc.6e91e795608c8e48.be368c62dee63711.1be743fd391ccb62 - 03e4f0ce91f9f7aa - after -- 576474b2e8d0fbc3.bb14311c962cfc63.cf434598f1985169.3ecfecee0d9584c6 -+ 0000000000000000.0000000000000000.6667468c46287f8f.7f6ac3532b7f7fb3 - 1416dfe3bfa26add.d694cf94586541a6.45edecb6404946c8.15283df913774e9c - a6114f8b9a607bac.1e7ae219e7d788e4.217a5ad606df7fc7.6a42865a184a7c17 - 67a1c01716946adc.6e91e795608c8e48.be368c62dee63711.1be743fd391ccb62 -- 000000000000000c --VMOVMSKPS_256(mem) -+ 03e4f0ce91f9f7aa -+VPADDSB_128(mem) - before - fd0509b93debbc1b.b4122ff1cecc731b.a4a75bf6df920fff.7a6d7cc865ebac53 - e7150bab5800d5e0.e9b097875f94d213.9b86b9277ff5c634.b06a287236791839 -@@ -39387,11 +39387,11 @@ VMOVMSKPS_256(mem) - after - fd0509b93debbc1b.b4122ff1cecc731b.a4a75bf6df920fff.7a6d7cc865ebac53 - e7150bab5800d5e0.e9b097875f94d213.9b86b9277ff5c634.b06a287236791839 -- 9ce2708eff44ff26.63c6f4446476c270.2efb7d135cc07014.bc7b8bceed1db86e -+ 0000000000000000.0000000000000000.8080141d5e87d533.2a7f7f3a7f64c47f - f736b6504dc2f618.7ca142947a0080df.3bd224a893ffc9ca.faeaa1472762c79f - c50567487fd48377 - --VMOVNTPD_128(reg) -+VPADDSW_128(reg) - before - 7b16d73f92ff26a3.d6de59db5f8675e3.918e7ee33cbe470c.9cd728d140be8d84 - 776aef98fc70ecce.13a6d31d509c39b2.fed6a39d463a55a2.2fd6077a7e0a776b -@@ -39399,12 +39399,12 @@ VMOVNTPD_128(reg) - b00a051b4252d5d4.1bc6417241f0800f.50af9802a5a231bb.57f043fd1e76b076 - a4a599aeb8af76f2 - after -- 7b16d73f92ff26a3.d6de59db5f8675e3.918e7ee33cbe470c.9cd728d140be8d84 -+ 0000000000000000.0000000000000000.1e9e80007c3c39f0.fe70440a7fff7fff - 776aef98fc70ecce.13a6d31d509c39b2.fed6a39d463a55a2.2fd6077a7e0a776b - 144caabd58b213a5.8c5aa2003d11feb2.1fc8ad2e3602e44e.ce9a3c9069ee44ad - b00a051b4252d5d4.1bc6417241f0800f.50af9802a5a231bb.57f043fd1e76b076 - a4a599aeb8af76f2 --VMOVNTPD_128(mem) -+VPADDSW_128(mem) - before - 9383b99054a4534c.a5eefa1e57db6f06.9eb62c5e78457af4.edd6608531a57796 - fe561f8d0d6203b1.5146873332d91ce8.eff5dfb0ff1da98e.538b02247697f38b -@@ -39412,13 +39412,13 @@ VMOVNTPD_128(mem) - bc10ad8d4866cb4a.3a7d563fac66a36b.6f938e376b849590.e4cac16298797d71 - c9edd6d9ae8102ba - after -- 9383b99054a4534c.a5eefa1e57db6f06.6f938e376b849590.e4cac16298797d71 -+ 9383b99054a4534c.a5eefa1e57db6f06.9eb62c5e78457af4.edd6608531a57796 - fe561f8d0d6203b1.5146873332d91ce8.eff5dfb0ff1da98e.538b02247697f38b -- c2ec479300f4424c.0e5ca7c470d91a26.eb50d754f283c909.dc1879490f04e145 -+ 0000000000000000.0000000000000000.8eab0c0e77622482.416162a97fff6b21 - bc10ad8d4866cb4a.3a7d563fac66a36b.6f938e376b849590.e4cac16298797d71 - c9edd6d9ae8102ba - --VMOVNTPD_128(reg) -+VPADDSW_128(reg) - before - e6cdb51ceca8adcd.c68dce6702c45bd6.2ff4910f820cf363.558a8243892bca4f - 97b55896ef7bba55.bd30250d491bae1d.4a0f529f8f5848bc.7a012f6566842474 -@@ -39426,12 +39426,12 @@ VMOVNTPD_128(reg) - 25d1e0dfb253e977.e318656defe28b8b.635d5bb4bd0fec3b.f29ea09cce7d369a - fc5d5c89913566f4 - after -- e6cdb51ceca8adcd.c68dce6702c45bd6.2ff4910f820cf363.558a8243892bca4f -+ 0000000000000000.0000000000000000.3228e9fcff2d24dc.35c53eef7fff7fff - 97b55896ef7bba55.bd30250d491bae1d.4a0f529f8f5848bc.7a012f6566842474 - 38f3bdb352856500.7ec52e6b39767f4b.e819975d6fd5dc20.bbc40f8a1e9b5f28 - 25d1e0dfb253e977.e318656defe28b8b.635d5bb4bd0fec3b.f29ea09cce7d369a - fc5d5c89913566f4 --VMOVNTPD_128(mem) -+VPADDSW_128(mem) - before - b5cbc23c84d0ab62.ba9cbb86aa708369.c9f546ff876a8e0a.18289a101693b3ba - f9b54ba1c259c012.52a04c14d7686e80.0c284e0d1c1a44f3.64c651de15ec6f49 -@@ -39439,13 +39439,13 @@ VMOVNTPD_128(mem) - 922dba3191664ee2.00827c963e1a2bce.19bec04eae23b7b6.2cab147b764eb045 - 61891824106faf0a - after -- b5cbc23c84d0ab62.ba9cbb86aa708369.19bec04eae23b7b6.2cab147b764eb045 -+ b5cbc23c84d0ab62.ba9cbb86aa708369.c9f546ff876a8e0a.18289a101693b3ba - f9b54ba1c259c012.52a04c14d7686e80.0c284e0d1c1a44f3.64c651de15ec6f49 -- a4e774a468dc632d.4b298df6d4c7e868.887cf884cafe6873.a1837b8856a65a93 -+ 0000000000000000.0000000000000000.d61d7fffa384d2fd.7ceeebee2c7f2303 - 922dba3191664ee2.00827c963e1a2bce.19bec04eae23b7b6.2cab147b764eb045 - 61891824106faf0a - --VMOVNTPD_128(reg) -+VPADDSW_128(reg) - before - 9c6b83edc195918f.9f5298345a023d5b.ccf91562b0ed745e.9bbb2259e495ede7 - 3a9b5244244d9380.a7248a99debceec4.0dd852c4c7cafec3.ea3d9b90865ec633 -@@ -39453,12 +39453,12 @@ VMOVNTPD_128(reg) - 0a18094873a0e654.18fa9b3a88bb8019.5a01adff51d7c9bf.5f02bf31852a4fca - 3dde62741845776e - after -- 9c6b83edc195918f.9f5298345a023d5b.ccf91562b0ed745e.9bbb2259e495ede7 -+ 0000000000000000.0000000000000000.2c447fffe609066d.cc4d80008000c3f8 - 3a9b5244244d9380.a7248a99debceec4.0dd852c4c7cafec3.ea3d9b90865ec633 - 95668094d622f188.866d0d4d39a11b4b.1e6c312a1e3f07aa.e210a6deb38cfdc5 - 0a18094873a0e654.18fa9b3a88bb8019.5a01adff51d7c9bf.5f02bf31852a4fca - 3dde62741845776e --VMOVNTPD_128(mem) -+VPADDSW_128(mem) - before - 586f0b9388e833dc.f5fde9ce9554af8f.3997b24ee719db5d.1fe3c2aefd1f80ad - 8c82377bf31f3d41.b2601c91dac988e6.c510cd7371c4e641.c75e6ca5bea26a21 -@@ -39466,13 +39466,13 @@ VMOVNTPD_128(mem) - ae5e0551237b2d9e.12d46d7f3c275997.8ec500a57737ff9a.344e7119ec8ac249 - b05bc36d9207a855 - after -- 586f0b9388e833dc.f5fde9ce9554af8f.8ec500a57737ff9a.344e7119ec8ac249 -+ 586f0b9388e833dc.f5fde9ce9554af8f.3997b24ee719db5d.1fe3c2aefd1f80ad - 8c82377bf31f3d41.b2601c91dac988e6.c510cd7371c4e641.c75e6ca5bea26a21 -- b5e3611672f752c8.9d8f9ffdde8cac05.9830689742ca5ef1.b0bda8502fecc1c6 -+ 0000000000000000.0000000000000000.fea7800058ddc19e.e7412f53bbc1eace - ae5e0551237b2d9e.12d46d7f3c275997.8ec500a57737ff9a.344e7119ec8ac249 - b05bc36d9207a855 - --VMOVNTPD_256(reg) -+VPHADDW_128(reg) - before - 81319ab8bcefb197.55bf9f1922b78bef.6c7c82819129c949.829910892b158468 - 011cf26707cf17bb.85d1ac588ab828e6.09d3da70781b38c6.5279132f7b72aa87 -@@ -39480,12 +39480,12 @@ VMOVNTPD_256(reg) - 8260179d6ea4ec57.ef3c0bf007360e78.79be45c66e0407d4.f28de8715dd8c965 - 7b59b1e527f8397d - after -- 81319ab8bcefb197.55bf9f1922b78bef.6c7c82819129c949.829910892b158468 -+ 0000000000000000.0000000000000000.b6de734661b4af7b.e443b0e165a825f9 - 011cf26707cf17bb.85d1ac588ab828e6.09d3da70781b38c6.5279132f7b72aa87 - 8d68c8e40e32166c.1962a6fc7889c0af.442572b98e8be4bb.d9318883825a2d21 - 8260179d6ea4ec57.ef3c0bf007360e78.79be45c66e0407d4.f28de8715dd8c965 - 7b59b1e527f8397d --VMOVNTPD_256(mem) -+VPHADDW_128(mem) - before - 4f605dccfdc63a96.3a52dbfdc2b2d327.e22c571f53ccd06b.04e94f05b413debc - 49706a10fa4f88db.12881170a7e70889.cdfe04777956bfb4.40f48ce1fd42a41f -@@ -39493,13 +39493,13 @@ VMOVNTPD_256(mem) - 23d69563dbbff99b.93f3bf3e92f74bb2.ff78754fc1771bfb.40d590200636f00a - ba444f5bff12eee8 - after -- 23d69563dbbff99b.93f3bf3e92f74bb2.ff78754fc1771bfb.40d590200636f00a -+ 4f605dccfdc63a96.3a52dbfdc2b2d327.e22c571f53ccd06b.04e94f05b413debc - 49706a10fa4f88db.12881170a7e70889.cdfe04777956bfb4.40f48ce1fd42a41f -- 4753549f3b9ede79.664fb361b8cfc729.8e7e90e395e19a80.8b29f8c6e42096ab -+ 0000000000000000.0000000000000000.394b243753ee92cf.d275390acdd5a161 - 23d69563dbbff99b.93f3bf3e92f74bb2.ff78754fc1771bfb.40d590200636f00a - ba444f5bff12eee8 - --VMOVNTPD_256(reg) -+VPHADDW_128(reg) - before - 57c231e3693fcbf2.bbc5ab4af7bf956f.f3c03073d0ead1d1.feb732a81c27ff50 - 729a3224e34ac5d4.e9ec113faaa96e1e.e302026a0f349531.650840d8c0fa02ac -@@ -39507,12 +39507,12 @@ VMOVNTPD_256(reg) - 918c83827127face.7b11bd03466cc5c3.e314ba51fdffc567.df114371543e5428 - aa6030b17cc61a9f - after -- 57c231e3693fcbf2.bbc5ab4af7bf956f.f3c03073d0ead1d1.feb732a81c27ff50 -+ 0000000000000000.0000000000000000.f094bce12f04a939.e56ca465a5e0c3a6 - 729a3224e34ac5d4.e9ec113faaa96e1e.e302026a0f349531.650840d8c0fa02ac - 661a4f8b07be1539.8b16432e108a3fd7.bf043190ea62d27f.12381cccc9fedf3b - 918c83827127face.7b11bd03466cc5c3.e314ba51fdffc567.df114371543e5428 - aa6030b17cc61a9f --VMOVNTPD_256(mem) -+VPHADDW_128(mem) - before - 4df05f7a5ea3f0ce.4d3dca77bd12ae3f.96a7fcaa685dbc11.ab7c981ae597aa94 - a58f4cb715e090de.f77920d4890a6e37.b9a57a0f9169dfeb.7389c7553db7bdb3 -@@ -39520,13 +39520,13 @@ VMOVNTPD_256(mem) - e525523d73ac2158.86c1ea7b0a52016e.820928c469ff9cf5.73c109d6b0bd5b75 - 628514f302bb5f71 - after -- e525523d73ac2158.86c1ea7b0a52016e.820928c469ff9cf5.73c109d6b0bd5b75 -+ 4df05f7a5ea3f0ce.4d3dca77bd12ae3f.96a7fcaa685dbc11.ab7c981ae597aa94 - a58f4cb715e090de.f77920d4890a6e37.b9a57a0f9169dfeb.7389c7553db7bdb3 -- 8f077454bd8ab7fe.ec8c81076e9b7662.bed7b51fdd9beb7e.97874370a2ea396f -+ 0000000000000000.0000000000000000.9351246e4396902b.33b471543adefb6a - e525523d73ac2158.86c1ea7b0a52016e.820928c469ff9cf5.73c109d6b0bd5b75 - 628514f302bb5f71 - --VMOVNTPD_256(reg) -+VPHADDW_128(reg) - before - c21d60333470810e.84b5625e53528a19.2366569cf9ba4d05.e20650eb50a2ae7d - eed7e902e368fcf9.488320a37888ad6c.1dc5c1d6d65f93d3.b89ca881af8edc41 -@@ -39534,12 +39534,12 @@ VMOVNTPD_256(reg) - 1adca3fd2653f067.b009974903d7137a.9ce48545cb9204c7.39bed7a743777f30 - 9ce4a80eb08b6bb2 - after -- c21d60333470810e.84b5625e53528a19.2366569cf9ba4d05.e20650eb50a2ae7d -+ 0000000000000000.0000000000000000.f8c050538d068540.df9b6a32611d8bcf - eed7e902e368fcf9.488320a37888ad6c.1dc5c1d6d65f93d3.b89ca881af8edc41 - 42fdabccaa300ddd.0d5b09f8ff5b477e.d12b27953dce1285.e195ab71a1d2e36e - 1adca3fd2653f067.b009974903d7137a.9ce48545cb9204c7.39bed7a743777f30 - 9ce4a80eb08b6bb2 --VMOVNTPD_256(mem) -+VPHADDW_128(mem) - before - e6d0989405196521.d1c0cc01f25ee043.0b584883a006cf8d.d83cd5521c37a644 - f35125245d2e27a8.c5f42245aadc1a1c.fb169790f3f635e3.e27f1528cb4a34a9 -@@ -39547,13 +39547,13 @@ VMOVNTPD_256(mem) - c63e0313881af5b1.d080453951615c77.0a0a00d82947f106.d0f553e1b4e703d9 - 6cc0489a268abcfd - after -- c63e0313881af5b1.d080453951615c77.0a0a00d82947f106.d0f553e1b4e703d9 -+ e6d0989405196521.d1c0cc01f25ee043.0b584883a006cf8d.d83cd5521c37a644 - f35125245d2e27a8.c5f42245aadc1a1c.fb169790f3f635e3.e27f1528cb4a34a9 -- 9f32caabd5d56d74.51c6a133ec59da9f.5c0d015e17b202a7.16f940347456eaa1 -+ 0000000000000000.0000000000000000.53db6f93ad8ec27b.92a629d9f7a7fff3 - c63e0313881af5b1.d080453951615c77.0a0a00d82947f106.d0f553e1b4e703d9 - 6cc0489a268abcfd - --VMOVNTPS_128(reg) -+VPHADDD_128(reg) - before - 46a61dcd67ca50b8.44424c49920a798a.a06f0bc27781db51.e1d812ea44c0bf2b - baf3cde51233fdb7.f50a223a10b0b52c.1bdfee39fa4594d8.bd45b27f85292843 -@@ -39561,12 +39561,12 @@ VMOVNTPS_128(reg) - e0f2af7418b28d2f.601662f9d74f4979.8672fca684e5a3a0.f3288de7e7fdbafb - 0636bf92407f5bf2 - after -- 46a61dcd67ca50b8.44424c49920a798a.a06f0bc27781db51.e1d812ea44c0bf2b -+ 0000000000000000.0000000000000000.1454adc581ac44fe.16258311426edac2 - baf3cde51233fdb7.f50a223a10b0b52c.1bdfee39fa4594d8.bd45b27f85292843 - 24f3544ec452fda5.b56200d01e1867c2.9f1cea0c7537c3b9.7a1c5c85078fe879 - e0f2af7418b28d2f.601662f9d74f4979.8672fca684e5a3a0.f3288de7e7fdbafb - 0636bf92407f5bf2 --VMOVNTPS_128(mem) -+VPHADDD_128(mem) - before - 8e1270702f22878d.4a3bd9c3abe0e801.d2f2c4a05760187d.2e2c1e73c4da7138 - 67881b6ecff1faf6.be1bcda718664bc6.e7c1a3b0bb5790f9.f1984ee0d1a3692e -@@ -39574,13 +39574,13 @@ VMOVNTPS_128(mem) - 7b71507b9444a3e3.34d109dff2b019db.696cc4c09d29690b.3cb1c545bfdec6e3 - 7bf70517d969a3f9 - after -- 8e1270702f22878d.4a3bd9c3abe0e801.696cc4c09d29690b.3cb1c545bfdec6e3 -+ 8e1270702f22878d.4a3bd9c3abe0e801.d2f2c4a05760187d.2e2c1e73c4da7138 - 67881b6ecff1faf6.be1bcda718664bc6.e7c1a3b0bb5790f9.f1984ee0d1a3692e -- 6d643d793df86f59.98df8a8cfcd3f22b.7a5179171f416c19.2d00875745cbc72e -+ 0000000000000000.0000000000000000.2a52dd1df3068fab.a31934a9c33bb80e - 7b71507b9444a3e3.34d109dff2b019db.696cc4c09d29690b.3cb1c545bfdec6e3 - 7bf70517d969a3f9 - --VMOVNTPS_128(reg) -+VPHADDD_128(reg) - before - 471e41372ff79a1e.6f7dd262f0e052c0.ee3d480a968bfb83.8fdfff97541b43f9 - fa7177135e14e6fb.24523e196ed8371b.2271417b85efd5cf.c776a7895d24b60f -@@ -39588,12 +39588,12 @@ VMOVNTPS_128(reg) - 88cfbfabb52d7094.408ac4a63f0e96fe.675d57dbb3836100.e23f2a69dba85566 - 7b09fe31883cfafe - after -- 471e41372ff79a1e.6f7dd262f0e052c0.ee3d480a968bfb83.8fdfff97541b43f9 -+ 0000000000000000.0000000000000000.8721d607c74bb3fa.a861174a249b5d98 - fa7177135e14e6fb.24523e196ed8371b.2271417b85efd5cf.c776a7895d24b60f - f13ea216014dc43f.75bd108c2a390f21.2bb8f29d5b68e36a.effc3680d74f7d7a - 88cfbfabb52d7094.408ac4a63f0e96fe.675d57dbb3836100.e23f2a69dba85566 - 7b09fe31883cfafe --VMOVNTPS_128(mem) -+VPHADDD_128(mem) - before - 98272ec2f716276f.1c71c840154026a7.5f85d755c96387dd.31ad6aa329cc8a3f - 1365370a464299e5.0770bb40bd132123.b07ac485e545a0eb.e5f429605acd9bd1 -@@ -39601,13 +39601,13 @@ VMOVNTPS_128(mem) - 9771c06cf3c23c8d.55b54c325827d908.54801c1341de3442.7a9798695b2c649f - 138a408e64a29434 - after -- 98272ec2f716276f.1c71c840154026a7.54801c1341de3442.7a9798695b2c649f -+ 98272ec2f716276f.1c71c840154026a7.5f85d755c96387dd.31ad6aa329cc8a3f - 1365370a464299e5.0770bb40bd132123.b07ac485e545a0eb.e5f429605acd9bd1 -- ca8f94f491cd0c8b.a61893174a319eb5.0e340720aebf9b53.de7e8f7ee214d062 -+ 0000000000000000.0000000000000000.28e95f325b79f4e2.95c0657040c1c531 - 9771c06cf3c23c8d.55b54c325827d908.54801c1341de3442.7a9798695b2c649f - 138a408e64a29434 - --VMOVNTPS_128(reg) -+VPHADDD_128(reg) - before - 07a5835796019ccc.58d73a5d882ee419.7092e3fb827f0dc9.5f2b804abaac29e3 - b0325e3190d5b814.e78c7bb56d1bc159.53fc52df64c778a4.0cffadb233383463 -@@ -39615,12 +39615,12 @@ VMOVNTPS_128(reg) - 95d5c9c9460e1a63.e317464896ae09a6.e1a8ada9c356dd56.b85457c19bb37faf - 6f6ecc41c1bb36d3 - after -- 07a5835796019ccc.58d73a5d882ee419.7092e3fb827f0dc9.5f2b804abaac29e3 -+ 0000000000000000.0000000000000000.f5cbeb8f01543424.b8c3cb834037e215 - b0325e3190d5b814.e78c7bb56d1bc159.53fc52df64c778a4.0cffadb233383463 - 6c7ecc89ebab23b8.225d0060be988f79.5a40974b9b8b5444.35c92136cb8b12ee - 95d5c9c9460e1a63.e317464896ae09a6.e1a8ada9c356dd56.b85457c19bb37faf - 6f6ecc41c1bb36d3 --VMOVNTPS_128(mem) -+VPHADDD_128(mem) - before - 37e1faa159b0f486.8983525f3a8ad9c1.0784c85a116bec0c.4480906777b45185 - ec7a5fcd7e9c75f3.a2d461b665ab9b80.6a7002834cdaf4d6.df163df05331ea7e -@@ -39628,13 +39628,13 @@ VMOVNTPS_128(mem) - 8e4ebc39e18faeac.b78d0657cf0f1bcb.5ef98fc670006248.2da8e213f5ba7d7d - 973cd285f3deefda - after -- 37e1faa159b0f486.8983525f3a8ad9c1.5ef98fc670006248.2da8e213f5ba7d7d -+ 37e1faa159b0f486.8983525f3a8ad9c1.0784c85a116bec0c.4480906777b45185 - ec7a5fcd7e9c75f3.a2d461b665ab9b80.6a7002834cdaf4d6.df163df05331ea7e -- 6b0576b14d8e7446.3d13f43a63fe9d4a.e9a971ad6208dd31.0eb5afb0f45ae5ec -+ 0000000000000000.0000000000000000.18f0b466bc34e1ec.b74af7593248286e - 8e4ebc39e18faeac.b78d0657cf0f1bcb.5ef98fc670006248.2da8e213f5ba7d7d - 973cd285f3deefda - --VMOVNTPS_256(reg) -+VPHADDSW_128(reg) - before - aabe7b72895177b2.3221ab5156addf51.6a8f9479456851b0.a62edab892ce4048 - c178da46549f51af.334ac1e6c9f3c361.b363980c62977aa5.9d12cd71e27e335d -@@ -39642,12 +39642,12 @@ VMOVNTPS_256(reg) - 6ac6a754f7fde9c9.bccd4f321829926f.78b3f73600a6986d.081a9ce582b64774 - 34d670780956e0ce - after -- aabe7b72895177b2.3221ab5156addf51.6a8f9479456851b0.a62edab892ce4048 -+ 0000000000000000.0000000000000000.ffd2957d054e74cf.80007fff800015db - c178da46549f51af.334ac1e6c9f3c361.b363980c62977aa5.9d12cd71e27e335d - 38b6ea6def54b87d.6d9479e2566e1507.ef56107cc228d355.1f72e5dc7e1df6b2 - 6ac6a754f7fde9c9.bccd4f321829926f.78b3f73600a6986d.081a9ce582b64774 - 34d670780956e0ce --VMOVNTPS_256(mem) -+VPHADDSW_128(mem) - before - 7f71dc8130087ded.b5f20d650725203f.fcbfbfc32b30f6c6.abc849a4b89d0498 - c5b95cec12d8dcfd.7488180ebc59998a.09374680ac90fd38.e4df023487995583 -@@ -39655,13 +39655,13 @@ VMOVNTPS_256(mem) - b27b89997904ca9e.bd1d0fd482123f52.fae8852e6688e21c.d8479b66d8d29048 - 4b2e72e19226f47a - after -- b27b89997904ca9e.bd1d0fd482123f52.fae8852e6688e21c.d8479b66d8d29048 -+ 7f71dc8130087ded.b5f20d650725203f.fcbfbfc32b30f6c6.abc849a4b89d0498 - c5b95cec12d8dcfd.7488180ebc59998a.09374680ac90fd38.e4df023487995583 -- e2786ca6ccd3b729.02d2c5b9b1248f57.bf015e55b65362f1.7f451f500827c5da -+ 0000000000000000.0000000000000000.bc8221f6f56cbd35.4fb7a9c8e713dd1c - b27b89997904ca9e.bd1d0fd482123f52.fae8852e6688e21c.d8479b66d8d29048 - 4b2e72e19226f47a - --VMOVNTPS_256(reg) -+VPHADDSW_128(reg) - before - 3449a02dd3b02b1b.118e2eb33577d387.ffb5f2caccb0e526.96ba37f6d73838e5 - efe322b636fb71d8.db7dd7de1d398c11.26e56b072b89bc7f.6f41ee9c26712279 -@@ -39669,12 +39669,12 @@ VMOVNTPS_256(reg) - 4bc30e2fd4051e55.201e261cdfd701b7.8f410b06951cf074.48a1602accac9db1 - ff1212eb5bc6a6ad - after -- 3449a02dd3b02b1b.118e2eb33577d387.ffb5f2caccb0e526.96ba37f6d73838e5 -+ 0000000000000000.0000000000000000.01f23b347fff7fff.7fffe8085ddd48ea - efe322b636fb71d8.db7dd7de1d398c11.26e56b072b89bc7f.6f41ee9c26712279 - d847f2e85893045d.ec1300084c55b268.8cfb74f73a29010b.614a28096e3f5a04 - 4bc30e2fd4051e55.201e261cdfd701b7.8f410b06951cf074.48a1602accac9db1 - ff1212eb5bc6a6ad --VMOVNTPS_256(mem) -+VPHADDSW_128(mem) - before - 6469ba3937993224.a4a171f847dcfc6d.5268c306f2cc342b.89052ba1d9efc566 - 5272d4fe7e2ffd41.3f2e18ad4ca5da50.60be55b2a03f08ef.d791d032a12ebb8e -@@ -39682,13 +39682,13 @@ VMOVNTPS_256(mem) - 38c850a2b6da3f1f.aa841e8f7d3a842a.7dbe46003ed08319.e0339aea2f1cfd2f - 52e2b7e92de5c000 - after -- 38c850a2b6da3f1f.aa841e8f7d3a842a.7dbe46003ed08319.e0339aea2f1cfd2f -+ 6469ba3937993224.a4a171f847dcfc6d.5268c306f2cc342b.89052ba1d9efc566 - 5272d4fe7e2ffd41.3f2e18ad4ca5da50.60be55b2a03f08ef.d791d032a12ebb8e -- a5f8dd284996c331.78b6fdbc7febf3ab.25ec570c053c3930.d632f7268a630f98 -+ 0000000000000000.0000000000000000.156e26f7b4a69f55.7fffa92ea7c38000 - 38c850a2b6da3f1f.aa841e8f7d3a842a.7dbe46003ed08319.e0339aea2f1cfd2f - 52e2b7e92de5c000 - --VMOVNTPS_256(reg) -+VPHADDSW_128(reg) - before - 8989498e1f4896b6.e9aea958e1062f38.33e67694e21ec978.43009c7a6606a1d8 - df764d47a2d3b8fe.92766536e4264ca8.6e2601364924fe41.557dd7679aea5096 -@@ -39696,12 +39696,12 @@ VMOVNTPS_256(reg) - 5b4d97a2c990d7f3.41dcf21ae973043a.6973a1008ec426f8.c95ce94693ee50c5 - e355b9109126198e - after -- 8989498e1f4896b6.e9aea958e1062f38.33e67694e21ec978.43009c7a6606a1d8 -+ 0000000000000000.0000000000000000.80007fffffb4420b.6f5c47652ce4eb80 - df764d47a2d3b8fe.92766536e4264ca8.6e2601364924fe41.557dd7679aea5096 - b1f3bd7f51126584.11ecfe28de46559a.b791bce04ed75e33.8d0372b1f5894c82 - 5b4d97a2c990d7f3.41dcf21ae973043a.6973a1008ec426f8.c95ce94693ee50c5 - e355b9109126198e --VMOVNTPS_256(mem) -+VPHADDSW_128(mem) - before - b9ba5cfd0b3b6307.39d0d61ca5d94bf8.fd11bcf821b816b6.e218ae02a476913c - 255750f81c3bea5d.a7c776598179fd3e.2359d9aea3214738.7dccde502d79ddac -@@ -39709,13 +39709,13 @@ VMOVNTPS_256(mem) - 336819c8752b9d4e.a345cacdacf00a40.184df853f391f5ff.8890988306a403bf - b0381a418fe355ba - after -- 336819c8752b9d4e.a345cacdacf00a40.184df853f391f5ff.8890988306a403bf -+ b9ba5cfd0b3b6307.39d0d61ca5d94bf8.fd11bcf821b816b6.e218ae02a476913c - 255750f81c3bea5d.a7c776598179fd3e.2359d9aea3214738.7dccde502d79ddac -- 05f710ede13269bb.018074c6fafd2972.8d7ec3298abb52ec.95db2e57c55a44f4 -+ 0000000000000000.0000000000000000.ba09386e901a8000.fd07ea595c1c0b25 - 336819c8752b9d4e.a345cacdacf00a40.184df853f391f5ff.8890988306a403bf - b0381a418fe355ba - --VPACKSSWB_128(reg) -+VPMADDUBSW_128(reg) - before - 6b20affbf9a37891.8d74e575f4324241.e96376dc32dedd53.a192f31af9b0e99d - 1391531fe271a6ef.ede8f2e07b5313c1.2f26735d2854de58.02183068b922edf1 -@@ -39723,12 +39723,12 @@ VPACKSSWB_128(reg) - 9e46b951a06515f2.3238bca10f152c17.2bcb516ad70658e6.c01b614ed535106d - d42f4dbd69eda8ed - after -- 0000000000000000.0000000000000000.80807f7f7f7f7f80.7f7f7f807f7f8080 -+ 0000000000000000.0000000000000000.f1bbca60fb3c3c60.f8681988370ae5c7 - 1391531fe271a6ef.ede8f2e07b5313c1.2f26735d2854de58.02183068b922edf1 - 06da0218e6d91b80.3090bbf6259bcdfa.d1dabebe2bdd48fa.18ad2b2b4ef6bb28 - 9e46b951a06515f2.3238bca10f152c17.2bcb516ad70658e6.c01b614ed535106d - d42f4dbd69eda8ed --VPACKSSWB_128(mem) -+VPMADDUBSW_128(mem) - before - 31b66b6426293fd4.38207338ada3ceee.d0ab72cf55ceec45.99452accc6594ac8 - b379372f29f6904d.31b62c38a81f8323.e4b7576a11d1c8af.779344529765594b -@@ -39738,11 +39738,11 @@ VPACKSSWB_128(mem) - after - 31b66b6426293fd4.38207338ada3ceee.d0ab72cf55ceec45.99452accc6594ac8 - b379372f29f6904d.31b62c38a81f8323.e4b7576a11d1c8af.779344529765594b -- 0000000000000000.0000000000000000.807f7f80807f807f.807f7f807f7f807f -+ 0000000000000000.0000000000000000.987d1274dcd31f8b.f7befa8000e70952 - 97ebcae2707052a7.ab418c34d9fdd0e3.e1c6a39c61e5c7ea.f2de2b7849d1c2e6 - 4873f1ef624a9256 - --VPACKSSWB_128(reg) -+VPMADDUBSW_128(reg) - before - 7e0de839cdab7118.b03089a1eb353ce0.e5cf2a074879e0c6.8261010a2d0f6112 - f0f80cc3237f99d7.5ee4e6351cbbd05c.ee48b8a31561dc91.0ac38096dfb40927 -@@ -39750,12 +39750,12 @@ VPACKSSWB_128(reg) - f7f0cc4306b0b6fe.e9c46b880e38e8cb.d82992e73aab868d.3f11ceb86b9b6dc7 - a49395267cf6a3a9 - after -- 0000000000000000.0000000000000000.7f7f80ef7f80807f.80807f807f80807f -+ 0000000000000000.0000000000000000.1b386e6f166ff583.ce00e7488ae31134 - f0f80cc3237f99d7.5ee4e6351cbbd05c.ee48b8a31561dc91.0ac38096dfb40927 - f97f59f70252473f.7dd15d881f0ecb46.20f73275dc43ffef.55ba9b2c95de7955 - f7f0cc4306b0b6fe.e9c46b880e38e8cb.d82992e73aab868d.3f11ceb86b9b6dc7 - a49395267cf6a3a9 --VPACKSSWB_128(mem) -+VPMADDUBSW_128(mem) - before - 600d6c62e5fcd528.44955f11ca2623be.7e898b200847e416.722bd667ca24ad17 - 4f4bd059c1b8bf70.3ebb10cfeb3fca2b.18eb393c27467b54.4a47f860293ab038 -@@ -39765,11 +39765,11 @@ VPACKSSWB_128(mem) - after - 600d6c62e5fcd528.44955f11ca2623be.7e898b200847e416.722bd667ca24ad17 - 4f4bd059c1b8bf70.3ebb10cfeb3fca2b.18eb393c27467b54.4a47f860293ab038 -- 0000000000000000.0000000000000000.7f807f807f808080.7f7f7f7f7f807f80 -+ 0000000000000000.0000000000000000.9e93ed7314a2f9c4.2ce1fdf0ff82cbf8 - 36432c244383af09.a5b9bac8b18cb6bf.cbba2fb045466958.2400cc6cc26e38f1 - de34745834a436e1 - --VPACKSSWB_128(reg) -+VPMADDUBSW_128(reg) - before - 46b4ec6de5a70019.e6951cd122aa2cb3.cb2aaadb8fd7723d.9bbe70e07c5e3876 - b8ca2f187004d144.39da88e8e4b752d5.0c4ba88d39f65819.e1902f4448979236 -@@ -39777,12 +39777,12 @@ VPACKSSWB_128(reg) - 2aeb06db86fa7a25.3771c60382b58733.53d0bb7f64dd909a.3cce17591299d64f - 08d239e1477b38ff - after -- 0000000000000000.0000000000000000.80807f807f80807f.7f807f7f807f7f80 -+ 0000000000000000.0000000000000000.1bfff39a7fffdfef.6738ecb8ed9c10a4 - b8ca2f187004d144.39da88e8e4b752d5.0c4ba88d39f65819.e1902f4448979236 - 90c339c37246e60f.0ae0ed54a5b7dc9c.c569af4a4c74a3ff.78fce8c8c7fc33c5 - 2aeb06db86fa7a25.3771c60382b58733.53d0bb7f64dd909a.3cce17591299d64f - 08d239e1477b38ff --VPACKSSWB_128(mem) -+VPMADDUBSW_128(mem) - before - bad3c94e82ad1502.e18e93cd48abcb33.9b5a8fe196bd0fc7.10ccc9961bbe5b96 - 2d9e438bde3b2883.13f8db0455e513e4.1267c5d8fedc3084.59a9d4fd10a240a1 -@@ -39792,11 +39792,11 @@ VPACKSSWB_128(mem) - after - bad3c94e82ad1502.e18e93cd48abcb33.9b5a8fe196bd0fc7.10ccc9961bbe5b96 - 2d9e438bde3b2883.13f8db0455e513e4.1267c5d8fedc3084.59a9d4fd10a240a1 -- 0000000000000000.0000000000000000.8080807f7f807f7f.7f80807f7f807f7f -+ 0000000000000000.0000000000000000.1d1c8ee38000e56c.e33c8000d7ecd416 - c5c2e5256a9de3b1.554f8cf0bf257ae2.a81c64c4388c2b26.0035d1671ea4478e - 157cbb436fdae1c9 - --VPAVGB_128(reg) -+VPHSUBW_128(reg) - before - 26d5921e6e4384c1.a3b3065ad38902b6.1cd6ed7e53431287.7f5cc69242367e65 - 8f8a5364b46c6e24.b19e010fcc0049ea.ce53fa01a21b917f.daf084291026597c -@@ -39804,12 +39804,12 @@ VPAVGB_128(reg) - da3a80e18b2b01d5.d19175a9e5c5398d.5f610596df263619.8844056765099ae3 - 939cc0e52515788c - after -- 0000000000000000.0000000000000000.ca33d473752a627b.b7ca50506748698a -+ 0000000000000000.0000000000000000.e8d2ec3e86d3bc2e.2baeef64a9394956 - 8f8a5364b46c6e24.b19e010fcc0049ea.ce53fa01a21b917f.daf084291026597c - ade7f981dfe0d99b.cd4e523074107278.c613aee547383376.94a41b77bd697997 - da3a80e18b2b01d5.d19175a9e5c5398d.5f610596df263619.8844056765099ae3 - 939cc0e52515788c --VPAVGB_128(mem) -+VPHSUBW_128(mem) - before - 9278c7dd1996cebd.73cee5f153da247c.9b31e6673b2a5c55.f78bfb800672d414 - 5fa3973b5c9a59a3.d4ee221bd3787c3c.05fb2254934b95fb.e8db8d1056a74a12 -@@ -39819,11 +39819,11 @@ VPAVGB_128(mem) - after - 9278c7dd1996cebd.73cee5f153da247c.9b31e6673b2a5c55.f78bfb800672d414 - 5fa3973b5c9a59a3.d4ee221bd3787c3c.05fb2254934b95fb.e8db8d1056a74a12 -- 0000000000000000.0000000000000000.5096845e673b79a8.f0b3c4482e8d8f13 -+ 0000000000000000.0000000000000000.4b36212b03f5cda2.1c5902b0a435f36b - d71a7ed94058fd3d.5e0519716eb2beba.2d3ce86fb7f23c93.492171cee7fcacca - 71aebdd45f3511db - --VPAVGB_128(reg) -+VPHSUBW_128(reg) - before - 6292933072883e9f.39fd8ef11a2b8e48.3f94cb75c0671fd0.a24c6b75bb9021dd - 7a18f14dbb7f6fc4.db5f5620b2b044b8.58e045433a3aa6af.28b5a75b301b0db5 -@@ -39831,12 +39831,12 @@ VPAVGB_128(reg) - 8a3e327a618fcbdb.4ad5ff6f93020e77.a1de86f2186f1679.d8c63f77e025e9c2 - b904928552bc514e - after -- 0000000000000000.0000000000000000.2e8a65465a7a9b59.627d6134325d657f -+ 0000000000000000.0000000000000000.8115154a7dc988aa.ec636c757ea6dd9a - 7a18f14dbb7f6fc4.db5f5620b2b044b8.58e045433a3aa6af.28b5a75b301b0db5 - 138ed297d7a8dff3.970e525027f4dbb9.0434854979b98f03.9c441a0d339ebc48 - 8a3e327a618fcbdb.4ad5ff6f93020e77.a1de86f2186f1679.d8c63f77e025e9c2 - b904928552bc514e --VPAVGB_128(mem) -+VPHSUBW_128(mem) - before - 1bcd9023a670b019.3c750d62f5be6e26.d07fd86812e69a1d.8a2844aab4e876bd - daecb33ef74cc24e.837f5fbb30c30681.05d95926c1ad3bd7.1b5fbbdde8b1ec7b -@@ -39846,11 +39846,11 @@ VPAVGB_128(mem) - after - 1bcd9023a670b019.3c750d62f5be6e26.d07fd86812e69a1d.8a2844aab4e876bd - daecb33ef74cc24e.837f5fbb30c30681.05d95926c1ad3bd7.1b5fbbdde8b1ec7b -- 0000000000000000.0000000000000000.6bac99476aca6b7a.534480c4cecdb19c -+ 0000000000000000.0000000000000000.07e98737ba82c1d5.534d7a2aa07e03ca - df5b5d9701aeeda9.433c5a700a7dff15.eccd44a61d11ab3a.a4c4c6658a610912 - 5589519130602844 - --VPAVGB_128(reg) -+VPHSUBW_128(reg) - before - 1e6c85e9dede4da0.dd43dcadf24b7f26.7586faa5e04adaa6.57ffa63f02c6f23b - 5ab75fd73068b3d1.a8b170f05141b4be.acd402fbcd1d98f7.e010a04e868e3d00 -@@ -39858,12 +39858,12 @@ VPAVGB_128(reg) - 9fb8f12a33cd3665.154eccaac765f5ed.9ca736b95a02b088.be034c7fde85d387 - cc7cf778e9cc94a2 - after -- 0000000000000000.0000000000000000.79a237ec9d4f87d6.a26fa787a681445b -+ 0000000000000000.0000000000000000.276d0a3449f28441.5627cbdac03eb672 - 5ab75fd73068b3d1.a8b170f05141b4be.acd402fbcd1d98f7.e010a04e868e3d00 - 67b7d9c9c4899884.1c71974b399b479c.45706cdd6c8076b4.64ceaec0c6744ab5 - 9fb8f12a33cd3665.154eccaac765f5ed.9ca736b95a02b088.be034c7fde85d387 - cc7cf778e9cc94a2 --VPAVGB_128(mem) -+VPHSUBW_128(mem) - before - 69052a9803554b32.6006a2661bc0c91f.6f168bf916ac79dd.0dc55bfa322c8120 - 716a61ca492db262.04ede9e918ef8f5e.06935124437b9197.f416d70c918c2627 -@@ -39873,11 +39873,11 @@ VPAVGB_128(mem) - after - 69052a9803554b32.6006a2661bc0c91f.6f168bf916ac79dd.0dc55bfa322c8120 - 716a61ca492db262.04ede9e918ef8f5e.06935124437b9197.f416d70c918c2627 -- 0000000000000000.0000000000000000.3b556e8f2d9485ba.816e9983625c5424 -+ 0000000000000000.0000000000000000.1ce363314e354ef4.4a914e1ce2f6949b - 32f7cb13c8f78353.69b52574be2f9f1f.5bdfdebea5e2681b.9480c553521bdb35 - 05312f60ec636493 - --VPAVGW_128(reg) -+VPHSUBD_128(reg) - before - 5c45e0ee7d10b011.a3b7f7033802646d.e22e1354a05861f7.d1469e0612929f3d - f408d56aa0affb5a.ee8317b5448be6d7.ae70862c06ed4605.f39355d9cdfa59d9 -@@ -39885,12 +39885,12 @@ VPAVGW_128(reg) - 5ccb77d80df082ff.876f230f9e48bd4e.b37fed70d0876372.b00e94d49a244632 - 01d415d4e5fdf047 - after -- 0000000000000000.0000000000000000.6c9c80c94a33677d.c993697fdf9155fb -+ 0000000000000000.0000000000000000.62b10d8f5194d4f7.587cbfd9da670400 - f408d56aa0affb5a.ee8317b5448be6d7.ae70862c06ed4605.f39355d9cdfa59d9 - 2bc6083ef1cb831b.f127a715079ec5be.2ac77b668d7888f5.9f927d25f127521c - 5ccb77d80df082ff.876f230f9e48bd4e.b37fed70d0876372.b00e94d49a244632 - 01d415d4e5fdf047 --VPAVGW_128(mem) -+VPHSUBD_128(mem) - before - 70b07c10eebf0e85.e3621da390aa34b4.8b270890249489b2.a3e4d8b46ca61529 - d86e4574d075591b.1cd9f60a1586d7e3.db1ad182b68fe617.574138a0fc5fd8c5 -@@ -39900,11 +39900,11 @@ VPAVGW_128(mem) - after - 70b07c10eebf0e85.e3621da390aa34b4.8b270890249489b2.a3e4d8b46ca61529 - d86e4574d075591b.1cd9f60a1586d7e3.db1ad182b68fe617.574138a0fc5fd8c5 -- 0000000000000000.0000000000000000.b3216d096d92b7e5.7d9388aab48376f7 -+ 0000000000000000.0000000000000000.996d8122c8c13c75.db751495a51ea025 - 02c0ef6490ee6dfa.1392336196d2db66.cbe5ff6d6cbe4292.7c16481d6ad5845f - a426ef8680a8e4b4 - --VPAVGW_128(reg) -+VPHSUBD_128(reg) - before - 005ffc46fa47469f.7cebc7c8a6c9ad9b.8a6d8d28ca5ab510.24545c3ec80cb900 - ec0d6ac9743ee6cb.6029f10406c90c43.22570b3c71336ee6.372f8e309f38b11f -@@ -39912,12 +39912,12 @@ VPAVGW_128(reg) - e4f75bc9db61ce99.d1092cb512651656.298761fc860970c5.ff585e2c315a131f - 6b3ff40d2369f558 - after -- 0000000000000000.0000000000000000.2df95a234c0e59bd.8c394f3156c3cb9d -+ 0000000000000000.0000000000000000.ed4d9b8a2d0cd5ea.4edc63aa680922ef - ec0d6ac9743ee6cb.6029f10406c90c43.22570b3c71336ee6.372f8e309f38b11f - c47b367b8b18ffe5.8844ea05ccf8451d.399ba90a26e94494.e14210310e4ee61b - e4f75bc9db61ce99.d1092cb512651656.298761fc860970c5.ff585e2c315a131f - 6b3ff40d2369f558 --VPAVGW_128(mem) -+VPHSUBD_128(mem) - before - 03c14fc0008648f2.a8cbd41dffa58f92.18443502f719381a.5065317f2c1f3126 - a1abea32e5bec718.6c449fe593717e7d.37c081d694226a94.08821400b5b5c163 -@@ -39927,11 +39927,11 @@ VPAVGW_128(mem) - after - 03c14fc0008648f2.a8cbd41dffa58f92.18443502f719381a.5065317f2c1f3126 - a1abea32e5bec718.6c449fe593717e7d.37c081d694226a94.08821400b5b5c163 -- 0000000000000000.0000000000000000.28025b6cc59e5157.2c7422c070ea7945 -+ 0000000000000000.0000000000000000.ded50318dbb9ffa7.5c61e8bead33ad63 - 63e7d0fe36ac3cba.6455197d7dced4d7.71afcec86c60e95d.9fa904a8de97411e - 364a08a8b6f9a8f6 - --VPAVGW_128(reg) -+VPHSUBD_128(reg) - before - ce5b1055e10dd058.3ed11332d97aaa8d.5084c0260b78b49f.43b9c7bddeaeaf03 - c426171bfa5ef2f3.905287d3f493349e.ac89a8f27ad9b208.5e36f3ea7a80740f -@@ -39939,12 +39939,12 @@ VPAVGW_128(reg) - 3b1e13a267e91b7f.094def1100d48f25.23402ca368f2f66f.e0b3d29c9de2e90c - fe4d7dfa5d891155 - after -- 0000000000000000.0000000000000000.c01cbb206fac5de4.7e93e1136b32b3df -+ 0000000000000000.0000000000000000.90cf3c72bcf42574.ce5009161c498025 - c426171bfa5ef2f3.905287d3f493349e.ac89a8f27ad9b208.5e36f3ea7a80740f - 74f819669d794d71.3537a7cfa2029717.d3aecd4d647e09bf.9eefce3b5be3f3af - 3b1e13a267e91b7f.094def1100d48f25.23402ca368f2f66f.e0b3d29c9de2e90c - fe4d7dfa5d891155 --VPAVGW_128(mem) -+VPHSUBD_128(mem) - before - d5884a3fb7e529b4.73e1003bf43a99c8.e85edb852914d7f3.f78bbf601fc1b5c5 - 4132b559c601eb55.7990dc9edff903f9.af36e8173ace2dae.abdb84f12877816d -@@ -39954,11 +39954,11 @@ VPAVGW_128(mem) - after - d5884a3fb7e529b4.73e1003bf43a99c8.e85edb852914d7f3.f78bbf601fc1b5c5 - 4132b559c601eb55.7990dc9edff903f9.af36e8173ace2dae.abdb84f12877816d -- 0000000000000000.0000000000000000.cbcae1ce31f182d1.d1b3a229241c9b99 -+ 0000000000000000.0000000000000000.40b5fc6e2835f665.8b9745977c9bfc7c - 48fe56b874a95f10.5fde516e40ef8ac1.6070514581e1ed99.22b9913b99cb3360 - 9edfd2cc3b7f9105 - --VPADDSB_128(reg) -+VPHSUBSW_128(reg) - before - 693a34e19d4becab.9bb983d64b4e8982.f815e3b4ee3d1fb1.0368a7b9f153d122 - e116b2e55bba81fe.f3113f7848e44ee6.ce6754726b298f38.fd580cfcb76eb147 -@@ -39966,12 +39966,12 @@ VPADDSB_128(reg) - 4481f86a5eb3485e.22cc52f8220f9835.a48cc30b400af4bd.6550f79bbbd55717 - 8cf075cf3037951a - after -- 0000000000000000.0000000000000000.0c7ff47f7f68a73b.26650af4a87ffa7b -+ 0000000000000000.0000000000000000.8000c5c4d5eb57f4.7fff80000fa4f9d9 - e116b2e55bba81fe.f3113f7848e44ee6.ce6754726b298f38.fd580cfcb76eb147 - 60bf4b4412598cab.2cd4068a86756a68.3e20a016523f1803.290dfef8f1404934 - 4481f86a5eb3485e.22cc52f8220f9835.a48cc30b400af4bd.6550f79bbbd55717 - 8cf075cf3037951a --VPADDSB_128(mem) -+VPHSUBSW_128(mem) - before - 7ab8f4826c74c069.e7a7b7c3da54f2c2.b0c6a1ae37be9579.5cf7b9bdd0166013 - 0b73ee9f8c979431.a77f82bb22c9c684.b48e6e98e28c1d60.c2ac7f989fef97b1 -@@ -39981,11 +39981,11 @@ VPADDSB_128(mem) - after - 7ab8f4826c74c069.e7a7b7c3da54f2c2.b0c6a1ae37be9579.5cf7b9bdd0166013 - 0b73ee9f8c979431.a77f82bb22c9c684.b48e6e98e28c1d60.c2ac7f989fef97b1 -- 0000000000000000.0000000000000000.80800f801980b27f.1ea338808005f7c4 -+ 0000000000000000.0000000000000000.f0e8800080007fff.7fff3ad47ffff7c2 - 85f648c7e6c125dc.e9703239895cdbd1.8bb872b967bbbdc4.0728687a683a5973 - 9f8683589ac45cef - --VPADDSB_128(reg) -+VPHSUBSW_128(reg) - before - 555e5e107a4a1a63.27559faa58e05b15.25220d96de9394b3.16b2a2c87b324d9a - 85fef40ca55bd07a.dcd862a71e142a78.ecb5e64271cd67a3.85a93fba93fa58c3 -@@ -39993,12 +39993,12 @@ VPADDSB_128(reg) - c2c241854b471444.ee791ea014f18167.8fad7f39bb7b495d.84c1b5fc45abcdbc - ca7a862316adb0e5 - after -- 0000000000000000.0000000000000000.87299eec4c80f6f0.801306378019f12d -+ 0000000000000000.0000000000000000.1d36b3b71113cc4b.f98df5d67fff7fff - 85fef40ca55bd07a.dcd862a71e142a78.ecb5e64271cd67a3.85a93fba93fa58c3 - 8bb141bab780bae2.7f4a0eaa536b4d2f.9b74b8aadb968f4d.b66ac77dcd1f996a - c2c241854b471444.ee791ea014f18167.8fad7f39bb7b495d.84c1b5fc45abcdbc - ca7a862316adb0e5 --VPADDSB_128(mem) -+VPHSUBSW_128(mem) - before - 6661b4de5c2efd10.887ef0d9fd3b194f.042f0e737cb0824b.22aa375baa07d17e - 3242bd19343c7269.38314b216ae906ad.9c395a11a8b70b08.b1b8dd7c46c6635c -@@ -40008,11 +40008,11 @@ VPADDSB_128(mem) - after - 6661b4de5c2efd10.887ef0d9fd3b194f.042f0e737cb0824b.22aa375baa07d17e - 3242bd19343c7269.38314b216ae906ad.9c395a11a8b70b08.b1b8dd7c46c6635c -- 0000000000000000.0000000000000000.a068687f24808d53.d380147ff0cd347f -+ 0000000000000000.0000000000000000.0a44800014b12777.7fff62512bc41c96 - ce214ebf082cbe59.c5acf243e3a08713.c679f75abac6a8bc.3337df6bf40f9302 - de4035113eb0aa22 - --VPADDSB_128(reg) -+VPHSUBSW_128(reg) - before - f5896766a4b5baaf.56b7cd033c270f46.5b0c36f327c19374.104740ded8e7340a - d45f73d7c2a90155.7e77177672de7612.4a92164896cc77d8.4c99d5dc297e38e2 -@@ -40020,12 +40020,12 @@ VPADDSB_128(reg) - 5ae306b9998f1e9f.22a4f99e52b179f6.a743979263ceb65c.0ef8d4f6d7409bda - 4b9d36ea6b837153 - after -- 0000000000000000.0000000000000000.3a80a3f780197fc4.7fd3071cf3167f4f -+ 0000000000000000.0000000000000000.9d247fffdb067fff.cbb67fff89430f64 - d45f73d7c2a90155.7e77177672de7612.4a92164896cc77d8.4c99d5dc297e38e2 - d70f54ce3518b9c2.232da706c55eb0e9.f08b8dafcb4d6fec.573a3240ca98716d - 5ae306b9998f1e9f.22a4f99e52b179f6.a743979263ceb65c.0ef8d4f6d7409bda - 4b9d36ea6b837153 --VPADDSB_128(mem) -+VPHSUBSW_128(mem) - before - ebf6d408a26cb005.b928850289996e9b.55aa892934e68c66.cd06305ff9dd89d3 - cbce2a3d9907141b.5029cd17a1c3e360.9909d4958806a664.bc2054812a0524fd -@@ -40035,11 +40035,11 @@ VPADDSB_128(mem) - after - ebf6d408a26cb005.b928850289996e9b.55aa892934e68c66.cd06305ff9dd89d3 - cbce2a3d9907141b.5029cd17a1c3e360.9909d4958806a664.bc2054812a0524fd -- 0000000000000000.0000000000000000.eeb380bebcec807f.89267fe023e2add0 -+ 0000000000000000.0000000000000000.8000800063598ff6.3b8c1e5e7ffffaf8 - b630ef9835843a25.9693aa52bba42ef6.c50688bdf33cdebd.69882f73cbd2a01d - de6fdd1c738efa6b - --VPADDSW_128(reg) -+VPABSB_128(reg) - before - 8ddc06ca25940c1c.7a505697127e7471.fd943650f5737c20.643be951436a746f - d31ca7ea7e6f11dd.ed20655b1f5bc3d2.0b817cc9c792e0c3.84f9f47675b40160 -@@ -40047,12 +40047,12 @@ VPADDSW_128(reg) - 8f443d2b93d5e73d.51006ce737eb8f81.915122dda5eed927.b744fa1eecccefae - 8269ec7b6ab3c862 - after -- 0000000000000000.0000000000000000.2a287fff961e8000.86071a8c19da431c -+ 0000000000000000.0000000000000000.1e59762932746a74.010e26165c264144 - d31ca7ea7e6f11dd.ed20655b1f5bc3d2.0b817cc9c792e0c3.84f9f47675b40160 - 0a7bbae61aab4659.eb6c98d27726e273.1ea77629ce8c968c.010e2616a42641bc - 8f443d2b93d5e73d.51006ce737eb8f81.915122dda5eed927.b744fa1eecccefae - 8269ec7b6ab3c862 --VPADDSW_128(mem) -+VPABSB_128(mem) - before - 3f4779173ae78805.bec52b2688782f34.f9a85b867ab78427.c0cd7b4fe943e63f - c8ab1be07672eac3.f348814193215ceb.c02fe39c5d957d92.06667ded3517f981 -@@ -40062,11 +40062,11 @@ VPADDSW_128(mem) - after - 3f4779173ae78805.bec52b2688782f34.f9a85b867ab78427.c0cd7b4fe943e63f - c8ab1be07672eac3.f348814193215ceb.c02fe39c5d957d92.06667ded3517f981 -- 0000000000000000.0000000000000000.b9d73f227fff01b9.c7337fff1e5adfc0 -+ 0000000000000000.0000000000000000.07585b7a7a497c27.40337b4f17431a3f - b03493a6a9c2883e.df88518c5cb14f48.1b0eacd870b76f66.4b1d6e59566d2031 - 02d454006408acf8 - --VPADDSW_128(reg) -+VPABSB_128(reg) - before - 40d8d382ea512e98.c8f2607bd69f3a54.4edcc49252b28e46.67fde4d8d914de27 - 6375e74a84d6e1bd.1d65332ce1048034.33628f6acfe8a2b3.41fca5fd52b4435c -@@ -40074,12 +40074,12 @@ VPADDSW_128(reg) - c4a8bf6267c2cd49.ee9dddd2fe97b304.cf38193ecc23338d.1459b06ae1e9dad5 - c450f18a30988570 - after -- 0000000000000000.0000000000000000.1dca80003ec78000.c9d3103249557fff -+ 0000000000000000.0000000000000000.1668547f6e213c3c.79296a350a5f5832 - 6375e74a84d6e1bd.1d65332ce1048034.33628f6acfe8a2b3.41fca5fd52b4435c - c5f68dc7cf220215.8b5a89a5e5fd140b.ea68ac7f6edfc43c.87d76a35f6a15832 - c4a8bf6267c2cd49.ee9dddd2fe97b304.cf38193ecc23338d.1459b06ae1e9dad5 - c450f18a30988570 --VPADDSW_128(mem) -+VPABSB_128(mem) - before - 7386ab80feb8142f.bad87b88e7417e08.22faaba04add184c.3e20d11184412951 - fcc8593868574440.05d0bda5eb2b50fc.023d6ff9e2db000f.936ad06532c4e335 -@@ -40089,11 +40089,11 @@ VPADDSW_128(mem) - after - 7386ab80feb8142f.bad87b88e7417e08.22faaba04add184c.3e20d11184412951 - fcc8593868574440.05d0bda5eb2b50fc.023d6ff9e2db000f.936ad06532c4e335 -- 0000000000000000.0000000000000000.25371b992db8185b.d18aa176b7050c86 -+ 0000000000000000.0000000000000000.220655604a23184c.3e202f117c412951 - 11a0819e7e407702.054abf75f1724a35.3ba4cb006c3149b4.5f579441e32a920b - 8e9150a11d25ff55 - --VPADDSW_128(reg) -+VPABSB_128(reg) - before - 125f4431beb6206f.53cef42563a2f10c.746578002be6e9d2.4a605a8695a021ee - 490b6c5f61683105.e1374a1d52b3fc17.a678a63259f69b54.7732cf487bf86d53 -@@ -40101,12 +40101,12 @@ VPADDSW_128(reg) - 3d3144421e601153.4dee9514c40fb4de.c6ba523a031722ba.97485c30f1914b4c - 43246c2eb7e95639 - after -- 0000000000000000.0000000000000000.9f49eba972238000.151880007fff5361 -+ 0000000000000000.0000000000000000.082f4577182d6768.631a5a323b441a0e - 490b6c5f61683105.e1374a1d52b3fc17.a678a63259f69b54.7732cf487bf86d53 - 8ee2c296a2c76dc3.96a90274697e544e.f8d14577182d9968.9de6a6323b44e60e - 3d3144421e601153.4dee9514c40fb4de.c6ba523a031722ba.97485c30f1914b4c - 43246c2eb7e95639 --VPADDSW_128(mem) -+VPABSB_128(mem) - before - 7b455218ac5ac400.b141edcf70bd5864.e4d380eb7e72d9f3.6c80c8e9b64170f5 - 1d798adbeaf051ce.4861b9a9356d80a0.352440e4b4b47fb8.466fa3f0cf36c0c6 -@@ -40116,11 +40116,11 @@ VPADDSW_128(mem) - after - 7b455218ac5ac400.b141edcf70bd5864.e4d380eb7e72d9f3.6c80c8e9b64170f5 - 1d798adbeaf051ce.4861b9a9356d80a0.352440e4b4b47fb8.466fa3f0cf36c0c6 -- 0000000000000000.0000000000000000.19f7c1cf332659ab.7fff8000857731bb -+ 0000000000000000.0000000000000000.1c2d80157e72270d.6c8038174a41700b - 0b45e197b2b8b72e.4bfdabf586ef5e4b.79392ceb01023d04.07f778b19cb256d8 - a5286b448a511372 - --VPHADDW_128(reg) -+VPABSW_128(reg) - before - e7b2b3df4cecc251.0f76f86a74020718.6f11c83e4ada8c12.239650d25127cde3 - 29e14cec7e0e9e22.ece851c5f0a167b8.2665f985f1478bb4.f98e398c8d5ace22 -@@ -40128,12 +40128,12 @@ VPHADDW_128(reg) - 1c5e6211a417d148.a2c3bac2830c42cc.b9f785b956d4e63c.94824624361c1173 - 131664dbdcc2ccdc - after -- 0000000000000000.0000000000000000.0377aca036f1cc96.1fea7cfb331a5b7c -+ 0000000000000000.0000000000000000.35bd393416c16a21.2a1261032f580412 - 29e14cec7e0e9e22.ece851c5f0a167b8.2665f985f1478bb4.f98e398c8d5ace22 - c70132d9bd43e590.7f69699341a0913b.ca43393416c195df.d5ee6103d0a8fbee - 1c5e6211a417d148.a2c3bac2830c42cc.b9f785b956d4e63c.94824624361c1173 - 131664dbdcc2ccdc --VPHADDW_128(mem) -+VPABSW_128(mem) - before - 2c763515dda6e856.8644d600d0179ff6.32c4c23dd3f03698.4dcfd87f4c0dbc79 - bc6d37bd56d5200c.60fe8c12dcce8a45.0b36fcf04d5829cb.e3162df295f75142 -@@ -40143,11 +40143,11 @@ VPHADDW_128(mem) - after - 2c763515dda6e856.8644d600d0179ff6.32c4c23dd3f03698.4dcfd87f4c0dbc79 - bc6d37bd56d5200c.60fe8c12dcce8a45.0b36fcf04d5829cb.e3162df295f75142 -- 0000000000000000.0000000000000000.f5010a88264e0886.082677231108e739 -+ 0000000000000000.0000000000000000.32c43dc32c103698.4dcf27814c0d4387 - b154bb061e42d7df.d421ac4f0693aa78.099ff7af2de5fa14.861fd38f8d0fab27 - 4a7a1a917555e79a - --VPHADDW_128(reg) -+VPABSW_128(reg) - before - 817455f01f7cd34a.cfdb3580a598cd53.25220d525cb857b4.e52fb092cb225082 - 85597f192811abe1.d32acf181468d1b4.5728a02802c41241.7a608a5d02149607 -@@ -40155,12 +40155,12 @@ VPHADDW_128(reg) - 67139075c6b20d75.004f555218a8edeb.cb724afeb0c3a001.3fd9975dad44dc05 - 27b8c068599b56d6 - after -- 0000000000000000.0000000000000000.25bdac11a8fd7695.f750150504bd981b -+ 0000000000000000.0000000000000000.3a81603e6abc16cd.5c0004fd103a7931 - 85597f192811abe1.d32acf181468d1b4.5728a02802c41241.7a608a5d02149607 - b37494762c9faa0b.9a0c06ba86bf9d2d.c57f603e954416cd.a40004fdefc686cf - 67139075c6b20d75.004f555218a8edeb.cb724afeb0c3a001.3fd9975dad44dc05 - 27b8c068599b56d6 --VPHADDW_128(mem) -+VPABSW_128(mem) - before - 3869fc0c0ed6ae6d.fd80708092d710cb.e1bd38cce52f7f1a.c44f58d6f0ceeb8c - 4eb7c634e901a1f7.d1082f052d99efb8.19232c1509610de5.0e608831f0f03417 -@@ -40170,11 +40170,11 @@ VPHADDW_128(mem) - after - 3869fc0c0ed6ae6d.fd80708092d710cb.e1bd38cce52f7f1a.c44f58d6f0ceeb8c - 4eb7c634e901a1f7.d1082f052d99efb8.19232c1509610de5.0e608831f0f03417 -- 0000000000000000.0000000000000000.1a8964491d25dc5a.4538174696912507 -+ 0000000000000000.0000000000000000.1e4338cc1ad17f1a.3bb158d60f321474 - f95ef5c07f594793.a3993a2a3e252f09.fd0833c0c9f30f01.01513b1fa1aab0e4 - 62c8b68b8b5a5a7d - --VPHADDW_128(reg) -+VPABSW_128(reg) - before - 84a5432aa551f3c7.464e52fc729d72fd.59397fa2ec0809c5.621d3ffa9c6bfbaa - c132dd698b1bb46f.070c2c6cfb022809.bd259243d9b7afc9.8e5b4bb336bed4a0 -@@ -40182,12 +40182,12 @@ VPHADDW_128(reg) - 009028722d5ba587.5a224d993d5c24b9.ff0c17b0ddae4d56.ab7e554f32233c21 - 53fb4a0aca4d4304 - after -- 0000000000000000.0000000000000000.9d20fd8032620b06.4f688980da0e0b5e -+ 0000000000000000.0000000000000000.2ba771795f405cc0.5d8c2b2a4b08560e - c132dd698b1bb46f.070c2c6cfb022809.bd259243d9b7afc9.8e5b4bb336bed4a0 - 77bc80b2da45dc20.1a6401fd359325e4.2ba77179a0c05cc0.5d8cd4d6b4f8560e - 009028722d5ba587.5a224d993d5c24b9.ff0c17b0ddae4d56.ab7e554f32233c21 - 53fb4a0aca4d4304 --VPHADDW_128(mem) -+VPABSW_128(mem) - before - 33d02ff39b8227e4.b9f7d11621e74c50.a3128a2e2e6ae2b6.95a081552d0dbd39 - 26c980f6bfcda4ec.ff40780851770d26.d0ff36a624c81b04.49afa9d22c6aea13 -@@ -40197,11 +40197,11 @@ VPHADDW_128(mem) - after - 33d02ff39b8227e4.b9f7d11621e74c50.a3128a2e2e6ae2b6.95a081552d0dbd39 - 26c980f6bfcda4ec.ff40780851770d26.d0ff36a624c81b04.49afa9d22c6aea13 -- 0000000000000000.0000000000000000.2d40112016f5ea46.07a53fccf381167d -+ 0000000000000000.0000000000000000.5cee75d22e6a1d4a.6a607eab2d0d42c7 - b45657fb70d55727.9da4ad8bd7d1ccac.4b03c8f492a5ec4a.7a6d2809a54c665d - b0b5769956e92d26 - --VPHADDD_128(reg) -+VPMOVSXBQ_128(reg) - before - 74a774b327b3a197.0882d5d437ab06b2.ae5833f265b342b3.4fb2a7a1413cfd98 - 21901cc2b236fb5a.de03b078c0c73d14.bc1ca7599fc9c177.a98fe3e2655378e9 -@@ -40209,12 +40209,12 @@ VPHADDD_128(reg) - ab765f6f679a598d.842e69cd8e023614.3a0646d489becee9.cb0267d07f33a043 - 4b31a656ab14c3a4 - after -- 0000000000000000.0000000000000000.43db8bd04f5e160c.5be668d00ee35ccb -- 21901cc2b236fb5a.de03b078c0c73d14.bc1ca7599fc9c177.a98fe3e2655378e9 -+ 74a774b327b3a197.0882d5d437ab06b2.ae5833f265b342b3.4fb2a7a1413cfd98 -+ 0000000000000000.0000000000000000.000000000000001b.0000000000000069 - 15bc6c3293ff7a1e.14a362d12935b97c.213d042b229e87a5.3366faa31bf71b69 - ab765f6f679a598d.842e69cd8e023614.3a0646d489becee9.cb0267d07f33a043 - 4b31a656ab14c3a4 --VPHADDD_128(mem) -+VPMOVSXBQ_128(mem) - before - 91bd341fbea442b8.3e0cf2e6c991d354.0c7240570a397009.63c569c171b5d2ef - 77738c18d1f1d7aa.2cc81f015672251e.863a635bbae72286.f8c5695c7510d162 -@@ -40223,12 +40223,12 @@ VPHADDD_128(mem) - d740728043ecff04 - after - 91bd341fbea442b8.3e0cf2e6c991d354.0c7240570a397009.63c569c171b5d2ef -- 77738c18d1f1d7aa.2cc81f015672251e.863a635bbae72286.f8c5695c7510d162 -- 0000000000000000.0000000000000000.16abb060d57b3cb0.412185e16dd63abe -+ 0000000000000000.0000000000000000.ffffffffffffffd2.ffffffffffffffef -+ db1f2a2e03073fa6.cff8e42da9c88a98.cf514ec5b91609b8.55514312315a05ee - 978c8a4c6df136da.85e63cd75f203f6d.c4857e8123d5e1ca.d6b6f250421fab40 - d740728043ecff04 - --VPHADDD_128(reg) -+VPMOVSXBQ_128(reg) - before - b43bbf10d14c3ce6.8888285d2dbb776f.a8df236a1305804b.3fa06d7b152d65e9 - c9f3d66b88cc9f91.8add814f5f71bf94.962f9651620389db.1d6f99a0aa2c5241 -@@ -40236,12 +40236,12 @@ VPHADDD_128(reg) - 0ac94e32de59c7f3.32c6508387d35338.3e030cd03e7ce2c7.73589617304d574a - a20b5f415786e654 - after -- 0000000000000000.0000000000000000.90c926c53b9ae3d7.f833202cc79bebe1 -- c9f3d66b88cc9f91.8add814f5f71bf94.962f9651620389db.1d6f99a0aa2c5241 -+ b43bbf10d14c3ce6.8888285d2dbb776f.a8df236a1305804b.3fa06d7b152d65e9 -+ 0000000000000000.0000000000000000.0000000000000064.fffffffffffffffd - 72b3b1fd03f664b1.7a590f0d1e20ca73.a9218ffae7a796cb.3bbd7edaffdd64fd - 0ac94e32de59c7f3.32c6508387d35338.3e030cd03e7ce2c7.73589617304d574a - a20b5f415786e654 --VPHADDD_128(mem) -+VPMOVSXBQ_128(mem) - before - a4a153469397ce46.ef7fa976b67e0303.8ff1c09eb5971711.b21f083f040eaa7b - 55e7f111fd89cb4c.7c22bc3526f3558c.6da5d948c477d228.5fc27fb3d5ea2992 -@@ -40250,12 +40250,12 @@ VPHADDD_128(mem) - 5bcda1669dad4ee4 - after - a4a153469397ce46.ef7fa976b67e0303.8ff1c09eb5971711.b21f083f040eaa7b -- 55e7f111fd89cb4c.7c22bc3526f3558c.6da5d948c477d228.5fc27fb3d5ea2992 -- 0000000000000000.0000000000000000.4588d7afb62db2ba.321dab7035aca945 -+ 0000000000000000.0000000000000000.ffffffffffffffaa.000000000000007b -+ 92a9b28eb46a9893.0dfe85dbcb43f83b.a8b0196ed17f40a9.a2386e984c9b9db8 - 35b313a8d145f347.fd5ffed440fb2abc.1ddcfbfcf8bc1cc1.d7cdd05a05ad409b - 5bcda1669dad4ee4 - --VPHADDD_128(reg) -+VPMOVSXBQ_128(reg) - before - 8883dd26b0260542.1bd1914e72279594.aa91258d21a525ba.a6f7fbdf5439239c - bb3d8008d9a49f5f.20cea769b31b3da5.6fdff6700cd026e2.20cb950201021165 -@@ -40263,12 +40263,12 @@ VPHADDD_128(reg) - a3e8ecdedee16f88.f7998cb1836a8bc4.b003826969d2295e.57d189b7c0a99173 - cc9ada220aa09b10 - after -- 0000000000000000.0000000000000000.419bd4ca8348e799.7cb01d5221cda667 -- bb3d8008d9a49f5f.20cea769b31b3da5.6fdff6700cd026e2.20cb950201021165 -+ 8883dd26b0260542.1bd1914e72279594.aa91258d21a525ba.a6f7fbdf5439239c -+ 0000000000000000.0000000000000000.ffffffffffffffa1.0000000000000049 - 50458777b4b459e8.2078d1e6af2da5a6.a7966beb9a0568df.672546501c23a149 - a3e8ecdedee16f88.f7998cb1836a8bc4.b003826969d2295e.57d189b7c0a99173 - cc9ada220aa09b10 --VPHADDD_128(mem) -+VPMOVSXBQ_128(mem) - before - a14eb57d15127b4b.1072adabf2b81cec.81fe52b74adda82b.e570365515c2a30a - b4b796b4fe0def52.f32fc6498dc39dbf.9a73a1e22092bb06.a129831d39621291 -@@ -40277,12 +40277,12 @@ VPHADDD_128(mem) - 9e1cdacf90d57cf4 - after - a14eb57d15127b4b.1072adabf2b81cec.81fe52b74adda82b.e570365515c2a30a -- b4b796b4fe0def52.f32fc6498dc39dbf.9a73a1e22092bb06.a129831d39621291 -- 0000000000000000.0000000000000000.ccdbfae2fb32d95f.bb065ce8da8b95ae -+ 0000000000000000.0000000000000000.ffffffffffffffa3.000000000000000a -+ e0a2fab3e09db14e.a86b31244a902eae.1dc4f42022967e82.427c652c713db49c - 01db5c67d8cc7e6e.8b71eca8c6ab0a64.e8bcc75c6cf4aecb.22b4d9ee5adfc3da - 9e1cdacf90d57cf4 - --VPHADDSW_128(reg) -+VPMOVSXWQ_128(reg) - before - 1301643cadaa1a99.f32e38ba01a811dc.f88ef2419c9f6f8f.d629978118b8070c - dbaf739f50eadb73.92670a99783d27c4.4b0e3f5c68f896d8.c3d5de7d45ef4472 -@@ -40290,12 +40290,12 @@ VPHADDSW_128(reg) - d89611fb92ddb078.46ba81adbdbeccb5.13679fc4550a227b.091dc7a78ce35d5b - 1b515faedfb9b137 - after -- 0000000000000000.0000000000000000.afa08630a4c82fcc.7fffffd0a2527fff -- dbaf739f50eadb73.92670a99783d27c4.4b0e3f5c68f896d8.c3d5de7d45ef4472 -+ 1301643cadaa1a99.f32e38ba01a811dc.f88ef2419c9f6f8f.d629978118b8070c -+ 0000000000000000.0000000000000000.0000000000000da4.0000000000002228 - 547203651322f92f.b9524ff158957c53.e03dcf63c742beee.8a8d1a3b0da42228 - d89611fb92ddb078.46ba81adbdbeccb5.13679fc4550a227b.091dc7a78ce35d5b - 1b515faedfb9b137 --VPHADDSW_128(mem) -+VPMOVSXWQ_128(mem) - before - 9cf55f3a2131d9e7.c46798cc6aa73efb.146c1eb8c4c4d215.3fd8aae9addbfd2b - 67d444386f579297.74309443360ddd63.fe34a20089b14ca0.c2dbec406b428bab -@@ -40304,12 +40304,12 @@ VPHADDSW_128(mem) - e64fd5a2266dc6c1 - after - 9cf55f3a2131d9e7.c46798cc6aa73efb.146c1eb8c4c4d215.3fd8aae9addbfd2b -- 67d444386f579297.74309443360ddd63.fe34a20089b14ca0.c2dbec406b428bab -- 0000000000000000.0000000000000000.332496d9eac1ab06.a034d651af1bf6ed -+ 0000000000000000.0000000000000000.ffffffffffffaddb.fffffffffffffd2b -+ 5abc8995e4389875.453e01ce939aca5d.e2de87702793f382.f7be61342cca0aa7 - 4f77aa3b9cdfa6ab.91dddcd81cda4195.9a364bf4ba7686e6.39cb05318cffb4ca - e64fd5a2266dc6c1 - --VPHADDSW_128(reg) -+VPMOVSXWQ_128(reg) - before - 5996ccf696a17c38.24d22418b5587965.b55920cd6d5a7db6.040868785f65bff9 - edece696792711da.b399721748b0cdd0.0dfec91923a5bb6d.fa1f5ce8316c5be6 -@@ -40317,12 +40317,12 @@ VPHADDSW_128(reg) - ecf4746d0655cb51.739a7a2b522be768.c9f23a672dcd2c4b.fe50b73dcef3ab00 - c40116fad18bd885 - after -- 0000000000000000.0000000000000000.c84011acfd7a6471.d717df1257077fff -- edece696792711da.b399721748b0cdd0.0dfec91923a5bb6d.fa1f5ce8316c5be6 -+ 5996ccf696a17c38.24d22418b5587965.b55920cd6d5a7db6.040868785f65bff9 -+ 0000000000000000.0000000000000000.0000000000004d97.00000000000016da - 009c1fef6a89c254.da980f2473f25e18.f518d328da473765.5a49a3314d9716da - ecf4746d0655cb51.739a7a2b522be768.c9f23a672dcd2c4b.fe50b73dcef3ab00 - c40116fad18bd885 --VPHADDSW_128(mem) -+VPMOVSXWQ_128(mem) - before - 86283b52716c5695.0f3ee07de816687e.5c6d2c18006625ed.e5dafb40b8c2d7cb - 2190a233cba0e45b.c3c75f89ad59d486.6fdba2d799afd4d3.a51a112118b37490 -@@ -40331,12 +40331,12 @@ VPHADDSW_128(mem) - 55e82a254be04d39 - after - 86283b52716c5695.0f3ee07de816687e.5c6d2c18006625ed.e5dafb40b8c2d7cb -- 2190a233cba0e45b.c3c75f89ad59d486.6fdba2d799afd4d3.a51a112118b37490 -- 0000000000000000.0000000000000000.7fff2653e11a908d.12b28000b63b7fff -+ 0000000000000000.0000000000000000.ffffffffffffb8c2.ffffffffffffd7cb -+ 7207c788fa363c04.66dbedfff0a94c16.89b159543a12af45.65ff7874e92a3f47 - 5357273c1b371bbc.52c6864a4e920cda.87bbcc7bff9c736f.81d52ca7c6b6739b - 55e82a254be04d39 - --VPHADDSW_128(reg) -+VPMOVSXWQ_128(reg) - before - 3d836d59153609cd.a14e3d3d49b13dae.e5d427d562a14f7d.43c577390258dc7e - 95f4f0b1bf43e302.39b68576a0af5e06.7950cb0ec86153ac.9a9bd7786253a69e -@@ -40344,12 +40344,12 @@ VPHADDSW_128(reg) - 0483ac7b25b3df01.b20b9c413c698b9b.18c60c37fd25885d.89d9a22da3334bc0 - dadb067bbd309f19 - after -- 0000000000000000.0000000000000000.7fff6e717fffc693.445e1c0d800008f1 -- 95f4f0b1bf43e302.39b68576a0af5e06.7950cb0ec86153ac.9a9bd7786253a69e -+ 3d836d59153609cd.a14e3d3d49b13dae.e5d427d562a14f7d.43c577390258dc7e -+ 0000000000000000.0000000000000000.0000000000003998.ffffffffffff8cfb - b985b298e6931685.f55c7bd43d3e39f1.6b876e601d5e5113.6808662639988cfb - 0483ac7b25b3df01.b20b9c413c698b9b.18c60c37fd25885d.89d9a22da3334bc0 - dadb067bbd309f19 --VPHADDSW_128(mem) -+VPMOVSXWQ_128(mem) - before - 35d80ffba29c4334.d43adcc4192e7a23.4c9162aab83c0f30.da57a10003413236 - 779d37996e82f53a.84f63ce05d912296.9fb84bfccdc383db.0e862a25cb3e8c4c -@@ -40358,12 +40358,12 @@ VPHADDSW_128(mem) - efc750fbccf611a9 - after - 35d80ffba29c4334.d43adcc4192e7a23.4c9162aab83c0f30.da57a10003413236 -- 779d37996e82f53a.84f63ce05d912296.9fb84bfccdc383db.0e862a25cb3e8c4c -- 0000000000000000.0000000000000000.7fffc76c80003577.ebb4800038ab8000 -+ 0000000000000000.0000000000000000.0000000000000341.0000000000003236 -+ 7cf5fc413fef6e5a.6f02cb3c8e671407.874ed221980ba1c8.10a1a213f2a9d248 - 20aed9df2eee6dbe.f3ac8242473c8c22.e01d7407351f2524.3df30537140d40d9 - efc750fbccf611a9 - --VPMADDUBSW_128(reg) -+VPACKUSDW_128(reg) - before - 836a7dcdb6f18265.3f924a60598bac92.6b3e5e60259dc692.86f2ab98bf0ccd1b - 55288a186f89ceb8.b56fcbaedcd3e904.32055c00c315fd04.5599f5c252dd53d9 -@@ -40371,12 +40371,12 @@ VPMADDUBSW_128(reg) - 232531c8bcc1ebd5.163fef655791476c.2162ab7bb07a559d.de8caf8e055cec57 - 507018085d227670 - after -- 0000000000000000.0000000000000000.efed2ac4d0e76d46.f8b22411aeecc0bd -+ 0000000000000000.0000000000000000.00000000ffffffff.ffff0000ffffffff - 55288a186f89ceb8.b56fcbaedcd3e904.32055c00c315fd04.5599f5c252dd53d9 - c14d7247924a334f.5e0fd9b6d2d1dd3d.a64d7790bd306e24.29ddcd700b9e7489 - 232531c8bcc1ebd5.163fef655791476c.2162ab7bb07a559d.de8caf8e055cec57 - 507018085d227670 --VPMADDUBSW_128(mem) -+VPACKUSDW_128(mem) - before - 5b5682ca2efccf00.d7fcc406887933f7.b8ca89a68820e1bb.0190f42d3880ed1c - db0a6bc194f7b332.391d266e93ff4660.227e236481896856.a0224f12f0ce734c -@@ -40386,11 +40386,11 @@ VPMADDUBSW_128(mem) - after - 5b5682ca2efccf00.d7fcc406887933f7.b8ca89a68820e1bb.0190f42d3880ed1c - db0a6bc194f7b332.391d266e93ff4660.227e236481896856.a0224f12f0ce734c -- 0000000000000000.0000000000000000.dbdccc93d4a8dc3a.f1c0ff76cd80ffc7 -+ 0000000000000000.0000000000000000.00000000ffffffff.ffff000000000000 - a90ca8f9927d0b2f.77714767d3a2c0ba.bb8d480c381a2c23.8fa62825616e3971 - 972f9e2c52daf0be - --VPMADDUBSW_128(reg) -+VPACKUSDW_128(reg) - before - ce4d1615e4bc856d.b0f2f3146121f751.0a3bfed141d79f03.a280cbcd2f5ae1ac - 914c8a4eb2a23429.9bd5ad1336155dc6.bc8074155e0a3943.bfcb3ebc5da47332 -@@ -40398,12 +40398,12 @@ VPMADDUBSW_128(reg) - 2c1c5b5c74a8ce7b.92c55b6c5f1e8b57.eaaa8fd712989159.1098e5d5d0881de4 - fab311d64d39ad68 - after -- 0000000000000000.0000000000000000.b3e0cf2ee812fe25.220edbf0f737cdec -+ 0000000000000000.0000000000000000.0000000000000000.0000ffff0000ffff - 914c8a4eb2a23429.9bd5ad1336155dc6.bc8074155e0a3943.bfcb3ebc5da47332 - 3c77f8415918389f.488251e12c65fbb9.e88ba69ec5c6cb26.f03a1ec5df059ee1 - 2c1c5b5c74a8ce7b.92c55b6c5f1e8b57.eaaa8fd712989159.1098e5d5d0881de4 - fab311d64d39ad68 --VPMADDUBSW_128(mem) -+VPACKUSDW_128(mem) - before - 8c551db571250a98.bb85b00aa0e03268.546a479fec4bcacc.1e272b2ee20bc788 - a04c855f5957efa1.46fff1b7784ca012.6c3d9266eff97343.df4f770ed1aba85e -@@ -40413,11 +40413,11 @@ VPMADDUBSW_128(mem) - after - 8c551db571250a98.bb85b00aa0e03268.546a479fec4bcacc.1e272b2ee20bc788 - a04c855f5957efa1.46fff1b7784ca012.6c3d9266eff97343.df4f770ed1aba85e -- 0000000000000000.0000000000000000.3cb201d83647da22.262b1681eedbae88 -+ 0000000000000000.0000000000000000.ffff0000ffff0000.ffff000000000000 - c2645ac0e2be44ec.c0562cbe9eec8850.0a9c3260c404f7e9.7dd00b1979a35eb2 - 10c14d1c6b13aa87 - --VPMADDUBSW_128(reg) -+VPACKUSDW_128(reg) - before - a28d2d58ebe192b4.881dbf50bc0b2c87.67cb1df0233a7b3c.48c17f6ccf7b486f - 8d7fa83a969852e4.405b705acacf8caa.7b80ebd2c5eb6795.4c431bbbbfa2f5a9 -@@ -40425,12 +40425,12 @@ VPMADDUBSW_128(reg) - e208619cdbf249ff.fa92a78cefe9a73b.55de1051cfa61e3f.12912cd6c0304ee4 - 8cf49a7a09b0723d - after -- 0000000000000000.0000000000000000.0ad28000ad39d499.f6cd1d9980009181 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffff0000ffff0000 - 8d7fa83a969852e4.405b705acacf8caa.7b80ebd2c5eb6795.4c431bbbbfa2f5a9 - 2fe4bb2c07c426c4.c8e8eaca27152182.56c393ce208b8a07.f0ef803bb185b8c1 - e208619cdbf249ff.fa92a78cefe9a73b.55de1051cfa61e3f.12912cd6c0304ee4 - 8cf49a7a09b0723d --VPMADDUBSW_128(mem) -+VPACKUSDW_128(mem) - before - 3be64712a710e2f9.043796f4adadf842.b323258d3f57d900.d41e5ec86ec95fe9 - fc31ad8ab65d5843.efbd57a21a816f39.d068dfb7336c74fd.2ecf799e9a7f8bb1 -@@ -40440,11 +40440,11 @@ VPMADDUBSW_128(mem) - after - 3be64712a710e2f9.043796f4adadf842.b323258d3f57d900.d41e5ec86ec95fe9 - fc31ad8ab65d5843.efbd57a21a816f39.d068dfb7336c74fd.2ecf799e9a7f8bb1 -- 0000000000000000.0000000000000000.cfa8ce063141ee54.105a09de26e323ae -+ 0000000000000000.0000000000000000.0000ffff0000ffff.0000ffffffff0000 - 1f0699ca9aeb4834.94fd69ad32a6a3f1.a13df83a74b9d553.e8b3081607d58e48 - ff7e7391818ddf70 - --VPHSUBW_128(reg) -+VPMOVZXBQ_128(reg) - before - 62eb9b1bf7090966.3a27166aa6443a32.0550b3e2160ed90b.0e664e6afa091202 - 6d447c2005d449d5.d6d13e9a94ba236f.b029791c05c0c788.4e72d175932fa89a -@@ -40452,12 +40452,12 @@ VPHSUBW_128(reg) - eaec5b4c5b87fad1.02f47c5b832bc954.25a0654f712fb95d.b8664cc9702ece34 - 99e63beaec20d78e - after -- 0000000000000000.0000000000000000.c2f20dcdbe18f710.c8f3c1c88303156b -- 6d447c2005d449d5.d6d13e9a94ba236f.b029791c05c0c788.4e72d175932fa89a -+ 62eb9b1bf7090966.3a27166aa6443a32.0550b3e2160ed90b.0e664e6afa091202 -+ 0000000000000000.0000000000000000.0000000000000053.0000000000000047 - 7bd6130d477adb6a.d0d28c467f58bf16.f2d5b5c79a47a814.3e2efc465c375347 - eaec5b4c5b87fad1.02f47c5b832bc954.25a0654f712fb95d.b8664cc9702ece34 - 99e63beaec20d78e --VPHSUBW_128(mem) -+VPMOVZXBQ_128(mem) - before - bd7a4795eb172780.15d4504ada88e3b5.49058ac3bd3efe55.a6d584212705360c - 00edebb689217d37.57d9ee746209d2c3.81cf326c489d1a44.d1c20ea758545ad0 -@@ -40466,12 +40466,12 @@ VPHSUBW_128(mem) - e7c908b1e0910e48 - after - bd7a4795eb172780.15d4504ada88e3b5.49058ac3bd3efe55.a6d584212705360c -- 00edebb689217d37.57d9ee746209d2c3.81cf326c489d1a44.d1c20ea758545ad0 -- 0000000000000000.0000000000000000.41be4117dd4c0f07.b09dd1a73ce5027c -+ 0000000000000000.0000000000000000.0000000000000036.000000000000000c -+ 3e0da339e34993df.0e4631348f9403a6.861ff1414155d84e.02b1ff4f9ea86353 - 53a4eb0a159c27a3.956816f8fcb7b10b.34c1412dc471f69e.96f05483988e8a41 - e7c908b1e0910e48 - --VPHSUBW_128(reg) -+VPMOVZXBQ_128(reg) - before - 52891744123d2911.1b7f40163a25f2b0.478b982b46fd199d.6780a01eebfd2e61 - 337b7da8cb1f194b.726a1d476ef0b331.82fbb33908f37709.fb2a8affd5063cc3 -@@ -40479,12 +40479,12 @@ VPHSUBW_128(reg) - c72a3f933fb362bc.3c9f5fcd767e0241.fff1a596651c031e.b56aeb415bbcce12 - 94995a7b3182c957 - after -- 0000000000000000.0000000000000000.c48a28d7ae334358.303e6e168fd567bd -- 337b7da8cb1f194b.726a1d476ef0b331.82fbb33908f37709.fb2a8affd5063cc3 -+ 52891744123d2911.1b7f40163a25f2b0.478b982b46fd199d.6780a01eebfd2e61 -+ 0000000000000000.0000000000000000.00000000000000de.00000000000000ef - e6ed3649a6c217a0.3331fe8bce0a2453.a004648ede2406fb.cb8979bc9b97deef - c72a3f933fb362bc.3c9f5fcd767e0241.fff1a596651c031e.b56aeb415bbcce12 - 94995a7b3182c957 --VPHSUBW_128(mem) -+VPMOVZXBQ_128(mem) - before - 44e2455438f48aeb.327d93f2347c344d.6882bcf981580929.f91074bd3868aa1f - a11125ba8d1ecefa.82332ed21eaccafc.93a492fb0ba5f434.ebabcc6ff49337aa -@@ -40493,12 +40493,12 @@ VPHSUBW_128(mem) - 2b62e301b3c8973b - after - 44e2455438f48aeb.327d93f2347c344d.6882bcf981580929.f91074bd3868aa1f -- a11125ba8d1ecefa.82332ed21eaccafc.93a492fb0ba5f434.ebabcc6ff49337aa -- 0000000000000000.0000000000000000.547787d17bad71b7.ff57e88fe0c44317 -+ 0000000000000000.0000000000000000.00000000000000aa.000000000000001f -+ 86f277974b0d51af.15980da09bcc6078.99d25cbf31708091.320fa9193529e56a - d150b8d98ecccf36.46f82ac6476a316b.55d896310ec5696a.2888082595b7f10b - 2b62e301b3c8973b - --VPHSUBW_128(reg) -+VPMOVZXBQ_128(reg) - before - 95e8381728e812a4.5df8636a736703bd.719e83b2bd117a81.a582bd3dbfb16beb - c36802d593a4a0f2.05b6f43816ebab6e.f2d813cf994e7767.649c4bcf5f3f4141 -@@ -40506,12 +40506,12 @@ VPHSUBW_128(reg) - db81e6f6b51ddff0.1da4b93803db41ff.6534c94bf6b77c52.9e4f9136de725c1b - d18040e3f52f18f7 - after -- 0000000000000000.0000000000000000.b198eb1e50e29d1d.20f7de19e733e202 -- c36802d593a4a0f2.05b6f43816ebab6e.f2d813cf994e7767.649c4bcf5f3f4141 -+ 95e8381728e812a4.5df8636a736703bd.719e83b2bd117a81.a582bd3dbfb16beb -+ 0000000000000000.0000000000000000.00000000000000a8.0000000000000098 - 112c3ea68d877ad2.a756e82e92638075.24f0d68878ab63c9.6df1bed30b7ba898 - db81e6f6b51ddff0.1da4b93803db41ff.6534c94bf6b77c52.9e4f9136de725c1b - d18040e3f52f18f7 --VPHSUBW_128(mem) -+VPMOVZXBQ_128(mem) - before - e45148c56bbf9958.7eb3f831a4f309f7.456ce5428660a838.10eee683aefbfcaf - b18e23ca5d2c9b69.540e6fc3f8943594.fa79e73937fd724b.806b2b9c3c051f8c -@@ -40520,12 +40520,12 @@ VPHSUBW_128(mem) - 0e6abd66063bb9d7 - after - e45148c56bbf9958.7eb3f831a4f309f7.456ce5428660a838.10eee683aefbfcaf -- b18e23ca5d2c9b69.540e6fc3f8943594.fa79e73937fd724b.806b2b9c3c051f8c -- 0000000000000000.0000000000000000.9fd621d8d5954db4.ecc03a4eab31e387 -+ 0000000000000000.0000000000000000.00000000000000fc.00000000000000af -+ 16034fdde685da56.badd47184d8c9f72.17993b0730be5b65.13f693023d602394 - ed7b47ea22d3114d.0c6e7d9c3e68833e.79965e9990b01eb2.24dd1a224c994274 - 0e6abd66063bb9d7 - --VPHSUBD_128(reg) -+VPMOVZXWQ_128(reg) - before - 2feb773b06d2c36a.14c488dd2e24fd77.a60b0bbc67b31ca4.fd3dcbdc70de795d - e1aa440ee9eb9ed8.65a88ca226835a03.e402efe265f9a74f.7d5afebaef552592 -@@ -40533,12 +40533,12 @@ VPHSUBD_128(reg) - 6c14075ac6d0b1f8.f974d252479c55ec.bc28a7f44fa88226.e525a6fc334b674e - 846b143732e2742b - after -- 0000000000000000.0000000000000000.b22a3b704e686e5e.81f6b76d71fa26d8 -- e1aa440ee9eb9ed8.65a88ca226835a03.e402efe265f9a74f.7d5afebaef552592 -+ 2feb773b06d2c36a.14c488dd2e24fd77.a60b0bbc67b31ca4.fd3dcbdc70de795d -+ 0000000000000000.0000000000000000.0000000000002620.000000000000e17f - 82f4204a4a1184ce.bdf4d12524fce31b.229d247cd4c75fec.d7b873212620e17f - 6c14075ac6d0b1f8.f974d252479c55ec.bc28a7f44fa88226.e525a6fc334b674e - 846b143732e2742b --VPHSUBD_128(mem) -+VPMOVZXWQ_128(mem) - before - 905838be3ef2c443.fc58f6acf8b56301.f3f40b16a96e6ca1.0ef172b872294aaa - e6b68e7d748613c2.8f0be8ab7c4bd496.8840f95b667fe467.74438333dad5f424 -@@ -40547,12 +40547,12 @@ VPHSUBD_128(mem) - b5652c26c454930a - after - 905838be3ef2c443.fc58f6acf8b56301.f3f40b16a96e6ca1.0ef172b872294aaa -- e6b68e7d748613c2.8f0be8ab7c4bd496.8840f95b667fe467.74438333dad5f424 -- 0000000000000000.0000000000000000.b57a618b6337d7f2.de3eeb0c669270f1 -+ 0000000000000000.0000000000000000.0000000000007229.0000000000004aaa -+ 60529260efab1cd3.7f78d9c3ef1e4163.9423160f9bda7869.4969d5d12238bb3f - dbf7c053cb6c9ca3.29ecc560edbbe613.f46be01d638be5d4.ebb064fee7dedca7 - b5652c26c454930a - --VPHSUBD_128(reg) -+VPMOVZXWQ_128(reg) - before - 03d12ab556251c12.3373954225d54e5d.eab3a9ee11adfe52.82e2d270db9fe7d4 - 3043591838deb36b.44908c1a19f3f02e.1c197fd9f780c6ce.1b5568f61e213994 -@@ -40560,12 +40560,12 @@ VPHSUBD_128(reg) - 9c653a065e35f8c3.01e1d0313c7beec4.46f1f7777cfb5527.de5e7248779fc006 - c08dddecc5b46d10 - after -- 0000000000000000.0000000000000000.205734a2ad8d79a7.db6746f502cbd09e -- 3043591838deb36b.44908c1a19f3f02e.1c197fd9f780c6ce.1b5568f61e213994 -+ 03d12ab556251c12.3373954225d54e5d.eab3a9ee11adfe52.82e2d270db9fe7d4 -+ 0000000000000000.0000000000000000.000000000000491d.0000000000009941 - 9a06b5b9070a93c2.ea1c21c5c2d13c42.1c6a458e3cc17a30.9b901f9a491d9941 - 9c653a065e35f8c3.01e1d0313c7beec4.46f1f7777cfb5527.de5e7248779fc006 - c08dddecc5b46d10 --VPHSUBD_128(mem) -+VPMOVZXWQ_128(mem) - before - 1de7dc734e685a8b.91aee569d9eb2019.65ac1649a4fdc4e1.f6fc8f0251ba945d - d13aebc72ec545a2.d72bb05016b94571.f2496ef8156478c4.88d50a9a5a8b737e -@@ -40574,12 +40574,12 @@ VPHSUBD_128(mem) - 2332a9e7b9dd2621 - after - 1de7dc734e685a8b.91aee569d9eb2019.65ac1649a4fdc4e1.f6fc8f0251ba945d -- d13aebc72ec545a2.d72bb05016b94571.f2496ef8156478c4.88d50a9a5a8b737e -- 0000000000000000.0000000000000000.3f51ae985abe055b.231b09ccd1b668e4 -+ 0000000000000000.0000000000000000.00000000000051ba.000000000000945d -+ b85087d682d9e782.c8299926ae2ba477.8483542cacbcc79a.58c965aa30f92e38 - aef62b8a66afff56.c2f49b573fcb79d6.f72844d0840f6d8f.c3249ba072900034 - 2332a9e7b9dd2621 - --VPHSUBD_128(reg) -+VPMOVZXWQ_128(reg) - before - d43e89eba46bdca9.8ff753d1f554474b.20d7b34f6527ff3b.2702bad0ba6b25ce - 34963918ccc75e78.36217b954bd37c8d.3d20db7abaca7451.f0de331969dcac84 -@@ -40587,12 +40587,12 @@ VPHSUBD_128(reg) - 6e55f69e4915b49e.4b1cbc49be909ca5.2810501968171542.bccc1b31a4291703 - 787682da681f7224 - after -- 0000000000000000.0000000000000000.672800817fe39447.7da998d778fe796b -- 34963918ccc75e78.36217b954bd37c8d.3d20db7abaca7451.f0de331969dcac84 -+ d43e89eba46bdca9.8ff753d1f554474b.20d7b34f6527ff3b.2702bad0ba6b25ce -+ 0000000000000000.0000000000000000.000000000000ae6c.000000000000bedc - 9e84b4dad07be73c.813e1fc485385a47.76191144dd4111c5.2e892a95ae6cbedc - 6e55f69e4915b49e.4b1cbc49be909ca5.2810501968171542.bccc1b31a4291703 - 787682da681f7224 --VPHSUBD_128(mem) -+VPMOVZXWQ_128(mem) - before - 3d52dc7a15588c6c.0055fbced521004d.7085cd1013e6ffd5.ad4f9466f7d8ba75 - e72ba4ffc7e22007.b0d0c0d8102a09f3.cb46ce059f463f01.6323da9527113d0a -@@ -40601,12 +40601,12 @@ VPHSUBD_128(mem) - 3a1389ae91ff51c9 - after - 3d52dc7a15588c6c.0055fbced521004d.7085cd1013e6ffd5.ad4f9466f7d8ba75 -- e72ba4ffc7e22007.b0d0c0d8102a09f3.cb46ce059f463f01.6323da9527113d0a -- 0000000000000000.0000000000000000.a36132c54a89260f.d3ff70fcc3ed6275 -+ 0000000000000000.0000000000000000.000000000000f7d8.000000000000ba75 -+ 51ce55549bc9ec21.da123f2695bc093c.3a2b3b147fbd1855.a4d71c14934ddaac - 59086e64ad17aae4.d966762600633dd5.98ff912ace5645fe.cdb9584dd818cd08 - 3a1389ae91ff51c9 - --VPHSUBSW_128(reg) -+VPMOVZXDQ_128(reg) - before - 4833aca25b8da39c.d9a2681d18da177f.0b1a6143eeace06a.c0904b31a91e8328 - 5163bb95d14efe2d.af6bc16af81eee1c.cb78fae9fb232fa6.90a8e5172b1f8efe -@@ -40614,12 +40614,12 @@ VPHSUBSW_128(reg) - c7269228339bc337.c9b67d718956ce0e.64652b80dfc7c1c6.94a1aa2c9602f961 - 8019cc34b7fbd245 - after -- 0000000000000000.0000000000000000.c9b67ffff9b1b046.2f713483546f8000 -- 5163bb95d14efe2d.af6bc16af81eee1c.cb78fae9fb232fa6.90a8e5172b1f8efe -+ 4833aca25b8da39c.d9a2681d18da177f.0b1a6143eeace06a.c0904b31a91e8328 -+ 0000000000000000.0000000000000000.00000000e215dbc6.00000000716721ad - b2f0b4f390cfa027.b62ef4376aeeede8.75cd3f83c1526636.e215dbc6716721ad - c7269228339bc337.c9b67d718956ce0e.64652b80dfc7c1c6.94a1aa2c9602f961 - 8019cc34b7fbd245 --VPHSUBSW_128(mem) -+VPMOVZXDQ_128(mem) - before - 8448bfc9ef5e6886.ec5051a0563fa309.c6d1d80272624dbb.f68cba49ef0d7c01 - 7afcfed95a37764f.7dbceec796457e48.874981d7401f281a.858de84b8db1d294 -@@ -40628,12 +40628,12 @@ VPHSUBSW_128(mem) - c0ab06e0d744d211 - after - 8448bfc9ef5e6886.ec5051a0563fa309.c6d1d80272624dbb.f68cba49ef0d7c01 -- 7afcfed95a37764f.7dbceec796457e48.874981d7401f281a.858de84b8db1d294 -- 0000000000000000.0000000000000000.1131db59c3bd7fff.fa8ee7fb62be44e3 -+ 0000000000000000.0000000000000000.00000000f68cba49.00000000ef0d7c01 -+ 40ff064f1593b9cd.d6b4630a8f3b8ea0.e9ebf5dd10981958.6fb6b2f2563e002a - b01f51173c7ded2b.5385aed3dcad10be.c983affefddadda1.0e5112abe5404170 - c0ab06e0d744d211 - --VPHSUBSW_128(reg) -+VPMOVZXDQ_128(reg) - before - df108affc7d5efba.a7265d1eea02cd96.507bca901926404e.01dc2b2824ef2f20 - c9cc9873517fd417.02e1a54e3b2c163a.29e2b4abe33259fb.6ec4e646a0e5cd02 -@@ -40641,12 +40641,12 @@ VPHSUBSW_128(reg) - 69784609a64fe59b.4fa2d9dd38a5d3db.df33deb08c34395f.586d050e09a3d89e - 8cc662902d82bdaf - after -- 0000000000000000.0000000000000000.2c8cc3156d3f7fff.8ac976c980002c1d -- c9cc9873517fd417.02e1a54e3b2c163a.29e2b4abe33259fb.6ec4e646a0e5cd02 -+ df108affc7d5efba.a7265d1eea02cd96.507bca901926404e.01dc2b2824ef2f20 -+ 0000000000000000.0000000000000000.00000000ed055a44.000000008ec87173 - d82a2ea713cebdd3.9b1ca5944c0a8442.3a066692d55d9872.ed055a448ec87173 - 69784609a64fe59b.4fa2d9dd38a5d3db.df33deb08c34395f.586d050e09a3d89e - 8cc662902d82bdaf --VPHSUBSW_128(mem) -+VPMOVZXDQ_128(mem) - before - 65ddedb61772ddd4.d900df04a88e891b.fa41be141c0bbe30.74b41771a442776d - c07d236ce37df436.820ff204b515e4fe.79c3cf241347026e.54d60d41b7149049 -@@ -40655,12 +40655,12 @@ VPHSUBSW_128(mem) - 57fa3744f6944b66 - after - 65ddedb61772ddd4.d900df04a88e891b.fa41be141c0bbe30.74b41771a442776d -- c07d236ce37df436.820ff204b515e4fe.79c3cf241347026e.54d60d41b7149049 -- 0000000000000000.0000000000000000.c3d3a225a2bd7fff.8000ef27b86bd935 -+ 0000000000000000.0000000000000000.0000000074b41771.00000000a442776d -+ 77747e9eacb2be04.c1f17c76687234f0.a6f588fb3a665bc1.dde5bc8c6435be9e - 678c7c398e1af668.f3f27ac45d31b39f.5ea36584ac738454.6a2d21be44313d19 - 57fa3744f6944b66 - --VPHSUBSW_128(reg) -+VPMOVZXDQ_128(reg) - before - ff98fa8813eb2230.6c939827a6c3598e.725ee75b31dc9db4.7d99e3ab867a3b54 - c05266f839c1ff24.62534f5610b8a3a4.9b81bfa87f0230de.dfa37d5ce38739ec -@@ -40668,12 +40668,12 @@ VPHSUBSW_128(reg) - f94e2a080f1cba38.91317a2347b8db4a.5b1aa110fce83c1b.dc22f50c98e60197 - 2f2fcbe4274e4301 - after -- 0000000000000000.0000000000000000.346fc29b80005ca2.2427b1dc7fff5665 -- c05266f839c1ff24.62534f5610b8a3a4.9b81bfa87f0230de.dfa37d5ce38739ec -+ ff98fa8813eb2230.6c939827a6c3598e.725ee75b31dc9db4.7d99e3ab867a3b54 -+ 0000000000000000.0000000000000000.00000000608cae83.00000000e0a73d49 - f57578fe04a31ded.25991bb1e7068fd3.caa6ff15e42ca6c7.608cae83e0a73d49 - f94e2a080f1cba38.91317a2347b8db4a.5b1aa110fce83c1b.dc22f50c98e60197 - 2f2fcbe4274e4301 --VPHSUBSW_128(mem) -+VPMOVZXDQ_128(mem) - before - 3580aef5aaedbcb4.2a277a81f7b810b0.82e6e79a4dda4133.aa29a30461c12e88 - cae1182d3dcf2bdb.e24c63d556045b02.d486de0114797dba.131f005cb243b7b7 -@@ -40682,12 +40682,12 @@ VPHSUBSW_128(mem) - 826212fe393a3994 - after - 3580aef5aaedbcb4.2a277a81f7b810b0.82e6e79a4dda4133.aa29a30461c12e88 -- cae1182d3dcf2bdb.e24c63d556045b02.d486de0114797dba.131f005cb243b7b7 -- 0000000000000000.0000000000000000.64b4f359f8dbccc7.097b6941ed3d0574 -+ 0000000000000000.0000000000000000.00000000aa29a304.0000000061c12e88 -+ ca1e8776fbfe4aa3.7f0be270cb8bd9da.63dbdc44b9a04d0c.f248b48688fb1457 - 100377be0088d638.5baff1bef0d9c4e3.0ab25b50575b6b55.a3f0bced82748112 - 826212fe393a3994 - --VPABSB_128(reg) -+VMPSADBW_128_0x0(reg) - before - ebebb4234bda7a8b.7a5b62f069798bc5.d4838e2b617a59ca.a7d8d90f0bb794c1 - 3ad89dc954df7da0.e3f3c6f852db2477.44d4b423bbfbd33b.1516d16ef0bf837b -@@ -40695,12 +40695,12 @@ VPABSB_128(reg) - fa083549b94ac1db.2113e63a1128f5f8.7d1d8c6598cb6a68.d31220bdbe04a68a - dc666f85e0595238 - after -- 0000000000000000.0000000000000000.08125f126618701f.303b405a227f0b51 -+ 0000000000000000.0000000000000000.0281026e018400db.012600d5011f01b4 - 3ad89dc954df7da0.e3f3c6f852db2477.44d4b423bbfbd33b.1516d16ef0bf837b - cb73ca5cefd68182.27971ec2d5bc5e79.08ee5f129ae870e1.303bc05a227ff5af - fa083549b94ac1db.2113e63a1128f5f8.7d1d8c6598cb6a68.d31220bdbe04a68a - dc666f85e0595238 --VPABSB_128(mem) -+VMPSADBW_128_0x0(mem) - before - 2604289da38ab4e4.23e5dcfb4dc77857.af339a4c1f29a51f.fdad36865432fd7e - 8cb9c7f023a48abb.a155badd47d9e2a3.acc3b7e41ecd291c.e5ea58e367a967cc -@@ -40710,11 +40710,11 @@ VPABSB_128(mem) - after - 2604289da38ab4e4.23e5dcfb4dc77857.af339a4c1f29a51f.fdad36865432fd7e - 8cb9c7f023a48abb.a155badd47d9e2a3.acc3b7e41ecd291c.e5ea58e367a967cc -- 0000000000000000.0000000000000000.5133664c1f295b1f.0353367a5432037e -+ 0000000000000000.0000000000000000.01ca00c501240253.00ed0176012f016e - 2192a8fccdc07c99.111c0ce6e0eec35a.62621957592ca042.5e99fafe08f3abc7 - a6a57093cde0fecb - --VPABSB_128(reg) -+VMPSADBW_128_0x0(reg) - before - c68d50145b0c16b8.0650e28d2edb11f7.b90c77e4b509b11d.d309560acd000ac4 - 1a9d95ed4d03303b.7953f209bc0e0931.28bf0ac362e94360.2450ebf2a1a539ca -@@ -40722,12 +40722,12 @@ VPABSB_128(reg) - ce6a3f52cf8359b1.755c8575d1ee11e3.c79d96d4ae294114.d2ee0f16d897d615 - e7dc952972fbbbb1 - after -- 0000000000000000.0000000000000000.477f40117f1a4c32.2f0355030f29177f -+ 0000000000000000.0000000000000000.010801db01990167.018c013b010501c5 - 1a9d95ed4d03303b.7953f209bc0e0931.28bf0ac362e94360.2450ebf2a1a539ca - fe233b88405188ff.5469545d94662071.b981c0ef811ab4ce.2f0355fdf129e981 - ce6a3f52cf8359b1.755c8575d1ee11e3.c79d96d4ae294114.d2ee0f16d897d615 - e7dc952972fbbbb1 --VPABSB_128(mem) -+VMPSADBW_128_0x0(mem) - before - 4c9b6322dc625582.e6bd9bb79624e0fd.b6f9ff3e90b29ab4.b06186df86a126dd - dbf5f6ed32d760b3.a2694d2432c0598e.f40c40a2ecbe7410.ce178e7aa40e9fd6 -@@ -40737,11 +40737,11 @@ VPABSB_128(mem) - after - 4c9b6322dc625582.e6bd9bb79624e0fd.b6f9ff3e90b29ab4.b06186df86a126dd - dbf5f6ed32d760b3.a2694d2432c0598e.f40c40a2ecbe7410.ce178e7aa40e9fd6 -- 0000000000000000.0000000000000000.4a07013e704e664c.50617a217a5f2623 -+ 0000000000000000.0000000000000000.008a02110101019d.010f017c00650131 - ebad58aa0f1db7e8.76fca1c2581b1031.d8c305f0ede01217.1d8cd31424f83b06 - 06e309ebbd8ed796 - --VPABSB_128(reg) -+VMPSADBW_128_0x0(reg) - before - 945d45030e48f605.23a31f73cf057c43.467b3acc19f2c69b.35ff80b1c90e4d1a - 244585c8b0b4d600.f6659abfea2ba2af.2a82198d1ff35efa.00e2b2beb4b3cb58 -@@ -40749,12 +40749,12 @@ VPABSB_128(reg) - bb93fe095dd0c349.de7c9e8ca363ff69.9e5c96e468a9234a.4bc8296c20987f34 - 846365e5dbef2d2a - after -- 0000000000000000.0000000000000000.7e5f397105531404.1336160339224803 -+ 0000000000000000.0000000000000000.025b00e801f60174.010600eb00d00166 - 244585c8b0b4d600.f6659abfea2ba2af.2a82198d1ff35efa.00e2b2beb4b3cb58 - 13e8c4a6415eb033.40be46787d9ce458.7e5f397105ad14fc.13361603c7de48fd - bb93fe095dd0c349.de7c9e8ca363ff69.9e5c96e468a9234a.4bc8296c20987f34 - 846365e5dbef2d2a --VPABSB_128(mem) -+VMPSADBW_128_0x0(mem) - before - 9ad5485a13ee0d0a.7990305d9f9849ee.aa691ee6798daf0e.e6c62d52e375c893 - 69e94db8e4a2dd02.a92c550ea3427fcf.815242711a25af74.b1e9f827139c3f81 -@@ -40764,11 +40764,11 @@ VPABSB_128(mem) - after - 9ad5485a13ee0d0a.7990305d9f9849ee.aa691ee6798daf0e.e6c62d52e375c893 - 69e94db8e4a2dd02.a92c550ea3427fcf.815242711a25af74.b1e9f827139c3f81 -- 0000000000000000.0000000000000000.56691e1a7973510e.1a3a2d521d75386d -+ 0000000000000000.0000000000000000.016a00a201310142.01aa0121019e0192 - a225addbc35637e3.d07068386368ebf5.c04767cf2fd09233.45891fb7002c91fd - c49f7249f5aee5e4 - --VPABSW_128(reg) -+VMPSADBW_128_0x1(reg) - before - 389debf30ebafb20.c4e60179096f3b26.7eb04e8957fe9891.e0ec607adbfbede3 - fcd08420e8de0e5e.0f7966af596c1d2f.0ebf18e67ea5e518.7bbced06c2c48803 -@@ -40776,12 +40776,12 @@ VPABSW_128(reg) - e3050cb24e9c1d8f.9044599284436e46.447a4579d2564e9a.9211b475b3617146 - c62de62ff44e37c1 - after -- 0000000000000000.0000000000000000.23163e4372e90d38.6d8574a0013721c0 -+ 0000000000000000.0000000000000000.01260151011d0101.019e019a010500f4 - fcd08420e8de0e5e.0f7966af596c1d2f.0ebf18e67ea5e518.7bbced06c2c48803 - 6b843b3b1fa55b4a.5fa95a68cd599a2b.dceac1bd72e90d38.6d858b60013721c0 - e3050cb24e9c1d8f.9044599284436e46.447a4579d2564e9a.9211b475b3617146 - c62de62ff44e37c1 --VPABSW_128(mem) -+VMPSADBW_128_0x1(mem) - before - e5a49c7ce1082d5b.be9ff1f0114e92da.7e14dd19973454ab.a2bea0863779e2ed - ca445347959d1043.5a9ee7610547f4d6.05e764e7253b0987.5201ce5040dd06db -@@ -40791,11 +40791,11 @@ VPABSW_128(mem) - after - e5a49c7ce1082d5b.be9ff1f0114e92da.7e14dd19973454ab.a2bea0863779e2ed - ca445347959d1043.5a9ee7610547f4d6.05e764e7253b0987.5201ce5040dd06db -- 0000000000000000.0000000000000000.7e1422e768cc54ab.5d425f7a37791d13 -+ 0000000000000000.0000000000000000.016901a3016e0171.01470151018d0170 - 5b2bb006c5868ca8.40f9f88def407293.4ec0680b1bb4d052.18b395cba799ec39 - e6ba25543f092702 - --VPABSW_128(reg) -+VMPSADBW_128_0x1(reg) - before - 76f0784be9ebe217.be0a4fd378f29d7d.44ee0b1f1c5705ac.c760dd3abd40599a - 24a18b1a42ca5823.5741dece62698b4f.77781e95eae67627.4a3244604810a108 -@@ -40803,12 +40803,12 @@ VPABSW_128(reg) - 49a3def56eaf68d1.a0e7bdff4da4ed99.de7a39d9d799e1f1.da9ada468bac5d08 - a0ca00dd7a9149f2 - after -- 0000000000000000.0000000000000000.36e32f590b8801af.4dff1a6b26d063c9 -+ 0000000000000000.0000000000000000.00d700cb011300ce.012c015600d90163 - 24a18b1a42ca5823.5741dece62698b4f.77781e95eae67627.4a3244604810a108 - 4b18592fe532c6d2.049cd9e4a0f5124a.36e32f59f47801af.b2011a6bd93063c9 - 49a3def56eaf68d1.a0e7bdff4da4ed99.de7a39d9d799e1f1.da9ada468bac5d08 - a0ca00dd7a9149f2 --VPABSW_128(mem) -+VMPSADBW_128_0x1(mem) - before - df5b091bc3eae4b2.798c16d77ace7acc.06ed050c8682d969.c98b38802ed65398 - 72196fee81c3e975.3620fd43a41a376e.147b2df8669a92e5.546028b996ba9351 -@@ -40818,11 +40818,11 @@ VPABSW_128(mem) - after - df5b091bc3eae4b2.798c16d77ace7acc.06ed050c8682d969.c98b38802ed65398 - 72196fee81c3e975.3620fd43a41a376e.147b2df8669a92e5.546028b996ba9351 -- 0000000000000000.0000000000000000.06ed050c797e2697.367538802ed65398 -+ 0000000000000000.0000000000000000.010f00cd00d300e9.0163016700b000ec - 08504701cf2725b3.cc79ca66c56ba55a.94600d198ca85993.ba89cc9606a86ca8 - 4e75781148ca7d9e - --VPABSW_128(reg) -+VMPSADBW_128_0x1(reg) - before - f15606d009c34c55.c361b11895c9d286.5bd6a7f5f387cdfb.bf4ebe270bb7e01d - 0077703de720147a.42cf6873421cdb0c.e90e23beaf0191f4.00f33fc3a1302404 -@@ -40830,12 +40830,12 @@ VPABSW_128(reg) - d2adccd5693483bd.00f5b2a7bb03ecdf.6e3deaa9433cdd9c.3896a1558491d197 - e62c7b230891b39c - after -- 0000000000000000.0000000000000000.2e943b2b699d2df0.341d0cd86b1f1f8d -+ 0000000000000000.0000000000000000.0267015b025d0152.01cf01ee01eb016c - 0077703de720147a.42cf6873421cdb0c.e90e23beaf0191f4.00f33fc3a1302404 - d726b4c57e6c13b9.6267eaffef2bfa70.d16c3b2b96632df0.341d0cd86b1fe073 - d2adccd5693483bd.00f5b2a7bb03ecdf.6e3deaa9433cdd9c.3896a1558491d197 - e62c7b230891b39c --VPABSW_128(mem) -+VMPSADBW_128_0x1(mem) - before - 1ba9152f142c41ad.4d59b7d74402a033.f6453c56bfaf6c84.1ece2ca55315dca3 - b4daeb65c36d38f6.a4766e39ac65a8c6.222204fa1a3b388c.3b68fd8a617c67b2 -@@ -40845,11 +40845,11 @@ VPABSW_128(mem) - after - 1ba9152f142c41ad.4d59b7d74402a033.f6453c56bfaf6c84.1ece2ca55315dca3 - b4daeb65c36d38f6.a4766e39ac65a8c6.222204fa1a3b388c.3b68fd8a617c67b2 -- 0000000000000000.0000000000000000.09bb3c5640516c84.1ece2ca55315235d -+ 0000000000000000.0000000000000000.017d00a80195016f.011b0181016700dd - 7d873b007d1151e3.553234ca911363f6.87b740ce3e249f73.30ef3dbee8221097 - bf72a4e69a79a6c5 - --VPMOVSXBQ_128(reg) -+VMPSADBW_128_0x2(reg) - before - 2c318aa7ba8eb8ab.679cae3dbe8deadf.68693bd1467790ea.7906abd64199b2ab - d476eb6de5eb82f4.23944d5314e0dcc3.c742ffe7f89e96ac.10134482091f00f5 -@@ -40857,12 +40857,12 @@ VPMOVSXBQ_128(reg) - 40c50fb8c9b32c60.8460ffbf6937baf5.d905aff0c1672048.9e96f177598b3d71 - 4ca5fd971a8aa3fb - after -- 2c318aa7ba8eb8ab.679cae3dbe8deadf.68693bd1467790ea.7906abd64199b2ab -- 0000000000000000.0000000000000000.0000000000000045.000000000000007e -+ 0000000000000000.0000000000000000.01b9026001b00108.016d01df01c50104 -+ d476eb6de5eb82f4.23944d5314e0dcc3.c742ffe7f89e96ac.10134482091f00f5 - 118ec4a4b61e3f4c.8e3c94309814e3bb.ce077d784315b2e7.29a987beb2c1457e - 40c50fb8c9b32c60.8460ffbf6937baf5.d905aff0c1672048.9e96f177598b3d71 - 4ca5fd971a8aa3fb --VPMOVSXBQ_128(mem) -+VMPSADBW_128_0x2(mem) - before - 0fa1270c10c83448.bd67ca16bb3485dc.e1cc0beca0541f9a.438893bb10211b7b - c357ebc05754ac83.e5bff028272f856c.814c32a35b78cbd9.6adb2446cccee02b -@@ -40871,12 +40871,12 @@ VPMOVSXBQ_128(mem) - deb3bf98a20142e5 - after - 0fa1270c10c83448.bd67ca16bb3485dc.e1cc0beca0541f9a.438893bb10211b7b -- 0000000000000000.0000000000000000.000000000000001b.000000000000007b -- 4493c6a10c37c6d9.121b7e5caa306abb.40abf2d0b6ae7ddc.a94c5efb90faab04 -+ c357ebc05754ac83.e5bff028272f856c.814c32a35b78cbd9.6adb2446cccee02b -+ 0000000000000000.0000000000000000.0189013c01810116.00c4016b01c701d6 - 6e21339a4a7f4075.a1c56e1ddfc16d75.fab7c65fcc02efcf.5b253e48f932b8b4 - deb3bf98a20142e5 - --VPMOVSXBQ_128(reg) -+VMPSADBW_128_0x2(reg) - before - 8c42dd5627f38643.1dccae972e38d484.ee0abed66371cd48.8b3a2b3dba81dfe0 - c31e94f02594c07b.2d62b384d36c3e32.553669f5d2c9c4dd.cf019b549b360638 -@@ -40884,12 +40884,12 @@ VPMOVSXBQ_128(reg) - 38ecbe65fb160428.df7b4cded27a8819.e172c112dda66a04.e08b91e1a773f074 - 65e60e2f0b122aae - after -- 8c42dd5627f38643.1dccae972e38d484.ee0abed66371cd48.8b3a2b3dba81dfe0 -- 0000000000000000.0000000000000000.0000000000000023.0000000000000006 -+ 0000000000000000.0000000000000000.00d201aa016500fa.018c00e701ec0180 -+ c31e94f02594c07b.2d62b384d36c3e32.553669f5d2c9c4dd.cf019b549b360638 - dd93e0d138712b39.7aadbe4d56293caa.32956be5c6578fe3.a2d894928b2d2306 - 38ecbe65fb160428.df7b4cded27a8819.e172c112dda66a04.e08b91e1a773f074 - 65e60e2f0b122aae --VPMOVSXBQ_128(mem) -+VMPSADBW_128_0x2(mem) - before - 0cb48867d1198de1.2e7728180a0d87f5.3a96d823646cdfaa.be1b66e8b34291ec - b3c27a751891d439.1d7e1c5702e4f04c.66cade08270afc8a.25da56d3e3b83f48 -@@ -40898,12 +40898,12 @@ VPMOVSXBQ_128(mem) - 2d99c14caba9d0ca - after - 0cb48867d1198de1.2e7728180a0d87f5.3a96d823646cdfaa.be1b66e8b34291ec -- 0000000000000000.0000000000000000.ffffffffffffff91.ffffffffffffffec -- 35dd6045fa89bce1.5f4e968c7e277ad8.3fe5da7a38609ce4.72fc8d400a93b1c4 -+ b3c27a751891d439.1d7e1c5702e4f04c.66cade08270afc8a.25da56d3e3b83f48 -+ 0000000000000000.0000000000000000.01c401a000c6015f.00d10087017801cd - 6ecfb6c3930a0106.513390241b606245.a1b24963b27b7be6.01cd0799c360230c - 2d99c14caba9d0ca - --VPMOVSXBQ_128(reg) -+VMPSADBW_128_0x2(reg) - before - 54acb5c35dfdf5ad.3964f8db00225fd4.5079088c741de441.67fca6b1b16655b9 - d151e16c75e5ce5f.746aa3795cdc9176.b66bf92f26ea3b75.6f906d4f522ee58c -@@ -40911,12 +40911,12 @@ VPMOVSXBQ_128(reg) - 3c85cf0149a68be2.a6f520f8536764e8.2a8736d503e05b3c.b1c7292be9811adc - a4001741162637b2 - after -- 54acb5c35dfdf5ad.3964f8db00225fd4.5079088c741de441.67fca6b1b16655b9 -- 0000000000000000.0000000000000000.ffffffffffffffe8.ffffffffffffff89 -+ 0000000000000000.0000000000000000.008400ea00ac0114.00eb0115014900e2 -+ d151e16c75e5ce5f.746aa3795cdc9176.b66bf92f26ea3b75.6f906d4f522ee58c - 00d541b290ef968d.f9ac318ac4445419.e0575f78cc51a490.943b1a29b1dde889 - 3c85cf0149a68be2.a6f520f8536764e8.2a8736d503e05b3c.b1c7292be9811adc - a4001741162637b2 --VPMOVSXBQ_128(mem) -+VMPSADBW_128_0x2(mem) - before - 47b45f5755d7fa37.e3ab89c43d97e70b.5612ecb126507c10.f1487bb166239c26 - 78ad7d59c1a02096.50946a6a084de6b4.e4cf0fa0580b59bc.8fe6287892a4a2f9 -@@ -40925,12 +40925,12 @@ VPMOVSXBQ_128(mem) - 11e58188e01eb0a4 - after - 47b45f5755d7fa37.e3ab89c43d97e70b.5612ecb126507c10.f1487bb166239c26 -- 0000000000000000.0000000000000000.ffffffffffffff9c.0000000000000026 -- 11b9ed33778d65fc.de8b6e5c4454c688.2ef807b005a5b71a.61ad3b9622f1aa62 -+ 78ad7d59c1a02096.50946a6a084de6b4.e4cf0fa0580b59bc.8fe6287892a4a2f9 -+ 0000000000000000.0000000000000000.00e30188015701bb.016e00d4014e01cf - f0a22bd292ab8495.ebde91079038c133.0e594fcf4a295253.c3e9b077b396f00c - 11e58188e01eb0a4 - --VPMOVSXWQ_128(reg) -+VMPSADBW_128_0x3(reg) - before - a7eeac33451525d6.ef35b4202f053a8c.d1d7d0d786861463.61bd63e843a4e595 - e1512ce67f078c4d.eb3e030b69a7430d.eec42539c2cafac2.04f2bfe70b202d0c -@@ -40938,12 +40938,12 @@ VPMOVSXWQ_128(reg) - b1501b10e00e1fbc.4be1e46426f53d60.39a5065f7e6073be.a6fa40477951cb48 - 5d665d81581d9964 - after -- a7eeac33451525d6.ef35b4202f053a8c.d1d7d0d786861463.61bd63e843a4e595 -- 0000000000000000.0000000000000000.ffffffffffffbeac.ffffffffffffe6e4 -+ 0000000000000000.0000000000000000.01000170019d011c.016b01250207024c -+ e1512ce67f078c4d.eb3e030b69a7430d.eec42539c2cafac2.04f2bfe70b202d0c - 1b58fd0b298120b5.c189947d5d9e5b45.9cef8e97e08eb1fc.d1c2e0b8beace6e4 - b1501b10e00e1fbc.4be1e46426f53d60.39a5065f7e6073be.a6fa40477951cb48 - 5d665d81581d9964 --VPMOVSXWQ_128(mem) -+VMPSADBW_128_0x3(mem) - before - d3d2b350751b0c66.ff848260403ac30c.66136dabe1b9a68a.1f328afc35cc7cb4 - e40abca2ef58e078.61422f66e4924951.efecad3ea9f552ee.ace114d9a35c0a89 -@@ -40952,12 +40952,12 @@ VPMOVSXWQ_128(mem) - cdb9b8314c6620ff - after - d3d2b350751b0c66.ff848260403ac30c.66136dabe1b9a68a.1f328afc35cc7cb4 -- 0000000000000000.0000000000000000.00000000000035cc.0000000000007cb4 -- 6dd9f661e0ded0c6.33d41d9068a1ec39.c0361f099bb5fdb8.3a00a264649e57ea -+ e40abca2ef58e078.61422f66e4924951.efecad3ea9f552ee.ace114d9a35c0a89 -+ 0000000000000000.0000000000000000.01500164022c019b.00f0019d01b5010b - 480ddc7b64bc997d.d088484969f4e96d.b6be3ff8d2066216.26d92f08131da082 - cdb9b8314c6620ff - --VPMOVSXWQ_128(reg) -+VMPSADBW_128_0x3(reg) - before - 89ec374cac04150a.5270eadb98fbf7c9.96a8adfe82167c9c.ad4f8af76af23e32 - b7beaac3cf83b951.67cf9c6d97a9a5d5.e08146195093e170.81b77af380884c38 -@@ -40965,12 +40965,12 @@ VPMOVSXWQ_128(reg) - d96e5979cb560043.22b0ddd76880e4df.6f8d093578cf10b8.30383e8e94dbf2b5 - c4e90a05cbb10083 - after -- 89ec374cac04150a.5270eadb98fbf7c9.96a8adfe82167c9c.ad4f8af76af23e32 -- 0000000000000000.0000000000000000.0000000000002fd1.0000000000004a55 -+ 0000000000000000.0000000000000000.01e5020901a20225.022401f501c7010c -+ b7beaac3cf83b951.67cf9c6d97a9a5d5.e08146195093e170.81b77af380884c38 - b37b0c0350704980.63f66e1d7dd161ce.0a5e11076ef75395.0ec18dd62fd14a55 - d96e5979cb560043.22b0ddd76880e4df.6f8d093578cf10b8.30383e8e94dbf2b5 - c4e90a05cbb10083 --VPMOVSXWQ_128(mem) -+VMPSADBW_128_0x3(mem) - before - a4a06b29ef6032ec.86e58d8fddc21b45.80cb648771c1ed35.6d582b0d0ca75185 - ac29dfe51cf3421b.142aa5b3213ed632.59117f19b6a036fc.5f0d71fdc30955a7 -@@ -40979,12 +40979,12 @@ VPMOVSXWQ_128(mem) - 8397fc8edded42c8 - after - a4a06b29ef6032ec.86e58d8fddc21b45.80cb648771c1ed35.6d582b0d0ca75185 -- 0000000000000000.0000000000000000.0000000000000ca7.0000000000005185 -- ba4fe1256f76ed3d.e08a9c5034586db7.8950ab79532a7d5f.a0f6d96f3b8356cb -+ ac29dfe51cf3421b.142aa5b3213ed632.59117f19b6a036fc.5f0d71fdc30955a7 -+ 0000000000000000.0000000000000000.017500fa01550162.01a2011e01120134 - a9e0edd503f6ef7d.46516ed1b19c1b80.ec526294636a7b8b.8e605ed110a0919d - 8397fc8edded42c8 - --VPMOVSXWQ_128(reg) -+VMPSADBW_128_0x3(reg) - before - dde7af123ef5a4f8.55a680e1f57e0309.a2cb17a435951d39.5ee42254026cefab - f69b74c9d044f5db.9a6f1435601ae60a.504394345bcfaf8d.bbd166a74d3d93ec -@@ -40992,12 +40992,12 @@ VPMOVSXWQ_128(reg) - d9632181f5e94e64.5f34346513c00922.1261f63cff3772b7.a5f16bb356795e80 - ebba24434bfdfc2a - after -- dde7af123ef5a4f8.55a680e1f57e0309.a2cb17a435951d39.5ee42254026cefab -- 0000000000000000.0000000000000000.00000000000060e8.0000000000002479 -+ 0000000000000000.0000000000000000.015000ca01690199.015d0229014800e3 -+ f69b74c9d044f5db.9a6f1435601ae60a.504394345bcfaf8d.bbd166a74d3d93ec - 2c00461f2f676e1b.540527bd61d754af.ac07dfeec0d60d28.dfe7aa7860e82479 - d9632181f5e94e64.5f34346513c00922.1261f63cff3772b7.a5f16bb356795e80 - ebba24434bfdfc2a --VPMOVSXWQ_128(mem) -+VMPSADBW_128_0x3(mem) - before - 8c0f50165c7fbba6.5a0e0159c156cf63.96cab81a92e1c08f.dd9ed48bb57d1be6 - 64bc6e18a40b571e.0c4ee2142d3b2ec4.d7922dc7fb473623.6b0a76477d354361 -@@ -41006,12 +41006,12 @@ VPMOVSXWQ_128(mem) - 395fc5435c7b144d - after - 8c0f50165c7fbba6.5a0e0159c156cf63.96cab81a92e1c08f.dd9ed48bb57d1be6 -- 0000000000000000.0000000000000000.ffffffffffffb57d.0000000000001be6 -- 4e8df73340ae8cbe.496ec11fd523a732.fd5711576afd260a.17f1d6ddf3e928d2 -+ 64bc6e18a40b571e.0c4ee2142d3b2ec4.d7922dc7fb473623.6b0a76477d354361 -+ 0000000000000000.0000000000000000.01c9016401dc015a.01b400f90148016a - 284e69544b7315b3.6ebc99e4569a765a.e3e7dfb8fa0f4e6f.3d9ff2b8b42804e8 - 395fc5435c7b144d - --VPACKUSDW_128(reg) -+VMPSADBW_128_0x4(reg) - before - 667f4bec867093ae.cdca3e67e266af29.d88266d14b2dd6e7.670c13d5c78a687f - 2249811ece92beb6.18cef4592094164b.e10e245151670486.64932a9aee793166 -@@ -41019,12 +41019,12 @@ VPACKUSDW_128(reg) - b30ee9cd2b8f086e.149ff18603ce3946.43a365bafd01b9a9.38f6edccb9e4bf67 - c76a92119478fcd9 - after -- 0000000000000000.0000000000000000.0000ffff00000000.0000ffffffff0000 -+ 0000000000000000.0000000000000000.01560129011f0152.013f012d00dd0101 - 2249811ece92beb6.18cef4592094164b.e10e245151670486.64932a9aee793166 - c80a6145d16ed112.e727071422080546.e6aad0d003d43be3.b5479ef38be8644f - b30ee9cd2b8f086e.149ff18603ce3946.43a365bafd01b9a9.38f6edccb9e4bf67 - c76a92119478fcd9 --VPACKUSDW_128(mem) -+VMPSADBW_128_0x4(mem) - before - 407109ae39b1d7d2.41a1142276819f75.7d03309adff36e76.5445df7bdc79b885 - 7dd5cf90c39a0e7d.cd0edfb051d0d1d3.fc1e3f3cd3826002.75db3a7f3cc87422 -@@ -41034,11 +41034,11 @@ VPACKUSDW_128(mem) - after - 407109ae39b1d7d2.41a1142276819f75.7d03309adff36e76.5445df7bdc79b885 - 7dd5cf90c39a0e7d.cd0edfb051d0d1d3.fc1e3f3cd3826002.75db3a7f3cc87422 -- 0000000000000000.0000000000000000.ffff0000ffff0000.00000000ffffffff -+ 0000000000000000.0000000000000000.01c200f8015500ed.0139018c014c014d - b7e734cff8ac7b9c.4eaa412821b8f848.b0adbdda721069e2.57178401ed1d1752 - d0546b56753a753c - --VPACKUSDW_128(reg) -+VMPSADBW_128_0x4(reg) - before - c9b6239fef5f8198.6b2dcd04dbee2967.fb70d1ea4e6765b5.9cb925ae5426f98c - 9e89a847f5177611.5500a32e13102395.1741f0947ba45e2a.10ac4cc0bed63543 -@@ -41046,12 +41046,12 @@ VPACKUSDW_128(reg) - 4cb20a6316720e0d.3681fa0ef425e6c9.0733cc553ef6e4db.fb7acc4f9936a487 - 2bec1da341fe4f6c - after -- 0000000000000000.0000000000000000.0000ffff00000000.ffffffffffff0000 -+ 0000000000000000.0000000000000000.01dc015b00e7014d.012c01b401060256 - 9e89a847f5177611.5500a32e13102395.1741f0947ba45e2a.10ac4cc0bed63543 - ab19f7b923ef9154.4f2e3438bd1f2352.fc699a9441fa1f53.e653b0fccc2dda33 - 4cb20a6316720e0d.3681fa0ef425e6c9.0733cc553ef6e4db.fb7acc4f9936a487 - 2bec1da341fe4f6c --VPACKUSDW_128(mem) -+VMPSADBW_128_0x4(mem) - before - 53771ee6e190960d.dd9fdfb0692c28e7.e6c6739cd4312726.95ed81430e23e86f - 4de54a0394f83697.ba2d710cb9a91d8f.3cc91bce7a4ca396.00e1b5ca4c0d68ba -@@ -41061,11 +41061,11 @@ VPACKUSDW_128(mem) - after - 53771ee6e190960d.dd9fdfb0692c28e7.e6c6739cd4312726.95ed81430e23e86f - 4de54a0394f83697.ba2d710cb9a91d8f.3cc91bce7a4ca396.00e1b5ca4c0d68ba -- 0000000000000000.0000000000000000.000000000000ffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00e8014901e70101.017f026200f8015a - 2a9d197aa57b7015.c75cbda2be1e82f7.4538e4cf87e43c5f.e1ab8b53834acb28 - 0e17242db5b426a2 - --VPACKUSDW_128(reg) -+VMPSADBW_128_0x4(reg) - before - 89ef2d51c50cec84.c57fb2ad3bae8361.b0956fb3ab2e6c10.b13dfe752579d00f - ae7ea2294fdd5b7a.a375686a54e8dd45.559fce8305311fa6.322f3670f94e8f81 -@@ -41073,12 +41073,12 @@ VPACKUSDW_128(reg) - 66efbca9431b1f4f.98cc1833819e5d88.425584116e40d2fb.e30df111b1e97d5e - cb916c90cec72521 - after -- 0000000000000000.0000000000000000.ffffffff0000ffff.ffffffffffff0000 -+ 0000000000000000.0000000000000000.020b01a5019600a9.018400ee017700c7 - ae7ea2294fdd5b7a.a375686a54e8dd45.559fce8305311fa6.322f3670f94e8f81 - d90f7d23f0b4ad2f.a04bb69d0c343dee.11c5d77f67b3d865.a4db08aa1e6f35e2 - 66efbca9431b1f4f.98cc1833819e5d88.425584116e40d2fb.e30df111b1e97d5e - cb916c90cec72521 --VPACKUSDW_128(mem) -+VMPSADBW_128_0x4(mem) - before - 3833f5138f15e756.b16a5929e5a0ed87.67c50a16cc33fb3e.4299d3a7b5654b12 - 06be088613df7f29.17cc520e71cf5283.e90209330bfed03d.6fdebfacd8ae7d56 -@@ -41088,11 +41088,11 @@ VPACKUSDW_128(mem) - after - 3833f5138f15e756.b16a5929e5a0ed87.67c50a16cc33fb3e.4299d3a7b5654b12 - 06be088613df7f29.17cc520e71cf5283.e90209330bfed03d.6fdebfacd8ae7d56 -- 0000000000000000.0000000000000000.ffff0000ffff0000.0000ffffffff0000 -+ 0000000000000000.0000000000000000.012e020a024d01f3.011f013301c201cd - 35c3bdecce1a255c.9f7546b7b958d476.76781bcdd46716c4.bc9a5eb325d8fe18 - 94aa0a8d86d2c5ed - --VPMOVZXBQ_128(reg) -+VMPSADBW_128_0x5(reg) - before - 09ea4386332036a0.4dd457b73da1aa13.79533953adca68c4.39492620951dfea5 - 75a7050ac94d8cdd.37ff6b23ded5f519.de487704fb168486.1e8d2e5eba390f7e -@@ -41100,12 +41100,12 @@ VPMOVZXBQ_128(reg) - a6c814641e75dba2.eed2f28a2572d0c1.b6a8c45617694415.c3a221489ed59aca - 3a0a05cc956c8d95 - after -- 09ea4386332036a0.4dd457b73da1aa13.79533953adca68c4.39492620951dfea5 -- 0000000000000000.0000000000000000.0000000000000004.000000000000007c -+ 0000000000000000.0000000000000000.01dd012b0194013a.010101a000f4012a -+ 75a7050ac94d8cdd.37ff6b23ded5f519.de487704fb168486.1e8d2e5eba390f7e - 362e4c86e3e5054f.ce0f751acdc2c39a.29a1fc3640c76468.0311ad725ec8047c - a6c814641e75dba2.eed2f28a2572d0c1.b6a8c45617694415.c3a221489ed59aca - 3a0a05cc956c8d95 --VPMOVZXBQ_128(mem) -+VMPSADBW_128_0x5(mem) - before - 4315d6ea609a9908.22c45a1215884a83.72125c5d03f3d8bb.e1a9ccce1c895f3a - bc910e8f1a6a7950.076d19fa65aa909e.389d3181825196b3.06f20f0cecb2f383 -@@ -41114,12 +41114,12 @@ VPMOVZXBQ_128(mem) - e86d129b33ded2ea - after - 4315d6ea609a9908.22c45a1215884a83.72125c5d03f3d8bb.e1a9ccce1c895f3a -- 0000000000000000.0000000000000000.000000000000005f.000000000000003a -- 80492ba5e0e8ea99.af0e4d8aa968e79f.1b3dece1be97c7d6.80ce897b2371399b -+ bc910e8f1a6a7950.076d19fa65aa909e.389d3181825196b3.06f20f0cecb2f383 -+ 0000000000000000.0000000000000000.0153019f013a0108.0184013f01b602a3 - 6a08a819cd21a80e.77f5f22d7e4d8c31.f6bf0a69d4d1274f.ad8836865c51702f - e86d129b33ded2ea - --VPMOVZXBQ_128(reg) -+VMPSADBW_128_0x5(reg) - before - 8dc91a2545a59c79.589b01d8fe206edc.bb6c054f7fe5ba00.a7ee0605df0b724c - f7e849902d300a88.24ceb3cd8ef2f92f.d7c0815c49bdafba.08985ba1fc5263f6 -@@ -41127,12 +41127,12 @@ VPMOVZXBQ_128(reg) - 8e9f0cbaf2c8c0d3.ca440e083d3b4e12.082ea4e7a55bd999.4e890689da342a07 - eb6852aed4e877c6 - after -- 8dc91a2545a59c79.589b01d8fe206edc.bb6c054f7fe5ba00.a7ee0605df0b724c -- 0000000000000000.0000000000000000.00000000000000b7.000000000000007c -+ 0000000000000000.0000000000000000.008901740196019c.00b50168010001a3 -+ f7e849902d300a88.24ceb3cd8ef2f92f.d7c0815c49bdafba.08985ba1fc5263f6 - 84169b48880e57c2.ac6d39e39aa10532.283c62c07760a508.f788872947b1b77c - 8e9f0cbaf2c8c0d3.ca440e083d3b4e12.082ea4e7a55bd999.4e890689da342a07 - eb6852aed4e877c6 --VPMOVZXBQ_128(mem) -+VMPSADBW_128_0x5(mem) - before - a8f1e9824ed85be3.73ce995005ec8169.5c1fb12793cc8ffa.d4e1433d70388617 - 63f046f36711928b.8df03c776005d62e.3cc99b2cb95f8517.e8a03c2f7485e92e -@@ -41141,12 +41141,12 @@ VPMOVZXBQ_128(mem) - 6c2315dee981adc7 - after - a8f1e9824ed85be3.73ce995005ec8169.5c1fb12793cc8ffa.d4e1433d70388617 -- 0000000000000000.0000000000000000.0000000000000086.0000000000000017 -- f631e5eb389ed8e9.3a51f39c9ca0face.470f4903cb00ec94.a0b88a274cce3e8c -+ 63f046f36711928b.8df03c776005d62e.3cc99b2cb95f8517.e8a03c2f7485e92e -+ 0000000000000000.0000000000000000.00e4018601340105.01a802210122006a - 3e7f4258e08be82a.d43dba2a57482af6.5abd3899e4bb7f9e.58752993949ec1da - 6c2315dee981adc7 - --VPMOVZXBQ_128(reg) -+VMPSADBW_128_0x5(reg) - before - 370e4b73e7033ffd.17a8da2578e47f79.b9008b8c2d89a252.4f9fe3d8209dfb61 - 1781c5c028b1b328.5e76283e1eb65903.43e66430b9f09d8d.0381c6ad9cb11c08 -@@ -41154,12 +41154,12 @@ VPMOVZXBQ_128(reg) - 83337b2feabf3010.a134d60403f3c577.ba4a1beb655d0f52.197425cac2a13cb4 - 321e99eaa494b311 - after -- 370e4b73e7033ffd.17a8da2578e47f79.b9008b8c2d89a252.4f9fe3d8209dfb61 -- 0000000000000000.0000000000000000.000000000000009e.00000000000000c0 -+ 0000000000000000.0000000000000000.01ab015901d601ef.013d0180014b01b1 -+ 1781c5c028b1b328.5e76283e1eb65903.43e66430b9f09d8d.0381c6ad9cb11c08 - 67ca81304b1645f5.edb6a88fee0c32f4.d03a408198085854.522f5e0573049ec0 - 83337b2feabf3010.a134d60403f3c577.ba4a1beb655d0f52.197425cac2a13cb4 - 321e99eaa494b311 --VPMOVZXBQ_128(mem) -+VMPSADBW_128_0x5(mem) - before - 7af7355036eabf03.c709ad29a136b125.56bc2e8a7976cfb9.5e60f1dabc7cfe34 - cdcc76e893ad1bb5.8f98158a0d0a04df.e8192d0b6da10be5.18c9beba3af060a6 -@@ -41168,12 +41168,12 @@ VPMOVZXBQ_128(mem) - 63edca39b3c49611 - after - 7af7355036eabf03.c709ad29a136b125.56bc2e8a7976cfb9.5e60f1dabc7cfe34 -- 0000000000000000.0000000000000000.00000000000000fe.0000000000000034 -- 0769d69ed8ec8554.362cadbfc9c464ea.34194e74fb803728.45d17ff77b457253 -+ cdcc76e893ad1bb5.8f98158a0d0a04df.e8192d0b6da10be5.18c9beba3af060a6 -+ 0000000000000000.0000000000000000.01cb0143017f0141.016601c201130102 - 0499d35e20b0b60b.1a11733271f20ef3.14860db23e200dae.3fc32ffe1a0870e8 - 63edca39b3c49611 - --VPMOVZXWQ_128(reg) -+VMPSADBW_128_0x6(reg) - before - 0d994d16e3051f79.a02ae81488076d07.96926351a21f3ea6.652de7af528d49a2 - 9915b200455848cc.b7e691ac2bfc6474.05fc7786f8d82fae.03da565954d1a931 -@@ -41181,12 +41181,12 @@ VPMOVZXWQ_128(reg) - c7a817aa116269e6.c613903393f2054f.30bc00e7811b4870.9676e8619013c0ce - 42fc02970229f035 - after -- 0d994d16e3051f79.a02ae81488076d07.96926351a21f3ea6.652de7af528d49a2 -- 0000000000000000.0000000000000000.0000000000005ffa.000000000000e786 -+ 0000000000000000.0000000000000000.01c60184020a0134.02870065026200d3 -+ 9915b200455848cc.b7e691ac2bfc6474.05fc7786f8d82fae.03da565954d1a931 - 63abf76276484cb7.259b4a13259c597d.c59cad3f0ea81fb8.ca59d89b5ffae786 - c7a817aa116269e6.c613903393f2054f.30bc00e7811b4870.9676e8619013c0ce - 42fc02970229f035 --VPMOVZXWQ_128(mem) -+VMPSADBW_128_0x6(mem) - before - acb8a329d24732e6.21570e43b330d905.761bdefa910a2715.a4a86ceaecbee681 - af7745031b79430e.cd06d999f741d9bf.117fb0523af179fc.7baeedb4eb1c3797 -@@ -41195,12 +41195,12 @@ VPMOVZXWQ_128(mem) - f24cc9f47c11aab5 - after - acb8a329d24732e6.21570e43b330d905.761bdefa910a2715.a4a86ceaecbee681 -- 0000000000000000.0000000000000000.000000000000ecbe.000000000000e681 -- 27036611faccdfd8.27ff72187a1ea4c0.730a8229aab2b830.131980b11bc17560 -+ af7745031b79430e.cd06d999f741d9bf.117fb0523af179fc.7baeedb4eb1c3797 -+ 0000000000000000.0000000000000000.01080156019d0277.020a01f7023b021f - f02981408a4bc271.8b90d72cd75577b5.778ad16afe59a0dc.c634204d1739dd86 - f24cc9f47c11aab5 - --VPMOVZXWQ_128(reg) -+VMPSADBW_128_0x6(reg) - before - f1ad7713e6d51a9a.e6b4127ae802a705.55030442ab718e4a.fbc9170151f3ec2d - 20a32614ef0f67e1.e47296ad2ffe4bbf.e1a5f3c491fe252a.da94d2dac08b594e -@@ -41208,12 +41208,12 @@ VPMOVZXWQ_128(reg) - 7f7e7970551b8a43.6db364aae9f3bf57.afa50bc0049dc17e.18fe950260e686b3 - 30359429cac1bd4e - after -- f1ad7713e6d51a9a.e6b4127ae802a705.55030442ab718e4a.fbc9170151f3ec2d -- 0000000000000000.0000000000000000.000000000000672d.000000000000a36c -+ 0000000000000000.0000000000000000.01c6021f0151015b.02620154014301f3 -+ 20a32614ef0f67e1.e47296ad2ffe4bbf.e1a5f3c491fe252a.da94d2dac08b594e - dc7ad365364dce35.c82d88c37b4a69cb.8bc2a12025897702.f0b77de1672da36c - 7f7e7970551b8a43.6db364aae9f3bf57.afa50bc0049dc17e.18fe950260e686b3 - 30359429cac1bd4e --VPMOVZXWQ_128(mem) -+VMPSADBW_128_0x6(mem) - before - 1327f843beca0569.66fa14a3e803d8b6.aecea64d9503078d.a89c2c12cac73f49 - 9ca23c3a5a0e1932.ed3ba0698b93f43b.694bca989a88fe99.d4f1008112922d10 -@@ -41222,12 +41222,12 @@ VPMOVZXWQ_128(mem) - 1b2288b41032ec02 - after - 1327f843beca0569.66fa14a3e803d8b6.aecea64d9503078d.a89c2c12cac73f49 -- 0000000000000000.0000000000000000.000000000000cac7.0000000000003f49 -- a970dcfcba98b7d3.718d1a2edc571a7e.78f54d77148e5fa8.8ef28479788ac67e -+ 9ca23c3a5a0e1932.ed3ba0698b93f43b.694bca989a88fe99.d4f1008112922d10 -+ 0000000000000000.0000000000000000.01af0162018c018d.01e10230024c0140 - 145e5573f9759978.4c3c7d5e74d9852a.b99aaad6201fe8e6.31e9b365993b4740 - 1b2288b41032ec02 - --VPMOVZXWQ_128(reg) -+VMPSADBW_128_0x6(reg) - before - a7eb02cf7afbf06f.bb38218d34b07c4e.db94c565f1a872ec.06055da1d94a537e - 308f1a2373209033.78c9be3586551b81.7ae1eeafef4d1d6f.3d01e2c45c185c9d -@@ -41235,12 +41235,12 @@ VPMOVZXWQ_128(reg) - ad9618277fb39474.a84559dfe00e81ac.5889d4bddb4e9c6b.d5df53c32ed23c1f - ee593777b5d58ad9 - after -- a7eb02cf7afbf06f.bb38218d34b07c4e.db94c565f1a872ec.06055da1d94a537e -- 0000000000000000.0000000000000000.000000000000c497.000000000000c16f -+ 0000000000000000.0000000000000000.0211017f01f601a2.00f2011001c1010e -+ 308f1a2373209033.78c9be3586551b81.7ae1eeafef4d1d6f.3d01e2c45c185c9d - 1459cd1c952f08fc.29dfa7570b70343c.856ef4a80956c160.385bb62cc497c16f - ad9618277fb39474.a84559dfe00e81ac.5889d4bddb4e9c6b.d5df53c32ed23c1f - ee593777b5d58ad9 --VPMOVZXWQ_128(mem) -+VMPSADBW_128_0x6(mem) - before - 6095dd3376ad66cb.5993f6aeca396f47.d2c64eb9213abffc.4f7c895802c1e83b - 085ec2e28c658e1e.729a631f144cd622.842f04d1e901a959.c6940fe71a3ce17d -@@ -41249,12 +41249,12 @@ VPMOVZXWQ_128(mem) - c3b1617d1b5038a4 - after - 6095dd3376ad66cb.5993f6aeca396f47.d2c64eb9213abffc.4f7c895802c1e83b -- 0000000000000000.0000000000000000.00000000000002c1.000000000000e83b -- c0826072140abc01.56f75ce5f97805b1.984cf614546dfcef.191d62d4be4ac5dc -+ 085ec2e28c658e1e.729a631f144cd622.842f04d1e901a959.c6940fe71a3ce17d -+ 0000000000000000.0000000000000000.006901d9027001ba.012b011601dc01c4 - 65cb35ce29a7ad9e.5ff8db6b144a379f.ebe9a06c7f8d74e9.a4637f8d8a78ce05 - c3b1617d1b5038a4 - --VPMOVZXDQ_128(reg) -+VMPSADBW_128_0x7(reg) - before - d15504100c614164.d406bce2e8481c22.eae8de1f024da999.5ad17fc6856acd74 - 2c9964b2fa3423f2.e7ff719a6cf9c6b8.5412606c5e0d974a.bfd20d0f8312c2bc -@@ -41262,12 +41262,12 @@ VPMOVZXDQ_128(reg) - 36344cd33b556526.6c5a57a734bebbcc.3047d282d1f6d684.de4a2b1bd5f17330 - 505ab2b56140a6b5 - after -- d15504100c614164.d406bce2e8481c22.eae8de1f024da999.5ad17fc6856acd74 -- 0000000000000000.0000000000000000.00000000f7b6c832.00000000949010ec -+ 0000000000000000.0000000000000000.01b6019f016801fc.012b014e01d60147 -+ 2c9964b2fa3423f2.e7ff719a6cf9c6b8.5412606c5e0d974a.bfd20d0f8312c2bc - 2fca7dcf80571bf9.7b82d1e3d1c7678d.f7c35ebec4173d5f.f7b6c832949010ec - 36344cd33b556526.6c5a57a734bebbcc.3047d282d1f6d684.de4a2b1bd5f17330 - 505ab2b56140a6b5 --VPMOVZXDQ_128(mem) -+VMPSADBW_128_0x7(mem) - before - 29b2daee558966a7.9d23cc2bc6bb3c24.96557ed3b1e87da2.5beaba2221369f64 - 451e1eb1ccd86f32.bfe2f941be13dda1.d53dc55462536a3b.d5f8110b4f64d4ac -@@ -41276,12 +41276,12 @@ VPMOVZXDQ_128(mem) - ac9a89b627f550a9 - after - 29b2daee558966a7.9d23cc2bc6bb3c24.96557ed3b1e87da2.5beaba2221369f64 -- 0000000000000000.0000000000000000.000000005beaba22.0000000021369f64 -- 806afaebe33a7d81.fabfcf83beec8446.05dfa514660a3ec2.f8bcd3aaf70bb008 -+ 451e1eb1ccd86f32.bfe2f941be13dda1.d53dc55462536a3b.d5f8110b4f64d4ac -+ 0000000000000000.0000000000000000.016400cc00e300e2.009d00c202170217 - b661ea86b5bb4bc0.a8044a5b62cf6dc2.02079b01d71ab464.2184fc69b6b77023 - ac9a89b627f550a9 - --VPMOVZXDQ_128(reg) -+VMPSADBW_128_0x7(reg) - before - f54b75fce7508c47.c3d06a6f5e65961c.27fe6737484ad3bf.a8812406d18e8a4c - 58e3bca691555fa9.8383f793fb461ac1.d2f9218209e8f3e9.d319bb0f71727aa7 -@@ -41289,12 +41289,12 @@ VPMOVZXDQ_128(reg) - dcf74bdb1589bd68.8ce5253880dbbc95.1b225c1592bf5077.28d104dd11bc9a65 - 0a8bae7a4939421f - after -- f54b75fce7508c47.c3d06a6f5e65961c.27fe6737484ad3bf.a8812406d18e8a4c -- 0000000000000000.0000000000000000.000000005f9adc08.00000000d2d340a1 -+ 0000000000000000.0000000000000000.01c201090175016c.0236028501e501d7 -+ 58e3bca691555fa9.8383f793fb461ac1.d2f9218209e8f3e9.d319bb0f71727aa7 - 31ae5a22c28e067b.d2460cdca86993db.044174a8433609ed.5f9adc08d2d340a1 - dcf74bdb1589bd68.8ce5253880dbbc95.1b225c1592bf5077.28d104dd11bc9a65 - 0a8bae7a4939421f --VPMOVZXDQ_128(mem) -+VMPSADBW_128_0x7(mem) - before - e19255cb9757f4fd.b50c8c3e27d2c01c.8d2cbe919fa7521b.71e7d635900f0532 - 88b378bd16216e29.183718b593f44a44.b1e653d522d9119a.64dedd74dcb364cb -@@ -41303,12 +41303,12 @@ VPMOVZXDQ_128(mem) - 7bde1924a10ad37f - after - e19255cb9757f4fd.b50c8c3e27d2c01c.8d2cbe919fa7521b.71e7d635900f0532 -- 0000000000000000.0000000000000000.0000000071e7d635.00000000900f0532 -- ddb9903ae2a36acf.61c5ebadf67b988c.d3e061ef257eb43e.4e516d3e1036a9ed -+ 88b378bd16216e29.183718b593f44a44.b1e653d522d9119a.64dedd74dcb364cb -+ 0000000000000000.0000000000000000.010601c700ed01ce.00b8019100b10117 - bb721a3018eaa51c.ec020192ebf3e69f.d1e763cbc2a1f832.8c8d82ffc8240f46 - 7bde1924a10ad37f - --VPMOVZXDQ_128(reg) -+VMPSADBW_128_0x7(reg) - before - 75902c1736733146.fda89389d401db3c.153a57d10ee96f2a.86c5d555184e99a3 - d7eeb94624eb6447.8129763331f4c75a.37b9e8d5fce870d9.cd46347a409253bd -@@ -41316,12 +41316,12 @@ VPMOVZXDQ_128(reg) - 44e22f05793a3ca6.bb376b273fa0b443.dbbbabdba833c951.8666a5407c0d009a - ae9bb0bbc85b6bb5 - after -- 75902c1736733146.fda89389d401db3c.153a57d10ee96f2a.86c5d555184e99a3 -- 0000000000000000.0000000000000000.000000008438fa24.000000005978e1ab -+ 0000000000000000.0000000000000000.013f016e00f6017a.017f00a900c1018e -+ d7eeb94624eb6447.8129763331f4c75a.37b9e8d5fce870d9.cd46347a409253bd - fd46bb1c06ffa92e.22bf3f194bd026a3.b0cab009517d2557.8438fa245978e1ab - 44e22f05793a3ca6.bb376b273fa0b443.dbbbabdba833c951.8666a5407c0d009a - ae9bb0bbc85b6bb5 --VPMOVZXDQ_128(mem) -+VMPSADBW_128_0x7(mem) - before - daa4977f5670e029.060f0f6c1828595b.2a5c744929702d65.14d6d5b69d969a72 - e44dd77a44581921.a01959bf80563bfb.49fcd86b244d4c36.b6682b06cd32d267 -@@ -41330,12 +41330,12 @@ VPMOVZXDQ_128(mem) - b2df07ecd3d840f3 - after - daa4977f5670e029.060f0f6c1828595b.2a5c744929702d65.14d6d5b69d969a72 -- 0000000000000000.0000000000000000.0000000014d6d5b6.000000009d969a72 -- aa62ea97ae1ed3ca.6e4c086a4c4f1f2f.f6e212794c42cee1.1fbda837d394addc -+ e44dd77a44581921.a01959bf80563bfb.49fcd86b244d4c36.b6682b06cd32d267 -+ 0000000000000000.0000000000000000.017c011100a30050.00de00a900900124 - 06af4ec1afcec950.ccf418d7189f41a6.0bd99e60be5c6f93.a92048b54c47697c - b2df07ecd3d840f3 - --VMPSADBW_128_0x0(reg) -+VMOVDDUP_YMMorMEM256_to_YMM(reg) - before - 9544e24905d26fef.d6007ee66474b9de.165c867381d3dd0a.66aef90a95a5ea77 - ad9dd4367dc1311a.f420f7f1e81d5da1.a8d24caa23762e07.e12d9e64ee2cfcba -@@ -41343,12 +41343,12 @@ VMPSADBW_128_0x0(reg) - f056ed74b1b062ae.8e00b06acea6b375.1413d59b7f3ae17f.ab59b6da941dd50c - b19d21cc19a01373 - after -- 0000000000000000.0000000000000000.01ed028401400131.017c01c5013501a5 -+ f420f7f1e81d5da1.f420f7f1e81d5da1.e12d9e64ee2cfcba.e12d9e64ee2cfcba - ad9dd4367dc1311a.f420f7f1e81d5da1.a8d24caa23762e07.e12d9e64ee2cfcba - 5834d921d832c420.3ddc33cf57d472c5.dea068e99915714b.5a22095be4fa6188 - f056ed74b1b062ae.8e00b06acea6b375.1413d59b7f3ae17f.ab59b6da941dd50c - b19d21cc19a01373 --VMPSADBW_128_0x0(mem) -+VMOVDDUP_YMMorMEM256_to_YMM(mem) - before - 49bcc71f9090d8e9.d24f0c9da5c74770.c158e9af689ddddd.a6778f2b7274bc52 - 4d8022be14f7e099.5b6a33074f04b111.b3b05a8b42c8ac2b.f01793070d4c3c6e -@@ -41358,11 +41358,11 @@ VMPSADBW_128_0x0(mem) - after - 49bcc71f9090d8e9.d24f0c9da5c74770.c158e9af689ddddd.a6778f2b7274bc52 - 4d8022be14f7e099.5b6a33074f04b111.b3b05a8b42c8ac2b.f01793070d4c3c6e -- 0000000000000000.0000000000000000.01bd00f201a9014f.0174014301580129 -- 0c2aed90b460a859.cd3a864e371dffa2.458fd5b424e32823.1c3f6650ae0b1d32 -+ 9ab6b195c1e4e6af.e5f55d1e4cf2da3e.41d47fe87830dc88.4e41dc9aed509e7f -+ d24f0c9da5c74770.d24f0c9da5c74770.a6778f2b7274bc52.a6778f2b7274bc52 - b65f2d95ea09f633 - --VMPSADBW_128_0x0(reg) -+VMOVDDUP_YMMorMEM256_to_YMM(reg) - before - 77eb2dd540d7652d.7fa8539c0979e0c0.7086aa03ac125bea.9cafd7d965ec4d26 - bd30637c4900a6cd.d0fb60a3db3a4a13.2825c6a9485c2cc2.22fe0145545807bd -@@ -41370,12 +41370,12 @@ VMPSADBW_128_0x0(reg) - 45145eb0ea958dae.77545c5667e6a827.4a8cd279642018d0.2b5cbe9fb286285a - 66034965586108b8 - after -- 0000000000000000.0000000000000000.010f01a501c4011d.019100a700ad011b -+ d0fb60a3db3a4a13.d0fb60a3db3a4a13.22fe0145545807bd.22fe0145545807bd - bd30637c4900a6cd.d0fb60a3db3a4a13.2825c6a9485c2cc2.22fe0145545807bd - e379caf6a411f4bf.d9f18f9246b0a47c.5263d4aca787acd5.b349cfe310321116 - 45145eb0ea958dae.77545c5667e6a827.4a8cd279642018d0.2b5cbe9fb286285a - 66034965586108b8 --VMPSADBW_128_0x0(mem) -+VMOVDDUP_YMMorMEM256_to_YMM(mem) - before - 4009ec211ecd6d5a.3e4c1b14b918aa47.86f143da59e81242.6debbb7a1bb2ab5e - 953c23bf1fd9126c.2c6cfd90ad278a35.e294c10939c3a0f6.15ce8c1d69c9a22d -@@ -41385,11 +41385,11 @@ VMPSADBW_128_0x0(mem) - after - 4009ec211ecd6d5a.3e4c1b14b918aa47.86f143da59e81242.6debbb7a1bb2ab5e - 953c23bf1fd9126c.2c6cfd90ad278a35.e294c10939c3a0f6.15ce8c1d69c9a22d -- 0000000000000000.0000000000000000.014e01cf01c90082.017201b300ad009f -- 20543e5244fa0f93.5397227c72167ec3.f11c6f1d313113e0.674bd2f538b8ac37 -+ 41666a2c788eb41c.69c1018f614d6725.670951d123810c72.9f7f3fcce9f239e6 -+ 3e4c1b14b918aa47.3e4c1b14b918aa47.6debbb7a1bb2ab5e.6debbb7a1bb2ab5e - c97e4003f1a736cc - --VMPSADBW_128_0x0(reg) -+VMOVDDUP_YMMorMEM256_to_YMM(reg) - before - 21648662b14c1450.0ed21a1f9f29df00.443a5cc57b0e0bba.5c9897d982dc716c - cb499e7e13328270.e7ac7a7da625df8d.9af6acd518c249b6.834a45f12f90e143 -@@ -41397,12 +41397,12 @@ VMPSADBW_128_0x0(reg) - 853e399d2ff3fd33.caa3b6a126ba62b8.e1e87afb808ccb70.7a8125e51341ea82 - 019d4e9a8156fb40 - after -- 0000000000000000.0000000000000000.011f011500ff00c0.015400ba0184016e -+ e7ac7a7da625df8d.e7ac7a7da625df8d.834a45f12f90e143.834a45f12f90e143 - cb499e7e13328270.e7ac7a7da625df8d.9af6acd518c249b6.834a45f12f90e143 - 237886c3b4e6bbd8.87adda5a74fccc66.af160c18e6be7665.44fff65157592091 - 853e399d2ff3fd33.caa3b6a126ba62b8.e1e87afb808ccb70.7a8125e51341ea82 - 019d4e9a8156fb40 --VMPSADBW_128_0x0(mem) -+VMOVDDUP_YMMorMEM256_to_YMM(mem) - before - b51eed5abda40efa.4de7b37821e5822e.8b588b3ed8695caf.8ab6f1e883ba8786 - 71d27f13e235e0da.d7bff0c125488674.a899d41da5177777.08cd6d4c8bd4e451 -@@ -41412,11 +41412,11 @@ VMPSADBW_128_0x0(mem) - after - b51eed5abda40efa.4de7b37821e5822e.8b588b3ed8695caf.8ab6f1e883ba8786 - 71d27f13e235e0da.d7bff0c125488674.a899d41da5177777.08cd6d4c8bd4e451 -- 0000000000000000.0000000000000000.013d0115011d00e2.00d700d6011100b4 -- 76ff681c5956b0be.a02ca449d493ff94.62efb251019e0027.ee06652a17f874b8 -+ 13837eaf0d172c0d.7e12ede2d7a947b2.fc320d2aa9d06f3a.b579eb9432641f7e -+ 4de7b37821e5822e.4de7b37821e5822e.8ab6f1e883ba8786.8ab6f1e883ba8786 - 10bfd97cd31b1fac - --VMPSADBW_128_0x1(reg) -+VMOVLPS_128_M64_XMM_XMM(reg) - before - 75f242f5055a5b05.7510b945e2fd261a.98581361b893ebc5.b89c407ec88fe568 - 7ae99d0046406570.ee83eb16c5184b4d.c2e436951e3446f2.d904329e1bafdb2a -@@ -41424,12 +41424,12 @@ VMPSADBW_128_0x1(reg) - d45615816b32d22b.babee66007db91e5.1b478406e1893cee.eb393263d2a9e9df - 949d38e0709b792a - after -- 0000000000000000.0000000000000000.024701c900d7015b.027900f001c70213 -+ 75f242f5055a5b05.7510b945e2fd261a.98581361b893ebc5.b89c407ec88fe568 - 7ae99d0046406570.ee83eb16c5184b4d.c2e436951e3446f2.d904329e1bafdb2a - 7bf1e40b345a7899.bb237c7b1db3da82.791a0753a2024dc6.a0f5049b15099d98 - d45615816b32d22b.babee66007db91e5.1b478406e1893cee.eb393263d2a9e9df - 949d38e0709b792a --VMPSADBW_128_0x1(mem) -+VMOVLPS_128_M64_XMM_XMM(mem) - before - 79ed930008ec0aa7.e1642bce8656add3.c61fa8b19f9b2aa4.03b7a81a76564f15 - 74f5beaeb8a7577f.ff66225f2252453c.ba113b5bffff61e9.8cb66ffbfef4c2e9 -@@ -41439,11 +41439,11 @@ VMPSADBW_128_0x1(mem) - after - 79ed930008ec0aa7.e1642bce8656add3.c61fa8b19f9b2aa4.03b7a81a76564f15 - 74f5beaeb8a7577f.ff66225f2252453c.ba113b5bffff61e9.8cb66ffbfef4c2e9 -- 0000000000000000.0000000000000000.02050148017401a4.023201e002330221 -+ 0000000000000000.0000000000000000.ba113b5bffff61e9.03b7a81a76564f15 - 205c7464cf8c19f6.d97aa4f84affa004.cedbc8658ee59db6.f590d7d555d5b542 - 8d036fa55c2faf1f - --VMPSADBW_128_0x1(reg) -+VMOVLPS_128_M64_XMM_XMM(reg) - before - 36359bf3c68bf859.8853f8446dce05ed.4e2327da0fc8daba.a54bba9ff37f1997 - 4e72572a2e74cd9a.78323c6293ab9df0.43f27baec599c2e2.d67d6ee191ed23ae -@@ -41451,12 +41451,12 @@ VMPSADBW_128_0x1(reg) - 373d6b026a1e0be3.5bd8f409e563c4cc.1c2c87e171808a36.b1560d2ceb75d530 - 1495f00edea8f4f3 - after -- 0000000000000000.0000000000000000.0225020901b501b4.016f01df019401db -+ 36359bf3c68bf859.8853f8446dce05ed.4e2327da0fc8daba.a54bba9ff37f1997 - 4e72572a2e74cd9a.78323c6293ab9df0.43f27baec599c2e2.d67d6ee191ed23ae - 2f069db531766a8f.cac5bcab5c2e9e2c.13309de207fd9327.3b3c6017863b7928 - 373d6b026a1e0be3.5bd8f409e563c4cc.1c2c87e171808a36.b1560d2ceb75d530 - 1495f00edea8f4f3 --VMPSADBW_128_0x1(mem) -+VMOVLPS_128_M64_XMM_XMM(mem) - before - 41c685a87bdf919d.c062bb7c76f7eb43.0836606a4a56cbfd.b9313717a0afe3bb - 12b548e7dd276959.27c28b8ff08d475a.abad7db8a5146eea.468aa8f02f15d961 -@@ -41466,11 +41466,11 @@ VMPSADBW_128_0x1(mem) - after - 41c685a87bdf919d.c062bb7c76f7eb43.0836606a4a56cbfd.b9313717a0afe3bb - 12b548e7dd276959.27c28b8ff08d475a.abad7db8a5146eea.468aa8f02f15d961 -- 0000000000000000.0000000000000000.01c40186012a0216.017700da011d0192 -+ 0000000000000000.0000000000000000.abad7db8a5146eea.b9313717a0afe3bb - 13fc49ff6117bab9.006499309f226260.4611b7d0b31f7bab.a06bbd3bdfb890c2 - 248b5a85380cc7d5 - --VMPSADBW_128_0x1(reg) -+VMOVLPS_128_M64_XMM_XMM(reg) - before - 0930a82261c78db9.fbed7fb2bcd7aab5.293ccf970d3899a6.f697cc719e845cd6 - aaa6a37ff7761c1c.f8cbd3b84cd8c574.a0807446593c3b54.0d6582b0efe3ca6e -@@ -41478,12 +41478,12 @@ VMPSADBW_128_0x1(reg) - 8f349125d7de8709.a181c6717ccb6be9.e978fb30fc3bb496.e009bdb839c13d93 - 54763c596957b979 - after -- 0000000000000000.0000000000000000.00a40093006800de.0110018a01d201a6 -+ 0930a82261c78db9.fbed7fb2bcd7aab5.293ccf970d3899a6.f697cc719e845cd6 - aaa6a37ff7761c1c.f8cbd3b84cd8c574.a0807446593c3b54.0d6582b0efe3ca6e - 6238470695a4b1a7.e663c2ff2d26c721.c17b84aa1fb98615.67475379c549819e - 8f349125d7de8709.a181c6717ccb6be9.e978fb30fc3bb496.e009bdb839c13d93 - 54763c596957b979 --VMPSADBW_128_0x1(mem) -+VMOVLPS_128_M64_XMM_XMM(mem) - before - 9f5b4a487117b27b.8ce47b475aafdbeb.05f15dfc54d56ff7.72c4d6438b4f0283 - 9d8465726c0ee4c6.b49503d7baa3e9fc.ee7f028bd24f8d78.b9ab104e6980ac87 -@@ -41493,11 +41493,11 @@ VMPSADBW_128_0x1(mem) - after - 9f5b4a487117b27b.8ce47b475aafdbeb.05f15dfc54d56ff7.72c4d6438b4f0283 - 9d8465726c0ee4c6.b49503d7baa3e9fc.ee7f028bd24f8d78.b9ab104e6980ac87 -- 0000000000000000.0000000000000000.012e00ec006f0131.019b0182013e00bb -+ 0000000000000000.0000000000000000.ee7f028bd24f8d78.72c4d6438b4f0283 - 22d2ae23accfe2e5.f929dbf67e262356.bf2367652ec50982.f17a9101806a0286 - 9afad180f13b27d9 - --VMPSADBW_128_0x2(reg) -+VMOVLPS_128_XMM_M64(reg) - before - 71445fa8215a97f4.618fd6832ab12612.cea5225c1bccc6f7.5fd31e8844d8df63 - d2a639e5ab518f82.c3bff9cc0bfa9337.3e51f7e105c61376.f4d0d460708cbf66 -@@ -41505,12 +41505,12 @@ VMPSADBW_128_0x2(reg) - a1ddbf4f3ffd07a9.5fac25ce67edd61b.636d38f92de39abc.6ce32bda78049185 - 0892c3568ce1faf8 - after -- 0000000000000000.0000000000000000.014401ee019700fb.0065007b012e010c -+ 71445fa8215a97f4.618fd6832ab12612.cea5225c1bccc6f7.5fd31e8844d8df63 - d2a639e5ab518f82.c3bff9cc0bfa9337.3e51f7e105c61376.f4d0d460708cbf66 - 186a5aa42baf4b30.233095ec6bb4e480.a77b55f2d79f457e.59e704d7cdec67b8 - a1ddbf4f3ffd07a9.5fac25ce67edd61b.636d38f92de39abc.6ce32bda78049185 - 0892c3568ce1faf8 --VMPSADBW_128_0x2(mem) -+VMOVLPS_128_XMM_M64(mem) - before - 09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.cf749d63a41f4cdc - 4a353b6560177882.e9ff411d8c9e6eaf.d8f81189a10a8df1.48db7f9dd7de9789 -@@ -41518,13 +41518,13 @@ VMPSADBW_128_0x2(mem) - 002f4b652befc1b6.886da0b07494a3f3.0c039f5b99b1961a.ccfdaa2de316ec3d - 9050eb5cf4a76d9b - after -- 09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.cf749d63a41f4cdc -+ 09be4a36258e5e3e.c84b625480c9fe9a.5200255e1ab12532.28f0d91263acb970 - 4a353b6560177882.e9ff411d8c9e6eaf.d8f81189a10a8df1.48db7f9dd7de9789 -- 0000000000000000.0000000000000000.0116017f0243011d.021001d701c701b3 -+ a9c112d1598905f1.60475718ff099093.cc5f66391707c985.28f0d91263acb970 - 002f4b652befc1b6.886da0b07494a3f3.0c039f5b99b1961a.ccfdaa2de316ec3d - 9050eb5cf4a76d9b - --VMPSADBW_128_0x2(reg) -+VMOVLPS_128_XMM_M64(reg) - before - d033990a31eb7736.2d4a630df25668fe.bfbe195187cee17a.72ae38dc4216afdb - e9f3b1a3366f48bb.0be0d5b5cbc8b5f5.6086bc67d54087d5.dc2dada62f41d2f5 -@@ -41532,12 +41532,12 @@ VMPSADBW_128_0x2(reg) - 11390c460b642a33.49a9b7b62103349e.4fab75a29001fab6.28d71cca421a21e3 - c29a0efba1e0c50e - after -- 0000000000000000.0000000000000000.00f9015c012e0095.01ac018a014f0148 -+ d033990a31eb7736.2d4a630df25668fe.bfbe195187cee17a.72ae38dc4216afdb - e9f3b1a3366f48bb.0be0d5b5cbc8b5f5.6086bc67d54087d5.dc2dada62f41d2f5 - 35dc2e93a1be1ad6.75bc1d49d15465c6.c611875ef978d1af.244c7aa77b3eb994 - 11390c460b642a33.49a9b7b62103349e.4fab75a29001fab6.28d71cca421a21e3 - c29a0efba1e0c50e --VMPSADBW_128_0x2(mem) -+VMOVLPS_128_XMM_M64(mem) - before - d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.56a0839f35683f93 - 2cf7d237965bb5ac.e983dca652e7f260.9ae9d2c70dff1d12.363babc18538dcf5 -@@ -41545,13 +41545,13 @@ VMPSADBW_128_0x2(mem) - 42c3a8bb381067cb.51300122ea5782a4.e00106486f1c52b0.f5963e2594440df2 - 8ceea03f8b9819e6 - after -- d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.56a0839f35683f93 -+ d061cc26b49d6343.d958482912eeb37d.617420e6d6e3dda9.4dc9eb751bfd0d85 - 2cf7d237965bb5ac.e983dca652e7f260.9ae9d2c70dff1d12.363babc18538dcf5 -- 0000000000000000.0000000000000000.022d029f02150192.01130116014b0149 -+ b4299d1a63287875.9d07c62b66db2389.d1d44b43e163b006.4dc9eb751bfd0d85 - 42c3a8bb381067cb.51300122ea5782a4.e00106486f1c52b0.f5963e2594440df2 - 8ceea03f8b9819e6 - --VMPSADBW_128_0x2(reg) -+VMOVLPS_128_XMM_M64(reg) - before - 6c1d0e2e9d856d0e.b3916f06311e3fda.614a8af97be64a5d.a43b80c1d235be3d - f26f825d65984415.e35f6ee8695ebccd.29a15b1bb415b85f.fa50339927bbb1d8 -@@ -41559,12 +41559,12 @@ VMPSADBW_128_0x2(reg) - 61ab7130895d6e72.f12a051d07a59411.5035caef908076ef.c736391b153b1beb - f7a0839de64d0bba - after -- 0000000000000000.0000000000000000.0161018e01230155.011a00af01bd0182 -+ 6c1d0e2e9d856d0e.b3916f06311e3fda.614a8af97be64a5d.a43b80c1d235be3d - f26f825d65984415.e35f6ee8695ebccd.29a15b1bb415b85f.fa50339927bbb1d8 - 7b2ffa3a805cdba8.aff9214bfcdc9ad1.058072f3326f0856.bc0a9dbe89b9e7ae - 61ab7130895d6e72.f12a051d07a59411.5035caef908076ef.c736391b153b1beb - f7a0839de64d0bba --VMPSADBW_128_0x2(mem) -+VMOVLPS_128_XMM_M64(mem) - before - 2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.680a5f7a6bd43dd6 - 375d13bbc85409c0.b8024d18d648775e.4a854dbaf346cff8.a84c2d015ff89ab6 -@@ -41572,13 +41572,13 @@ VMPSADBW_128_0x2(mem) - 5aa22b7a102bc321.d6d4f6732db83f38.cfcf26200da04ce1.0f4766aefede0514 - ef98c8aee3b88be9 - after -- 2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.680a5f7a6bd43dd6 -+ 2914f82e18fc7148.012de3ab1c283920.86c09548a5c567ba.6c4731ee0677c93c - 375d13bbc85409c0.b8024d18d648775e.4a854dbaf346cff8.a84c2d015ff89ab6 -- 0000000000000000.0000000000000000.010c010c0118016f.01b2018201bb00b0 -+ fe495031125f914f.e076aae1534965d7.1946a95e0c3687f6.6c4731ee0677c93c - 5aa22b7a102bc321.d6d4f6732db83f38.cfcf26200da04ce1.0f4766aefede0514 - ef98c8aee3b88be9 - --VMPSADBW_128_0x3(reg) -+VPSADBW_128(reg) - before - 6785535850919768.27352084e1c35b61.f66a2d3b0320412c.48ec3eec1191dae4 - d25b041ae2f5643c.41ceac399f34173c.9c824ba36f0da660.60686fae3414ed2c -@@ -41586,12 +41586,12 @@ VMPSADBW_128_0x3(reg) - f6f3c492e2913595.cc42755953cee671.eb6c2d087aa88b37.ddb10ac54a01903a - fa156bf174839958 - after -- 0000000000000000.0000000000000000.00ad00ee00b700f5.00c500ad01cd0119 -+ 0000000000000000.0000000000000000.00000000000001a4.0000000000000366 - d25b041ae2f5643c.41ceac399f34173c.9c824ba36f0da660.60686fae3414ed2c - 8e67d55e34713012.843949876689b1dd.246a4d190d0cab80.f3113453933540e5 - f6f3c492e2913595.cc42755953cee671.eb6c2d087aa88b37.ddb10ac54a01903a - fa156bf174839958 --VMPSADBW_128_0x3(mem) -+VPSADBW_128(mem) - before - 2609d5c42dc7176a.654bcc2189dfaf73.f5b4ac9b81107224.4bd5eadb516d8432 - 3d59c32992dac59d.39bdea77c5e9dc55.db5c68390d5a1021.a1f07d002fe8d01c -@@ -41601,11 +41601,11 @@ VMPSADBW_128_0x3(mem) - after - 2609d5c42dc7176a.654bcc2189dfaf73.f5b4ac9b81107224.4bd5eadb516d8432 - 3d59c32992dac59d.39bdea77c5e9dc55.db5c68390d5a1021.a1f07d002fe8d01c -- 0000000000000000.0000000000000000.01d001d80149015a.015401f601eb019d -+ 0000000000000000.0000000000000000.000000000000023b.00000000000002b8 - 9c3c1c58cf9aa415.7b1b5428695f3adb.4d7f643aad3775ab.9e7119ee6e2e5370 - fe6d1a8e07100231 - --VMPSADBW_128_0x3(reg) -+VPSADBW_128(reg) - before - c44ce22f16d8f592.9b677ffbde604cb2.a39f995c0ae3e3d7.92919b74f9e2b390 - 4c5a6d3d3812683e.f61e56e00924151f.9e6ce306af522f88.040848ba12c5f56f -@@ -41613,12 +41613,12 @@ VMPSADBW_128_0x3(reg) - 1232be522409bc2a.2d60502021d7fa1b.8111787077239bbb.de59f51c1e656fce - ffcbed0e483921a6 - after -- 0000000000000000.0000000000000000.01ff0197017e01cc.025400e501c401ab -+ 0000000000000000.0000000000000000.000000000000026a.0000000000000234 - 4c5a6d3d3812683e.f61e56e00924151f.9e6ce306af522f88.040848ba12c5f56f - f2e3b825094996e2.882d1df36bf2bb89.cace2f93f539589b.7eb2e7f915edf576 - 1232be522409bc2a.2d60502021d7fa1b.8111787077239bbb.de59f51c1e656fce - ffcbed0e483921a6 --VMPSADBW_128_0x3(mem) -+VPSADBW_128(mem) - before - bcd24bbdaf76c528.08957b2f26de16c1.c0836c5446de8d03.2081ba08d29c3395 - f33b8c1470271880.2f56eb2aa955e054.1f61ec79f713316a.0369f1c6a1315dd4 -@@ -41628,11 +41628,11 @@ VMPSADBW_128_0x3(mem) - after - bcd24bbdaf76c528.08957b2f26de16c1.c0836c5446de8d03.2081ba08d29c3395 - f33b8c1470271880.2f56eb2aa955e054.1f61ec79f713316a.0369f1c6a1315dd4 -- 0000000000000000.0000000000000000.01520126017601ce.016c00cc00680100 -+ 0000000000000000.0000000000000000.00000000000003a7.000000000000022f - 3b62a36a6f16ba65.8526d527a957b21c.ad82084a6b399b6b.06d52f690ddc5734 - ddef2d25e20b9eac - --VMPSADBW_128_0x3(reg) -+VPSADBW_128(reg) - before - 68b311b89b85673a.05b97241e46c8149.6acc47015cfa33a9.945c9cce6641d95d - 036cd68ed5d7ee89.b7a114712367e6b4.f2005ca8026e13e3.b72285f35ca8187f -@@ -41640,12 +41640,12 @@ VMPSADBW_128_0x3(reg) - d9ecf5b4392f251d.4757bd886d797ece.5746600e95fbe308.1da143d5acc18805 - 18f310693d8a31c1 - after -- 0000000000000000.0000000000000000.010e024401280132.01d9015d01d000c4 -+ 0000000000000000.0000000000000000.0000000000000245.000000000000020c - 036cd68ed5d7ee89.b7a114712367e6b4.f2005ca8026e13e3.b72285f35ca8187f - 0a6579142b8b6e46.2fe703e44711a7d1.7710108836408f73.f0a03ea76b7913fe - d9ecf5b4392f251d.4757bd886d797ece.5746600e95fbe308.1da143d5acc18805 - 18f310693d8a31c1 --VMPSADBW_128_0x3(mem) -+VPSADBW_128(mem) - before - bf60224f3ae3cb5d.cc4b45db9c4f4cb9.dcbdbd47b0a828d4.ecf047a4ba2b4b4b - ecb5f374bdd51106.3fcf67f6ef7622c7.cbe57f0f2dac6011.9458c1b8425d02eb -@@ -41655,11 +41655,11 @@ VMPSADBW_128_0x3(mem) - after - bf60224f3ae3cb5d.cc4b45db9c4f4cb9.dcbdbd47b0a828d4.ecf047a4ba2b4b4b - ecb5f374bdd51106.3fcf67f6ef7622c7.cbe57f0f2dac6011.9458c1b8425d02eb -- 0000000000000000.0000000000000000.0186016201d30122.009200b101440259 -+ 0000000000000000.0000000000000000.0000000000000231.0000000000000311 - 4c47c826ccb9942e.15760fb4d809c7e7.22aa3a6743606ee0.89945e06e9f450ed - 8e017a1940715ea7 - --VMPSADBW_128_0x4(reg) -+VPSIGNB_128(reg) - before - 165d19596920ac6d.361bc28d8ec34905.30308d30a58e0d52.43df2bcf1429bac9 - 7bf33732018d76ea.17086de148969a98.3b40cc4fd24af2de.2e06ceef8ef78698 -@@ -41667,12 +41667,12 @@ VMPSADBW_128_0x4(reg) - 4f00e05fedcd6dbc.2e58c30512cd03a5.908d7e26be98840b.cd5a1a07f0ce899b - 3a1ebcd70ff03927 - after -- 0000000000000000.0000000000000000.012a00fe013a0157.01410101018f0224 -+ 0000000000000000.0000000000000000.c5c0344f2eb60ede.d2fa321172097a98 - 7bf33732018d76ea.17086de148969a98.3b40cc4fd24af2de.2e06ceef8ef78698 - 1a10d010a442f8cb.cbd8441015414414.92f0c87dfccab038.bdeb9fb3ced48c7b - 4f00e05fedcd6dbc.2e58c30512cd03a5.908d7e26be98840b.cd5a1a07f0ce899b - 3a1ebcd70ff03927 --VMPSADBW_128_0x4(mem) -+VPSIGNB_128(mem) - before - e005001047475749.770f648b78ba1268.1c5566ac5a489276.9363e8b7b543aa04 - 9bd9629cb5dea02e.ec895701e293237c.7198a9f10abdaeb4.f6be049a7c545dce -@@ -41682,11 +41682,11 @@ VMPSADBW_128_0x4(mem) - after - e005001047475749.770f648b78ba1268.1c5566ac5a489276.9363e8b7b543aa04 - 9bd9629cb5dea02e.ec895701e293237c.7198a9f10abdaeb4.f6be049a7c545dce -- 0000000000000000.0000000000000000.00d00213013201d9.016f017e00c801f8 -+ 0000000000000000.0000000000000000.7198a90f0abd52b4.0abefc668454a3ce - c07b7162a1fca2ee.30ed7b77c23f778a.c128010510c77d26.4b323f0aecdd5d88 - f6e3576fcc6d22cf - --VMPSADBW_128_0x4(reg) -+VPSIGNB_128(reg) - before - 704910d6ed946498.e2e11672589cd423.b76fa34f6f2933dd.730b0dac9e73a7b1 - 17b065adebde608f.8965c987b3ad20ca.fc8c2b216b304b47.fb66aaa2034a4e59 -@@ -41694,12 +41694,12 @@ VMPSADBW_128_0x4(reg) - 58b1d958eb0d75b5.d6f6496dcb4ef820.30c74860bec67d12.02b48326c5a603af - 383fb88e594488b5 - after -- 0000000000000000.0000000000000000.008a00be00520056.0102010a01510182 -+ 0000000000000000.0000000000000000.fc742b216bd0b547.fb66aa5e034a4e59 - 17b065adebde608f.8965c987b3ad20ca.fc8c2b216b304b47.fb66aaa2034a4e59 - 4564555f61d8525f.91d2068cd139420f.5b900e5851e0fa75.370552d15c572e4a - 58b1d958eb0d75b5.d6f6496dcb4ef820.30c74860bec67d12.02b48326c5a603af - 383fb88e594488b5 --VMPSADBW_128_0x4(mem) -+VPSIGNB_128(mem) - before - b5726df4343c7a88.aae2ef042609063c.349b0f16c0f8fc26.d77cd6a54d6d10cb - 55181f44739a9553.994591cfae5841a1.878ed374c9410a50.acfdb3939b61ef4c -@@ -41709,11 +41709,11 @@ VMPSADBW_128_0x4(mem) - after - b5726df4343c7a88.aae2ef042609063c.349b0f16c0f8fc26.d77cd6a54d6d10cb - 55181f44739a9553.994591cfae5841a1.878ed374c9410a50.acfdb3939b61ef4c -- 0000000000000000.0000000000000000.010d01d001750129.00ce012e014701ca -+ 0000000000000000.0000000000000000.8772d37437bff650.54fd4d6d9b61efb4 - 6df167528bba3483.bacc6f731222a4b3.7b8d45fb8de638ba.508e4a1ae1627f54 - d737fc8c1287a933 - --VMPSADBW_128_0x4(reg) -+VPSIGNB_128(reg) - before - fcdbed5672290e8a.9ebbf5e89c933140.a489a12327b344b9.d532ecfc7f58cf53 - 1bc61ae69cd4eb05.62296f18810347a6.9aa751a3f8c87e4c.94548162f79b61bf -@@ -41721,12 +41721,12 @@ VMPSADBW_128_0x4(reg) - b6a01604bf76fc15.122018f735d5ac1a.1b3518bf40acaecc.b0436509e6c264be - c6a7ac2396bf4eaa - after -- 0000000000000000.0000000000000000.01d6014701440143.01bd011d0110014c -+ 0000000000000000.0000000000000000.66a751a3f838824c.6cac7f62f7659fbf - 1bc61ae69cd4eb05.62296f18810347a6.9aa751a3f8c87e4c.94548162f79b61bf - 8f437ea72c147c4f.940652ce551531e0.f8717a5d22ed8d19.93c1801710bba929 - b6a01604bf76fc15.122018f735d5ac1a.1b3518bf40acaecc.b0436509e6c264be - c6a7ac2396bf4eaa --VMPSADBW_128_0x4(mem) -+VPSIGNB_128(mem) - before - b0b9d2513bbb2318.eb27dc6bf185a902.b6413f7d3c507382.5d3d2734ef931d10 - 4c44527ff2c49e35.8925ce475dcebdc3.5e36434e87914442.1bd6a428ca2e1691 -@@ -41736,11 +41736,11 @@ VMPSADBW_128_0x4(mem) - after - b0b9d2513bbb2318.eb27dc6bf185a902.b6413f7d3c507382.5d3d2734ef931d10 - 4c44527ff2c49e35.8925ce475dcebdc3.5e36434e87914442.1bd6a428ca2e1691 -- 0000000000000000.0000000000000000.01b101dc015500c3.00dd01c4027201b6 -+ 0000000000000000.0000000000000000.a236434e879144be.1bd6a42836d21691 - 06f9508c052a792a.75b6230e543b0c6f.26ccce7d5796ef7b.7bebd43d75ad94fd - d5ff81367ea99240 - --VMPSADBW_128_0x5(reg) -+VPSIGNW_128(reg) - before - 1bd38a5e23890a70.dcbac64298a0505a.79e07ed21778bfb3.fe054eb41472414d - aab5ed2201d83739.d32587a9ad52bee9.58b2f4ba851eca7a.4a429ae584458d27 -@@ -41748,12 +41748,12 @@ VMPSADBW_128_0x5(reg) - 0dceae2ad5f4a249.9529d736ca9b4fd3.137923aad0d5d744.aaf687e5f0fdfea5 - 76071f8c23fa9ba2 - after -- 0000000000000000.0000000000000000.01db01b100a301ad.0240011c00e40129 -+ 0000000000000000.0000000000000000.58b20b46851eca7a.b5be9ae57bbb72d9 - aab5ed2201d83739.d32587a9ad52bee9.58b2f4ba851eca7a.4a429ae584458d27 - dcefa5ecb2225648.c8060eab5f4d7f03.6c76823339b96871.e44e2efcc41a8d36 - 0dceae2ad5f4a249.9529d736ca9b4fd3.137923aad0d5d744.aaf687e5f0fdfea5 - 76071f8c23fa9ba2 --VMPSADBW_128_0x5(mem) -+VPSIGNW_128(mem) - before - 254a74dd791e2156.9b9e044704d959e8.18595f350c4be986.a707d38ae5ff519e - 948e02c50f744cef.e1aaa3aedb5eb5d0.2b6420943e660a47.866c8f3e15c3122c -@@ -41763,11 +41763,11 @@ VMPSADBW_128_0x5(mem) - after - 254a74dd791e2156.9b9e044704d959e8.18595f350c4be986.a707d38ae5ff519e - 948e02c50f744cef.e1aaa3aedb5eb5d0.2b6420943e660a47.866c8f3e15c3122c -- 0000000000000000.0000000000000000.00e701cd013701d4.00d40148014b0116 -+ 0000000000000000.0000000000000000.2b6420943e66f5b9.799470c2ea3d122c - 1d45b50669e88080.05aaae0ff3754e2c.74364222e812d0a6.90ea17d733455d92 - 759bdc935a1d5ec2 - --VMPSADBW_128_0x5(reg) -+VPSIGNW_128(reg) - before - 13539dd40cbd96d6.f051d238651d01cf.9b3611e06c1f03f9.62969a2997bbee9b - c75e5406e4b3437a.f28c19af11b417b2.592eaeacfd994ebf.52001d40a700824f -@@ -41775,12 +41775,12 @@ VMPSADBW_128_0x5(reg) - e29d99ee77cfe720.f4c20d21e73bf0e7.bc9582e6d92b95e9.a321904f5d8efea3 - bd70791e3af05e9a - after -- 0000000000000000.0000000000000000.019001fb01a501ae.01050110012f00ae -+ 0000000000000000.0000000000000000.a6d2aeacfd994ebf.52001d40a700824f - c75e5406e4b3437a.f28c19af11b417b2.592eaeacfd994ebf.52001d40a700824f - ed08ff967e8b9f59.ffc3035988ba7d57.9adf7fdf436e6b2b.1e3f455335ed48ee - e29d99ee77cfe720.f4c20d21e73bf0e7.bc9582e6d92b95e9.a321904f5d8efea3 - bd70791e3af05e9a --VMPSADBW_128_0x5(mem) -+VPSIGNW_128(mem) - before - 48f97daee81f2400.00691e7b6b0d567a.ab55b4f349412c91.1a9bb22b5c5a0aa4 - 208816ea84250e01.a4b78aaaf5d12914.014773bccbdaed7f.0f3f0b1c678a0309 -@@ -41790,11 +41790,11 @@ VMPSADBW_128_0x5(mem) - after - 48f97daee81f2400.00691e7b6b0d567a.ab55b4f349412c91.1a9bb22b5c5a0aa4 - 208816ea84250e01.a4b78aaaf5d12914.014773bccbdaed7f.0f3f0b1c678a0309 -- 0000000000000000.0000000000000000.00ff014201bc017f.016101a60184011d -+ 0000000000000000.0000000000000000.feb98c44cbdaed7f.0f3ff4e4678a0309 - 27e8fc15f4eb3983.ee0c099a3c18ebb7.fa7c2ade9cf3ecd8.338c2aae8716787f - 18cee728d38b6be8 - --VMPSADBW_128_0x5(reg) -+VPSIGNW_128(reg) - before - 06ddbdfd1830d4ab.0e5040dd00c3f35b.4cab133431b35118.54561911248ba39c - 5705a899f290ee74.b2ef0b016aa3bf7e.a0fdf41f2d040b68.bec011e93ce5cf55 -@@ -41802,12 +41802,12 @@ VMPSADBW_128_0x5(reg) - 96cfaed6d2b228c6.a0fd220ec6ac8054.9ae92c98a8f56a88.2f73093c89117453 - ee55028ff7fa66f1 - after -- 0000000000000000.0000000000000000.01ed01f801370132.011900c3010301f6 -+ 0000000000000000.0000000000000000.a0fd0be1d2fc0b68.bec0ee17c31bcf55 - 5705a899f290ee74.b2ef0b016aa3bf7e.a0fdf41f2d040b68.bec011e93ce5cf55 - 6991a568fc37f6ee.ee8fd76e4d975a18.464ea8c7cb965554.13868d54ff0e2b2e - 96cfaed6d2b228c6.a0fd220ec6ac8054.9ae92c98a8f56a88.2f73093c89117453 - ee55028ff7fa66f1 --VMPSADBW_128_0x5(mem) -+VPSIGNW_128(mem) - before - 2cf6f23864d6bc34.3b09c14f118cc0a8.a30567cef0edec5f.f81b7bfe5fae88af - c4235723edb03347.b58cda405451f93f.d372239be8665c65.bc3191668c4ce976 -@@ -41817,11 +41817,11 @@ VMPSADBW_128_0x5(mem) - after - 2cf6f23864d6bc34.3b09c14f118cc0a8.a30567cef0edec5f.f81b7bfe5fae88af - c4235723edb03347.b58cda405451f93f.d372239be8665c65.bc3191668c4ce976 -- 0000000000000000.0000000000000000.00c4025a01e10113.012b01f401eb0100 -+ 0000000000000000.0000000000000000.2c8e239b179aa39b.43cf91668c4c168a - 77516e6fc18f7390.939d0a3658ce413e.29afec08af323210.e63303e8bb696692 - 03b957daf4fffa40 - --VMPSADBW_128_0x6(reg) -+VPSIGND_128(reg) - before - f752627e13aac23d.48ea17a945acb51d.b1c21a13519dc7fe.0817f281b79c120d - 1d49203fb5f7f936.e53e25d453f7072b.12611f18be88e023.84145eb5fd6fe4b5 -@@ -41829,12 +41829,12 @@ VMPSADBW_128_0x6(reg) - 6e84a6c8f1a5a7ca.ef4b5db18349cd78.1038f94766dfb54f.c2005903b07e50b5 - 3c86e0f456d16364 - after -- 0000000000000000.0000000000000000.013c0055018c0141.01df013501390111 -+ 0000000000000000.0000000000000000.12611f18be88e023.84145eb502901b4b - 1d49203fb5f7f936.e53e25d453f7072b.12611f18be88e023.84145eb5fd6fe4b5 - d1eb8e897671dcd6.291b13de0a7d25e5.13c415b03c1ac65a.7873ac929cb66533 - 6e84a6c8f1a5a7ca.ef4b5db18349cd78.1038f94766dfb54f.c2005903b07e50b5 - 3c86e0f456d16364 --VMPSADBW_128_0x6(mem) -+VPSIGND_128(mem) - before - c4d3bd52a9bd586f.52606668c21e96bd.159b803bdc68b90f.6609c649d964ebad - 34b16c07c64eebff.d7cbc9d58668e45c.75d7f76731e4a6d7.6f8378223034a221 -@@ -41844,11 +41844,11 @@ VMPSADBW_128_0x6(mem) - after - c4d3bd52a9bd586f.52606668c21e96bd.159b803bdc68b90f.6609c649d964ebad - 34b16c07c64eebff.d7cbc9d58668e45c.75d7f76731e4a6d7.6f8378223034a221 -- 0000000000000000.0000000000000000.01080179016e0202.00c4016300ab00dc -+ 0000000000000000.0000000000000000.75d7f767ce1b5929.6f837822cfcb5ddf - 4053312acc8cdf65.397d69c655a0904d.5742d1543c2972a9.0da17b09fbe685f9 - 5addc5f0a8e029b6 - --VMPSADBW_128_0x6(reg) -+VPSIGND_128(reg) - before - cbf3e45da9563f38.93af3f6fed51b792.cc5c9e2398a766f7.900a2cee2b09c90b - bc2dd4be9ad2032c.40cd10bd48eb1df5.72fa66fc3eae8bfd.75edcbda8677104e -@@ -41856,12 +41856,12 @@ VMPSADBW_128_0x6(reg) - 8e3f1808bf128318.137ee7211acc870f.62a39fd721f2b5cb.ae37c759ed2e6224 - bc361bc3328fe411 - after -- 0000000000000000.0000000000000000.012f01db01120251.01a8022d01bf0276 -+ 0000000000000000.0000000000000000.8d059904c1517403.8a1234268677104e - bc2dd4be9ad2032c.40cd10bd48eb1df5.72fa66fc3eae8bfd.75edcbda8677104e - 89d8917d18e3b03d.21781efff865cfbb.85a3bdbfe2433c0a.e0b82b05687f059d - 8e3f1808bf128318.137ee7211acc870f.62a39fd721f2b5cb.ae37c759ed2e6224 - bc361bc3328fe411 --VMPSADBW_128_0x6(mem) -+VPSIGND_128(mem) - before - e480a43052af478d.26b063ca29edb869.f3a9e50fc92b011e.664609af964532eb - 03e3dc8b6a9946c7.af75702ff5ff8adb.9bc696b5228efb14.ebd7f6b5ddcaee17 -@@ -41871,11 +41871,11 @@ VMPSADBW_128_0x6(mem) - after - e480a43052af478d.26b063ca29edb869.f3a9e50fc92b011e.664609af964532eb - 03e3dc8b6a9946c7.af75702ff5ff8adb.9bc696b5228efb14.ebd7f6b5ddcaee17 -- 0000000000000000.0000000000000000.0126014e0187020e.01eb01ec0323025a -+ 0000000000000000.0000000000000000.6439694bdd7104ec.ebd7f6b5223511e9 - 96204ebaf0fc0b20.012fbe921df9f9d4.b606ffd93f915a63.ecf749f854981541 - 1f1da80ebbf9f898 - --VMPSADBW_128_0x6(reg) -+VPSIGND_128(reg) - before - 4462790064bc0caa.c2928067968c4897.82bbf668b2f90cb3.e1c0af2f3c493814 - b711ba3bec6b8a24.564b51b2a418127b.62cbe0921761ae63.459d01ee5336845c -@@ -41883,12 +41883,12 @@ VMPSADBW_128_0x6(reg) - f8e17a3d07c3bbfe.21c7c5d2664d3d38.b4abb88ec2968ae9.28eb7b533cdc5960 - 5ff59cd247ae5974 - after -- 0000000000000000.0000000000000000.01340064016001ef.012b00cb02100137 -+ 0000000000000000.0000000000000000.9d341f6ee89e519d.ba62fe12acc97ba4 - b711ba3bec6b8a24.564b51b2a418127b.62cbe0921761ae63.459d01ee5336845c - d578672cef94b1b1.2c193f8735a925f7.ffad777ae8bc1991.be6771009e63fb67 - f8e17a3d07c3bbfe.21c7c5d2664d3d38.b4abb88ec2968ae9.28eb7b533cdc5960 - 5ff59cd247ae5974 --VMPSADBW_128_0x6(mem) -+VPSIGND_128(mem) - before - 3f514e69dbe4b9ce.7d99f1dcd382e5b7.11205f7f520f156a.dc139d38417c3c16 - a4cb0f03158a339b.c0edc674ed606a87.d8f1897b15fc6ab8.d52f24e600f96cc5 -@@ -41898,11 +41898,11 @@ VMPSADBW_128_0x6(mem) - after - 3f514e69dbe4b9ce.7d99f1dcd382e5b7.11205f7f520f156a.dc139d38417c3c16 - a4cb0f03158a339b.c0edc674ed606a87.d8f1897b15fc6ab8.d52f24e600f96cc5 -- 0000000000000000.0000000000000000.01d40135011601cd.021301bc018c012e -+ 0000000000000000.0000000000000000.d8f1897b15fc6ab8.2ad0db1a00f96cc5 - 6d48acf5e958673d.f093803e7ca2791e.5a2b7f0c93847b5a.a6b605fbb0e83658 - 36b8573ad8734894 - --VMPSADBW_128_0x7(reg) -+VPMULHRSW_128(reg) - before - 07a03b2cb1c6c701.89e38025bb97996a.957f5b49291f7a3d.ce2c42798538ae06 - 73b8ac3dd66bf04c.9acc5208a377d5b9.683586fe94e9c624.89d585e5be464e7e -@@ -41910,12 +41910,12 @@ VMPSADBW_128_0x7(reg) - 90ac256c77e02e2a.0ab7e09b22475f70.0833b911179632f8.444e7c6778a1c485 - fbb628552f06126c - after -- 0000000000000000.0000000000000000.014801c400de01f0.01fd00a3019001a3 -+ 0000000000000000.0000000000000000.cffa030cb3682de2.a00b3810d0e60ead - 73b8ac3dd66bf04c.9acc5208a377d5b9.683586fe94e9c624.89d585e5be464e7e - d84ea6d9e4f0fe20.7ccf9e8bbc03d957.c503fcc75b8d9a7e.67f1c53b5bba17ef - 90ac256c77e02e2a.0ab7e09b22475f70.0833b911179632f8.444e7c6778a1c485 - fbb628552f06126c --VMPSADBW_128_0x7(mem) -+VPMULHRSW_128(mem) - before - 6af644f19ff5bdcf.f81f256329c8bd16.22529522f250242f.8d12b9486691ca3d - 6cda4d27e27b80da.6df2a3289933e48f.9f6a370e4829e4c0.afecf9d9e4089dfa -@@ -41925,11 +41925,11 @@ VMPSADBW_128_0x7(mem) - after - 6af644f19ff5bdcf.f81f256329c8bd16.22529522f250242f.8d12b9486691ca3d - 6cda4d27e27b80da.6df2a3289933e48f.9f6a370e4829e4c0.afecf9d9e4089dfa -- 0000000000000000.0000000000000000.011000ad014c013c.0151021402290242 -+ 0000000000000000.0000000000000000.e61ad209f849f84c.47e70366e997292c - 98bd1212527a429b.e9ec06d11dc3f1da.374537c1f37c430c.3fc026b5daa0e78b - 64520bd98bd8d6b7 - --VMPSADBW_128_0x7(reg) -+VPMULHRSW_128(reg) - before - 960f1f06dbbdf00a.7b54c79eb70ab7a8.aaabe38c69004e04.0b9f8d61810e5b1d - 33435fa865dc7231.60bf58755f61360e.e6fa2ec5e3f1346c.b3a7c01505a05eb1 -@@ -41937,12 +41937,12 @@ VMPSADBW_128_0x7(reg) - 1a4050fb98f59da9.a441ffb0eb933d94.427bfb67ca1b8fa4.f3f0b26a5cf61311 - 43c969e268d23e35 - after -- 0000000000000000.0000000000000000.002c017301b7020e.00c4017e018001bf -+ 0000000000000000.0000000000000000.0125f55ff815f39b.f827d8a8fb8705e2 - 33435fa865dc7231.60bf58755f61360e.e6fa2ec5e3f1346c.b3a7c01505a05eb1 - 963ac62bc5c098d7.25ca4281678b79f9.fa26e2ea2420e1bd.0d284eca9a3f07f4 - 1a4050fb98f59da9.a441ffb0eb933d94.427bfb67ca1b8fa4.f3f0b26a5cf61311 - 43c969e268d23e35 --VMPSADBW_128_0x7(mem) -+VPMULHRSW_128(mem) - before - d780ed1ed9dd438c.1da1f9847907be53.bbf00ded06853d0b.1a4475a6716e7bcd - 8de1bc0bcc25df41.f9a8be3305833780.44a3e724d56d378c.decf4c14b4a3e0e3 -@@ -41952,11 +41952,11 @@ VMPSADBW_128_0x7(mem) - after - d780ed1ed9dd438c.1da1f9847907be53.bbf00ded06853d0b.1a4475a6716e7bcd - 8de1bc0bcc25df41.f9a8be3305833780.44a3e724d56d378c.decf4c14b4a3e0e3 -- 0000000000000000.0000000000000000.0050024001c80128.019501d701a4015c -+ 0000000000000000.0000000000000000.db81fd4cfdd51a7d.f93045edbd37e1e8 - cad128a4a69bcc77.b0dc88af8ce72016.2043f030fc510356.9a56032e7fe90887 - 4aebdab24011436e - --VMPSADBW_128_0x7(reg) -+VPMULHRSW_128(reg) - before - 5671fe140d4ce7f2.0bf7bd29c5e0944f.439f8754bfe708d6.2aca17dd8d654ff8 - 1a346cc2822631c0.dcf88d0ed691e337.1f3a90cf0d8038ca.1784fa35419e8353 -@@ -41964,12 +41964,12 @@ VMPSADBW_128_0x7(reg) - 3aa012afd6e9a7e9.a1b6cba83b6905e2.2624b4f467af5efc.0bc3e59285b596e2 - c9e1e46f4baaec6e - after -- 0000000000000000.0000000000000000.017c00da018c01b5.017f0129019501ae -+ 0000000000000000.0000000000000000.e94e520e01d2f6f5.f505ff0b1b31a5d5 - 1a346cc2822631c0.dcf88d0ed691e337.1f3a90cf0d8038ca.1784fa35419e8353 - f2801e273c2c5d84.1a9e133ff4bb7559.a2f8a18b113feb9d.c43d1522350b5c92 - 3aa012afd6e9a7e9.a1b6cba83b6905e2.2624b4f467af5efc.0bc3e59285b596e2 - c9e1e46f4baaec6e --VMPSADBW_128_0x7(mem) -+VPMULHRSW_128(mem) - before - da6290a7a6f51b63.4de144c6edea4a9c.4e0c3135c8a851fd.080cc876ac5ccd92 - 1a136425afa3dfed.898faed81cba8348.fb6cc1d2b78313d7.a5fad67d7cd3740c -@@ -41979,11 +41979,11 @@ VMPSADBW_128_0x7(mem) - after - da6290a7a6f51b63.4de144c6edea4a9c.4e0c3135c8a851fd.080cc876ac5ccd92 - 1a136425afa3dfed.898faed81cba8348.fb6cc1d2b78313d7.a5fad67d7cd3740c -- 0000000000000000.0000000000000000.01f6020d01a301a0.0152023f028c0232 -+ 0000000000000000.0000000000000000.fd35e8191f580cb5.fa571203ae6fd248 - 983575a24155146e.e9621e9d34f7a63e.c87951ed283eea76.7b1bd4ca2a4c585b - 6de6bce941670e88 - --VMOVDDUP_YMMorMEM256_to_YMM(reg) -+VBROADCASTF128(reg) - before - 89e78f3c537beb48.8d3eaa7b0171febd.c41f1c29557d08df.a0be4842e3367994 - 2c6c4a31fa152d48.21a6f749e1206d51.3878445ffe02f02a.e93d595870fa6d20 -@@ -41991,12 +41991,12 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg) - 722d64ad7e07cab7.96c7c9776f65c8f7.5732fe7e5a3b416c.3e19bb746d177b34 - 020e035116890c14 - after -- 21a6f749e1206d51.21a6f749e1206d51.e93d595870fa6d20.e93d595870fa6d20 -+ 89e78f3c537beb48.8d3eaa7b0171febd.c41f1c29557d08df.a0be4842e3367994 - 2c6c4a31fa152d48.21a6f749e1206d51.3878445ffe02f02a.e93d595870fa6d20 - b0bfe732d5bf0e34.303bd8f9fc6e1c56.a0bb90adcb1399ca.7fc2011ae9968547 - 722d64ad7e07cab7.96c7c9776f65c8f7.5732fe7e5a3b416c.3e19bb746d177b34 - 020e035116890c14 --VMOVDDUP_YMMorMEM256_to_YMM(mem) -+VBROADCASTF128(mem) - before - a76c559f00f6f413.ce02bc0d91799f7e.2f1747b055132d61.bb2a893e440622bb - 09012d4a476cee5c.208aebbeaba0c734.d6f7cd8eca8307bf.26ef2d5827017864 -@@ -42007,10 +42007,10 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem) - a76c559f00f6f413.ce02bc0d91799f7e.2f1747b055132d61.bb2a893e440622bb - 09012d4a476cee5c.208aebbeaba0c734.d6f7cd8eca8307bf.26ef2d5827017864 - 0497083c09f7b71b.c410ee2c67087e86.6933d7ffebc2113e.f6cce63a9fb78113 -- ce02bc0d91799f7e.ce02bc0d91799f7e.bb2a893e440622bb.bb2a893e440622bb -+ 2f1747b055132d61.bb2a893e440622bb.2f1747b055132d61.bb2a893e440622bb - 31028904bb859731 - --VMOVDDUP_YMMorMEM256_to_YMM(reg) -+VBROADCASTF128(reg) - before - 54f26ac398b51cf9.34f9b4a86778a5af.724a5cef37cc8dad.c0ee67469fdaa84e - 4b2b50f979d04476.225c7dfb3d8843da.3495c01c82405cda.3c05e6f56bccac36 -@@ -42018,12 +42018,12 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg) - 26a81c7bb9f96741.f4856374c17f75d1.5904ce2aed08b5c2.20a3bc0570b7d3a6 - 41c20c3fe2c76d84 - after -- 225c7dfb3d8843da.225c7dfb3d8843da.3c05e6f56bccac36.3c05e6f56bccac36 -+ 54f26ac398b51cf9.34f9b4a86778a5af.724a5cef37cc8dad.c0ee67469fdaa84e - 4b2b50f979d04476.225c7dfb3d8843da.3495c01c82405cda.3c05e6f56bccac36 - 73f93713fb634954.19f23945fcdb9f2c.b70fe8b7e026ab52.12a8d9e652bcd1f0 - 26a81c7bb9f96741.f4856374c17f75d1.5904ce2aed08b5c2.20a3bc0570b7d3a6 - 41c20c3fe2c76d84 --VMOVDDUP_YMMorMEM256_to_YMM(mem) -+VBROADCASTF128(mem) - before - 50d1437ec3fa5db7.c184fa9f501edce6.91e37773a78083f4.75c070e34475b7d6 - 2b9bdfaf305c5d6b.a1d8cdea5b5fe2f2.cbd6f12ecae883c2.678ec94d81f6ed39 -@@ -42034,10 +42034,10 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem) - 50d1437ec3fa5db7.c184fa9f501edce6.91e37773a78083f4.75c070e34475b7d6 - 2b9bdfaf305c5d6b.a1d8cdea5b5fe2f2.cbd6f12ecae883c2.678ec94d81f6ed39 - adee5bbf44f729cb.20f191c77747b60f.7d2b4d9047c53267.8abbd5d341199397 -- c184fa9f501edce6.c184fa9f501edce6.75c070e34475b7d6.75c070e34475b7d6 -+ 91e37773a78083f4.75c070e34475b7d6.91e37773a78083f4.75c070e34475b7d6 - d863f7e8b9731df8 - --VMOVDDUP_YMMorMEM256_to_YMM(reg) -+VBROADCASTF128(reg) - before - b975054ea8c27a51.155ae428d30e1942.6ea3deec503db72e.bd2a9dffbd0d8ce4 - 3d15b6818ae23656.b30ce85a85a1b4b0.f5d25e0b45635c88.036d88e2ef8faf14 -@@ -42045,12 +42045,12 @@ VMOVDDUP_YMMorMEM256_to_YMM(reg) - 9a33f2ff95c6be13.1163de544d11dcce.8f5dfd7f4cc11b2c.2573509dca8c8d34 - b9cf264cac1fc07c - after -- b30ce85a85a1b4b0.b30ce85a85a1b4b0.036d88e2ef8faf14.036d88e2ef8faf14 -+ b975054ea8c27a51.155ae428d30e1942.6ea3deec503db72e.bd2a9dffbd0d8ce4 - 3d15b6818ae23656.b30ce85a85a1b4b0.f5d25e0b45635c88.036d88e2ef8faf14 - bf9107eefa5f8eb3.6976bd1a4f9e0b7b.8cf7bf6eba60bfa3.3141451deab570cb - 9a33f2ff95c6be13.1163de544d11dcce.8f5dfd7f4cc11b2c.2573509dca8c8d34 - b9cf264cac1fc07c --VMOVDDUP_YMMorMEM256_to_YMM(mem) -+VBROADCASTF128(mem) - before - cb214218ab7bc6cf.2c497521f6a30223.88a1c8f49a07e1d6.5a4f15ab9711aecf - 353520ebe4aa5a58.cf1d8bc1ba80958f.abfaf5e6528bd6be.491a025f36dcb137 -@@ -42061,10 +42061,10 @@ VMOVDDUP_YMMorMEM256_to_YMM(mem) - cb214218ab7bc6cf.2c497521f6a30223.88a1c8f49a07e1d6.5a4f15ab9711aecf - 353520ebe4aa5a58.cf1d8bc1ba80958f.abfaf5e6528bd6be.491a025f36dcb137 - d4d63db372bb3a44.e1fc304a7cebb402.543be31692aa79b3.b80ac005c5af6311 -- 2c497521f6a30223.2c497521f6a30223.5a4f15ab9711aecf.5a4f15ab9711aecf -+ 88a1c8f49a07e1d6.5a4f15ab9711aecf.88a1c8f49a07e1d6.5a4f15ab9711aecf - 8689a0dc259bc0c9 - --VMOVLPS_128_M64_XMM_XMM(reg) -+VPEXTRW_128_0x0(reg) - before - 9dafbae42ecce2ff.22f320cffeacc8f4.bd0a18c66c9985af.aca5efe118e6b473 - a42b948f9834a358.8806dffb35a5f00f.41d25392d1f4af41.12660653971bc596 -@@ -42076,8 +42076,8 @@ VMOVLPS_128_M64_XMM_XMM(reg) - a42b948f9834a358.8806dffb35a5f00f.41d25392d1f4af41.12660653971bc596 - f7472d49fd5f3d7d.93d7cccb31af523e.a2d40df7a50c558a.6f3eccb40d1b7275 - f2507e7efcdaed1d.1f32642b0fd5abaa.3d5d4261846eb337.9ffabfee96f1783d -- 7e675aef4faa931a --VMOVLPS_128_M64_XMM_XMM(mem) -+ 000000000000b473 -+VPEXTRW_128_0x0(mem) - before - e94f19a253517e37.f092859a2e30efe2.08e22108e923b782.6fb9ef3c09a504f4 - ba7e79f3bef2f6c1.4f593c0932ee7e78.2bb5814cdea531f0.92340ff5d03d856c -@@ -42085,13 +42085,13 @@ VMOVLPS_128_M64_XMM_XMM(mem) - 01e6091f3c537dca.9ca5b09119cf36ca.8aef18bd83776240.1eb698ac96c2063f - 3f56f984cdc67ef2 - after -- e94f19a253517e37.f092859a2e30efe2.08e22108e923b782.6fb9ef3c09a504f4 -+ e94f19a253517e37.f092859a2e30efe2.08e22108e923b782.6fb9ef3c09a5724c - ba7e79f3bef2f6c1.4f593c0932ee7e78.2bb5814cdea531f0.92340ff5d03d856c -- 0000000000000000.0000000000000000.2bb5814cdea531f0.6fb9ef3c09a504f4 -+ cec2f5ceae9ab7e3.6af1a238a19fd78c.627500e50868d620.031a9ef676c3724c - 01e6091f3c537dca.9ca5b09119cf36ca.8aef18bd83776240.1eb698ac96c2063f - 3f56f984cdc67ef2 - --VMOVLPS_128_M64_XMM_XMM(reg) -+VPEXTRW_128_0x0(reg) - before - c244bee9b75c1611.2fb531d3862c03a2.43c26382360ad7dd.7fef46c26cdf9079 - 04cde246ee0f0a47.34fce9d4a82e0696.ba94b87693ddf572.1d4107dfdeab1efa -@@ -42103,8 +42103,8 @@ VMOVLPS_128_M64_XMM_XMM(reg) - 04cde246ee0f0a47.34fce9d4a82e0696.ba94b87693ddf572.1d4107dfdeab1efa - 5f3d6109116c9541.ec88ae0fbd6742d3.5c67aad8cdd4cd35.40b1d600f6e7c5ed - 30e0379db9fdf4aa.3222fb71e1e37384.878735167f799bd1.c30a2f11cfa0447e -- 841a8ffe86e156da --VMOVLPS_128_M64_XMM_XMM(mem) -+ 0000000000009079 -+VPEXTRW_128_0x0(mem) - before - 5eab70b336b6b62d.d301606e8551632f.e4994ce431ac54d6.9540559b455a9af3 - 2d8a501cfc2c20a3.a4eed9e80ef11e7c.ddb81d56c9d0a2f5.e4de07d3bc020746 -@@ -42112,13 +42112,13 @@ VMOVLPS_128_M64_XMM_XMM(mem) - 1961fbbb382806a5.3f57a888cd4a661c.141d30e43e577448.b0f70e0d2bd91b31 - e70b5be65c1f3921 - after -- 5eab70b336b6b62d.d301606e8551632f.e4994ce431ac54d6.9540559b455a9af3 -+ 5eab70b336b6b62d.d301606e8551632f.e4994ce431ac54d6.9540559b455a1e77 - 2d8a501cfc2c20a3.a4eed9e80ef11e7c.ddb81d56c9d0a2f5.e4de07d3bc020746 -- 0000000000000000.0000000000000000.ddb81d56c9d0a2f5.9540559b455a9af3 -+ cd83aa25f34e5266.fef19d77f26b603c.f94aeab2c45b190c.ceac462a7ffe1e77 - 1961fbbb382806a5.3f57a888cd4a661c.141d30e43e577448.b0f70e0d2bd91b31 - e70b5be65c1f3921 - --VMOVLPS_128_M64_XMM_XMM(reg) -+VPEXTRW_128_0x0(reg) - before - cd342a23ac5db5f3.eff2bdc8e6c7f98a.c26cf6853a1a6cc7.09fb6ad854d270d4 - bfbe752eba1ecb52.2a006e3a1936e742.e37c84dcd668adea.b6b1147a21d8c9dd -@@ -42130,8 +42130,8 @@ VMOVLPS_128_M64_XMM_XMM(reg) - bfbe752eba1ecb52.2a006e3a1936e742.e37c84dcd668adea.b6b1147a21d8c9dd - 1af53a751feeb6eb.a65989fcee818bf8.fed34df73cbf6631.f60baab6c2733a8e - 382474627a5ab369.3ec78afa81b5a2d9.6fbc4d4408acd347.a5d4a97852b18115 -- 9eda8cadee9e589b --VMOVLPS_128_M64_XMM_XMM(mem) -+ 00000000000070d4 -+VPEXTRW_128_0x0(mem) - before - bfe7cf3fb1457b4f.7698206364edfe79.d017ee20eddde811.9185802ed7ba2fd8 - e2c8ee1cb8b2a85a.309d38e37b33d3c7.36152f5a4e0619cb.c278e2214575b892 -@@ -42139,13 +42139,13 @@ VMOVLPS_128_M64_XMM_XMM(mem) - a236b163ff0f0b2c.898aa1109f0a09cb.f24a3dba61872a77.bd0f25d26b233b2b - 404bfd685c2faf63 - after -- bfe7cf3fb1457b4f.7698206364edfe79.d017ee20eddde811.9185802ed7ba2fd8 -+ bfe7cf3fb1457b4f.7698206364edfe79.d017ee20eddde811.9185802ed7baa81f - e2c8ee1cb8b2a85a.309d38e37b33d3c7.36152f5a4e0619cb.c278e2214575b892 -- 0000000000000000.0000000000000000.36152f5a4e0619cb.9185802ed7ba2fd8 -+ e54a662f1ef199eb.c27fba4e5bb96dfe.4e8ccb94c13af033.5de27089ec6aa81f - a236b163ff0f0b2c.898aa1109f0a09cb.f24a3dba61872a77.bd0f25d26b233b2b - 404bfd685c2faf63 - --VMOVLPS_128_XMM_M64(reg) -+VPEXTRW_128_0x1(reg) - before - 40e1f4b75b173e73.f75b4da67817b94a.df0ae995e4b3e3d9.001901b84bf983c1 - 1b1f072b05692506.be84b5e3a5156170.214a8e4ac53e37d5.52c6947b9b9bb63d -@@ -42157,8 +42157,8 @@ VMOVLPS_128_XMM_M64(reg) - 1b1f072b05692506.be84b5e3a5156170.214a8e4ac53e37d5.52c6947b9b9bb63d - 2b4f3131f5b09fc9.d57c6606a116bdcb.ab988d99de39406b.c61d71ed6b798018 - cebe6e33c879ea68.1610dafb88258986.d93ee1f0cc303b46.36ea14fcda9f9d7e -- 7ff9f992011ac99a --VMOVLPS_128_XMM_M64(mem) -+ 0000000000004bf9 -+VPEXTRW_128_0x1(mem) - before - 7e159c9dfef5bf99.5eb8ba9f194f408e.5e0d8fae774f83ce.078986b92bae6313 - 0d0c7a08ed3d3ca6.398911e084bedde7.8a3d000c8a9f65cf.91c57862963ff67d -@@ -42166,13 +42166,13 @@ VMOVLPS_128_XMM_M64(mem) - 4eb6d3ae0f41ba9d.3cdfd2901b99e0e6.f968067589e1d4aa.283f350001cb48db - ee16f7ce39de7f26 - after -- 7e159c9dfef5bf99.5eb8ba9f194f408e.5e0d8fae774f83ce.d33eb456a96f2e31 -+ 7e159c9dfef5bf99.5eb8ba9f194f408e.5e0d8fae774f83ce.078986b92baea96f - 0d0c7a08ed3d3ca6.398911e084bedde7.8a3d000c8a9f65cf.91c57862963ff67d - 09a80dbfe9fdfcee.b97c7061a753ff21.746ca9ffdc21ecb4.d33eb456a96f2e31 - 4eb6d3ae0f41ba9d.3cdfd2901b99e0e6.f968067589e1d4aa.283f350001cb48db - ee16f7ce39de7f26 - --VMOVLPS_128_XMM_M64(reg) -+VPEXTRW_128_0x1(reg) - before - 800df62bee3510bf.b90248c17a1534de.1cfc33d87e1cbde2.f5fc9458aeecd8dd - 3a712e84bb5a3751.2458e6e4468624de.b6208fa56c69d1c2.44f3ce96664db578 -@@ -42184,8 +42184,8 @@ VMOVLPS_128_XMM_M64(reg) - 3a712e84bb5a3751.2458e6e4468624de.b6208fa56c69d1c2.44f3ce96664db578 - 788e9c433ddc3089.6c832b04909f46c8.6698e364800b5a32.c31a301ace1127a7 - 95b03bd50f443613.6d51920b746d57c9.89ad297f568e92dd.4c3d36d00143e997 -- bc285da41cefb874 --VMOVLPS_128_XMM_M64(mem) -+ 000000000000aeec -+VPEXTRW_128_0x1(mem) - before - efa720823a22506a.ef2207a7ce20879a.038c97e70dfb140d.79ae5f638b7fb570 - c185fa5677e76da4.e132fc2315fb5cca.0a01b682775536bf.93e6807dba690196 -@@ -42193,13 +42193,13 @@ VMOVLPS_128_XMM_M64(mem) - b292e990c1582495.fc5752cdace089d9.dbc934aa309fa01f.b52974ff7959ff4e - 75cd3f403f772a37 - after -- efa720823a22506a.ef2207a7ce20879a.038c97e70dfb140d.33a0893780d8b0fc -+ efa720823a22506a.ef2207a7ce20879a.038c97e70dfb140d.79ae5f638b7f80d8 - c185fa5677e76da4.e132fc2315fb5cca.0a01b682775536bf.93e6807dba690196 - 0e906a0cf04aca4e.c62a16b78062f451.5e7c6ccacf887c0c.33a0893780d8b0fc - b292e990c1582495.fc5752cdace089d9.dbc934aa309fa01f.b52974ff7959ff4e - 75cd3f403f772a37 - --VMOVLPS_128_XMM_M64(reg) -+VPEXTRW_128_0x1(reg) - before - cfd8e56571bf6c64.8958f5cf051b37a5.dd05abd33501580e.5db48a0eb7a65f25 - 1f9662dca8bb0280.6fae08b3d9a2bfa9.c7801d34b6529d9d.c008eae27faa754a -@@ -42211,8 +42211,8 @@ VMOVLPS_128_XMM_M64(reg) - 1f9662dca8bb0280.6fae08b3d9a2bfa9.c7801d34b6529d9d.c008eae27faa754a - c153b31083f92838.3f60a02a58f677ce.1414a55ccb5e9332.e093d012a5b69db9 - 115ad36e9b051938.d739391f9e251c40.220c3db711b17778.991fb98a44d6949f -- c779203679171627 --VMOVLPS_128_XMM_M64(mem) -+ 000000000000b7a6 -+VPEXTRW_128_0x1(mem) - before - 456d81035f84de7e.6bf8be608e6a132b.12074d7ec83b6a2a.4bb6e3b124d7851c - f1c758db1229aad0.2b7a7053f8b450be.cc945a32f1421cb9.ed5c92b79f5df9ca -@@ -42220,13 +42220,13 @@ VMOVLPS_128_XMM_M64(mem) - 3fdc5960524d3813.4d541aed9f288572.2c1e4c4fb2599f74.07cffc923eb701f1 - 3934ae419aa30ec4 - after -- 456d81035f84de7e.6bf8be608e6a132b.12074d7ec83b6a2a.624b46331ecf0e2d -+ 456d81035f84de7e.6bf8be608e6a132b.12074d7ec83b6a2a.4bb6e3b124d71ecf - f1c758db1229aad0.2b7a7053f8b450be.cc945a32f1421cb9.ed5c92b79f5df9ca - a65222acaf133448.ad2ae5b3746f0c9c.e1addb293648ef18.624b46331ecf0e2d - 3fdc5960524d3813.4d541aed9f288572.2c1e4c4fb2599f74.07cffc923eb701f1 - 3934ae419aa30ec4 - --VRCPSS_128(reg) -+VPEXTRW_128_0x2(reg) - before - 52c55aabcf1f704f.9a2f7be516e3745c.6746096c146af5ec.8bb3298e8280e7f9 - afd0fb3b78b56541.9218042618e2a250.564bb09b6fc299b5.d938efd3c1c985d2 -@@ -42234,12 +42234,12 @@ VRCPSS_128(reg) - a67f0d829865f204.c8dc378c4348c6e7.28bc14be49e16be6.b1412320fef2ad32 - f35d89ff34eab111 - after -- 0000000000000000.0000000000000000.564bb09b6fc299b5.d938efd3f2aa7800 -+ 52c55aabcf1f704f.9a2f7be516e3745c.6746096c146af5ec.8bb3298e8280e7f9 - afd0fb3b78b56541.9218042618e2a250.564bb09b6fc299b5.d938efd3c1c985d2 - ac9f8e5f32f32744.02636e0f72557f1a.78ae0be84dbbac79.f178190a8c40332b - a67f0d829865f204.c8dc378c4348c6e7.28bc14be49e16be6.b1412320fef2ad32 -- f35d89ff34eab111 --VRCPSS_128(mem) -+ 000000000000298e -+VPEXTRW_128_0x2(mem) - before - 9599c7954934f9f4.f7bc76104695032f.be4ed989a5c835e3.c1c1c98900c012a6 - 71c15acd5add4208.fca2c475da12976f.c287d2f2b4e08639.a10925b50ee5dd65 -@@ -42247,13 +42247,13 @@ VRCPSS_128(mem) - 4b046cd3dd7ac672.929800751d1c32df.6079b7b94b09c0a6.a292c2e09c2fce93 - 7c6afcb8556c6b59 - after -- 9599c7954934f9f4.f7bc76104695032f.be4ed989a5c835e3.c1c1c98900c012a6 -+ 9599c7954934f9f4.f7bc76104695032f.be4ed989a5c835e3.c1c1c98900c024ae - 71c15acd5add4208.fca2c475da12976f.c287d2f2b4e08639.a10925b50ee5dd65 -- 0000000000000000.0000000000000000.c287d2f2b4e08639.a10925b57e2a9800 -+ 65a1bd9382f04779.117df31ded65e770.ae519eb38d9c7516.23e024ae0edc07d0 - 4b046cd3dd7ac672.929800751d1c32df.6079b7b94b09c0a6.a292c2e09c2fce93 - 7c6afcb8556c6b59 - --VRCPSS_128(reg) -+VPEXTRW_128_0x2(reg) - before - 0bb5cca0d41e1dcf.01b8e37988857920.db40e5e706c2b268.b2cb9bee0b322114 - adbf3006b6d21ea1.61879f719f201caf.48c2a0e043e3a4b6.8213c540e824558c -@@ -42261,12 +42261,12 @@ VRCPSS_128(reg) - 9640a2f8106d0006.93a9d3077e2f261d.fe7f85192ac8cd53.07b4dbe76b90254e - 76a6c015492239ee - after -- 0000000000000000.0000000000000000.48c2a0e043e3a4b6.8213c540ffea173c -+ 0bb5cca0d41e1dcf.01b8e37988857920.db40e5e706c2b268.b2cb9bee0b322114 - adbf3006b6d21ea1.61879f719f201caf.48c2a0e043e3a4b6.8213c540e824558c - bcd423549613ab7a.483e1ba73d546d4a.35682ccd700c4475.aa1db199ffea173c - 9640a2f8106d0006.93a9d3077e2f261d.fe7f85192ac8cd53.07b4dbe76b90254e -- 76a6c015492239ee --VRCPSS_128(mem) -+ 0000000000009bee -+VPEXTRW_128_0x2(mem) - before - d1bddb0fb4ad0f49.954fa75dc16d58f3.1c94437e7fbc0455.ff52a82f0ca47cfa - f5c6a8c1c83c658b.164c30ef459ef1eb.c0cbe7f65b08c31e.942f907db32a8d16 -@@ -42274,13 +42274,13 @@ VRCPSS_128(mem) - 08de49fd5e987c72.0f44bc4a34c4d0ad.c94bbd9e160ad212.e9339f6ebe6ac460 - 62f2bee95b3b62e6 - after -- d1bddb0fb4ad0f49.954fa75dc16d58f3.1c94437e7fbc0455.ff52a82f0ca47cfa -+ d1bddb0fb4ad0f49.954fa75dc16d58f3.1c94437e7fbc0455.ff52a82f0ca4396e - f5c6a8c1c83c658b.164c30ef459ef1eb.c0cbe7f65b08c31e.942f907db32a8d16 -- 0000000000000000.0000000000000000.c0cbe7f65b08c31e.942f907d72474000 -+ be8da317a2dcf5df.7685381a378c059a.5b193c5d2f1d1ea4.1960396ebae93b55 - 08de49fd5e987c72.0f44bc4a34c4d0ad.c94bbd9e160ad212.e9339f6ebe6ac460 - 62f2bee95b3b62e6 - --VRCPSS_128(reg) -+VPEXTRW_128_0x2(reg) - before - dfea934c2be75191.b0841460177cb66f.3ed6b6ebd7d18fd0.e72ee6a42dd89b94 - bc661901ccfbcf0d.904d822ae9955e03.5f872469bc3f7eae.8f8c335d8f953458 -@@ -42288,12 +42288,12 @@ VRCPSS_128(reg) - 051f2815f088632b.6b7335a74b93eb9f.e87549adbe70dc4d.f0eb2a95a60ac950 - 6185ccec93da3ddd - after -- 0000000000000000.0000000000000000.5f872469bc3f7eae.8f8c335d25a05800 -+ dfea934c2be75191.b0841460177cb66f.3ed6b6ebd7d18fd0.e72ee6a42dd89b94 - bc661901ccfbcf0d.904d822ae9955e03.5f872469bc3f7eae.8f8c335d8f953458 - 54b44c75da011607.85030e49f1ee315a.cfa20131809bd9f4.9e3221b4594c5a87 - 051f2815f088632b.6b7335a74b93eb9f.e87549adbe70dc4d.f0eb2a95a60ac950 -- 6185ccec93da3ddd --VRCPSS_128(mem) -+ 000000000000e6a4 -+VPEXTRW_128_0x2(mem) - before - cdca82a63bc8715a.2af2aa4cab19f124.1e697132119047ff.074af84b134ac266 - 1087c9adbae122f5.1e7acc85a642fd9f.7ab140d562f203a5.886f0b751bb6c8eb -@@ -42301,13 +42301,13 @@ VRCPSS_128(mem) - 8b99f656b0c1eb2f.e7d9e5b2cd8a7fca.9d6684130f138576.20d44a22b17223e7 - efac6e7c77d9f0b6 - after -- cdca82a63bc8715a.2af2aa4cab19f124.1e697132119047ff.074af84b134ac266 -+ cdca82a63bc8715a.2af2aa4cab19f124.1e697132119047ff.074af84b134a7d99 - 1087c9adbae122f5.1e7acc85a642fd9f.7ab140d562f203a5.886f0b751bb6c8eb -- 0000000000000000.0000000000000000.7ab140d562f203a5.886f0b756ba19800 -+ 06891bee2d300cd7.3f038c2e7d8ec348.5b171d7c58c5d8be.c72e7d99703f2987 - 8b99f656b0c1eb2f.e7d9e5b2cd8a7fca.9d6684130f138576.20d44a22b17223e7 - efac6e7c77d9f0b6 - --VRCPPS_128(reg) -+VPEXTRW_128_0x3(reg) - before - 9004e6136102cda1.7a86d5d05ea17a27.7448d47d32c16dd1.1b6cf286a4eac5f8 - 5f26ac530879f554.b11b354753db76eb.409b53fb47bfc80b.b3f3e1c132565371 -@@ -42316,11 +42316,11 @@ VRCPPS_128(reg) - a98c955bcd8a2d5a - after - 9004e6136102cda1.7a86d5d05ea17a27.7448d47d32c16dd1.1b6cf286a4eac5f8 -- 0000000000000000.0000000000000000.d5cd9000d6e0c800.3e233000a9911000 -+ 5f26ac530879f554.b11b354753db76eb.409b53fb47bfc80b.b3f3e1c132565371 - b860bea80ac9a57a.0b2390a9ac7b9ba8.a91f6098a811cd22.40c8cfb0d561eb0c - f7fc177e037e19c0.646c64e1848ea48a.0921f6c0f242b7c2.9eb73740ab194bf6 -- a98c955bcd8a2d5a --VRCPPS_128(mem) -+ 0000000000001b6c -+VPEXTRW_128_0x3(mem) - before - 3c1266ef59be4e66.7847b4428e248dd1.98c02cdbf81f4ebc.bdeb11e0c0dec398 - 351725e66bc36a43.978d8f5e48483c5a.82ec6483243a556b.22caae62af722d50 -@@ -42328,13 +42328,13 @@ VRCPPS_128(mem) - c5c95db28e6e8127.1e39f453b6383e83.edfb158e114069ef.6af65a405eaf0b14 - 07dc62745671f678 - after -- 3c1266ef59be4e66.7847b4428e248dd1.98c02cdbf81f4ebc.bdeb11e0c0dec398 -- 0000000000000000.0000000000000000.e62a880086cdb800.c10b6000be131800 -+ 3c1266ef59be4e66.7847b4428e248dd1.98c02cdbf81f4ebc.bdeb11e0c0de9209 -+ 351725e66bc36a43.978d8f5e48483c5a.82ec6483243a556b.22caae62af722d50 - 6f654e2e1ea53c20.af19a640cc756306.00bc88c522ec74c3.9209c7b45a893195 - c5c95db28e6e8127.1e39f453b6383e83.edfb158e114069ef.6af65a405eaf0b14 - 07dc62745671f678 - --VRCPPS_128(reg) -+VPEXTRW_128_0x3(reg) - before - c306dcbbdf5a2f6e.150fce5ed82cf584.3f377502a31c097a.247786c80a42ee1c - fbc1c28194f6f1a2.39031e1e18eb5464.6e6126bb2eadff9a.83fa57612bffbf75 -@@ -42343,11 +42343,11 @@ VRCPPS_128(reg) - 20abe396940b5944 - after - c306dcbbdf5a2f6e.150fce5ed82cf584.3f377502a31c097a.247786c80a42ee1c -- 0000000000000000.0000000000000000.78fdf8008a847800.9a9c0000ee7ae800 -+ fbc1c28194f6f1a2.39031e1e18eb5464.6e6126bb2eadff9a.83fa57612bffbf75 - 0b59123212d27abf.0f70c8de68b659f3.060101e9f4775d8d.e452044390829a27 - 4f1ac73af4790472.7124488ae799c15c.656304f891075fff.2549095c54d7395d -- 20abe396940b5944 --VRCPPS_128(mem) -+ 0000000000002477 -+VPEXTRW_128_0x3(mem) - before - b3460ddf6b29b508.234fdd05d777cc66.3de91a0eafa048cc.e5d52a549fe8409d - b8e50322f53e0bd4.e34651ff56590d48.4d8cbb57dcd8a96e.e4a2706abda73d13 -@@ -42355,13 +42355,13 @@ VRCPPS_128(mem) - 8c5e4446957a8f37.97a53f3199f7ed85.ad9c56e4d709ecfb.cb7c486f93ec7b35 - 6c21d338838b333a - after -- b3460ddf6b29b508.234fdd05d777cc66.3de91a0eafa048cc.e5d52a549fe8409d -- 0000000000000000.0000000000000000.410c9800cf4c7000.9919b800df0d1000 -+ b3460ddf6b29b508.234fdd05d777cc66.3de91a0eafa048cc.e5d52a549fe8bd15 -+ b8e50322f53e0bd4.e34651ff56590d48.4d8cbb57dcd8a96e.e4a2706abda73d13 - 0d53414b4f5515d5.eb491d950daa04c4.7fd9a54f8b4ca170.bd15d0a485cf920c - 8c5e4446957a8f37.97a53f3199f7ed85.ad9c56e4d709ecfb.cb7c486f93ec7b35 - 6c21d338838b333a - --VRCPPS_128(reg) -+VPEXTRW_128_0x3(reg) - before - fa516d6af337f7c6.12d08700e2b93725.43a6b24195ca0438.b5a14901dd19463d - d25712707c7c0385.7c768663521fc7cb.4b9873309eb28488.71b3fb91b88b6a62 -@@ -42370,11 +42370,11 @@ VRCPPS_128(reg) - 7c365c346298efd8 - after - fa516d6af337f7c6.12d08700e2b93725.43a6b24195ca0438.b5a14901dd19463d -- 0000000000000000.0000000000000000.732448002eb17800.c04ba800fa8d3000 -+ d25712707c7c0385.7c768663521fc7cb.4b9873309eb28488.71b3fb91b88b6a62 - 5181bfb8bce79225.a41bbd5c02b7fc57.0bc77c695038aa22.bea0e68284681596 - d11a6fad4f03e14f.678da8d80d8e92f3.df7fcb5a46eab2b2.783288bf5ebe0304 -- 7c365c346298efd8 --VRCPPS_128(mem) -+ 000000000000b5a1 -+VPEXTRW_128_0x3(mem) - before - a478decdab039740.af6d1ebbd05c2cb2.a197c4c190af44cb.230b5b6e1c53d8e3 - cdc48b775609b465.48c7c84edc7faff8.2e048c05a626cf0c.33b828116fff5762 -@@ -42382,13 +42382,13 @@ VRCPPS_128(mem) - 92a952a93f1c449d.16c0ffb402504bdf.b23a104bfd475f78.26a56ab5fa5252f8 - c27dd78d6a114768 - after -- a478decdab039740.af6d1ebbd05c2cb2.a197c4c190af44cb.230b5b6e1c53d8e3 -- 0000000000000000.0000000000000000.dd57e000ee3af000.5beb2800629ab000 -+ a478decdab039740.af6d1ebbd05c2cb2.a197c4c190af44cb.230b5b6e1c536ad2 -+ cdc48b775609b465.48c7c84edc7faff8.2e048c05a626cf0c.33b828116fff5762 - d3e5de1c7eb90576.f6746ad20df7a5ce.eba17c8f6cffefe2.6ad22eafda7b6cda - 92a952a93f1c449d.16c0ffb402504bdf.b23a104bfd475f78.26a56ab5fa5252f8 - c27dd78d6a114768 - --VRCPPS_256(reg) -+VPEXTRW_128_0x4(reg) - before - 9aa671a4c74385d5.e6da660bb6402f06.04f7825e5517ddd8.609bc5257609dcfb - 096b3467ac7449eb.ab45932cfe307fdf.1d64f23da2d79664.d1901509f2522296 -@@ -42397,11 +42397,11 @@ VRCPPS_256(reg) - 4edd892a93ca00b4 - after - 9aa671a4c74385d5.e6da660bb6402f06.04f7825e5517ddd8.609bc5257609dcfb -- 11d4a800c9b85000.c133b8004a031800.c399a000f8d11800.9d0f7000f0bc7000 -+ 096b3467ac7449eb.ab45932cfe307fdf.1d64f23da2d79664.d1901509f2522296 - 6d1a1d40b531ce58.bdb657fa34f9f351.bb5548be861cb430.e1e47ee38e2ded76 - 20fd269d7f0552c6.f8f92c6073a6458b.3b14824c9c7371e8.6c657b9f65a6f8c7 -- 4edd892a93ca00b4 --VRCPPS_256(mem) -+ 000000000000ddd8 -+VPEXTRW_128_0x4(mem) - before - 6319226e35a4c16a.80614de9a67c0fe1.38da904ad84332b7.f9ee9a5281670937 - 87e5c4596740f714.e7928d90c5224156.5924fea47edd7601.512f8e3ed084baca -@@ -42409,13 +42409,13 @@ VRCPPS_256(mem) - 6b5c10d0e8f0b0f6.3e8a499f5c2ef8fd.ae27ea58ff35f1a2.3f15f8751e6b516a - 8d536698554db1d0 - after -- 6319226e35a4c16a.80614de9a67c0fe1.38da904ad84332b7.f9ee9a5281670937 -- 1bd5f0004946d800.ff800000d8820000.4615e800a6a7d800.85095800fd8dd800 -+ 6319226e35a4c16a.80614de9a67c0fe1.38da904ad84332b7.f9ee9a528167cc97 -+ 87e5c4596740f714.e7928d90c5224156.5924fea47edd7601.512f8e3ed084baca - 960dead544ab5ddf.b3dbe3fe788426d1.37a5f35a827fcc97.9f235a7b2657be4c - 6b5c10d0e8f0b0f6.3e8a499f5c2ef8fd.ae27ea58ff35f1a2.3f15f8751e6b516a - 8d536698554db1d0 - --VRCPPS_256(reg) -+VPEXTRW_128_0x4(reg) - before - e5279f5066881829.e4a0b335701bac87.e6e9bddf0daaf487.9a775e8a120ca151 - a3de9f0aeea8c322.dca34ef0f8390cbb.05453a2a2586551b.d661ceddd60f97ce -@@ -42424,11 +42424,11 @@ VRCPPS_256(reg) - 0bb2d0cc639a7bd4 - after - e5279f5066881829.e4a0b335701bac87.e6e9bddf0daaf487.9a775e8a120ca151 -- 5b26d800f6b04000.4fb7c000e4997800.850b00003b9f9000.3e38600016a1c000 -+ a3de9f0aeea8c322.dca34ef0f8390cbb.05453a2a2586551b.d661ceddd60f97ce - 23c462308839ee66.2f325ded9a558dc1.f9ebbced434d5964.40b1b33b684a9145 - c025e530d0c8d4a2.b8195c18757bebc3.1c244092018c3a0e.b3328a92e3ca49e3 -- 0bb2d0cc639a7bd4 --VRCPPS_256(mem) -+ 000000000000f487 -+VPEXTRW_128_0x4(mem) - before - 23fb00d705c6e543.d84d237463e0b281.5524c75da2b8e1ed.cb3fc187fbce34c6 - d9da969ee55b415d.c687186add0ec4b1.e11f1ba840172d6c.63873a36ce9f8538 -@@ -42436,13 +42436,13 @@ VRCPPS_256(mem) - 8b8ae510cceec141.93651719f3d973ae.35146a01396cb118.b9cd0a776d2017f9 - 306357e071e8d19f - after -- 23fb00d705c6e543.d84d237463e0b281.5524c75da2b8e1ed.cb3fc187fbce34c6 -- 5b0288007924c000.a69fb8001b11d000.29c6d800dc313800.b3aae000831ee800 -+ 23fb00d705c6e543.d84d237463e0b281.5524c75da2b8e1ed.cb3fc187fbce896c -+ d9da969ee55b415d.c687186add0ec4b1.e11f1ba840172d6c.63873a36ce9f8538 - 071b0f0d1e644c4e.e621c07dd9dd46db.37d5d2e668a4896c.3e47aa0d158c6710 - 8b8ae510cceec141.93651719f3d973ae.35146a01396cb118.b9cd0a776d2017f9 - 306357e071e8d19f - --VRCPPS_256(reg) -+VPEXTRW_128_0x4(reg) - before - ff568eb4bd6ed0b0.40f296930c035e63.2ba01aaac88e88d4.b5a65fe7cc7a639d - 82f2aa5fee4051d5.01219d82f9b1dddf.091ec49cf489c1f9.95582b823fdb5927 -@@ -42451,11 +42451,11 @@ VRCPPS_256(reg) - 05257ad2ee623097 - after - ff568eb4bd6ed0b0.40f296930c035e63.2ba01aaac88e88d4.b5a65fe7cc7a639d -- 687ac800de0bb000.d2115800cef67000.f6c0a8006d999800.cf051000d055b000 -+ 82f2aa5fee4051d5.01219d82f9b1dddf.091ec49cf489c1f9.95582b823fdb5927 - 1682a74da0ea90bd.ace176c9b004fae2.882a115b115559ca.aff64cc0ae9950e1 - 155482ea6ef6c812.1bff9e554d077397.0612fd53be7f8df3.e14c3d8c34c203f7 -- 05257ad2ee623097 --VRCPPS_256(mem) -+ 00000000000088d4 -+VPEXTRW_128_0x4(mem) - before - f94f7f7ef68491ea.dcb235a3f5f33680.2b479010eac6022b.dd2185f09492991f - 9794c97c6b34e21f.c7e9bee2cf6a16b5.b985c8e8a64d64ca.6ba2a49f321ab8fb -@@ -42463,13 +42463,13 @@ VRCPPS_256(mem) - 45a2181f066f48da.791240a6f3fb1b1e.ba12fa9be4e590d7.182d97df30bb2372 - efcf6349c8ebe664 - after -- f94f7f7ef68491ea.dcb235a3f5f33680.2b479010eac6022b.dd2185f09492991f -- 859df00088772000.a237e0008906b800.53a4300094257800.a1cad800ea5f8800 -+ f94f7f7ef68491ea.dcb235a3f5f33680.2b479010eac6022b.dd2185f09492549f -+ 9794c97c6b34e21f.c7e9bee2cf6a16b5.b985c8e8a64d64ca.6ba2a49f321ab8fb - bcc1d2b8677ee160.324518159be9a45a.9f85c2c89aa9549f.0ae255ca31a42833 - 45a2181f066f48da.791240a6f3fb1b1e.ba12fa9be4e590d7.182d97df30bb2372 - efcf6349c8ebe664 - --VPSADBW_128(reg) -+VPEXTRW_128_0x5(reg) - before - ed13b77397c1acb7.0c03179b6512d4b8.f79c3003732cb9ab.e7faed4fa00ed29d - 6c478ecb39c8b214.eeb049199f744127.0a2ee697b809b7ad.000716cfe92fd61e -@@ -42477,12 +42477,12 @@ VPSADBW_128(reg) - 61aab5b2639a6ea3.741c3bcd17a2ac66.5c9e9114fff5cac3.69c3fae394891800 - 720aad502ddbcdb9 - after -- 0000000000000000.0000000000000000.00000000000001d1.000000000000039c -+ ed13b77397c1acb7.0c03179b6512d4b8.f79c3003732cb9ab.e7faed4fa00ed29d - 6c478ecb39c8b214.eeb049199f744127.0a2ee697b809b7ad.000716cfe92fd61e - c9b5e4bc498c342a.c7742c86d1a04a52.0d165dce5d1d54d1.e206f107dc545a86 - 61aab5b2639a6ea3.741c3bcd17a2ac66.5c9e9114fff5cac3.69c3fae394891800 -- 720aad502ddbcdb9 --VPSADBW_128(mem) -+ 000000000000732c -+VPEXTRW_128_0x5(mem) - before - d7a68738c45535dd.8e72fd1a247d9b2c.cf75f2da8b86238f.53137fd5391c562f - 7565038875040b97.ad59b95e28c1f870.b549cd984c596af8.4dc1217da81e34bf -@@ -42490,13 +42490,13 @@ VPSADBW_128(mem) - cc77d112922ef47e.31b37a2e669e31db.9294e0dc1efa5b3c.bff8763393e4d402 - ee18201947c00f0c - after -- d7a68738c45535dd.8e72fd1a247d9b2c.cf75f2da8b86238f.53137fd5391c562f -+ d7a68738c45535dd.8e72fd1a247d9b2c.cf75f2da8b86238f.53137fd5391c7327 - 7565038875040b97.ad59b95e28c1f870.b549cd984c596af8.4dc1217da81e34bf -- 0000000000000000.0000000000000000.00000000000001c9.000000000000028d -+ 28119d2d5bf30c13.1aabe4eb0af3c11c.026548f573273ece.a8f47579e7879f22 - cc77d112922ef47e.31b37a2e669e31db.9294e0dc1efa5b3c.bff8763393e4d402 - ee18201947c00f0c - --VPSADBW_128(reg) -+VPEXTRW_128_0x5(reg) - before - 90a17095a0a88ceb.3d631c2237c27e04.4fbf7891d94e855a.41a4103a69e07d6f - 03e060153927864c.57a1f94b65ba68d1.ce19d882fe90f945.eb5f54f96fe45f93 -@@ -42504,12 +42504,12 @@ VPSADBW_128(reg) - c8aa16ce9c1be443.f6425995ce0746ed.62eab3bad0f7300d.a00a094e1e78565c - 639172bbfe1fe359 - after -- 0000000000000000.0000000000000000.0000000000000241.0000000000000363 -+ 90a17095a0a88ceb.3d631c2237c27e04.4fbf7891d94e855a.41a4103a69e07d6f - 03e060153927864c.57a1f94b65ba68d1.ce19d882fe90f945.eb5f54f96fe45f93 - a11fee04aec93adb.f6fde47839226b10.0b0e986c72efc947.6c9329064d13bed3 - c8aa16ce9c1be443.f6425995ce0746ed.62eab3bad0f7300d.a00a094e1e78565c -- 639172bbfe1fe359 --VPSADBW_128(mem) -+ 000000000000d94e -+VPEXTRW_128_0x5(mem) - before - 91f3df3b0a1520f7.d2cfd2df9fa8bf30.333ed48e4174b395.2ff925dab5356b42 - 05feccb95d65ca62.1dd91fa352fc0850.88bbd24fad757034.ce87eb37bc34b693 -@@ -42517,13 +42517,13 @@ VPSADBW_128(mem) - 343b185e4b44544d.e2ca5ef4392bd4d3.ef6b44dae264c405.f24e5f59a2a66b38 - 2f2007f5b9324de4 - after -- 91f3df3b0a1520f7.d2cfd2df9fa8bf30.333ed48e4174b395.2ff925dab5356b42 -+ 91f3df3b0a1520f7.d2cfd2df9fa8bf30.333ed48e4174b395.2ff925dab5352f16 - 05feccb95d65ca62.1dd91fa352fc0850.88bbd24fad757034.ce87eb37bc34b693 -- 0000000000000000.0000000000000000.0000000000000224.000000000000031e -+ 9d7cb620141b9dc5.0313fa8651a4fb4d.d386cec42f1636f5.9bdfff3e82814dac - 343b185e4b44544d.e2ca5ef4392bd4d3.ef6b44dae264c405.f24e5f59a2a66b38 - 2f2007f5b9324de4 - --VPSADBW_128(reg) -+VPEXTRW_128_0x5(reg) - before - ada1f17e62ae2e5b.a6056d5e1debac25.144a4859a51dce8f.b836b07be26bd490 - ca1d1a6139a84c4a.cea7340ca61c617a.f6dfb2223207262d.09b28f954d3623c1 -@@ -42531,12 +42531,12 @@ VPSADBW_128(reg) - 4e351be1e4442a3f.b5a201234f4ed149.3b78fb8c1df0dfbd.b8f192e0cd486dc7 - cc4bb0ea1ca8e0f4 - after -- 0000000000000000.0000000000000000.00000000000001b9.000000000000026d -+ ada1f17e62ae2e5b.a6056d5e1debac25.144a4859a51dce8f.b836b07be26bd490 - ca1d1a6139a84c4a.cea7340ca61c617a.f6dfb2223207262d.09b28f954d3623c1 - e1e07f09dbabe15c.8aede65503e42e77.e5d59ab97b741858.c0ad5b123cd16dc5 - 4e351be1e4442a3f.b5a201234f4ed149.3b78fb8c1df0dfbd.b8f192e0cd486dc7 -- cc4bb0ea1ca8e0f4 --VPSADBW_128(mem) -+ 000000000000a51d -+VPEXTRW_128_0x5(mem) - before - da872f1c43fc8277.6c6aea57effd629c.2a94ff63a766041c.5513d106b308b807 - bd718d6261500f7e.99c9e9d69865c722.c78d5e022639831b.8ff31893da47dfe3 -@@ -42544,13 +42544,13 @@ VPSADBW_128(mem) - 717ed3daec2ad8c2.8c38639f376b0253.e5c82d090b3e5950.d4b2ea96496b0600 - 96296de4c9687e99 - after -- da872f1c43fc8277.6c6aea57effd629c.2a94ff63a766041c.5513d106b308b807 -+ da872f1c43fc8277.6c6aea57effd629c.2a94ff63a766041c.5513d106b308e8d2 - bd718d6261500f7e.99c9e9d69865c722.c78d5e022639831b.8ff31893da47dfe3 -- 0000000000000000.0000000000000000.00000000000002d4.00000000000003c9 -+ 50d444a890b14232.309f13ca7c05937b.665b9aeae8d20c73.4664cd9e2d3990fd - 717ed3daec2ad8c2.8c38639f376b0253.e5c82d090b3e5950.d4b2ea96496b0600 - 96296de4c9687e99 - --VPSIGNB_128(reg) -+VPEXTRW_128_0x6(reg) - before - e81552f549bc3473.fa39b3e592c78d57.0be0d8c163225257.1ea1954aa88727dd - 26c1933566f4643b.c9d261b39d951c20.08e26b9c9fb7bd33.efb14d98ddbc3147 -@@ -42558,12 +42558,12 @@ VPSIGNB_128(reg) - d68d1df3e63d2044.a4ce194c54f2bbf9.eb28df2eb1a8d621.c5aa9d107e13ed60 - 822b2e12214e1567 - after -- 0000000000000000.0000000000000000.f81e6b64614943cd.ef4fb368234431b9 -+ e81552f549bc3473.fa39b3e592c78d57.0be0d8c163225257.1ea1954aa88727dd - 26c1933566f4643b.c9d261b39d951c20.08e26b9c9fb7bd33.efb14d98ddbc3147 - ac7b2e10bc9b499d.b8155a312a9f4247.de8c199d84b58092.32c6d1e1c6e635b9 - d68d1df3e63d2044.a4ce194c54f2bbf9.eb28df2eb1a8d621.c5aa9d107e13ed60 -- 822b2e12214e1567 --VPSIGNB_128(mem) -+ 000000000000d8c1 -+VPEXTRW_128_0x6(mem) - before - 4613fed1cca36bfb.00445f49806724dd.6ac91aef38994361.8903b8bdbf1dfd8c - ee2f8b3a9a1fa948.86eced7d27a49313.e4d1da05f1a095ac.1669a0b44c9f2f7e -@@ -42571,13 +42571,13 @@ VPSIGNB_128(mem) - 5532cabb12bad0bb.163ee1340a899d09.673c833f54ff8a99.68068e8f52fba6a9 - e7d48c4a03ec6339 - after -- 4613fed1cca36bfb.00445f49806724dd.6ac91aef38994361.8903b8bdbf1dfd8c -+ 4613fed1cca36bfb.00445f49806724dd.6ac91aef38994361.8903b8bdbf1dd37c - ee2f8b3a9a1fa948.86eced7d27a49313.e4d1da05f1a095ac.1669a0b44c9f2f7e -- 0000000000000000.0000000000000000.e42fdafbf16095ac.ea69604cb49fd182 -+ 544a503aa8cd8c79.c4d1c4fd7781a793.efb4d37c9c136e05.eca69481f4baa8a3 - 5532cabb12bad0bb.163ee1340a899d09.673c833f54ff8a99.68068e8f52fba6a9 - e7d48c4a03ec6339 - --VPSIGNB_128(reg) -+VPEXTRW_128_0x6(reg) - before - c35d891ea21c1c02.cdb274abf2f13039.d7813f8e7f48b020.2936653a356fa494 - 59ee8277cb140cae.9995c9f4677e6920.65e4da77704a1d85.0f6ef5595c707a21 -@@ -42585,12 +42585,12 @@ VPSIGNB_128(reg) - 245254682e928561.98b76a467acb55d8.553db8a63749f5e7.bac710b4eb5244a3 - 378193c78a4cb1f0 - after -- 0000000000000000.0000000000000000.651c2677704a1d7b.f1920ba7a4708621 -+ c35d891ea21c1c02.cdb274abf2f13039.d7813f8e7f48b020.2936653a356fa494 - 59ee8277cb140cae.9995c9f4677e6920.65e4da77704a1d85.0f6ef5595c707a21 - 06d171c11b6371ea.93a847848a6e379c.1bb4af5b791c20e3.f6b0b089e50dc56d - 245254682e928561.98b76a467acb55d8.553db8a63749f5e7.bac710b4eb5244a3 -- 378193c78a4cb1f0 --VPSIGNB_128(mem) -+ 0000000000003f8e -+VPEXTRW_128_0x6(mem) - before - 49a8b4afdf05ca80.10bf26d99f2f84c0.848eac2650a48001.6ecbf3c4455ed73c - cc09f057068c487e.2663e37e0ac5acb2.33f98b102b027442.c4a95b223fe60390 -@@ -42598,13 +42598,13 @@ VPSIGNB_128(mem) - 95a9a596372d6a76.407e0f18400d6202.4aba0db25983a6bf.9389a34a6a7f29df - c5227bedd2a99a33 - after -- 49a8b4afdf05ca80.10bf26d99f2f84c0.848eac2650a48001.6ecbf3c4455ed73c -+ 49a8b4afdf05ca80.10bf26d99f2f84c0.848eac2650a48001.6ecbf3c4455e82f0 - cc09f057068c487e.2663e37e0ac5acb2.33f98b102b027442.c4a95b223fe60390 -- 0000000000000000.0000000000000000.cd0775102bfe8c42.c457a5de3fe6fd90 -+ 9c70c1aa19eaea17.c28987c50ce037e4.81c382f024f3edc8.b225ec2ac26db58c - 95a9a596372d6a76.407e0f18400d6202.4aba0db25983a6bf.9389a34a6a7f29df - c5227bedd2a99a33 - --VPSIGNB_128(reg) -+VPEXTRW_128_0x6(reg) - before - a33c707f97774534.938017067a6185c8.fd8e76e543d769b7.6aa8a843e6bc5c52 - 88237e6b5473668f.72c093e6fe90f739.5305b897b0ca87b0.bd5ad08de6accbae -@@ -42612,12 +42612,12 @@ VPSIGNB_128(reg) - db87d606272af802.43af9aa63b14ce26.3d58bd5a3a5dfb1c.6c3ab400b0dfc36f - 7fff6801b33ac42d - after -- 0000000000000000.0000000000000000.ad054869b0ca7950.bda6008de6ac3552 -+ a33c707f97774534.938017067a6185c8.fd8e76e543d769b7.6aa8a843e6bc5c52 - 88237e6b5473668f.72c093e6fe90f739.5305b897b0ca87b0.bd5ad08de6accbae - d223a11fa52b38f0.0e379622e0c87bf4.9f2fd19a2473f998.1f9c007e755eaffe - db87d606272af802.43af9aa63b14ce26.3d58bd5a3a5dfb1c.6c3ab400b0dfc36f -- 7fff6801b33ac42d --VPSIGNB_128(mem) -+ 00000000000076e5 -+VPEXTRW_128_0x6(mem) - before - 36b9996c997b6e63.009d178d75fde272.edf51d5f2b81acfa.89cb79438f15c8e8 - 6c32c12d7eaf7c3e.9eaf621e2c2f32eb.e8d59a37ce1ad09d.ded600c1be259ea7 -@@ -42625,13 +42625,13 @@ VPSIGNB_128(mem) - c494eb61b71db791.b1fa041243e1f2ab.409273f89601deff.18df5f2d1c834fb0 - b47630f282e8a452 - after -- 36b9996c997b6e63.009d178d75fde272.edf51d5f2b81acfa.89cb79438f15c8e8 -+ 36b9996c997b6e63.009d178d75fde272.edf51d5f2b81acfa.89cb79438f158e1b - 6c32c12d7eaf7c3e.9eaf621e2c2f32eb.e8d59a37ce1ad09d.ded600c1be259ea7 -- 0000000000000000.0000000000000000.182b9a37cee63063.222a00c142256259 -+ fd375e307fe1abe9.0f0ab326e84c231b.0f1b8e1b3debf83b.9ac34e40641bb706 - c494eb61b71db791.b1fa041243e1f2ab.409273f89601deff.18df5f2d1c834fb0 - b47630f282e8a452 - --VPSIGNW_128(reg) -+VPEXTRW_128_0x7(reg) - before - cad3bcfd33d6f097.9f15e5ac43705b62.decb534cdc79db49.5608c7b9f5673e15 - b644ffb9cbd9702d.6986c6fd3ee55587.f3c89b424da019a1.2c470549752ad6ab -@@ -42639,12 +42639,12 @@ VPSIGNW_128(reg) - 7f8d9bf31d51faf6.39673262f366357f.467a060e27cd872e.8d532f8b49f39901 - ceb81414d6133c1a - after -- 0000000000000000.0000000000000000.f3c864be4da0e65f.d3b9fab7752ad6ab -+ cad3bcfd33d6f097.9f15e5ac43705b62.decb534cdc79db49.5608c7b9f5673e15 - b644ffb9cbd9702d.6986c6fd3ee55587.f3c89b424da019a1.2c470549752ad6ab - d313f591e57e5fbd.fdb20c41c5895f2c.4c3fd85f32e3ea5f.a01ca996325460eb - 7f8d9bf31d51faf6.39673262f366357f.467a060e27cd872e.8d532f8b49f39901 -- ceb81414d6133c1a --VPSIGNW_128(mem) -+ 000000000000decb -+VPEXTRW_128_0x7(mem) - before - 4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea2fba - c03be892bf03b404.f0b2e30259ad240d.15970fefb60139d9.886f26d7b4c71cb1 -@@ -42652,13 +42652,13 @@ VPSIGNW_128(mem) - 56050571ce84a609.e913b846604fcdd3.dd773c0566153ff6.9a08dcfdd3efb88a - 178f84e03f51dfc5 - after -- 4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea2fba -+ 4116d31df3bf0762.15feeb4a10dc7d82.f86fb44ee58a95aa.3bc622bdcaea6eab - c03be892bf03b404.f0b2e30259ad240d.15970fefb60139d9.886f26d7b4c71cb1 -- 0000000000000000.0000000000000000.ea69f01149ffc627.886f26d74b391cb1 -+ 29f1cf6054ebff2d.6ef57e87954f2a44.6eabbe3382d6de39.89c110c883ef8bbc - 56050571ce84a609.e913b846604fcdd3.dd773c0566153ff6.9a08dcfdd3efb88a - 178f84e03f51dfc5 - --VPSIGNW_128(reg) -+VPEXTRW_128_0x7(reg) - before - 5ca406de63a33b19.244304b34ad963c3.bf578ea954384665.3fc608517eca1a3b - c5915d64dc710934.70774a10e3f6f387.4b0efb1d1096d4a7.71669b03e5022935 -@@ -42666,12 +42666,12 @@ VPSIGNW_128(reg) - 73267ab43caeea69.eef099d0deba7be0.f3058aea49e21aea.b0c40a491129d5f6 - 771bdeb60f2fea16 - after -- 0000000000000000.0000000000000000.b4f204e310962b59.71669b031afe2935 -+ 5ca406de63a33b19.244304b34ad963c3.bf578ea954384665.3fc608517eca1a3b - c5915d64dc710934.70774a10e3f6f387.4b0efb1d1096d4a7.71669b03e5022935 - aea385dc464685bf.146d5276b6e81183.e884fb0f2df6b144.4d217207b7c8280f - 73267ab43caeea69.eef099d0deba7be0.f3058aea49e21aea.b0c40a491129d5f6 -- 771bdeb60f2fea16 --VPSIGNW_128(mem) -+ 000000000000bf57 -+VPEXTRW_128_0x7(mem) - before - 7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e94b42 - 9c152bbd64603faf.01aebc313d6862c4.afd1d00f9e301d74.c458460aed947ffb -@@ -42679,13 +42679,13 @@ VPSIGNW_128(mem) - 9e6e387c97ba063b.4f8a033ac00051a6.9479d13005b7bba2.9d660fdfdb0ce33a - 32912e9b13ef8b19 - after -- 7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e94b42 -+ 7cf26a38cce9249a.706538575a3575dc.d8ce99097779ebcd.c9dda41900e94fc6 - 9c152bbd64603faf.01aebc313d6862c4.afd1d00f9e301d74.c458460aed947ffb -- 0000000000000000.0000000000000000.502f2ff19e30e28c.3ba8b9f6ed947ffb -+ b34f9b2ff4a2f681.824b01ae80d2ecce.4fc6b9cd6febcf02.42c16b28ad71f4be - 9e6e387c97ba063b.4f8a033ac00051a6.9479d13005b7bba2.9d660fdfdb0ce33a - 32912e9b13ef8b19 - --VPSIGNW_128(reg) -+VPEXTRW_128_0x7(reg) - before - 5d8fc5c8f2a82608.373c7d8f6ab52b09.c3b5bf41987ccbf7.5bb692227d9e9e81 - 7bacced314c3f1b2.5b86e754889e2018.3c192f2fa5d5966e.7e487a90f2af34ca -@@ -42693,12 +42693,12 @@ VPSIGNW_128(reg) - fb722b2e8e4c07e9.b4bd16a4176a6da9.a9bb2071cc47137d.4b9fac914478674d - adfbeefc59497dde - after -- 0000000000000000.0000000000000000.3c192f2f5a2b6992.81b87a900d5134ca -+ 5d8fc5c8f2a82608.373c7d8f6ab52b09.c3b5bf41987ccbf7.5bb692227d9e9e81 - 7bacced314c3f1b2.5b86e754889e2018.3c192f2fa5d5966e.7e487a90f2af34ca - e633472614ca28c4.e618f0b70e81a294.150251708294f0b7.dafd046780f338aa - fb722b2e8e4c07e9.b4bd16a4176a6da9.a9bb2071cc47137d.4b9fac914478674d -- adfbeefc59497dde --VPSIGNW_128(mem) -+ 000000000000c3b5 -+VPEXTRW_128_0x7(mem) - before - dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e793c6d - b4113141e8014d7c.9344250f62eaab1f.8974a6cc2381cd4b.77d1b65f15b7a632 -@@ -42706,13 +42706,13 @@ VPSIGNW_128(mem) - cf9eae970e7a87e5.23819cd370fdbeb3.ba0b772d8e402060.84bad1595f8430ee - 28fcc669eb2cc83c - after -- dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e793c6d -+ dcdd4792dc73358a.16b377581fd2c9ce.a143d407bf663d82.5692999c1e79481e - b4113141e8014d7c.9344250f62eaab1f.8974a6cc2381cd4b.77d1b65f15b7a632 -- 0000000000000000.0000000000000000.768c5934dc7fcd4b.77d149a115b7a632 -+ 11632af49aff7ee1.ce6f33bef41fe887.481e08df5fc5da31.67c575254c8c8e79 - cf9eae970e7a87e5.23819cd370fdbeb3.ba0b772d8e402060.84bad1595f8430ee - 28fcc669eb2cc83c - --VPSIGND_128(reg) -+VAESENC(reg) - before - b1d750c08c0f920f.ca9037165e7d22b3.eec55db97311674e.bb086ea0ccfe5b04 - 79966ccadcb9c915.dd03435da8140d77.8b8970dc98e62005.27e0692636094647 -@@ -42720,12 +42720,12 @@ VPSIGND_128(reg) - 3af447a800937064.c09fd1f49930bd95.abbd8189ba04b076.af555c18fd3b1f61 - 848a4b5b917a848f - after -- 0000000000000000.0000000000000000.8b8970dc98e62005.d81f96dac9f6b9b9 -+ 0000000000000000.0000000000000000.f0d79ff6127f226c.c27b913f1e7663a0 - 79966ccadcb9c915.dd03435da8140d77.8b8970dc98e62005.27e0692636094647 - de8715f37ab6aaf7.e6c44d59084c015f.5618d3a87c082484.da61e4aae86f9e58 - 3af447a800937064.c09fd1f49930bd95.abbd8189ba04b076.af555c18fd3b1f61 - 848a4b5b917a848f --VPSIGND_128(mem) -+VAESENC(mem) - before - 34ca2f61c1378a0d.eb2afe530adc5806.47604b1b78ccfb45.e6c576ecef650087 - 9be28316a87fed08.4b753662351b9e8a.57d237bbc02d789c.637cae3bb6b85065 -@@ -42735,11 +42735,11 @@ VPSIGND_128(mem) - after - 34ca2f61c1378a0d.eb2afe530adc5806.47604b1b78ccfb45.e6c576ecef650087 - 9be28316a87fed08.4b753662351b9e8a.57d237bbc02d789c.637cae3bb6b85065 -- 0000000000000000.0000000000000000.57d237bbc02d789c.9c8351c54947af9b -+ 0000000000000000.0000000000000000.4e2c8d8b1a4645c0.4e387d17b28ab6a9 - fdc96c380ddcb924.8b791b585cb134e6.81fd5712fc6b1eee.9327d8516b61de32 - fdb2c2f092cf957a - --VPSIGND_128(reg) -+VAESENC(reg) - before - 1a1ce02cbb5f3c3e.b031f97ec30b9a9d.24cbbf17901efb16.544d82a22961bf41 - 45b22c71829c0e2a.8ba0e623a0f3c742.dc61d4ea55b310d8.1f7f105a2f4b8feb -@@ -42747,12 +42747,12 @@ VPSIGND_128(reg) - 348d43c65c4f2627.25c7d1364124f9c2.1c8c4379008313c1.11b841f2372cabf2 - f058ddaa713b6fa7 - after -- 0000000000000000.0000000000000000.dc61d4ea55b310d8.e080efa62f4b8feb -+ 0000000000000000.0000000000000000.c0dca79285f351b1.16d175feba5d1d70 - 45b22c71829c0e2a.8ba0e623a0f3c742.dc61d4ea55b310d8.1f7f105a2f4b8feb - d9bea42b841348e8.69e4af11c1a3fe40.1088573c46fcaed8.c05f7b262a354a17 - 348d43c65c4f2627.25c7d1364124f9c2.1c8c4379008313c1.11b841f2372cabf2 - f058ddaa713b6fa7 --VPSIGND_128(mem) -+VAESENC(mem) - before - 3709cc3bf56f5263.b16a05aea7dce391.9d16c67d3c8475f5.5cb9940d1ed77940 - c498888fdfd30f51.aba3e64f0047bcd3.ab9c0cd2d0ce2d05.2c5a46643c811d00 -@@ -42762,11 +42762,11 @@ VPSIGND_128(mem) - after - 3709cc3bf56f5263.b16a05aea7dce391.9d16c67d3c8475f5.5cb9940d1ed77940 - c498888fdfd30f51.aba3e64f0047bcd3.ab9c0cd2d0ce2d05.2c5a46643c811d00 -- 0000000000000000.0000000000000000.5463f32ed0ce2d05.2c5a46643c811d00 -+ 0000000000000000.0000000000000000.a3f08935919a9c47.52a3eecdae454a81 - 1b805c34525b0a76.8a55f66d4ee4b28d.fd8179562c51456a.ed2cbe0ceb0c0df6 - 95f57c35b304d283 - --VPSIGND_128(reg) -+VAESENC(reg) - before - 3d628bd0eb84c502.9f716b5d1398c004.27661dc17b2e465d.f878975d2da21b18 - 40bfe74b3017211e.d77038faaa354075.b102547f2686e6b6.fbd6f622360e1f52 -@@ -42774,12 +42774,12 @@ VPSIGND_128(reg) - cc7e778d4fa707e0.d7c6fe3fc9c091af.000adee5688e39ac.84fa6497cf649c1c - c3576c1e96668e03 - after -- 0000000000000000.0000000000000000.4efdab81d979194a.042909de360e1f52 -+ 0000000000000000.0000000000000000.28932af7ab4a2919.bd941957ee298b0e - 40bfe74b3017211e.d77038faaa354075.b102547f2686e6b6.fbd6f622360e1f52 - fc5a8d111d4a2384.a04840f7333f47f5.86749512ec78ce41.e068119163a00b44 - cc7e778d4fa707e0.d7c6fe3fc9c091af.000adee5688e39ac.84fa6497cf649c1c - c3576c1e96668e03 --VPSIGND_128(mem) -+VAESENC(mem) - before - 7a4da314d5b39c28.0c76a32d62bd09dd.56b6eec189c7d9cf.7c0f2966375664a3 - 83a68764a75683b5.188f0c5cf0156428.fae48c668e5ddd82.57ce7400f45c8bd2 -@@ -42789,11 +42789,11 @@ VPSIGND_128(mem) - after - 7a4da314d5b39c28.0c76a32d62bd09dd.56b6eec189c7d9cf.7c0f2966375664a3 - 83a68764a75683b5.188f0c5cf0156428.fae48c668e5ddd82.57ce7400f45c8bd2 -- 0000000000000000.0000000000000000.fae48c6671a2227e.57ce7400f45c8bd2 -+ 0000000000000000.0000000000000000.879e387224c98754.14a5d72e779e171e - feb443c176d0cbb9.03548618f3c01756.212ac3ccd86b0351.95adf830a94ebc85 - b165299dda543e63 - --VPMULHRSW_128(reg) -+VAESENCLAST(reg) - before - 9c0849d369c6ac28.280114a7abbea487.9b988f7ca02be891.5cd9546656fb9ec4 - b0e1543ff2324180.15e28197e333466f.6f2dc520380802cb.2cf683d3894be479 -@@ -42801,12 +42801,12 @@ VPMULHRSW_128(reg) - c6691c656427d49c.a88f1f46cedfd437.3a79a9d49f4e03e6.fbaaacda7f5c615c - b2d99e4c7a350fe2 - after -- 0000000000000000.0000000000000000.df50eec9275afdf7.266532716a4717bd -+ 0000000000000000.0000000000000000.dd1c4cd9285504b2.ca95bb6725577d28 - b0e1543ff2324180.15e28197e333466f.6f2dc520380802cb.2cf683d3894be479 - 4a3e464b12243b18.a122067d3a3a6d9b.da5e256e59e6a2ad.6d4dcc018d67919e - c6691c656427d49c.a88f1f46cedfd437.3a79a9d49f4e03e6.fbaaacda7f5c615c - b2d99e4c7a350fe2 --VPMULHRSW_128(mem) -+VAESENCLAST(mem) - before - 6ea61e429bfe585a.80afd1f885c748b7.06f348dcb82e3871.eac84fbca5ce631f - 0bdca8a8fdc3f8f0.d45c616f1090d516.971bfe2c16345572.4598129408f1fc07 -@@ -42816,11 +42816,11 @@ VPMULHRSW_128(mem) - after - 6ea61e429bfe585a.80afd1f885c748b7.06f348dcb82e3871.eac84fbca5ce631f - 0bdca8a8fdc3f8f0.d45c616f1090d516.971bfe2c16345572.4598129408f1fc07 -- 0000000000000000.0000000000000000.fa4efef6f38b25ad.f4770b93f9b3fcec -+ 0000000000000000.0000000000000000.41b5f8add68f8331.da67b39e2dd6aada - 58b7cb74f6742b29.ba1a03bed6cf244e.c2e7feac9d93a980.70eadfc15252cb8f - f805e2ee72a77987 - --VPMULHRSW_128(reg) -+VAESENCLAST(reg) - before - 9bd0f2ba5ed051dd.c0f35cb3c5763723.04c40c6e495c6080.142340b2fd0458e3 - b7990b92b3588e3c.79c9e71145a589ec.5804e1b29643a3a5.0852fe23415cb0bf -@@ -42828,12 +42828,12 @@ VPMULHRSW_128(reg) - c550481106b62bc8.4d72dcdecab8f39a.8e79dda9304d317a.4bbce0f3e3ed4991 - 518ffb2a794003df - after -- 0000000000000000.0000000000000000.0c7be22db59be166.08140114c103bcfa -+ 0000000000000000.0000000000000000.82279ac06a45d26f.ffb3bfcceebfd748 - b7990b92b3588e3c.79c9e71145a589ec.5804e1b29643a3a5.0852fe23415cb0bf - a6aa29e00dcb6e51.5e05e87c930ddfb0.12277df75a0f2a69.7c41b5ea84a56c40 - c550481106b62bc8.4d72dcdecab8f39a.8e79dda9304d317a.4bbce0f3e3ed4991 - 518ffb2a794003df --VPMULHRSW_128(mem) -+VAESENCLAST(mem) - before - 6986837b63a85556.71d665923da4014c.21de3e2506b581d7.2846fb35b488f382 - 716df2d3bc33fd21.048a7bce4b212e8a.b5138a3b640d4792.3bdad506834cad2d -@@ -42843,11 +42843,11 @@ VPMULHRSW_128(mem) - after - 6986837b63a85556.71d665923da4014c.21de3e2506b581d7.2846fb35b488f382 - 716df2d3bc33fd21.048a7bce4b212e8a.b5138a3b640d4792.3bdad506834cad2d -- 0000000000000000.0000000000000000.ec2dc6d3053eb975.12d5019c49860815 -+ 0000000000000000.0000000000000000.6289abc7e49cff98.c43b5b5a615ff05a - bd3a7a432de13965.52a8822662fa78e3.920bd089f5036635.4186aa2671a0f91f - eb369e4ec74802be - --VPMULHRSW_128(reg) -+VAESENCLAST(reg) - before - 7edd3c6bd8aaf3af.bab88a357d1b4736.c5aa6c1ba26d0e55.9166c3985fb83774 - 58c782e93f5107a1.155673ddaca7990b.91093f7b2ba0e931.c2ba90275bfa30e1 -@@ -42855,12 +42855,12 @@ VPMULHRSW_128(reg) - 4d93f4b8819f8c33.5922bcfe19e7fb74.9f0d902c867361d7.2681a876775284f9 - 118beb0dcf8159fa - after -- 0000000000000000.0000000000000000.f212fbe2dc98f381.0015432a03780474 -+ 0000000000000000.0000000000000000.e1e5f393bd3333e4.c6d4adef85346b52 - 58c782e93f5107a1.155673ddaca7990b.91093f7b2ba0e931.c2ba90275bfa30e1 - d3406b3499c97c3e.ace0af26d792ec12.1011f7b2981e4623.ffd5b32304d40baa - 4d93f4b8819f8c33.5922bcfe19e7fb74.9f0d902c867361d7.2681a876775284f9 - 118beb0dcf8159fa --VPMULHRSW_128(mem) -+VAESENCLAST(mem) - before - 9ebff9d5296c44da.210e17e2945d742b.fae715508eb2845f.9a4b0656902c75f8 - a7e94db8a02002c5.aafbd21c6d926fd3.69fd3708530041ff.5d15569a52d4bf32 -@@ -42870,11 +42870,11 @@ VPMULHRSW_128(mem) - after - 9ebff9d5296c44da.210e17e2945d742b.fae715508eb2845f.9a4b0656902c75f8 - a7e94db8a02002c5.aafbd21c6d926fd3.69fd3708530041ff.5d15569a52d4bf32 -- 0000000000000000.0000000000000000.fbc7092ab687c042.b60a0449b7a3c446 -+ 0000000000000000.0000000000000000.17be1d60c2fa1e49.9a1f85ee694fc4db - a14fb8845710e66a.4f5efd74e38a92e1.2547c25b3c53490d.ab8071247122e5a4 - eeb9344205e13834 - --VBROADCASTF128(reg) -+VAESDEC(reg) - before - 69afc12ac1beb18d.4922c644cf64847c.226c666ab86730a0.291424cd97700cd3 - 78ae124a42478c5b.de1b0bd0d4b1e449.1c1c5521c3e8d3be.6c613e55b23ff4fd -@@ -42882,12 +42882,12 @@ VBROADCASTF128(reg) - c1f5f6df018a5709.40af27fcf664dec3.f196ba82ed0c13ca.20aa8b589624222f - 483fb6ab9752e08f - after -- 69afc12ac1beb18d.4922c644cf64847c.226c666ab86730a0.291424cd97700cd3 -+ 0000000000000000.0000000000000000.c68666f40197d44f.9bb80fd05d467eb8 - 78ae124a42478c5b.de1b0bd0d4b1e449.1c1c5521c3e8d3be.6c613e55b23ff4fd - 7601250d2307054b.3c0602148202c4fd.97bcc805a19bb5e8.cafa8ce0a8ccbdb8 - c1f5f6df018a5709.40af27fcf664dec3.f196ba82ed0c13ca.20aa8b589624222f - 483fb6ab9752e08f --VBROADCASTF128(mem) -+VAESDEC(mem) - before - 1f8389c4c863b304.b4d67f2c775dbf40.c4e2f7744ce2efc8.84f7270443c5290f - 8143808f446256b9.abf0be61220b799d.a56bec689f88b337.ad2b0cf740543263 -@@ -42897,11 +42897,11 @@ VBROADCASTF128(mem) - after - 1f8389c4c863b304.b4d67f2c775dbf40.c4e2f7744ce2efc8.84f7270443c5290f - 8143808f446256b9.abf0be61220b799d.a56bec689f88b337.ad2b0cf740543263 -- 4a4b18f8285b86db.018fade89d21c0cc.bf1584c50b63e53d.c87e64c780456b74 -- c4e2f7744ce2efc8.84f7270443c5290f.c4e2f7744ce2efc8.84f7270443c5290f -+ 0000000000000000.0000000000000000.f4716f8a40159ea5.a66509765d51b414 -+ 5666cceb8f5bff95.14ff4a2e852ad178.eead3a75ad7d4206.313c2be19e2210eb - 45b15daf36795c77 - --VBROADCASTF128(reg) -+VAESDEC(reg) - before - 5e28f69fe5d68cc2.81621854966d7d14.3f8b91a075b2e84e.0eff8b66a1e586bd - d9eef31b46c3dc79.a709781f589dbb84.dd807ca9094641f9.fbd7f18302a46c8f -@@ -42909,12 +42909,12 @@ VBROADCASTF128(reg) - 6597066c9083cbd9.548c658c7e896ae5.e6d6332f90bfa780.ac49f1f07c5d1132 - 287a8219cd6d485c - after -- 5e28f69fe5d68cc2.81621854966d7d14.3f8b91a075b2e84e.0eff8b66a1e586bd -+ 0000000000000000.0000000000000000.8a450d30a35ebf4a.e9cf771f9191a71c - d9eef31b46c3dc79.a709781f589dbb84.dd807ca9094641f9.fbd7f18302a46c8f - 124f4f91f6ce8847.a4296839f1f87610.4c2b09b4de711726.9101eab7ecc8b1a7 - 6597066c9083cbd9.548c658c7e896ae5.e6d6332f90bfa780.ac49f1f07c5d1132 - 287a8219cd6d485c --VBROADCASTF128(mem) -+VAESDEC(mem) - before - e1621a1efc061150.2e121418b16de2da.93ffea061b5c532e.09cef685babc2db5 - b3cb33ec24332a3b.c90c7501f41809f7.3d4d7391e37dec18.105e4e22f8f5e46e -@@ -42924,11 +42924,11 @@ VBROADCASTF128(mem) - after - e1621a1efc061150.2e121418b16de2da.93ffea061b5c532e.09cef685babc2db5 - b3cb33ec24332a3b.c90c7501f41809f7.3d4d7391e37dec18.105e4e22f8f5e46e -- 79824b6d61014c48.92d02693f6107cdb.2e447c1bf2f9f2ce.56d43872e7f60959 -- 93ffea061b5c532e.09cef685babc2db5.93ffea061b5c532e.09cef685babc2db5 -+ 0000000000000000.0000000000000000.86a33bcda27c2bb1.ce90f60eafc89ac6 -+ 1153dd8ed17b36a4.e5ab223a52e27634.41af818f65dc217e.387aafe12349d822 - 139dafdb477c8d75 - --VBROADCASTF128(reg) -+VAESDEC(reg) - before - 418934cdef1a63fd.560a663c8dada27b.1eea6562a41934ab.5459ffd957303451 - 208a3a21b8b09767.24726061b3a44df8.99d7eb788a42f1ef.420f71e5e503e876 -@@ -42936,12 +42936,12 @@ VBROADCASTF128(reg) - 5cfbbba31bf1088f.ca899cc5ac0f4f96.c4edb21a7b975c88.1ecf21f343552260 - c57158cd4ceb217e - after -- 418934cdef1a63fd.560a663c8dada27b.1eea6562a41934ab.5459ffd957303451 -+ 0000000000000000.0000000000000000.aaecddf872c813f3.dea82dcd81eeff07 - 208a3a21b8b09767.24726061b3a44df8.99d7eb788a42f1ef.420f71e5e503e876 - 0aecbe453dc9655e.565949eb5f6bf348.b1beb1e69de7ebaa.e79d539f2b61f917 - 5cfbbba31bf1088f.ca899cc5ac0f4f96.c4edb21a7b975c88.1ecf21f343552260 - c57158cd4ceb217e --VBROADCASTF128(mem) -+VAESDEC(mem) - before - b74e731a5f2fb09d.72022da9edb5bda5.5bcfd5dab69a1e0f.2dafea7fc0db8136 - cf33eec49a2e8be8.a94e10c250a0c04d.e4f771189a1a1cde.484f558007419560 -@@ -42951,11 +42951,11 @@ VBROADCASTF128(mem) - after - b74e731a5f2fb09d.72022da9edb5bda5.5bcfd5dab69a1e0f.2dafea7fc0db8136 - cf33eec49a2e8be8.a94e10c250a0c04d.e4f771189a1a1cde.484f558007419560 -- ebed45b919f3708c.5b2c615adf3f4d33.43cdea6a749b0530.701aef8bec54d6b1 -- 5bcfd5dab69a1e0f.2dafea7fc0db8136.5bcfd5dab69a1e0f.2dafea7fc0db8136 -+ 0000000000000000.0000000000000000.1a00dc076f41cafe.8401ceda39a4d6cc -+ e546f4e3f78a19b5.e5e61bdd361c9f02.521cbebc5f279431.035cb50b0ca17ed6 - 5c61a26c02b3c97b - --VPEXTRW_128_0x0(reg) -+VAESDECLAST(reg) - before - d675b21a6b16f54b.9b0b78305100438e.a3c83ab7f3c5f367.efb268fb77cd860c - cfe3e182e2563cf3.e7074c8b4260a943.f120ba54afc6850d.f4596411d99697ee -@@ -42963,12 +42963,12 @@ VPEXTRW_128_0x0(reg) - aa018e2b6ca00d79.b5d8d41b5a0f1df5.ad5ece889afd52cf.aa0d4476e9c60476 - 13b21e9ccf44d973 - after -- d675b21a6b16f54b.9b0b78305100438e.a3c83ab7f3c5f367.efb268fb77cd860c -+ 0000000000000000.0000000000000000.ce2cf0dd239c1c52.248aaa081a57429a - cfe3e182e2563cf3.e7074c8b4260a943.f120ba54afc6850d.f4596411d99697ee - a1f92c0e0400db1e.a708ece0e6b70902.2b39972008a990a1.3fde2feba0908203 - aa018e2b6ca00d79.b5d8d41b5a0f1df5.ad5ece889afd52cf.aa0d4476e9c60476 -- 000000000000860c --VPEXTRW_128_0x0(mem) -+ 13b21e9ccf44d973 -+VAESDECLAST(mem) - before - 54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004b0542 - 4a8e176ee44a6bbf.cd1a87ca80ee1d6d.2f196ef321f85328.f9ff37d8d621e5a7 -@@ -42976,13 +42976,13 @@ VPEXTRW_128_0x0(mem) - c6d0f8c0bf021844.188fadbcfea24d30.3429f874757a2c3e.b564d5a4449220f5 - 033d8e671446f237 - after -- 54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004b30a9 -+ 54993c4b6f17bd28.44480346b7c00faf.ee458128ba77a148.d3dc5af6004b0542 - 4a8e176ee44a6bbf.cd1a87ca80ee1d6d.2f196ef321f85328.f9ff37d8d621e5a7 -- d15c2df14aeaa064.9fc3162264b5735f.52211768aba0edc1.7b136199b90a30a9 -+ 0000000000000000.0000000000000000.a438d156f40c13a6.a85270db69aa40cb - c6d0f8c0bf021844.188fadbcfea24d30.3429f874757a2c3e.b564d5a4449220f5 - 033d8e671446f237 - --VPEXTRW_128_0x0(reg) -+VAESDECLAST(reg) - before - c1ec884dc4b1e11a.03b6f6c75c9e8e8b.92c94703eb40e68d.b1fc8d019a93cccc - 4abbbfc2f1602a4b.65daa3f23fcac064.6abfe063c61b7b22.a66853fd37f58896 -@@ -42990,12 +42990,12 @@ VPEXTRW_128_0x0(reg) - 32ecd50a30b7ba45.080cf6644605427e.a50a001eb7ba88a1.63365fee47ca4791 - e4319dbcf254c119 - after -- c1ec884dc4b1e11a.03b6f6c75c9e8e8b.92c94703eb40e68d.b1fc8d019a93cccc -+ 0000000000000000.0000000000000000.4f4c774873b7170e.2ac35272a2ebbdfc - 4abbbfc2f1602a4b.65daa3f23fcac064.6abfe063c61b7b22.a66853fd37f58896 - fcf72f3237de0975.c808792d849367fc.fdbb74482bc0479a.ed37c55367af1dc9 - 32ecd50a30b7ba45.080cf6644605427e.a50a001eb7ba88a1.63365fee47ca4791 -- 000000000000cccc --VPEXTRW_128_0x0(mem) -+ e4319dbcf254c119 -+VAESDECLAST(mem) - before - 4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e52069578e5 - 774bf69e1be3981b.9930b09db1ab8085.90c4d277b2107ff3.a7d0ec4eb2de530f -@@ -43003,13 +43003,13 @@ VPEXTRW_128_0x0(mem) - 86e4b159c2bb8230.61e82fdd549d5e6c.db64178b644d5822.5272865298e8becc - ccd3a93208c0c5b5 - after -- 4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e52069557ce -+ 4cf4fca88558488e.48e6acb47a777866.01b19584a12a0b17.bff87e52069578e5 - 774bf69e1be3981b.9930b09db1ab8085.90c4d277b2107ff3.a7d0ec4eb2de530f -- 4101098bd1006ded.8318dd3270de0e4e.8f11292b94c25a3d.b9e0457f5a2057ce -+ 0000000000000000.0000000000000000.3fd1fe8637b68869.81702ee48fe9071e - 86e4b159c2bb8230.61e82fdd549d5e6c.db64178b644d5822.5272865298e8becc - ccd3a93208c0c5b5 - --VPEXTRW_128_0x0(reg) -+VAESDECLAST(reg) - before - 8450ac8a4736a837.22be68f50a21940f.8eeda30cf873ab8c.508916823ebc34cd - d6338ac8f0d6a2fb.f15cac4cc63d5fb7.6873342af8ec325a.ca4ca4fe3c1bab6b -@@ -43017,12 +43017,12 @@ VPEXTRW_128_0x0(reg) - b85dc8a3f2c1ce00.9814c7d709c80f10.8f329de37ff9ddae.3cdb5b321adb592f - ed3f7cc3315308ad - after -- 8450ac8a4736a837.22be68f50a21940f.8eeda30cf873ab8c.508916823ebc34cd -+ 0000000000000000.0000000000000000.249b7f3606d132c7.c5f733e66df4512d - d6338ac8f0d6a2fb.f15cac4cc63d5fb7.6873342af8ec325a.ca4ca4fe3c1bab6b - 1ec83f57a02bf0b0.cf8af748121b9f53.49c6dea3f1952f81.24783dea7d777928 - b85dc8a3f2c1ce00.9814c7d709c80f10.8f329de37ff9ddae.3cdb5b321adb592f -- 00000000000034cd --VPEXTRW_128_0x0(mem) -+ ed3f7cc3315308ad -+VAESDECLAST(mem) - before - 13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da4798c - 8a3db46b3cb1c2bc.52b34222eee12923.5a6be45a69bc729c.b6844c68c7233fc8 -@@ -43030,13 +43030,13 @@ VPEXTRW_128_0x0(mem) - dad2c5447df088b6.8394daa6c39792c4.19c2e236c77a67ba.bcc91f1ab1ca3808 - 5a250d91490be365 - after -- 13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da46b0d -+ 13711b87deec42cd.003c201883247797.28c698e3c74f6c1a.94036e563da4798c - 8a3db46b3cb1c2bc.52b34222eee12923.5a6be45a69bc729c.b6844c68c7233fc8 -- 2d6fc35c68ae46a5.0a0c2d2ecf831e4d.0cd029270b1cdcc3.4f023385ba016b0d -+ 0000000000000000.0000000000000000.198986a5817d3106.70064ba144dcd73d - dad2c5447df088b6.8394daa6c39792c4.19c2e236c77a67ba.bcc91f1ab1ca3808 - 5a250d91490be365 - --VPEXTRW_128_0x1(reg) -+VAESIMC(reg) - before - 8362f7581d4fa8cf.6c34341197824418.1b9747f866a7c332.5d0b8b73bce2cfae - 94cbdbd9ca22c2f3.bf5f8eaed37038fa.2d606e8e5342eb43.b377a0ca0461cfca -@@ -43044,12 +43044,12 @@ VPEXTRW_128_0x1(reg) - df557fbe1da7e818.1743f1072092b3e8.2f78e03b7c421201.0aed0077fdd18b2d - c18d42a5e8dbbdcb - after -- 8362f7581d4fa8cf.6c34341197824418.1b9747f866a7c332.5d0b8b73bce2cfae -+ 0000000000000000.0000000000000000.afb08a26278f2db0.e87ca2ad0667cd0b - 94cbdbd9ca22c2f3.bf5f8eaed37038fa.2d606e8e5342eb43.b377a0ca0461cfca - eaaeb482eb116f7d.ae204e064dc71e85.153d4dd627f147a4.f9d49e28bb02253b - df557fbe1da7e818.1743f1072092b3e8.2f78e03b7c421201.0aed0077fdd18b2d -- 000000000000bce2 --VPEXTRW_128_0x1(mem) -+ c18d42a5e8dbbdcb -+VAESIMC(mem) - before - fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c08905 - 9595564a22cd79be.1922d79f22f93532.c3deccb142b5d9e1.683b0e0c20f8e85d -@@ -43057,13 +43057,13 @@ VPEXTRW_128_0x1(mem) - 554dbc774b393773.2393c4dcb97889a4.a391010c1a3a8944.b90ad9611dc34db8 - 3194afab236ecc13 - after -- fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c0a575 -+ fc81e09c952b7942.d00d36f9fb706c70.d494f19c68ddb24d.d65e2129f1c08905 - 9595564a22cd79be.1922d79f22f93532.c3deccb142b5d9e1.683b0e0c20f8e85d -- 6a95219aabce7a6a.16e05d1c2dcd800a.beeffd33ca25e2cf.405ba250a5756bb5 -+ 0000000000000000.0000000000000000.8e6af1384bf605f2.2e7ec212dbb9c21d - 554dbc774b393773.2393c4dcb97889a4.a391010c1a3a8944.b90ad9611dc34db8 - 3194afab236ecc13 - --VPEXTRW_128_0x1(reg) -+VAESIMC(reg) - before - 0244209a54032171.3488a3cf1f1b6e04.9c86094b61878cab.4c91522951fe8c6b - 8a67299b4b0e8b7f.e114528d427fd94a.dd0726d6c185c4cb.97bb6e778880a572 -@@ -43071,12 +43071,12 @@ VPEXTRW_128_0x1(reg) - 2b36f07ffdb28959.194afaece6fd3da3.27deddec1b7fc609.7ebdf4526ce70bc9 - d42d56b850e5d173 - after -- 0244209a54032171.3488a3cf1f1b6e04.9c86094b61878cab.4c91522951fe8c6b -+ 0000000000000000.0000000000000000.0268fa4c5a0becea.5d4ca20665f422b7 - 8a67299b4b0e8b7f.e114528d427fd94a.dd0726d6c185c4cb.97bb6e778880a572 - 234ac518a51944e8.39bb469ed0713470.426019e776fe6eb1.5edbd0e0dec99182 - 2b36f07ffdb28959.194afaece6fd3da3.27deddec1b7fc609.7ebdf4526ce70bc9 -- 00000000000051fe --VPEXTRW_128_0x1(mem) -+ d42d56b850e5d173 -+VAESIMC(mem) - before - 3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d93077f - 8de5c61089b22b9f.f361e4b719bca602.dc5092f2181544df.e179c97ea8c76ebe -@@ -43084,13 +43084,13 @@ VPEXTRW_128_0x1(mem) - 6b65fe4868918165.c447e5a47f8bc2da.0c85fb02b827ce5d.eb37caed46bc9d48 - b4e16805c295deec - after -- 3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d93c7a6 -+ 3af673fea6d09dac.fc7aa73bf064967e.5b8dea649f30ae0f.e8cd6e4f4d93077f - 8de5c61089b22b9f.f361e4b719bca602.dc5092f2181544df.e179c97ea8c76ebe -- a9c6cbda169a3978.6d36a5611445f792.795f6e836db9bb40.6e2de9e4c7a63772 -+ 0000000000000000.0000000000000000.791d78441ef733d4.b79d3917fb48e6f3 - 6b65fe4868918165.c447e5a47f8bc2da.0c85fb02b827ce5d.eb37caed46bc9d48 - b4e16805c295deec - --VPEXTRW_128_0x1(reg) -+VAESIMC(reg) - before - 2578bf98d6be3409.ad8edb469ba5c08f.55dea1ecf31b4685.7290b45a186b3a63 - 9948cc121fc2db4c.4c0ddfc0cce1b225.7d48d3a60e80bd3f.874a1579a691bb7e -@@ -43098,12 +43098,12 @@ VPEXTRW_128_0x1(reg) - ffc2f56cbe8d10f3.113b49d997039d3f.fdc58e1ba7fa7793.2efec0b9c2b5eaa1 - 788f01b287cb1101 - after -- 2578bf98d6be3409.ad8edb469ba5c08f.55dea1ecf31b4685.7290b45a186b3a63 -+ 0000000000000000.0000000000000000.5ad4b13db0b75aa2.dd328e16102c62ac - 9948cc121fc2db4c.4c0ddfc0cce1b225.7d48d3a60e80bd3f.874a1579a691bb7e - 6e9d8ae0382e1161.24ad85a317521251.96d1793c6b4664b6.27809a4a81a60cd9 - ffc2f56cbe8d10f3.113b49d997039d3f.fdc58e1ba7fa7793.2efec0b9c2b5eaa1 -- 000000000000186b --VPEXTRW_128_0x1(mem) -+ 788f01b287cb1101 -+VAESIMC(mem) - before - e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e273285 - 451ec9f20c39293c.c4b0c2727e545b40.9a511cf3a7562314.251df5652b59d036 -@@ -43111,13 +43111,13 @@ VPEXTRW_128_0x1(mem) - 6e8dd26bef5134e9.c9711585417a9d93.c7af386cdd3a2404.d6b0eae478fea787 - 272eef853089597e - after -- e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e27aa1d -+ e101db21ecf33d26.a70509244c6b15af.ef83a85068000f1d.0e6f0eb05e273285 - 451ec9f20c39293c.c4b0c2727e545b40.9a511cf3a7562314.251df5652b59d036 -- 80b4481204aa926e.b1101dc4f1d51f53.ee7123ae6f109653.9f1940a8aa1d8e52 -+ 0000000000000000.0000000000000000.d562a182822311ca.1481b1fbbc8f57aa - 6e8dd26bef5134e9.c9711585417a9d93.c7af386cdd3a2404.d6b0eae478fea787 - 272eef853089597e - --VPEXTRW_128_0x2(reg) -+VAESKEYGENASSIST_0x00(reg) - before - eedf4bf66f48dee6.eb76e5ebe93acbd8.6a1fa62109cd11ad.01d6d71b0ce08953 - 870efaa5d0ca7369.d33afc7c0f721268.ee66cd04e55cb64d.78b47ca6190f806e -@@ -43125,12 +43125,12 @@ VPEXTRW_128_0x2(reg) - 9e1a436b6a40bb72.548827864dfca31a.13eec94f4c5c87cd.8dc0ca013b3617b2 - e2876aa888462f34 - after -- eedf4bf66f48dee6.eb76e5ebe93acbd8.6a1fa62109cd11ad.01d6d71b0ce08953 -+ 0000000000000000.0000000000000000.b86d815f6d815fb8.2d307d49307d492d - 870efaa5d0ca7369.d33afc7c0f721268.ee66cd04e55cb64d.78b47ca6190f806e - 4e09f9fef09853b3.02a7940c7d04c6c5.b391849a72b2ca1e.0813a4fa1fd3c77e - 9e1a436b6a40bb72.548827864dfca31a.13eec94f4c5c87cd.8dc0ca013b3617b2 -- 000000000000d71b --VPEXTRW_128_0x2(mem) -+ e2876aa888462f34 -+VAESKEYGENASSIST_0x00(mem) - before - e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de52906 - 71920987279ba2d3.4eb1a935dd4b13f9.d0d433e88a50c65e.1869eac654d9ed74 -@@ -43138,13 +43138,13 @@ VPEXTRW_128_0x2(mem) - 939561f7db3200bd.76340b630b4c595e.2880ff02a4cd5c95.dc3810cade34cba1 - adfcdb6f5ab25db8 - after -- e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de5bf61 -+ e53400dc230fc930.d58ed459da4de74f.a4a833d69e676494.6bc7978f0de52906 - 71920987279ba2d3.4eb1a935dd4b13f9.d0d433e88a50c65e.1869eac654d9ed74 -- 616f0097b0f87649.65cfbc690fc77a1a.b3d8a3a82dc385a5.7420bf61bbc50fc3 -+ 0000000000000000.0000000000000000.f649c2c349c2c3f6.737fc6887fc68873 - 939561f7db3200bd.76340b630b4c595e.2880ff02a4cd5c95.dc3810cade34cba1 - adfcdb6f5ab25db8 - --VPEXTRW_128_0x2(reg) -+VAESKEYGENASSIST_0x00(reg) - before - 41ba1bbbcacc00b4.e2d1a893c454fd5c.dd2b918d6d67ec72.0d98c4e20a790959 - f5bccd1acb0df142.29ef5156866a2952.f5014a55d2a36f02.3deb6d357cd3461d -@@ -43152,12 +43152,12 @@ VPEXTRW_128_0x2(reg) - 2dbf73c1ed35acc3.1300bb0706a3fdf1.ad7b466c14af3344.ed765be0f1c36259 - 254598102e71b927 - after -- 41ba1bbbcacc00b4.e2d1a893c454fd5c.dd2b918d6d67ec72.0d98c4e20a790959 -+ 0000000000000000.0000000000000000.f79c7bc39c7bc3f7.d9dc5a38dc5a38d9 - f5bccd1acb0df142.29ef5156866a2952.f5014a55d2a36f02.3deb6d357cd3461d - 254febf8f8016b0e.46bbd92e3d8040ca.1c033326d68c1db9.934676e515e8cf0f - 2dbf73c1ed35acc3.1300bb0706a3fdf1.ad7b466c14af3344.ed765be0f1c36259 -- 000000000000c4e2 --VPEXTRW_128_0x2(mem) -+ 254598102e71b927 -+VAESKEYGENASSIST_0x00(mem) - before - 1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b681932896ed4f - a3f20cc43472a502.3666aec4a28b6d9a.31297d673c3d5cfa.7cffdf07afd08685 -@@ -43165,13 +43165,13 @@ VPEXTRW_128_0x2(mem) - edafb060094e75ff.ee0f5e84c96d1628.63c978d8089925cd.43eff58784664824 - 4a2ea56a0adbe9e5 - after -- 1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b6819328965d34 -+ 1980aa63e5fc91a6.6a5860e14734ee0e.6e8c73cbfcde1df2.03b681932896ed4f - a3f20cc43472a502.3666aec4a28b6d9a.31297d673c3d5cfa.7cffdf07afd08685 -- a1693a1f37dfb366.ee345ad699c46714.3aa456c7e1cd7534.72a45d3444e63b93 -+ 0000000000000000.0000000000000000.1f9f648f9f648f1f.dc7b4e0c7b4e0cdc - edafb060094e75ff.ee0f5e84c96d1628.63c978d8089925cd.43eff58784664824 - 4a2ea56a0adbe9e5 - --VPEXTRW_128_0x2(reg) -+VAESKEYGENASSIST_0x00(reg) - before - e2ab684b73d25981.6492eb73c6cba7f8.9244b838cc12b781.8a646185ccae28f1 - 68b33a945ad6d5a5.e3dc65448b62077e.361d6360413e86cc.89418cb94a173acb -@@ -43179,12 +43179,12 @@ VPEXTRW_128_0x2(reg) - af93fc131436e034.64d80cd19b103ce0.eeed9db8eb5b9ce6.83f0996be2157953 - 355a73c034c31f59 - after -- e2ab684b73d25981.6492eb73c6cba7f8.9244b838cc12b781.8a646185ccae28f1 -+ 0000000000000000.0000000000000000.3305944a05944a33.aa277138277138aa - 68b33a945ad6d5a5.e3dc65448b62077e.361d6360413e86cc.89418cb94a173acb - 399217b35c7399fd.445a9cc074204fbd.36e75c66c27dbeb4.3d2c76629de01688 - af93fc131436e034.64d80cd19b103ce0.eeed9db8eb5b9ce6.83f0996be2157953 -- 0000000000006185 --VPEXTRW_128_0x2(mem) -+ 355a73c034c31f59 -+VAESKEYGENASSIST_0x00(mem) - before - 30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c159655c0e - 505039fe70b823c5.fe2fcb46175beaf2.520383661ab8f485.f5e1eceda7263ad7 -@@ -43192,13 +43192,13 @@ VPEXTRW_128_0x2(mem) - 706ea97d331e012c.34e6878d45a6d33d.8bbdab64e6b80fcb.2d592f5e55fe3efe - e104a37bed2edcb4 - after -- 30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c15965f1a8 -+ 30367f4daff5c3c6.2804e4201eaae7f7.20212f651f3f8a14.b97d24c159655c0e - 505039fe70b823c5.fe2fcb46175beaf2.520383661ab8f485.f5e1eceda7263ad7 -- 71741ebf9317f883.8e61adf19bd625d0.d74883c2a887375e.fd67f1a8722b71ed -+ 0000000000000000.0000000000000000.4db7fd15b7fd154d.7856ff3656ff3678 - 706ea97d331e012c.34e6878d45a6d33d.8bbdab64e6b80fcb.2d592f5e55fe3efe - e104a37bed2edcb4 - --VPEXTRW_128_0x3(reg) -+VAESKEYGENASSIST_0x31(reg) - before - 74b3486cd54489bb.270955226cd9f8eb.4d0a5386b15731e7.4a2e7738ef5837f9 - 44b41a9baace7fc0.7312a19c5b559aec.33190f497c767b77.f0676329df736c14 -@@ -43206,12 +43206,12 @@ VPEXTRW_128_0x3(reg) - 07d83667896c3873.3a9e01bbcabecf67.d92745d99e2bc200.61618d18e746edc0 - e4b9c2ec3617b0a8 - after -- 74b3486cd54489bb.270955226cd9f8eb.4d0a5386b15731e7.4a2e7738ef5837f9 -+ 0000000000000000.0000000000000000.091a58981a58a909.f7cb18ffcb18cef7 - 44b41a9baace7fc0.7312a19c5b559aec.33190f497c767b77.f0676329df736c14 - ac5115750757fb6f.305606d51c9ea35c.435eb740428eec9c.5934ec26d4136a48 - 07d83667896c3873.3a9e01bbcabecf67.d92745d99e2bc200.61618d18e746edc0 -- 0000000000004a2e --VPEXTRW_128_0x3(mem) -+ e4b9c2ec3617b0a8 -+VAESKEYGENASSIST_0x31(mem) - before - be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cda374f - cb1dd9ebf7c5e97b.0acfd6406967e92d.a572ab3b5eb87efd.0770079d89268737 -@@ -43219,13 +43219,13 @@ VPEXTRW_128_0x3(mem) - eec11182f57cf521.2dfadc842c20704d.93ed7e7bf8a4880c.9d5537f61ec6ac7c - 351f0d088e32f732 - after -- be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cda5789 -+ be09088edd93702d.b39377dccb987479.6db90f3981c3d939.51beb77e2cda374f - cb1dd9ebf7c5e97b.0acfd6406967e92d.a572ab3b5eb87efd.0770079d89268737 -- e7c1b3eda0b9d7be.6ad84efe0066d33a.be9551ad7caa7adf.578933a1509cef61 -+ 0000000000000000.0000000000000000.123c56473c567612.f3d1ae98d1aea9f3 - eec11182f57cf521.2dfadc842c20704d.93ed7e7bf8a4880c.9d5537f61ec6ac7c - 351f0d088e32f732 - --VPEXTRW_128_0x3(reg) -+VAESKEYGENASSIST_0x31(reg) - before - 7b35b3433d6c0f2f.bce96f95121900d0.b1807a3d8821fa11.0247ad91edb265b0 - cbe12413c6ff2e21.2d044a11129cb4f8.50b72696b0f5ae33.e66f59db77e1cdf6 -@@ -43233,12 +43233,12 @@ VPEXTRW_128_0x3(reg) - f92e5723d760748e.674764f92c860562.536995d3d649833f.7d591ebcbdcf2d1b - e7b22d2ab0a79d51 - after -- 7b35b3433d6c0f2f.bce96f95121900d0.b1807a3d8821fa11.0247ad91edb265b0 -+ 0000000000000000.0000000000000000.9945ce8845ceb999.6eafc752afc7636e - cbe12413c6ff2e21.2d044a11129cb4f8.50b72696b0f5ae33.e66f59db77e1cdf6 - 81705ce4c57791b1.1cdf1de41112ccc5.68ecdbf94129c75e.1b310045b43c7b0b - f92e5723d760748e.674764f92c860562.536995d3d649833f.7d591ebcbdcf2d1b -- 0000000000000247 --VPEXTRW_128_0x3(mem) -+ e7b22d2ab0a79d51 -+VAESKEYGENASSIST_0x31(mem) - before - 370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdf1c82 - 482b13a0c353a9e1.9f678897a3b7a8d9.7de83e9a2499c9bf.166d099d7e79ced2 -@@ -43246,13 +43246,13 @@ VPEXTRW_128_0x3(mem) - 1cfb9206cba1801b.9ceb95cf0864ac63.504ab952da35e16e.7825635488e7714b - eb83fbd558d3d9cc - after -- 370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdfa58d -+ 370aab7da9cf87da.8f67123a98471262.e9069b3c7e041bfc.6e7b51910cdf1c82 - 482b13a0c353a9e1.9f678897a3b7a8d9.7de83e9a2499c9bf.166d099d7e79ced2 -- f5e2e17f1a40bd93.8479b5a5943d72a0.01bbcafd3950cdd6.a58dbb65c9a3d7dc -+ 0000000000000000.0000000000000000.eb1e6f251e6f14eb.819f21e09f21d181 - 1cfb9206cba1801b.9ceb95cf0864ac63.504ab952da35e16e.7825635488e7714b - eb83fbd558d3d9cc - --VPEXTRW_128_0x3(reg) -+VAESKEYGENASSIST_0x31(reg) - before - 5bf18056d4f34b0b.9742a021f283ada7.420724839bb891cd.456089862255c1b2 - 22bcef4299d102b3.448389bcaaf00160.d11a5f2ce8c55e8b.becab6832ebb2bcf -@@ -43260,12 +43260,12 @@ VPEXTRW_128_0x3(reg) - 2898780c6bfd32f1.a021d9223ea10e0f.1f55c60d213d9fb2.a8ca138dff8a8842 - d1f83c71fd0cf3f1 - after -- 5bf18056d4f34b0b.9742a021f283ada7.420724839bb891cd.456089862255c1b2 -+ 0000000000000000.0000000000000000.055c51b25c518305.9a2a20c52a20f49a - 22bcef4299d102b3.448389bcaaf00160.d11a5f2ce8c55e8b.becab6832ebb2bcf - 9d30430542fc3b71.fd89c8c30ff73875.a77041368b184e49.9554ba371974d9f0 - 2898780c6bfd32f1.a021d9223ea10e0f.1f55c60d213d9fb2.a8ca138dff8a8842 -- 0000000000004560 --VPEXTRW_128_0x3(mem) -+ d1f83c71fd0cf3f1 -+VAESKEYGENASSIST_0x31(mem) - before - eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45be8b73 - d9abee93b07df114.de787691b0b648e4.1038639968138689.64fbaad394294f37 -@@ -43273,13 +43273,13 @@ VPEXTRW_128_0x3(mem) - 8dcdb1fd1027b1ba.24bbc933465c26ee.7425058008a6482d.816ceadd21eb4e7a - 868f640a975a0151 - after -- eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45bee954 -+ eeaab1cf2f03d828.1f428bc1b16222de.071839c652fc3f5d.9414ea1e45be8b73 - d9abee93b07df114.de787691b0b648e4.1038639968138689.64fbaad394294f37 -- 6fc870a99c85fae1.c18737e90385e0b0.954dd3899bf2a0c0.e9540099a90926ab -+ 0000000000000000.0000000000000000.b4c5ad23c5ad12b4.7222fab622fa8772 - 8dcdb1fd1027b1ba.24bbc933465c26ee.7425058008a6482d.816ceadd21eb4e7a - 868f640a975a0151 - --VPEXTRW_128_0x4(reg) -+VAESKEYGENASSIST_0xB2(reg) - before - 5609688ba8e27bdc.0d862f7b2870d0cb.636029dd16c65549.878b756cca3a3cfd - 4b25f4ceef10fac6.ccbf6610ff6b1442.dac251520f50aa6e.ab4aa038fdbb365b -@@ -43287,12 +43287,12 @@ VPEXTRW_128_0x4(reg) - 18779147908bf26a.78e0eb2b5ba9fa0c.e0ecee4de9f1b6c5.9706132029b12e74 - 169b5514593ea486 - after -- 5609688ba8e27bdc.0d862f7b2870d0cb.636029dd16c65549.878b756cca3a3cfd -+ 0000000000000000.0000000000000000.bbd9d8c7d9d875bb.706515d165156370 - 4b25f4ceef10fac6.ccbf6610ff6b1442.dac251520f50aa6e.ab4aa038fdbb365b - c231023e086fb8bc.a744d0a6b1253948.e52d3ffecb846109.bc2f00d0bf34f274 - 18779147908bf26a.78e0eb2b5ba9fa0c.e0ecee4de9f1b6c5.9706132029b12e74 -- 0000000000005549 --VPEXTRW_128_0x4(mem) -+ 169b5514593ea486 -+VAESKEYGENASSIST_0xB2(mem) - before - 16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aab0320e44f - 732f52997abb3192.cce51ad45c2cc99b.6f9121ae05404378.15997f84b59f2852 -@@ -43300,13 +43300,13 @@ VPEXTRW_128_0x4(mem) - b449d8be000878f9.49cd71d631525fbb.9231e7fadd90cee8.5b2ae65753bbe176 - 69061f2a766fceee - after -- 16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aab0320427a -+ 16ba40986be811d7.a7459a5523f1e47b.1c613189180314b8.264c5aab0320e44f - 732f52997abb3192.cce51ad45c2cc99b.6f9121ae05404378.15997f84b59f2852 -- 09c50601a2c1bfe4.e4a30e31d7c8de78.4d3d34853d6b427a.081f5a449cf9be7b -+ 0000000000000000.0000000000000000.a79cef759cefc7a7.62f7290cf729be62 - b449d8be000878f9.49cd71d631525fbb.9231e7fadd90cee8.5b2ae65753bbe176 - 69061f2a766fceee - --VPEXTRW_128_0x4(reg) -+VAESKEYGENASSIST_0xB2(reg) - before - 90fe0127a2a4c190.508844baaf9b18fc.58ae3f3006558713.1a38b7f900bba3ee - 2b6089bc73e3f607.b94cc7e3cc875a1a.6d9175acf05d932a.c1201f6ec2f97db9 -@@ -43314,12 +43314,12 @@ VPEXTRW_128_0x4(reg) - 2c8d775a72b41426.6295ff69be97b755.199005b67aae4747.dcbfa86b96dc2e4d - 080ec0cadf997e6d - after -- 90fe0127a2a4c190.508844baaf9b18fc.58ae3f3006558713.1a38b7f900bba3ee -+ 0000000000000000.0000000000000000.d5692e65692ed7d5.5afb6da6fb6d145a - 2b6089bc73e3f607.b94cc7e3cc875a1a.6d9175acf05d932a.c1201f6ec2f97db9 - 9576b15484baa800.cb61dc2473d7fb7e.e4c30db58ef7bfac.63b39b4640561774 - 2c8d775a72b41426.6295ff69be97b755.199005b67aae4747.dcbfa86b96dc2e4d -- 0000000000008713 --VPEXTRW_128_0x4(mem) -+ 080ec0cadf997e6d -+VAESKEYGENASSIST_0xB2(mem) - before - c36d61503898c303.4af1d63cd85e7626.5ab3ac9eccd44acb.6844581d500f66a4 - e9a806e7bbe6b839.4dedcb65524309ac.8f865fafb6996f0b.2d2b0255ada45972 -@@ -43327,13 +43327,13 @@ VPEXTRW_128_0x4(mem) - e6e14dfdb69ca536.6ee1633cf4efb5f8.207ec91594ec629b.89c14ce869a0ab0b - d808e41b021e812f - after -- c36d61503898c303.4af1d63cd85e7626.5ab3ac9eccd44acb.6844581d500fe442 -+ c36d61503898c303.4af1d63cd85e7626.5ab3ac9eccd44acb.6844581d500f66a4 - e9a806e7bbe6b839.4dedcb65524309ac.8f865fafb6996f0b.2d2b0255ada45972 -- 568a2b7d878e1a3b.8fcf50417def0a63.dddb95889bf2e442.c49100ca2cfb5c5b -+ 0000000000000000.0000000000000000.0bbe6d23be6d910b.a4451bd8451b6aa4 - e6e14dfdb69ca536.6ee1633cf4efb5f8.207ec91594ec629b.89c14ce869a0ab0b - d808e41b021e812f - --VPEXTRW_128_0x4(reg) -+VAESKEYGENASSIST_0xB2(reg) - before - 0db3c3d090011b73.7477e653641d1456.4470ffc354ce4617.333b7742bf92a843 - 840ce671b1d5b483.de19746bae1c24c7.6ec920403918f86b.f4de1bfc38f07066 -@@ -43341,12 +43341,12 @@ VPEXTRW_128_0x4(reg) - a7fae42b1b82d7b4.b3b15d9184c51649.2f03e3d0ff1fb264.ed0536c3820679ca - dc21a5a98bd53165 - after -- 0db3c3d090011b73.7477e653641d1456.4470ffc354ce4617.333b7742bf92a843 -+ 0000000000000000.0000000000000000.fd3b969c3b962efd.d8b22391b22323d8 - 840ce671b1d5b483.de19746bae1c24c7.6ec920403918f86b.f4de1bfc38f07066 - 995f476c01278a0a.ff937331afa591b3.4935c3213e5a08a0.3e32322d1a13772f - a7fae42b1b82d7b4.b3b15d9184c51649.2f03e3d0ff1fb264.ed0536c3820679ca -- 0000000000004617 --VPEXTRW_128_0x4(mem) -+ dc21a5a98bd53165 -+VAESKEYGENASSIST_0xB2(mem) - before - e953fbcb518d5c2a.0c28b81c9b73d82e.d53faf78488771b3.7d7e7cbb19f33160 - ee67b215f139b645.2334bfaa1e85c824.4308e6d018f85c1e.90f18a4c2763c243 -@@ -43354,13 +43354,13 @@ VPEXTRW_128_0x4(mem) - 556537d12d9ee630.d619574d9c3c6932.6f7ff0874a13d4a5.70f3f61591440a69 - f6194b2424ce3804 - after -- e953fbcb518d5c2a.0c28b81c9b73d82e.d53faf78488771b3.7d7e7cbb19f393b5 -+ e953fbcb518d5c2a.0c28b81c9b73d82e.d53faf78488771b3.7d7e7cbb19f33160 - ee67b215f139b645.2334bfaa1e85c824.4308e6d018f85c1e.90f18a4c2763c243 -- c929487386e5fbe3.486bf6414044e541.d7da7d860f2293b5.c2aa09f1c5faa1b7 -+ 0000000000000000.0000000000000000.bc0375cb037579bc.eafff3a2fff310ea - 556537d12d9ee630.d619574d9c3c6932.6f7ff0874a13d4a5.70f3f61591440a69 - f6194b2424ce3804 - --VPEXTRW_128_0x5(reg) -+VAESKEYGENASSIST_0xFF(reg) - before - b067068a1c236835.6de6fd1b026f3457.2b8ae03acefa90a3.e5c4bcbee4d7d919 - fa2b22b315cfd6a7.ef79163d1f65a185.a20a8c747309983f.17755c16fa795f3f -@@ -43368,12 +43368,12 @@ VPEXTRW_128_0x5(reg) - ae416fff775e5b01.9c062dbaa7edc6a5.65663e7f844c36aa.1b4a08de0787dd4b - a5060c25370c4d89 - after -- b067068a1c236835.6de6fd1b026f3457.2b8ae03acefa90a3.e5c4bcbee4d7d919 -+ 0000000000000000.0000000000000000.8590d99590d96a85.ff9e4c4c9e4cb3ff - fa2b22b315cfd6a7.ef79163d1f65a185.a20a8c747309983f.17755c16fa795f3f - 30b09c0caa5fbd07.b5ebfc24a38ae8e6.96e5586726f6bbb3.df5d4b7da7052140 - ae416fff775e5b01.9c062dbaa7edc6a5.65663e7f844c36aa.1b4a08de0787dd4b -- 000000000000cefa --VPEXTRW_128_0x5(mem) -+ a5060c25370c4d89 -+VAESKEYGENASSIST_0xFF(mem) - before - 5b5fd43e539f2d29.d02b96fa1959ea40.819624ed4a97f7ee.69da3c29289744d1 - 171fdd16764d3b55.f2ba0f672cdaa671.3e695da7a59637ef.008d4dcfaf6422d3 -@@ -43381,13 +43381,13 @@ VPEXTRW_128_0x5(mem) - 14079fae4227cc03.a6f7e54c12a49957.b4048665f9c1d2c3.52e099c4d4b13e1b - c718cbe9aa4af4b8 - after -- 5b5fd43e539f2d29.d02b96fa1959ea40.819624ed4a97f7ee.69da3c292897d7f5 -+ 5b5fd43e539f2d29.d02b96fa1959ea40.819624ed4a97f7ee.69da3c29289744d1 - 171fdd16764d3b55.f2ba0f672cdaa671.3e695da7a59637ef.008d4dcfaf6422d3 -- b613a297bc20313a.703ad6b44b6fcd3f.b04a54d6d7f541d1.84cb6ddfb43e0c5d -+ 0000000000000000.0000000000000000.550c90c90c903655.a5f95714f957eba5 - 14079fae4227cc03.a6f7e54c12a49957.b4048665f9c1d2c3.52e099c4d4b13e1b - c718cbe9aa4af4b8 - --VPEXTRW_128_0x5(reg) -+VAESKEYGENASSIST_0xFF(reg) - before - 3dbe01bcd29469e1.0ec65148236bc8dd.f03c3a9b1e044764.24646e402904a6ef - 122036a8e91bda42.7e1e324f7cfae0f3.aa57d00c0a1b1214.dd36885383cd7882 -@@ -43395,12 +43395,12 @@ VPEXTRW_128_0x5(reg) - 44438e7c53129f59.33c4765904275786.dd3ab00af49ff207.9a6043d1221a098b - 5750db15a0b74059 - after -- 3dbe01bcd29469e1.0ec65148236bc8dd.f03c3a9b1e044764.24646e402904a6ef -+ 0000000000000000.0000000000000000.d7044ff5044f0ad7.7eea5aacea5a537e - 122036a8e91bda42.7e1e324f7cfae0f3.aa57d00c0a1b1214.dd36885383cd7882 - a08866198b6c8286.41d9c0b168dfd172.3092a30d73753710.bb46508a222506a7 - 44438e7c53129f59.33c4765904275786.dd3ab00af49ff207.9a6043d1221a098b -- 0000000000001e04 --VPEXTRW_128_0x5(mem) -+ 5750db15a0b74059 -+VAESKEYGENASSIST_0xFF(mem) - before - cce19640b809653e.5a9da93bdd996b68.30abd1336bdd2d5a.0f9bf16d2a247fa3 - d6e0ef40851b3566.3fe1b3c3c68e225f.145a4b2bba0d101b.210164a3b0911990 -@@ -43408,13 +43408,13 @@ VPEXTRW_128_0x5(mem) - 19596c6bafb0c62d.e15b84df23ef45b4.014091257e0ced12.540bcd391e506710 - 2e47bc713ebb93fa - after -- cce19640b809653e.5a9da93bdd996b68.30abd1336bdd2d5a.0f9bf16d2a240cc3 -+ cce19640b809653e.5a9da93bdd996b68.30abd1336bdd2d5a.0f9bf16d2a247fa3 - d6e0ef40851b3566.3fe1b3c3c68e225f.145a4b2bba0d101b.210164a3b0911990 -- 511a63ff23f96cfc.4d5da881aa7c02ea.bb9d622d0cc3bcf4.6fb804192371fd7b -+ 0000000000000000.0000000000000000.c30462c104623ec3.3c76145e7614a13c - 19596c6bafb0c62d.e15b84df23ef45b4.014091257e0ced12.540bcd391e506710 - 2e47bc713ebb93fa - --VPEXTRW_128_0x5(reg) -+VAESKEYGENASSIST_0xFF(reg) - before - 57b9cc2b1e3dbce6.0a69886f444afe24.5729444bd0742869.c20e54ff2bf45ea1 - 2dabf8d55a621f80.001832f7ffd6d10e.0b11e3304b96e7b7.dad427a72f85cccc -@@ -43422,12 +43422,12 @@ VPEXTRW_128_0x5(reg) - 4c419aa659c6826c.6b7f214355ed376a.9d61ae141ce2e7c8.7f78ef12afd88fa8 - c4eedbad62b05bb1 - after -- 57b9cc2b1e3dbce6.0a69886f444afe24.5729444bd0742869.c20e54ff2bf45ea1 -+ 0000000000000000.0000000000000000.2dcbd0b3cbd04c2d.673f58e83f581767 - 2dabf8d55a621f80.001832f7ffd6d10e.0b11e3304b96e7b7.dad427a72f85cccc - 0b693fda8fb6f873.d731e6effb5dfb16.59605dfa30e1bd47.255e870aa7cdf3c0 - 4c419aa659c6826c.6b7f214355ed376a.9d61ae141ce2e7c8.7f78ef12afd88fa8 -- 000000000000d074 --VPEXTRW_128_0x5(mem) -+ c4eedbad62b05bb1 -+VAESKEYGENASSIST_0xFF(mem) - before - d08cc7c6dc631407.4e7e07a5531efa16.97cf5ddf28924233.3362d2ecaa24a1e4 - 7f1d30493afd76d5.6b6b804319489c1e.39ed18af9156d8a0.77adc6ee76342647 -@@ -43435,13 +43435,13 @@ VPEXTRW_128_0x5(mem) - 354c653d1012238b.6a888c0d7b474df6.4cc3f99c93719410.79550b1b3beb8595 - ef4954206baad5d8 - after -- d08cc7c6dc631407.4e7e07a5531efa16.97cf5ddf28924233.3362d2ecaa24ab47 -+ d08cc7c6dc631407.4e7e07a5531efa16.97cf5ddf28924233.3362d2ecaa24a1e4 - 7f1d30493afd76d5.6b6b804319489c1e.39ed18af9156d8a0.77adc6ee76342647 -- ac6e902297883c47.005503ed48d2a42f.2ca5cda0ab47b4db.c59085841e9db49e -+ 0000000000000000.0000000000000000.9e888ab3888a4c9e.cec3aa4ac3aab5ce - 354c653d1012238b.6a888c0d7b474df6.4cc3f99c93719410.79550b1b3beb8595 - ef4954206baad5d8 - --VPEXTRW_128_0x6(reg) -+VPCLMULQDQ_0x00(reg) - before - 82b85dfd4a67e212.f5812a86c0a7e7cb.035015104f34d41f.7412169164de326c - 90ed212073ade6ef.c8d95ce9c4514333.28f99c635f247555.8260a2693a9c4a1b -@@ -43449,12 +43449,12 @@ VPEXTRW_128_0x6(reg) - 8addcae41405c545.1627f3ad361ab72e.871d91a5a53ef49a.bc24f477683adc20 - a133b284f731cdcf - after -- 82b85dfd4a67e212.f5812a86c0a7e7cb.035015104f34d41f.7412169164de326c -+ 0000000000000000.0000000000000000.280733371e1b4cbd.418d250cb7890818 - 90ed212073ade6ef.c8d95ce9c4514333.28f99c635f247555.8260a2693a9c4a1b - 74369cf382091d1c.89227552381ef5f0.36cf1c7148a36b45.5177181232b79a48 - 8addcae41405c545.1627f3ad361ab72e.871d91a5a53ef49a.bc24f477683adc20 -- 0000000000001510 --VPEXTRW_128_0x6(mem) -+ a133b284f731cdcf -+VPCLMULQDQ_0x00(mem) - before - db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.7830f76d13804901 - 45a7c64691acaa60.bb7930cd30135339.00930beb46cc5ddb.65544b342df6a926 -@@ -43462,13 +43462,13 @@ VPEXTRW_128_0x6(mem) - 1d3132b8e188135b.041f333aa536702c.667f8400d4c7169b.a4ffa96fd7aa7558 - ad1eadbb9e025abd - after -- db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.7830f76d13809ea4 -+ db70cf25fba82880.2d30a75ec5301815.49b351e7dc4f4518.7830f76d13804901 - 45a7c64691acaa60.bb7930cd30135339.00930beb46cc5ddb.65544b342df6a926 -- bda313d3d4480f9a.8f04609df13cb25d.15939ea48f9ab9a3.aad58766902a4eb4 -+ 0000000000000000.0000000000000000.108aa2a1cc330ab5.1541a4f85d5f3f26 - 1d3132b8e188135b.041f333aa536702c.667f8400d4c7169b.a4ffa96fd7aa7558 - ad1eadbb9e025abd - --VPEXTRW_128_0x6(reg) -+VPCLMULQDQ_0x00(reg) - before - 227d8db782bc3990.431ea0e2d37972ce.7815a510e78eca53.cd233bea305e2fef - 5f6a47cd1f674d7d.0934d73bc726e720.4531b38c54cffc7d.284b3e4ebf6bc2cd -@@ -43476,12 +43476,12 @@ VPEXTRW_128_0x6(reg) - a11936fbf1b90653.e90d952e23e50510.5e0f90221d3dd78c.26551934e91940d1 - 81d0e98ebbd2a550 - after -- 227d8db782bc3990.431ea0e2d37972ce.7815a510e78eca53.cd233bea305e2fef -+ 0000000000000000.0000000000000000.08a0519edc909272.4645a774583ce09b - 5f6a47cd1f674d7d.0934d73bc726e720.4531b38c54cffc7d.284b3e4ebf6bc2cd - c02fd66a108cd32f.4c3f55b1d89c2f7d.c9c1581887854257.51c20a189efb895f - a11936fbf1b90653.e90d952e23e50510.5e0f90221d3dd78c.26551934e91940d1 -- 000000000000a510 --VPEXTRW_128_0x6(mem) -+ 81d0e98ebbd2a550 -+VPCLMULQDQ_0x00(mem) - before - 3ffff51230317208.5e7463eb5f792494.ba6914a0c3102706.62685714b182f8c9 - 3caeb9ad65426424.528c59a5f558679f.9c1e4cf2d5264f8b.2f17a95ce0e0e1ba -@@ -43489,13 +43489,13 @@ VPEXTRW_128_0x6(mem) - 64bb5ad47daba63a.5422922c0ca54ec2.04c6dce6bc48a3ef.98ace09b7c19fa66 - eb28bc6a220ba17a - after -- 3ffff51230317208.5e7463eb5f792494.ba6914a0c3102706.62685714b182bb10 -+ 3ffff51230317208.5e7463eb5f792494.ba6914a0c3102706.62685714b182f8c9 - 3caeb9ad65426424.528c59a5f558679f.9c1e4cf2d5264f8b.2f17a95ce0e0e1ba -- 55a9b249751136d1.dbac159750e30c20.6bf9bb10743539ca.236a836545e4cd0a -+ 0000000000000000.0000000000000000.0e76667780be15ea.6e9e4f47b649efea - 64bb5ad47daba63a.5422922c0ca54ec2.04c6dce6bc48a3ef.98ace09b7c19fa66 - eb28bc6a220ba17a - --VPEXTRW_128_0x6(reg) -+VPCLMULQDQ_0x00(reg) - before - 792b133ed34701f1.46b22f39981b6e8c.1938ccd0c32b6b32.41512b60cb6c4727 - 9c01e2832a585477.d758ac63e36e4bf3.863bc0ef14009c1b.ff66256abaace29e -@@ -43503,12 +43503,12 @@ VPEXTRW_128_0x6(reg) - 1456d4113b2ac663.76e48fbb77ea32ae.c738c24feec7320b.6e5d07dfadb0ecf8 - d7d7e722e98dd332 - after -- 792b133ed34701f1.46b22f39981b6e8c.1938ccd0c32b6b32.41512b60cb6c4727 -+ 0000000000000000.0000000000000000.09bcc0232d26bd30.5948b450bd936f00 - 9c01e2832a585477.d758ac63e36e4bf3.863bc0ef14009c1b.ff66256abaace29e - b1f623a5c3cad7b9.f37a4e4079aff89a.f77768f698b0202a.1ad145f1a7143080 - 1456d4113b2ac663.76e48fbb77ea32ae.c738c24feec7320b.6e5d07dfadb0ecf8 -- 000000000000ccd0 --VPEXTRW_128_0x6(mem) -+ d7d7e722e98dd332 -+VPCLMULQDQ_0x00(mem) - before - 310c61a477b7a15b.216cf0312d035d21.3c62edc0f82cb55a.54c9c967afd20d69 - 58c6f2537238119f.3586747336e1d79e.21bfe33b19803dcb.f97879ab795ceef0 -@@ -43516,13 +43516,13 @@ VPEXTRW_128_0x6(mem) - 7dfb45e52074ca27.ddf1a009fbde6686.b84a8744a88e4aab.fa5bc663971fb02d - 0e285ab0236f0a39 - after -- 310c61a477b7a15b.216cf0312d035d21.3c62edc0f82cb55a.54c9c967afd2ed19 -+ 310c61a477b7a15b.216cf0312d035d21.3c62edc0f82cb55a.54c9c967afd20d69 - 58c6f2537238119f.3586747336e1d79e.21bfe33b19803dcb.f97879ab795ceef0 -- 28d1141af61ee02a.aaee5a41f2517186.01c8ed19f5f2852d.118fcf86e8f2104e -+ 0000000000000000.0000000000000000.3269ed7caf3c7751.6f4729a5a1df4b70 - 7dfb45e52074ca27.ddf1a009fbde6686.b84a8744a88e4aab.fa5bc663971fb02d - 0e285ab0236f0a39 - --VPEXTRW_128_0x7(reg) -+VPCLMULQDQ_0x01(reg) - before - ab4287d8276f5a1f.330f01a00b478bc2.2adb4136f014f44a.220f2eaa4f614872 - 2bf549473faadb8b.26d8c237d4a2de28.edf839346a80557e.1be45d3506773bad -@@ -43530,12 +43530,12 @@ VPEXTRW_128_0x7(reg) - 48557daa1d0263a3.33bc47a96e212d04.45fa2053632882e3.2aed436e1198ee32 - f8baf3f49ebd26d3 - after -- ab4287d8276f5a1f.330f01a00b478bc2.2adb4136f014f44a.220f2eaa4f614872 -+ 0000000000000000.0000000000000000.2d8ba2788808b662.da4c4fff4127d58e - 2bf549473faadb8b.26d8c237d4a2de28.edf839346a80557e.1be45d3506773bad - ec8c9d6908accb28.3223069696918185.8293856f08adc6cd.7f9590d3e8dade89 - 48557daa1d0263a3.33bc47a96e212d04.45fa2053632882e3.2aed436e1198ee32 -- 0000000000002adb --VPEXTRW_128_0x7(mem) -+ f8baf3f49ebd26d3 -+VPCLMULQDQ_0x01(mem) - before - c5c61a50ab534499.9d9ae7761b37e2a8.056f045d775da1d2.9277064c197bc66d - 6cde366e526802af.45a8d73a9ed782e2.8308b69ccd51971b.c55733c6c635ce17 -@@ -43543,13 +43543,13 @@ VPEXTRW_128_0x7(mem) - bd623ba0e43d507d.024f3556a08a18a7.f81bed6fd393fccc.4c7053ee73071979 - 59413d74ab38d48a - after -- c5c61a50ab534499.9d9ae7761b37e2a8.056f045d775da1d2.9277064c197b8b52 -+ c5c61a50ab534499.9d9ae7761b37e2a8.056f045d775da1d2.9277064c197bc66d - 6cde366e526802af.45a8d73a9ed782e2.8308b69ccd51971b.c55733c6c635ce17 -- cbcec23ab2081d42.9dcb4760406f80fd.8b52da548d0acc0a.39e6a32e05dfd68d -+ 0000000000000000.0000000000000000.4889d8ed663c11dc.ecd119ea01104c0f - bd623ba0e43d507d.024f3556a08a18a7.f81bed6fd393fccc.4c7053ee73071979 - 59413d74ab38d48a - --VPEXTRW_128_0x7(reg) -+VPCLMULQDQ_0x01(reg) - before - bca45f2b49ff436a.1d661b8d0716598e.ce7f9c8657b48689.a52d6adbbaf8e28c - d1e7b57eeae6a2c6.c9a5e0eb349cf29e.5ea9785e047a0552.7055cd835e463b77 -@@ -43557,12 +43557,12 @@ VPEXTRW_128_0x7(reg) - 8038e9ada34a1ea0.710806ae22e4c671.3b1680b3a9072843.cc17363750cb367d - 1649341bd5194fef - after -- bca45f2b49ff436a.1d661b8d0716598e.ce7f9c8657b48689.a52d6adbbaf8e28c -+ 0000000000000000.0000000000000000.0f541bfc2c7477df.bf20a7b0242a0fa2 - d1e7b57eeae6a2c6.c9a5e0eb349cf29e.5ea9785e047a0552.7055cd835e463b77 - f35439db2a7c2c49.9bed05a88addd7dc.0e17c5494067d2ac.345f9353dc88c3b9 - 8038e9ada34a1ea0.710806ae22e4c671.3b1680b3a9072843.cc17363750cb367d -- 000000000000ce7f --VPEXTRW_128_0x7(mem) -+ 1649341bd5194fef -+VPCLMULQDQ_0x01(mem) - before - ecc008eb8780cb3d.d3dfc060f4deb477.26c360eb1abd798c.3ff2a408dbe745c5 - 2c492f93830c6691.4794ba60b7c32979.95ea8d4a8e75ad57.77f72cb4719263dc -@@ -43570,13 +43570,13 @@ VPEXTRW_128_0x7(mem) - 55c2621cc7c0e7fc.065d08f804b2a3b0.15ab551d57af87af.f3ab5ec13b7a947a - eff3fffba6cf1f5a - after -- ecc008eb8780cb3d.d3dfc060f4deb477.26c360eb1abd798c.3ff2a408dbe79b49 -+ ecc008eb8780cb3d.d3dfc060f4deb477.26c360eb1abd798c.3ff2a408dbe745c5 - 2c492f93830c6691.4794ba60b7c32979.95ea8d4a8e75ad57.77f72cb4719263dc -- b0b12300e4c8db17.3aa5d31a8886ba52.9b490bb699171dff.3f7117230894be34 -+ 0000000000000000.0000000000000000.1cd02567b9aa145d.05c9cce0bf562d4b - 55c2621cc7c0e7fc.065d08f804b2a3b0.15ab551d57af87af.f3ab5ec13b7a947a - eff3fffba6cf1f5a - --VPEXTRW_128_0x7(reg) -+VPCLMULQDQ_0x01(reg) - before - 8f93f53be61f9c7f.f84867d54700466c.09075367c6d3203d.dddee86ae54aa594 - 2fd83cef97f74795.7311ae168195b492.9df0b2d46b766ca5.d1ac3e895ff333d9 -@@ -43584,12 +43584,12 @@ VPEXTRW_128_0x7(reg) - df80ae5fb96d1548.6598f3df91ecabb2.ecaf9a54cb6f64b9.a84c28ee84a19336 - 45b6b30b68bddca5 - after -- 8f93f53be61f9c7f.f84867d54700466c.09075367c6d3203d.dddee86ae54aa594 -+ 0000000000000000.0000000000000000.6cb6829a358513c4.6f5f548ec85425e7 - 2fd83cef97f74795.7311ae168195b492.9df0b2d46b766ca5.d1ac3e895ff333d9 - 2b0ed08254e25b4a.a4e8b3ca908aec9b.206420aa8e26c495.cbe2d567e0b7efab - df80ae5fb96d1548.6598f3df91ecabb2.ecaf9a54cb6f64b9.a84c28ee84a19336 -- 0000000000000907 --VPEXTRW_128_0x7(mem) -+ 45b6b30b68bddca5 -+VPCLMULQDQ_0x01(mem) - before - 7cebf3aba7178525.a77cd0f46323b13b.93eee9409fc6ad04.5e1c1b40c0dd87bc - 2ab962b95ebc4ce1.de4c34aced906bd1.0ab611d9d624adbd.d3f99ed906fd6a4b -@@ -43597,13 +43597,13 @@ VPEXTRW_128_0x7(mem) - 5b4bc2cea2151fc0.0e9cb03513c02790.44cce764329d9a12.312ea0c2fb8160bc - d41f15eae1fdeaf5 - after -- 7cebf3aba7178525.a77cd0f46323b13b.93eee9409fc6ad04.5e1c1b40c0dda6bc -+ 7cebf3aba7178525.a77cd0f46323b13b.93eee9409fc6ad04.5e1c1b40c0dd87bc - 2ab962b95ebc4ce1.de4c34aced906bd1.0ab611d9d624adbd.d3f99ed906fd6a4b -- 2bea7e20a9b8eb07.e23ed5f3f4407eb3.a6bce79653126808.a590218b3b5b4911 -+ 0000000000000000.0000000000000000.026c356b874efad6.6f15ce802811daec - 5b4bc2cea2151fc0.0e9cb03513c02790.44cce764329d9a12.312ea0c2fb8160bc - d41f15eae1fdeaf5 - --VAESENC(reg) -+VPCLMULQDQ_0x10(reg) - before - e8af7e70895b246a.96a8aaae67e1a33a.beb3bfdfe79ba112.beb28e2d8ed0ff06 - ca2ad6be90264ac7.b8cdb3ac142734a1.4ece005b0b5e2ae5.f13957de83b85211 -@@ -43611,12 +43611,12 @@ VAESENC(reg) - 68104366293349e8.229f15b294536de5.7d45067db5c95431.f25e3fa9aad4b51b - 7893579b14213d72 - after -- 0000000000000000.0000000000000000.165b4a5d3a0ef677.33f4180dee78a3da -+ 0000000000000000.0000000000000000.087cef611e604443.b822c211b5d4bbd6 - ca2ad6be90264ac7.b8cdb3ac142734a1.4ece005b0b5e2ae5.f13957de83b85211 - d6db194191ea97b8.9e8658b4c4f48e21.193b6e161c94fcb6.b92ebe642e60505f - 68104366293349e8.229f15b294536de5.7d45067db5c95431.f25e3fa9aad4b51b - 7893579b14213d72 --VAESENC(mem) -+VPCLMULQDQ_0x10(mem) - before - 279981258852a38f.dd135198f48e9903.21e366929f508c19.d437c2fa72896d01 - db3e39332073a49f.8f313e428c86c6b6.761fc74102f8a8ea.7c5ea0fbf06185d3 -@@ -43626,11 +43626,11 @@ VAESENC(mem) - after - 279981258852a38f.dd135198f48e9903.21e366929f508c19.d437c2fa72896d01 - db3e39332073a49f.8f313e428c86c6b6.761fc74102f8a8ea.7c5ea0fbf06185d3 -- 0000000000000000.0000000000000000.9ede4f0204e4a6a2.c4ee85f509c52b8f -+ 0000000000000000.0000000000000000.0fd9acdcaa0bf4e6.160179850555a27b - c291438b32b76647.1deea5b3997ea394.97afabb83d76c712.2b7baf369e879c2c - eb09d84805ed150a - --VAESENC(reg) -+VPCLMULQDQ_0x10(reg) - before - 6afb138d9d9a7b9b.acd78eade4f19f37.b12518514696ca16.1a9b25584e6541c1 - 069f5b71021b0b89.0ceb57032a4c63c9.f3a65918307cbedf.64af9f77262da8bd -@@ -43638,12 +43638,12 @@ VAESENC(reg) - 002802c7a0c6982d.9bad53fce8927b86.f0b93ad231def8f9.bd7d84df9e7f2c4a - 83d1e700751fc133 - after -- 0000000000000000.0000000000000000.612fdb15d9819a66.2aa7bccbbd4b5dae -+ 0000000000000000.0000000000000000.089b750eb481718c.580af88c0998974c - 069f5b71021b0b89.0ceb57032a4c63c9.f3a65918307cbedf.64af9f77262da8bd - 193fac60cffb0080.bd991a7a22d36d2a.3ebe6674f5bab99c.51b69500e2ddb731 - 002802c7a0c6982d.9bad53fce8927b86.f0b93ad231def8f9.bd7d84df9e7f2c4a - 83d1e700751fc133 --VAESENC(mem) -+VPCLMULQDQ_0x10(mem) - before - 817c3a4f83c93319.18a6591012090d3c.82f27f7797964708.64e3d29c7f74b7a1 - 924af9b8e58a3d28.bb05aea9c04f9b58.4d3619d54cea8ddd.f68828407c073141 -@@ -43653,11 +43653,11 @@ VAESENC(mem) - after - 817c3a4f83c93319.18a6591012090d3c.82f27f7797964708.64e3d29c7f74b7a1 - 924af9b8e58a3d28.bb05aea9c04f9b58.4d3619d54cea8ddd.f68828407c073141 -- 0000000000000000.0000000000000000.d6de97ce5ad42371.078d7e7c8fe82d84 -+ 0000000000000000.0000000000000000.7aff9fb98afbb6b1.47c9ec1a7de90d08 - 5c84ad89137e0d6e.15953f774215f669.04e687ef35b37b2e.e47203c2f0544918 - f7507f79a0275ea7 - --VAESENC(reg) -+VPCLMULQDQ_0x10(reg) - before - 99d8abb96e2720dd.ce8699c817ca49ff.855e73854ead3ab6.a6eb5382a2409a02 - 255781eef7e1c967.c2dce1d2de5c0f68.f0389592067888c1.9e1e7ea9844d23d9 -@@ -43665,12 +43665,12 @@ VAESENC(reg) - 6a6a20e7a9b0c226.a4b476f328832473.2a4f9059ecd930bf.fc3dde631a19663f - 1ac10bcf04f09826 - after -- 0000000000000000.0000000000000000.e8535ae351910253.d5b395e2ebcd488b -+ 0000000000000000.0000000000000000.54bc07d95c2d0496.b8f34e288623d90d - 255781eef7e1c967.c2dce1d2de5c0f68.f0389592067888c1.9e1e7ea9844d23d9 - f619ff84d7e095f1.16520291864019d5.b36fa00a06031b35.c64b8350f8e7d3df - 6a6a20e7a9b0c226.a4b476f328832473.2a4f9059ecd930bf.fc3dde631a19663f - 1ac10bcf04f09826 --VAESENC(mem) -+VPCLMULQDQ_0x10(mem) - before - fea4867ed57625c0.dc95e18309de8ab2.4acebbe3e230eb6e.b12361eb5187030a - 82b0cc5da6b9c838.a7e83cc494f52a43.e26c4c4dd0542cf1.a4390f2cd397cfc3 -@@ -43680,11 +43680,11 @@ VAESENC(mem) - after - fea4867ed57625c0.dc95e18309de8ab2.4acebbe3e230eb6e.b12361eb5187030a - 82b0cc5da6b9c838.a7e83cc494f52a43.e26c4c4dd0542cf1.a4390f2cd397cfc3 -- 0000000000000000.0000000000000000.0c1311d92968d28d.cf2964ac5e2c3974 -+ 0000000000000000.0000000000000000.2d1a5a4daf8b8565.420c1c00ab53ab32 - de75a65dbea54274.bc31b5e6990fe11e.5c62433fb52e0641.3e57f46c9d13452e - 9df722431c966738 - --VAESENCLAST(reg) -+VPCLMULQDQ_0x11(reg) - before - d8071d7828ac725f.6dc733543d659290.bdc0ca9f4b2970c1.f553a19fe5fc1967 - 4bd5e2795ce1a350.0d72792c2c11e83a.89a66aad975ec618.f1f83b2ab87194c4 -@@ -43692,12 +43692,12 @@ VAESENCLAST(reg) - 49d7b68cafda673f.f106252cd05f98eb.eea63d777042bb90.838e136cba7eb4d9 - d0164afd1f2dd2e9 - after -- 0000000000000000.0000000000000000.f26eb0eebb942363.4139392fecc0d69a -+ 0000000000000000.0000000000000000.3e8fc63d2e5c9660.0445fb4ab72f3690 - 4bd5e2795ce1a350.0d72792c2c11e83a.89a66aad975ec618.f1f83b2ab87194c4 - 52ac6bb155c236b7.9b43f6d0a9b6009f.7a2f927b1a3721ce.2d1d8dca4b983486 - 49d7b68cafda673f.f106252cd05f98eb.eea63d777042bb90.838e136cba7eb4d9 - d0164afd1f2dd2e9 --VAESENCLAST(mem) -+VPCLMULQDQ_0x11(mem) - before - f083ad6899b448e1.8ca3bf7604b67195.ec87822cbc196a49.3f58670c340bd109 - bf9fb899411cd3ed.765d80dbf3e09164.68928abd89ef33e6.ca920ca6031c9fe6 -@@ -43707,11 +43707,11 @@ VAESENCLAST(mem) - after - f083ad6899b448e1.8ca3bf7604b67195.ec87822cbc196a49.3f58670c340bd109 - bf9fb899411cd3ed.765d80dbf3e09164.68928abd89ef33e6.ca920ca6031c9fe6 -- 0000000000000000.0000000000000000.4bc85956c88514c7.4417a42871d42f87 -+ 0000000000000000.0000000000000000.21ac0ef64fd8f834.1bacc5c5aa91e956 - db17b7fc91c416f4.b4c51ec708540220.5375873d3920998b.ffc8b99a2f4c517b - 605eb7cbc581ae8b - --VAESENCLAST(reg) -+VPCLMULQDQ_0x11(reg) - before - 6bab22b2d530b2af.df0ba307701c4747.bf0df32568b5cb64.7ae575065393aeec - 7cfaf3b9fce59a92.02de2689ef867d5e.e17172afd0959ad1.9210fe0fbe52aa3b -@@ -43719,12 +43719,12 @@ VAESENCLAST(reg) - 20d1bbdcfd8e0646.1555e79d3bc1e689.dec15af32a0439da.05c1cd90f9e54555 - 18e10ce101d25d78 - after -- 0000000000000000.0000000000000000.08f539b69281eb2b.d96324356f43f347 -+ 0000000000000000.0000000000000000.2d7907232b9d4347.c4c0c231c8800785 - 7cfaf3b9fce59a92.02de2689ef867d5e.e17172afd0959ad1.9210fe0fbe52aa3b - ef98284ed62ba2e0.205ebf6c290e7365.783f95cfdd81ab15.77c09c43976948a5 - 20d1bbdcfd8e0646.1555e79d3bc1e689.dec15af32a0439da.05c1cd90f9e54555 - 18e10ce101d25d78 --VAESENCLAST(mem) -+VPCLMULQDQ_0x11(mem) - before - 8cebd522ca3a4c3a.6bf1aacf109a0170.bc901c0940aa92f6.7144bc8653aa81cc - 3daaa53f712bcdc6.2c44f192a8dcd00a.f3dbd89a54d533d8.8b14b7f4f500bf98 -@@ -43734,11 +43734,11 @@ VAESENCLAST(mem) - after - 8cebd522ca3a4c3a.6bf1aacf109a0170.bc901c0940aa92f6.7144bc8653aa81cc - 3daaa53f712bcdc6.2c44f192a8dcd00a.f3dbd89a54d533d8.8b14b7f4f500bf98 -- 0000000000000000.0000000000000000.9c6a14b17dc9f397.97fd7f395ea9288a -+ 0000000000000000.0000000000000000.6c8c404be77ada78.8052a7517c18c450 - c67a46bdc7d678ee.80b2733edd2fda3b.7ed0dbe01c2342a8.c8ca691113e90b6d - a3481898c69492ce - --VAESENCLAST(reg) -+VPCLMULQDQ_0x11(reg) - before - 754450aa621fffb9.562310f7aea81ae2.cb66a7fdb1598c2b.8a13186b075d28ef - 9c080db382168dd9.92b2d1bce3333e50.fc7c223d7ce8023b.9595cecd710af45b -@@ -43746,12 +43746,12 @@ VAESENCLAST(reg) - 541a075bc174ff69.83b1249ba4a0ff4d.8001def165672969.178992c334ea2950 - 47939830c5360a32 - after -- 0000000000000000.0000000000000000.7f6b5f4cf30ee4f4.d9330f4cc7aeeb2e -+ 0000000000000000.0000000000000000.25b9a4cba7b58b8e.7ea5917915579e2a - 9c080db382168dd9.92b2d1bce3333e50.fc7c223d7ce8023b.9595cecd710af45b - 72e14b20c30379da.58f203fa8181a166.6f41e06bd9697716.7a2378f177356017 - 541a075bc174ff69.83b1249ba4a0ff4d.8001def165672969.178992c334ea2950 - 47939830c5360a32 --VAESENCLAST(mem) -+VPCLMULQDQ_0x11(mem) - before - e50d07224524c1e8.9f013cd216f55a32.eeb9af8d699c1334.8b07173dbb6e52e0 - cfc25a86d1c0089f.ade0e6f06010c7e1.77d720bbec7f9a44.eba187b9770a2f26 -@@ -43761,11 +43761,11 @@ VAESENCLAST(mem) - after - e50d07224524c1e8.9f013cd216f55a32.eeb9af8d699c1334.8b07173dbb6e52e0 - cfc25a86d1c0089f.ade0e6f06010c7e1.77d720bbec7f9a44.eba187b9770a2f26 -- 0000000000000000.0000000000000000.208bba6780fba42f.7e09af6b4ebc4517 -+ 0000000000000000.0000000000000000.2a5b651b5602e2ed.63ac2f0c598e09d0 - f3119c557b3438be.85ba8ad1424ac79e.4f85a57b9930f196.1fbcfcf69333f3d1 - aad6fa8e2bd8538e - --VAESDEC(reg) -+VPCLMULQDQ_0xFF(reg) - before - fab31f079a4257cb.e6428398d123997e.074c7c6c127fd106.57adb1e5fc15382f - 6d9f67cd7afd3b33.93df3ffda2f17bef.bd07d35e4681dd02.eb1a933b8c12e2a2 -@@ -43773,12 +43773,12 @@ VAESDEC(reg) - 28d351f104989136.8f8c23dc2858b193.3627a0f74c15ea6d.2bf7ca5ca5854ec8 - 8ffe16fe661388d3 - after -- 0000000000000000.0000000000000000.54c337ed596f89c7.6a3d58009a17fe8f -+ 0000000000000000.0000000000000000.02ebbb7c33a74d6c.cf40d15c8af7d382 - 6d9f67cd7afd3b33.93df3ffda2f17bef.bd07d35e4681dd02.eb1a933b8c12e2a2 - 5de6ce4c6a963a72.d8b44b700ba9993d.04368b137bd92741.e999c76a6633ab1c - 28d351f104989136.8f8c23dc2858b193.3627a0f74c15ea6d.2bf7ca5ca5854ec8 - 8ffe16fe661388d3 --VAESDEC(mem) -+VPCLMULQDQ_0xFF(mem) - before - ef7a293dc4ea1569.28b3eb26e48f7b29.9535433014097d1e.b0240f7755c06432 - 28397f04dc14b1b5.bbd29859a60735f7.c7792855ebc8b90a.ce7ad3fd3366cf3e -@@ -43788,11 +43788,11 @@ VAESDEC(mem) - after - ef7a293dc4ea1569.28b3eb26e48f7b29.9535433014097d1e.b0240f7755c06432 - 28397f04dc14b1b5.bbd29859a60735f7.c7792855ebc8b90a.ce7ad3fd3366cf3e -- 0000000000000000.0000000000000000.f8ba522ea5379f9b.e57cf860940f6359 -+ 0000000000000000.0000000000000000.6c06e98ff94b1d28.c92231397e41dccc - 96acdfd9a8970422.06fd1b6543ad09d7.1a052ec5cda175b2.65614acfdcd56ad5 - 978af6f3e0b612b9 - --VAESDEC(reg) -+VPCLMULQDQ_0xFF(reg) - before - dd3ce7ce28c19b92.82f8e3c09407349a.76a1ea1755f19b40.f5e547e90ed36cc8 - 93c218cc5085430d.b7b619dfaafb6278.e8b3bc76bae7ec35.6a90148eac44c3ed -@@ -43800,12 +43800,12 @@ VAESDEC(reg) - bf7d30e1b261db99.6db80c76c1a1ab19.435559ebeb17bd71.957bbc0f6910851b - 03528ec3c183677b - after -- 0000000000000000.0000000000000000.a17ac7f7dc0aa337.a388a8ef8ea4ca75 -+ 0000000000000000.0000000000000000.601d7d40ca27e15b.3cf3f0b2db8e0ad5 - 93c218cc5085430d.b7b619dfaafb6278.e8b3bc76bae7ec35.6a90148eac44c3ed - 15698859f58b44d6.12b2fe2305804bea.b9818dee0d1b3961.56d412a2c1ff3850 - bf7d30e1b261db99.6db80c76c1a1ab19.435559ebeb17bd71.957bbc0f6910851b - 03528ec3c183677b --VAESDEC(mem) -+VPCLMULQDQ_0xFF(mem) - before - 7d2604a9e465999b.ec4a0ed024924400.a594c1c5fb6a3e34.e37c1cd9ef69b611 - ddc09badefc2d8a8.fa1c1c93e6abbaba.961198fdcee7bf65.f642d324b59d5eec -@@ -43815,11 +43815,11 @@ VAESDEC(mem) - after - 7d2604a9e465999b.ec4a0ed024924400.a594c1c5fb6a3e34.e37c1cd9ef69b611 - ddc09badefc2d8a8.fa1c1c93e6abbaba.961198fdcee7bf65.f642d324b59d5eec -- 0000000000000000.0000000000000000.2a63911c4a5db960.cb012d897ce61fa3 -+ 0000000000000000.0000000000000000.5b44f77f4fa5dc87.77b3dee1ee726164 - c27e18bf2a196d37.25febe40ccc2c0d2.13229cd4b2307ebb.e0da0a82f9d7ad06 - 7044836daff7cc9c - --VAESDEC(reg) -+VPCLMULQDQ_0xFF(reg) - before - e27ede6497288b1d.ff38f8a5932c3a12.fba6480427d8c888.574dc24bfa123437 - 92d219d54ef62636.93eae75a54ea0489.2184f44b4306cd40.c449f95b4bd9c87b -@@ -43827,12 +43827,12 @@ VAESDEC(reg) - 1cfa1cd2979adee0.2f66e6dd4b947ffd.cc0c9f112dd8c165.89e990f37a447d05 - 9923e653900015a5 - after -- 0000000000000000.0000000000000000.0a3241715cbeef49.b2626ff0d799e32d -+ 0000000000000000.0000000000000000.1ed4589382f098ea.cdd18a0c0236a780 - 92d219d54ef62636.93eae75a54ea0489.2184f44b4306cd40.c449f95b4bd9c87b - dc8d2f2b70edd893.5a6062c8885e87c8.f2e2bd81bcd70ca6.36e4bfefc290f7b1 - 1cfa1cd2979adee0.2f66e6dd4b947ffd.cc0c9f112dd8c165.89e990f37a447d05 - 9923e653900015a5 --VAESDEC(mem) -+VPCLMULQDQ_0xFF(mem) - before - 425f3ffb1fd07cba.ae67dd36618874c8.f0c8ee83ba99a752.0950966932942729 - 5f6916d844c16e73.ee1f6dc36a43d5f7.7852f7a8f178bcf3.07f99ff468977ba0 -@@ -43842,11 +43842,11 @@ VAESDEC(mem) - after - 425f3ffb1fd07cba.ae67dd36618874c8.f0c8ee83ba99a752.0950966932942729 - 5f6916d844c16e73.ee1f6dc36a43d5f7.7852f7a8f178bcf3.07f99ff468977ba0 -- 0000000000000000.0000000000000000.8b33137756974c0f.eb6bf30fb8a698b6 -+ 0000000000000000.0000000000000000.2a93673821bebb8b.4e9c4aecca5fb316 - 6a172edcbd33e27b.e89eea08a752ebdd.4d0df81c24f59ccc.b2a8d454d5a4dd51 - 1747f80045c562e4 - --VAESDECLAST(reg) -+VCMPSS_128_0x9(reg) - before - ac7b1e90555ec5d9.0f5268dd4acddc23.5afecf9913be18eb.51d6e94359abdf5c - ce90406ea1fa42db.988c0fc2ddb7501e.ead973022d2701f1.8df7ca98c56bffe8 -@@ -43854,12 +43854,12 @@ VAESDECLAST(reg) - 248c6dc95f6c78b8.cb2899e782ac9abb.d32fea11de20f494.19704d7cb43bc5a5 - 2261e7e46f62e32f - after -- 0000000000000000.0000000000000000.f45ddadb291cf1b0.26d96ae5317f3854 -+ 0000000000000000.0000000000000000.ead973022d2701f1.8df7ca98ffffffff - ce90406ea1fa42db.988c0fc2ddb7501e.ead973022d2701f1.8df7ca98c56bffe8 - d7d25c08c6251497.e38fa17691fdfc97.f37bd3b19219e19b.dc3c17078542b79c - 248c6dc95f6c78b8.cb2899e782ac9abb.d32fea11de20f494.19704d7cb43bc5a5 - 2261e7e46f62e32f --VAESDECLAST(mem) -+VCMPSS_128_0x9(mem) - before - d2d96129d1c4cd65.110b701c095aaaeb.2b237400cdcfe7b6.e542b48dacc97889 - 04a53739f76c4174.fa9c5f6f5f7be6dc.e14cacad8e739eb3.85012e93989fa725 -@@ -43869,11 +43869,11 @@ VAESDECLAST(mem) - after - d2d96129d1c4cd65.110b701c095aaaeb.2b237400cdcfe7b6.e542b48dacc97889 - 04a53739f76c4174.fa9c5f6f5f7be6dc.e14cacad8e739eb3.85012e93989fa725 -- 0000000000000000.0000000000000000.c92aab182da124fd.031f3dafcb46d24b -+ 0000000000000000.0000000000000000.e14cacad8e739eb3.85012e9300000000 - 6269e866fcbfb2cc.311ef6c280886aa6.bb572873df6a3d65.deae1eea3d04f905 - 50348e132caa93a0 - --VAESDECLAST(reg) -+VCMPSS_128_0x9(reg) - before - bf969c76abaec992.46f9bb5c1582276c.36a9959b848b2bd7.97d16465a8d79d72 - 891e457d539ad789.1c0ddacc60bc1696.a7751122a4f2e676.39aaed9a56f45831 -@@ -43881,12 +43881,12 @@ VAESDECLAST(reg) - 9ad45a2b94606a30.12efedca01c24c32.3dfe92eeaa1a38ad.3ba4db81d36ecd78 - 535d370bdae4ff57 - after -- 0000000000000000.0000000000000000.59af9250f4f28520.66931f375dc9cae1 -+ 0000000000000000.0000000000000000.a7751122a4f2e676.39aaed9a00000000 - 891e457d539ad789.1c0ddacc60bc1696.a7751122a4f2e676.39aaed9a56f45831 - 081a8695c3fdf92f.c170c1a2fb783973.e0cd67c47d48d62f.7bac410006cd29cf - 9ad45a2b94606a30.12efedca01c24c32.3dfe92eeaa1a38ad.3ba4db81d36ecd78 - 535d370bdae4ff57 --VAESDECLAST(mem) -+VCMPSS_128_0x9(mem) - before - a0a5d189363a7d99.9999bdaa65516739.e957d9308fa60dfd.1a548e0ac7f2479d - fe4626e6047d0169.63b4ac7dcf5c2cf6.237101c1c1313601.d31b5786715e41aa -@@ -43896,11 +43896,11 @@ VAESDECLAST(mem) - after - a0a5d189363a7d99.9999bdaa65516739.e957d9308fa60dfd.1a548e0ac7f2479d - fe4626e6047d0169.63b4ac7dcf5c2cf6.237101c1c1313601.d31b5786715e41aa -- 0000000000000000.0000000000000000.c513fdedbd3bd7f4.c77876d66edc4eff -+ 0000000000000000.0000000000000000.237101c1c1313601.d31b578600000000 - 5ec6eef263f70d66.c3211ad4e4ecfd3a.31f3f5107e6ab262.492b424bda21e1ce - bd0d5b6cd18fff3c - --VAESDECLAST(reg) -+VCMPSS_128_0x9(reg) - before - 7e8f319cc5c0f778.173d59792d460dea.1309922fc68b8019.bcf1baa642307e17 - e7fec0475141052d.513e6e8fd9b204ad.9c78868fb272bc5c.1ad4ab1719cca2b5 -@@ -43908,12 +43908,12 @@ VAESDECLAST(reg) - 20d3fbbea36153b4.b80d881c440fc69f.cc1bce0f1b4e4abd.c074013772b7e45b - bfca5fbe2c1f7abb - after -- 0000000000000000.0000000000000000.35a388135908e508.19a75ec9635507ba -+ 0000000000000000.0000000000000000.9c78868fb272bc5c.1ad4ab17ffffffff - e7fec0475141052d.513e6e8fd9b204ad.9c78868fb272bc5c.1ad4ab1719cca2b5 - 54a605d9129d6508.e895aa218246aedb.bbbaf060452febaf.2766444e204bdb68 - 20d3fbbea36153b4.b80d881c440fc69f.cc1bce0f1b4e4abd.c074013772b7e45b - bfca5fbe2c1f7abb --VAESDECLAST(mem) -+VCMPSS_128_0x9(mem) - before - 0134d8cf698c59b3.a9d09e63a1180adf.9e74846a3c180925.2ce71b06cf591533 - 627dea56450c3d70.4aebea32a74ec632.74941af9856d339a.3569d3b2fdde88bd -@@ -43923,11 +43923,11 @@ VAESDECLAST(mem) - after - 0134d8cf698c59b3.a9d09e63a1180adf.9e74846a3c180925.2ce71b06cf591533 - 627dea56450c3d70.4aebea32a74ec632.74941af9856d339a.3569d3b2fdde88bd -- 0000000000000000.0000000000000000.bf90e203f684a012.4b008c3816ea56fe -+ 0000000000000000.0000000000000000.74941af9856d339a.3569d3b2ffffffff - f1e0c7764d7302e8.43a66e033d694107.633106867d2d2a01.b5c375db398454ba - e432572e7fbd2586 - --VAESIMC(reg) -+VMASKMOVPS_128_LoadForm(reg) - before - 2d8894e7afa08f16.d79189e8b0725cfb.54df9edb046577df.3447535d62af7049 - ec11287166b8cc16.4b52d47f23b3ab82.ec65678f4410a391.65472a240aae8d31 -@@ -43935,12 +43935,12 @@ VAESIMC(reg) - 3ceb46a8d7b7b113.5233f2d1a62d169f.2587b5389ea6cc32.5c3367320d503a8c - d9b8c552a00c4357 - after -- 0000000000000000.0000000000000000.e0a316f4833b4f50.7aa96259c344b95a -+ 2d8894e7afa08f16.d79189e8b0725cfb.54df9edb046577df.3447535d62af7049 - ec11287166b8cc16.4b52d47f23b3ab82.ec65678f4410a391.65472a240aae8d31 - 7d180f383f911931.2bef2329c143aaaa.6984c68a99f700c9.d4fc07c78e353ce3 - 3ceb46a8d7b7b113.5233f2d1a62d169f.2587b5389ea6cc32.5c3367320d503a8c - d9b8c552a00c4357 --VAESIMC(mem) -+VMASKMOVPS_128_LoadForm(mem) - before - 27579d1165741371.85d4c82dc9b7d169.9cecbe63ef7daa8c.7dbc3205efa74079 - 21dc6b5c78946506.b4209134b21cb5df.e5e402cab740249d.ce6d385e29889b49 -@@ -43950,11 +43950,11 @@ VAESIMC(mem) - after - 27579d1165741371.85d4c82dc9b7d169.9cecbe63ef7daa8c.7dbc3205efa74079 - 21dc6b5c78946506.b4209134b21cb5df.e5e402cab740249d.ce6d385e29889b49 -- 0000000000000000.0000000000000000.43b4207a45c8734a.adf015be86b6cb8a -- 8ec7db48f62e824f.3311e974d646b8d9.e3c4e2cd364cb5df.c776d060c618f137 -+ 0000000000000000.0000000000000000.9cecbe63ef7daa8c.7dbc320500000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 276659e161df65ac - --VAESIMC(reg) -+VMASKMOVPS_128_LoadForm(reg) - before - ef025c9e55b5af5b.b8c574bf99bfc45b.3c4e70854a244fb6.5144763f25ae4466 - 7b98d4013d270af0.fed9f373f9397992.9b1d2ec825969a62.2d34733703b2a9c2 -@@ -43962,12 +43962,12 @@ VAESIMC(reg) - 50dd146e5b0de579.5273943f62152c2f.caa540917d6b3bd9.a493946afed1dfa8 - f59ab27c53042a8a - after -- 0000000000000000.0000000000000000.6bb26d639a2ea360.c7e72af28dd2eeb9 -+ ef025c9e55b5af5b.b8c574bf99bfc45b.3c4e70854a244fb6.5144763f25ae4466 - 7b98d4013d270af0.fed9f373f9397992.9b1d2ec825969a62.2d34733703b2a9c2 - 2872be78b6c0b316.3ecfd44f33a75d1f.accc1fa8022ad58a.555f53a1ed649e1f - 50dd146e5b0de579.5273943f62152c2f.caa540917d6b3bd9.a493946afed1dfa8 - f59ab27c53042a8a --VAESIMC(mem) -+VMASKMOVPS_128_LoadForm(mem) - before - 264127c5070a39f1.5025d44fc998dec7.1891ae2fa390a1ee.53f58bef33e609fc - 1154713037eec908.8496f9879befd8a9.6af49e0b12237987.a208fe2ec0267b9f -@@ -43977,11 +43977,11 @@ VAESIMC(mem) - after - 264127c5070a39f1.5025d44fc998dec7.1891ae2fa390a1ee.53f58bef33e609fc - 1154713037eec908.8496f9879befd8a9.6af49e0b12237987.a208fe2ec0267b9f -- 0000000000000000.0000000000000000.d01e76b080a47a22.f542b2c765041f5e -- 89ed711c78805bf8.f82263addc2fc1e0.26bdf038e7c241fa.01a649ffcc253912 -+ 0000000000000000.0000000000000000.0000000000000000.53f58bef33e609fc -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - c9ca1a6983fdfe3c - --VAESIMC(reg) -+VMASKMOVPS_128_LoadForm(reg) - before - c8e0026582cb5795.ce0c1f75c247d529.f0d69f728431288b.48ba4b6186e6a92b - 5835fd5d62197fc9.3dc692a0f81cbfba.8ce2313f002d817d.662d6c25c25364e7 -@@ -43989,12 +43989,12 @@ VAESIMC(reg) - 9fcc1cf63b6a2f75.0c3eb31c9521d7af.2035449de548f8e0.0aa4f1338335c2ae - 47404c543fc2dd11 - after -- 0000000000000000.0000000000000000.7764f23076c4863e.74f1e4600c4826b6 -+ c8e0026582cb5795.ce0c1f75c247d529.f0d69f728431288b.48ba4b6186e6a92b - 5835fd5d62197fc9.3dc692a0f81cbfba.8ce2313f002d817d.662d6c25c25364e7 - d71507bfc275b385.b3e84489350cd7d8.2893147eecb1085f.5de1cf72b7142e59 - 9fcc1cf63b6a2f75.0c3eb31c9521d7af.2035449de548f8e0.0aa4f1338335c2ae - 47404c543fc2dd11 --VAESIMC(mem) -+VMASKMOVPS_128_LoadForm(mem) - before - f1825ec009c83baf.0ea5396d6b852e44.25945b46356a7c6a.d013be07877e8eaa - e437a266fd5297b4.7eee5992ee51ed9f.d8b5b6f130f08136.947b7d286ce00669 -@@ -44004,11 +44004,11 @@ VAESIMC(mem) - after - f1825ec009c83baf.0ea5396d6b852e44.25945b46356a7c6a.d013be07877e8eaa - e437a266fd5297b4.7eee5992ee51ed9f.d8b5b6f130f08136.947b7d286ce00669 -- 0000000000000000.0000000000000000.bb3386a283e35871.4159dbb996853ef0 -- 1624b108d0243ca1.d5fb92935a2d9ba7.7f8c7a7fa9e89faf.c815ba3f76568b79 -+ 0000000000000000.0000000000000000.25945b4600000000.d013be0700000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - efdf300dd1821021 - --VAESKEYGENASSIST_0x00(reg) -+VMASKMOVPS_256_LoadForm(reg) - before - 9b62dc42e109666f.0cf673dde883fde1.7358a4487c5501ad.2cdada385f722fb5 - 27eab94a4177cb0f.bb69589b9a97ac38.8354a859615e17ee.e323de24e06a0f7b -@@ -44016,12 +44016,12 @@ VAESKEYGENASSIST_0x00(reg) - 4e38f684633aadf3.b466797e390bc7da.6a597b43e14542d3.e2d8c342b5d4b2f9 - e2dd9c4c415fed09 - after -- 0000000000000000.0000000000000000.c3efe2deefe2dec3.310cc3770cc37731 -+ 9b62dc42e109666f.0cf673dde883fde1.7358a4487c5501ad.2cdada385f722fb5 - 27eab94a4177cb0f.bb69589b9a97ac38.8354a859615e17ee.e323de24e06a0f7b - eec2c3928d5979ac.ff4bdb2c016b06d2.613b9c33a4d51917.8133022e49dcfc2e - 4e38f684633aadf3.b466797e390bc7da.6a597b43e14542d3.e2d8c342b5d4b2f9 - e2dd9c4c415fed09 --VAESKEYGENASSIST_0x00(mem) -+VMASKMOVPS_256_LoadForm(mem) - before - 5d0d09390889688a.a2964f8e5ca7a28f.b687ac7c5f83ab7d.f8f942f3b53bd0cf - 2f3587f3265ce0a7.4529c81a162b962d.e17af2118ee06de6.6868ebb1bb41fcb7 -@@ -44031,11 +44031,11 @@ VAESKEYGENASSIST_0x00(mem) - after - 5d0d09390889688a.a2964f8e5ca7a28f.b687ac7c5f83ab7d.f8f942f3b53bd0cf - 2f3587f3265ce0a7.4529c81a162b962d.e17af2118ee06de6.6868ebb1bb41fcb7 -- 0000000000000000.0000000000000000.104e17914e179110.0d41992c41992c0d -- 489da282da32b767.ec1e0f6d3ca9651e.2205a4b579777dbd.5ee3d804cfb325f9 -+ 0000000000000000.0000000000000000.b687ac7c5f83ab7d.00000000b53bd0cf -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 9c871470153699ab - --VAESKEYGENASSIST_0x00(reg) -+VMASKMOVPS_256_LoadForm(reg) - before - 2c2a229afdfa9df9.4675382fa74d8d62.a818d50bdfbbbac8.f035099b6dc94482 - 6a1700ee248b6d8f.0c75ce593b4250aa.2376abdcb314fc25.57676fc9da30d9be -@@ -44043,12 +44043,12 @@ VAESKEYGENASSIST_0x00(reg) - 600319bf9d465f41.5d1cecd92aeb8ccf.ca927cc85ccd39a2.5f0133ae91695f49 - b901893d1355c9f1 - after -- 0000000000000000.0000000000000000.29ea4473ea447329.7123852023852071 -+ 2c2a229afdfa9df9.4675382fa74d8d62.a818d50bdfbbbac8.f035099b6dc94482 - 6a1700ee248b6d8f.0c75ce593b4250aa.2376abdcb314fc25.57676fc9da30d9be - b29ba9d625764418.7568e1eeb31dbb6a.bb868f4c534168de.3267542cddb6f99c - 600319bf9d465f41.5d1cecd92aeb8ccf.ca927cc85ccd39a2.5f0133ae91695f49 - b901893d1355c9f1 --VAESKEYGENASSIST_0x00(mem) -+VMASKMOVPS_256_LoadForm(mem) - before - 1c33d0c37e84f1bf.cf994c162788fab5.a05b6a06bdb77d04.aee76eba6a44ad1b - 6362862eee0493df.5da93f455fc65021.19f2da61888d4b36.c1d1628f1833fef6 -@@ -44058,11 +44058,11 @@ VAESKEYGENASSIST_0x00(mem) - after - 1c33d0c37e84f1bf.cf994c162788fab5.a05b6a06bdb77d04.aee76eba6a44ad1b - 6362862eee0493df.5da93f455fc65021.19f2da61888d4b36.c1d1628f1833fef6 -- 0000000000000000.0000000000000000.6fe03902e039026f.f4e4949fe4949ff4 -- 12ea2c5f502539c9.436c51df4c6c2090.2257795233896d40.e7933c94c5a62980 -+ 000000007e84f1bf.0000000000000000.00000000bdb77d04.aee76eba00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - b3041b9afc437b87 - --VAESKEYGENASSIST_0x00(reg) -+VMASKMOVPS_256_LoadForm(reg) - before - 1e39ec3443879ba0.30db15fe79deb4e9.53b56a2238eb11eb.68bea0bf4bc7396f - 857fa9cd38fec477.a4fa5b311718990c.f0a931ee4297afed.56aca80a0b3ed14c -@@ -44070,12 +44070,12 @@ VAESKEYGENASSIST_0x00(reg) - b76edcac95b7250d.faf1f304243c940a.46c2bed122a8dc98.965049ecf20d59ba - a09eda59517cc0a4 - after -- 0000000000000000.0000000000000000.79bc2249bc224979.b7b428d7b428d7b7 -+ 1e39ec3443879ba0.30db15fe79deb4e9.53b56a2238eb11eb.68bea0bf4bc7396f - 857fa9cd38fec477.a4fa5b311718990c.f0a931ee4297afed.56aca80a0b3ed14c - 442250d1743534b7.48137ce447dea55e.7894a4af07fd3443.c6ee0d208ffcf300 - b76edcac95b7250d.faf1f304243c940a.46c2bed122a8dc98.965049ecf20d59ba - a09eda59517cc0a4 --VAESKEYGENASSIST_0x00(mem) -+VMASKMOVPS_256_LoadForm(mem) - before - c2a43b55c755e3eb.3aaf49ca3710d424.94623c7bcb3e223d.b57f7bc03024e59a - d62ee8cb70a480ba.29309498f5cd7ca9.f430d43657f10b23.2316d7e8cdfd89f2 -@@ -44085,11 +44085,11 @@ VAESKEYGENASSIST_0x00(mem) - after - c2a43b55c755e3eb.3aaf49ca3710d424.94623c7bcb3e223d.b57f7bc03024e59a - d62ee8cb70a480ba.29309498f5cd7ca9.f430d43657f10b23.2316d7e8cdfd89f2 -- 0000000000000000.0000000000000000.2122aaeb22aaeb21.bad5d221d5d221ba -- 48fc17d5ced612a2.bc26b0f036a0aaac.7216dd299098dcb5.68065d9421f9945a -+ c2a43b5500000000.000000003710d424.94623c7b00000000.000000003024e59a -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f7f67ff0103274c2 - --VAESKEYGENASSIST_0x31(reg) -+VMASKMOVPD_128_LoadForm(reg) - before - f5f13134fef9df31.5dda9042bad18113.16327a52f2cfa882.48c5483975a33cbb - bc436dce87d91154.d66b46d8497158bd.4daf12143a918f75.5303f03daf90e822 -@@ -44097,12 +44097,12 @@ VAESKEYGENASSIST_0x31(reg) - 191b77b1d816be64.5fd85733c2d6306a.bf2b9864df000b65.7957ebd194390eca - 4b073639770e0261 - after -- 0000000000000000.0000000000000000.32659b71659b4032.fd51b8dc51b8edfd -+ f5f13134fef9df31.5dda9042bad18113.16327a52f2cfa882.48c5483975a33cbb - bc436dce87d91154.d66b46d8497158bd.4daf12143a918f75.5303f03daf90e822 - aa383129465f48d6.8d7bb48498c554cb.bce872a1aa739c32.709a53215b689a19 - 191b77b1d816be64.5fd85733c2d6306a.bf2b9864df000b65.7957ebd194390eca - 4b073639770e0261 --VAESKEYGENASSIST_0x31(mem) -+VMASKMOVPD_128_LoadForm(mem) - before - c273b0451ff4300c.663a3ed2d88ab0a9.284daacfe4b2aac6.b2c27fcb74c418b9 - ba6ad3e1a8f555f5.eddf7ff8e2485952.c4a5284619647c0a.f1fa2341064bfedb -@@ -44112,11 +44112,11 @@ VAESKEYGENASSIST_0x31(mem) - after - c273b0451ff4300c.663a3ed2d88ab0a9.284daacfe4b2aac6.b2c27fcb74c418b9 - ba6ad3e1a8f555f5.eddf7ff8e2485952.c4a5284619647c0a.f1fa2341064bfedb -- 0000000000000000.0000000000000000.8a34e39d34e3ac8a.1f3725e33725d21f -- 9e25097ad07e7332.1aee630387cfc47f.e6319b722e7c1afb.c27e930b8fd44837 -+ 0000000000000000.0000000000000000.284daacfe4b2aac6.b2c27fcb74c418b9 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 0d605736beee23c9 - --VAESKEYGENASSIST_0x31(reg) -+VMASKMOVPD_128_LoadForm(reg) - before - 1414c8205afbc8da.4182134ea51de4df.77effec159b1fd5b.23fd86ff46f95e01 - 32e4e236fe877313.d598b763cd083c7a.7ea80433a50cdd4a.a3dd8e16e17deba0 -@@ -44124,12 +44124,12 @@ VAESKEYGENASSIST_0x31(reg) - 280c0292d04dcab3.4022bffc80f48f2c.fb6d42e71d5e8514.dc08e29212c7cf56 - 4deb26d0dfa59ec6 - after -- 0000000000000000.0000000000000000.c63dfb923dfba3c6.0a2cde002cde310a -+ 1414c8205afbc8da.4182134ea51de4df.77effec159b1fd5b.23fd86ff46f95e01 - 32e4e236fe877313.d598b763cd083c7a.7ea80433a50cdd4a.a3dd8e16e17deba0 - c51ea2e3471e6023.363472a4624c3630.8b6371c7086ca1f9.429c2ea31c127d03 - 280c0292d04dcab3.4022bffc80f48f2c.fb6d42e71d5e8514.dc08e29212c7cf56 - 4deb26d0dfa59ec6 --VAESKEYGENASSIST_0x31(mem) -+VMASKMOVPD_128_LoadForm(mem) - before - 71127747a0baa67f.b6fb00b135a0ee72.cf2d1a59440c039b.28137201816dc546 - 244950e57112a3ac.cd3797ab13a1070a.bf23ffa6c9a14ea8.6f9ffd80cf269c3c -@@ -44139,11 +44139,11 @@ VAESKEYGENASSIST_0x31(mem) - after - 71127747a0baa67f.b6fb00b135a0ee72.cf2d1a59440c039b.28137201816dc546 - 244950e57112a3ac.cd3797ab13a1070a.bf23ffa6c9a14ea8.6f9ffd80cf269c3c -- 0000000000000000.0000000000000000.cb8ad8938ad8a2cb.7c347d71347d407c -- a6168a42b0b76a15.02c581e0a9e20c77.31fb58c1886f574f.bb9b155d9bc30222 -+ 0000000000000000.0000000000000000.cf2d1a59440c039b.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 78a3999351bf096b - --VAESKEYGENASSIST_0x31(reg) -+VMASKMOVPD_128_LoadForm(reg) - before - bfc369de61959727.2e45e4da571eaca8.d8afccf3983a6fa4.6c76c466fac18e41 - eb4580aa68d0e903.b5b3b5487ef6d460.a617a0917071b85a.780baaab9dbf8c81 -@@ -44151,12 +44151,12 @@ VAESKEYGENASSIST_0x31(reg) - 67a27476c8a6c8c9.2f7fb156b92fc1ed.9b8cd41f49adea14.72b3d5c6e7f0cb9c - 195d1174c73b85d0 - after -- 0000000000000000.0000000000000000.ccdda0a8dda099cc.ffc74475c74444ff -+ bfc369de61959727.2e45e4da571eaca8.d8afccf3983a6fa4.6c76c466fac18e41 - eb4580aa68d0e903.b5b3b5487ef6d460.a617a0917071b85a.780baaab9dbf8c81 - 5a76db6401fc3aaa.172d7b783f4d9c68.c947f927cc132246.3186867d8d750c3b - 67a27476c8a6c8c9.2f7fb156b92fc1ed.9b8cd41f49adea14.72b3d5c6e7f0cb9c - 195d1174c73b85d0 --VAESKEYGENASSIST_0x31(mem) -+VMASKMOVPD_128_LoadForm(mem) - before - 0151b8724862f502.6e14494e5a59cd0c.db75d4ce06a6fe1b.79312ce782ca4c6f - 055b46ab8672d85f.cb1a555753a2861e.f6db5ecc42c0111d.c084fce914f68304 -@@ -44166,11 +44166,11 @@ VAESKEYGENASSIST_0x31(mem) - after - 0151b8724862f502.6e14494e5a59cd0c.db75d4ce06a6fe1b.79312ce782ca4c6f - 055b46ab8672d85f.cb1a555753a2861e.f6db5ecc42c0111d.c084fce914f68304 -- 0000000000000000.0000000000000000.8bb99d79b99d488b.94b6c740b6c77194 -- d5e10383ac7be749.f60d03abe7230261.e8269c0bf90ca34f.f460fa50b1ad638b -+ 0000000000000000.0000000000000000.db75d4ce06a6fe1b.79312ce782ca4c6f -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 9a811e8cf44f84d4 - --VAESKEYGENASSIST_0xB2(reg) -+VMASKMOVPD_256_LoadForm(reg) - before - 197facb300316a07.59f52af9cb8b8a2e.7d939ccfbb743eea.77a34724ab559cd7 - cba69f3170de52d0.694e285c17b490ed.c9dc5dd465891ef2.e6c04b72bd7059e3 -@@ -44178,12 +44178,12 @@ VAESKEYGENASSIST_0xB2(reg) - 3b9ea5e2edca17d3.a1039794a880b4ab.25e74532ae35b932.d00a4a62704e113a - 03ce3fdb492885dc - after -- 0000000000000000.0000000000000000.f7071831071883f7.11763b94763b2611 -+ 197facb300316a07.59f52af9cb8b8a2e.7d939ccfbb743eea.77a34724ab559cd7 - cba69f3170de52d0.694e285c17b490ed.c9dc5dd465891ef2.e6c04b72bd7059e3 - 0d41f372e0e378db.e3ba7996ad02b5b3.3834412682f1de27.0f4923e34b6a97a0 - 3b9ea5e2edca17d3.a1039794a880b4ab.25e74532ae35b932.d00a4a62704e113a - 03ce3fdb492885dc --VAESKEYGENASSIST_0xB2(mem) -+VMASKMOVPD_256_LoadForm(mem) - before - 86637b3af105adb3.b107afee33216d64.81f60043253a4a02.eb40636283e3ecc2 - 33937b6b84f045eb.cbc90f004d74b43b.5d5f2f8d3f3c33e4.e88c99239f86b280 -@@ -44193,11 +44193,11 @@ VAESKEYGENASSIST_0xB2(mem) - after - 86637b3af105adb3.b107afee33216d64.81f60043253a4a02.eb40636283e3ecc2 - 33937b6b84f045eb.cbc90f004d74b43b.5d5f2f8d3f3c33e4.e88c99239f86b280 -- 0000000000000000.0000000000000000.1a0c42d10c42631a.aae90949e909fbaa -- 7ff7b9f4dd22b92b.5b88bfeb6e3b076b.7dc2cfa7bc4aedf7.f32e3a0a1bddea3d -+ 0000000000000000.b107afee33216d64.0000000000000000.eb40636283e3ecc2 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - b91a9e06b3a8d493 - --VAESKEYGENASSIST_0xB2(reg) -+VMASKMOVPD_256_LoadForm(reg) - before - 252a0844019942c8.d5c3ee23db800c8c.891d069aaec78b1b.7854394e576e3681 - 94a8762fa23b6f89.c65bd8d4351cbffe.ca3b9301317ff0c0.e08c5941ff0ac245 -@@ -44205,12 +44205,12 @@ VAESKEYGENASSIST_0xB2(reg) - e6224bbc4ac3f85d.e91db76e6a4039c4.fa406ca476a1519c.681eabbbe7da912c - 3f10d61a60274da8 - after -- 0000000000000000.0000000000000000.3d10d85d10d8ef3d.504f9ad04f9a6250 -+ 252a0844019942c8.d5c3ee23db800c8c.891d069aaec78b1b.7854394e576e3681 - 94a8762fa23b6f89.c65bd8d4351cbffe.ca3b9301317ff0c0.e08c5941ff0ac245 - 60e2e333311a9881.2e8af1f4050390ad.7c2d618b96ee7407.9237ab6cd02a4c6f - e6224bbc4ac3f85d.e91db76e6a4039c4.fa406ca476a1519c.681eabbbe7da912c - 3f10d61a60274da8 --VAESKEYGENASSIST_0xB2(mem) -+VMASKMOVPD_256_LoadForm(mem) - before - f3d8a675561c3c0f.83b5ab368ac1cdc9.d4e1a52d7de0776f.a0c0b1b87022c42a - 604199b9e5c6198c.91e7fe0e8da05170.c9a0381f5dee05dc.caf92a341d00095e -@@ -44220,11 +44220,11 @@ VAESKEYGENASSIST_0xB2(mem) - after - f3d8a675561c3c0f.83b5ab368ac1cdc9.d4e1a52d7de0776f.a0c0b1b87022c42a - 604199b9e5c6198c.91e7fe0e8da05170.c9a0381f5dee05dc.caf92a341d00095e -- 0000000000000000.0000000000000000.d848f8b448f806d8.6ce0ba7ae0bac86c -- d52ad6a841669079.73576d8349335821.44413949ed8504a6.19c6ad0f06fcf767 -+ 0000000000000000.83b5ab368ac1cdc9.d4e1a52d7de0776f.a0c0b1b87022c42a -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f7f1ae4879331994 - --VAESKEYGENASSIST_0xB2(reg) -+VMASKMOVPD_256_LoadForm(reg) - before - c806d59711f6fd16.9541172c4475a242.ff2e81fa3bfe5383.82bca05ad726ed5c - ea4f1c6a69d0de9a.7e2a6b47526892d2.6dd3797e5fdbeed1.3b629b4cfc651682 -@@ -44232,12 +44232,12 @@ VAESKEYGENASSIST_0xB2(reg) - 8db00049cbfa8a57.3ba139f7f92bfef4.5fba025caff9f3df.8e633e8769ee1bd1 - e054dea7e8516f52 - after -- 0000000000000000.0000000000000000.dad4dce1d4dc53da.feb36396b36324fe -+ c806d59711f6fd16.9541172c4475a242.ff2e81fa3bfe5383.82bca05ad726ed5c - ea4f1c6a69d0de9a.7e2a6b47526892d2.6dd3797e5fdbeed1.3b629b4cfc651682 - b719812c1e4df9cb.6cb04de7844b1d54.1993507a525565b6.4b00a60c794e3c46 - 8db00049cbfa8a57.3ba139f7f92bfef4.5fba025caff9f3df.8e633e8769ee1bd1 - e054dea7e8516f52 --VAESKEYGENASSIST_0xB2(mem) -+VMASKMOVPD_256_LoadForm(mem) - before - 1da2025a1381f3f3.c65f932d0c61cce7.c7c7ac63ca13f3df.9b948b8f1351d5f7 - 2018268a068c64e0.c07437447e11fc29.ecef2018160fb641.296ce77f19eb47ab -@@ -44247,11 +44247,11 @@ VAESKEYGENASSIST_0xB2(mem) - after - 1da2025a1381f3f3.c65f932d0c61cce7.c7c7ac63ca13f3df.9b948b8f1351d5f7 - 2018268a068c64e0.c07437447e11fc29.ecef2018160fb641.296ce77f19eb47ab -- 0000000000000000.0000000000000000.fbc6c623c6c691fb.7314228f14223d73 -- edab5f16b161fc51.63fba4bb63751673.7075000888759818.ab4a0a467d14c996 -+ 0000000000000000.c65f932d0c61cce7.c7c7ac63ca13f3df.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 57e7c8f613ba5225 - --VAESKEYGENASSIST_0xFF(reg) -+VMASKMOVPS_128_StoreForm(reg) - before - c5b34912bbd15bff.6e606c49a2439b2c.c40665f40f4377d2.886b631de8f630e6 - 51fa8a0811e61fd1.256d69aaca301704.55a6260f5a87b693.a993b92931bc86da -@@ -44259,12 +44259,12 @@ VAESKEYGENASSIST_0xFF(reg) - 3228392e3a38cb0c.aabe24a73158955a.78d59d9f43a7bde9.75a72bdbf0445ee6 - d92c3f579d1f5856 - after -- 0000000000000000.0000000000000000.da8fcc268fccd9da.a2796c00796cffa2 -+ c5b34912bbd15bff.6e606c49a2439b2c.c40665f40f4377d2.886b631de8f630e6 - 51fa8a0811e61fd1.256d69aaca301704.55a6260f5a87b693.a993b92931bc86da - 57088642b284dc47.f09ed32646322b05.7327e57ae3cf0f61.afb87d1a80d25621 - 3228392e3a38cb0c.aabe24a73158955a.78d59d9f43a7bde9.75a72bdbf0445ee6 - d92c3f579d1f5856 --VAESKEYGENASSIST_0xFF(mem) -+VMASKMOVPS_128_StoreForm(mem) - before - b513357ca46e019d.40a79f37448d2bcd.2e9bda1aa8ab0f30.c1fb4aec1999fdd6 - e7288a35203d14e6.dcd2b4c96c0f3635.5aff706cc63955b2.abe6e8ccfe330bd5 -@@ -44272,13 +44272,13 @@ VAESKEYGENASSIST_0xFF(mem) - b90b3e14ea8d6b30.2d57dd3888cb40ac.16902d596933396c.cd3ce8f56b8d80b8 - be3d42162a665ff4 - after -- b513357ca46e019d.40a79f37448d2bcd.2e9bda1aa8ab0f30.c1fb4aec1999fdd6 -+ b513357ca46e019d.40a79f37448d2bcd.2e9bda1ac63955b2.abe6e8ccfe330bd5 - e7288a35203d14e6.dcd2b4c96c0f3635.5aff706cc63955b2.abe6e8ccfe330bd5 -- 0000000000000000.0000000000000000.a23114a8311457a2.ce780f29780fd6ce -+ 4a37b96f2e994e5d.62f375504f4a29f1.08b76287a70d250d.90e374ab90012392 - b90b3e14ea8d6b30.2d57dd3888cb40ac.16902d596933396c.cd3ce8f56b8d80b8 - be3d42162a665ff4 - --VAESKEYGENASSIST_0xFF(reg) -+VMASKMOVPS_128_StoreForm(reg) - before - bf347e7a6a15fcf1.127295116f252788.9b49e8edb41eb613.5e534bcd25b84efc - 2c6c968dc628935c.2f363b52d96e3e94.061792db6ecdc8d2.becf3acef9a71fe9 -@@ -44286,12 +44286,12 @@ VAESKEYGENASSIST_0xFF(reg) - bacd4e7143a79d2b.29086051ce416b73.4773b513fe74b006.321e792c58f4e988 - fe89c0611a6a5893 - after -- 0000000000000000.0000000000000000.9f4b2b9e4b2b619f.d6ca8a62ca8a9dd6 -+ bf347e7a6a15fcf1.127295116f252788.9b49e8edb41eb613.5e534bcd25b84efc - 2c6c968dc628935c.2f363b52d96e3e94.061792db6ecdc8d2.becf3acef9a71fe9 - 613088bcda2a5fe1.ed24aac445736b7e.cc0bd86e5366b294.10cf754a010d6a5e - bacd4e7143a79d2b.29086051ce416b73.4773b513fe74b006.321e792c58f4e988 - fe89c0611a6a5893 --VAESKEYGENASSIST_0xFF(mem) -+VMASKMOVPS_128_StoreForm(mem) - before - 51ddc8d3647b75aa.938fe71a9d2c88e7.bdadd8e790e3f99e.d59925340c84fdd4 - 08e40c6f5232faf9.48c24c2183445ec0.86e18f71a965d32c.d0ca243f1821d6a9 -@@ -44299,13 +44299,13 @@ VAESKEYGENASSIST_0xFF(mem) - 0d3d39d687c22ef3.b6aa6efe645eb67c.2821a611493a551f.817cc0bf9c331b1a - ee96550d4cc0ff0e - after -- 51ddc8d3647b75aa.938fe71a9d2c88e7.bdadd8e790e3f99e.d59925340c84fdd4 -+ 51ddc8d3647b75aa.938fe71a9d2c88e7.bdadd8e790e3f99e.d0ca243f1821d6a9 - 08e40c6f5232faf9.48c24c2183445ec0.86e18f71a965d32c.d0ca243f1821d6a9 -- 0000000000000000.0000000000000000.947a959e7a956194.1803eec003ee3f18 -+ fd6a0822fe9ba4ae.35b27af4917c5963.616effdb32d3b348.9652ae9fbfd77732 - 0d3d39d687c22ef3.b6aa6efe645eb67c.2821a611493a551f.817cc0bf9c331b1a - ee96550d4cc0ff0e - --VAESKEYGENASSIST_0xFF(reg) -+VMASKMOVPS_128_StoreForm(reg) - before - 3aea69f46a0a5fb9.1428197907b456f4.27f823ab9779b0b6.b8c7ffff0aa577dd - bfc5f8e0929e77c8.eff626f59a7dd6de.e3e69567c75684be.ed2986919021d3ad -@@ -44313,12 +44313,12 @@ VAESKEYGENASSIST_0xFF(reg) - e840787873d1bdc1.8c6eb42d6bc0d01c.b1d5a1bc8c8baae6.b75910525c792b35 - 03bd0958db6ea045 - after -- 0000000000000000.0000000000000000.0b5278875278780b.6d0a47930a476c6d -+ 3aea69f46a0a5fb9.1428197907b456f4.27f823ab9779b0b6.b8c7ffff0aa577dd - bfc5f8e0929e77c8.eff626f59a7dd6de.e3e69567c75684be.ed2986919021d3ad - da73ff3e610782e7.7874db385d276bdd.48c1c19e8f836e3f.a316b8b3f7b926bc - e840787873d1bdc1.8c6eb42d6bc0d01c.b1d5a1bc8c8baae6.b75910525c792b35 - 03bd0958db6ea045 --VAESKEYGENASSIST_0xFF(mem) -+VMASKMOVPS_128_StoreForm(mem) - before - 641022b28fa23f18.437861fb63896403.07b02ec0e053c2c8.7a6e332e59fb735e - b61cd44d9424c5d9.4866b534cdbab358.c506c4dddaedfd0c.fed8725e935d0754 -@@ -44326,13 +44326,13 @@ VAESKEYGENASSIST_0xFF(mem) - 9d92f7f3033b74d7.c0988f7481b837ee.7a1d3465c6633d0f.ac4de8acbb2d7a69 - 8cf117a2e2b2d2e0 - after -- 641022b28fa23f18.437861fb63896403.07b02ec0e053c2c8.7a6e332e59fb735e -+ 641022b28fa23f18.437861fb63896403.c506c4dde053c2c8.fed8725e935d0754 - b61cd44d9424c5d9.4866b534cdbab358.c506c4dddaedfd0c.fed8725e935d0754 -- 0000000000000000.0000000000000000.bac5e7cec5e731ba.31da9f3cda9fc331 -+ d5ae9c1407fdedb5.5358718d4ef0e56d.a23bf27072993d15.9b5e5abad5409f74 - 9d92f7f3033b74d7.c0988f7481b837ee.7a1d3465c6633d0f.ac4de8acbb2d7a69 - 8cf117a2e2b2d2e0 - --VPCLMULQDQ_0x00(reg) -+VMASKMOVPS_256_StoreForm(reg) - before - 9996e307e65ae485.ea9360d5a5ea166c.eb730d54039de486.297606a9f258ba25 - 2d88484762b2ec03.987f53a808148fa0.3035e6996f2b2ae2.8b13e52611837084 -@@ -44340,12 +44340,12 @@ VPCLMULQDQ_0x00(reg) - 5e83ce08339fcd3c.8643c9cf830ef493.789d9a0177746c94.d849b77f99ac76cb - 7a79a2333bc23e0b - after -- 0000000000000000.0000000000000000.3d0402db610d1231.4b09ee6ba2be96dc -+ 9996e307e65ae485.ea9360d5a5ea166c.eb730d54039de486.297606a9f258ba25 - 2d88484762b2ec03.987f53a808148fa0.3035e6996f2b2ae2.8b13e52611837084 - a61342cef2452507.83204d5849c79a9e.eb2a16ae62ef43ad.7cc04cca3ff01b57 - 5e83ce08339fcd3c.8643c9cf830ef493.789d9a0177746c94.d849b77f99ac76cb - 7a79a2333bc23e0b --VPCLMULQDQ_0x00(mem) -+VMASKMOVPS_256_StoreForm(mem) - before - 401e89d1403e2e45.b323e661c14d1d4f.7fb442fad3f659aa.33dc6dfe4b47e043 - 0502e945c42d04a2.ff40884537da54eb.493f37c5548a8510.78318b0f79f3dc65 -@@ -44353,13 +44353,13 @@ VPCLMULQDQ_0x00(mem) - fbba015fbb914d7c.f021585f4cc26271.bfd37dec5be72078.1050982155065cb4 - 1bb280f93a865739 - after -- 401e89d1403e2e45.b323e661c14d1d4f.7fb442fad3f659aa.33dc6dfe4b47e043 -+ 0502e945c42d04a2.ff408845c14d1d4f.493f37c5d3f659aa.78318b0f79f3dc65 - 0502e945c42d04a2.ff40884537da54eb.493f37c5548a8510.78318b0f79f3dc65 -- 0000000000000000.0000000000000000.082adec2fc581a96.25c0cd805f3f1def -+ a5f23d7be49a7a51.9f26b02031d2acbd.c0b0211d23d733f1.a3e9f0a19e049ca7 - fbba015fbb914d7c.f021585f4cc26271.bfd37dec5be72078.1050982155065cb4 - 1bb280f93a865739 - --VPCLMULQDQ_0x00(reg) -+VMASKMOVPS_256_StoreForm(reg) - before - 1f5ba297ea0fcae2.e526b2dd661f384f.4c7d7e6c2335b2b2.2473c82018c808d2 - 7a96fc65012ef15a.3e02cae1004ff9f7.10861db553b7d82d.ca5d7da47786a62a -@@ -44367,12 +44367,12 @@ VPCLMULQDQ_0x00(reg) - a2f64646d15b4a69.ac39242c73c6e775.41cdb6a82c1a9480.483f164b8ac5f786 - d9cff147756022e2 - after -- 0000000000000000.0000000000000000.606ea95dffe39683.3dfc5f434c80e992 -+ 1f5ba297ea0fcae2.e526b2dd661f384f.4c7d7e6c2335b2b2.2473c82018c808d2 - 7a96fc65012ef15a.3e02cae1004ff9f7.10861db553b7d82d.ca5d7da47786a62a - 87b18ad11a6e084e.e119c758a62d4aa0.998731a577d50f8e.8c5d1864942bb7ad - a2f64646d15b4a69.ac39242c73c6e775.41cdb6a82c1a9480.483f164b8ac5f786 - d9cff147756022e2 --VPCLMULQDQ_0x00(mem) -+VMASKMOVPS_256_StoreForm(mem) - before - 1ad927447207f3ed.26b22e30c381f458.792c5d4b84258ea3.65a4a92a0d12a2af - e928332c9cc627d2.71313dfb8b6d42c6.26bfef9ff456f956.61580497b74a77c8 -@@ -44380,13 +44380,13 @@ VPCLMULQDQ_0x00(mem) - 9cc9be71e9bda7dd.c8a7c0e40fc5b8d2.8cf50a9b62600df8.5187e8e2d3a76068 - fd9967987ee5ee46 - after -- 1ad927447207f3ed.26b22e30c381f458.792c5d4b84258ea3.65a4a92a0d12a2af -+ 1ad927447207f3ed.71313dfb8b6d42c6.26bfef9ff456f956.61580497b74a77c8 - e928332c9cc627d2.71313dfb8b6d42c6.26bfef9ff456f956.61580497b74a77c8 -- 0000000000000000.0000000000000000.15a4042062438aa3.5663eaa128337438 -+ 208a91ec10a97abe.debf6f13c6aa6f60.8dbe5416df66e5b9.9135c55bc54d4d77 - 9cc9be71e9bda7dd.c8a7c0e40fc5b8d2.8cf50a9b62600df8.5187e8e2d3a76068 - fd9967987ee5ee46 - --VPCLMULQDQ_0x00(reg) -+VMASKMOVPS_256_StoreForm(reg) - before - f1b940ea629231bd.3ab235a5440d6b5a.8d372cdb034959c7.fd2f8c1a99512f41 - 89316e421a3b667a.d41172763ca68261.87b9b0623dc28eec.be3a577f9f4305be -@@ -44394,12 +44394,12 @@ VPCLMULQDQ_0x00(reg) - 155cb9b877ad9576.70602e9b75df98c1.8ec6edd4f5c5a275.9beeb4ab8960bf05 - 71303f4ba6a21b28 - after -- 0000000000000000.0000000000000000.4df2b81afef8c3bf.3cb0b96f8ee515d2 -+ f1b940ea629231bd.3ab235a5440d6b5a.8d372cdb034959c7.fd2f8c1a99512f41 - 89316e421a3b667a.d41172763ca68261.87b9b0623dc28eec.be3a577f9f4305be - 214eed0e426ac929.48b1f1ceee92a820.147a47e75abd92ed.a9e0e5b690454b9b - 155cb9b877ad9576.70602e9b75df98c1.8ec6edd4f5c5a275.9beeb4ab8960bf05 - 71303f4ba6a21b28 --VPCLMULQDQ_0x00(mem) -+VMASKMOVPS_256_StoreForm(mem) - before - 0572028002161c2f.c1a7ceae5490070c.29e8a6c8ee990f70.53e99f97ab66fa31 - 34807938b9c97d47.817a295b769e5b97.4f17d44174cbc95a.bd2f579b172dd5cc -@@ -44407,13 +44407,13 @@ VPCLMULQDQ_0x00(mem) - d42e75ddaa195358.adec9e8af76b983f.539542c719c8f48e.f452ce16835a0751 - 78c98565bad9d693 - after -- 0572028002161c2f.c1a7ceae5490070c.29e8a6c8ee990f70.53e99f97ab66fa31 -+ 34807938b9c97d47.817a295b5490070c.4f17d441ee990f70.53e99f97172dd5cc - 34807938b9c97d47.817a295b769e5b97.4f17d44174cbc95a.bd2f579b172dd5cc -- 0000000000000000.0000000000000000.253d2f6f39f4ba76.2d6bed1dcf17888c -+ da25215de8c6fc9b.b123c52b7963ccc4.bfb734f2248181ab.29e3134cd6a570f3 - d42e75ddaa195358.adec9e8af76b983f.539542c719c8f48e.f452ce16835a0751 - 78c98565bad9d693 - --VPCLMULQDQ_0x01(reg) -+VMASKMOVPD_128_StoreForm(reg) - before - 129232a518ad1865.fc68f1a31cce3faa.d122b1e48f43f9b3.e87c7aac6faade30 - 1ef9d34239620a72.2f9d119b59f27bbc.7811f8a5da762bcd.5a3a598e4336fbbc -@@ -44421,12 +44421,12 @@ VPCLMULQDQ_0x01(reg) - fdd6de4431a1edef.262a2fd1a6b5d6d2.c449170dff1ff6a2.4567f9f5d375bc45 - 766eb252c841d999 - after -- 0000000000000000.0000000000000000.3da881982ed4fbea.943bacd9552a6c9b -+ 129232a518ad1865.fc68f1a31cce3faa.d122b1e48f43f9b3.e87c7aac6faade30 - 1ef9d34239620a72.2f9d119b59f27bbc.7811f8a5da762bcd.5a3a598e4336fbbc - f94c63a9b785e867.499a52b17e90c4bb.0005713a76916c39.85995a57b175065f - fdd6de4431a1edef.262a2fd1a6b5d6d2.c449170dff1ff6a2.4567f9f5d375bc45 - 766eb252c841d999 --VPCLMULQDQ_0x01(mem) -+VMASKMOVPD_128_StoreForm(mem) - before - f47b025caae61988.87e24081414256b7.a21b24e7ed6c6d2e.1f2be78b10ac06b5 - 9b5a64fe956f373d.f3bd86ca83f55f6b.9937addf70c144fb.6ff5db2146c5d71d -@@ -44434,13 +44434,13 @@ VPCLMULQDQ_0x01(mem) - d4bd4ebaf85effac.e110ab350fbe4045.68246c269977a596.5a7424428ec8b09e - aec170a4d9ca2e0f - after -- f47b025caae61988.87e24081414256b7.a21b24e7ed6c6d2e.1f2be78b10ac06b5 -+ f47b025caae61988.87e24081414256b7.9937addf70c144fb.1f2be78b10ac06b5 - 9b5a64fe956f373d.f3bd86ca83f55f6b.9937addf70c144fb.6ff5db2146c5d71d -- 0000000000000000.0000000000000000.0e837f948d37df70.0edc2fbe2614e047 -+ 47d65424a6e8f0e5.9db3ab8d944544b6.e74b46a54bc11864.0ff4f13a3cf5a787 - d4bd4ebaf85effac.e110ab350fbe4045.68246c269977a596.5a7424428ec8b09e - aec170a4d9ca2e0f - --VPCLMULQDQ_0x01(reg) -+VMASKMOVPD_128_StoreForm(reg) - before - 6527d1ceb9885f86.1ed9ceaca8dc22bd.1b20822e91ed90c3.f88b9a4c77efa7bc - ddf1442cc98e7dae.01f751e6d16e1345.a72f2de4b55d70dd.734f4c05ff36d903 -@@ -44448,12 +44448,12 @@ VPCLMULQDQ_0x01(reg) - 7be54d2fea9e72c4.02694de200005168.2578eb375531cf94.991a2cdc845ebfa3 - fdba53d3b758ec54 - after -- 0000000000000000.0000000000000000.4f861801ae71c54d.1e0724cc7fb76943 -+ 6527d1ceb9885f86.1ed9ceaca8dc22bd.1b20822e91ed90c3.f88b9a4c77efa7bc - ddf1442cc98e7dae.01f751e6d16e1345.a72f2de4b55d70dd.734f4c05ff36d903 - 706dc428a566c534.59e3525490218f6f.e188a6c3189b1c3f.b43bfe3c5057f897 - 7be54d2fea9e72c4.02694de200005168.2578eb375531cf94.991a2cdc845ebfa3 - fdba53d3b758ec54 --VPCLMULQDQ_0x01(mem) -+VMASKMOVPD_128_StoreForm(mem) - before - bce5ee0c065039d5.5ba6dbad33c1c209.d755be7d3d17175b.cf4cf7ac08aec689 - b16879738c526353.6afc6a0f1d5cefaf.b673220f64739a75.3b4ec78fcf9b3dc9 -@@ -44461,13 +44461,13 @@ VPCLMULQDQ_0x01(mem) - b2a5507cafa63df4.89967d2b4227d2d2.fe73afcddf27cfce.c80e9f4b02fa99dd - a265a0fda884f708 - after -- bce5ee0c065039d5.5ba6dbad33c1c209.d755be7d3d17175b.cf4cf7ac08aec689 -+ bce5ee0c065039d5.5ba6dbad33c1c209.d755be7d3d17175b.3b4ec78fcf9b3dc9 - b16879738c526353.6afc6a0f1d5cefaf.b673220f64739a75.3b4ec78fcf9b3dc9 -- 0000000000000000.0000000000000000.703f07a2e9f7ddd6.944f993e2e6e8d5d -+ ba0f70f5666b25f9.0533f7bf44fa3564.7a8ef386911f99e2.c4ca554a43866f01 - b2a5507cafa63df4.89967d2b4227d2d2.fe73afcddf27cfce.c80e9f4b02fa99dd - a265a0fda884f708 - --VPCLMULQDQ_0x01(reg) -+VMASKMOVPD_128_StoreForm(reg) - before - ae1a54cbd0aec42f.74f894f5840f6570.5073f8beb57000a5.20eed2d06a98f763 - 477ab82316073efd.ded2b84d00b35998.b71464e33960fc8a.bbcbd67b4f7dced0 -@@ -44475,12 +44475,12 @@ VPCLMULQDQ_0x01(reg) - 956b7c1e6e6f2340.164f90465fd9999f.d5d50198e2664d39.cbdb757996d477dd - f8a509a42f5ec2d5 - after -- 0000000000000000.0000000000000000.49c0a1c982335db0.bc3e5173f1f2ac06 -+ ae1a54cbd0aec42f.74f894f5840f6570.5073f8beb57000a5.20eed2d06a98f763 - 477ab82316073efd.ded2b84d00b35998.b71464e33960fc8a.bbcbd67b4f7dced0 - cbd1c67017189f1f.cb00386e409dd799.1ac6be086984012d.aad639baaae20f3f - 956b7c1e6e6f2340.164f90465fd9999f.d5d50198e2664d39.cbdb757996d477dd - f8a509a42f5ec2d5 --VPCLMULQDQ_0x01(mem) -+VMASKMOVPD_128_StoreForm(mem) - before - 0f026e27928dac54.0094d599b897080d.9d883dc07a745cd5.458d29ff3f941a5b - eabc21efda6cf185.6a98ce4e901d8832.3a7abac8ac79db68.c43a32aa1d9aa53e -@@ -44488,13 +44488,13 @@ VPCLMULQDQ_0x01(mem) - 607a63fa8b6a7ab0.a75f8c115c704b32.2ab51432c6f30153.62a2d877c95be3fa - 39f56d73d02e0f2a - after -- 0f026e27928dac54.0094d599b897080d.9d883dc07a745cd5.458d29ff3f941a5b -+ 0f026e27928dac54.0094d599b897080d.3a7abac8ac79db68.c43a32aa1d9aa53e - eabc21efda6cf185.6a98ce4e901d8832.3a7abac8ac79db68.c43a32aa1d9aa53e -- 0000000000000000.0000000000000000.0e51054be0f2de5a.7cbb500e5954ca78 -+ 66a09fe624074c95.2dc261a7938ce05a.caf0834a11f5d483.af2718031702298f - 607a63fa8b6a7ab0.a75f8c115c704b32.2ab51432c6f30153.62a2d877c95be3fa - 39f56d73d02e0f2a - --VPCLMULQDQ_0x10(reg) -+VMASKMOVPD_256_StoreForm(reg) - before - 906dd361c809e9cc.b215e9152ca23601.32bb4af988560766.3497ea6ce77f1e03 - c35606af4b77ac8b.393fad2522ba3db5.2c2297cab2c94ea1.c56080e48ea5e9c0 -@@ -44502,12 +44502,12 @@ VPCLMULQDQ_0x10(reg) - 2caac418693de013.576ce1d17fbb1cf5.d941cfd672876fde.edd9dc3fe5f17410 - 3b229af9cb2facfb - after -- 0000000000000000.0000000000000000.4f7e3e683c374cba.33a68d1cc66f7c00 -+ 906dd361c809e9cc.b215e9152ca23601.32bb4af988560766.3497ea6ce77f1e03 - c35606af4b77ac8b.393fad2522ba3db5.2c2297cab2c94ea1.c56080e48ea5e9c0 - 2efb03c8f8049514.d2c22c158abf4cf8.efe06fef77555c90.badd5286da721cb6 - 2caac418693de013.576ce1d17fbb1cf5.d941cfd672876fde.edd9dc3fe5f17410 - 3b229af9cb2facfb --VPCLMULQDQ_0x10(mem) -+VMASKMOVPD_256_StoreForm(mem) - before - 808309a2a93782a2.1bad470b3aadc933.a50748451dbd6cd8.4490b2ea3feac138 - 99c7a4249a15b032.5652870d08e18b20.9860dd5d81cef6cf.8d1b14977c0a8f49 -@@ -44517,11 +44517,11 @@ VPCLMULQDQ_0x10(mem) - after - 808309a2a93782a2.1bad470b3aadc933.a50748451dbd6cd8.4490b2ea3feac138 - 99c7a4249a15b032.5652870d08e18b20.9860dd5d81cef6cf.8d1b14977c0a8f49 -- 0000000000000000.0000000000000000.55941bd1188641b0.0d48c9e56f71f418 -+ 60bbe76dbbd5f3d7.39e3818a6e646388.0d421d05c7fc7703.112cf149c27414be - b22b4e68278406bc.20ad2fee09c28d15.de7b822a0a52aaa3.2a10466cafb38e43 - 35130d6dde533783 - --VPCLMULQDQ_0x10(reg) -+VMASKMOVPD_256_StoreForm(reg) - before - 8e8044b6ece14c2b.6be35601fb2ea60e.66fb8fa574874473.e8d58ab666dd4dd9 - 92a5e7b475e808e6.67af792452dd8ff8.691b9c1c4c40c54f.071eb097f8a81ad1 -@@ -44529,12 +44529,12 @@ VPCLMULQDQ_0x10(reg) - 06435d8165926848.98b206b9fb7f2b47.12fdaef6b0bc1430.f4a847042c2f24ba - 7a82b0690703d903 - after -- 0000000000000000.0000000000000000.0392ad87514762b4.4b9ac8ca257ee4c5 -+ 8e8044b6ece14c2b.6be35601fb2ea60e.66fb8fa574874473.e8d58ab666dd4dd9 - 92a5e7b475e808e6.67af792452dd8ff8.691b9c1c4c40c54f.071eb097f8a81ad1 - 9bccf0d414f4a861.825a35bd499f7da7.845853bd2c784c55.172071b7dcbfceb9 - 06435d8165926848.98b206b9fb7f2b47.12fdaef6b0bc1430.f4a847042c2f24ba - 7a82b0690703d903 --VPCLMULQDQ_0x10(mem) -+VMASKMOVPD_256_StoreForm(mem) - before - 857927d28647a9be.2f542826054d8446.85816602848a5603.7157ab3275975b8d - f15b282bc8085017.724c4f318fb13708.2594d38501cbba08.fbb245dc17955b18 -@@ -44542,13 +44542,13 @@ VPCLMULQDQ_0x10(mem) - 5b0bb95dff2e1156.b6209f26d3a65586.eeb6c0eb46201c9b.049b402f5f2c7866 - 3bc09aaf3edc0d81 - after -- 857927d28647a9be.2f542826054d8446.85816602848a5603.7157ab3275975b8d -+ f15b282bc8085017.2f542826054d8446.85816602848a5603.7157ab3275975b8d - f15b282bc8085017.724c4f318fb13708.2594d38501cbba08.fbb245dc17955b18 -- 0000000000000000.0000000000000000.7eb158aef12c5f3f.26ea8574c6e23d28 -+ 9af23060e650893b.2b76ce0da04bbe39.54b7c72f8e4e1381.0e5a78623143507c - 5b0bb95dff2e1156.b6209f26d3a65586.eeb6c0eb46201c9b.049b402f5f2c7866 - 3bc09aaf3edc0d81 - --VPCLMULQDQ_0x10(reg) -+VMASKMOVPD_256_StoreForm(reg) - before - 0d17814f6ae04c7a.1272410e2caba494.6f94c0e8c54f379b.ce5c3aa4454c9282 - d8eaf1797ec370fc.9af343608bd5fe20.b2202cc011d0a223.d277af48a8de3061 -@@ -44556,12 +44556,12 @@ VPCLMULQDQ_0x10(reg) - c4375c1fcf575b4e.8d73a6934e5ff5d3.45abd55d2890fd3e.b3377ffe0866d8b9 - 4875d1e83d73598a - after -- 0000000000000000.0000000000000000.576049a3c05b0c27.b136c1adda912b6b -+ 0d17814f6ae04c7a.1272410e2caba494.6f94c0e8c54f379b.ce5c3aa4454c9282 - d8eaf1797ec370fc.9af343608bd5fe20.b2202cc011d0a223.d277af48a8de3061 - f686e69a1611b7b4.cf5a3c3d38b8da26.db0edf1853b8d0cb.d5d19dc28ae3b465 - c4375c1fcf575b4e.8d73a6934e5ff5d3.45abd55d2890fd3e.b3377ffe0866d8b9 - 4875d1e83d73598a --VPCLMULQDQ_0x10(mem) -+VMASKMOVPD_256_StoreForm(mem) - before - 6f570f6c4617f204.9f48507244209975.af09ff4cead60b53.4e430bfc2ce66729 - 06a9b6773e5d6152.e107bd0112f8acd6.13e9c2562729d7d1.51217c5ffa454838 -@@ -44569,13 +44569,13 @@ VPCLMULQDQ_0x10(mem) - f0cc2ccd6d00ab1c.0dbbf27f270744f4.0db7760af595847a.b5e3ff26654f6170 - cd5f09613b1311f1 - after -- 6f570f6c4617f204.9f48507244209975.af09ff4cead60b53.4e430bfc2ce66729 - 06a9b6773e5d6152.e107bd0112f8acd6.13e9c2562729d7d1.51217c5ffa454838 -- 0000000000000000.0000000000000000.218894de79201b2a.b9163be44f40ddc8 -+ 06a9b6773e5d6152.e107bd0112f8acd6.13e9c2562729d7d1.51217c5ffa454838 -+ e73641f3425160a0.e7bf9f36d46cd11c.94df6b9c2165167a.aa9324f42e3add16 - f0cc2ccd6d00ab1c.0dbbf27f270744f4.0db7760af595847a.b5e3ff26654f6170 - cd5f09613b1311f1 - --VPCLMULQDQ_0x11(reg) -+VCMPSS_128_0xB(reg) - before - 50513f114b0f2946.fc35f3f2dc7500f0.b048b347a655410a.5c3d608cbfc5ddfc - 99059ca231d1e51a.e63e124daabd1948.2ab2ddfaede30309.5b3da40e9902dc2c -@@ -44583,12 +44583,12 @@ VPCLMULQDQ_0x11(reg) - ece8bb17f1d538f2.c8604a54d5f38937.164c5cd246ecc975.ddda2ac2f4d0bf4a - 180f65cdab7a1a8e - after -- 0000000000000000.0000000000000000.1c0140786d8b9c3b.c6ddd856d070596e -+ 0000000000000000.0000000000000000.2ab2ddfaede30309.5b3da40e00000000 - 99059ca231d1e51a.e63e124daabd1948.2ab2ddfaede30309.5b3da40e9902dc2c - 03c91c808ae4811a.8cb306c9f4e2b351.d8456c04993cc79e.e882be7ca2573e38 - ece8bb17f1d538f2.c8604a54d5f38937.164c5cd246ecc975.ddda2ac2f4d0bf4a - 180f65cdab7a1a8e --VPCLMULQDQ_0x11(mem) -+VCMPSS_128_0xB(mem) - before - 73eee987e4600c31.aead76d3032f474d.77105ad969f95925.4015a9ce8f804439 - cb4334deba8f515f.a76647215b7ee9d8.7691b244cd02dd48.b2ea506511837696 -@@ -44598,11 +44598,11 @@ VPCLMULQDQ_0x11(mem) - after - 73eee987e4600c31.aead76d3032f474d.77105ad969f95925.4015a9ce8f804439 - cb4334deba8f515f.a76647215b7ee9d8.7691b244cd02dd48.b2ea506511837696 -- 0000000000000000.0000000000000000.1559c54f9276b074.b3658704636b8968 -+ 0000000000000000.0000000000000000.7691b244cd02dd48.b2ea506500000000 - e37e0d0faff5c30a.aadf211f4f2dd92d.d0312c7d744af3db.deec99152d07e9ce - 50af330600a0a400 - --VPCLMULQDQ_0x11(reg) -+VCMPSS_128_0xB(reg) - before - 7ab017427bd9047c.5afc92c2054468df.6c3720a823a49f4e.e3e94522eea2fda4 - b83a3f353b3d45ee.3f21cec1690c50ef.d5b32771ad40e950.b5a1965da82cac51 -@@ -44610,12 +44610,12 @@ VPCLMULQDQ_0x11(reg) - df1751f0f8b65e62.be8b5953ca35d76f.07433a78541af7a1.0740d1464a08e80a - 3ebfb3cc6a71ed6d - after -- 0000000000000000.0000000000000000.130b13bff6e6b1e0.81463931cff5cf90 -+ 0000000000000000.0000000000000000.d5b32771ad40e950.b5a1965d00000000 - b83a3f353b3d45ee.3f21cec1690c50ef.d5b32771ad40e950.b5a1965da82cac51 - 6698a94adb58a501.6cb73cf8f7583666.3f9e31e8898ef2dd.22259b1bbdf5bb0f - df1751f0f8b65e62.be8b5953ca35d76f.07433a78541af7a1.0740d1464a08e80a - 3ebfb3cc6a71ed6d --VPCLMULQDQ_0x11(mem) -+VCMPSS_128_0xB(mem) - before - a46fbd983a3d8764.810331902de4adbc.11689fbeffaeef37.89ef3e8daa6e3349 - 151a6b96d576711c.a7a84797176dcebc.411c8c26b0cf3aea.22ee39942618e481 -@@ -44625,11 +44625,11 @@ VPCLMULQDQ_0x11(mem) - after - a46fbd983a3d8764.810331902de4adbc.11689fbeffaeef37.89ef3e8daa6e3349 - 151a6b96d576711c.a7a84797176dcebc.411c8c26b0cf3aea.22ee39942618e481 -- 0000000000000000.0000000000000000.044a9f679148ecf5.b786a4b760f45176 -+ 0000000000000000.0000000000000000.411c8c26b0cf3aea.22ee399400000000 - 8893a4d8de65287f.ee4d018b78c2745d.a8354899fd3a57be.04150623019d8f4f - 06d4cf85998f033d - --VPCLMULQDQ_0x11(reg) -+VCMPSS_128_0xB(reg) - before - 8e178087c706da6b.42fa27f484326d81.c8e49f4f27a57256.97320f7ccf9da238 - f9281397278f5185.778c3ef2659df2f3.9665612bfb1332a4.d3356d0c8fd7104d -@@ -44637,12 +44637,12 @@ VPCLMULQDQ_0x11(reg) - e3e7d48eef040e2b.c2651945497fafda.7d5046d77fc3e6f1.a27cdae0470643f6 - ed59e3fc771180e3 - after -- 0000000000000000.0000000000000000.512e3baf6b954afe.5cbf3f84222f9350 -+ 0000000000000000.0000000000000000.9665612bfb1332a4.d3356d0c00000000 - f9281397278f5185.778c3ef2659df2f3.9665612bfb1332a4.d3356d0c8fd7104d - a154862056b5a436.031766bf9db37402.b31a45898f99eff4.380adc3458f65c28 - e3e7d48eef040e2b.c2651945497fafda.7d5046d77fc3e6f1.a27cdae0470643f6 - ed59e3fc771180e3 --VPCLMULQDQ_0x11(mem) -+VCMPSS_128_0xB(mem) - before - f56b71740525d11a.1b2df94c8f09cc0f.9043d571850d5fa7.4e536080681b5348 - 967f02340c4df0c8.a571f2c9d14f1a8f.497c15306c6a3f93.846e8ff0e62f71a5 -@@ -44652,11 +44652,11 @@ VPCLMULQDQ_0x11(mem) - after - f56b71740525d11a.1b2df94c8f09cc0f.9043d571850d5fa7.4e536080681b5348 - 967f02340c4df0c8.a571f2c9d14f1a8f.497c15306c6a3f93.846e8ff0e62f71a5 -- 0000000000000000.0000000000000000.203b7c4f8a95d0f1.c8da4688b4561419 -+ 0000000000000000.0000000000000000.497c15306c6a3f93.846e8ff000000000 - 13dd1a3df70b8a37.1f274ca8adcf5412.eb331214acbe817f.8b201ed50eb9b31f - 144f7523f1474f95 - --VPCLMULQDQ_0xFF(reg) -+VCMPSS_128_0xF(reg) - before - 71c6d1e7d8c08cc0.a6bf995d13b87e51.c630a6e37e21b96d.8d49c7113ece5cd6 - ffd12e8e60b1a74c.43d30a7618aa2f91.3068c48c62e59e13.8aeaf050eadc57fd -@@ -44664,12 +44664,12 @@ VPCLMULQDQ_0xFF(reg) - 19d8dd37c128663a.07bfb43f4e8bc035.ba9538d4d2f0d7f3.04008e4406239f6e - 3a0cfcd1ae74650f - after -- 0000000000000000.0000000000000000.1cbe7bf020b64827.4435fc7239dd16c3 -+ 0000000000000000.0000000000000000.3068c48c62e59e13.8aeaf050ffffffff - ffd12e8e60b1a74c.43d30a7618aa2f91.3068c48c62e59e13.8aeaf050eadc57fd - 18be898524a5dce7.c5e4ea7222ec5c24.b81ba00df5a63eb1.bee309bdcff42f21 - 19d8dd37c128663a.07bfb43f4e8bc035.ba9538d4d2f0d7f3.04008e4406239f6e - 3a0cfcd1ae74650f --VPCLMULQDQ_0xFF(mem) -+VCMPSS_128_0xF(mem) - before - 3ad5ce51e0f43b31.5f6a260fd2c782f4.e730e4c8b89116f1.9221874b954fa284 - e22580aebbadddff.44c2607bf40d6cbf.4003f7f97b0c1b83.9b0d89e0db50de10 -@@ -44679,11 +44679,11 @@ VPCLMULQDQ_0xFF(mem) - after - 3ad5ce51e0f43b31.5f6a260fd2c782f4.e730e4c8b89116f1.9221874b954fa284 - e22580aebbadddff.44c2607bf40d6cbf.4003f7f97b0c1b83.9b0d89e0db50de10 -- 0000000000000000.0000000000000000.39cd4a48fae30809.88534645ac97c893 -+ 0000000000000000.0000000000000000.4003f7f97b0c1b83.9b0d89e0ffffffff - 968e74b3d5007951.5eef99bcd9bf993a.ccffb2037d9020dc.b53098115f6694cd - 7c009b85d4938754 - --VPCLMULQDQ_0xFF(reg) -+VCMPSS_128_0xF(reg) - before - e65e42c63c91d987.5b3eaf334eb1ea2d.4b5d8f69d4435442.b7bf53b4f4b099fa - 4e98894032edc712.36a5ba41decc1766.48bf66594f9fcd0b.8c12c7bd3574b19f -@@ -44691,12 +44691,12 @@ VPCLMULQDQ_0xFF(reg) - 87cce3903aec67de.a2cc30b7b471999d.e293a8b3380be893.609c1488831aad2d - 176ce622c813096e - after -- 0000000000000000.0000000000000000.2990f176183d37ba.c9dbc4d1998118d6 -+ 0000000000000000.0000000000000000.48bf66594f9fcd0b.8c12c7bdffffffff - 4e98894032edc712.36a5ba41decc1766.48bf66594f9fcd0b.8c12c7bd3574b19f - 0ff96a6053328da0.049111c9a15dbe27.b1631af9e75d4042.25c2880b5ce924f7 - 87cce3903aec67de.a2cc30b7b471999d.e293a8b3380be893.609c1488831aad2d - 176ce622c813096e --VPCLMULQDQ_0xFF(mem) -+VCMPSS_128_0xF(mem) - before - 27fd7ac447e1f3e5.105eef3e84a89078.ea2494f7331364f4.379c0bf5dd3502a9 - 6d1d4c591b8f28bf.08fb8ad4ccf04519.ba63b7753950dd57.0cca3f297266c931 -@@ -44706,11 +44706,11 @@ VPCLMULQDQ_0xFF(mem) - after - 27fd7ac447e1f3e5.105eef3e84a89078.ea2494f7331364f4.379c0bf5dd3502a9 - 6d1d4c591b8f28bf.08fb8ad4ccf04519.ba63b7753950dd57.0cca3f297266c931 -- 0000000000000000.0000000000000000.60576bb61272f166.de6918f8120f888c -+ 0000000000000000.0000000000000000.ba63b7753950dd57.0cca3f29ffffffff - 06369c1134bd634a.b0855e6dc85a4222.5dc830dc4bc8c4f3.a6c50b1cdf0d5245 - 23299bb1ed9c8b29 - --VPCLMULQDQ_0xFF(reg) -+VCMPSS_128_0xF(reg) - before - 90e3ecea5d626130.12c7110bb154e154.1a0b8f47b39302e2.e9877c9c8f1baa83 - 493dfa32c9ec1103.c416b4a9f3fc9970.61cb3fba0d8a3e59.6d5e794bcb392ed1 -@@ -44718,12 +44718,12 @@ VPCLMULQDQ_0xFF(reg) - 0e043ea00679efc4.851d758237aca990.fa2c0d1b7dde191f.c88273229904fb51 - 5868682363c9bcdd - after -- 0000000000000000.0000000000000000.246b6912a7bf6a39.337596f69bcfd5d4 -+ 0000000000000000.0000000000000000.61cb3fba0d8a3e59.6d5e794bffffffff - 493dfa32c9ec1103.c416b4a9f3fc9970.61cb3fba0d8a3e59.6d5e794bcb392ed1 - a984c1f6cdc4d751.f6ee01d816bf48cb.e2126a3272c93234.c318a2d41b2d0a07 - 0e043ea00679efc4.851d758237aca990.fa2c0d1b7dde191f.c88273229904fb51 - 5868682363c9bcdd --VPCLMULQDQ_0xFF(mem) -+VCMPSS_128_0xF(mem) - before - 4f96fdc295880ad4.d3096c9d0f949408.4d6d8b9472cc7aec.036523e1ca5530c5 - 89d8afeb4a4da165.54df475984a304ca.2aacbffbe22d750b.5a09a8f1f6b8b3d3 -@@ -44733,11 +44733,11 @@ VPCLMULQDQ_0xFF(mem) - after - 4f96fdc295880ad4.d3096c9d0f949408.4d6d8b9472cc7aec.036523e1ca5530c5 - 89d8afeb4a4da165.54df475984a304ca.2aacbffbe22d750b.5a09a8f1f6b8b3d3 -- 0000000000000000.0000000000000000.0b706be91944e0a3.99ea5000e9524454 -+ 0000000000000000.0000000000000000.2aacbffbe22d750b.5a09a8f1ffffffff - 36c7578caf1c99ff.f92cf4c025cb2f77.93227274d2e0db40.62c1ef9b5978ecd5 - cb6daa0dc9ec1a22 - --VCMPSS_128_0x9(reg) -+VCMPSS_128_0x1B(reg) - before - f2b4c479877da386.610c46db973c7262.d53dbf4188fc63ba.d7f2e95f8a4abeae - 33e2394a2fb7c5ae.3f9540657293840c.de4e2732c850512b.a0df6e4ee824bc8f -@@ -44745,12 +44745,12 @@ VCMPSS_128_0x9(reg) - 732324cbaf58bef8.84a34ad6721442ec.e3a2be114c924a45.314492e8045af859 - b1532a6bfacdae9a - after -- 0000000000000000.0000000000000000.de4e2732c850512b.a0df6e4effffffff -+ 0000000000000000.0000000000000000.de4e2732c850512b.a0df6e4e00000000 - 33e2394a2fb7c5ae.3f9540657293840c.de4e2732c850512b.a0df6e4ee824bc8f - eb4305ec5e27ba45.ac2ec3145c2c8b2c.6fab28fe80543575.cab77d2d077b910f - 732324cbaf58bef8.84a34ad6721442ec.e3a2be114c924a45.314492e8045af859 - b1532a6bfacdae9a --VCMPSS_128_0x9(mem) -+VCMPSS_128_0x1B(mem) - before - 25b0c0a206e16ffd.2acd9353bed60f73.a3bf5195cf566678.977ee6d7c999ce46 - 6b27d07a43a1f7af.6b8e4df0292ee761.e450553f90feb2fd.e88a9bbc92f2fa25 -@@ -44764,7 +44764,7 @@ VCMPSS_128_0x9(mem) - da934fb9c1564aaf.fb85921a7c9a1f48.41fc4101adb2b6a1.cd659c947bd0412b - 19cce15ed26bd3ab - --VCMPSS_128_0x9(reg) -+VCMPSS_128_0x1B(reg) - before - 7194a2f8e58affb8.ba1fb6f83b638e54.0253167e9ec6f699.14b021f140d6e518 - 3209ddcc51b900ff.dcf58788564c88f9.0368d5a88afb450e.7908ed7ba78f2c38 -@@ -44777,7 +44777,7 @@ VCMPSS_128_0x9(reg) - b6768d48b182142b.1be13e542f1ef5c8.590fcb03dcc54852.4ed0228cfdeb492c - 5a28afd7a17375e9.52af5748e0e491ed.6296f4fa31b13b11.6ed33a0e5ff6f621 - b4dfb3efe8baef42 --VCMPSS_128_0x9(mem) -+VCMPSS_128_0x1B(mem) - before - febe0919b445f2bc.7a6b3de5bf185fe5.5f2b4f5088aa1895.79474cfb254a59f9 - 263db67ae0a3b9ba.728b35dea4fb10ca.1c21a158417d45ec.fa6fd071531ddfb4 -@@ -44791,7 +44791,7 @@ VCMPSS_128_0x9(mem) - 844b0a8dc70585f5.5b92504139b1b101.1aaa431857788455.a954496cce9e1254 - 8fa836ca53653792 - --VCMPSS_128_0x9(reg) -+VCMPSS_128_0x1B(reg) - before - 50a43f4c8395b453.7271a818ba210389.03106c83209b1bab.13d58ba9ecb70dc0 - 46925f5ff9bac544.ae688e897c403552.f39ce0613ff43aef.2caa1ee903342d89 -@@ -44804,7 +44804,7 @@ VCMPSS_128_0x9(reg) - cfbf92705260a511.15fa39cc296dd77c.8780aa4533484b78.42f577c6b7f8a0dc - 4577d4ea29149165.84f423cedeb5a732.1b09c59d98248af3.3281122b251122e7 - d61c6c03688a6ed3 --VCMPSS_128_0x9(mem) -+VCMPSS_128_0x1B(mem) - before - 0b90ff3c9d7041cf.060621381b62c5ec.d522ca79b6235fa1.0b832dd40913320b - aeab49c1dfcd5705.6cb876c8c3d47c54.e550aabacec3bcf4.b23adf5522a2806d -@@ -44818,7 +44818,7 @@ VCMPSS_128_0x9(mem) - a901ef5ffb223ad1.9bb3255ba65a6671.b3db01b02cca54f8.9a8e0eeabecdfdbe - 92c383d57981a505 - --VMASKMOVPS_128_LoadForm(reg) -+VCMPSS_128_0x1F(reg) - before - b26531bb4c05e245.bad444510e3180bf.1b9677361a84117f.28d1703bab490701 - 55c01509d4e4f02b.a87e3e3e9ee8f997.b1cbc102b4042f1d.ccf6090dd82b4f9f -@@ -44826,12 +44826,12 @@ VMASKMOVPS_128_LoadForm(reg) - 99d06c8871e47398.8c8316bda68072b8.905d291ecb34b7b7.1100a133b2458c48 - 6a7c9a5f9696faab - after -- b26531bb4c05e245.bad444510e3180bf.1b9677361a84117f.28d1703bab490701 -+ 0000000000000000.0000000000000000.b1cbc102b4042f1d.ccf6090dffffffff - 55c01509d4e4f02b.a87e3e3e9ee8f997.b1cbc102b4042f1d.ccf6090dd82b4f9f - d9202a29acab0d63.4fc95b13c7546086.ba9ffd2c1066fdf6.7b174511d27be7fd - 99d06c8871e47398.8c8316bda68072b8.905d291ecb34b7b7.1100a133b2458c48 - 6a7c9a5f9696faab --VMASKMOVPS_128_LoadForm(mem) -+VCMPSS_128_0x1F(mem) - before - 6259ab819a79ed53.f11ed793be1e5f76.3976ec265778eb58.9053404581fc980b - d5615085d9fa206c.3c5467b430e20cab.336f573cf4498793.16cb3f0ecc4add9f -@@ -44841,11 +44841,11 @@ VMASKMOVPS_128_LoadForm(mem) - after - 6259ab819a79ed53.f11ed793be1e5f76.3976ec265778eb58.9053404581fc980b - d5615085d9fa206c.3c5467b430e20cab.336f573cf4498793.16cb3f0ecc4add9f -- 0000000000000000.0000000000000000.000000005778eb58.0000000081fc980b -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.336f573cf4498793.16cb3f0effffffff -+ 9c2647e47a07399f.1fabe8edf03d9cc4.7da2e11c69a31688.2474e13298a58336 - 643d7d664fca5b91 - --VMASKMOVPS_128_LoadForm(reg) -+VCMPSS_128_0x1F(reg) - before - 9ab9f1eb0da587db.a87a911713ac9711.6f64d0dc77ecf701.8675f7be7744819a - 2234372d6dc143c1.9f295fdb581e25a4.2236ce9293560444.4c7d94bce3ee00f8 -@@ -44853,12 +44853,12 @@ VMASKMOVPS_128_LoadForm(reg) - 98562e9985ed5a10.bdcc78cb559fc3dc.2554f803f78c228a.7f5f4f7c428b2542 - a4d166176f964387 - after -- 9ab9f1eb0da587db.a87a911713ac9711.6f64d0dc77ecf701.8675f7be7744819a -+ 0000000000000000.0000000000000000.2236ce9293560444.4c7d94bcffffffff - 2234372d6dc143c1.9f295fdb581e25a4.2236ce9293560444.4c7d94bce3ee00f8 - 58f94d980baacbef.5d012d1e656ba083.966cdc7bdf07fe38.ab873202c8ad4dcb - 98562e9985ed5a10.bdcc78cb559fc3dc.2554f803f78c228a.7f5f4f7c428b2542 - a4d166176f964387 --VMASKMOVPS_128_LoadForm(mem) -+VCMPSS_128_0x1F(mem) - before - f5a9f4bd68da64c6.3e95d69a74152dd1.9d58bace44c44cd8.2d381d967870abe6 - 50b3735c4b61442c.a603410876af80dd.d86f71134fe8f5a6.086547a1fd3fd7f7 -@@ -44868,11 +44868,11 @@ VMASKMOVPS_128_LoadForm(mem) - after - f5a9f4bd68da64c6.3e95d69a74152dd1.9d58bace44c44cd8.2d381d967870abe6 - 50b3735c4b61442c.a603410876af80dd.d86f71134fe8f5a6.086547a1fd3fd7f7 -- 0000000000000000.0000000000000000.9d58bace00000000.000000007870abe6 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.d86f71134fe8f5a6.086547a1ffffffff -+ 918b39313e6e311c.2c9b51dc22669489.ce712c13275b9962.abca9bcb85d002ea - 2a99bdc2c0a97b23 - --VMASKMOVPS_128_LoadForm(reg) -+VCMPSS_128_0x1F(reg) - before - ede2d4e16f9e85c3.2ef37740850bb5fe.015eee1a039bce80.42f327a62cc20da9 - 50efdd932f3a5d74.45bb97f7261ce8b7.097f3f7567727772.8132872cbd589171 -@@ -44880,12 +44880,12 @@ VMASKMOVPS_128_LoadForm(reg) - 6788b160509866bb.4da36f0de4cb495c.1e0ee93227340afb.cf1363bdf13ebb32 - 964dd8a0cca6d984 - after -- ede2d4e16f9e85c3.2ef37740850bb5fe.015eee1a039bce80.42f327a62cc20da9 -+ 0000000000000000.0000000000000000.097f3f7567727772.8132872cffffffff - 50efdd932f3a5d74.45bb97f7261ce8b7.097f3f7567727772.8132872cbd589171 - b00dd2449b093ee2.b0b216423dad8572.9f4b3e59ea76cd0d.66f8c78ff528e1e5 - 6788b160509866bb.4da36f0de4cb495c.1e0ee93227340afb.cf1363bdf13ebb32 - 964dd8a0cca6d984 --VMASKMOVPS_128_LoadForm(mem) -+VCMPSS_128_0x1F(mem) - before - 9973a126a26df806.d2ac7553e9720fa9.f6591e443a81f0a0.e4143b6cba376ae8 - b250393a909ed3e4.4dc51a8902237658.89a29fd459db366b.4ca93073400b2b81 -@@ -44895,11 +44895,11 @@ VMASKMOVPS_128_LoadForm(mem) - after - 9973a126a26df806.d2ac7553e9720fa9.f6591e443a81f0a0.e4143b6cba376ae8 - b250393a909ed3e4.4dc51a8902237658.89a29fd459db366b.4ca93073400b2b81 -- 0000000000000000.0000000000000000.f6591e4400000000.0000000000000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.89a29fd459db366b.4ca93073ffffffff -+ 9a63ccbc236fb168.e305f86f273c6cac.d91808aa63ad8e44.71aff4989357bb66 - e6b8ba8f98e8020a - --VMASKMOVPS_256_LoadForm(reg) -+VCMPSD_128_0x9(reg) - before - 6e80140200799a0a.2031bd02ff272a64.b6c429f66abc74a8.4edee8ca863d18ab - 6353fd5f6698bd11.2ee66f86637a516d.09a82b719d422a15.1c658bf2e3a13048 -@@ -44907,12 +44907,12 @@ VMASKMOVPS_256_LoadForm(reg) - 084a6e839eae96e6.4d3803f9311e9455.9f0e93ef46968ef6.34ea0609b815fdd7 - 3580d6d1693e2a20 - after -- 6e80140200799a0a.2031bd02ff272a64.b6c429f66abc74a8.4edee8ca863d18ab -+ 0000000000000000.0000000000000000.09a82b719d422a15.ffffffffffffffff - 6353fd5f6698bd11.2ee66f86637a516d.09a82b719d422a15.1c658bf2e3a13048 - 237d721167d1a7cb.9e4f5d356b73e0af.38fdfb4a5d5cc9a1.207b6b0d95e59348 - 084a6e839eae96e6.4d3803f9311e9455.9f0e93ef46968ef6.34ea0609b815fdd7 - 3580d6d1693e2a20 --VMASKMOVPS_256_LoadForm(mem) -+VCMPSD_128_0x9(mem) - before - ff075951c46bd64f.6f05ec23a7bdc40c.176cdec0d487288c.9a29f1cbf27bb5c0 - 6f4c0b75e4a9bc91.b5fcea5c1f896ee9.d9b968746ebb5a7f.8498104a00977aad -@@ -44922,11 +44922,11 @@ VMASKMOVPS_256_LoadForm(mem) - after - ff075951c46bd64f.6f05ec23a7bdc40c.176cdec0d487288c.9a29f1cbf27bb5c0 - 6f4c0b75e4a9bc91.b5fcea5c1f896ee9.d9b968746ebb5a7f.8498104a00977aad -- 00000000c46bd64f.6f05ec2300000000.176cdec000000000.9a29f1cb00000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.d9b968746ebb5a7f.0000000000000000 -+ ac3fe85ae58528fe.49c9544acb8a257b.b0c97e58f8b2834c.9aa681e1aca5cc9a - 7ddcccd182afd2f3 - --VMASKMOVPS_256_LoadForm(reg) -+VCMPSD_128_0x9(reg) - before - bf97c8152a21651d.32850cf2fd3b2780.5038b8d636d7aa87.7e25025e208df27d - be2271173d86c2c5.cdba4edf4b3250c4.a6118bab80109bfb.b3c92503af62ee1b -@@ -44934,12 +44934,12 @@ VMASKMOVPS_256_LoadForm(reg) - 5fdcbb091a5ac93e.b21c1d64f7111245.aa356ee11f7cafc9.c2183dd8752c7d4c - 545c29dfe3388738 - after -- bf97c8152a21651d.32850cf2fd3b2780.5038b8d636d7aa87.7e25025e208df27d -+ 0000000000000000.0000000000000000.a6118bab80109bfb.ffffffffffffffff - be2271173d86c2c5.cdba4edf4b3250c4.a6118bab80109bfb.b3c92503af62ee1b - d5cbc345596a2597.59a82a0cea7660f7.a5a2c93644c33382.2b816533c33e3351 - 5fdcbb091a5ac93e.b21c1d64f7111245.aa356ee11f7cafc9.c2183dd8752c7d4c - 545c29dfe3388738 --VMASKMOVPS_256_LoadForm(mem) -+VCMPSD_128_0x9(mem) - before - bd17a534296f0e40.baa253d11be1ec67.b4e2a1d58d1123da.1118771aadc54b7c - d9162ec462dbce91.41698908f98bc8be.3bc5344ac9814fe1.3695df4c882c4346 -@@ -44949,11 +44949,11 @@ VMASKMOVPS_256_LoadForm(mem) - after - bd17a534296f0e40.baa253d11be1ec67.b4e2a1d58d1123da.1118771aadc54b7c - d9162ec462dbce91.41698908f98bc8be.3bc5344ac9814fe1.3695df4c882c4346 -- bd17a53400000000.000000001be1ec67.000000008d1123da.00000000adc54b7c -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.3bc5344ac9814fe1.0000000000000000 -+ 9a1054411e88e8bc.422abd73b9799da3.481675f0a1e3e7f6.2a8fbc4a9b8335d1 - b1a52af00b8aa8ea - --VMASKMOVPS_256_LoadForm(reg) -+VCMPSD_128_0x9(reg) - before - 6686e63e38de66cb.f7a3e907dae0baef.74bbb27fd4d60e8b.861b1bf975eccb5d - a57deea1c00cad1f.77a97bb6f99fb41a.437e35aa3b852950.b86fbfb65f96bae6 -@@ -44961,12 +44961,12 @@ VMASKMOVPS_256_LoadForm(reg) - 31e0d0575024c0d2.4f418284d17e140a.23c5d20d600e4c22.6d2ef1fde3faa811 - a733785fb5cd1f0a - after -- 6686e63e38de66cb.f7a3e907dae0baef.74bbb27fd4d60e8b.861b1bf975eccb5d -+ 0000000000000000.0000000000000000.437e35aa3b852950.0000000000000000 - a57deea1c00cad1f.77a97bb6f99fb41a.437e35aa3b852950.b86fbfb65f96bae6 - cad73d853f9fb793.f5ef843c97cf946a.09bd41608b14299e.bcdbdd147aec70be - 31e0d0575024c0d2.4f418284d17e140a.23c5d20d600e4c22.6d2ef1fde3faa811 - a733785fb5cd1f0a --VMASKMOVPS_256_LoadForm(mem) -+VCMPSD_128_0x9(mem) - before - 45b5ec240c7091d6.36e4a18190250689.606bf07ac2b8f127.eee2e51e5400cc88 - 2581cb3a05f0b9a0.342fae719a31c363.03394b0b8788e6ec.c46074fd0675e67b -@@ -44976,11 +44976,11 @@ VMASKMOVPS_256_LoadForm(mem) - after - 45b5ec240c7091d6.36e4a18190250689.606bf07ac2b8f127.eee2e51e5400cc88 - 2581cb3a05f0b9a0.342fae719a31c363.03394b0b8788e6ec.c46074fd0675e67b -- 0000000000000000.0000000090250689.00000000c2b8f127.eee2e51e00000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.03394b0b8788e6ec.0000000000000000 -+ 1727b8064cb31ee1.90c8694f7d939433.74f1b4a9fb1a0c21.04aefbda0e19d6ba - 2716ebaf9c60255e - --VMASKMOVPD_128_LoadForm(reg) -+VCMPSD_128_0xB(reg) - before - c50f4703575bfe40.e299bd94d110d3af.a4b010168f022081.f872bb90e2f5b3e8 - 3be50d42db949c0b.5d851d2268782e2b.230ee152daab14a2.80c79ec00d966408 -@@ -44988,12 +44988,12 @@ VMASKMOVPD_128_LoadForm(reg) - 1f58c431acf61a0e.d7fadcef3a9fc9e0.ce5ef6d992d8230e.081de9b09c5bcf02 - c0b6494739970134 - after -- c50f4703575bfe40.e299bd94d110d3af.a4b010168f022081.f872bb90e2f5b3e8 -+ 0000000000000000.0000000000000000.230ee152daab14a2.0000000000000000 - 3be50d42db949c0b.5d851d2268782e2b.230ee152daab14a2.80c79ec00d966408 - e5e438d8c3993c6c.66b6539c2cfaec83.682fda6ffd19ac42.e6bcda279709d9ad - 1f58c431acf61a0e.d7fadcef3a9fc9e0.ce5ef6d992d8230e.081de9b09c5bcf02 - c0b6494739970134 --VMASKMOVPD_128_LoadForm(mem) -+VCMPSD_128_0xB(mem) - before - ec5275d88aca2d6e.458caeb93135719e.8e1b3205ae758071.b3e932fc3574b7b2 - 66bfea4faafe0ddd.b3cdf0ddeee57fc8.65e6d3cca287ce60.721a8845837aa1d9 -@@ -45003,11 +45003,11 @@ VMASKMOVPD_128_LoadForm(mem) - after - ec5275d88aca2d6e.458caeb93135719e.8e1b3205ae758071.b3e932fc3574b7b2 - 66bfea4faafe0ddd.b3cdf0ddeee57fc8.65e6d3cca287ce60.721a8845837aa1d9 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.65e6d3cca287ce60.0000000000000000 -+ b8379b9fc89fdb08.d7a771a583c1aa98.e7a9e31980901f0a.eca277f58ef26e63 - 61900734837cc81d - --VMASKMOVPD_128_LoadForm(reg) -+VCMPSD_128_0xB(reg) - before - 1f54a349929f6a0a.47dbd050ff23411d.45d6a82192064096.493a4a78a19f991d - 843c459f59e890d8.957f3d9875d94c16.6b4327e949ea7dde.3da4ec36b41b9a3e -@@ -45015,12 +45015,12 @@ VMASKMOVPD_128_LoadForm(reg) - aea490be781956c1.dff6b0998f0c4066.4f03f20a21c1d6fb.4637ce841e87205d - 14f706ecad8f1db2 - after -- 1f54a349929f6a0a.47dbd050ff23411d.45d6a82192064096.493a4a78a19f991d -+ 0000000000000000.0000000000000000.6b4327e949ea7dde.0000000000000000 - 843c459f59e890d8.957f3d9875d94c16.6b4327e949ea7dde.3da4ec36b41b9a3e - ea93eba271e27530.7fef5f6146ceb720.a539ec6845fa9a1c.9db54441d40fde9a - aea490be781956c1.dff6b0998f0c4066.4f03f20a21c1d6fb.4637ce841e87205d - 14f706ecad8f1db2 --VMASKMOVPD_128_LoadForm(mem) -+VCMPSD_128_0xB(mem) - before - e3c068639d3491c6.2dbc305f0a1a6e35.9262ae2a6ba2a115.c5ee353b7acc6b28 - 8f6071d60b8238c4.c127c8f1c270fa39.74fdd402f7999759.6247b167eba6964e -@@ -45030,11 +45030,11 @@ VMASKMOVPD_128_LoadForm(mem) - after - e3c068639d3491c6.2dbc305f0a1a6e35.9262ae2a6ba2a115.c5ee353b7acc6b28 - 8f6071d60b8238c4.c127c8f1c270fa39.74fdd402f7999759.6247b167eba6964e -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.74fdd402f7999759.0000000000000000 -+ ef516561d0450d31.9b26cd99154c5e9f.35f389348ddf304e.866d466187f79d38 - c3d45606ea87f153 - --VMASKMOVPD_128_LoadForm(reg) -+VCMPSD_128_0xB(reg) - before - 99d78f56d516cb17.5a3a48515ed3b4f7.9a513286e8eaae59.cce51066cf464c57 - 63c4eebee4316732.1229c2ecda3a7e58.1e007e15520e6153.0238af8e303feda5 -@@ -45042,12 +45042,12 @@ VMASKMOVPD_128_LoadForm(reg) - 42870a83e138d317.d94868d80ac06999.2815bcc55914e2b6.bb2d2571c218acbf - f667f5032a1043e3 - after -- 99d78f56d516cb17.5a3a48515ed3b4f7.9a513286e8eaae59.cce51066cf464c57 -+ 0000000000000000.0000000000000000.1e007e15520e6153.0000000000000000 - 63c4eebee4316732.1229c2ecda3a7e58.1e007e15520e6153.0238af8e303feda5 - 7ce56da9b463004e.f3ea4e205f85267f.847daeb0ef42b439.b3b6e299ced6ce64 - 42870a83e138d317.d94868d80ac06999.2815bcc55914e2b6.bb2d2571c218acbf - f667f5032a1043e3 --VMASKMOVPD_128_LoadForm(mem) -+VCMPSD_128_0xB(mem) - before - 4031cd3c22ca4ffb.0ff6c0b7063d1c3a.a0118c00f6f802d2.6614a6bf2f102977 - 75562906c5538b34.417d8cb3bffd1663.230f36844038af55.9ac6680a0ac1c327 -@@ -45057,11 +45057,11 @@ VMASKMOVPD_128_LoadForm(mem) - after - 4031cd3c22ca4ffb.0ff6c0b7063d1c3a.a0118c00f6f802d2.6614a6bf2f102977 - 75562906c5538b34.417d8cb3bffd1663.230f36844038af55.9ac6680a0ac1c327 -- 0000000000000000.0000000000000000.0000000000000000.6614a6bf2f102977 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.230f36844038af55.0000000000000000 -+ 10e65e027dff85b8.400752b160df1075.d2de0e515c0130eb.547260434572e207 - 92048f09dc8bdf8e - --VMASKMOVPD_256_LoadForm(reg) -+VCMPSD_128_0xF(reg) - before - 367985d0ea8920b5.2de72e0bca3bbc5b.c5a2458a7f1988b7.b545337166a27c56 - 9b1d3e050af9e127.a6747356337513ce.1f853ddaa23ea1ae.c513ce9d3d7bcbbc -@@ -45069,12 +45069,12 @@ VMASKMOVPD_256_LoadForm(reg) - 1d22eb65f25cd29e.18624a62c71413d7.bd552e90667aa96c.db1058cbc5076226 - 9ad73ea3add12284 - after -- 367985d0ea8920b5.2de72e0bca3bbc5b.c5a2458a7f1988b7.b545337166a27c56 -+ 0000000000000000.0000000000000000.1f853ddaa23ea1ae.ffffffffffffffff - 9b1d3e050af9e127.a6747356337513ce.1f853ddaa23ea1ae.c513ce9d3d7bcbbc - 1f3cb712d9655d91.5659a8cfd3b9473e.a8fd370e66db9806.dd135cc2ff99d948 - 1d22eb65f25cd29e.18624a62c71413d7.bd552e90667aa96c.db1058cbc5076226 - 9ad73ea3add12284 --VMASKMOVPD_256_LoadForm(mem) -+VCMPSD_128_0xF(mem) - before - f5358a38d304d48c.f11ad669f16779fc.ca5bd3fb2a9135c4.badb1ece3faa0f8c - caf4b87551ab356a.f772748973149154.470fc187193c6631.fcd903338cf50712 -@@ -45084,11 +45084,11 @@ VMASKMOVPD_256_LoadForm(mem) - after - f5358a38d304d48c.f11ad669f16779fc.ca5bd3fb2a9135c4.badb1ece3faa0f8c - caf4b87551ab356a.f772748973149154.470fc187193c6631.fcd903338cf50712 -- f5358a38d304d48c.f11ad669f16779fc.0000000000000000.badb1ece3faa0f8c -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.470fc187193c6631.ffffffffffffffff -+ 4ec7ac97cc86f25b.086dbad26e82ffa9.11dcb924094eed3f.ba719c21f40c9dfd - efa2498347f1b2bc - --VMASKMOVPD_256_LoadForm(reg) -+VCMPSD_128_0xF(reg) - before - d87cdbbd7e21498f.b5736954ffd2c7c5.cca95ad2205bcefc.168cbc0e42ccb936 - d14a4e3935289e25.06b2f86afcc33bb6.31749d9fc405fcfb.5728129977a9865e -@@ -45096,12 +45096,12 @@ VMASKMOVPD_256_LoadForm(reg) - 64f6c9aa96ed7144.d2147d4dc2c1efdc.52e6fd5153fd68ac.f953ac4742ae11f0 - 127ae84111ee49b2 - after -- d87cdbbd7e21498f.b5736954ffd2c7c5.cca95ad2205bcefc.168cbc0e42ccb936 -+ 0000000000000000.0000000000000000.31749d9fc405fcfb.ffffffffffffffff - d14a4e3935289e25.06b2f86afcc33bb6.31749d9fc405fcfb.5728129977a9865e - 375a9f640993ed28.1b4ed6c3de630a5a.95197fa6f60cc652.ae7b39b3c3f00fe3 - 64f6c9aa96ed7144.d2147d4dc2c1efdc.52e6fd5153fd68ac.f953ac4742ae11f0 - 127ae84111ee49b2 --VMASKMOVPD_256_LoadForm(mem) -+VCMPSD_128_0xF(mem) - before - d6be678d4cbc7054.b56bc77877c26727.05d06bf2c3e6a768.c625120d76631eb6 - 22e9a7170e244503.86059738489f0a7a.924e1ba0fee0ed2c.4b23ba47fccb231c -@@ -45111,11 +45111,11 @@ VMASKMOVPD_256_LoadForm(mem) - after - d6be678d4cbc7054.b56bc77877c26727.05d06bf2c3e6a768.c625120d76631eb6 - 22e9a7170e244503.86059738489f0a7a.924e1ba0fee0ed2c.4b23ba47fccb231c -- 0000000000000000.b56bc77877c26727.05d06bf2c3e6a768.0000000000000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.924e1ba0fee0ed2c.ffffffffffffffff -+ bd27579698f4e437.17d89b432c9f4b27.25beb2c390811606.fc8cb3e19ece0da9 - e08efd1af382692a - --VMASKMOVPD_256_LoadForm(reg) -+VCMPSD_128_0xF(reg) - before - 4580ca801b6705b5.c6d1c06398742614.90a9c76577da60d7.e44a91111f3f7175 - 88ac167fb1091df9.c594d81d90be06ae.f9ceb42a234c12a9.6dc7221757034bcb -@@ -45123,12 +45123,12 @@ VMASKMOVPD_256_LoadForm(reg) - 19e51bf899b6b057.18900a0dd6e08bc6.0b47c24d0b064063.48c64bfc35c66ada - 53e1dab212de27eb - after -- 4580ca801b6705b5.c6d1c06398742614.90a9c76577da60d7.e44a91111f3f7175 -+ 0000000000000000.0000000000000000.f9ceb42a234c12a9.ffffffffffffffff - 88ac167fb1091df9.c594d81d90be06ae.f9ceb42a234c12a9.6dc7221757034bcb - 065fdd8352f5eda0.973a1db29bde3e30.ae945efeca819e49.9a02e1c255d65f33 - 19e51bf899b6b057.18900a0dd6e08bc6.0b47c24d0b064063.48c64bfc35c66ada - 53e1dab212de27eb --VMASKMOVPD_256_LoadForm(mem) -+VCMPSD_128_0xF(mem) - before - 971e0cd1082b5493.1e8acd4b22d8a3c9.24621b1a5cd1a89d.6b33da837f6634a1 - f0485d4334b8abfe.719aeee68ae802a3.977ccdc54abc52e1.2ca4a40cc42eb5b2 -@@ -45138,11 +45138,11 @@ VMASKMOVPD_256_LoadForm(mem) - after - 971e0cd1082b5493.1e8acd4b22d8a3c9.24621b1a5cd1a89d.6b33da837f6634a1 - f0485d4334b8abfe.719aeee68ae802a3.977ccdc54abc52e1.2ca4a40cc42eb5b2 -- 971e0cd1082b5493.0000000000000000.24621b1a5cd1a89d.0000000000000000 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.977ccdc54abc52e1.ffffffffffffffff -+ 519647d49cc3c9cb.712a6ea865fff33d.22b701a5ccb23d5f.3d443bc8302351f8 - 460c01d38f68e485 - --VMASKMOVPS_128_StoreForm(reg) -+VCMPSD_128_0x1B(reg) - before - 1f8868e12e45f494.1152dacb11580885.d742c4a7111ffd56.f2717bb298d4f5f0 - 23056b5da946bed1.562b7bc62b5f62b2.faf57a9e0a5c6286.99a2850d3b212a9e -@@ -45150,12 +45150,12 @@ VMASKMOVPS_128_StoreForm(reg) - 20313b54a6e06f82.df68d878bfec5614.ea5cf329595e31dd.dc9c3b5e7969fb01 - 30fdde2c4b7d0e0d - after -- 1f8868e12e45f494.1152dacb11580885.d742c4a7111ffd56.f2717bb298d4f5f0 -+ 0000000000000000.0000000000000000.faf57a9e0a5c6286.0000000000000000 - 23056b5da946bed1.562b7bc62b5f62b2.faf57a9e0a5c6286.99a2850d3b212a9e - b0cf09b59df57ee7.fcefa6b106e1937e.378f8bfbef43607a.f3179ca3d2a49895 - 20313b54a6e06f82.df68d878bfec5614.ea5cf329595e31dd.dc9c3b5e7969fb01 - 30fdde2c4b7d0e0d --VMASKMOVPS_128_StoreForm(mem) -+VCMPSD_128_0x1B(mem) - before - cb0601f864eb8ee5.d179ffa65f92ce50.db648b07718c68a1.6fa8af94e73c115c - 898220aee1bf36b6.1df14f186498d7fb.ccad3d4b38cb8550.22bebaa832663ea3 -@@ -45163,13 +45163,13 @@ VMASKMOVPS_128_StoreForm(mem) - dd07448775cbf2f2.faa48907c4cdd699.fc588c9d785ccfc6.817cad7c75d36a37 - e6bb8d13a42de2dc - after -- cb0601f864eb8ee5.d179ffa65f92ce50.ccad3d4b718c68a1.6fa8af9432663ea3 -+ cb0601f864eb8ee5.d179ffa65f92ce50.db648b07718c68a1.6fa8af94e73c115c - 898220aee1bf36b6.1df14f186498d7fb.ccad3d4b38cb8550.22bebaa832663ea3 -- 453eb839dd06c4ac.62e62914527dc62f.8d0f692e32b7694e.5feb0fd2d86af25d -+ 0000000000000000.0000000000000000.ccad3d4b38cb8550.0000000000000000 - dd07448775cbf2f2.faa48907c4cdd699.fc588c9d785ccfc6.817cad7c75d36a37 - e6bb8d13a42de2dc - --VMASKMOVPS_128_StoreForm(reg) -+VCMPSD_128_0x1B(reg) - before - e9f4ac04020595f9.2ca74084c51a7db5.4277695e571544e5.f453208528c474e5 - e67507b92ae6c039.0eea281ae7002021.97abc783a7e04cbe.51cba3d15efd14d7 -@@ -45177,12 +45177,12 @@ VMASKMOVPS_128_StoreForm(reg) - 3d7b5e2449f56ed5.fa8eaec417bea1a2.d365eaebea3019c9.a9666344c91133e2 - 5c20994437032b54 - after -- e9f4ac04020595f9.2ca74084c51a7db5.4277695e571544e5.f453208528c474e5 -+ 0000000000000000.0000000000000000.97abc783a7e04cbe.0000000000000000 - e67507b92ae6c039.0eea281ae7002021.97abc783a7e04cbe.51cba3d15efd14d7 - 398999a0b85d9f4a.5e9e7936fa889961.538c9ee44eba29d1.ee8d906c35136ac8 - 3d7b5e2449f56ed5.fa8eaec417bea1a2.d365eaebea3019c9.a9666344c91133e2 - 5c20994437032b54 --VMASKMOVPS_128_StoreForm(mem) -+VCMPSD_128_0x1B(mem) - before - e587ac589bf50e48.509853b1783a6889.bc8543b15caff70f.7383a70617cd5653 - 1f691a6c0ff497eb.cd2c73b3e2b9ca10.8250b4e7e56656d5.8f33d2a0701d1c1b -@@ -45190,13 +45190,13 @@ VMASKMOVPS_128_StoreForm(mem) - 14caf4459e468eec.74e924c6d692b548.86921be331571d1a.ac735e0118083713 - 649db9a19fbb029b - after -- e587ac589bf50e48.509853b1783a6889.bc8543b1e56656d5.8f33d2a0701d1c1b -+ e587ac589bf50e48.509853b1783a6889.bc8543b15caff70f.7383a70617cd5653 - 1f691a6c0ff497eb.cd2c73b3e2b9ca10.8250b4e7e56656d5.8f33d2a0701d1c1b -- e5905e6cb20b8368.0f83b99623fcd016.26bb7e54cdf0791f.84bf652592ada8cc -+ 0000000000000000.0000000000000000.8250b4e7e56656d5.0000000000000000 - 14caf4459e468eec.74e924c6d692b548.86921be331571d1a.ac735e0118083713 - 649db9a19fbb029b - --VMASKMOVPS_128_StoreForm(reg) -+VCMPSD_128_0x1B(reg) - before - 0888706fc2504811.89e159e1efb273a2.57a9adaf9704b652.7ca109802ca9fdf2 - f47f81d81d554321.1ea2082ec25aefb7.131151bd03e00fdf.e6b3c317daf2d6d2 -@@ -45204,12 +45204,12 @@ VMASKMOVPS_128_StoreForm(reg) - 14c49e2ceede4bbd.1c5234875c909cad.8a04dcf94904b835.82148ce3c296635d - 6cfa93f033098f5f - after -- 0888706fc2504811.89e159e1efb273a2.57a9adaf9704b652.7ca109802ca9fdf2 -+ 0000000000000000.0000000000000000.131151bd03e00fdf.0000000000000000 - f47f81d81d554321.1ea2082ec25aefb7.131151bd03e00fdf.e6b3c317daf2d6d2 - 84cfe7494d563076.b1d97d16324bbe57.066b0d5db5b1fc9c.9e96c694583d65e7 - 14c49e2ceede4bbd.1c5234875c909cad.8a04dcf94904b835.82148ce3c296635d - 6cfa93f033098f5f --VMASKMOVPS_128_StoreForm(mem) -+VCMPSD_128_0x1B(mem) - before - 391456a7c7a3a319.00aaa2ef9a79cfa1.3cd8a96c5b3544e6.fd28baff5d648055 - c52e51f59b6f5cb9.a4cdeffdf0b3f9cf.ee3859b14b46732e.b923a4da8a5d90a8 -@@ -45219,11 +45219,11 @@ VMASKMOVPS_128_StoreForm(mem) - after - 391456a7c7a3a319.00aaa2ef9a79cfa1.3cd8a96c5b3544e6.fd28baff5d648055 - c52e51f59b6f5cb9.a4cdeffdf0b3f9cf.ee3859b14b46732e.b923a4da8a5d90a8 -- ed1400c4ca7a7568.5c7882c28a1905f3.0c3fbe4249d0e5b0.1b4194f56e7c23dc -+ 0000000000000000.0000000000000000.ee3859b14b46732e.0000000000000000 - 8b91e00271cfac55.83f956aa04362eb8.73b7560b71de5598.80cd88bea54c769a - 42157ba0ca59c591 - --VMASKMOVPS_256_StoreForm(reg) -+VCMPSD_128_0x1F(reg) - before - be636a077a304c6b.7c736c9aab7abbaa.779a6721fb97b2cb.ff6d9df8de7d8014 - 51044f60505c46d5.9c84207795875f93.93a8b2930ac6cbd7.8c2c0df5adb8224d -@@ -45231,12 +45231,12 @@ VMASKMOVPS_256_StoreForm(reg) - 276ef093dfe48607.d966f1b5e7fa54d5.b23be218e2c4ae8c.1afa5dd0de32baad - d29f3485798a282a - after -- be636a077a304c6b.7c736c9aab7abbaa.779a6721fb97b2cb.ff6d9df8de7d8014 -+ 0000000000000000.0000000000000000.93a8b2930ac6cbd7.ffffffffffffffff - 51044f60505c46d5.9c84207795875f93.93a8b2930ac6cbd7.8c2c0df5adb8224d - 55442815e869f07a.c79178874a03533e.336f316cce52b589.f7c224eef99bf772 - 276ef093dfe48607.d966f1b5e7fa54d5.b23be218e2c4ae8c.1afa5dd0de32baad - d29f3485798a282a --VMASKMOVPS_256_StoreForm(mem) -+VCMPSD_128_0x1F(mem) - before - fb7e25fbe5affd17.23d0a347d0584327.aece06ed87761e84.6e57c004e3aaf08e - 7163ad1d3fabf59d.a5b43d9b58516487.2297321b47856d78.c211c79a6c8fb838 -@@ -45244,13 +45244,13 @@ VMASKMOVPS_256_StoreForm(mem) - b46e6f142b5d3c2b.ab3618d89b04c2b6.5778c50a948a88de.a18a42788788c83b - e5e2ad9852b389ea - after -- fb7e25fb3fabf59d.23d0a347d0584327.aece06ed87761e84.6e57c004e3aaf08e -+ fb7e25fbe5affd17.23d0a347d0584327.aece06ed87761e84.6e57c004e3aaf08e - 7163ad1d3fabf59d.a5b43d9b58516487.2297321b47856d78.c211c79a6c8fb838 -- 101a47d6a28ccbeb.0968bbfd125c25d3.118bf42c4232fcdc.09b3f44819004139 -+ 0000000000000000.0000000000000000.2297321b47856d78.ffffffffffffffff - b46e6f142b5d3c2b.ab3618d89b04c2b6.5778c50a948a88de.a18a42788788c83b - e5e2ad9852b389ea - --VMASKMOVPS_256_StoreForm(reg) -+VCMPSD_128_0x1F(reg) - before - 30073113150ec0f3.392da1c2f62b0389.e86b50988fd676dd.d02823a25a98cda7 - e045ca556c23a902.7a2159cc1d01de32.1a525fa8885c7ef3.586888e1b0688766 -@@ -45258,12 +45258,12 @@ VMASKMOVPS_256_StoreForm(reg) - da3b2cde49b17fe0.a5dc4da5f5f6bb15.cf6af36effba7a9f.05c75d0079804870 - e27fc3b925dfc714 - after -- 30073113150ec0f3.392da1c2f62b0389.e86b50988fd676dd.d02823a25a98cda7 -+ 0000000000000000.0000000000000000.1a525fa8885c7ef3.ffffffffffffffff - e045ca556c23a902.7a2159cc1d01de32.1a525fa8885c7ef3.586888e1b0688766 - 4fe875caf4817fc2.5518141ebeeb8752.9e394177242416a5.cb0373b2b1077145 - da3b2cde49b17fe0.a5dc4da5f5f6bb15.cf6af36effba7a9f.05c75d0079804870 - e27fc3b925dfc714 --VMASKMOVPS_256_StoreForm(mem) -+VCMPSD_128_0x1F(mem) - before - 3df622c8d131ac5d.de8bedfe0641e407.4639804bdd2d35a6.0b3370fab4a9e58c - f4f9f5199781b177.b524b494c7bdebe4.14fd29fe939cb231.addeb487e07d9419 -@@ -45271,13 +45271,13 @@ VMASKMOVPS_256_StoreForm(mem) - e3d3e731e74c0dcb.506140d6c7a5cf6f.a6e6ce37d654a5e8.930d82550a05adc1 - 8f28046e42d18f34 - after -- f4f9f5199781b177.b524b4940641e407.14fd29fedd2d35a6.0b3370fab4a9e58c -+ 3df622c8d131ac5d.de8bedfe0641e407.4639804bdd2d35a6.0b3370fab4a9e58c - f4f9f5199781b177.b524b494c7bdebe4.14fd29fe939cb231.addeb487e07d9419 -- e254b89896db938c.bd527b0d29afd123.eaf3c5a83250eee3.11b8bc821ec2c3f1 -+ 0000000000000000.0000000000000000.14fd29fe939cb231.ffffffffffffffff - e3d3e731e74c0dcb.506140d6c7a5cf6f.a6e6ce37d654a5e8.930d82550a05adc1 - 8f28046e42d18f34 - --VMASKMOVPS_256_StoreForm(reg) -+VCMPSD_128_0x1F(reg) - before - 60573d375fb3a5f8.d242ffd1a9dfdc5e.cb9cfe5a3e2b2475.23a3c2959cb4936b - 64e4291eff362ab6.8d6c7b62f5a0bc72.8a51b10429cb0ae1.3cf71db0a07d7399 -@@ -45285,12 +45285,12 @@ VMASKMOVPS_256_StoreForm(reg) - 724b0bf3364f75d6.d3258f0ba1de9fcb.4554e77fcd8f7b98.b78ef4cacf78fba5 - cf6b68a133c11bda - after -- 60573d375fb3a5f8.d242ffd1a9dfdc5e.cb9cfe5a3e2b2475.23a3c2959cb4936b -+ 0000000000000000.0000000000000000.8a51b10429cb0ae1.ffffffffffffffff - 64e4291eff362ab6.8d6c7b62f5a0bc72.8a51b10429cb0ae1.3cf71db0a07d7399 - f61cc58ebde65c1d.ee1ed7d1ea9c6932.eaca55422513be5e.cfac5973fdba019e - 724b0bf3364f75d6.d3258f0ba1de9fcb.4554e77fcd8f7b98.b78ef4cacf78fba5 - cf6b68a133c11bda --VMASKMOVPS_256_StoreForm(mem) -+VCMPSD_128_0x1F(mem) - before - f50d33e544a41e6b.33bdf9b906feb190.164b1ffb38731969.f83b6227bdc97f3d - 0342d1801f2ac082.97be8a4cc77f4ef5.955d048ccb659437.5fcbc1a6924f04f6 -@@ -45298,13 +45298,13 @@ VMASKMOVPS_256_StoreForm(mem) - 4b90726fa154d0f3.b49c868a92239672.b374ba4653967b15.b91521da5a6e835b - 64681966851ef55d - after -- 0342d1801f2ac082.97be8a4c06feb190.164b1ffb38731969.5fcbc1a6924f04f6 -+ f50d33e544a41e6b.33bdf9b906feb190.164b1ffb38731969.f83b6227bdc97f3d - 0342d1801f2ac082.97be8a4cc77f4ef5.955d048ccb659437.5fcbc1a6924f04f6 -- d6d4bc5fe061bc4b.f89abb18185c86b2.2a26b9ac75c3cb61.d6500368e8ad4772 -+ 0000000000000000.0000000000000000.955d048ccb659437.ffffffffffffffff - 4b90726fa154d0f3.b49c868a92239672.b374ba4653967b15.b91521da5a6e835b - 64681966851ef55d - --VMASKMOVPD_128_StoreForm(reg) -+VCMPPD_128_0x0(reg) - before - 3393e67a0449d926.3c426e9a810fb6a6.2511e90cd45fb9e2.0a11834680ec607c - 82e38480737c6b5f.87b62cce999f2a8f.a946df0c779d2dad.0dcb919818d036c5 -@@ -45312,12 +45312,12 @@ VMASKMOVPD_128_StoreForm(reg) - 10222417932887d8.9612dffee76cafb5.561a7432564cf207.82c169e3fb73a4a8 - ad962bb37e4ab49a - after -- 3393e67a0449d926.3c426e9a810fb6a6.2511e90cd45fb9e2.0a11834680ec607c -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 82e38480737c6b5f.87b62cce999f2a8f.a946df0c779d2dad.0dcb919818d036c5 - ada4efe66f42e6b7.06b728f6070fe9db.9a8564f41a682c81.966c5f29384eb91a - 10222417932887d8.9612dffee76cafb5.561a7432564cf207.82c169e3fb73a4a8 - ad962bb37e4ab49a --VMASKMOVPD_128_StoreForm(mem) -+VCMPPD_128_0x0(mem) - before - f4b62186dde0a41d.07a81d7e7cb88a6e.1394ccd254c1384a.37530c31c9d6bded - 31efc8463240325c.ee84d889c5802b26.5a076b5e6b1a40c6.9b7a275d0f91c7df -@@ -45325,13 +45325,13 @@ VMASKMOVPD_128_StoreForm(mem) - 00d71642348f12c1.fb698239e9e735ab.b1f2b04e0409bb21.57c6d6ec81cb8a96 - 68826327e662bcb2 - after -- f4b62186dde0a41d.07a81d7e7cb88a6e.1394ccd254c1384a.9b7a275d0f91c7df -+ f4b62186dde0a41d.07a81d7e7cb88a6e.1394ccd254c1384a.37530c31c9d6bded - 31efc8463240325c.ee84d889c5802b26.5a076b5e6b1a40c6.9b7a275d0f91c7df -- 410b9be19c761884.200050a30b0ca5ac.4538388e47838254.dcddc122c3094d89 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 00d71642348f12c1.fb698239e9e735ab.b1f2b04e0409bb21.57c6d6ec81cb8a96 - 68826327e662bcb2 - --VMASKMOVPD_128_StoreForm(reg) -+VCMPPD_128_0x0(reg) - before - 6c5d623f8e5a1d8b.4a1fb5551995de3e.da0b68b5fc9d17d0.7a034d8abfb8a658 - bda3d1a11440eacb.fbaff50664973628.19320084dfbb86c7.7c368d2f949a0126 -@@ -45339,12 +45339,12 @@ VMASKMOVPD_128_StoreForm(reg) - b99fedef2b03b631.02d744f2a2b87df1.263e34cc875cfed9.9b30e460f92cf236 - 7090f2c5c2f400d0 - after -- 6c5d623f8e5a1d8b.4a1fb5551995de3e.da0b68b5fc9d17d0.7a034d8abfb8a658 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - bda3d1a11440eacb.fbaff50664973628.19320084dfbb86c7.7c368d2f949a0126 - b89facb7149f5e1e.ef535041339ed7aa.132945122fcbbf3b.9356eb279ebd86b7 - b99fedef2b03b631.02d744f2a2b87df1.263e34cc875cfed9.9b30e460f92cf236 - 7090f2c5c2f400d0 --VMASKMOVPD_128_StoreForm(mem) -+VCMPPD_128_0x0(mem) - before - ee42934114206db0.1ced91b3f4f92eb0.10064d05ccf1e329.adbbc71d84f77e4c - f11142c20cbcf503.3dd695710c0c0246.f5ade567ce53c67d.03edfc70c12a7d41 -@@ -45352,13 +45352,13 @@ VMASKMOVPD_128_StoreForm(mem) - f63abb805c7645b1.29a9ab8897baac69.b493b6c4c7c7f22b.90a039d16c86e260 - 7fb939b613c7c2e1 - after -- ee42934114206db0.1ced91b3f4f92eb0.f5ade567ce53c67d.03edfc70c12a7d41 -+ ee42934114206db0.1ced91b3f4f92eb0.10064d05ccf1e329.adbbc71d84f77e4c - f11142c20cbcf503.3dd695710c0c0246.f5ade567ce53c67d.03edfc70c12a7d41 -- 55cb7b33c5d554f5.78a6f4940ec86da0.8d988a02c3ece21a.8620ce33da803563 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f63abb805c7645b1.29a9ab8897baac69.b493b6c4c7c7f22b.90a039d16c86e260 - 7fb939b613c7c2e1 - --VMASKMOVPD_128_StoreForm(reg) -+VCMPPD_128_0x0(reg) - before - adb6cb4e6acf0f95.b02c7c96ecab8564.ac2ab4b9426dfb4e.466ae797f7f1b4dd - 78e5ea050d2b0625.5f6b3c5f9281d039.5d770d93ac6e95fb.1fe999696f75e25c -@@ -45366,12 +45366,12 @@ VMASKMOVPD_128_StoreForm(reg) - 5004bf81a90ce190.0b02a6be8e3d76fc.b9a09cf22b879e5a.150d6cb7a4bc746e - eb4c860b9a97505b - after -- adb6cb4e6acf0f95.b02c7c96ecab8564.ac2ab4b9426dfb4e.466ae797f7f1b4dd -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 78e5ea050d2b0625.5f6b3c5f9281d039.5d770d93ac6e95fb.1fe999696f75e25c - 3a9092479966e240.dec476c86903e25d.98dab1827048b81b.1bdb4625495f38d3 - 5004bf81a90ce190.0b02a6be8e3d76fc.b9a09cf22b879e5a.150d6cb7a4bc746e - eb4c860b9a97505b --VMASKMOVPD_128_StoreForm(mem) -+VCMPPD_128_0x0(mem) - before - 7862100d47fc89c4.178d6d1ddaaa3dc2.c1f3492b1c3c4941.1c15ca5078b78366 - 981b86a9c8f8dad5.e9779989c7cb3281.dc61dafd2f0b1759.1d853806f365a5e9 -@@ -45381,11 +45381,11 @@ VMASKMOVPD_128_StoreForm(mem) - after - 7862100d47fc89c4.178d6d1ddaaa3dc2.c1f3492b1c3c4941.1c15ca5078b78366 - 981b86a9c8f8dad5.e9779989c7cb3281.dc61dafd2f0b1759.1d853806f365a5e9 -- 264565cb389600bb.230d3e2f0dfbfe7a.371ad51fe4b69b6f.183ce182391c3e8f -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 00ab2860b4e3b7a2.229d587d47c7db58.b0e8b67c574a92b0.6885c12fe6698b05 - 6baed47895d7c7f7 - --VMASKMOVPD_256_StoreForm(reg) -+VCMPPD_256_0x0(reg) - before - 7c0116cbe2f22f11.00184b5257e9bbb5.4071e3de12ba06c8.2298f902a3d2b847 - f6cb84936a46fffd.04594a8f3db6c821.dad6dcbe0960bb76.68f51b9ce45ac961 -@@ -45393,12 +45393,12 @@ VMASKMOVPD_256_StoreForm(reg) - 9af3d13299cbc602.8487cd9645d4ebb3.f28305abedf7b13a.e4eae9bdb79c9acd - d21a8d1b816ed377 - after -- 7c0116cbe2f22f11.00184b5257e9bbb5.4071e3de12ba06c8.2298f902a3d2b847 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f6cb84936a46fffd.04594a8f3db6c821.dad6dcbe0960bb76.68f51b9ce45ac961 - 3758193cc960736a.e73aa10184569912.4c183e89c946350d.60cd973637ef802a - 9af3d13299cbc602.8487cd9645d4ebb3.f28305abedf7b13a.e4eae9bdb79c9acd - d21a8d1b816ed377 --VMASKMOVPD_256_StoreForm(mem) -+VCMPPD_256_0x0(mem) - before - 0427003db06fe654.7aeaa8e279143672.b80c49399e3c7930.28632d9011ff6ba8 - 57debc1061ae908f.35879bb602c6fc65.609591d6ab9a00b7.4a03b2a5d2eb9e04 -@@ -45406,13 +45406,13 @@ VMASKMOVPD_256_StoreForm(mem) - d17a0475b70f99d1.a8e7c17e85968186.78e176ae4e6ae98d.c2b7c50a9a9d6235 - d0624a34d87a6b62 - after -- 57debc1061ae908f.7aeaa8e279143672.b80c49399e3c7930.4a03b2a5d2eb9e04 -+ 0427003db06fe654.7aeaa8e279143672.b80c49399e3c7930.28632d9011ff6ba8 - 57debc1061ae908f.35879bb602c6fc65.609591d6ab9a00b7.4a03b2a5d2eb9e04 -- a80b3f7eaf348d55.2518a41bd36d5788.56ed215987fb3c72.b4b09154cc4688fa -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - d17a0475b70f99d1.a8e7c17e85968186.78e176ae4e6ae98d.c2b7c50a9a9d6235 - d0624a34d87a6b62 - --VMASKMOVPD_256_StoreForm(reg) -+VCMPPD_256_0x0(reg) - before - 3afe1c3d236bdd2c.aff688e0944a6f30.1841ee4ab7ccb70d.a03d0bc11df4c335 - 5cd6389017fcf640.1f4d45ab63f1cc9d.d37225ea029b35c6.abcd5c7f0fa38596 -@@ -45420,12 +45420,12 @@ VMASKMOVPD_256_StoreForm(reg) - 386e3ac9672b07f5.20b75f1144b60a54.9588a55b5936f884.dbb922a7cfa6b331 - b7ac90ebd31198c3 - after -- 3afe1c3d236bdd2c.aff688e0944a6f30.1841ee4ab7ccb70d.a03d0bc11df4c335 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 5cd6389017fcf640.1f4d45ab63f1cc9d.d37225ea029b35c6.abcd5c7f0fa38596 - 9238989b4fb8ef4a.fb49b9c23f116c45.33c564cc0490365f.765de5d24186ecdb - 386e3ac9672b07f5.20b75f1144b60a54.9588a55b5936f884.dbb922a7cfa6b331 - b7ac90ebd31198c3 --VMASKMOVPD_256_StoreForm(mem) -+VCMPPD_256_0x0(mem) - before - e604aa896cd255be.aac61a86fce178ee.6a63b3848fea63f5.5605e7039c19b5e1 - 448bec6db4f6a64e.448a323ea9677fe0.b61932073cbb3355.d089233069c6a921 -@@ -45433,13 +45433,13 @@ VMASKMOVPD_256_StoreForm(mem) - fd59d9b6c194f8db.5f88fe50bd113e61.bfd29eee29622700.62d67dca14ab29fc - 3337930e29fc2def - after -- 448bec6db4f6a64e.aac61a86fce178ee.b61932073cbb3355.5605e7039c19b5e1 -+ e604aa896cd255be.aac61a86fce178ee.6a63b3848fea63f5.5605e7039c19b5e1 - 448bec6db4f6a64e.448a323ea9677fe0.b61932073cbb3355.d089233069c6a921 -- ad0ed282c788499e.6107805e0b485878.dea457866634369f.6060564e5dc811f0 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - fd59d9b6c194f8db.5f88fe50bd113e61.bfd29eee29622700.62d67dca14ab29fc - 3337930e29fc2def - --VMASKMOVPD_256_StoreForm(reg) -+VCMPPD_256_0x0(reg) - before - 2dce948738465975.11377bf4c0267030.995baa815b4d6e49.356d8329a250c3a4 - ade97da2de15e83b.c3763629dd4b6dca.6acb805e838824d9.1c428225ed0ac6b6 -@@ -45447,12 +45447,12 @@ VMASKMOVPD_256_StoreForm(reg) - afd6f36a5d742136.7343e523e77ce47c.46b096c8da2c11a7.adcabf0d6613f0d6 - 0f15f5d0cd7b8f3c - after -- 2dce948738465975.11377bf4c0267030.995baa815b4d6e49.356d8329a250c3a4 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ade97da2de15e83b.c3763629dd4b6dca.6acb805e838824d9.1c428225ed0ac6b6 - 0fd248cab6f617ed.f0e0853f360faad5.30237a51ce4f9cc0.501d18cd259cec63 - afd6f36a5d742136.7343e523e77ce47c.46b096c8da2c11a7.adcabf0d6613f0d6 - 0f15f5d0cd7b8f3c --VMASKMOVPD_256_StoreForm(mem) -+VCMPPD_256_0x0(mem) - before - 52c9360475de84c1.e94179f06e1b44c3.2a69d0c20ba0d7ec.07becf2e43aec03d - 52b3fc947b4a8d90.195fd6c78678ba3f.f01fc406be873e50.d19921efa45ee52c -@@ -45460,13 +45460,13 @@ VMASKMOVPD_256_StoreForm(mem) - f85a0b790e6bc6be.cbe30618398291b6.196ab53244ca5ca7.ece50132bf7e7fc7 - f5ee878cb2046dcb - after -+ 52c9360475de84c1.e94179f06e1b44c3.2a69d0c20ba0d7ec.07becf2e43aec03d - 52b3fc947b4a8d90.195fd6c78678ba3f.f01fc406be873e50.d19921efa45ee52c -- 52b3fc947b4a8d90.195fd6c78678ba3f.f01fc406be873e50.d19921efa45ee52c -- eaa0c56dfacb64d6.9b7b075b4016c057.a1313cdd1d3bd7d5.fe8d887799cabb21 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f85a0b790e6bc6be.cbe30618398291b6.196ab53244ca5ca7.ece50132bf7e7fc7 - f5ee878cb2046dcb - --VCMPSS_128_0xB(reg) -+VCMPPS_128_0x0(reg) - before - 76f516f10ceac1d8.57ae4da5d5386e75.05e1d16b0c466a0a.3498a9f04e4089f1 - cc44aace6cbbb69b.e36704de683e1926.a5c263be56f187fc.ce85960557a71ce0 -@@ -45474,12 +45474,12 @@ VCMPSS_128_0xB(reg) - 62ecd29ca85076f2.f13cc52368216829.875dcd18bc257c71.eecf48e1d87e5f5b - 2dc405818804873f - after -- 0000000000000000.0000000000000000.a5c263be56f187fc.ce85960500000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - cc44aace6cbbb69b.e36704de683e1926.a5c263be56f187fc.ce85960557a71ce0 - 51283f8d6c0489c0.7853ad0ee58783ff.07d2b97eb20c243b.c2fef75c7c0dcf9f - 62ecd29ca85076f2.f13cc52368216829.875dcd18bc257c71.eecf48e1d87e5f5b - 2dc405818804873f --VCMPSS_128_0xB(mem) -+VCMPPS_128_0x0(mem) - before - 5aa9ab26a7ad0479.5cde5e65bd2bb8de.2cf0c7080c1884d3.80af9df611c7cc4a - 5349b4bd52859232.9948df5646228c30.03392fa8ed769227.501324864d7f5073 -@@ -45489,11 +45489,11 @@ VCMPSS_128_0xB(mem) - after - 5aa9ab26a7ad0479.5cde5e65bd2bb8de.2cf0c7080c1884d3.80af9df611c7cc4a - 5349b4bd52859232.9948df5646228c30.03392fa8ed769227.501324864d7f5073 -- 0000000000000000.0000000000000000.03392fa8ed769227.5013248600000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 15eee572baefd1d7.4fb8b15d2692dab3.fabc22ced99d767e.e2454869e75ee364 - 5baadc947e9d6a84 - --VCMPSS_128_0xB(reg) -+VCMPPS_128_0x0(reg) - before - 1b5218206b2215a4.978a0368af99f91b.8155fa4bb422cb3d.d08fa52c1b7dc4da - 7c89f7794b781f6f.531276009fa2228f.669b281027fe3edd.b4287ef50af5f590 -@@ -45501,12 +45501,12 @@ VCMPSS_128_0xB(reg) - 96d38f4252c943b8.ed1548c5e3fe65b9.bc5123cf2bc89a0e.12da237b61deefbd - 448ce7110167318b - after -- 0000000000000000.0000000000000000.669b281027fe3edd.b4287ef500000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7c89f7794b781f6f.531276009fa2228f.669b281027fe3edd.b4287ef50af5f590 - dc9a760bba2cc592.2751b925a7150760.5bd537181bb26f3f.80522916c311c5cd - 96d38f4252c943b8.ed1548c5e3fe65b9.bc5123cf2bc89a0e.12da237b61deefbd - 448ce7110167318b --VCMPSS_128_0xB(mem) -+VCMPPS_128_0x0(mem) - before - f334f1c3beb94563.057e408bb2dbd58e.82289fcb6e6af8c7.e559e9a2f3cffaf6 - fc9ebd7cb5dee772.87e8845073efb6bf.c3583b2464647cb5.323a84fb1050cca4 -@@ -45516,11 +45516,11 @@ VCMPSS_128_0xB(mem) - after - f334f1c3beb94563.057e408bb2dbd58e.82289fcb6e6af8c7.e559e9a2f3cffaf6 - fc9ebd7cb5dee772.87e8845073efb6bf.c3583b2464647cb5.323a84fb1050cca4 -- 0000000000000000.0000000000000000.c3583b2464647cb5.323a84fb00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 87e78cb8bed7c8e5.2f29b6038e4a58e5.b43a2e7a043446e4.a8b729f3b8f5b502 - 89eb2c6a7a304409 - --VCMPSS_128_0xB(reg) -+VCMPPS_128_0x0(reg) - before - fd28f41801173585.c35e87120ac27fa0.0f989bc71faa9031.1e857f51e521047c - 62b97c69e835c323.c7c73424feb1b541.70f504b9833b0889.a21b0329a1cca2a5 -@@ -45528,12 +45528,12 @@ VCMPSS_128_0xB(reg) - 6c0ac2a44848a974.9a9f942054cd8ce8.29ad4fd43121a80c.6b5c99901c8e7259 - 689ea2f713bd1a3b - after -- 0000000000000000.0000000000000000.70f504b9833b0889.a21b032900000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 62b97c69e835c323.c7c73424feb1b541.70f504b9833b0889.a21b0329a1cca2a5 - 13ebc3c9cc172b8f.70ee0fdab8b125f6.af8dec445589fc99.1dca38f05542de8a - 6c0ac2a44848a974.9a9f942054cd8ce8.29ad4fd43121a80c.6b5c99901c8e7259 - 689ea2f713bd1a3b --VCMPSS_128_0xB(mem) -+VCMPPS_128_0x0(mem) - before - f05ccf1055da945e.c9627766f954797f.21a540e3ed11a546.389f2ad6b48e478e - e0629cc7fff19aee.853fdc7c7ac7d65c.e1ce8e0d9f892e3a.39af78b47a5c16cd -@@ -45543,11 +45543,11 @@ VCMPSS_128_0xB(mem) - after - f05ccf1055da945e.c9627766f954797f.21a540e3ed11a546.389f2ad6b48e478e - e0629cc7fff19aee.853fdc7c7ac7d65c.e1ce8e0d9f892e3a.39af78b47a5c16cd -- 0000000000000000.0000000000000000.e1ce8e0d9f892e3a.39af78b400000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 637608bff83f3d04.8fb7ac505e142a3a.7cb4004ac0487b96.825e5db83c4d332c - 8193ecb57187faa5 - --VCMPSS_128_0xF(reg) -+VCMPPS_256_0x0(reg) - before - e217df405853e08a.af1b9ed8808d51e1.93eb0de6f9069993.0f0a1d3567a5b755 - 013631c48e3c2186.d238c540e005e2db.68d31080d48f856e.4bb2cc389867525c -@@ -45555,12 +45555,12 @@ VCMPSS_128_0xF(reg) - e975e2665596a875.0c0ab2a995a66ad5.f1f2e96dbb97c759.2e27d035054895ec - 8d8c1d09797fb4cf - after -- 0000000000000000.0000000000000000.68d31080d48f856e.4bb2cc38ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 013631c48e3c2186.d238c540e005e2db.68d31080d48f856e.4bb2cc389867525c - 3a3cdeadaecefb46.a799f7e133b4ac1e.68bcb0898b3b2b76.0c78893e6d9908d5 - e975e2665596a875.0c0ab2a995a66ad5.f1f2e96dbb97c759.2e27d035054895ec - 8d8c1d09797fb4cf --VCMPSS_128_0xF(mem) -+VCMPPS_256_0x0(mem) - before - 0574eda4e74a22a7.6a2d395e1e1f64c0.dc57718223e5da2d.5dc0b798002e94c0 - 72a9bbf36bb69ba3.19afe0fea6f66dd2.f34cb05af97fb652.0a741776f58ccf59 -@@ -45570,11 +45570,11 @@ VCMPSS_128_0xF(mem) - after - 0574eda4e74a22a7.6a2d395e1e1f64c0.dc57718223e5da2d.5dc0b798002e94c0 - 72a9bbf36bb69ba3.19afe0fea6f66dd2.f34cb05af97fb652.0a741776f58ccf59 -- 0000000000000000.0000000000000000.f34cb05af97fb652.0a741776ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 9a2c415e239e9db1.71450be961bb51fe.665ca0b4eaf2a4b1.93b97afb60cf7fd1 - 27e4757a0ecb6b07 - --VCMPSS_128_0xF(reg) -+VCMPPS_256_0x0(reg) - before - 6b22f25dddbeb51f.0e13f2518f339e1c.d2f0870dccc1a570.7911470e3ee32e43 - bcc2eb0e683599c4.e77791a980989a5a.d095438965453459.449d6016495f1552 -@@ -45582,12 +45582,12 @@ VCMPSS_128_0xF(reg) - f054468f24de1e67.37ea8935640371fd.1802683d94f5f641.6e6cd1e0f624e896 - 8648217bd0874d22 - after -- 0000000000000000.0000000000000000.d095438965453459.449d6016ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - bcc2eb0e683599c4.e77791a980989a5a.d095438965453459.449d6016495f1552 - 740f5efb4cbc52a3.0026995113d94c96.c9823acbc9d23b65.a2cc64b82870140a - f054468f24de1e67.37ea8935640371fd.1802683d94f5f641.6e6cd1e0f624e896 - 8648217bd0874d22 --VCMPSS_128_0xF(mem) -+VCMPPS_256_0x0(mem) - before - c52bd273d1a4ffdc.8cdfa0368d2737bd.6790da418e21c5bb.1960c94d6138a199 - 06e260b61687baee.a5fa665c2223d951.6be30a61ad4004fb.27e95966cc2a7718 -@@ -45597,11 +45597,11 @@ VCMPSS_128_0xF(mem) - after - c52bd273d1a4ffdc.8cdfa0368d2737bd.6790da418e21c5bb.1960c94d6138a199 - 06e260b61687baee.a5fa665c2223d951.6be30a61ad4004fb.27e95966cc2a7718 -- 0000000000000000.0000000000000000.6be30a61ad4004fb.27e95966ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 02fcffc9dad039cb.b9122bd54266ace1.63c5f48d3dad31b3.dfacf863ee44973e - 3f7efe1fdd85583c - --VCMPSS_128_0xF(reg) -+VCMPPS_256_0x0(reg) - before - 1eab2394dba43512.75f70972914e75ef.6da8210004c45335.0feaa671e4159883 - d67e642f822c6a6b.5af6df15fbc2aa1b.0dff745a63067577.ffed261af2add985 -@@ -45609,12 +45609,12 @@ VCMPSS_128_0xF(reg) - 4549278341a8cb58.ee2ee0f95bbeef3d.811e234c67631574.1fbd8267ad9ddcd2 - 062255e3920e1674 - after -- 0000000000000000.0000000000000000.0dff745a63067577.ffed261affffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - d67e642f822c6a6b.5af6df15fbc2aa1b.0dff745a63067577.ffed261af2add985 - c544bc5a71a932f4.8ec4fd9e3539947c.f5622150fbb74c53.119af1728081b1e6 - 4549278341a8cb58.ee2ee0f95bbeef3d.811e234c67631574.1fbd8267ad9ddcd2 - 062255e3920e1674 --VCMPSS_128_0xF(mem) -+VCMPPS_256_0x0(mem) - before - a394e7d44ddf1af9.b4d9a11490b46f44.54000212875e778c.0d7f76bc43970c87 - d0e1b225fa1da58c.6c40267bfa595b64.9d06e1d6d824e792.f5d1160a2cde6c37 -@@ -45624,11 +45624,11 @@ VCMPSS_128_0xF(mem) - after - a394e7d44ddf1af9.b4d9a11490b46f44.54000212875e778c.0d7f76bc43970c87 - d0e1b225fa1da58c.6c40267bfa595b64.9d06e1d6d824e792.f5d1160a2cde6c37 -- 0000000000000000.0000000000000000.9d06e1d6d824e792.f5d1160affffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 4d37e897980d3f8f.2bc243788d9ff9ee.49dec40b53527179.49772ff593d75a21 - 6d649f694aa05fb2 - --VCMPSS_128_0x1B(reg) -+VCMPPD_128_0x1(reg) - before - 5c714c6c7cacbf91.56d94a90c1d7c656.e976d2e6ee5924b1.6347c054b6d304b2 - 74eb326ac888b469.5f85d7994b3ec4dc.62305cd9d9db8757.d01567f8acaa6f53 -@@ -45636,12 +45636,12 @@ VCMPSS_128_0x1B(reg) - 8c569b0818de4fb6.e42a5e8cf51114d4.f0e952fec06de3fe.140bacfec38cbf7f - a2cc40381cae1c61 - after -- 0000000000000000.0000000000000000.62305cd9d9db8757.d01567f800000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 74eb326ac888b469.5f85d7994b3ec4dc.62305cd9d9db8757.d01567f8acaa6f53 - 101e4ecfc7bf7ae7.4506099f534df54d.f03ddebdebb35d8c.6c1237e252e46e88 - 8c569b0818de4fb6.e42a5e8cf51114d4.f0e952fec06de3fe.140bacfec38cbf7f - a2cc40381cae1c61 --VCMPSS_128_0x1B(mem) -+VCMPPD_128_0x1(mem) - before - f321717c7857425d.43df157f54706d83.18bb514e4c95de9d.be7fb609f3945556 - e3d5bab6f492ed9d.9304b8a2190111fa.bd865fcf74e50fd5.b64d054820b4ee43 -@@ -45651,11 +45651,11 @@ VCMPSS_128_0x1B(mem) - after - f321717c7857425d.43df157f54706d83.18bb514e4c95de9d.be7fb609f3945556 - e3d5bab6f492ed9d.9304b8a2190111fa.bd865fcf74e50fd5.b64d054820b4ee43 -- 0000000000000000.0000000000000000.bd865fcf74e50fd5.b64d054800000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 108e85bcb9efc09b.6a566a98ad51d994.cafab8c3a91b9542.95bd5516da108886 - 33f74e7d9f640136 - --VCMPSS_128_0x1B(reg) -+VCMPPD_128_0x1(reg) - before - 6b9822c9cee19128.052afe613b2961b0.aa1a7144b4297610.ea3bfc0dee1862ce - 99ebcd660414750b.085680ab4d2576bb.f1aa914ab32f89e5.ebe54ac774128578 -@@ -45663,12 +45663,12 @@ VCMPSS_128_0x1B(reg) - 47db9a43f3c9294e.ad8d8ce38e94f05d.08630d1a0afa004c.00a8f53bb52ac1d9 - cb584acda86151e7 - after -- 0000000000000000.0000000000000000.f1aa914ab32f89e5.ebe54ac700000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 99ebcd660414750b.085680ab4d2576bb.f1aa914ab32f89e5.ebe54ac774128578 - 193e4cc0dc88e989.f7de86880aefbde6.9d54c71846f14ec0.a9c51fdd5814bc6d - 47db9a43f3c9294e.ad8d8ce38e94f05d.08630d1a0afa004c.00a8f53bb52ac1d9 - cb584acda86151e7 --VCMPSS_128_0x1B(mem) -+VCMPPD_128_0x1(mem) - before - e8a2997f4cc427c4.7f10b35be4647008.06310fa8f620cb4d.902261ba9ad7dc36 - 32515f3ebe5f009c.1c2793754ce4fb60.de9489c25d9d0ce2.8fdebe6593131d29 -@@ -45678,11 +45678,11 @@ VCMPSS_128_0x1B(mem) - after - e8a2997f4cc427c4.7f10b35be4647008.06310fa8f620cb4d.902261ba9ad7dc36 - 32515f3ebe5f009c.1c2793754ce4fb60.de9489c25d9d0ce2.8fdebe6593131d29 -- 0000000000000000.0000000000000000.de9489c25d9d0ce2.8fdebe6500000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - bc123c8f796fabeb.fa2e995aeec5cca1.7aca57ab9aa0aba9.667d848d2ed9c1dd - f5f8e4e1097b9cf5 - --VCMPSS_128_0x1B(reg) -+VCMPPD_128_0x1(reg) - before - 6ca03ef1bbaccdc7.b5bc4cfafbfbf4ba.f2b5b6ff613d8ae0.f735a350a83d8134 - 28c08d28e3f98fff.4bfbc221bbf03134.c0508b55bbca7c6f.6290d6fb25fcac13 -@@ -45690,12 +45690,12 @@ VCMPSS_128_0x1B(reg) - da9bfbbafe14b84e.bd6ad153624271d8.4dee4bc39155eb2c.7745e614de11f17f - d737ba59527f8364 - after -- 0000000000000000.0000000000000000.c0508b55bbca7c6f.6290d6fb00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 28c08d28e3f98fff.4bfbc221bbf03134.c0508b55bbca7c6f.6290d6fb25fcac13 - 83a5cef11aed1f48.599c1af0d4591b84.bf4914c797f9ddfa.99a66e982ee9e873 - da9bfbbafe14b84e.bd6ad153624271d8.4dee4bc39155eb2c.7745e614de11f17f - d737ba59527f8364 --VCMPSS_128_0x1B(mem) -+VCMPPD_128_0x1(mem) - before - 97496755a53f594d.89ee12ee2bfb98be.5133623682b8ed59.c5892eb4466be0b2 - 914768f3f45e3067.ecea0efa3c2df944.f3c249854fc64c36.8266b80651c6f838 -@@ -45705,11 +45705,11 @@ VCMPSS_128_0x1B(mem) - after - 97496755a53f594d.89ee12ee2bfb98be.5133623682b8ed59.c5892eb4466be0b2 - 914768f3f45e3067.ecea0efa3c2df944.f3c249854fc64c36.8266b80651c6f838 -- 0000000000000000.0000000000000000.f3c249854fc64c36.8266b80600000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - a73656c5f3e7cfdd.3e0ca6457ca33041.cd600a1862dba2ae.401bb17edb7c85f2 - f789197b92ef717e - --VCMPSS_128_0x1F(reg) -+VCMPPD_256_0x1(reg) - before - 656b178a0fd770ba.7ac03bd1dc681091.e5cb395de2ff7e0f.bd08db33e0fa12a2 - e40ba915efc0c051.f965642f31794226.b062a2fd9dd73ea3.2aa6f36b7be253a1 -@@ -45717,12 +45717,12 @@ VCMPSS_128_0x1F(reg) - 89b7775346c83d43.663374918c7468a0.224be381812803cd.ecf3e6de7a3a3f6e - f83bb8f216c26194 - after -- 0000000000000000.0000000000000000.b062a2fd9dd73ea3.2aa6f36bffffffff -+ ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 - e40ba915efc0c051.f965642f31794226.b062a2fd9dd73ea3.2aa6f36b7be253a1 - d2b6ca8acd379bf0.fef24ecb0d2321c7.fb1edc8f49b6aca9.f106ceaa509e24d6 - 89b7775346c83d43.663374918c7468a0.224be381812803cd.ecf3e6de7a3a3f6e - f83bb8f216c26194 --VCMPSS_128_0x1F(mem) -+VCMPPD_256_0x1(mem) - before - f2a8c1d23f434675.665caadef5fde4f5.0ef4526ecb77d4df.8135b43ee1b980ba - b4077c6a11c8aa3d.c6f061967764cab3.d000654ce53920ad.74274a3206f65f1c -@@ -45732,11 +45732,11 @@ VCMPSS_128_0x1F(mem) - after - f2a8c1d23f434675.665caadef5fde4f5.0ef4526ecb77d4df.8135b43ee1b980ba - b4077c6a11c8aa3d.c6f061967764cab3.d000654ce53920ad.74274a3206f65f1c -- 0000000000000000.0000000000000000.d000654ce53920ad.74274a32ffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 03cbf9722310dd30.7a13493d61f64502.152d16bf1c274cad.8657b56f0da232f2 - 5c2c829027289ebd - --VCMPSS_128_0x1F(reg) -+VCMPPD_256_0x1(reg) - before - 373a0598768b5bae.48c7b3bb9aea24b3.883b7104023953ea.50e5ad2c716ba236 - 72cd39f39554a771.c6e60f6b2af9dbcd.87820da9e6de908f.1719694b119ecaff -@@ -45744,12 +45744,12 @@ VCMPSS_128_0x1F(reg) - 77b1a453b54dd71b.deb89db408e38475.cb9c8e38e47a89ba.b4253c4fa4ff7b03 - 43954c0ccf457d96 - after -- 0000000000000000.0000000000000000.87820da9e6de908f.1719694bffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - 72cd39f39554a771.c6e60f6b2af9dbcd.87820da9e6de908f.1719694b119ecaff - 69301a0e2111bcb1.5af28970f048bcaa.d4341896a86f389a.4495c40819cb7e35 - 77b1a453b54dd71b.deb89db408e38475.cb9c8e38e47a89ba.b4253c4fa4ff7b03 - 43954c0ccf457d96 --VCMPSS_128_0x1F(mem) -+VCMPPD_256_0x1(mem) - before - cdb0702cb5a93f1a.fa9ad430ed95335a.2f04c8258dd6ee5b.c8086bfc378bbd99 - 2e43249972387eba.4c38a41066740e1b.29a284ae9b2eb787.27c2ac4d3c2d11e3 -@@ -45759,11 +45759,11 @@ VCMPSS_128_0x1F(mem) - after - cdb0702cb5a93f1a.fa9ad430ed95335a.2f04c8258dd6ee5b.c8086bfc378bbd99 - 2e43249972387eba.4c38a41066740e1b.29a284ae9b2eb787.27c2ac4d3c2d11e3 -- 0000000000000000.0000000000000000.29a284ae9b2eb787.27c2ac4dffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - e4012e0ee4046200.d2c319888a282bd1.8703a5b8c43b5664.7c534745ce54086b - 29c299c593f22301 - --VCMPSS_128_0x1F(reg) -+VCMPPD_256_0x1(reg) - before - a8af3f827a514eb2.f2c47beed05a80fe.bc48b6f96c14e71f.a45e00111708a36c - 546833e820fdc42a.472f48cb030a0ac8.e7b1e31dffc9109e.da3cde32636a3f6b -@@ -45771,12 +45771,12 @@ VCMPSS_128_0x1F(reg) - a869fa60176e8522.362b5331b0a95473.6b63e22fa7b79be2.01ac107d581954fc - a9d65c7e388044e7 - after -- 0000000000000000.0000000000000000.e7b1e31dffc9109e.da3cde32ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 546833e820fdc42a.472f48cb030a0ac8.e7b1e31dffc9109e.da3cde32636a3f6b - 8b3773642083c317.bf0d12939a20bc8c.ad4c9e61dfd0e3fb.0567ba07c46be68c - a869fa60176e8522.362b5331b0a95473.6b63e22fa7b79be2.01ac107d581954fc - a9d65c7e388044e7 --VCMPSS_128_0x1F(mem) -+VCMPPD_256_0x1(mem) - before - dbb31af882aa7378.074ac549a04b46fa.8756899162b08cac.7e43abf4f30a76fe - 720dc7d552a59ddb.0426ce8c57a54449.90582f9fcc412161.4038f61d6053aefb -@@ -45786,11 +45786,11 @@ VCMPSS_128_0x1F(mem) - after - dbb31af882aa7378.074ac549a04b46fa.8756899162b08cac.7e43abf4f30a76fe - 720dc7d552a59ddb.0426ce8c57a54449.90582f9fcc412161.4038f61d6053aefb -- 0000000000000000.0000000000000000.90582f9fcc412161.4038f61dffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 3e6cdb6df13cd0cb.48fe8fccc200e2fd.3613bc76353350f0.4590fe470bfd274c - 3f8cb4218174e0f6 - --VCMPSD_128_0x9(reg) -+VCMPPS_128_0x1(reg) - before - 59ccdc0d8813e732.2c083bfff9f052ae.46933ea2ad1afabb.8c659b166cab6323 - ef9d7079bb6678ac.ee5178a5f7a5bf14.53521d8136e13ea0.09beda14ccdec382 -@@ -45798,12 +45798,12 @@ VCMPSD_128_0x9(reg) - 0022d17e17542608.621f7edd423f4818.0681570a94a83a92.e7b869dc70a25977 - 00f1b07cee4c0764 - after -- 0000000000000000.0000000000000000.53521d8136e13ea0.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff - ef9d7079bb6678ac.ee5178a5f7a5bf14.53521d8136e13ea0.09beda14ccdec382 - 5d4b6ed0b7f7ce0f.6215104b0666d229.ca8826d5fae2ea59.88ebf55d6ed72c3a - 0022d17e17542608.621f7edd423f4818.0681570a94a83a92.e7b869dc70a25977 - 00f1b07cee4c0764 --VCMPSD_128_0x9(mem) -+VCMPPS_128_0x1(mem) - before - b162482b03e0f12d.326e95f07709bc42.cc3a3f47c83cdd0e.6589ab8ca1bf69f6 - d4d7acd4cb6bd400.507ab79074a1cb6a.7a33cd76b36a4c37.41eb1fc7bcb4b532 -@@ -45813,11 +45813,11 @@ VCMPSD_128_0x9(mem) - after - b162482b03e0f12d.326e95f07709bc42.cc3a3f47c83cdd0e.6589ab8ca1bf69f6 - d4d7acd4cb6bd400.507ab79074a1cb6a.7a33cd76b36a4c37.41eb1fc7bcb4b532 -- 0000000000000000.0000000000000000.7a33cd76b36a4c37.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - e4fbc9c4e793756e.c006010eb4aa4733.16ef45cf2a87abcf.e4f153198e658ee0 - 632c0c077d3994aa - --VCMPSD_128_0x9(reg) -+VCMPPS_128_0x1(reg) - before - cff2d45fea1ba6fc.88437ae47248ab62.ca1d22c32e342c2c.bb4a26d1ee8d1398 - 868fa78c72970082.0fbfe7ad2024c90f.30259158b5d17ac2.16b2c54887f54542 -@@ -45825,12 +45825,12 @@ VCMPSD_128_0x9(reg) - 417d601441897bd8.3783e6ee577faf42.7f3745cf58754478.59dd2f42aa14faf0 - fa37f19d6be4f44b - after -- 0000000000000000.0000000000000000.30259158b5d17ac2.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff - 868fa78c72970082.0fbfe7ad2024c90f.30259158b5d17ac2.16b2c54887f54542 - e24e82fab037dde7.563b8c0c0e328ca0.4d694838e40e6fa2.01f59f1f11c8fefc - 417d601441897bd8.3783e6ee577faf42.7f3745cf58754478.59dd2f42aa14faf0 - fa37f19d6be4f44b --VCMPSD_128_0x9(mem) -+VCMPPS_128_0x1(mem) - before - c1cf611c7245a938.fd663d48c0191301.8f626f3d1816f020.21d98389ad9438ef - 8871fbabdb42d5e4.73561501c971e40d.3aa6a5e76c030967.8f9dfed27df785b3 -@@ -45840,11 +45840,11 @@ VCMPSD_128_0x9(mem) - after - c1cf611c7245a938.fd663d48c0191301.8f626f3d1816f020.21d98389ad9438ef - 8871fbabdb42d5e4.73561501c971e40d.3aa6a5e76c030967.8f9dfed27df785b3 -- 0000000000000000.0000000000000000.3aa6a5e76c030967.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 - 89029faa40408127.fe7ba8b3ecaf1c80.fa8805f93f10b5df.3fb69cc104b61dd6 - 38a3b73ff22bdf8b - --VCMPSD_128_0x9(reg) -+VCMPPS_128_0x1(reg) - before - 6ee2fffdcd12eb3e.7b89a0f2755a7917.ca4859833cabfc3e.c6bf2839f648c068 - 3cbe706530fa7d9b.de4abbf97b40d875.c04cf78988a10491.558ae783b0079409 -@@ -45852,12 +45852,12 @@ VCMPSD_128_0x9(reg) - 0f7bbee700f62201.67aa31f96da2ba2d.9a27e3e37ea97aa0.2c0b29e59f478646 - 2c59a4d60ce11c39 - after -- 0000000000000000.0000000000000000.c04cf78988a10491.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 3cbe706530fa7d9b.de4abbf97b40d875.c04cf78988a10491.558ae783b0079409 - fd8207e5b86cd14d.8e116dad6fff5a6e.3cd27b2f6a1d6f23.83b4bec38a58edef - 0f7bbee700f62201.67aa31f96da2ba2d.9a27e3e37ea97aa0.2c0b29e59f478646 - 2c59a4d60ce11c39 --VCMPSD_128_0x9(mem) -+VCMPPS_128_0x1(mem) - before - 5f6bac80ec316bf5.ccf593d9a423ad63.45e183c98f35b5df.3697291061d460b6 - a10dbcd15b432ea5.923c81264180ae1e.0481df09f4c506b0.6c6e4b22ae275f0e -@@ -45867,11 +45867,11 @@ VCMPSD_128_0x9(mem) - after - 5f6bac80ec316bf5.ccf593d9a423ad63.45e183c98f35b5df.3697291061d460b6 - a10dbcd15b432ea5.923c81264180ae1e.0481df09f4c506b0.6c6e4b22ae275f0e -- 0000000000000000.0000000000000000.0481df09f4c506b0.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - c130e41458df0494.a5609981d5f70051.9530a689f1099e5c.168111a5f87a933b - 4254adee2d914066 - --VCMPSD_128_0xB(reg) -+VCMPPS_256_0x1(reg) - before - 78be14cc3c02f586.584af4df1e808d2a.aad6bb67032aca21.1ed609a1c1d65c91 - 140b42abc158ee44.6e23fd00e4147c64.2848e6599abcfafa.f91666da43cf6094 -@@ -45879,12 +45879,12 @@ VCMPSD_128_0xB(reg) - ee7ee41da0e59b51.8645e7f4dd427778.fa53480c712e7a7a.1293ff5bcc762db5 - 0768337b0b3c6e2c - after -- 0000000000000000.0000000000000000.2848e6599abcfafa.0000000000000000 -+ ffffffffffffffff.00000000ffffffff.ffffffffffffffff.ffffffff00000000 - 140b42abc158ee44.6e23fd00e4147c64.2848e6599abcfafa.f91666da43cf6094 - 728733f85a20674f.df887a63c4a68b70.790316c13539cb89.01bb391e93006791 - ee7ee41da0e59b51.8645e7f4dd427778.fa53480c712e7a7a.1293ff5bcc762db5 - 0768337b0b3c6e2c --VCMPSD_128_0xB(mem) -+VCMPPS_256_0x1(mem) - before - be08516c6b5ee521.e43c50883133c7f6.4126c19f49f5fba8.088477a7ea264378 - 123dd51908e950c1.af0d73a3a99627eb.ebf7825024cad42d.fde19efd3aad6130 -@@ -45894,11 +45894,11 @@ VCMPSD_128_0xB(mem) - after - be08516c6b5ee521.e43c50883133c7f6.4126c19f49f5fba8.088477a7ea264378 - 123dd51908e950c1.af0d73a3a99627eb.ebf7825024cad42d.fde19efd3aad6130 -- 0000000000000000.0000000000000000.ebf7825024cad42d.0000000000000000 -+ 00000000ffffffff.00000000ffffffff.ffffffffffffffff.ffffffff00000000 - 009800576b68ecb1.3916ce9ebbcd7274.7b98ae75990b75e5.0f53ca89d59a8f7c - e5ffc59857171769 - --VCMPSD_128_0xB(reg) -+VCMPPS_256_0x1(reg) - before - 1208aa122254e4bf.52579fc069739659.aee7ff558eb9d560.190010c16a8fb570 - f3ba7463d1dc332b.b2dc94951517235b.6afbd76db7ea5c4c.17884bc21b663900 -@@ -45906,12 +45906,12 @@ VCMPSD_128_0xB(reg) - 4148a83b4dfe47f4.08667034e459d51f.231b6c707d4bc4d2.9f2838988c39ffdd - e1d7e344844fb982 - after -- 0000000000000000.0000000000000000.6afbd76db7ea5c4c.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffff00000000 - f3ba7463d1dc332b.b2dc94951517235b.6afbd76db7ea5c4c.17884bc21b663900 - e4601ff7013b4059.faf25bc289604fe4.c89e5252d3ec42e3.4ffcd966c89abec0 - 4148a83b4dfe47f4.08667034e459d51f.231b6c707d4bc4d2.9f2838988c39ffdd - e1d7e344844fb982 --VCMPSD_128_0xB(mem) -+VCMPPS_256_0x1(mem) - before - f3d75756cbe7a8dc.66bc099951b083a8.b60450d53f0e7339.d9c0223452941ec4 - aff20eba7d0d8816.af0a407faade3122.e2987693b98be25e.44d76e08ed538c66 -@@ -45921,11 +45921,11 @@ VCMPSD_128_0xB(mem) - after - f3d75756cbe7a8dc.66bc099951b083a8.b60450d53f0e7339.d9c0223452941ec4 - aff20eba7d0d8816.af0a407faade3122.e2987693b98be25e.44d76e08ed538c66 -- 0000000000000000.0000000000000000.e2987693b98be25e.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.00000000ffffffff - 99ac3a2894340add.1d5e1e8fc9dad217.1fd18512740f2a77.ad8ebe94e75f9268 - 63c6b8247ec6a321 - --VCMPSD_128_0xB(reg) -+VCMPPS_256_0x1(reg) - before - 3ea13a754bd1b739.7ee3a60b314d24c1.fafebc92c8c23dea.ea0f65aced2e7ac4 - 9b6a3ff3ea0e0b5d.7e6547efaa251e36.6ba720cb8b550a33.a1727c12f4458dcb -@@ -45933,12 +45933,12 @@ VCMPSD_128_0xB(reg) - 4cfac226114c6378.3f7e146f9d3fa681.78422794ceacb8d5.46da3cf21b8bebb9 - ec77de4572d3aef7 - after -- 0000000000000000.0000000000000000.6ba720cb8b550a33.0000000000000000 -+ 0000000000000000.00000000ffffffff.0000000000000000.ffffffffffffffff - 9b6a3ff3ea0e0b5d.7e6547efaa251e36.6ba720cb8b550a33.a1727c12f4458dcb - d76ec30af908db39.750097c219c7b667.cca445a8ae1f749d.21c74530a5601fb8 - 4cfac226114c6378.3f7e146f9d3fa681.78422794ceacb8d5.46da3cf21b8bebb9 - ec77de4572d3aef7 --VCMPSD_128_0xB(mem) -+VCMPPS_256_0x1(mem) - before - ef69a513c74323a1.575838b3d065dec6.b9ac39e14f99aab0.cdcec2fc86891286 - 2c7e0f4936e808e1.54d5221dd1e089d0.bd5682064ee2801f.2691134a7341be5d -@@ -45948,11 +45948,11 @@ VCMPSD_128_0xB(mem) - after - ef69a513c74323a1.575838b3d065dec6.b9ac39e14f99aab0.cdcec2fc86891286 - 2c7e0f4936e808e1.54d5221dd1e089d0.bd5682064ee2801f.2691134a7341be5d -- 0000000000000000.0000000000000000.bd5682064ee2801f.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - bf3cba9ecffe0dd5.955b3f390c285ec8.d64e72169c6f8d6f.53f4c44c5a74fa2c - e02a1cd78c06037c - --VCMPSD_128_0xF(reg) -+VCMPPD_128_0x2(reg) - before - e0ca1afa62a44ea1.ce7ef2953288a5e0.90fc6bc37d0f010d.a33410da25cb3da8 - b11eb81f79d81648.8612bda41e769c33.edecf9d9a086c3bd.6bc5c2ff6945add2 -@@ -45960,12 +45960,12 @@ VCMPSD_128_0xF(reg) - 3215ca24d93810ca.615ff9ba03af975b.3de9305e6e5a9611.5c1b532094c5c0a7 - 3d782af3b2e2daaa - after -- 0000000000000000.0000000000000000.edecf9d9a086c3bd.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - b11eb81f79d81648.8612bda41e769c33.edecf9d9a086c3bd.6bc5c2ff6945add2 - ae73f4b46d31981c.c3c496b7b0d4aef8.0878e7e9121be086.0ace047285ea9a18 - 3215ca24d93810ca.615ff9ba03af975b.3de9305e6e5a9611.5c1b532094c5c0a7 - 3d782af3b2e2daaa --VCMPSD_128_0xF(mem) -+VCMPPD_128_0x2(mem) - before - 88b105d9fc4ea64e.9b4f34db597bb9fe.3bb1639934121289.e88ed0a451ce1f0d - 1b9260bc8e14debf.436f2f458a86d063.2f844e405e09dcae.65b2c4275603b724 -@@ -45975,11 +45975,11 @@ VCMPSD_128_0xF(mem) - after - 88b105d9fc4ea64e.9b4f34db597bb9fe.3bb1639934121289.e88ed0a451ce1f0d - 1b9260bc8e14debf.436f2f458a86d063.2f844e405e09dcae.65b2c4275603b724 -- 0000000000000000.0000000000000000.2f844e405e09dcae.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 867b872ef7df84b6.c48dcae26e203873.d2e09c970fe54d8b.45a6949438e10854 - 600e6a574ca238c6 - --VCMPSD_128_0xF(reg) -+VCMPPD_128_0x2(reg) - before - bd258206f3556804.161b4b9407fc6a94.542362ee58c80075.3900f71ecee16b9c - b837d90ec984d3b9.5c937fa8cea3adef.95ce7a5c63682658.28d3c31ef6a2c853 -@@ -45987,12 +45987,12 @@ VCMPSD_128_0xF(reg) - f77b36db708c4d39.7f3a288bf3c138cb.95921f124abd7b74.13bea335f2a02e65 - c56eae25fff6af18 - after -- 0000000000000000.0000000000000000.95ce7a5c63682658.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - b837d90ec984d3b9.5c937fa8cea3adef.95ce7a5c63682658.28d3c31ef6a2c853 - ac8f6cdc69beb691.36af9f5669e108f2.e1d9109a2a8be6ca.7d237e81a33320dd - f77b36db708c4d39.7f3a288bf3c138cb.95921f124abd7b74.13bea335f2a02e65 - c56eae25fff6af18 --VCMPSD_128_0xF(mem) -+VCMPPD_128_0x2(mem) - before - 71001c3de5405f22.f4453376787cd45d.12029531894ff9a3.0d43a3325e8b2305 - f1406769c08afaae.ff3a601b201986a8.cdd16236469807a9.a63a986503801727 -@@ -46002,11 +46002,11 @@ VCMPSD_128_0xF(mem) - after - 71001c3de5405f22.f4453376787cd45d.12029531894ff9a3.0d43a3325e8b2305 - f1406769c08afaae.ff3a601b201986a8.cdd16236469807a9.a63a986503801727 -- 0000000000000000.0000000000000000.cdd16236469807a9.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e1f989adc750dffe.aed53630ba8c5d66.27b70c09a789f9e9.a625c6b46d10dad0 - c6b2f7a86bc320af - --VCMPSD_128_0xF(reg) -+VCMPPD_128_0x2(reg) - before - 76b38a5f6acea4cf.090a579d2be3a21a.0a13d978e579fb30.7e66e2b08248557c - 1276794605bba2dd.75f9f452f4a73f68.e5ac9a7a1e43b4d2.6d4d0864f5f3edec -@@ -46014,12 +46014,12 @@ VCMPSD_128_0xF(reg) - 7e6d5f4f8171fa72.8da187b727f0fa4d.841d6a582ca1694c.7ff234a81236c411 - 5a483310f3e77b1e - after -- 0000000000000000.0000000000000000.e5ac9a7a1e43b4d2.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 1276794605bba2dd.75f9f452f4a73f68.e5ac9a7a1e43b4d2.6d4d0864f5f3edec - f645c2c7d9195585.0392dbb63fa77315.9aeb76a00277c5f7.ce38fa131c937e64 - 7e6d5f4f8171fa72.8da187b727f0fa4d.841d6a582ca1694c.7ff234a81236c411 - 5a483310f3e77b1e --VCMPSD_128_0xF(mem) -+VCMPPD_128_0x2(mem) - before - 3c077235dcb25fb8.063a4f4b9951cd51.f1f27740c98d903b.018e710c394bde7c - 02f86d04e9a42b0b.eaf88b26be4409cd.0950243c408af00c.6b8a872ac4035e34 -@@ -46029,11 +46029,11 @@ VCMPSD_128_0xF(mem) - after - 3c077235dcb25fb8.063a4f4b9951cd51.f1f27740c98d903b.018e710c394bde7c - 02f86d04e9a42b0b.eaf88b26be4409cd.0950243c408af00c.6b8a872ac4035e34 -- 0000000000000000.0000000000000000.0950243c408af00c.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - a5a88751dc2b6d8a.3677db289d94af4e.c867a9421fd50105.7a53d150c6cb71eb - d6b7fd3174f37c42 - --VCMPSD_128_0x1B(reg) -+VCMPPD_256_0x2(reg) - before - 90d7282b115883d1.3bfd9fa7fbd85c0f.56cfe7288f0990ac.28b77923be3b2986 - 05fd4faa3987c243.24b76356addb23fc.424830b7fec2cc56.ac45f828a4320c99 -@@ -46041,12 +46041,12 @@ VCMPSD_128_0x1B(reg) - 8b8e7de89770d681.6085df743c152bbf.edcd6a33c12d3f45.934aef4fae00f327 - ae5a60480bf06efa - after -- 0000000000000000.0000000000000000.424830b7fec2cc56.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 05fd4faa3987c243.24b76356addb23fc.424830b7fec2cc56.ac45f828a4320c99 - 8f766c1a870b7444.3da04f4c0f417e7d.552eb341854a9dfb.31dda03eeac5666b - 8b8e7de89770d681.6085df743c152bbf.edcd6a33c12d3f45.934aef4fae00f327 - ae5a60480bf06efa --VCMPSD_128_0x1B(mem) -+VCMPPD_256_0x2(mem) - before - 5ed76f161ea09410.55907d7e064324a6.6a3290ba5063e4ee.657153f74df7f0e0 - 7f8e98a4031c2194.4aca6849700f995f.3773dc0a69376636.196669fac635ea79 -@@ -46056,11 +46056,11 @@ VCMPSD_128_0x1B(mem) - after - 5ed76f161ea09410.55907d7e064324a6.6a3290ba5063e4ee.657153f74df7f0e0 - 7f8e98a4031c2194.4aca6849700f995f.3773dc0a69376636.196669fac635ea79 -- 0000000000000000.0000000000000000.3773dc0a69376636.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 84da2aafb0a95f98.2012f030a2c3eb3a.8ae03b7813a4b4be.a4710d6eed3bab54 - 332193b7d31beaee - --VCMPSD_128_0x1B(reg) -+VCMPPD_256_0x2(reg) - before - 6f5135ef159e6336.20078905b1d38870.bab88522a3c340b6.c8a4446fde53f857 - b24df282505152d7.9d9df4cbf3f80767.eec5f5fa0eedac74.392cda1f1cb9f5b9 -@@ -46068,12 +46068,12 @@ VCMPSD_128_0x1B(reg) - c1dea669207481d6.aa38d757ac69fb60.9443560994ecbc6d.23b8995e62d80986 - 5553bcc5a3a9984a - after -- 0000000000000000.0000000000000000.eec5f5fa0eedac74.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - b24df282505152d7.9d9df4cbf3f80767.eec5f5fa0eedac74.392cda1f1cb9f5b9 - 5a63c3dc20bff37d.d76ae4ed93269aa8.18843c2380cc6c23.b9447776e9e1660f - c1dea669207481d6.aa38d757ac69fb60.9443560994ecbc6d.23b8995e62d80986 - 5553bcc5a3a9984a --VCMPSD_128_0x1B(mem) -+VCMPPD_256_0x2(mem) - before - 2ae35a96c760cf86.45099595ecfd398c.f2d448f55bcbe7ba.be4d4018e7d9d8fe - 7e32f1bdea0a6c67.40318ecc21e5564b.8a0ab3b4bb5a19e3.f2edf5bd1420fb83 -@@ -46083,11 +46083,11 @@ VCMPSD_128_0x1B(mem) - after - 2ae35a96c760cf86.45099595ecfd398c.f2d448f55bcbe7ba.be4d4018e7d9d8fe - 7e32f1bdea0a6c67.40318ecc21e5564b.8a0ab3b4bb5a19e3.f2edf5bd1420fb83 -- 0000000000000000.0000000000000000.8a0ab3b4bb5a19e3.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - 1240f7bd9f64c3c6.0fa88c0c3402b297.1f736841ff2d4251.e822b0746de94819 - 614faf60d284eb81 - --VCMPSD_128_0x1B(reg) -+VCMPPD_256_0x2(reg) - before - 5543699081a8858c.0b975e6e692df59d.9a8f89ed4a50697b.d33ea9e71c89b1ee - 1f49da7216e253e7.f3deae25a2187cc8.0ea37f88392e7619.47d4d55e5a425609 -@@ -46095,12 +46095,12 @@ VCMPSD_128_0x1B(reg) - a4bfd1f965c57a3c.ff6bf656d38579cc.1c8046a110c78031.e38cdc6caaf7356b - c347afdbf50de70a - after -- 0000000000000000.0000000000000000.0ea37f88392e7619.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - 1f49da7216e253e7.f3deae25a2187cc8.0ea37f88392e7619.47d4d55e5a425609 - 1baefe712ebd903e.a5e062cf67321473.c52f6a4b9c27141c.59ff6791d562efcf - a4bfd1f965c57a3c.ff6bf656d38579cc.1c8046a110c78031.e38cdc6caaf7356b - c347afdbf50de70a --VCMPSD_128_0x1B(mem) -+VCMPPD_256_0x2(mem) - before - d4fb5bcad1afbfd8.18c6507656874b8e.db49e6a8031f67fd.6fe310f6309af504 - f1765e255ae97a00.d21076549d8d3fe0.1747aeaf120c9932.1aa2c2b6992db140 -@@ -46110,11 +46110,11 @@ VCMPSD_128_0x1B(mem) - after - d4fb5bcad1afbfd8.18c6507656874b8e.db49e6a8031f67fd.6fe310f6309af504 - f1765e255ae97a00.d21076549d8d3fe0.1747aeaf120c9932.1aa2c2b6992db140 -- 0000000000000000.0000000000000000.1747aeaf120c9932.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - c3ec57d0e5568811.879ca7e39f9b8431.1bd3b8913e0cbb5b.e966d427b3c0e9a5 - c4042ab09dd9dd26 - --VCMPSD_128_0x1F(reg) -+VCMPPS_128_0x2(reg) - before - 672e5a5540e107c1.2f8045f71fa15451.3a76ab6c92ba4c8a.9bf8f143943723a6 - 2e315f803764a321.190a793b76b5f19b.a4c446074b4e2792.eb6ef25b39e5c0a6 -@@ -46122,12 +46122,12 @@ VCMPSD_128_0x1F(reg) - 98f2d81c920d20e2.d22fa3c6ed659501.09e7311f81070a60.66783e6de1f88974 - 4ba580401d742c99 - after -- 0000000000000000.0000000000000000.a4c446074b4e2792.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 2e315f803764a321.190a793b76b5f19b.a4c446074b4e2792.eb6ef25b39e5c0a6 - 7559359f1eefedf3.5b566f87079c1e1d.1fd0741e67e452f5.e5ff38c549214e87 - 98f2d81c920d20e2.d22fa3c6ed659501.09e7311f81070a60.66783e6de1f88974 - 4ba580401d742c99 --VCMPSD_128_0x1F(mem) -+VCMPPS_128_0x2(mem) - before - 6e527a2818a4f423.f24844652f4b799b.5b6392e644191373.bc5579753643887f - ac4aa813ee919c3e.e1a676e5903434ca.d0bcb7d22ac654a0.9665498c21250bfd -@@ -46137,11 +46137,11 @@ VCMPSD_128_0x1F(mem) - after - 6e527a2818a4f423.f24844652f4b799b.5b6392e644191373.bc5579753643887f - ac4aa813ee919c3e.e1a676e5903434ca.d0bcb7d22ac654a0.9665498c21250bfd -- 0000000000000000.0000000000000000.d0bcb7d22ac654a0.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - ea4f929e9dd780d6.ebae193a0f37bf38.f11093be0c390eda.2a9f6eac0a080bc8 - 9e60bb8e4122006e - --VCMPSD_128_0x1F(reg) -+VCMPPS_128_0x2(reg) - before - a7f480e21e11ea22.a1f44517ae4832aa.beef83e7656a07cf.55a342974216ff3f - a2a7b7123d610392.e3141c420aa7b6c0.9469a17bf078a08c.178b18eb751da20e -@@ -46149,12 +46149,12 @@ VCMPSD_128_0x1F(reg) - de9970bab456b456.78f7275e15601f5c.be37ee091257b927.208e26b843d2f29d - 20405709169916b4 - after -- 0000000000000000.0000000000000000.9469a17bf078a08c.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - a2a7b7123d610392.e3141c420aa7b6c0.9469a17bf078a08c.178b18eb751da20e - ebc55e8b3b9f876a.8c7b940ace00c641.cb6871634beec81b.119690a7c157b574 - de9970bab456b456.78f7275e15601f5c.be37ee091257b927.208e26b843d2f29d - 20405709169916b4 --VCMPSD_128_0x1F(mem) -+VCMPPS_128_0x2(mem) - before - ed789d8557b9dce6.d871ea094312c401.83535327fbd17d3b.c82414dbe33fb05c - 6302761a223d015e.3397c6e68460f417.895a93529d629b0a.4779e0435732e868 -@@ -46164,11 +46164,11 @@ VCMPSD_128_0x1F(mem) - after - ed789d8557b9dce6.d871ea094312c401.83535327fbd17d3b.c82414dbe33fb05c - 6302761a223d015e.3397c6e68460f417.895a93529d629b0a.4779e0435732e868 -- 0000000000000000.0000000000000000.895a93529d629b0a.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 - ba3bce3cc3a258d3.7f0099f78ee0a337.f69c407f840d0a2b.108e578a9e6c0faf - 13e6fa40a8c97443 - --VCMPSD_128_0x1F(reg) -+VCMPPS_128_0x2(reg) - before - f9d7323dc6620c5d.528346a1d19b0127.28db88038f299a99.156fa5580141d2d5 - 20acfced95c211a8.044c3fceda28f972.a334c94cb235a116.9f1e0e44a9c24c1f -@@ -46176,12 +46176,12 @@ VCMPSD_128_0x1F(reg) - 9d363316b4095484.2394a9314630c69b.7f943645d0bfce12.633fdd01ebe14044 - 564a3babbd953478 - after -- 0000000000000000.0000000000000000.a334c94cb235a116.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 20acfced95c211a8.044c3fceda28f972.a334c94cb235a116.9f1e0e44a9c24c1f - e2b353bcb176c0d1.ab6337b0f756fcdf.4c595a3e938df35a.6f75f82e989e3235 - 9d363316b4095484.2394a9314630c69b.7f943645d0bfce12.633fdd01ebe14044 - 564a3babbd953478 --VCMPSD_128_0x1F(mem) -+VCMPPS_128_0x2(mem) - before - 24608d172bc8c8fc.ab8298673d070b6c.48aa113ee3c212d1.973259cd02566cea - a84e4f315086b9fd.69e37e1ce6fd1f35.f573ecc4e9199daf.f27fbf43c7de098e -@@ -46191,11 +46191,11 @@ VCMPSD_128_0x1F(mem) - after - 24608d172bc8c8fc.ab8298673d070b6c.48aa113ee3c212d1.973259cd02566cea - a84e4f315086b9fd.69e37e1ce6fd1f35.f573ecc4e9199daf.f27fbf43c7de098e -- 0000000000000000.0000000000000000.f573ecc4e9199daf.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 47e1142031cfa025.6613bf5e09fe501d.5c4ae8e7a2435f0d.de5645a579f334e7 - 27775d699d9839f5 - --VCMPPD_128_0x0(reg) -+VCMPPS_256_0x2(reg) - before - 2178a9cbc45e2d7f.181f0fcc25740fa4.5c7b11c4bb22e594.ccf0015d8c2f0ee6 - 2aa323368ad14d30.11646ad740d2cb4f.7227d43dfd6dc89c.36787cfb500fec15 -@@ -46203,12 +46203,12 @@ VCMPPD_128_0x0(reg) - d5aa96d760ef01ba.e73630b65def19db.6f7e9f18a4a96711.645d8a5fd4dc2428 - e15314fdcde1f663 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.0000000000000000.00000000ffffffff.ffffffff00000000 - 2aa323368ad14d30.11646ad740d2cb4f.7227d43dfd6dc89c.36787cfb500fec15 - 9d45c9168a7dd5b5.0c7da12b9ff89053.046405356d6b35e1.75aed6ad09efb4c7 - d5aa96d760ef01ba.e73630b65def19db.6f7e9f18a4a96711.645d8a5fd4dc2428 - e15314fdcde1f663 --VCMPPD_128_0x0(mem) -+VCMPPS_256_0x2(mem) - before - c65af0740e0be6a5.301e86e5a9b30cea.7c5b946397c52314.0dc19e5240b29bd6 - f03f9baeb665b219.09ec95ac005334f1.a9b8481e6885692a.3b79fe4fdd120ddc -@@ -46218,11 +46218,11 @@ VCMPPD_128_0x0(mem) - after - c65af0740e0be6a5.301e86e5a9b30cea.7c5b946397c52314.0dc19e5240b29bd6 - f03f9baeb665b219.09ec95ac005334f1.a9b8481e6885692a.3b79fe4fdd120ddc -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffff00000000.ffffffff00000000.00000000ffffffff - 84d34a1fa5d9c94a.a4ca01164a5cc538.3749906e40f49c9b.b777d2438709995d - bd553e11cdb82c31 - --VCMPPD_128_0x0(reg) -+VCMPPS_256_0x2(reg) - before - c3d8fb5384eeedf5.a61a472e240c8d5e.1e71569175dda7ce.50151ddb80bb014f - 254c057347371758.7c6e03b17a9f1b55.87a3bb741e6b95ec.704aea06c79d938f -@@ -46230,12 +46230,12 @@ VCMPPD_128_0x0(reg) - 6d36f102623399a5.b771a4c21417889b.91d7a1275cdf846f.36193447dbdf2c65 - 934da934e057ab53 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 254c057347371758.7c6e03b17a9f1b55.87a3bb741e6b95ec.704aea06c79d938f - 3ffc59dfb21fe704.e39df893c09f305b.39ac2a2de292cb3e.74b272db31a50d87 - 6d36f102623399a5.b771a4c21417889b.91d7a1275cdf846f.36193447dbdf2c65 - 934da934e057ab53 --VCMPPD_128_0x0(mem) -+VCMPPS_256_0x2(mem) - before - 67184f905d1a487d.0a44cb48f2fe69e9.d5b782299213de41.ec721ace28ddfe2c - 8f48a1456d33bd10.7474e21dff0d9279.173b0eb5559fef7b.a4c7938ee3187220 -@@ -46245,11 +46245,11 @@ VCMPPD_128_0x0(mem) - after - 67184f905d1a487d.0a44cb48f2fe69e9.d5b782299213de41.ec721ace28ddfe2c - 8f48a1456d33bd10.7474e21dff0d9279.173b0eb5559fef7b.a4c7938ee3187220 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.00000000ffffffff.0000000000000000.00000000ffffffff - 4602396fb8992120.1c65b824fe24e234.7a2c22e71b993255.9fd2730995773f60 - 9920d29cc3b20f03 - --VCMPPD_128_0x0(reg) -+VCMPPS_256_0x2(reg) - before - 615920f9505bcb8e.8e2577bb2bfd88f5.11bf6f2f284480b5.5332a067571fdb4e - 53c9598ad8fdafad.99dc5211a1e8b8e2.436953783fd86834.c1a5beba48652f89 -@@ -46257,12 +46257,12 @@ VCMPPD_128_0x0(reg) - 257c7dfc465ddd54.6835cc8c088062b7.cae19378a28a06db.cc05c28dba62c878 - 218aa2e573318484 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffff00000000 - 53c9598ad8fdafad.99dc5211a1e8b8e2.436953783fd86834.c1a5beba48652f89 - cbbb79bdf524f60b.43f2455d37656d14.0db1616dde6bd65d.a052f5ce0a77ea34 - 257c7dfc465ddd54.6835cc8c088062b7.cae19378a28a06db.cc05c28dba62c878 - 218aa2e573318484 --VCMPPD_128_0x0(mem) -+VCMPPS_256_0x2(mem) - before - 7bad10c152f0db82.be5860b565339f35.e46f6488304554f6.d846e70726c0335b - b639880d72ac889e.f09b1e53ee337a5a.936d873eccc1fffe.922c588506999a89 -@@ -46272,11 +46272,11 @@ VCMPPD_128_0x0(mem) - after - 7bad10c152f0db82.be5860b565339f35.e46f6488304554f6.d846e70726c0335b - b639880d72ac889e.f09b1e53ee337a5a.936d873eccc1fffe.922c588506999a89 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.ffffffffffffffff.00000000ffffffff.00000000ffffffff - 3fc088a5e748d8e3.92861ceeb0dd661f.fae56389cf0c6f17.79ab81fd4d65059c - 5edb32d1eb7181db - --VCMPPD_256_0x0(reg) -+VCMPPD_128_0x3(reg) - before - 5fbdf043554f2777.455206ca7440f264.bac553c320a1ef16.69f613f66df3ac80 - d99bb7c0288d331c.9b7e7f0eb26552b3.eb9b562d6cbe8001.7cfc40cdefc19163 -@@ -46289,7 +46289,7 @@ VCMPPD_256_0x0(reg) - 26c283b4ffb7e077.1f0f6f5ebec3b5fc.835520992dc0558c.0ec165fa7080dce9 - a47e508c77576b34.acd350a7b365d76c.dd3dae710133aa62.fb12fe690d3e4741 - 1ebb8706e2078f95 --VCMPPD_256_0x0(mem) -+VCMPPD_128_0x3(mem) - before - 55887cbd09e56f11.ad1b1bb22bfb10fe.1e94a0d4ad57742f.559ffa2284a4ba30 - 7b455a7ba1e7a4e2.9ee4df94b82f0a82.5020dad0c9a54770.47c90219519ec2a2 -@@ -46303,7 +46303,7 @@ VCMPPD_256_0x0(mem) - 03bebdb78d80fd32.a92e4239cb73f066.69c4fdead687821f.08a133853a5faa20 - 90e755d38f3d0184 - --VCMPPD_256_0x0(reg) -+VCMPPD_128_0x3(reg) - before - 022421169ed4403c.1d123c0f1b309909.7a46dad3899d541f.0675dddffe3262e4 - b9a495ba03b1a3f4.9786921d883279e5.a3bb5bd99085fd41.d51f9854b86a68d8 -@@ -46316,7 +46316,7 @@ VCMPPD_256_0x0(reg) - 13b3ac2c5b606557.4be63dccf1935af1.80d9c1b77bb92879.b090a9351f3a5126 - 6a9c63d6416bc311.17feb80a715ef759.6dec08d7e6c51172.75928c6f50aed9fb - fef2beec66d3bb82 --VCMPPD_256_0x0(mem) -+VCMPPD_128_0x3(mem) - before - 287cba9a7eb4b5e8.1cadb4255260f9d0.d5997fc2249f0d4b.c63f2ca66e34f3d9 - d0fcfc63b35e8059.83309d8629ca433e.63850ee0276358f1.e71f2a90af920c5a -@@ -46330,7 +46330,7 @@ VCMPPD_256_0x0(mem) - 050d42fbe63a800a.e4bf242a9b2f01d8.5a7b75ff8ca27d0a.f1b7a166c94ccd58 - 9206122adbc0ef2d - --VCMPPD_256_0x0(reg) -+VCMPPD_128_0x3(reg) - before - 6b114db9165436cc.4c373fa11c842ca2.9663bb456e41ee5d.7d1e45d72535ced6 - d8264c7f1492dfe1.7f867112dfc79bf6.6daad82277f9de41.de41cec57e7a4406 -@@ -46343,7 +46343,7 @@ VCMPPD_256_0x0(reg) - 358f0de874082517.7bc7573d4c0e892f.c7df792c52e20e31.5ab08ab6b27d9ac7 - de9a8c60cf42451b.1cc66a0b7e66b17b.fe5099cf9c88bad8.cd36f794de4b8e44 - 14a08f4d1df0daaa --VCMPPD_256_0x0(mem) -+VCMPPD_128_0x3(mem) - before - 09bbd1cc8c763a25.2e91c353c4cb7b98.3f4f276991dad006.6f473477f1781ee3 - 895136fd46eb6ce0.83c1b02dec2f033b.be2d0b43a276a1fc.76114790ec3d75fe -@@ -46357,7 +46357,7 @@ VCMPPD_256_0x0(mem) - 9a205d250dd031c8.a8fb98474bb9f7a2.431c351c2c574dd6.b74dc2c64577ef12 - a85822badc048964 - --VCMPPS_128_0x0(reg) -+VCMPPD_256_0x3(reg) - before - 9f65e9d088960875.e3f217f452583d4d.319d8d5eb9f8dcbd.01c473f3deb59f13 - f8c21473e8baa6f1.276fe52552fe09c3.2ea9260dcc4103af.8cf2c8f5fd6a936b -@@ -46370,7 +46370,7 @@ VCMPPS_128_0x0(reg) - 0fb99d0e95fb9f85.426444a429cf5255.fa6961bf1f22a722.c072af10a584e60a - 4097830f2ee530dd.109dae5ef4d6d430.f32a39df4f2605c2.7910a42ff30f541b - 9397233e021599ca --VCMPPS_128_0x0(mem) -+VCMPPD_256_0x3(mem) - before - ead5a829efa47044.e7a7bfe14c0596a5.6de6a13dcf1f4a7f.7338aadbf7da593c - 5994b0dcd5c796b5.60374ef08ee60a88.350b982fd5b7726f.d8dfb01eb3c9de3c -@@ -46384,7 +46384,7 @@ VCMPPS_128_0x0(mem) - f4c8364bfefbbf2a.38035776e71d1350.751883f9d301c2e1.bd266d2ad9896e7c - f5601bca7b72f114 - --VCMPPS_128_0x0(reg) -+VCMPPD_256_0x3(reg) - before - 82624e61a2c695e3.d7d4acdf78233987.4fd7c8c4388a1f8e.a6996ea904cc64bb - be79025ce8129792.439395ea5c10f28a.a85a7cff1be82b97.b2254e1bcf15a6e5 -@@ -46397,7 +46397,7 @@ VCMPPS_128_0x0(reg) - 06f03425ece133cf.13cf6b5ac6cda660.9fd870942dc47218.74899f3b53e8458c - b615df2a47bfa446.2556ac19d1671034.909c9fed09a931bd.ca91dbf5a952fcdb - 8f087f35f05e88ff --VCMPPS_128_0x0(mem) -+VCMPPD_256_0x3(mem) - before - 9ebc08e74118a524.2b32ffd6983928a3.53f2d41599e8ed33.d6f405784b24a431 - d577f1f8bb8d0f75.bf95909478daf891.7b705d393b5ef988.cf2a9ea090c00721 -@@ -46411,7 +46411,7 @@ VCMPPS_128_0x0(mem) - 2736d4e393d5b94e.b758f7fb5bc273d2.254186a97c588de7.46645a77918b8b23 - 7dfe75fe86d3248e - --VCMPPS_128_0x0(reg) -+VCMPPD_256_0x3(reg) - before - d6a8b3d2ed6c9e24.fbd0c6962bc1712d.d351c47b9521957c.602d1fce52f38d49 - acad105f62e33391.65a308575a9765e9.7fbef2bfd0d7f569.032a09ca72b2abb0 -@@ -46424,7 +46424,7 @@ VCMPPS_128_0x0(reg) - 5d58891182c32083.427a16123d6452ad.18ed7d31a771cf43.ec05c18af7a2a54b - 43f61955e898a0a4.6f206cb3ef32f4a6.f828623eb67a5eb6.f58ac4fbfece3544 - fb858d07a24218c8 --VCMPPS_128_0x0(mem) -+VCMPPD_256_0x3(mem) - before - dbc2989c000b0a02.bcd4bc9531eff1a0.c66286268c1007ff.7cbc9c539a7fdf70 - 6f0c61a53334c61f.223c6e3ff8534d24.250de157310747e5.fff527daef0a8e1a -@@ -46434,11 +46434,11 @@ VCMPPS_128_0x0(mem) - after - dbc2989c000b0a02.bcd4bc9531eff1a0.c66286268c1007ff.7cbc9c539a7fdf70 - 6f0c61a53334c61f.223c6e3ff8534d24.250de157310747e5.fff527daef0a8e1a -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 27fb1fc38ad88fb0.29dcf07e72731873.66c847a401753c07.778621f359e864f5 - 2376885ca752047c - --VCMPPS_256_0x0(reg) -+VCMPPS_128_0x3(reg) - before - 3f3a30e8d573c1a5.02370bb0e56a137d.81acb8ea5c47ff96.01724b976404699b - 271f150380d7d91c.02b1a5c1868d52dc.38387f703558e2f0.14b47ef93fdcb46b -@@ -46451,7 +46451,7 @@ VCMPPS_256_0x0(reg) - 37713319430b858d.03356ae2894b08fa.a8ca417c9933fd2e.79595eb5ae0cd7a4 - ca7c8796bb9a04a2.e18ed4ff09b3f102.2eaffa7823638bfc.0d2e66b6cb9d8e72 - acff13eab59d9700 --VCMPPS_256_0x0(mem) -+VCMPPS_128_0x3(mem) - before - 3298df3c8517ac7b.3e8c0ce68311910a.788a610522cec821.2633a7d16f74c905 - 7bc5489859188a0e.eeedbe7638fb676f.a4f38cdef1aa4a83.eda243f31af3f3f6 -@@ -46465,7 +46465,7 @@ VCMPPS_256_0x0(mem) - c60ade1f7cdc902f.71d19902d659e0e2.2b3fadbe1fd33ebe.53703943fb68f93f - ab678a496a774eee - --VCMPPS_256_0x0(reg) -+VCMPPS_128_0x3(reg) - before - 4179bbc8a6237f35.80ba032103b83014.fdecbbd6f8e4fb48.3eba9b9bb73829ef - 71f2c72c4ef8c7c0.6d2eb5ddfd4a89c2.3488fa9a7714505c.56d317fd738dae13 -@@ -46478,7 +46478,7 @@ VCMPPS_256_0x0(reg) - 971eaae1fb83633b.69326f40869e5664.74f152b9ee721bc9.4f559dcf72df8956 - 0f4861534c4f8f51.5092ad35bbc15527.1772bf9ff98c973b.050eaafdcd3978e3 - 54c8b874a3a735e7 --VCMPPS_256_0x0(mem) -+VCMPPS_128_0x3(mem) - before - 1850451e0d367d8d.35bee7eedae987ae.fe19eba7b7be4037.7b593eb835ee0260 - 2d72cce829f10b02.65ca371e43db86ff.4e95a68497a1d3bf.faf0ca703e2295e1 -@@ -46492,7 +46492,7 @@ VCMPPS_256_0x0(mem) - b9b3b98de61cec08.53d72bee15fd8b2c.49977f2c724be5e9.bd62f96e24352aae - b8d3958b3a2ca351 - --VCMPPS_256_0x0(reg) -+VCMPPS_128_0x3(reg) - before - 3f262df88c263601.e96a1740bfa4b7f0.c970c665b6440a60.abb696cfa429dbe3 - afa6bf20b7af1f6b.d9ec5fc3b988b858.b8d01b22a1148038.1ff91a8c2a1e6906 -@@ -46505,7 +46505,7 @@ VCMPPS_256_0x0(reg) - 629e466e5654993a.67030d01f0d5ad6a.7e42288f72fa2a5f.832c85501f354c7d - b55cbf5006a0e11b.6e7c9de881964f52.7614e91ac6804382.b11a5505a07a4074 - 87910599c8fa0119 --VCMPPS_256_0x0(mem) -+VCMPPS_128_0x3(mem) - before - e05b11f6b3c04b96.042a2431622032ba.c9238c6387d75d3d.fc90582e3935094c - 9745f60a7fd8d917.ac55737d075ecac2.56c3555e1fa59157.6b03733765a2b66a -@@ -46519,7 +46519,7 @@ VCMPPS_256_0x0(mem) - 93a937032330b3d8.72f1bc06994ab9bf.7222658573165ec6.78fd9ad85fd9b751 - ce1d9e4863bb8371 - --VCMPPD_128_0x1(reg) -+VCMPPS_256_0x3(reg) - before - 7e633d5e92862796.8fba8cc13588776f.49fbaf1cbf0e8a0c.b978a58868d16e74 - e31d748487c6de6a.5b1caae5966270bb.e8917a4c9ec39073.a2f8aebc5e489600 -@@ -46527,12 +46527,12 @@ VCMPPD_128_0x1(reg) - 401897b435d778d0.cffe2d10b6ccf120.ee948daef4292e3d.c5a61063bd9b1864 - b96b61af608feb93 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - e31d748487c6de6a.5b1caae5966270bb.e8917a4c9ec39073.a2f8aebc5e489600 - 5b953e28df08e599.d1990b5b62ca5ae7.ab001b04d1f2089f.076efe0b71878f96 - 401897b435d778d0.cffe2d10b6ccf120.ee948daef4292e3d.c5a61063bd9b1864 - b96b61af608feb93 --VCMPPD_128_0x1(mem) -+VCMPPS_256_0x3(mem) - before - bd8b6bdb7370c552.eff27c9625bfd3bb.2f178beead75f092.0d99ccb8a4f33df8 - aed0acd3144862cb.c56ee7394c4d3205.ceb0a1e264d01468.645bd58d7cdc727d -@@ -46542,11 +46542,11 @@ VCMPPD_128_0x1(mem) - after - bd8b6bdb7370c552.eff27c9625bfd3bb.2f178beead75f092.0d99ccb8a4f33df8 - aed0acd3144862cb.c56ee7394c4d3205.ceb0a1e264d01468.645bd58d7cdc727d -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - c8fcc0d76f13d49d.51804472ae88ea68.3a91e6bd80cebaf3.29453247173d3e94 - 50057e0510cd4c7e - --VCMPPD_128_0x1(reg) -+VCMPPS_256_0x3(reg) - before - 1fb2833fa3ac70e1.a87b8cbb601d214e.c1ad2ee0214ebbd9.be710d7c1e88b4ff - f2983e5f6966e56a.e54f7e1b4f4f2069.c6ad8ebf3ae9815a.f102dc01ea24c21f -@@ -46554,12 +46554,12 @@ VCMPPD_128_0x1(reg) - 133fc305049cb69d.e62ac400965d2890.0256a581cfcfd63a.d462630d82350e4e - 3cc9136c86c0c3b5 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f2983e5f6966e56a.e54f7e1b4f4f2069.c6ad8ebf3ae9815a.f102dc01ea24c21f - 2403aad20087e9c4.5b4612e458b68f1b.bdcc627b95e57696.af0ed03803afa280 - 133fc305049cb69d.e62ac400965d2890.0256a581cfcfd63a.d462630d82350e4e - 3cc9136c86c0c3b5 --VCMPPD_128_0x1(mem) -+VCMPPS_256_0x3(mem) - before - c3115b41285e7de0.1a9785621030899e.62c8105d2550a7f3.f296533b8332dff1 - 4504b778861af7fb.9458ec57c1d09d76.abec73e6229cca71.e7da68174e9acb69 -@@ -46569,11 +46569,11 @@ VCMPPD_128_0x1(mem) - after - c3115b41285e7de0.1a9785621030899e.62c8105d2550a7f3.f296533b8332dff1 - 4504b778861af7fb.9458ec57c1d09d76.abec73e6229cca71.e7da68174e9acb69 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - aa1f9cbde51e1eb4.55469bb57f617c55.14f66a2bd46ce76c.5399b9e197ab3f45 - 82adeca84e6b3e03 - --VCMPPD_128_0x1(reg) -+VCMPPS_256_0x3(reg) - before - 27f476408a611131.45dd1da31d7d42aa.5409daf7c56bbdb5.ec73f8c0c1085a42 - 9eb95315ea18f479.4b78a29a812b1840.3666af8020b0319b.01a78b318c2d5fe2 -@@ -46581,12 +46581,12 @@ VCMPPD_128_0x1(reg) - 72f1f8267ffad90e.0771a9703ca1c4fd.171a0717821c9da7.515fb5582a401232 - 457c43e53546383a - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 9eb95315ea18f479.4b78a29a812b1840.3666af8020b0319b.01a78b318c2d5fe2 - 434a8093071d228a.98bba7902d335aa2.59a814bc2bbc12b2.2f5ca16b50e7b378 - 72f1f8267ffad90e.0771a9703ca1c4fd.171a0717821c9da7.515fb5582a401232 - 457c43e53546383a --VCMPPD_128_0x1(mem) -+VCMPPS_256_0x3(mem) - before - e67fc7ff8e05e0bc.87fbb73bee3e53b2.76682226ca82147d.ce0983fdc25b0d25 - 1033bd905087c7e5.deb4ba3cef72cc21.c06a909ef4e1044d.d8c184db8605a0d9 -@@ -46596,11 +46596,11 @@ VCMPPD_128_0x1(mem) - after - e67fc7ff8e05e0bc.87fbb73bee3e53b2.76682226ca82147d.ce0983fdc25b0d25 - 1033bd905087c7e5.deb4ba3cef72cc21.c06a909ef4e1044d.d8c184db8605a0d9 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6ee2f1cc800a41db.c16378b619dfaf13.54c239848a4ab690.59bc062b0dcb1992 - 87977f75060079ef - --VCMPPD_256_0x1(reg) -+VCMPPD_128_0x5(reg) - before - 796a6d67f4d0ea32.5b74264d27224c00.06f02c07792f8fed.57af6bca2e6cf05a - 8c82cd6c73c7a906.40e8bef7a72e867c.fd5d13f4dca16043.a5d98283de3cbb25 -@@ -46608,12 +46608,12 @@ VCMPPD_256_0x1(reg) - 80b1cf5f925b0013.66a50373a3537627.70026b571919c011.910f4cfad018f46c - e7b5f8904a3cd940 - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 8c82cd6c73c7a906.40e8bef7a72e867c.fd5d13f4dca16043.a5d98283de3cbb25 - 1a2b99f01e71f217.fb0a33b51c3aaa7a.01f42aebddc15cc0.190af999b5c7d31c - 80b1cf5f925b0013.66a50373a3537627.70026b571919c011.910f4cfad018f46c - e7b5f8904a3cd940 --VCMPPD_256_0x1(mem) -+VCMPPD_128_0x5(mem) - before - f9c577493f3d3fc5.1a606a256a1010a3.5f87a91e5784a4ae.a5d3d4a42c37c8e1 - a10e4710cc29e127.448466ae431c5e76.c07aa2a055d9f03c.fbb3603fb1a6afde -@@ -46623,11 +46623,11 @@ VCMPPD_256_0x1(mem) - after - f9c577493f3d3fc5.1a606a256a1010a3.5f87a91e5784a4ae.a5d3d4a42c37c8e1 - a10e4710cc29e127.448466ae431c5e76.c07aa2a055d9f03c.fbb3603fb1a6afde -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2777c8781df1cc30.b85a72ba656ba28f.2ec679dd9d21d61b.7ecfd20a82a90d09 - 63a3b0140654fc8f - --VCMPPD_256_0x1(reg) -+VCMPPD_128_0x5(reg) - before - d9b6a11a6d81baf2.bc3070f118e48d30.baa47a14e7c5112f.f2b7506f1f2ce7c5 - 3e54a18a52bb84dc.595059281bf17bbc.bc93d3e2daa7aebf.90ea698a5b8b0725 -@@ -46635,12 +46635,12 @@ VCMPPD_256_0x1(reg) - 4161bf5407862bf7.16f7db81a88bcc2a.3090698680316066.c54552086f7562ba - 16051a437f191646 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 3e54a18a52bb84dc.595059281bf17bbc.bc93d3e2daa7aebf.90ea698a5b8b0725 - ecc9acce518e96fa.d8a4fe0a42255100.1a737a8fd89cb4ee.e22a40196c4af168 - 4161bf5407862bf7.16f7db81a88bcc2a.3090698680316066.c54552086f7562ba - 16051a437f191646 --VCMPPD_256_0x1(mem) -+VCMPPD_128_0x5(mem) - before - af3714b6b941c838.9767d58710308180.ef176d7a6930a763.5a359e356cf1eed3 - 6da7bc4d38fa35bd.4b28ead30718d140.40cf2ee2a21fa0da.f4b0140738689ae2 -@@ -46650,11 +46650,11 @@ VCMPPD_256_0x1(mem) - after - af3714b6b941c838.9767d58710308180.ef176d7a6930a763.5a359e356cf1eed3 - 6da7bc4d38fa35bd.4b28ead30718d140.40cf2ee2a21fa0da.f4b0140738689ae2 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - c8700797764c3030.3e0c026631ce5618.b53532acea0cd62c.e753b3c4e2ac3a95 - f914d588f891a791 - --VCMPPD_256_0x1(reg) -+VCMPPD_128_0x5(reg) - before - ebda281e5e5e21df.1d62a2236efe3575.34c5fc869bb60287.927c6ce531218d61 - 18f0a8f3b19ee52a.08c1db821a6fe5fc.f86ae66e640a9ade.568bc73d60b25081 -@@ -46662,12 +46662,12 @@ VCMPPD_256_0x1(reg) - 9840200b8ba73b69.0bf9186e05c43583.5ba4784a812c7df2.0330cdf8e371ed39 - a45f703270b83e27 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 18f0a8f3b19ee52a.08c1db821a6fe5fc.f86ae66e640a9ade.568bc73d60b25081 - dea451748cdd2f1f.635a2ea299aefcf3.e646bc8b27595ac8.dd2ebe9f92c8dcbb - 9840200b8ba73b69.0bf9186e05c43583.5ba4784a812c7df2.0330cdf8e371ed39 - a45f703270b83e27 --VCMPPD_256_0x1(mem) -+VCMPPD_128_0x5(mem) - before - 9c85233a55aa8cb3.a1110f264b8944b5.dc6a14d27abf4edb.b1d118160d114008 - c76f63fdad529306.57631c30680f87ae.b1799eb915aa0125.4519965a6893deb5 -@@ -46677,11 +46677,11 @@ VCMPPD_256_0x1(mem) - after - 9c85233a55aa8cb3.a1110f264b8944b5.dc6a14d27abf4edb.b1d118160d114008 - c76f63fdad529306.57631c30680f87ae.b1799eb915aa0125.4519965a6893deb5 -- ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 26bf776027f5bbb8.36ba7ec12633aa5a.dca04cc62b822740.972a22fff99f9f86 - 0d8b263767413902 - --VCMPPS_128_0x1(reg) -+VCMPPD_256_0x5(reg) - before - 3136fa9814b09ec6.12bc43d98208546d.1756ca2000ea0265.e95069c2de86126a - 5f79998f9b790b7d.a0ae8bbbc001959b.15a4241ea77584cc.6bce04f227ab8837 -@@ -46689,12 +46689,12 @@ VCMPPS_128_0x1(reg) - 48f228eaa947ed76.179c816f56d70311.d381efa8c934f565.3d64a49fe8850367 - 4613a2f399538123 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5f79998f9b790b7d.a0ae8bbbc001959b.15a4241ea77584cc.6bce04f227ab8837 - f39eff869927bcd4.ae5fccf4fded3c6e.8aee8727b65f6c3e.3ee6994221fc44d1 - 48f228eaa947ed76.179c816f56d70311.d381efa8c934f565.3d64a49fe8850367 - 4613a2f399538123 --VCMPPS_128_0x1(mem) -+VCMPPD_256_0x5(mem) - before - 34c10e2c50717a32.bcc011286864d910.b7312618e6cba7b1.4da9590b7d815cee - e338643528eca9bf.aa56b5aa710abd4e.69ea37dccad6e37a.52b2bfbe6dd1dd84 -@@ -46704,11 +46704,11 @@ VCMPPS_128_0x1(mem) - after - 34c10e2c50717a32.bcc011286864d910.b7312618e6cba7b1.4da9590b7d815cee - e338643528eca9bf.aa56b5aa710abd4e.69ea37dccad6e37a.52b2bfbe6dd1dd84 -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - f3b4be66ac259c06.63061e2fd2225d64.78f78f60fc5e1635.719674c073ab1b89 - 4209bbe8c14d5150 - --VCMPPS_128_0x1(reg) -+VCMPPD_256_0x5(reg) - before - 0f8dee0fbb2291d5.0c51bb6791fdd817.e7b8db0962ac9094.8be4cdfa82f4857f - 346e0ba1fdb716c3.57e792e907603a56.556144d8adf0ab18.2224675dccd07ca2 -@@ -46716,12 +46716,12 @@ VCMPPS_128_0x1(reg) - f677f0b6cc4ee28c.ef32be1b17fd6312.5ec80705e2d388cb.48d0a033198cf522 - 8fd4377d5683efd6 - after -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 346e0ba1fdb716c3.57e792e907603a56.556144d8adf0ab18.2224675dccd07ca2 - 0df80d0a24971dc7.ae44bfd62a5d7ff1.084d54084f79ea9b.1784da77f5ffb9c9 - f677f0b6cc4ee28c.ef32be1b17fd6312.5ec80705e2d388cb.48d0a033198cf522 - 8fd4377d5683efd6 --VCMPPS_128_0x1(mem) -+VCMPPD_256_0x5(mem) - before - ca5b1a40c5f06113.4b36b1119069a0bf.f47e0ba4e94ea1e5.b21e593b058bc251 - d333c66a84e00805.68834a880d73950c.9bf4235ebd5bf797.5f9a4716522cd4dc -@@ -46731,11 +46731,11 @@ VCMPPS_128_0x1(mem) - after - ca5b1a40c5f06113.4b36b1119069a0bf.f47e0ba4e94ea1e5.b21e593b058bc251 - d333c66a84e00805.68834a880d73950c.9bf4235ebd5bf797.5f9a4716522cd4dc -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c30165a16077e5b7.6af2f9769f860ea2.3a8ea111d9dad547.3837e36cda596fab - 1cf08bbf4ffe7048 - --VCMPPS_128_0x1(reg) -+VCMPPD_256_0x5(reg) - before - c900bd675dbd3999.61905185b63592cf.07ad07c5eda60c43.ec4900e35964d69d - 9cb377d0a2200549.3e9ff580cba7644b.dc24dde063e52fae.ae5f18954bdbde81 -@@ -46743,12 +46743,12 @@ VCMPPS_128_0x1(reg) - 2531709440089978.266c5667a3d06621.9e7ad62739f2d691.d5c76849f2bdf3a6 - f3b29723e040773e - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - 9cb377d0a2200549.3e9ff580cba7644b.dc24dde063e52fae.ae5f18954bdbde81 - f254b365bab51105.36facd7cbbd61658.45a579329ed0b38f.5d9a6713ca4aa920 - 2531709440089978.266c5667a3d06621.9e7ad62739f2d691.d5c76849f2bdf3a6 - f3b29723e040773e --VCMPPS_128_0x1(mem) -+VCMPPD_256_0x5(mem) - before - 9127718db0e0f215.9294a7c9d0a3d94f.e8c20b2b9ea00ed3.43f1f02bd1d8d261 - 8cf170747da91f56.96ca556e07140c36.59c968b6c953ca9a.9054c3aa010ce4aa -@@ -46758,11 +46758,11 @@ VCMPPS_128_0x1(mem) - after - 9127718db0e0f215.9294a7c9d0a3d94f.e8c20b2b9ea00ed3.43f1f02bd1d8d261 - 8cf170747da91f56.96ca556e07140c36.59c968b6c953ca9a.9054c3aa010ce4aa -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - 09b8d2657fe283c9.cede08bbd9a63ee2.b8150bce1d8f7215.911086ca9b943959 - fe026d423dfff418 - --VCMPPS_256_0x1(reg) -+VCMPPS_128_0x5(reg) - before - 8211fde6e7e9b5ff.434c2d47ec6b3052.bb55043cabdfb4ff.5ef249337e30d521 - 7b88332036dfb8bd.4a669d56c74d81f6.aece68dd941e0fdc.23b01e0e7ee43df2 -@@ -46770,12 +46770,12 @@ VCMPPS_256_0x1(reg) - 38e17d0b301c7268.2f5cb1a83549fa3d.17fa543419db5e85.7afa83d7ceb30a92 - c4200a9c55e6e8b9 - after -- 0000000000000000.00000000ffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 7b88332036dfb8bd.4a669d56c74d81f6.aece68dd941e0fdc.23b01e0e7ee43df2 - 44b4095ec56c38fb.fad2a07d2c9330e0.03972e0c2fee8825.e319094b3bb765b4 - 38e17d0b301c7268.2f5cb1a83549fa3d.17fa543419db5e85.7afa83d7ceb30a92 - c4200a9c55e6e8b9 --VCMPPS_256_0x1(mem) -+VCMPPS_128_0x5(mem) - before - 9d551888ec5bba54.b55b8a93147ca2ae.c5cf4cc3017c9b39.4444d5c1ed71cba9 - e1652c85ae1f3e90.156e2d620d16037a.98f9eebaa937ceff.e7c0ad1f483d0d3c -@@ -46785,11 +46785,11 @@ VCMPPS_256_0x1(mem) - after - 9d551888ec5bba54.b55b8a93147ca2ae.c5cf4cc3017c9b39.4444d5c1ed71cba9 - e1652c85ae1f3e90.156e2d620d16037a.98f9eebaa937ceff.e7c0ad1f483d0d3c -- ffffffff00000000.00000000ffffffff.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff - 194a4e6724c1469a.f28e2185ab2e4b52.649d33ec0376dd9b.ff8253fe01a4fa62 - 2b60195797581e4c - --VCMPPS_256_0x1(reg) -+VCMPPS_128_0x5(reg) - before - 3ea0263124710656.c6b7562310b844bf.26336bb189c3aab6.16b0cfffec1231c9 - 938f77f9437cee2b.4e2f52a1982de236.afa13ad5ebc42a50.75a9629f23660772 -@@ -46797,12 +46797,12 @@ VCMPPS_256_0x1(reg) - 73a9d1ffa895ace9.5e731693eac2f0c4.2b0759b1ad3680d5.a97c5932e9682ce3 - 37eeb6feb02df203 - after -- ffffffff00000000.0000000000000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 938f77f9437cee2b.4e2f52a1982de236.afa13ad5ebc42a50.75a9629f23660772 - 8679061990041178.8d7fbecdd72cdd29.e7248b5b6ebb08cc.5d5366b6c37f1cc1 - 73a9d1ffa895ace9.5e731693eac2f0c4.2b0759b1ad3680d5.a97c5932e9682ce3 - 37eeb6feb02df203 --VCMPPS_256_0x1(mem) -+VCMPPS_128_0x5(mem) - before - e276f90634db2b4e.b66dd31527bbfb29.9fd6d7dfecfad834.d8989f4145c1cd18 - 85e09e36927d93ef.aa0f08c9a8033ae5.2b767c9efae151a5.48225c79d1e62d41 -@@ -46812,11 +46812,11 @@ VCMPPS_256_0x1(mem) - after - e276f90634db2b4e.b66dd31527bbfb29.9fd6d7dfecfad834.d8989f4145c1cd18 - 85e09e36927d93ef.aa0f08c9a8033ae5.2b767c9efae151a5.48225c79d1e62d41 -- 00000000ffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - 278900be4acedfe6.1a21fcb82127767f.93996221a8e8e538.e44f238e373410f2 - c88b274349730cd3 - --VCMPPS_256_0x1(reg) -+VCMPPS_128_0x5(reg) - before - e1f0904fbf7e0a4a.de61b4eedd953b93.4c27b3cb521bebb5.27b49bbe802279b3 - 89c95a1e35e14603.fd4abaf6b981b547.a13d8d2bf4604118.773ba97cd43a8cde -@@ -46824,12 +46824,12 @@ VCMPPS_256_0x1(reg) - f90b03b694dc67e8.e782ad3fbdf5f773.20c59b83010e7b0f.b7bc31105d3426f6 - 5f4ea3bdcb2f243b - after -- ffffffffffffffff.ffffffff00000000.ffffffffffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 - 89c95a1e35e14603.fd4abaf6b981b547.a13d8d2bf4604118.773ba97cd43a8cde - 1d64821c4827fca9.62118fc3fa9c0b2e.73ae8744a683b251.5df90749bf3cdde5 - f90b03b694dc67e8.e782ad3fbdf5f773.20c59b83010e7b0f.b7bc31105d3426f6 - 5f4ea3bdcb2f243b --VCMPPS_256_0x1(mem) -+VCMPPS_128_0x5(mem) - before - 327dda3c253893e0.790bd856b48cc46d.6a6992581d953642.03d0c752a490d7fb - 0d135179865c2f12.f9b1ff6a44c44ee4.c592baf8368a84c9.7719061f289204c4 -@@ -46839,11 +46839,11 @@ VCMPPS_256_0x1(mem) - after - 327dda3c253893e0.790bd856b48cc46d.6a6992581d953642.03d0c752a490d7fb - 0d135179865c2f12.f9b1ff6a44c44ee4.c592baf8368a84c9.7719061f289204c4 -- ffffffffffffffff.ffffffff00000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - 46a6efdece22dccc.6919319a27fadd57.77d9bf8206a13ba9.8697ae5f494cbb98 - d8650eab1d1abffb - --VCMPPD_128_0x2(reg) -+VCMPPS_256_0x5(reg) - before - 2da272a4449a82ea.5e3c0edeeddc65ac.1075348fb10f59aa.858f9443f4da1d5b - df99d5b659584110.ec6a5e4b84e10cc8.28a578a71bdcf29f.dcb79c3c0c99fd74 -@@ -46851,12 +46851,12 @@ VCMPPD_128_0x2(reg) - cde889d5bebaa2b4.ddbc7e2188fa9e67.18b4b4f001cd6e1e.d58d338627d2aa89 - 2fd2bab06365efdd - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 00000000ffffffff.00000000ffffffff.ffffffffffffffff.0000000000000000 - df99d5b659584110.ec6a5e4b84e10cc8.28a578a71bdcf29f.dcb79c3c0c99fd74 - 4b97334df8de381a.cdfb5a13ae3c8b4d.0cf6f94e02ede6e2.581d535969e7981f - cde889d5bebaa2b4.ddbc7e2188fa9e67.18b4b4f001cd6e1e.d58d338627d2aa89 - 2fd2bab06365efdd --VCMPPD_128_0x2(mem) -+VCMPPS_256_0x5(mem) - before - 43ba63c139ad2248.c2d8d2ba4778bc89.f87946612d260341.a82ba3f9b508c900 - eb0faaa7c4b500f6.84b30a692ea2c246.fafe2fbfbacc7408.17a7c4d6b92b3234 -@@ -46866,11 +46866,11 @@ VCMPPD_128_0x2(mem) - after - 43ba63c139ad2248.c2d8d2ba4778bc89.f87946612d260341.a82ba3f9b508c900 - eb0faaa7c4b500f6.84b30a692ea2c246.fafe2fbfbacc7408.17a7c4d6b92b3234 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.ffffffff00000000.0000000000000000.ffffffff00000000 - 6a33039e6a36acc9.e25937d187708026.238f5085fab76d0b.07dd89b823561b40 - 3e302695c0761570 - --VCMPPD_128_0x2(reg) -+VCMPPS_256_0x5(reg) - before - c6b7e4f61eae0ca2.f99a0c88bdc7f346.36bc2562312ab1a2.023482c5e5156ca0 - f9bfbe46d9893d81.8d9fa4f63648d4b6.c83af26daa83beb5.38d0c3d3271c68d1 -@@ -46878,12 +46878,12 @@ VCMPPD_128_0x2(reg) - d481bc62d35a3cf9.33b26f0e084b561e.16b7199e773b5a52.1920660a235b46b9 - 7c6cc00b14a9a1c8 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.ffffffff00000000.ffffffffffffffff - f9bfbe46d9893d81.8d9fa4f63648d4b6.c83af26daa83beb5.38d0c3d3271c68d1 - 3594b3f18c94e4ba.010d47d4f0c50b45.f41f9a5d8d04e20c.a130919cddda1dcb - d481bc62d35a3cf9.33b26f0e084b561e.16b7199e773b5a52.1920660a235b46b9 - 7c6cc00b14a9a1c8 --VCMPPD_128_0x2(mem) -+VCMPPS_256_0x5(mem) - before - a6df1b8accd2e824.34d4d7084b6783e9.fe589a9099e66f6e.8a4d6b9c03b36234 - 7347f17368e2d7f8.afd7fe4c9048f237.3ecc4346c0a01360.ac2f8dc3cef8365e -@@ -46893,11 +46893,11 @@ VCMPPD_128_0x2(mem) - after - a6df1b8accd2e824.34d4d7084b6783e9.fe589a9099e66f6e.8a4d6b9c03b36234 - 7347f17368e2d7f8.afd7fe4c9048f237.3ecc4346c0a01360.ac2f8dc3cef8365e -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffff00000000.0000000000000000 - 65210332bae3a1ba.6a216661eeb33f9c.8d4effff3ea7eadc.6a022e3d8f1b3038 - be8ca567bd11ce40 - --VCMPPD_128_0x2(reg) -+VCMPPS_256_0x5(reg) - before - 3091dc6a99042940.432c36e2a9eef300.61ff9d0b4056940b.53f30bd9cd0a96bf - 1c5dceb3c0807be4.335bd5abea0edd6e.e5bdd203cefc0387.ff97849861bebdf3 -@@ -46905,12 +46905,12 @@ VCMPPD_128_0x2(reg) - d179d3c35e44f6c6.be54493bd8c36c75.ff0d239210821e58.7507b2720b486b05 - f86c5f6558356939 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffff00000000.0000000000000000.ffffffffffffffff - 1c5dceb3c0807be4.335bd5abea0edd6e.e5bdd203cefc0387.ff97849861bebdf3 - dd3b77adce1101d7.137a5d7a9c511c31.50a900b73531c8bd.6c04e82717cf1aa7 - d179d3c35e44f6c6.be54493bd8c36c75.ff0d239210821e58.7507b2720b486b05 - f86c5f6558356939 --VCMPPD_128_0x2(mem) -+VCMPPS_256_0x5(mem) - before - cfff69ec1aa2d370.5361de630ca4985c.0fb715dbbc6f8965.4e373700fb7a4205 - d88b4ef36e9c63d6.be4095f875be2046.e46d3d4464612e2e.9a71396c94a56f70 -@@ -46920,11 +46920,11 @@ VCMPPD_128_0x2(mem) - after - cfff69ec1aa2d370.5361de630ca4985c.0fb715dbbc6f8965.4e373700fb7a4205 - d88b4ef36e9c63d6.be4095f875be2046.e46d3d4464612e2e.9a71396c94a56f70 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 00000000ffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff - ecc297313a64e8dd.c413f4b2e64ddac4.860592266e4803fa.9448f3f439c6d82e - fb7ca5e67fd38ad9 - --VCMPPD_256_0x2(reg) -+VCMPPD_128_0x6(reg) - before - cef23387e14437f2.af04f241ea4b54d6.159e94ae27da82b1.0b7fb7760855ab55 - 69f49b43fba41925.147018809ceed8af.c151d04f915102a1.847c2840d5d8cb38 -@@ -46932,12 +46932,12 @@ VCMPPD_256_0x2(reg) - 67cfe6bdca626f87.2ff6b23f749a12aa.965a0931562b783d.bd33dff27b726648 - 37841db28ba159cd - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 69f49b43fba41925.147018809ceed8af.c151d04f915102a1.847c2840d5d8cb38 - 28cfd8876a806d1d.f5d284dc6b5a2d91.2276a302c33e9541.cbca6170f2de20d0 - 67cfe6bdca626f87.2ff6b23f749a12aa.965a0931562b783d.bd33dff27b726648 - 37841db28ba159cd --VCMPPD_256_0x2(mem) -+VCMPPD_128_0x6(mem) - before - 1389979c3e76b48b.8240c153b6d85a0e.9fa71e97d2ba4126.7749fe4ae8a6e740 - 2e0ec99db1fd34ad.d56e65b4ca6e6b5f.1fb345cfa2c67731.238f7eb7153b1ef7 -@@ -46947,11 +46947,11 @@ VCMPPD_256_0x2(mem) - after - 1389979c3e76b48b.8240c153b6d85a0e.9fa71e97d2ba4126.7749fe4ae8a6e740 - 2e0ec99db1fd34ad.d56e65b4ca6e6b5f.1fb345cfa2c67731.238f7eb7153b1ef7 -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 92c74690455292cf.9330fa87dc27ef0e.c307b18f06d4e8a1.474f1142aedfd32f - 79611b375207c908 - --VCMPPD_256_0x2(reg) -+VCMPPD_128_0x6(reg) - before - e4faa03100797645.9294895b9e38e827.b55ce2d11262d9c3.9ee8eeefd2ee9a60 - e5669d9c55c01892.411074eb27015294.80758496e0edd9f3.fa53d5df7f24435c -@@ -46959,12 +46959,12 @@ VCMPPD_256_0x2(reg) - 1ae7eb7663fe250a.1c48330f3769565b.7e9ee241b6210a6e.a5f69320ef1469c2 - acc66149e8e75e82 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - e5669d9c55c01892.411074eb27015294.80758496e0edd9f3.fa53d5df7f24435c - d8f10ce5ed68e99a.7b08832efbb88e41.4fc7da42e3532a48.b313e34c2a829ec4 - 1ae7eb7663fe250a.1c48330f3769565b.7e9ee241b6210a6e.a5f69320ef1469c2 - acc66149e8e75e82 --VCMPPD_256_0x2(mem) -+VCMPPD_128_0x6(mem) - before - a450c9b134073932.059435bc530d0a8d.009bfe7af621670d.68469700f6e2b312 - 69604846ed7eb8fb.f643e7245a22d2d0.03cf625b55eb7d84.6b0af5e93e2262e0 -@@ -46974,11 +46974,11 @@ VCMPPD_256_0x2(mem) - after - a450c9b134073932.059435bc530d0a8d.009bfe7af621670d.68469700f6e2b312 - 69604846ed7eb8fb.f643e7245a22d2d0.03cf625b55eb7d84.6b0af5e93e2262e0 -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ca4278a417a68d8f.5ada6f061b8afe45.d606e33060e6a670.281a9eee5850c1a8 - 9bfde0e06157e9fb - --VCMPPD_256_0x2(reg) -+VCMPPD_128_0x6(reg) - before - 952cbbaee30c0627.1eab2145c06f5cb0.855a3e590df7d9cf.5ea1f7fb462e323d - 74f52bc37afd56d9.afcbd0c247c0bd9d.260d647d869988c8.754c94ed3abab27e -@@ -46986,12 +46986,12 @@ VCMPPD_256_0x2(reg) - 4d81bb7354c17a7d.f85b32005d2b2885.3a3ba7e87bac51ba.c00157f2c1c7820f - aca374de8c6248b6 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 74f52bc37afd56d9.afcbd0c247c0bd9d.260d647d869988c8.754c94ed3abab27e - 92a32d8bc1b613bc.596c0207c7a56d7f.993fdede21fc47dd.f7d235f15a93e460 - 4d81bb7354c17a7d.f85b32005d2b2885.3a3ba7e87bac51ba.c00157f2c1c7820f - aca374de8c6248b6 --VCMPPD_256_0x2(mem) -+VCMPPD_128_0x6(mem) - before - 96860aa0d76ef482.ffdcd3e5d0acc6c7.6764dc9a245daad9.654ebb082f36e40a - 5c749424bcf9409e.0500714ed0023547.84537cbf3847aea7.76c416a8da25397a -@@ -47001,11 +47001,11 @@ VCMPPD_256_0x2(mem) - after - 96860aa0d76ef482.ffdcd3e5d0acc6c7.6764dc9a245daad9.654ebb082f36e40a - 5c749424bcf9409e.0500714ed0023547.84537cbf3847aea7.76c416a8da25397a -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - e8a47422cbbaaa79.7ed32bb6ce216698.3512905eba752e64.ba09921c82632168 - a470aac7b8cb2a3f - --VCMPPS_128_0x2(reg) -+VCMPPD_256_0x6(reg) - before - e56afaa455c7e6e5.677dc3752b09408f.a81a408d0401a2c1.807afbb05fd023aa - d8427e1ef4e59307.3193f539960567a5.9759ca0b2e7defd0.e9f84c3ec1148a1b -@@ -47013,12 +47013,12 @@ VCMPPS_128_0x2(reg) - 43bf0e99a9b5ab6d.15a2f8c800395785.2ff32eabd076af4d.816691be2f85a02d - 69ed7d8872c9c826 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - d8427e1ef4e59307.3193f539960567a5.9759ca0b2e7defd0.e9f84c3ec1148a1b - d94530a131b06b50.21b0885b2abcdbe9.a5ddc59be9208a70.4a58fff4fd4c20e3 - 43bf0e99a9b5ab6d.15a2f8c800395785.2ff32eabd076af4d.816691be2f85a02d - 69ed7d8872c9c826 --VCMPPS_128_0x2(mem) -+VCMPPD_256_0x6(mem) - before - ddbb3f3ee22752f9.74fc1372f77f8f09.e733bf6b368899a5.91e4ffa6800c9914 - ba9a53cc9ca8fad3.c6483b98b89a52d1.75305b2fe8b65a76.27ff36f8946d8571 -@@ -47028,11 +47028,11 @@ VCMPPS_128_0x2(mem) - after - ddbb3f3ee22752f9.74fc1372f77f8f09.e733bf6b368899a5.91e4ffa6800c9914 - ba9a53cc9ca8fad3.c6483b98b89a52d1.75305b2fe8b65a76.27ff36f8946d8571 -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - 20be62215c48984a.423ce57b01f46894.319dffcf2edd50da.5fdfc45259c1529c - b93d133143cdabc1 - --VCMPPS_128_0x2(reg) -+VCMPPD_256_0x6(reg) - before - b7f3b71801d3f62c.619b55c09a7e0540.227c5e11c24c33e7.17a5ff82faedfcc5 - b54eac712f616f89.7aba8ae6920980ec.95fbeba36424cd16.294ac407b10c1910 -@@ -47040,12 +47040,12 @@ VCMPPS_128_0x2(reg) - 21237a2e4e42d9c7.a8edab7c1e4c9418.9fe62f70c18961b6.3c96893852a69579 - f6d683bb74386cee - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - b54eac712f616f89.7aba8ae6920980ec.95fbeba36424cd16.294ac407b10c1910 - 0f9aeeaa6a025184.48e77e815ff4c77b.f505879f850a73cc.4156c84b704663e9 - 21237a2e4e42d9c7.a8edab7c1e4c9418.9fe62f70c18961b6.3c96893852a69579 - f6d683bb74386cee --VCMPPS_128_0x2(mem) -+VCMPPD_256_0x6(mem) - before - 4ce130c1f208a374.47344a6975ae4301.74998fc3ea1ca4f0.f0eadd82b32ed27f - 18850e34e623f837.dd1b5cc77ed1cbdc.89b7a542df70b22f.425c8f40f88404d4 -@@ -47055,11 +47055,11 @@ VCMPPS_128_0x2(mem) - after - 4ce130c1f208a374.47344a6975ae4301.74998fc3ea1ca4f0.f0eadd82b32ed27f - 18850e34e623f837.dd1b5cc77ed1cbdc.89b7a542df70b22f.425c8f40f88404d4 -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 85c34a16a668e621.c896349ca06e2327.fe795898b7d5bb90.5dbeed76e87495d0 - dd4590c4cc266dd0 - --VCMPPS_128_0x2(reg) -+VCMPPD_256_0x6(reg) - before - cf6b276f73b9f50b.def6a05caaaaf9a2.d6c3f1ebf1ff6cef.17b5ec48d1ff2e0b - 8f7bade378ba692e.1ef116c09466180e.c4f5e00d9477c209.e892a3df84dc8f9c -@@ -47067,12 +47067,12 @@ VCMPPS_128_0x2(reg) - ea8d76d70d3404da.c36e5492907e6d5e.af97427b394e88e1.2562687628e40eb1 - 49ed6d4e4f27a38e - after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 8f7bade378ba692e.1ef116c09466180e.c4f5e00d9477c209.e892a3df84dc8f9c - 7ac31e8d77b405e4.2180292e82a90094.ee77fc6f22636220.4eddf84bed7a9b6f - ea8d76d70d3404da.c36e5492907e6d5e.af97427b394e88e1.2562687628e40eb1 - 49ed6d4e4f27a38e --VCMPPS_128_0x2(mem) -+VCMPPD_256_0x6(mem) - before - 964a85be814e1832.3c26b22fd5c4a3bc.e08913d8d9f11a98.659fac9f75c570f7 - e8452bb2d76527c8.ccdbcd006cf21d35.549be3ed7a0fc46f.6adc38467153550f -@@ -47082,11 +47082,11 @@ VCMPPS_128_0x2(mem) - after - 964a85be814e1832.3c26b22fd5c4a3bc.e08913d8d9f11a98.659fac9f75c570f7 - e8452bb2d76527c8.ccdbcd006cf21d35.549be3ed7a0fc46f.6adc38467153550f -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 0a4412d66595057b.16c390bd7557969e.b1d7a2303179fea4.d625a3cc1be509f3 - f3c97a8400014f18 - --VCMPPS_256_0x2(reg) -+VCMPPS_128_0x6(reg) - before - d0d1636f166483ee.93e04aded5c54cf1.889031811fa50ce6.52998a3680de0759 - ca8b59f9f89be122.914a011ad9161e09.a8a7a06e08c04d76.ba8372bb971dfc5a -@@ -47094,12 +47094,12 @@ VCMPPS_256_0x2(reg) - 81405c9b93b20a53.5cb8dadf134851d2.62e7dd73058f231c.4efd34ef8a5a9cf3 - 332604769f70bfe2 - after -- ffffffffffffffff.00000000ffffffff.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - ca8b59f9f89be122.914a011ad9161e09.a8a7a06e08c04d76.ba8372bb971dfc5a - 3b41588f4331a560.e04eb2778f9336f0.d256dbf0cb3596f9.c560d7aa904299d4 - 81405c9b93b20a53.5cb8dadf134851d2.62e7dd73058f231c.4efd34ef8a5a9cf3 - 332604769f70bfe2 --VCMPPS_256_0x2(mem) -+VCMPPS_128_0x6(mem) - before - 4fa7c62beb90bfce.f6d4618a82aa4da7.e053f34080422bda.b4a7a364515a308a - 7e4cf3fa8bc757e3.f74964c9afa6aa0a.4aed7b84f38c8035.23e2272d4b23f8f0 -@@ -47109,11 +47109,11 @@ VCMPPS_256_0x2(mem) - after - 4fa7c62beb90bfce.f6d4618a82aa4da7.e053f34080422bda.b4a7a364515a308a - 7e4cf3fa8bc757e3.f74964c9afa6aa0a.4aed7b84f38c8035.23e2272d4b23f8f0 -- 0000000000000000.ffffffffffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - 8432829735a74236.0e0551e32dd8a0a7.3c49c56a58418a92.cdf85efbbcddac53 - bf6b08d86ae610a8 - --VCMPPS_256_0x2(reg) -+VCMPPS_128_0x6(reg) - before - 3e89623e361c1fa4.130adc3c77690dcc.dbe43397b627b23a.7da480e383c4b6ec - a89e6699bd0c16f4.263693ac7d71603b.a4d4034aeca8ce8b.132d98f023c74e4a -@@ -47121,12 +47121,12 @@ VCMPPS_256_0x2(reg) - a9dd61de6a47ab3e.44ba049942849152.9a175a5dce751215.adf8d476357fadbc - 69d2efc7de4ced28 - after -- ffffffffffffffff.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - a89e6699bd0c16f4.263693ac7d71603b.a4d4034aeca8ce8b.132d98f023c74e4a - 58f612559a403143.978221d162cbf9ae.c521bc686be92f45.d9af8b7d55570cd5 - a9dd61de6a47ab3e.44ba049942849152.9a175a5dce751215.adf8d476357fadbc - 69d2efc7de4ced28 --VCMPPS_256_0x2(mem) -+VCMPPS_128_0x6(mem) - before - ea0a595d6cc88748.f99f50a0c8aac191.07aab7ef3aa7e753.8002d995b2d8b3a6 - 0d6c8d22fc023946.a287d90851f7afe7.be1db6bf6641b5dc.d12d357db29f4da5 -@@ -47136,11 +47136,11 @@ VCMPPS_256_0x2(mem) - after - ea0a595d6cc88748.f99f50a0c8aac191.07aab7ef3aa7e753.8002d995b2d8b3a6 - 0d6c8d22fc023946.a287d90851f7afe7.be1db6bf6641b5dc.d12d357db29f4da5 -- 00000000ffffffff.0000000000000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - a5de43ee90d9cf8e.73fcae76527d024f.74c0897dc707ac39.277776097786609c - e42d528575bf4fec - --VCMPPS_256_0x2(reg) -+VCMPPS_128_0x6(reg) - before - 7d54fb61ff8b2959.d286bdcbcc8f2c30.5321f15402cedfb8.2b875443354b4d64 - 4d376e08b1772890.1087f28979319060.fc9dbf884d3884d5.45025c34473656c7 -@@ -47148,12 +47148,12 @@ VCMPPS_256_0x2(reg) - 07659e66ffdc870b.30c77955996c5d1d.1dc9ee9f228914d9.13441142c42f92e8 - 7ea2b63968553efe - after -- 00000000ffffffff.ffffffff00000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - 4d376e08b1772890.1087f28979319060.fc9dbf884d3884d5.45025c34473656c7 - b224a5e5280e883d.3bae5c13b4ccb74b.ccbc157dce482c51.9efd1c3a17d38490 - 07659e66ffdc870b.30c77955996c5d1d.1dc9ee9f228914d9.13441142c42f92e8 - 7ea2b63968553efe --VCMPPS_256_0x2(mem) -+VCMPPS_128_0x6(mem) - before - bce5860a1f5142fc.a84855f6d36d5fa6.c99ec53b431b3d01.4c12465ae4877818 - a9d7ffa0062f5a0f.f117c4023f4e4dbc.e3ffbab2cfe71424.b6e1191ab0cf94bb -@@ -47163,11 +47163,11 @@ VCMPPS_256_0x2(mem) - after - bce5860a1f5142fc.a84855f6d36d5fa6.c99ec53b431b3d01.4c12465ae4877818 - a9d7ffa0062f5a0f.f117c4023f4e4dbc.e3ffbab2cfe71424.b6e1191ab0cf94bb -- 00000000ffffffff.ffffffff00000000.ffffffffffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff - 00fbdad0d1c3ba22.eaacbe39512e5a03.0a8e94fefa0496d5.a6442259d96ae2dc - e5704eb16dd68db2 - --VCMPPD_128_0x3(reg) -+VCMPPS_256_0x6(reg) - before - ce52e7bd7bbbdf9b.22c43441ef91797a.5309413e2f45f18d.cf5470add26db9bc - be37e6eba0a51644.636e2629ab713d97.d4846e6d15db8e41.85d4e69bfb22c291 -@@ -47175,12 +47175,12 @@ VCMPPD_128_0x3(reg) - 1e3b0a599dba1d85.b291c3097398c2cf.8dffb2fd6ab5c9d5.343292e9b2a17ab7 - e5a8bf207884a060 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffff00000000.00000000ffffffff.0000000000000000 - be37e6eba0a51644.636e2629ab713d97.d4846e6d15db8e41.85d4e69bfb22c291 - 0f6c49a577216b59.9fc32c72236fc1a4.c8673f349f7c6dca.08da73b692306f81 - 1e3b0a599dba1d85.b291c3097398c2cf.8dffb2fd6ab5c9d5.343292e9b2a17ab7 - e5a8bf207884a060 --VCMPPD_128_0x3(mem) -+VCMPPS_256_0x6(mem) - before - f7077647ffe29da8.47f12772adfd6675.78a265dbb6f7fc41.7d98c2361212df0e - 461d334a64c92cba.e6d99c5c447484d4.cdc390d208982a29.f67e6b4a321deb20 -@@ -47190,11 +47190,11 @@ VCMPPD_128_0x3(mem) - after - f7077647ffe29da8.47f12772adfd6675.78a265dbb6f7fc41.7d98c2361212df0e - 461d334a64c92cba.e6d99c5c447484d4.cdc390d208982a29.f67e6b4a321deb20 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff - 0b99b1943660f3ee.f6747a5375342992.94646ee34cd25605.ef6079b34b72d381 - 27f5d6e07dd42828 - --VCMPPD_128_0x3(reg) -+VCMPPS_256_0x6(reg) - before - 5806bc9997156358.389869b4db28a368.1fbddc3847942948.be7d1ad57582ca52 - dce0274835c1bfbe.137d175fcea9d55d.2e69859f1059ed1e.e6d53d9d1da524c4 -@@ -47202,12 +47202,12 @@ VCMPPD_128_0x3(reg) - 511f7d3c6f8ccddb.4028460a0b02b165.6d1a9d9ef443b0d8.a575dd5f5c7175c5 - f35552312b33e4ad - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.0000000000000000.0000000000000000.ffffffff00000000 - dce0274835c1bfbe.137d175fcea9d55d.2e69859f1059ed1e.e6d53d9d1da524c4 - 10cf135af4657906.771338832aed46f8.7ec471f26b0fb1bf.ea39552761461e87 - 511f7d3c6f8ccddb.4028460a0b02b165.6d1a9d9ef443b0d8.a575dd5f5c7175c5 - f35552312b33e4ad --VCMPPD_128_0x3(mem) -+VCMPPS_256_0x6(mem) - before - afa52e8ae9972869.f91b605843c2f6ea.4986bfe28ef4d4d2.56b7041048802715 - b730ef54b3a9fd26.6511b81c0b9431de.70fa1ff6cfce6969.95e6a2b303535221 -@@ -47217,11 +47217,11 @@ VCMPPD_128_0x3(mem) - after - afa52e8ae9972869.f91b605843c2f6ea.4986bfe28ef4d4d2.56b7041048802715 - b730ef54b3a9fd26.6511b81c0b9431de.70fa1ff6cfce6969.95e6a2b303535221 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.ffffffff00000000.ffffffff00000000.0000000000000000 - 172b0defd9094951.fa16b849e939cd28.84548082f86adbc6.842e733b1be8b358 - edde9ff9b1c261db - --VCMPPD_128_0x3(reg) -+VCMPPS_256_0x6(reg) - before - 1b51f2981d62b2dd.273263986d6e3918.dabe588a3725a5d5.2ad179d2194531e5 - 6cd26885fc54e40b.f3a58d637cb2a88f.ee8f5d22e9dc7f18.5c95490e6738e9de -@@ -47229,12 +47229,12 @@ VCMPPD_128_0x3(reg) - e332aef4815ad69a.2bfe4d0e7e05fa3f.22db8608eadc290f.d81d5cfbfd977111 - d97a97837b1bb9a2 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.00000000ffffffff.0000000000000000.ffffffffffffffff - 6cd26885fc54e40b.f3a58d637cb2a88f.ee8f5d22e9dc7f18.5c95490e6738e9de - 3baffd2ae9223111.554f063b23e055e2.92d5c37d9bea979d.f86a6c23ff4fbfde - e332aef4815ad69a.2bfe4d0e7e05fa3f.22db8608eadc290f.d81d5cfbfd977111 - d97a97837b1bb9a2 --VCMPPD_128_0x3(mem) -+VCMPPS_256_0x6(mem) - before - d84d98a897e854bd.c2a976505f870e53.4f7cdbc7a82c54cf.faeea32d723d701a - af62db556d08fd90.325e50a8203617e8.9f972d53bd611fc1.765b1559ce9aa96b -@@ -47244,11 +47244,11 @@ VCMPPD_128_0x3(mem) - after - d84d98a897e854bd.c2a976505f870e53.4f7cdbc7a82c54cf.faeea32d723d701a - af62db556d08fd90.325e50a8203617e8.9f972d53bd611fc1.765b1559ce9aa96b -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffff00000000.0000000000000000.ffffffff00000000 - 598118f6b5776d08.39b53000b9478653.2ecf0f8f1b26f776.ca6ee8787375e08e - 5aac4241f40b56b8 - --VCMPPD_256_0x3(reg) -+VCMPPD_128_0x7(reg) - before - fe74e0c2bacdaed8.e3230ac35fddab06.87ee2dd8c9c26683.278596189bce7c91 - 1110c06661462399.b6372ec833c7e76b.d8972d5d2cee053e.ba06d22476b561bd -@@ -47256,12 +47256,12 @@ VCMPPD_256_0x3(reg) - f9f834c7bf8e57b0.a8e5fd2bc6594c18.ee64261e588a7206.219d5571af6d3ff6 - ad4a958b4556ae5c - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1110c06661462399.b6372ec833c7e76b.d8972d5d2cee053e.ba06d22476b561bd - f1cdde998303f2a8.ae8900f14c42de62.86fa2cfb7d57a030.c4203d9ec9e66425 - f9f834c7bf8e57b0.a8e5fd2bc6594c18.ee64261e588a7206.219d5571af6d3ff6 - ad4a958b4556ae5c --VCMPPD_256_0x3(mem) -+VCMPPD_128_0x7(mem) - before - 44f37ad7a6ae6f82.85dbc05dae768e5e.7e179f60be18edb8.6d2117325a12b96c - c2647e41ef813c95.f1c27cc5ee44d35e.0dea647d508b7c6f.5d7dfca41f7baf0d -@@ -47271,11 +47271,11 @@ VCMPPD_256_0x3(mem) - after - 44f37ad7a6ae6f82.85dbc05dae768e5e.7e179f60be18edb8.6d2117325a12b96c - c2647e41ef813c95.f1c27cc5ee44d35e.0dea647d508b7c6f.5d7dfca41f7baf0d -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e4cdd81fa6c4ed30.d8d07abfd0c77402.c6a64521afc057d1.03418f4d5f229ab2 - 7142365e1377070e - --VCMPPD_256_0x3(reg) -+VCMPPD_128_0x7(reg) - before - c211bf7cf9de1456.3f5e256b4d4d4811.0b8fb228aa944afe.a827587eb5981ad4 - 50fb2812aee2fd35.f0e682864c81a08e.8f820c1544781dfc.b37a7e74c455bd9d -@@ -47283,12 +47283,12 @@ VCMPPD_256_0x3(reg) - 9650875bf3f2516a.c90e5ed5c017360e.f637132829b6adac.b4c5f0d86fac8d34 - 6256351e435e3459 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 50fb2812aee2fd35.f0e682864c81a08e.8f820c1544781dfc.b37a7e74c455bd9d - 784c6c8ecd10fd58.d5326c5abe6bb1d4.bff683f13aff2aa7.c36b32eef902fa59 - 9650875bf3f2516a.c90e5ed5c017360e.f637132829b6adac.b4c5f0d86fac8d34 - 6256351e435e3459 --VCMPPD_256_0x3(mem) -+VCMPPD_128_0x7(mem) - before - a8e87bac9024a9f4.065276e5bb163518.a846d4e16c92ed69.9290b826ad27e1b7 - 6448406e730ba933.24a03398c208e50e.4ea64a6ce1e79011.ed4f6f5761e10473 -@@ -47298,11 +47298,11 @@ VCMPPD_256_0x3(mem) - after - a8e87bac9024a9f4.065276e5bb163518.a846d4e16c92ed69.9290b826ad27e1b7 - 6448406e730ba933.24a03398c208e50e.4ea64a6ce1e79011.ed4f6f5761e10473 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - aba2343f68693847.d94b0d2afa839780.5f0c27ac90508cf5.542b0002ca5901b1 - 17e0d255b731548a - --VCMPPD_256_0x3(reg) -+VCMPPD_128_0x7(reg) - before - 0b2aa68a457f85c4.ee335c26b3f94075.294120e065241154.81ab8639037c5d8b - 8a54760f10d1d00d.15c3f2f004d9c3f6.97b2f2707dc34820.dba2d5f4adb20b1d -@@ -47310,12 +47310,12 @@ VCMPPD_256_0x3(reg) - 9c7cffb5caafa376.830b58e225ba289f.3d34c5ca2a29d84f.a3c834a4186eece6 - ca8f3c72110b9876 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 8a54760f10d1d00d.15c3f2f004d9c3f6.97b2f2707dc34820.dba2d5f4adb20b1d - f1ac404eb2b3710e.fe1c728b76157cf5.7fea8044e0eb7690.48bd91c9abff51d7 - 9c7cffb5caafa376.830b58e225ba289f.3d34c5ca2a29d84f.a3c834a4186eece6 - ca8f3c72110b9876 --VCMPPD_256_0x3(mem) -+VCMPPD_128_0x7(mem) - before - 97dd241db1e311b2.e812b0aff153a3ef.825c20e12ed38320.2cdebd6df608a909 - e87f6893150112c7.2fb84da8c52bac26.d6db4774ad6d49a3.aa326599e014266c -@@ -47325,11 +47325,11 @@ VCMPPD_256_0x3(mem) - after - 97dd241db1e311b2.e812b0aff153a3ef.825c20e12ed38320.2cdebd6df608a909 - e87f6893150112c7.2fb84da8c52bac26.d6db4774ad6d49a3.aa326599e014266c -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 82eff58c97409f2b.21674047e3a3cd7c.ec929f067a500461.bf0bb13c80e414d7 - 0f284f8b6ec0fd38 - --VCMPPS_128_0x3(reg) -+VCMPPD_256_0x7(reg) - before - 5c1f8b13eafa81f1.835536e8ed7aa3d1.84078dc5655d5bf3.6662c8de01b372f4 - 043e6240911dddad.783ec3be76291f01.53e9b7f2037ae4d8.a69040f96dc63a39 -@@ -47337,12 +47337,12 @@ VCMPPS_128_0x3(reg) - d11fd33ace4f0be1.aacdb288941b72a9.a59e940a040dd29b.e33609ac662ccb8c - 9a46531c2b980cf1 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 043e6240911dddad.783ec3be76291f01.53e9b7f2037ae4d8.a69040f96dc63a39 - 62cfd17ffeb54c19.3b7819fa4f5bd0e5.ea57bb3b5986a2d7.86e88144db95195d - d11fd33ace4f0be1.aacdb288941b72a9.a59e940a040dd29b.e33609ac662ccb8c - 9a46531c2b980cf1 --VCMPPS_128_0x3(mem) -+VCMPPD_256_0x7(mem) - before - 85e4dc8045e497b9.ae7a64df9c7656b0.9f0a0c546075c17a.e00a3ecda09cb0d1 - 81db1ec3d11d2910.562c81d905b66932.f7fba24bcf767884.f7e7b5eec7be7724 -@@ -47352,11 +47352,11 @@ VCMPPS_128_0x3(mem) - after - 85e4dc8045e497b9.ae7a64df9c7656b0.9f0a0c546075c17a.e00a3ecda09cb0d1 - 81db1ec3d11d2910.562c81d905b66932.f7fba24bcf767884.f7e7b5eec7be7724 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1d07c29bac835218.73c44b7b16b3d603.41297366089b10f1.2924fcff2decb3d3 - fc1bc3c6a2109f88 - --VCMPPS_128_0x3(reg) -+VCMPPD_256_0x7(reg) - before - 1bb3479c14f86609.74d41b0834c86022.a042f1fcf687a8a8.eafda5620ad76aac - e13884ed1e2f4205.4c2b1f049e2a656b.07471383e0a531b1.66b604391fe91c50 -@@ -47364,12 +47364,12 @@ VCMPPS_128_0x3(reg) - d7391bb16cbb2b18.efa6145d85734369.f416b74e45ec5c9e.47023725f4c07a02 - 652e0212ec9e9e68 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - e13884ed1e2f4205.4c2b1f049e2a656b.07471383e0a531b1.66b604391fe91c50 - acf677255d416f26.81d8497c05b41c1f.041fab7a7198afca.911e0bd664dee209 - d7391bb16cbb2b18.efa6145d85734369.f416b74e45ec5c9e.47023725f4c07a02 - 652e0212ec9e9e68 --VCMPPS_128_0x3(mem) -+VCMPPD_256_0x7(mem) - before - c56dea8967810b66.bd4d6cfbe827b088.7262ff913b729475.3178326bf62e74da - 448d6a7682777d29.bc7d66716c143b22.e6d8830643bdcb71.1891183e23e93529 -@@ -47379,11 +47379,11 @@ VCMPPS_128_0x3(mem) - after - c56dea8967810b66.bd4d6cfbe827b088.7262ff913b729475.3178326bf62e74da - 448d6a7682777d29.bc7d66716c143b22.e6d8830643bdcb71.1891183e23e93529 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 0f9c226205ca5ead.7165468dfd9a5282.11224a5fb669dfe3.541616b25bfb9db3 - 611b262c9f6abd45 - --VCMPPS_128_0x3(reg) -+VCMPPD_256_0x7(reg) - before - 8807910bcd82749b.1223533aa63f46c6.e0b4240c434c56a1.808e851c5ae133b2 - 252653bb82d0ff60.a5ba0c3757f62253.d6509b6601ae4f99.50e34ac9bfd65e1f -@@ -47391,12 +47391,12 @@ VCMPPS_128_0x3(reg) - 312ccd3eef3c80ea.e8470655565caa7c.cb9e455b56af14c6.837c64a33e642786 - 9e57afa98f163ed7 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 252653bb82d0ff60.a5ba0c3757f62253.d6509b6601ae4f99.50e34ac9bfd65e1f - 94c468a859df9a41.a32cc94733fcb081.b184a807d34b7b16.5def165202531b57 - 312ccd3eef3c80ea.e8470655565caa7c.cb9e455b56af14c6.837c64a33e642786 - 9e57afa98f163ed7 --VCMPPS_128_0x3(mem) -+VCMPPD_256_0x7(mem) - before - 8a4c764e12741c77.58ab7de9df72ef06.50d63f4cdd22cc6f.82e870ce26675753 - 2227327fe38a7c92.658e7415c50d2042.b7a4f11ae35bd487.30af24ccdefe7f69 -@@ -47406,11 +47406,11 @@ VCMPPS_128_0x3(mem) - after - 8a4c764e12741c77.58ab7de9df72ef06.50d63f4cdd22cc6f.82e870ce26675753 - 2227327fe38a7c92.658e7415c50d2042.b7a4f11ae35bd487.30af24ccdefe7f69 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - cbbe7d37dd10b4e7.a1aa28a1e6a3bfc8.f130ade8de5381d4.e5e4181a77fa72e3 - a3ea4f429077b39e - --VCMPPS_256_0x3(reg) -+VCMPPS_128_0x7(reg) - before - ca9d00a40203cb93.921204943e970579.887dddd958b6a56b.7d86b0c10b2b9e61 - b44826ae682bf46d.777c712e5c07c836.c4e3c941315f3ddd.774c1a1f28a590c4 -@@ -47418,12 +47418,12 @@ VCMPPS_256_0x3(reg) - 44bac267827c6b83.07c2eec642cf96e0.b096375685a07ae0.2a56181e9eb0e3b6 - 9934a3963159bb9d - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - b44826ae682bf46d.777c712e5c07c836.c4e3c941315f3ddd.774c1a1f28a590c4 - be38becb5f7a6bd9.55c841f0546bba4a.b327e8470b29c6ca.bd4d69ef4fce1326 - 44bac267827c6b83.07c2eec642cf96e0.b096375685a07ae0.2a56181e9eb0e3b6 - 9934a3963159bb9d --VCMPPS_256_0x3(mem) -+VCMPPS_128_0x7(mem) - before - e8b1874523d5590a.a21830ee6dbe3216.6b35f69c40401a24.167cb0da395096c9 - f19a3e16912f7627.349e03ccbdcbfa3f.5befd45e6dc90044.4325513fc3c65631 -@@ -47433,11 +47433,11 @@ VCMPPS_256_0x3(mem) - after - e8b1874523d5590a.a21830ee6dbe3216.6b35f69c40401a24.167cb0da395096c9 - f19a3e16912f7627.349e03ccbdcbfa3f.5befd45e6dc90044.4325513fc3c65631 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - a5df1ace4ead2423.6557c93dfb777f01.53630357be54e4c2.5eeff85ccb32b031 - 05a9f7ed8140c320 - --VCMPPS_256_0x3(reg) -+VCMPPS_128_0x7(reg) - before - e1550d0e7d436a3f.07d3378dd6ea2c5a.bb20b3a9212eb4f3.13b64c661b6e5a79 - 5040362d5cc8e03a.9564171e4a35a5f1.b542f31b1be1db2a.cf7f5b1015d123bb -@@ -47445,12 +47445,12 @@ VCMPPS_256_0x3(reg) - 5303b11131852c71.a08815666326d9f2.04c162c5fc67ee19.afa3bbea529f9d8e - 8a9505f0cc22c677 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 5040362d5cc8e03a.9564171e4a35a5f1.b542f31b1be1db2a.cf7f5b1015d123bb - acb66eb4b95a62bc.295c386dc59b4b15.af098401851a3053.648aac43c988fab3 - 5303b11131852c71.a08815666326d9f2.04c162c5fc67ee19.afa3bbea529f9d8e - 8a9505f0cc22c677 --VCMPPS_256_0x3(mem) -+VCMPPS_128_0x7(mem) - before - d22d0543541e329b.9f73fcaf5fd67907.d7b42af641e50cb3.12b68ad51b545229 - 633737ce069e9c26.ed514afadfd88628.a8abf4077ae19f85.3433f79c7f6c982f -@@ -47460,11 +47460,11 @@ VCMPPS_256_0x3(mem) - after - d22d0543541e329b.9f73fcaf5fd67907.d7b42af641e50cb3.12b68ad51b545229 - 633737ce069e9c26.ed514afadfd88628.a8abf4077ae19f85.3433f79c7f6c982f -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - d1d1213d565c5d1f.008bdf474820d0bc.8b2e93606fc5d90b.24f990ff844db9cb - aad9b4735d2f0cb9 - --VCMPPS_256_0x3(reg) -+VCMPPS_128_0x7(reg) - before - b3720e4eeb6c314d.65f9d2f82cb12ce5.7c7e1f21687e8488.5551618063c5f616 - 9d1099fdc9916333.b2c2a59c9bbbe9c2.6b1051584abde88f.2a70d3d2223365e2 -@@ -47472,12 +47472,12 @@ VCMPPS_256_0x3(reg) - 808a3283e7c0e1a2.e76aa14bb61b2070.0d40808ec710b000.66d295bc7389246d - 84addc2c3d8aed83 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 9d1099fdc9916333.b2c2a59c9bbbe9c2.6b1051584abde88f.2a70d3d2223365e2 - c3fe51ea9429df16.94f91613c08551e2.278c73598b6a387e.e7576642c91be09b - 808a3283e7c0e1a2.e76aa14bb61b2070.0d40808ec710b000.66d295bc7389246d - 84addc2c3d8aed83 --VCMPPS_256_0x3(mem) -+VCMPPS_128_0x7(mem) - before - 1db3b77f422af609.32fe39325fe3a585.87e1c32e9a891199.79767565993b8bc2 - 0db1a29f9e73fc2c.34a76065971c6669.502af7aa87dce288.c77c4c489d780670 -@@ -47487,11 +47487,11 @@ VCMPPS_256_0x3(mem) - after - 1db3b77f422af609.32fe39325fe3a585.87e1c32e9a891199.79767565993b8bc2 - 0db1a29f9e73fc2c.34a76065971c6669.502af7aa87dce288.c77c4c489d780670 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 61c59aface36eef8.97c80304b806d1e5.cd61851aee5f0e6b.792395e7ad55cb3e - 955cff7af10e8db6 - --VCMPPD_128_0x5(reg) -+VCMPPS_256_0x7(reg) - before - 03953bcad708dfca.7e739e0dd9c653f9.b0d87748dacef4d6.39e8d7e6a0a7e3b6 - 1f184743fcd0fc26.6249a29dab31a447.8a4dfbbf2cde0478.3e702cfacb048678 -@@ -47499,12 +47499,12 @@ VCMPPD_128_0x5(reg) - d130bc6170f78a64.ef9b9be917c6fc78.ed9428f6d102de82.82b6ccabfe29280f - 7a0c0f1f3e0b9f3d - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1f184743fcd0fc26.6249a29dab31a447.8a4dfbbf2cde0478.3e702cfacb048678 - 45331e51fbf02175.e912229861829d0d.7f728dd54ac03e78.b7c6ff438c80b4dc - d130bc6170f78a64.ef9b9be917c6fc78.ed9428f6d102de82.82b6ccabfe29280f - 7a0c0f1f3e0b9f3d --VCMPPD_128_0x5(mem) -+VCMPPS_256_0x7(mem) - before - 7b93458c6730d591.1f5c1dddf86e739e.4fb1887ce7087bb3.2effc88e5c2f1f41 - 6019e8dd95a68638.8b033e322fe317d0.e71e653df055d7eb.9fff6a0a88d43e61 -@@ -47514,11 +47514,11 @@ VCMPPD_128_0x5(mem) - after - 7b93458c6730d591.1f5c1dddf86e739e.4fb1887ce7087bb3.2effc88e5c2f1f41 - 6019e8dd95a68638.8b033e322fe317d0.e71e653df055d7eb.9fff6a0a88d43e61 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 4b4d6bda73b3472d.2cf1ac1917f583cb.2b2fe0fa173c1401.82eea05a31b30577 - ab742d07e60625c5 - --VCMPPD_128_0x5(reg) -+VCMPPS_256_0x7(reg) - before - 74bfac47ac001324.0794415f5a63d0d3.1ad0f38101a9c3eb.906c76cd6df06e36 - 391b17851e2d0b40.19097678b692c47c.965ae8730a8caeb4.9c30ec7e6cdd9519 -@@ -47526,12 +47526,12 @@ VCMPPD_128_0x5(reg) - 2836a6b178520762.abacea163fa2db86.a79fd1a2e60878eb.1880682cce983993 - 40a467ff6b7d2d83 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 391b17851e2d0b40.19097678b692c47c.965ae8730a8caeb4.9c30ec7e6cdd9519 - 57d46c2fd91a48c7.5b788411a44ede54.fbdc895acd2781d0.2a48befa2d1244d4 - 2836a6b178520762.abacea163fa2db86.a79fd1a2e60878eb.1880682cce983993 - 40a467ff6b7d2d83 --VCMPPD_128_0x5(mem) -+VCMPPS_256_0x7(mem) - before - 808036611fccdfd0.098dc175976284c0.e3722174a49a773f.f5f2bcb8f2baceb2 - b2e0513d069109a5.5624bae8d4d4fa8b.e196a615ef436dab.402046068ccac0d1 -@@ -47541,11 +47541,11 @@ VCMPPD_128_0x5(mem) - after - 808036611fccdfd0.098dc175976284c0.e3722174a49a773f.f5f2bcb8f2baceb2 - b2e0513d069109a5.5624bae8d4d4fa8b.e196a615ef436dab.402046068ccac0d1 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 605a5c13e0afb89a.a446328c1114c51a.9a288cd4a4d65a49.413b28fedc3168c5 - afc2787fcaa195f3 - --VCMPPD_128_0x5(reg) -+VCMPPS_256_0x7(reg) - before - 8a5358eab69e4e28.930d44e60a20b511.5d68aa944af99035.0f2ee4ca46d7c9d5 - 2f3ac2a93db4cf10.297468e2d7371ac0.f2fbf0fc1071466f.b8c27ab43eba82c3 -@@ -47553,12 +47553,12 @@ VCMPPD_128_0x5(reg) - 483e28d8895d17ac.ef8e5409cc870e79.20a3d299b24b5dea.1ac252139f4fc576 - 8ac78b62401ac794 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 2f3ac2a93db4cf10.297468e2d7371ac0.f2fbf0fc1071466f.b8c27ab43eba82c3 - fbc5b42afa705359.ff5b44f46400a4d4.bf4bfe2fff082172.72afcb7ea888423f - 483e28d8895d17ac.ef8e5409cc870e79.20a3d299b24b5dea.1ac252139f4fc576 - 8ac78b62401ac794 --VCMPPD_128_0x5(mem) -+VCMPPS_256_0x7(mem) - before - 9f8af254a6f603c4.74f31c1f870757b8.d6d8150b2cd916db.705167a6c5c53885 - 35d704d6edee3633.d92e8c6b90fb4f27.900702e8a0017625.0d9fb9c2d503ecec -@@ -47568,11 +47568,11 @@ VCMPPD_128_0x5(mem) - after - 9f8af254a6f603c4.74f31c1f870757b8.d6d8150b2cd916db.705167a6c5c53885 - 35d704d6edee3633.d92e8c6b90fb4f27.900702e8a0017625.0d9fb9c2d503ecec -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 543e153b9162707c.c169ccc330ee55e0.ee3f50e030053023.9b4e85d75af8d2d5 - 4347f7a807c77bad - --VCMPPD_256_0x5(reg) -+VCMPPD_128_0x8(reg) - before - a8101639208aee03.96f00df525f7efaf.fd0195a60006dc82.49e1aad386f8022e - 25f7def443cc6783.c85da0f00ad954d0.e24fc93e4b970a37.e7961f505ff21dd3 -@@ -47580,12 +47580,12 @@ VCMPPD_256_0x5(reg) - d64a5a9d10ff5aaf.6f92835539b0c48e.1a41633fbf554e8d.5c6d50980c281d95 - eb27023c187c7a0c - after -- ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 25f7def443cc6783.c85da0f00ad954d0.e24fc93e4b970a37.e7961f505ff21dd3 - 15464c47091a22d8.c74f48175d125d0c.cda164f8ac2d1dac.a42c2d43d8fe3d3c - d64a5a9d10ff5aaf.6f92835539b0c48e.1a41633fbf554e8d.5c6d50980c281d95 - eb27023c187c7a0c --VCMPPD_256_0x5(mem) -+VCMPPD_128_0x8(mem) - before - 2d24c119170710ca.c34f0661f4074cb4.9bf4cc98bbbe4683.257cc17e219adc85 - fd31071c25d59afe.37a14b0150bf3492.29409fcbfe499f17.4a9e7a236d880141 -@@ -47595,11 +47595,11 @@ VCMPPD_256_0x5(mem) - after - 2d24c119170710ca.c34f0661f4074cb4.9bf4cc98bbbe4683.257cc17e219adc85 - fd31071c25d59afe.37a14b0150bf3492.29409fcbfe499f17.4a9e7a236d880141 -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - bcaa1e46e0667e72.285b9182e16cd48b.d8c4d4b13903c4ca.52c6ee4c359103b3 - ed65a0a8e9c458c2 - --VCMPPD_256_0x5(reg) -+VCMPPD_128_0x8(reg) - before - 121a9e1af7cf3444.62afe544c5434e0b.5c5c8a3c4f7a05fe.b1952e3d694b0941 - 1d32e30cfb40d4e6.07f325182a9104c9.89d90c80a4671cfa.5b800268ca3f1507 -@@ -47607,12 +47607,12 @@ VCMPPD_256_0x5(reg) - 54bb332458834f38.bd6bfdf2e1b60d62.3a7a9c5a7a0eea40.91d3094f915c702f - d6d434e32e9d37e8 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1d32e30cfb40d4e6.07f325182a9104c9.89d90c80a4671cfa.5b800268ca3f1507 - 6af96ceb92a37453.864359ae2a5e5ad7.091f13bb7fbf542c.b151cd2078eba347 - 54bb332458834f38.bd6bfdf2e1b60d62.3a7a9c5a7a0eea40.91d3094f915c702f - d6d434e32e9d37e8 --VCMPPD_256_0x5(mem) -+VCMPPD_128_0x8(mem) - before - 5c1ec9c66dbab6a1.39c43621e86ca240.87378dd06ca3d896.7636a2c731e11ae1 - fe7e44e66ac0a783.745f7050deeaa919.bf738634e633789e.1a9e207041c41fbc -@@ -47622,11 +47622,11 @@ VCMPPD_256_0x5(mem) - after - 5c1ec9c66dbab6a1.39c43621e86ca240.87378dd06ca3d896.7636a2c731e11ae1 - fe7e44e66ac0a783.745f7050deeaa919.bf738634e633789e.1a9e207041c41fbc -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 0ab0dd8a0bb5d179.5b7f7af16fd8c2e8.ee6aa03f196b27dc.0ba67a22d9e79bce - 0fdd4c049b3f8a5e - --VCMPPD_256_0x5(reg) -+VCMPPD_128_0x8(reg) - before - ebf188d124d73ed7.2c1af3e6e8bb83e4.c09b413b415e4c37.9bbdb9be092aad6a - fb2e29f5123af4e6.dac9df2ff2da9729.eb7a3066e9aa7905.28b02a725abbf97c -@@ -47634,12 +47634,12 @@ VCMPPD_256_0x5(reg) - 27528bf38c925674.4e2a2a33ff92d7f3.02b0740f2dc2b0d1.4ea5062e8885cddf - 9f40680d9fd5ce87 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - fb2e29f5123af4e6.dac9df2ff2da9729.eb7a3066e9aa7905.28b02a725abbf97c - 9be02bdd01f4e836.f28a1d4f461ec975.376742de044787ff.6f0f7049252bc43f - 27528bf38c925674.4e2a2a33ff92d7f3.02b0740f2dc2b0d1.4ea5062e8885cddf - 9f40680d9fd5ce87 --VCMPPD_256_0x5(mem) -+VCMPPD_128_0x8(mem) - before - 3faa12d285288464.fbd143a44f9f794c.cc7380c83a427bd0.a69fc06501a63126 - 0bb181695689aba2.73aa515de7a78e69.46319df8123a7238.8182244d1b7f45ab -@@ -47649,11 +47649,11 @@ VCMPPD_256_0x5(mem) - after - 3faa12d285288464.fbd143a44f9f794c.cc7380c83a427bd0.a69fc06501a63126 - 0bb181695689aba2.73aa515de7a78e69.46319df8123a7238.8182244d1b7f45ab -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 92c19bbd2ba73bee.bf955d9305da7d24.a2411ade0b344857.484f217f93421af4 - ecd2b3a22943510f - --VCMPPS_128_0x5(reg) -+VCMPPD_256_0x8(reg) - before - 37774b0675690d0b.07633e53677b1c56.4b3f52e9c21dcf1a.3b29716b644e9f67 - 838ce71613418891.16d0956aff8d5dcd.eb738df6c48b0306.41b77f44cae039b1 -@@ -47661,12 +47661,12 @@ VCMPPS_128_0x5(reg) - 923118f0b835adf2.753f51d0b09df39f.d6a5c2e50518ff6e.05f5ae8a2e9c24a5 - 7a3dc6cf65dfeea6 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 838ce71613418891.16d0956aff8d5dcd.eb738df6c48b0306.41b77f44cae039b1 - 2d5b8240a057ff50.9cd61df00deabc82.fb7b0926a6b05493.90b7bf5559f6d161 - 923118f0b835adf2.753f51d0b09df39f.d6a5c2e50518ff6e.05f5ae8a2e9c24a5 - 7a3dc6cf65dfeea6 --VCMPPS_128_0x5(mem) -+VCMPPD_256_0x8(mem) - before - cc5b851019caeb93.0c5aa690f669d024.7dd8adf501b3be51.da3bb49f7c504042 - d71a663a666ad696.f822278df67fa291.916dad4d1f37dbc3.628adcc0a8e353bc -@@ -47676,11 +47676,11 @@ VCMPPS_128_0x5(mem) - after - cc5b851019caeb93.0c5aa690f669d024.7dd8adf501b3be51.da3bb49f7c504042 - d71a663a666ad696.f822278df67fa291.916dad4d1f37dbc3.628adcc0a8e353bc -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 88af7ef53ef66990.96bef24faf7e45ce.48bb8a432bbaf699.6d82bbe88d4cde51 - a9c46ac67e39cdc3 - --VCMPPS_128_0x5(reg) -+VCMPPD_256_0x8(reg) - before - d9ee3fbc94b17f8c.e61cae5ffffb88de.012b34eb9e7f8ef6.a40c5fb953d16d55 - 584d34356a412e56.6d5aef60cbe487f4.4d665a95c192770a.7b88c812b6862482 -@@ -47688,12 +47688,12 @@ VCMPPS_128_0x5(reg) - b7da745fc7d7769e.667e9adcee930f22.fb793fc00d1b18a4.0a3447199ffb45dc - 79fc559f5cd42663 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 584d34356a412e56.6d5aef60cbe487f4.4d665a95c192770a.7b88c812b6862482 - 842d479c9c7517cd.f937bfe6bcbd20fc.d7bc5fb8b2423cb5.a9fc423871e6d84b - b7da745fc7d7769e.667e9adcee930f22.fb793fc00d1b18a4.0a3447199ffb45dc - 79fc559f5cd42663 --VCMPPS_128_0x5(mem) -+VCMPPD_256_0x8(mem) - before - d420e7b8c57a390a.4fa0b5e987f58675.90fafa2e7e711294.15e9f6196faa4882 - f66c7a4ef6fb38fd.a6ca07a6775a85fd.53785dc98763e37b.8157802f737a08fc -@@ -47703,11 +47703,11 @@ VCMPPS_128_0x5(mem) - after - d420e7b8c57a390a.4fa0b5e987f58675.90fafa2e7e711294.15e9f6196faa4882 - f66c7a4ef6fb38fd.a6ca07a6775a85fd.53785dc98763e37b.8157802f737a08fc -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ffaa8fa61dbcec7a.057ed06a582b3ad2.13aa198576b5e15f.bf61ff42d30e2773 - 4994eb1766eafec8 - --VCMPPS_128_0x5(reg) -+VCMPPD_256_0x8(reg) - before - 94f69a5a0c385468.9d360a3f4c14195c.c49f3f4881ae6978.c9f66a80932c86b2 - fed3097561836700.73197506b277223a.b455ae094ba9767e.8873ad729ae8ea2c -@@ -47715,12 +47715,12 @@ VCMPPS_128_0x5(reg) - 9c2d14e78540afc7.34160ccf958bbc9b.92af81e630341a60.9034fbf0d55cde44 - 920ffd52402de63a - after -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - fed3097561836700.73197506b277223a.b455ae094ba9767e.8873ad729ae8ea2c - e27733d60057713b.5c1f4ce76cf0c540.2feb1b1a51a79d92.2bef5f49a7f4c9f9 - 9c2d14e78540afc7.34160ccf958bbc9b.92af81e630341a60.9034fbf0d55cde44 - 920ffd52402de63a --VCMPPS_128_0x5(mem) -+VCMPPD_256_0x8(mem) - before - 0c4ce25d05729d07.8843a8168dcb5c4d.d6c930a84a54c477.3aecdcd883dd2894 - dcb724fc4037bfd6.0103ebceb483b57c.20033460a65899ff.81ed285ee72d04d9 -@@ -47730,11 +47730,11 @@ VCMPPS_128_0x5(mem) - after - 0c4ce25d05729d07.8843a8168dcb5c4d.d6c930a84a54c477.3aecdcd883dd2894 - dcb724fc4037bfd6.0103ebceb483b57c.20033460a65899ff.81ed285ee72d04d9 -- 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ea46b4a78573322c.0fb47089ccac5b7f.183fcc19c53e99c6.5f6e84d350f31548 - ae868c9a8d81c2c9 - --VCMPPS_256_0x5(reg) -+VCMPPS_128_0x8(reg) - before - 0d9276a44ae62c0d.e002fa8ac802fc0b.5a3da964f63420ac.7ed959f3bf393b5c - d8e03c5e24af91be.9c1d8db1f040209c.a4a08178ae1a8031.fc2bb65ad19e9b4e -@@ -47742,12 +47742,12 @@ VCMPPS_256_0x5(reg) - 226d508e9e9b3719.d29a8f7c61ff6987.a12800fc3a2d03f1.ac26d084acd780f9 - 9667861eacc47e0a - after -- 00000000ffffffff.ffffffff00000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - d8e03c5e24af91be.9c1d8db1f040209c.a4a08178ae1a8031.fc2bb65ad19e9b4e - 6bbadc32b7672b88.f861eb091a3b5b0c.472bf53291e9b8b9.6c015f3c177a73ca - 226d508e9e9b3719.d29a8f7c61ff6987.a12800fc3a2d03f1.ac26d084acd780f9 - 9667861eacc47e0a --VCMPPS_256_0x5(mem) -+VCMPPS_128_0x8(mem) - before - 0790fcf7344a2827.594597dc75d6f11a.0496f5f8e2970638.0ce49e4446729e85 - dc6dadf960773c7d.6c8eaa8ad9a4943a.6b209968b80fed4c.e6abcb745045c520 -@@ -47757,11 +47757,11 @@ VCMPPS_256_0x5(mem) - after - 0790fcf7344a2827.594597dc75d6f11a.0496f5f8e2970638.0ce49e4446729e85 - dc6dadf960773c7d.6c8eaa8ad9a4943a.6b209968b80fed4c.e6abcb745045c520 -- 00000000ffffffff.ffffffff00000000.ffffffffffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1d73b62c11f48c82.96a328b2b62a8881.490c8dd4d4d08c4b.528ac341d0c3a71d - 9e3986b57d86d9d6 - --VCMPPS_256_0x5(reg) -+VCMPPS_128_0x8(reg) - before - c723c8c299078748.42330535cf5b4189.65068b0568fa5001.7707d4a85331bb8f - 2a9585d4c0d0ec1d.3ad88017a09a5079.800aab67158ef34f.4ac0492097a326e5 -@@ -47769,12 +47769,12 @@ VCMPPS_256_0x5(reg) - 0f3b61b79c70cfa2.14fcea1bedc966c3.09251309d62fb403.4f9caeace0e79a7a - 3a5696991cd21d10 - after -- ffffffff00000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2a9585d4c0d0ec1d.3ad88017a09a5079.800aab67158ef34f.4ac0492097a326e5 - 24d9ba578d6f4602.e22ca3c0a1ba727e.43fb85455c70ab17.9e036828bd31877a - 0f3b61b79c70cfa2.14fcea1bedc966c3.09251309d62fb403.4f9caeace0e79a7a - 3a5696991cd21d10 --VCMPPS_256_0x5(mem) -+VCMPPS_128_0x8(mem) - before - 39fe9cd98efdca68.480978618a5dc3aa.ad14d114a1d2e675.30d4532022544cc2 - 29613c5a51745daf.2b8efabff3c460c5.8940d597d8e2afbf.135440f7d96dadfe -@@ -47784,11 +47784,11 @@ VCMPPS_256_0x5(mem) - after - 39fe9cd98efdca68.480978618a5dc3aa.ad14d114a1d2e675.30d4532022544cc2 - 29613c5a51745daf.2b8efabff3c460c5.8940d597d8e2afbf.135440f7d96dadfe -- 00000000ffffffff.0000000000000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 4c823ccb3c7729ba.60eb304ba32f80e7.7a0221eb40440bce.7cf61291fea9bc9f - bbb0ef2ca3e4e35c - --VCMPPS_256_0x5(reg) -+VCMPPS_128_0x8(reg) - before - 256b68372542c247.37da93949c1cd9d4.695cdc51234a7c45.47326295aaaf16ea - 18737c1d1f4f980b.821c744dbe3c608e.8cb4e3bc8d0e0f67.c7a5ae7807505a4f -@@ -47796,12 +47796,12 @@ VCMPPS_256_0x5(reg) - 05995e2aeca915d0.ad8cc540b423e18d.9049f37191c3eda5.4f875c9d0b657ca2 - 108db5b7ebf1d1e9 - after -- ffffffff00000000.0000000000000000.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 18737c1d1f4f980b.821c744dbe3c608e.8cb4e3bc8d0e0f67.c7a5ae7807505a4f - ee13244a2d98a054.0b135be2bce57912.253f41f87e0876f8.d628838273339228 - 05995e2aeca915d0.ad8cc540b423e18d.9049f37191c3eda5.4f875c9d0b657ca2 - 108db5b7ebf1d1e9 --VCMPPS_256_0x5(mem) -+VCMPPS_128_0x8(mem) - before - f4080bbb2ee35028.b74f2429f70c3428.44532d51c200542a.291df49362cbaf1a - d7c2d995f048b48b.618274b4eb4f380b.ac340f02018a8e16.4b093fca8fadf902 -@@ -47811,11 +47811,11 @@ VCMPPS_256_0x5(mem) - after - f4080bbb2ee35028.b74f2429f70c3428.44532d51c200542a.291df49362cbaf1a - d7c2d995f048b48b.618274b4eb4f380b.ac340f02018a8e16.4b093fca8fadf902 -- ffffffff00000000.ffffffffffffffff.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 0926cd7b63981871.0e8fa019fca3e31d.5e7332f584d3458a.9f54a928662d15dd - 884bbf264ae35e28 - --VCMPPD_128_0x6(reg) -+VCMPPS_256_0x8(reg) - before - 6b8a0feaf8a22096.1168eb5f4c9c924a.c80174cd52cc00a4.616a6b0fffaa3a6a - a45c97df0cf694d5.881a72c92442e0f8.eb20c1bbff05f465.a5aa0e791c5ee748 -@@ -47828,7 +47828,7 @@ VCMPPD_128_0x6(reg) - 8e0c5371236cf98e.4907dca60896bfa7.d1378351a2d8f90b.0500971ef7f90651 - 87e73d0bd98f8970.32fda7e013a5eb82.d794b6fad4d34c43.5f3882ecab8954b0 - 8d1e4cce541a8c93 --VCMPPD_128_0x6(mem) -+VCMPPS_256_0x8(mem) - before - 6d7e70b10fb76c23.ea39531bc8ec8125.1dc64f65627a1fb6.59815722338228b9 - d9236a7ff76cae8e.124e900c8f0e1d59.e82f4e1f1021196f.b44b60355b6fcb18 -@@ -47842,7 +47842,7 @@ VCMPPD_128_0x6(mem) - c970d08fc14f4aa5.25f16f420fd22ff1.8a1046e7fb17491e.60a5a0cc74395143 - 6acecd299d2dac67 - --VCMPPD_128_0x6(reg) -+VCMPPS_256_0x8(reg) - before - bc035420fe90bd25.05af35aad9951ca8.c816095e018b1eac.192136cc6f7ef86c - b291301e34eec028.3d63606090244136.a12ebb0c393ba197.f8026e97b3e75cef -@@ -47855,7 +47855,7 @@ VCMPPD_128_0x6(reg) - a8c45d90dbd4f11d.4e5acd9fff06747a.0b8580b6546bf35e.017e6b34e25e31d2 - fae8d7e18ecd8baf.155ff952444a73a1.636754caeda951ac.1162a78f19ef3242 - 057aa09574a71d6b --VCMPPD_128_0x6(mem) -+VCMPPS_256_0x8(mem) - before - b792d2300e91ac78.04499a7ce965cb8b.6c3d5e657bf9f8d6.062034b2a081f72d - 0475b74e03ba9b96.2132a3cf8929ed5d.30c17ac4bf21c046.4efc1adc0b7d208f -@@ -47865,11 +47865,11 @@ VCMPPD_128_0x6(mem) - after - b792d2300e91ac78.04499a7ce965cb8b.6c3d5e657bf9f8d6.062034b2a081f72d - 0475b74e03ba9b96.2132a3cf8929ed5d.30c17ac4bf21c046.4efc1adc0b7d208f -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - dfd08ebf70f68db3.09d0744a0663c691.70ebc416e00a0786.414ceda37217eea0 - a358d218a8cb0ba8 - --VCMPPD_128_0x6(reg) -+VCMPPS_256_0x8(reg) - before - 1cb7ad7e04d59b40.26df79eb2021060b.8b1c354a1bf1f54b.a329ebe1f4e2ffae - 06b57c4222c1db13.77ea07489bbbd123.91212ab2e5daf6ab.b33db7a986642ac0 -@@ -47882,7 +47882,7 @@ VCMPPD_128_0x6(reg) - be9d3ace9f1907ce.afbdb5c4fecfa828.762b51ecffab045c.7cf2a658b29943e9 - a0bde390166b5b1c.aa24004b646a4845.9886a56506ee5c0c.da1533db938f0755 - a973db1f4551322f --VCMPPD_128_0x6(mem) -+VCMPPS_256_0x8(mem) - before - c5d6180fe5ec7fa4.085f73f2244312aa.44eb63c7e9976da7.527d228a95323a64 - 0a0a68978e6bacdf.52d1e762652b6924.59dd5a25ab62d27a.ff5dc5c54800d913 -@@ -47892,11 +47892,11 @@ VCMPPD_128_0x6(mem) - after - c5d6180fe5ec7fa4.085f73f2244312aa.44eb63c7e9976da7.527d228a95323a64 - 0a0a68978e6bacdf.52d1e762652b6924.59dd5a25ab62d27a.ff5dc5c54800d913 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7f1a2e1e6d46905a.fc506818ed61e68a.6475f5384f044f21.a6096a328d6f4e20 - 586b643b56289ad7 - --VCMPPD_256_0x6(reg) -+VCMPPD_128_0x9(reg) - before - 6de7730bb39c9994.678c9df7dbbac1f1.14f56d376cc684ce.12b391c46bf2de4d - 43c8940e41578502.e8000d17c242c0ff.7e9a46138f6cb1ae.aa4db1e332af9f9a -@@ -47904,12 +47904,12 @@ VCMPPD_256_0x6(reg) - 9ee7f95d5fd416a3.241ee5df6dc01a2e.b81060b32aacacf1.0dc46e8632c3a146 - 8f3902e3a3335cfd - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 43c8940e41578502.e8000d17c242c0ff.7e9a46138f6cb1ae.aa4db1e332af9f9a - 3459c1b09ce69bce.de42fc6b3feb49af.9689ed18efdfabd6.0a0fd180c0464b34 - 9ee7f95d5fd416a3.241ee5df6dc01a2e.b81060b32aacacf1.0dc46e8632c3a146 - 8f3902e3a3335cfd --VCMPPD_256_0x6(mem) -+VCMPPD_128_0x9(mem) - before - 6c3b0b8230a13784.dbbe358226ad342e.9860456068cdeda8.40799a4edc5ef1ab - 7f94054ff419ee08.482a72898efe2f1b.15d396d84e1f7f48.8a119856a082b6b2 -@@ -47919,11 +47919,11 @@ VCMPPD_256_0x6(mem) - after - 6c3b0b8230a13784.dbbe358226ad342e.9860456068cdeda8.40799a4edc5ef1ab - 7f94054ff419ee08.482a72898efe2f1b.15d396d84e1f7f48.8a119856a082b6b2 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - bc7db7249359e4b6.23f1e1f1af35aec9.9980006244bfcfac.d4fdcc5ed04dae51 - 8beafb36730c5a42 - --VCMPPD_256_0x6(reg) -+VCMPPD_128_0x9(reg) - before - 7535dd2b996d762f.9ca66903a6389a37.48e30a2aa034aae3.5951104b8e2605c8 - ed2c6fa9defb3dc4.2456fbc160521d66.0d9a24f6a2da740e.918402db3101eaba -@@ -47931,12 +47931,12 @@ VCMPPD_256_0x6(reg) - f6498ff032d0bf93.987eb0863b657978.e8871df7474c6149.dd407ea6f344b0d3 - a960ffb74ac40951 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - ed2c6fa9defb3dc4.2456fbc160521d66.0d9a24f6a2da740e.918402db3101eaba - 4e19ab1cdc43ecab.2e5aea48deb2286c.cf622cc150b348f6.1fe55301495d3aaf - f6498ff032d0bf93.987eb0863b657978.e8871df7474c6149.dd407ea6f344b0d3 - a960ffb74ac40951 --VCMPPD_256_0x6(mem) -+VCMPPD_128_0x9(mem) - before - 5d1252206be90156.400716917a2ef126.3c8ecb669475c9b4.b555f3042230fcb0 - d723f4ce71be530e.87a13d6b50e9bf11.f856b6d404f0d74d.9218aa547deb55da -@@ -47946,11 +47946,11 @@ VCMPPD_256_0x6(mem) - after - 5d1252206be90156.400716917a2ef126.3c8ecb669475c9b4.b555f3042230fcb0 - d723f4ce71be530e.87a13d6b50e9bf11.f856b6d404f0d74d.9218aa547deb55da -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 898c11a59ea8f844.8095577b18a91f9d.243dec0a9a561844.ecacac6e26183021 - 2115ef0faba22998 - --VCMPPD_256_0x6(reg) -+VCMPPD_128_0x9(reg) - before - d6a303a42032d17f.797e86a6fdd6c31c.ea87438842c42896.4cf42faaf958c4fa - 67a2e49822566385.9efe389cb1e4d855.c184be7f6a6dbd98.fb933388dff41cbd -@@ -47958,12 +47958,12 @@ VCMPPD_256_0x6(reg) - 8d22fe4c3b893298.f8d647148ad2d3a1.2ace52d826977a60.5fb96bafb12cc419 - cbd898cfd5e08a0a - after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 67a2e49822566385.9efe389cb1e4d855.c184be7f6a6dbd98.fb933388dff41cbd - 305e8f564c9a1a54.d5d7a572d7dff41e.63d7c4cb2c2f1a4c.0ee673906837deb9 - 8d22fe4c3b893298.f8d647148ad2d3a1.2ace52d826977a60.5fb96bafb12cc419 - cbd898cfd5e08a0a --VCMPPD_256_0x6(mem) -+VCMPPD_128_0x9(mem) - before - 2e0e74def15eedb8.da3c2fe58bafe9fe.e4c79c6ee6c9300b.73b46311f1301a80 - 65297dc620b2aa4e.72f61d8dd6987932.7576206c08d0c987.9bd4f3e42b863658 -@@ -47973,11 +47973,11 @@ VCMPPD_256_0x6(mem) - after - 2e0e74def15eedb8.da3c2fe58bafe9fe.e4c79c6ee6c9300b.73b46311f1301a80 - 65297dc620b2aa4e.72f61d8dd6987932.7576206c08d0c987.9bd4f3e42b863658 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - ba3904d6290d1ce3.f87d21bad3e517b2.f73ea1050d409967.f3f581065b9bd1dd - dd8e762c8871c8e4 - --VCMPPS_128_0x6(reg) -+VCMPPD_256_0x9(reg) - before - 1492db9b94352b52.91c779d53b2d4a3b.9de22f18bc619c57.9fee977727c14a23 - f54cacc01a7235d3.ab690b5ed052c12c.fd17ea3412d0eb79.5c8cab3e778225a2 -@@ -47985,12 +47985,12 @@ VCMPPS_128_0x6(reg) - 25167ed8078831c1.181873bef5e07986.6325585a73b8d7e6.85c31e7728f54b97 - a9f274c2c0bf0e65 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - f54cacc01a7235d3.ab690b5ed052c12c.fd17ea3412d0eb79.5c8cab3e778225a2 - dc0ae305b7b52314.e4ea355d058a3de1.766a4f7c70be40c5.0ae55944198fe60f - 25167ed8078831c1.181873bef5e07986.6325585a73b8d7e6.85c31e7728f54b97 - a9f274c2c0bf0e65 --VCMPPS_128_0x6(mem) -+VCMPPD_256_0x9(mem) - before - 5240d911fef9eca6.2cbd77a4a4799b85.23bd416ebc613248.1f95033cb648eb89 - 5c78c950fdb0a185.4d4bccd52d149c0d.e1a61c5777182453.08064b8dd5fdb959 -@@ -48000,11 +48000,11 @@ VCMPPS_128_0x6(mem) - after - 5240d911fef9eca6.2cbd77a4a4799b85.23bd416ebc613248.1f95033cb648eb89 - 5c78c950fdb0a185.4d4bccd52d149c0d.e1a61c5777182453.08064b8dd5fdb959 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 02d4364eb0c27ed0.4d4b78166d755617.e674e6883859a2f2.cd1ba22c1aff7233 - 6156aa527766d595 - --VCMPPS_128_0x6(reg) -+VCMPPD_256_0x9(reg) - before - 92c33f97201fe2d3.5791ace59b361f94.e456c7fe5c5387f2.e4f0cda875fba5df - baac5d67b2b8d59c.7d689c1cb95687a6.057761fba60b3f40.06e1b1b21603d2c4 -@@ -48012,12 +48012,12 @@ VCMPPS_128_0x6(reg) - 63252459ffb85b7a.ab93db1bf7cb9a65.552e66e5ba3737e7.234d5c34f2779628 - d5611c8466faa4ff - after -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - baac5d67b2b8d59c.7d689c1cb95687a6.057761fba60b3f40.06e1b1b21603d2c4 - 365e002fc8bce99a.502582e0232e7132.0cfb4279e728bbad.27110c92367ee4ce - 63252459ffb85b7a.ab93db1bf7cb9a65.552e66e5ba3737e7.234d5c34f2779628 - d5611c8466faa4ff --VCMPPS_128_0x6(mem) -+VCMPPD_256_0x9(mem) - before - 1b19c96eac14cc7f.9b4dc653f33767e7.6c8021bb5138bd6b.3c5ccaa9bcc2ee98 - d041dddee3d0c8d3.3b21e1873ec5488e.6eb6d2ab4c81986f.1cd1693388581d6c -@@ -48027,11 +48027,11 @@ VCMPPS_128_0x6(mem) - after - 1b19c96eac14cc7f.9b4dc653f33767e7.6c8021bb5138bd6b.3c5ccaa9bcc2ee98 - d041dddee3d0c8d3.3b21e1873ec5488e.6eb6d2ab4c81986f.1cd1693388581d6c -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - f6102f018d5f2fa9.240172524f407c38.a430632b96d96124.3cbf4845efced230 - 33d080a6c2c7d178 - --VCMPPS_128_0x6(reg) -+VCMPPD_256_0x9(reg) - before - 9358e47cd0fa3792.1f4f648c3a4a1183.24a4e1c04c444794.910c3a931effc72c - baa36f33b5f2402d.282ef24d4608b9e1.fc24b9191288d7d9.2e626cfbb632d5e3 -@@ -48039,12 +48039,12 @@ VCMPPS_128_0x6(reg) - c9b1eaf471612f91.46fc0520ed2a45dc.a4eb943c67fe39d0.ecaacf7b8decd30c - c436f76c028c3dd6 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - baa36f33b5f2402d.282ef24d4608b9e1.fc24b9191288d7d9.2e626cfbb632d5e3 - 03fd1d370c3b2af3.eb79532fcea3e0f0.08cdf6c93c9769b4.59fd744f7d7d4574 - c9b1eaf471612f91.46fc0520ed2a45dc.a4eb943c67fe39d0.ecaacf7b8decd30c - c436f76c028c3dd6 --VCMPPS_128_0x6(mem) -+VCMPPD_256_0x9(mem) - before - be6b6a0cf9683dff.6a0dd3d781f18cb2.1382830bbfa6a2d0.2cc98fde2e4783da - b415a3498d8d90b3.405bd24ad7777c03.30d94adc6125b4f9.fcb5e41c2d00827e -@@ -48054,11 +48054,11 @@ VCMPPS_128_0x6(mem) - after - be6b6a0cf9683dff.6a0dd3d781f18cb2.1382830bbfa6a2d0.2cc98fde2e4783da - b415a3498d8d90b3.405bd24ad7777c03.30d94adc6125b4f9.fcb5e41c2d00827e -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - 08fd5746fedf1e6a.ff000894c79109e4.c5259fe08459e699.e4e2891846f19142 - b4bcd1ae96401aba - --VCMPPS_256_0x6(reg) -+VCMPPS_128_0x9(reg) - before - 3cd26390902e487c.1dd1cbdf1224d1c6.9fef3543983e1ccb.f7b326ec3c277f67 - d8723929ce485834.9f4bf5c435e2c75c.e6006a332011b492.e741e58d3427bc1b -@@ -48066,12 +48066,12 @@ VCMPPS_256_0x6(reg) - bc7ca730872e0c34.5b615b2211f76ae7.d5bcd986c4565e70.748cfc4252ef13df - cae14c2eb0cea748 - after -- ffffffffffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - d8723929ce485834.9f4bf5c435e2c75c.e6006a332011b492.e741e58d3427bc1b - e4e651e5ec19858d.6b3751e18024bb58.2e81a2d0fb950be5.729a59b1876659de - bc7ca730872e0c34.5b615b2211f76ae7.d5bcd986c4565e70.748cfc4252ef13df - cae14c2eb0cea748 --VCMPPS_256_0x6(mem) -+VCMPPS_128_0x9(mem) - before - 4e66c460be10ce45.bb7e35763a1229d4.4c958f7304669035.35fe0bc118e1e8de - dde7e1c497c04704.3f39f923a251181a.1a9f6ac1747de96e.ab9334ed92c1e7db -@@ -48081,11 +48081,11 @@ VCMPPS_256_0x6(mem) - after - 4e66c460be10ce45.bb7e35763a1229d4.4c958f7304669035.35fe0bc118e1e8de - dde7e1c497c04704.3f39f923a251181a.1a9f6ac1747de96e.ab9334ed92c1e7db -- 00000000ffffffff.ffffffff00000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 8c0df6d21c9a1a72.43090f63ff115b47.bd6302003cd4224e.4ae65dc969b12f35 - 2a3c5450fed9f0ea - --VCMPPS_256_0x6(reg) -+VCMPPS_128_0x9(reg) - before - 901433792a8715de.644ae75400dded7a.7ab75bce2caa2685.4ab7b8c9cc2d7b4e - d8bbf4ae8945dabe.b7b26cb81fbf00f2.a64dcb4f7dcfb41a.2410033f4a5df6e9 -@@ -48093,12 +48093,12 @@ VCMPPS_256_0x6(reg) - 7ea611f14d2733f0.3e3623d77f8cd9e5.49640c48feea04f3.2f034ddf7e78469f - 183643e16d799111 - after -- 00000000ffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - d8bbf4ae8945dabe.b7b26cb81fbf00f2.a64dcb4f7dcfb41a.2410033f4a5df6e9 - 5e7d955db5a17b35.611201ea954a1008.21185d548f0b3faf.273a614dd272514b - 7ea611f14d2733f0.3e3623d77f8cd9e5.49640c48feea04f3.2f034ddf7e78469f - 183643e16d799111 --VCMPPS_256_0x6(mem) -+VCMPPS_128_0x9(mem) - before - be9ebf3fb883f0ce.948264d6ea613f9a.2aea4d69f99016b8.797dd49765f93f90 - fd083ee57da11d02.fc5d8b782adedbe0.01fafb8e1e6385ab.0cafb1ad60c32b33 -@@ -48108,11 +48108,11 @@ VCMPPS_256_0x6(mem) - after - be9ebf3fb883f0ce.948264d6ea613f9a.2aea4d69f99016b8.797dd49765f93f90 - fd083ee57da11d02.fc5d8b782adedbe0.01fafb8e1e6385ab.0cafb1ad60c32b33 -- 00000000ffffffff.00000000ffffffff.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - b51232bae44bd37d.323e41a302cab2ef.df5dd43edaa3e3a2.cf8d9cde85b90939 - b6d1a1d1e6fc73f4 - --VCMPPS_256_0x6(reg) -+VCMPPS_128_0x9(reg) - before - 725eab3b4b2c7e65.e74a9fc0beefd41d.b8ddc905d252650f.9f49f6a0aa294cff - 5d80b68951d26738.22b3ffbf81d694e3.00ab15d3b44b977c.bac08d4594add52c -@@ -48120,12 +48120,12 @@ VCMPPS_256_0x6(reg) - 34b2c17daeb6c2b2.224c855433a34093.4504e56720c26ce7.708208062de039a9 - c464e3f912a78c50 - after -- ffffffffffffffff.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 5d80b68951d26738.22b3ffbf81d694e3.00ab15d3b44b977c.bac08d4594add52c - d483bf25937c6a18.421bcda1490ecffc.65f41f7a454286e0.0b8f1419b73b3a56 - 34b2c17daeb6c2b2.224c855433a34093.4504e56720c26ce7.708208062de039a9 - c464e3f912a78c50 --VCMPPS_256_0x6(mem) -+VCMPPS_128_0x9(mem) - before - e20323de829df078.d75bb8fc3d0aadb2.a013a3c35b9fa4d5.fb276205e158863e - a82943a29bcc214c.1ac8a00edd0765c3.973ca3dadc10b7ee.e3a892c0258f0f91 -@@ -48135,11 +48135,11 @@ VCMPPS_256_0x6(mem) - after - e20323de829df078.d75bb8fc3d0aadb2.a013a3c35b9fa4d5.fb276205e158863e - a82943a29bcc214c.1ac8a00edd0765c3.973ca3dadc10b7ee.e3a892c0258f0f91 -- ffffffff00000000.ffffffff00000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 983d1473310bd9aa.f021359abd252ec9.5fe43bb05a80d952.b8f7fc3ca41161d9 - 5e5d2ed61873a227 - --VCMPPD_128_0x7(reg) -+VCMPPS_256_0x9(reg) - before - a552033e7da84220.7ac3bc59e832d78c.3ca5d9ee365fb717.e8faca47909660f7 - eb2178de72397f71.740135cdb6c393cb.971d5e843070fd27.5ba22b368e508622 -@@ -48147,12 +48147,12 @@ VCMPPD_128_0x7(reg) - e0812e7a76a4bac9.1cd4880f0954300e.ed1dfc291549b43a.6ad954cd58e29dbb - c0ff144d5cd10782 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.0000000000000000.ffffffffffffffff.00000000ffffffff - eb2178de72397f71.740135cdb6c393cb.971d5e843070fd27.5ba22b368e508622 - 8a18872391b492c5.60c3fabbb8cac792.5ed7c0c946e53ea4.92a9db6a73bb06ff - e0812e7a76a4bac9.1cd4880f0954300e.ed1dfc291549b43a.6ad954cd58e29dbb - c0ff144d5cd10782 --VCMPPD_128_0x7(mem) -+VCMPPS_256_0x9(mem) - before - 6ee696d49895007f.47a9684dbd963128.820159b5c56c8a6b.a03d0d1138289c96 - 515c57502a3943df.1ddc310a0415348f.6f17eb99091f90d4.d381efec4b0f3264 -@@ -48162,11 +48162,11 @@ VCMPPD_128_0x7(mem) - after - 6ee696d49895007f.47a9684dbd963128.820159b5c56c8a6b.a03d0d1138289c96 - 515c57502a3943df.1ddc310a0415348f.6f17eb99091f90d4.d381efec4b0f3264 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffff00000000.0000000000000000.ffffffff00000000 - 272082d4bf539a76.829361eefbebce24.4f283fcc9783947c.29a7172ab3235605 - 0322556640685d2f - --VCMPPD_128_0x7(reg) -+VCMPPS_256_0x9(reg) - before - cef154452de4017b.d107e5b4fae02506.c9aec0eee55adcaa.f9bdfaf21a4c0813 - e561103317238095.20ac7638fa7eeca8.ee049e873d8666e8.9a69640793e01966 -@@ -48174,12 +48174,12 @@ VCMPPD_128_0x7(reg) - 6754b0ec501cf9e1.1e6014ddba1a18d4.4392c834a847dc39.323a3aaadd9702f3 - e0f69d11e6d25284 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.00000000ffffffff.ffffffff00000000.ffffffffffffffff - e561103317238095.20ac7638fa7eeca8.ee049e873d8666e8.9a69640793e01966 - a4bf859c99b21428.f1dbb24cdb37a989.4ee2f725a0fca789.0ffafbf6214a84a2 - 6754b0ec501cf9e1.1e6014ddba1a18d4.4392c834a847dc39.323a3aaadd9702f3 - e0f69d11e6d25284 --VCMPPD_128_0x7(mem) -+VCMPPS_256_0x9(mem) - before - f5faa11655072e82.896f8c8fd7ee6d6c.840617d5b330f7b6.2a610c21f4f342a6 - 4d12c1a548425318.685b15f2cbb3aa74.ff9b3a22e187005b.5f9abf561e8d1279 -@@ -48189,11 +48189,11 @@ VCMPPD_128_0x7(mem) - after - f5faa11655072e82.896f8c8fd7ee6d6c.840617d5b330f7b6.2a610c21f4f342a6 - 4d12c1a548425318.685b15f2cbb3aa74.ff9b3a22e187005b.5f9abf561e8d1279 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 00000000ffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - 36ad451229fd67bf.c9d51ea4684671ad.a4bdc8674d26829c.247e624c7db8e708 - 6bc04be5ea62631a - --VCMPPD_128_0x7(reg) -+VCMPPS_256_0x9(reg) - before - 709e9376a6293b45.7fc8a1c74f93ce27.04fb97cc492d7336.86e22d38c3867390 - 8f61366d4c9aaa32.7b270ab668606ed8.6a22ad6206382fec.ed26a00ddf567ff7 -@@ -48201,12 +48201,12 @@ VCMPPD_128_0x7(reg) - 8bce7d3ac8a64009.fce1f0f4e4cd48c3.2ba2a08d87e6c592.ba37a1737778d7cd - d79c27dc2be19b94 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.00000000ffffffff.ffffffffffffffff - 8f61366d4c9aaa32.7b270ab668606ed8.6a22ad6206382fec.ed26a00ddf567ff7 - 24583035793fed90.0696fbcc907002fd.59965cd43cf1e17c.b5549dd2bca362fd - 8bce7d3ac8a64009.fce1f0f4e4cd48c3.2ba2a08d87e6c592.ba37a1737778d7cd - d79c27dc2be19b94 --VCMPPD_128_0x7(mem) -+VCMPPS_256_0x9(mem) - before - ea4faaf9f5eb6a7d.200e1ae8d65bde49.38d365198085f955.3e9476f982a216d9 - ce1ca8b7f0a1ffb5.3f6602ac3ee904fe.983ad6297ea4d4e1.ecb6d985c9b211fe -@@ -48216,11 +48216,11 @@ VCMPPD_128_0x7(mem) - after - ea4faaf9f5eb6a7d.200e1ae8d65bde49.38d365198085f955.3e9476f982a216d9 - ce1ca8b7f0a1ffb5.3f6602ac3ee904fe.983ad6297ea4d4e1.ecb6d985c9b211fe -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 783303c2eb426fc1.8a89a3218ec0d871.31929eb71743f491.8dbe36a8adfbf491 - 373b2919824d5457 - --VCMPPD_256_0x7(reg) -+VCMPPD_128_0xA(reg) - before - ee18985813224daa.f71658e72245c0ed.6fed55acad22fd88.211cec0de8ddb00e - 0ca381d3fd061d37.b742175dfb24c917.4e9742fb978d9bc2.a54a27fd8d0c8633 -@@ -48228,12 +48228,12 @@ VCMPPD_256_0x7(reg) - f0efaf294a2d2dad.69a8c4e902a8ee17.6af1bd9a3bb02c52.d5c1505cc15f6b28 - 3aa337a28899f34f - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 0ca381d3fd061d37.b742175dfb24c917.4e9742fb978d9bc2.a54a27fd8d0c8633 - ee26dff5db86fea9.9384bc0f92ec446c.83d5667ce88eebcc.98e8c97421de302d - f0efaf294a2d2dad.69a8c4e902a8ee17.6af1bd9a3bb02c52.d5c1505cc15f6b28 - 3aa337a28899f34f --VCMPPD_256_0x7(mem) -+VCMPPD_128_0xA(mem) - before - a258fa33929b83cf.6f48ebdde587e5ef.147aa9d767648245.5e3843c12c7f98ff - e8ad16fafd6ed9d4.c57e917c4921641a.6fc6e9c5de2dbe22.bdf6f55d58876c80 -@@ -48243,11 +48243,11 @@ VCMPPD_256_0x7(mem) - after - a258fa33929b83cf.6f48ebdde587e5ef.147aa9d767648245.5e3843c12c7f98ff - e8ad16fafd6ed9d4.c57e917c4921641a.6fc6e9c5de2dbe22.bdf6f55d58876c80 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 826745d95fbcc11a.69b0082cd942a2dd.a9fa675170141897.2807caa4cf753bad - edf2e5275371aeb1 - --VCMPPD_256_0x7(reg) -+VCMPPD_128_0xA(reg) - before - 8b831ccf80d77938.8d6351ca904eccb5.6f45d2143fe2d9cd.407c9ec8c34ab088 - 60076a09f532d8ef.e830a6a190e38c84.bde6f497dcf1c657.f7a71fee98bcded7 -@@ -48255,12 +48255,12 @@ VCMPPD_256_0x7(reg) - 1b183bdf21f9409b.f96817b26e441a6f.a17f351f308eb2e7.392aeffc3685ee41 - 7b1b36ba37f449b4 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 60076a09f532d8ef.e830a6a190e38c84.bde6f497dcf1c657.f7a71fee98bcded7 - c6cacb3f4b0f0681.6d98be4a7b86bdb3.afe06c224efca526.ab4866b10a765fb0 - 1b183bdf21f9409b.f96817b26e441a6f.a17f351f308eb2e7.392aeffc3685ee41 - 7b1b36ba37f449b4 --VCMPPD_256_0x7(mem) -+VCMPPD_128_0xA(mem) - before - 4ee5b8d92ad02a35.b93db654107cc2e9.696c2cc3852861e4.ef0f4bfc1f332845 - 8f55ef442a234df1.fd85390ab625c716.9770796ada3e4c3d.f5dcab24b77744ed -@@ -48270,11 +48270,11 @@ VCMPPD_256_0x7(mem) - after - 4ee5b8d92ad02a35.b93db654107cc2e9.696c2cc3852861e4.ef0f4bfc1f332845 - 8f55ef442a234df1.fd85390ab625c716.9770796ada3e4c3d.f5dcab24b77744ed -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - c65772aec2644dc9.e8ad44e896164dc0.a0a7ac2bb531ff4d.995c36054f0e5eca - eea759968879d356 - --VCMPPD_256_0x7(reg) -+VCMPPD_128_0xA(reg) - before - 6c5fb522d9b2dedd.7581b4869369a13d.4625c4ea07774694.34728a1d7126415c - 6ed04715df48bb09.01819d59e116289b.bbf03cdc9f2db2f7.f66e9055dd7e1600 -@@ -48282,12 +48282,12 @@ VCMPPD_256_0x7(reg) - 6d0dfae177b4d901.203251a4659abdc8.55af0043b3c9d61d.77230547328470b5 - ee766cd9554b6c1e - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 6ed04715df48bb09.01819d59e116289b.bbf03cdc9f2db2f7.f66e9055dd7e1600 - 50460adb35c4a586.4622a814c8789d10.a15aa62bfac4ce97.c3653abf14443d64 - 6d0dfae177b4d901.203251a4659abdc8.55af0043b3c9d61d.77230547328470b5 - ee766cd9554b6c1e --VCMPPD_256_0x7(mem) -+VCMPPD_128_0xA(mem) - before - 0429ea6196a4edcc.2370139143a39326.6b7b14f3d48844ee.333a459166c70638 - 9507fecb139baeeb.cdbc5159321e0ea0.03ca6eef304fedaf.9748727fb04a9992 -@@ -48297,11 +48297,11 @@ VCMPPD_256_0x7(mem) - after - 0429ea6196a4edcc.2370139143a39326.6b7b14f3d48844ee.333a459166c70638 - 9507fecb139baeeb.cdbc5159321e0ea0.03ca6eef304fedaf.9748727fb04a9992 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 9877d1f63094e32a.6c402eddefe53b46.8aa9d49b209599b0.621e70f07711dab5 - 807d3a4a2c6d01d5 - --VCMPPS_128_0x7(reg) -+VCMPPD_256_0xA(reg) - before - 948edcf5e87d7be6.c2a1888f07afcea2.190fc472f44963c9.31d2d823ec2c1249 - fa9f505d46cf8492.d727c5b98a97eb3b.2bf670ce8d693e52.9530620716cc9f2c -@@ -48309,12 +48309,12 @@ VCMPPS_128_0x7(reg) - 2ceda3145a68376d.3176b9750304a57f.ea40f68bee0bf824.04befa93f155df82 - c786ff14dc560c4d - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - fa9f505d46cf8492.d727c5b98a97eb3b.2bf670ce8d693e52.9530620716cc9f2c - 0efb94eee3ef5a85.b3d50162d55af321.fc432c5d57d1068c.9290ef33b981fa86 - 2ceda3145a68376d.3176b9750304a57f.ea40f68bee0bf824.04befa93f155df82 - c786ff14dc560c4d --VCMPPS_128_0x7(mem) -+VCMPPD_256_0xA(mem) - before - b6b47aa093903b12.afc2793b48c658f3.2fd86ade309fbc82.4f3ac9c5eca54fc5 - af13e825340d29ff.f5c612d04895f9c6.88c58f897939f355.887da175f02b491c -@@ -48324,11 +48324,11 @@ VCMPPS_128_0x7(mem) - after - b6b47aa093903b12.afc2793b48c658f3.2fd86ade309fbc82.4f3ac9c5eca54fc5 - af13e825340d29ff.f5c612d04895f9c6.88c58f897939f355.887da175f02b491c -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 2b9889c6a30631fb.378b7ef0efb8a9fd.ba732555cd98b31d.e70e51eb7427119b - c4f421892db7571b - --VCMPPS_128_0x7(reg) -+VCMPPD_256_0xA(reg) - before - e552e64d5a612f01.6755b6bba899c362.ebe34953cf2431ba.4ccb8f4e1075b46a - a7759da597b3d5f8.1c74c45807a004a1.d09ac8d431312973.a8e05d3adf81c638 -@@ -48336,12 +48336,12 @@ VCMPPS_128_0x7(reg) - 793bcdbeb47d7aca.6008773a423b8252.a256ceddec5e5787.336c15978f530c05 - 187cf7e0a831b95d - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - a7759da597b3d5f8.1c74c45807a004a1.d09ac8d431312973.a8e05d3adf81c638 - 64aa40fc823985ac.25c13189dc27b0e2.44fdf5deb16bccd3.ac7c0b0355c7a5b2 - 793bcdbeb47d7aca.6008773a423b8252.a256ceddec5e5787.336c15978f530c05 - 187cf7e0a831b95d --VCMPPS_128_0x7(mem) -+VCMPPD_256_0xA(mem) - before - 39782eccbc6e65e5.42743f57cb0df1fe.a714145755e7371c.45f24e3d7d97063b - 702c3546e815cfca.1ba39233637526f4.d8b384cc32378b6d.8b1c716a01a1149a -@@ -48351,11 +48351,11 @@ VCMPPS_128_0x7(mem) - after - 39782eccbc6e65e5.42743f57cb0df1fe.a714145755e7371c.45f24e3d7d97063b - 702c3546e815cfca.1ba39233637526f4.d8b384cc32378b6d.8b1c716a01a1149a -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 94eba394f7d2c859.6d0fcc6583fab9d3.64d5c96fb8f5fe52.6c4e91dc505a400b - c0ee85f85420d675 - --VCMPPS_128_0x7(reg) -+VCMPPD_256_0xA(reg) - before - 254c0d92b9e8bb3a.388e03401100d05b.9ee4ab93442f8e15.77f19775997b963f - f8b524141d3d2c07.641a232ab3c9846a.4fde5bb3f66c12c9.e3ce2783b4d5bd62 -@@ -48363,12 +48363,12 @@ VCMPPS_128_0x7(reg) - 59d7f18551bfa168.bf179369fe59e45e.a1711f7e9a2b1335.37ff7e660535a6fd - d6ea3d147554e1cc - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - f8b524141d3d2c07.641a232ab3c9846a.4fde5bb3f66c12c9.e3ce2783b4d5bd62 - 9675c7ec1cab6588.f2597f3ff938a2b2.dc49d933343c7f9b.853af584240f2ee8 - 59d7f18551bfa168.bf179369fe59e45e.a1711f7e9a2b1335.37ff7e660535a6fd - d6ea3d147554e1cc --VCMPPS_128_0x7(mem) -+VCMPPD_256_0xA(mem) - before - 3ec8ae7a8d779a81.9f299d4b59041d54.a722db95de38069b.faa12bffc5c60746 - 4c624d846bab8f4a.c2b5c9aacf0615f8.8744d4b0b6e2c594.4327f82450989a78 -@@ -48378,11 +48378,11 @@ VCMPPS_128_0x7(mem) - after - 3ec8ae7a8d779a81.9f299d4b59041d54.a722db95de38069b.faa12bffc5c60746 - 4c624d846bab8f4a.c2b5c9aacf0615f8.8744d4b0b6e2c594.4327f82450989a78 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - c5020635e87317c2.13ae8fe376736815.9a01c660bcc50a6d.1460c508f81388f1 - 55acbe9e4dd35c90 - --VCMPPS_256_0x7(reg) -+VCMPPS_128_0xA(reg) - before - f67d688772fbbd01.e99e18b3be2024ca.f8b32195e0f53be8.8633b7cc221608a4 - 531ebf300415e8ef.22294886ca0c5b94.2b23229128657a21.d9ad49d7f0619248 -@@ -48390,12 +48390,12 @@ VCMPPS_256_0x7(reg) - b004656edd558cf4.4337f3d7f2d73921.eb736113c33c2a7c.24a83c7831173d85 - d4c297e5dd99d577 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 531ebf300415e8ef.22294886ca0c5b94.2b23229128657a21.d9ad49d7f0619248 - c7ddbf039eb01907.4c6d13982746784e.08498e41ea4e606f.6f3bf66c41b36584 - b004656edd558cf4.4337f3d7f2d73921.eb736113c33c2a7c.24a83c7831173d85 - d4c297e5dd99d577 --VCMPPS_256_0x7(mem) -+VCMPPS_128_0xA(mem) - before - 5b5381a06146ea85.68e0abdb5c927c63.e353662e47cd583c.30eb98714ebc14f4 - 95287896d82938dc.4dbd8fb8b7f226ff.088ce789403492c9.33fe2ec928595a85 -@@ -48405,11 +48405,11 @@ VCMPPS_256_0x7(mem) - after - 5b5381a06146ea85.68e0abdb5c927c63.e353662e47cd583c.30eb98714ebc14f4 - 95287896d82938dc.4dbd8fb8b7f226ff.088ce789403492c9.33fe2ec928595a85 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - 92ce79df10c16d13.0aaa1f6f744d9771.518904fb948146ea.e3256714371be89c - 48d003dfa458a97b - --VCMPPS_256_0x7(reg) -+VCMPPS_128_0xA(reg) - before - db47ed53d0e3b621.0d367d0b0a8fcd4c.9a52c2210d5fd69e.2de497ea268038d7 - f8d423dc56474a3c.aa137c2067c4567d.c72af3f2f2c5bfa9.fd8d298dce2035e7 -@@ -48417,12 +48417,12 @@ VCMPPS_256_0x7(reg) - 406361dee2cafa7b.bf5760babb90d279.649deca212ba7e08.eef938a0ce703f1d - c654ace85e39c49c - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - f8d423dc56474a3c.aa137c2067c4567d.c72af3f2f2c5bfa9.fd8d298dce2035e7 - fbc4a0e7d310a275.472ff40c436ac4d3.eb7fad4fc00a8e3e.9f5035d1a76cf845 - 406361dee2cafa7b.bf5760babb90d279.649deca212ba7e08.eef938a0ce703f1d - c654ace85e39c49c --VCMPPS_256_0x7(mem) -+VCMPPS_128_0xA(mem) - before - 022c0f9373d243ee.23fd602e1f028df8.ee573c16ea3f3c9c.8cd0ad588562ccb3 - 804edc8f2b487a3e.00de9b4427439898.affb040ded85c068.c064eadeb48db4ed -@@ -48432,11 +48432,11 @@ VCMPPS_256_0x7(mem) - after - 022c0f9373d243ee.23fd602e1f028df8.ee573c16ea3f3c9c.8cd0ad588562ccb3 - 804edc8f2b487a3e.00de9b4427439898.affb040ded85c068.c064eadeb48db4ed -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - aea0a427edf7fb8b.17a4b26f071205f4.5c5e4a77dd0301a8.bddecd06b89d40b8 - 3d5c6b81c59a5da2 - --VCMPPS_256_0x7(reg) -+VCMPPS_128_0xA(reg) - before - 396b757bfe4a04ca.1768989b304abddf.0a21875b16b7e007.feb6bfc402543776 - 0d57e960003a70db.30aae60f85a927e1.671586bd609522ee.a4e1105a6b6b759c -@@ -48444,12 +48444,12 @@ VCMPPS_256_0x7(reg) - aef6fc9bcc078a6a.e6cb80a8d3bbdda3.ce92f791132ecde7.68e33716771cfca1 - 3e52051252cebdd9 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 - 0d57e960003a70db.30aae60f85a927e1.671586bd609522ee.a4e1105a6b6b759c - 156cc29c66f5de82.d7310a6f0820f3bf.89ccad0080390755.28acb92733547946 - aef6fc9bcc078a6a.e6cb80a8d3bbdda3.ce92f791132ecde7.68e33716771cfca1 - 3e52051252cebdd9 --VCMPPS_256_0x7(mem) -+VCMPPS_128_0xA(mem) - before - 88c49f09e0777619.324094cacffdb040.3b42c5a40587a3b9.90b261dab501ae51 - 200781e63e21e48e.fe9884930b628bb0.b0635350b78fff2e.2d7ae548003de73e -@@ -48459,11 +48459,11 @@ VCMPPS_256_0x7(mem) - after - 88c49f09e0777619.324094cacffdb040.3b42c5a40587a3b9.90b261dab501ae51 - 200781e63e21e48e.fe9884930b628bb0.b0635350b78fff2e.2d7ae548003de73e -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - ae2b0f03d8aecec5.de9d61a79baa520c.6ed23f6a11846be4.642d304407215053 - b6b1eeaafae1f8d3 - --VCMPPD_128_0x8(reg) -+VCMPPS_256_0xA(reg) - before - 530cb8e4083ae787.5ba5b21a4da8c3e0.aae346ca28a5b750.6eb995aef189f47d - 95898860ccb95b1a.c71f8dc801d45cdf.2d6673375e40c1de.ff792453c1fb0324 -@@ -48471,12 +48471,12 @@ VCMPPD_128_0x8(reg) - 7c1d2fcbe856bd90.4d42dc9597f36b3c.cd519aa43283b687.45b8e26da753a54f - b1cd08baf452b02a - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.0000000000000000.ffffffffffffffff - 95898860ccb95b1a.c71f8dc801d45cdf.2d6673375e40c1de.ff792453c1fb0324 - d9765c89e3e98e39.ce651cf7103f55ef.c571e65cd706ad62.fedf6a449fe55406 - 7c1d2fcbe856bd90.4d42dc9597f36b3c.cd519aa43283b687.45b8e26da753a54f - b1cd08baf452b02a --VCMPPD_128_0x8(mem) -+VCMPPS_256_0xA(mem) - before - 1eed5918a2ec32c4.d8cbfd92778d23ca.1e83488cb1ff5af1.a1538b7b084319f9 - 68e35071ce30e749.4accc34a2d19fe93.1ef5dcca7b6cde3a.9dc1b54df8d31266 -@@ -48486,11 +48486,11 @@ VCMPPD_128_0x8(mem) - after - 1eed5918a2ec32c4.d8cbfd92778d23ca.1e83488cb1ff5af1.a1538b7b084319f9 - 68e35071ce30e749.4accc34a2d19fe93.1ef5dcca7b6cde3a.9dc1b54df8d31266 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.00000000ffffffff.0000000000000000.00000000ffffffff - 048020c80fdfd8c1.e1f7233e7d61fe85.1b966dc88d9e943b.7c14a6939091b5db - 189064de70d7d83c - --VCMPPD_128_0x8(reg) -+VCMPPS_256_0xA(reg) - before - 4baa4bd5d91c7f47.0dbff19e5b638d0d.bdb9b7524e359b06.d05f61600d7b3e4b - 73ac58e367ede9a7.6304591f95c064f4.1ffd3106b68e9cc6.24886eeeadea6d9f -@@ -48498,12 +48498,12 @@ VCMPPD_128_0x8(reg) - 0e9bd0f36060f119.65cfdad741326b41.e53ecb02b901bab5.1928c19dbaaf48c4 - 7238fe95601d6dee - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 73ac58e367ede9a7.6304591f95c064f4.1ffd3106b68e9cc6.24886eeeadea6d9f - ebe38573b5d45009.e21bd239d8011ba1.63108fc850f93d71.f3dc0f5e88f7dc63 - 0e9bd0f36060f119.65cfdad741326b41.e53ecb02b901bab5.1928c19dbaaf48c4 - 7238fe95601d6dee --VCMPPD_128_0x8(mem) -+VCMPPS_256_0xA(mem) - before - dad84434964d060d.3a2034ce031a0882.caeeede5eb601300.01d3e3228c324e3b - 2dd40e64774cd04c.c9beae703a90d0f1.ec42854ff396ce09.131bd393661936b2 -@@ -48513,11 +48513,11 @@ VCMPPD_128_0x8(mem) - after - dad84434964d060d.3a2034ce031a0882.caeeede5eb601300.01d3e3228c324e3b - 2dd40e64774cd04c.c9beae703a90d0f1.ec42854ff396ce09.131bd393661936b2 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffff00000000.ffffffffffffffff.0000000000000000 - 030f1f2cabe4e7db.8474d0b9d6de668f.d7bc38e78b4b6aab.89f327189d37f11d - a51b840532853d6a - --VCMPPD_128_0x8(reg) -+VCMPPS_256_0xA(reg) - before - 2727a8f23ebacc57.3fe75e9b3696ac84.6824713873ceac16.587a4cee53e2c59c - 6b618f4c5c5fda90.d64a114cdd4691fd.1f1d172f15a99353.059ed500e9b12288 -@@ -48525,12 +48525,12 @@ VCMPPD_128_0x8(reg) - a89198f83f2e6793.84e4c324edd1ad12.7a1a6431d552379e.58473afaec29d5ff - b5640eb892e9a2e2 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.00000000ffffffff.00000000ffffffff - 6b618f4c5c5fda90.d64a114cdd4691fd.1f1d172f15a99353.059ed500e9b12288 - cd1536802802a5c0.a405b42bbb005273.06abbf0856fc58f2.bcf4500b68c53e9a - a89198f83f2e6793.84e4c324edd1ad12.7a1a6431d552379e.58473afaec29d5ff - b5640eb892e9a2e2 --VCMPPD_128_0x8(mem) -+VCMPPS_256_0xA(mem) - before - ae17483376126270.5a20b1223d705db6.54b2bb238ec45c05.d5b501142b376b04 - 212c6556b3afd1d4.3e0d7d69bd52c2d5.ef3d1615bbe51c79.74ca951ff73832cf -@@ -48540,11 +48540,11 @@ VCMPPD_128_0x8(mem) - after - ae17483376126270.5a20b1223d705db6.54b2bb238ec45c05.d5b501142b376b04 - 212c6556b3afd1d4.3e0d7d69bd52c2d5.ef3d1615bbe51c79.74ca951ff73832cf -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.ffffffffffffffff.ffffffffffffffff.00000000ffffffff - e1ac3444a976abd1.0b341ffeb42cccb5.f5b5eb7e27e3be92.ee8d8a5a5abb6347 - 82d4e5622b56464b - --VCMPPD_256_0x8(reg) -+VCMPPD_128_0xB(reg) - before - c9c42541e03cac65.e6aedfe79ab88ec1.ad06ed24633be9cf.183c5bcd9ed7188f - 20a9466316face41.d5435ce3559f1038.f1675e17051b6594.77ad20bf112a73bd -@@ -48557,7 +48557,7 @@ VCMPPD_256_0x8(reg) - e3ce4534681aeb8a.88352822f535ec62.32a26e4335597eb1.ecd7b53f9be78b48 - 6e801d21722a3dec.dd51be929789df6a.ce051a1490806dd1.55859639581b1b5b - 8c823f9965d1e023 --VCMPPD_256_0x8(mem) -+VCMPPD_128_0xB(mem) - before - 6e9b2d4bde1596cc.1d0cc994d1b60114.ae639a1d56a4a57d.1fda5df7b11c71a1 - d89dda3bdef3f881.4cbc47fb214973ae.d83638b14f94fac6.836e335635bac4cc -@@ -48571,7 +48571,7 @@ VCMPPD_256_0x8(mem) - af866786e4afb3c1.9abaa75101b44fe6.a853aba05d213fac.f003883dd4294ae6 - b19c009c2713f42c - --VCMPPD_256_0x8(reg) -+VCMPPD_128_0xB(reg) - before - f423fb274d2edf7e.d5073db922a584a3.71a18119caa532dd.053478d4aad5a8a1 - 16e6754ce1064588.f3a0c4d95865f143.37dc1c84f3cdb2f5.2b08f7c0a08f8f7d -@@ -48584,7 +48584,7 @@ VCMPPD_256_0x8(reg) - 712f6a777f2762f5.e31c77d4a1fbb7cb.4ab974fe19b90ddb.f798a4515d58b26b - 624bd612c41f7371.8248d2951a739267.058286f3d7f47d3a.43b3fb71fa3ecb98 - ec24790d954c962f --VCMPPD_256_0x8(mem) -+VCMPPD_128_0xB(mem) - before - ceb69912498fd05d.4586b68a4c77b4a9.acf05108deda3e45.c4844ccfca0a3ebf - c537d76a3312364e.772b054bb2bd6149.3de070190a3b768e.e20ac4ff8d878e16 -@@ -48598,7 +48598,7 @@ VCMPPD_256_0x8(mem) - 62319ec718097027.33e7e1598940ee70.04c780c5081d7c18.b0d6b707f5e8c6e8 - 16b42bb7d1e426bb - --VCMPPD_256_0x8(reg) -+VCMPPD_128_0xB(reg) - before - 4d46406bee770410.c0431fa44a95bd67.7696657e3296464e.f257683812b5c3af - b0d9f18ee82d9c92.a372ae852291251a.77df499c2a09f945.b75ee1f9f3788664 -@@ -48611,7 +48611,7 @@ VCMPPD_256_0x8(reg) - 9ab93d8c5a932aee.e78cc756bb09646c.920f881f0c2545fe.2fa965f5c8718260 - 69321dd1e034ead0.685be603320a3588.23711e7375776428.36047216adac72d2 - a83b834abd3613e4 --VCMPPD_256_0x8(mem) -+VCMPPD_128_0xB(mem) - before - 6119147c141a21c2.778f8fc9179c17e3.02ac8878a2a0559b.86530804008a936d - 3c6ca298cf645899.211d8de09b58eed4.904b28a228d580d0.17ff413e4aeb0d79 -@@ -48625,7 +48625,7 @@ VCMPPD_256_0x8(mem) - cd9ca13ddf5c30e1.bafd231cf7f988ff.fda352c0e352e653.33e9905d89c3d599 - 76be9e1bb6549b05 - --VCMPPS_128_0x8(reg) -+VCMPPD_256_0xB(reg) - before - 568eeb3111629ce8.3a120ca06d2148aa.61e6b11808f6c490.93f4d58e51b099f8 - 31a4740d377916ee.392c629ccd7d7a1c.132fbde4d5779ab0.8dc246c045df466f -@@ -48638,7 +48638,7 @@ VCMPPS_128_0x8(reg) - 624e3419c42542c4.a8b6211e1e7b8062.2d2642eafb084608.c9da2041daebabe6 - 45d627c353f35f16.627bc312792717a9.0b153c9815330347.2208e2ff2cdf8287 - 731805e558c7887e --VCMPPS_128_0x8(mem) -+VCMPPD_256_0xB(mem) - before - 9ad607df7aaf78f8.35894a76806fa78f.4249c665fd8efb1c.0a4aa759c0860e17 - 710e63d9ada41021.90b4989ee82357dc.26eaa601c3bbe7e8.840f8099978da225 -@@ -48652,7 +48652,7 @@ VCMPPS_128_0x8(mem) - a31b197eb7e2222e.f39ca5fdd768dea1.66d8e9c98b98ca3a.5c7c68463be459a9 - 72bb718b3f4cf377 - --VCMPPS_128_0x8(reg) -+VCMPPD_256_0xB(reg) - before - 74bcd6ffe0980633.b6886b00c644166b.b4f35c0c96112d71.7abd45ccc4603917 - bec9950fba53cf89.e99f083357e2a006.4ef02e410023d4c4.02a56dc9b01fa0fd -@@ -48665,7 +48665,7 @@ VCMPPS_128_0x8(reg) - ac2fa82568098a24.1a2c6b0185c97d2b.1fe01806b02a0f47.d85eddac6ce0bc18 - 9a3a0eaf864773b1.23fa10586d046808.811015c943b319a5.d9b2126114af4994 - e26e86d4c398029c --VCMPPS_128_0x8(mem) -+VCMPPD_256_0xB(mem) - before - cd5eb7f195a8a55d.e436c017b198c5db.e1d774232a9f1fc6.d2ca21f454482f8b - 774e20a5a7eaeb02.e66fbbcb8489bd4f.318d114dd8a65c94.6c5a39f580788da5 -@@ -48679,7 +48679,7 @@ VCMPPS_128_0x8(mem) - 795d8c7ef93657aa.82c77ec495788fc4.f2b8eb737a2a5a0a.ef30792697d20f23 - 8f0e9a2eba16ace0 - --VCMPPS_128_0x8(reg) -+VCMPPD_256_0xB(reg) - before - eaf2b7bb67228180.8814857b7257f405.d47e3de1098ee01c.1cc41f47a5bf930c - 5a29ca393b84c9af.c6fca7bf99da26f5.4da236f99774c76f.47d97e2a32f043cc -@@ -48692,7 +48692,7 @@ VCMPPS_128_0x8(reg) - 3cffd114d2c8c11a.0fdf6e358ccca9a5.4b7f6378d8b58067.4fc582093cc92676 - ecc0c7b9c778a56d.3f8a54c967393842.2961c2cb6ade46b0.1152a9d1df56f737 - 674e6e6c38a4733b --VCMPPS_128_0x8(mem) -+VCMPPD_256_0xB(mem) - before - 2e834ec862bf56ad.c7b7a892b623b054.32c8d767452b90f7.42944e5ce97a56f7 - 42bec3cf7ab15bba.2732700d3c52207a.c46772fb43b06cf1.f4630399f015ece8 -@@ -48706,7 +48706,7 @@ VCMPPS_128_0x8(mem) - c1756193e24fbe53.e9dfa7957b711935.35f3e1b60da1a463.8f09dac308799976 - 3177f389505a286c - --VCMPPS_256_0x8(reg) -+VCMPPS_128_0xB(reg) - before - dab225aa916b2cbb.e38a81276b139437.03aa0d7b6c781c21.cc7aacb411257733 - e8056c926737e30f.c3d4281750df7d67.13284ab2643572fe.728f8059a46bbef7 -@@ -48719,7 +48719,7 @@ VCMPPS_256_0x8(reg) - b5bec5ad6d4a8716.3c20d04fb0bf340c.75a45aa6fe335776.0301d890e38036dc - 9f272a673f31557a.2a3af7bca4c07555.856c3ac3d7fe0935.5b9b3044e96f9b0d - 56280563d344a9b8 --VCMPPS_256_0x8(mem) -+VCMPPS_128_0xB(mem) - before - cf76d1d8bd0c1b06.008d992c7a7788e7.69ee18484aedfe6c.9fcae5758a23c2e8 - a44f128fc2d2af26.363d0e68b9a85e0a.d508b0e0be52897d.1f0b5729b32dbf3b -@@ -48733,7 +48733,7 @@ VCMPPS_256_0x8(mem) - ced5e1738e892786.8ca5f6f6b6fddd21.a39d31e67ef69840.c0668142da22746f - 9a1831810f24a4a9 - --VCMPPS_256_0x8(reg) -+VCMPPS_128_0xB(reg) - before - 4adc98712b3b0832.dc1966798d92841f.65f76220aa38006d.beb0132a024d9349 - 2c00b27ec9f4dcb7.b51a507018c9f239.83c1c371148fb41e.75595b2bc30b81fd -@@ -48746,7 +48746,7 @@ VCMPPS_256_0x8(reg) - 9bce7c1385da5be3.34a21a454a3b2dff.405115558d8d36e1.a66485d4de3e1e88 - f593f09efc7ac263.377e40e53ff3f09e.f9f15537b3bec262.2b9d0e116ef22615 - e2d071ce903154d1 --VCMPPS_256_0x8(mem) -+VCMPPS_128_0xB(mem) - before - a5c82af8600a65e7.959b0c8ac95f4de3.987b3f3b14fef842.0aee7d8522af934c - 5253b579f8861584.d631cb448915370e.35629232e5660116.cf938bab75ebe64c -@@ -48760,7 +48760,7 @@ VCMPPS_256_0x8(mem) - d64d3234f69c4001.af3b23cd50261b17.8f2624b8e9830500.e60a472a3975013c - ef72ed5ce1db4285 - --VCMPPS_256_0x8(reg) -+VCMPPS_128_0xB(reg) - before - 1cb36816debdf393.65551c45944d343a.ff47b4768f988d4d.04995b1e544f786e - c819b4c3cca55313.4d1ec95f6ad3b7a9.6011d89b310b4ede.2429d6d62aa9dcbc -@@ -48773,7 +48773,7 @@ VCMPPS_256_0x8(reg) - 51f0cdce45229cb0.6b76b36d9739847b.30e68baad10c9b77.cca012cd889dec17 - 1284b0a5e8bd0c17.9927575b348c58dc.c912c90d0c27b0c4.d6cb8aed893866ab - 1f75ba234a8603a3 --VCMPPS_256_0x8(mem) -+VCMPPS_128_0xB(mem) - before - 846c1f5ce791822c.672057b34f04dcf4.b4ff32155fd7eff7.89e08f327de6c870 - df7b33827a679d71.ac12c06416824bf2.99c8bf87342604f8.ca9ed884c1d72028 -@@ -48787,7 +48787,7 @@ VCMPPS_256_0x8(mem) - ea0f5d4af8a29ae2.7623c65f3654f103.2c5fe04349019c5f.4215e35f2f7d806b - 32679ec0924aff4d - --VCMPPD_128_0x9(reg) -+VCMPPS_256_0xB(reg) - before - 13d8cbff3879aeeb.522d6bc31b1ff465.b2db5a81c7c1a16e.93c66c65c2a6951d - 42b46886bb94c9f1.219318daa496da55.4f18a0f62894deab.334e9af0557efd71 -@@ -48800,7 +48800,7 @@ VCMPPD_128_0x9(reg) - 1b4671c3ba298b0b.330de27bb11309dd.a826932bf65be565.e8c5e6ce1d979187 - fadce020cfc431e4.646644925ea33c2a.1850308acca1f248.8ef5cced36fc0a8c - 01abc938bdba27ac --VCMPPD_128_0x9(mem) -+VCMPPS_256_0xB(mem) - before - 1db3579acddca213.3cc0b20b96f0f728.906cba0bc6523168.fde3718146f34102 - bed8f401836e38ec.3b3fe4eeac391984.93e9c0d3062aa2c2.b22c547b01dc0d3d -@@ -48810,11 +48810,11 @@ VCMPPD_128_0x9(mem) - after - 1db3579acddca213.3cc0b20b96f0f728.906cba0bc6523168.fde3718146f34102 - bed8f401836e38ec.3b3fe4eeac391984.93e9c0d3062aa2c2.b22c547b01dc0d3d -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ffad498b4f14a4a5.e33e565133535f34.8e7b6efc7b8aea7c.fb0aed27a9a30fe7 - 47399bb2cd9abcaf - --VCMPPD_128_0x9(reg) -+VCMPPS_256_0xB(reg) - before - d44ddbf0a259d7a8.57f4f9869d3ff2de.44558da8dc3cfcdf.3e280d35e92a3934 - fc91a84ec46a9c7f.a489a736010b4b39.d33814a84472e551.357c2c6d9f24f5b9 -@@ -48822,12 +48822,12 @@ VCMPPD_128_0x9(reg) - 91dcd9155cb81376.8ccded6179b30d08.ea8dff54bef7893d.674ddb875057a3d8 - 5b61634184a80eca - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - fc91a84ec46a9c7f.a489a736010b4b39.d33814a84472e551.357c2c6d9f24f5b9 - 1c52fe36ce5b47e0.c138cf8596836ae3.ec31e6be06825537.4f45488fb884da36 - 91dcd9155cb81376.8ccded6179b30d08.ea8dff54bef7893d.674ddb875057a3d8 - 5b61634184a80eca --VCMPPD_128_0x9(mem) -+VCMPPS_256_0xB(mem) - before - 064d5ba96f83d439.b57b35580b0b3ded.e0147eb4c5a8eed3.2b985bd7095ebd0f - 43dd40ab2ef5b450.e57b0f6976e201f3.99d8fc6c966dc971.0a9ef7b483422c57 -@@ -48837,11 +48837,11 @@ VCMPPD_128_0x9(mem) - after - 064d5ba96f83d439.b57b35580b0b3ded.e0147eb4c5a8eed3.2b985bd7095ebd0f - 43dd40ab2ef5b450.e57b0f6976e201f3.99d8fc6c966dc971.0a9ef7b483422c57 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - e818bd2e96ccad29.dacd2aaaf24a4556.a90ab4b73a9861d4.12cadb2872b1ae00 - f2891d981e5538b8 - --VCMPPD_128_0x9(reg) -+VCMPPS_256_0xB(reg) - before - e1728d116aa6ef97.065c4e8677483f42.56b763b03bf33e0c.b810e623441695f2 - 3ad229fff0310d4a.2873bb299c8bd9b4.4e320a36b050c1ff.9dc4f5a34394b392 -@@ -48849,12 +48849,12 @@ VCMPPD_128_0x9(reg) - 9927d2ea1b2270db.e44d1afc1f951852.230b8f6f9052534f.55659f9092c2a10a - e0eb32d41a8ae739 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 3ad229fff0310d4a.2873bb299c8bd9b4.4e320a36b050c1ff.9dc4f5a34394b392 - 58f5ecce4c81ce7d.282a810120a138ab.1f8a1aa7edeb09dd.32f25f23541f79e0 - 9927d2ea1b2270db.e44d1afc1f951852.230b8f6f9052534f.55659f9092c2a10a - e0eb32d41a8ae739 --VCMPPD_128_0x9(mem) -+VCMPPS_256_0xB(mem) - before - b14e92dc0781099c.58b3d7bff8a12d10.36a80405b67335d6.b70165fb3211db04 - a25b3d9576b6c15d.f0e7f8b9808842ca.fc06ba0801474a62.37b798b571b3dda6 -@@ -48864,11 +48864,11 @@ VCMPPD_128_0x9(mem) - after - b14e92dc0781099c.58b3d7bff8a12d10.36a80405b67335d6.b70165fb3211db04 - a25b3d9576b6c15d.f0e7f8b9808842ca.fc06ba0801474a62.37b798b571b3dda6 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 58a261c64803e5ab.1f727acdffc46377.4fff7bac20034f44.6b97076735d03d63 - d7583a36f16413d5 - --VCMPPD_256_0x9(reg) -+VCMPPD_128_0xC(reg) - before - 9f0abae5ba0b54e6.d475d217e334ca90.6e62d5bf2e30e7c3.96317e252d03b6f2 - 1ff984df2b513a40.e2217ec870d23583.06293a867836b243.bf973d485e280759 -@@ -48876,12 +48876,12 @@ VCMPPD_256_0x9(reg) - b6bde26477ece781.1f3874face828f46.856b1642ca3c118d.2b2fe03d99175100 - 25f8bbe7dcf8c398 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1ff984df2b513a40.e2217ec870d23583.06293a867836b243.bf973d485e280759 - b3709290e1c3028f.5c74e0c50ae7e2b1.4413a78e786002a2.a7fd3402cd81fba4 - b6bde26477ece781.1f3874face828f46.856b1642ca3c118d.2b2fe03d99175100 - 25f8bbe7dcf8c398 --VCMPPD_256_0x9(mem) -+VCMPPD_128_0xC(mem) - before - 722543ebb22f0e99.862a70c78a5926bf.073ab653d7acf66d.237e86100c561caf - ee83f33438c9ee2f.7e043625b595fbf8.f04522bc4173d453.7b99f064d7385eb5 -@@ -48891,11 +48891,11 @@ VCMPPD_256_0x9(mem) - after - 722543ebb22f0e99.862a70c78a5926bf.073ab653d7acf66d.237e86100c561caf - ee83f33438c9ee2f.7e043625b595fbf8.f04522bc4173d453.7b99f064d7385eb5 -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e3fdbc4ac1535cc8.552f5e82c5aa5605.36aa6a6faa06e40a.ca11a6497d8a7b1c - 7808eab39010ccd5 - --VCMPPD_256_0x9(reg) -+VCMPPD_128_0xC(reg) - before - 503619539e904622.14b1cdeefe5c6224.ed17b85ae29c5532.4a9c3d90e1ea8e34 - aee63093429623ae.e4c6f68959f6ecc3.1d9d3cdc878ed809.cfc72a72ea9a9fcc -@@ -48903,12 +48903,12 @@ VCMPPD_256_0x9(reg) - 6cff02a8bd60f934.d13e804fdf138081.b4aeae93db9e6163.9cfb4425df8fe5f8 - 9c9b68cf04ed91e4 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - aee63093429623ae.e4c6f68959f6ecc3.1d9d3cdc878ed809.cfc72a72ea9a9fcc - ee6529e118aca025.2f06b305f030b8d4.400be476510a1e35.a1f8ae00e023d2ff - 6cff02a8bd60f934.d13e804fdf138081.b4aeae93db9e6163.9cfb4425df8fe5f8 - 9c9b68cf04ed91e4 --VCMPPD_256_0x9(mem) -+VCMPPD_128_0xC(mem) - before - 7da696e96a4695ef.8400b654cc3e6987.a63bda5441ad01f7.d3d2959ec1d5de3f - 1ae64a5f2ea8ab44.92b44151e2d12dca.8ac73cfe320af661.fbc39505a03cd174 -@@ -48918,11 +48918,11 @@ VCMPPD_256_0x9(mem) - after - 7da696e96a4695ef.8400b654cc3e6987.a63bda5441ad01f7.d3d2959ec1d5de3f - 1ae64a5f2ea8ab44.92b44151e2d12dca.8ac73cfe320af661.fbc39505a03cd174 -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - fd3836103eb5007e.0064cdee9146a0cd.efbe08f534392fc4.d23bd194b8c7079b - 395b05942804c3e5 - --VCMPPD_256_0x9(reg) -+VCMPPD_128_0xC(reg) - before - 197742a001a0e538.fae26522c278b7bb.18f9c6666241c8e6.28c16a1a7c25eb14 - ccdc8422de27a841.24f20a41137470f3.967086dfa921339f.df85c595c3020b09 -@@ -48930,12 +48930,12 @@ VCMPPD_256_0x9(reg) - 1fb1083c16280424.6e73a8528f43db01.34374c850cc1c49f.3c7b533dc0c56a90 - 99467f42aec1217b - after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ccdc8422de27a841.24f20a41137470f3.967086dfa921339f.df85c595c3020b09 - afd6c7885c2649ac.5634a2574eb3e851.d6160ac603731da3.f2d4945226de4dce - 1fb1083c16280424.6e73a8528f43db01.34374c850cc1c49f.3c7b533dc0c56a90 - 99467f42aec1217b --VCMPPD_256_0x9(mem) -+VCMPPD_128_0xC(mem) - before - e400924e0be02cba.76b842aca9b91456.477c981df1300431.0c1e4a8a5f9a623f - fb770a4bf42e4879.11397142b066b7ed.bc1beea39085200b.b919ff3f9887342e -@@ -48945,11 +48945,11 @@ VCMPPD_256_0x9(mem) - after - e400924e0be02cba.76b842aca9b91456.477c981df1300431.0c1e4a8a5f9a623f - fb770a4bf42e4879.11397142b066b7ed.bc1beea39085200b.b919ff3f9887342e -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - f9c816ccd884a22b.84d49f958c41a0fd.ef4bbd95f897216e.07767f6e2fd262ab - 5f7141bfc4483791 - --VCMPPS_128_0x9(reg) -+VCMPPD_256_0xC(reg) - before - fcafab71af033077.983aa3280ba45874.1387962999885fcd.63742ed8f86d7d50 - 3c7cb8f08d8f8808.7398832639230fee.56e372948a1aa1b3.e562f588a5dbbc8c -@@ -48957,12 +48957,12 @@ VCMPPS_128_0x9(reg) - 11f2ac06904b48dd.494731b7f96b6f24.68c5c9a08a50986f.7ec175da78b0d2c5 - 4fc92756d62f2119 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 3c7cb8f08d8f8808.7398832639230fee.56e372948a1aa1b3.e562f588a5dbbc8c - 792465a8f9787df0.64ad34b17f0c83c5.a9342f42fb839f5a.4fe38e8f1ced9a4f - 11f2ac06904b48dd.494731b7f96b6f24.68c5c9a08a50986f.7ec175da78b0d2c5 - 4fc92756d62f2119 --VCMPPS_128_0x9(mem) -+VCMPPD_256_0xC(mem) - before - 9cc71fed51774377.5e338b74ed942879.fc30f723c24d9038.efe43d18d00cc69e - 4386d98d0693f40d.be33fd60addd5770.5b3600e2f6bda22c.9adb86186b446692 -@@ -48972,11 +48972,11 @@ VCMPPS_128_0x9(mem) - after - 9cc71fed51774377.5e338b74ed942879.fc30f723c24d9038.efe43d18d00cc69e - 4386d98d0693f40d.be33fd60addd5770.5b3600e2f6bda22c.9adb86186b446692 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 0a7b84958c77f18b.23a08b5ec4a49522.88c4d00412798867.cc84875c0e54eb7b - 0bcd38794f4648c8 - --VCMPPS_128_0x9(reg) -+VCMPPD_256_0xC(reg) - before - de20adcc54e3078b.e3496dd59558b6cc.e0a59e49533a1b34.0fe48e4031dcd305 - a1c7e4c3b9b7636f.860808cd473df9f4.1f983561b401e252.b251817f2bfd0034 -@@ -48984,12 +48984,12 @@ VCMPPS_128_0x9(reg) - 6645864b1535e64c.958b45951945eca7.947cdcc85f531d60.b73ef2b222abebf4 - d256697f575022dc - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - a1c7e4c3b9b7636f.860808cd473df9f4.1f983561b401e252.b251817f2bfd0034 - af10d9c91b4e9a21.cd85d169bf33782e.3dc74b1284852427.4bd623ac1de9c920 - 6645864b1535e64c.958b45951945eca7.947cdcc85f531d60.b73ef2b222abebf4 - d256697f575022dc --VCMPPS_128_0x9(mem) -+VCMPPD_256_0xC(mem) - before - 78ea04fed7e32a06.21b3e9b344f7839d.bae8de3d707f148a.8104e5efe0f60aa9 - 85c6401bbf70be9b.3ca5fc6e4321afc0.18661a4ee0edaa04.61ab61f3a3fa27ad -@@ -48999,11 +48999,11 @@ VCMPPS_128_0x9(mem) - after - 78ea04fed7e32a06.21b3e9b344f7839d.bae8de3d707f148a.8104e5efe0f60aa9 - 85c6401bbf70be9b.3ca5fc6e4321afc0.18661a4ee0edaa04.61ab61f3a3fa27ad -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 448588df34aa7cbd.014a288e23da9f29.eff969577d98136c.6585a2436257e199 - 42505f6795c8f5d8 - --VCMPPS_128_0x9(reg) -+VCMPPD_256_0xC(reg) - before - 816b80177ac92982.ae018c5efb6e1fa0.649337cb3b82dbc9.20a57328e2eb5eb2 - 7e2000c1aee8b844.eff4202c985c3ea0.9691e80a94c095ea.faa31011d1a3073e -@@ -49011,12 +49011,12 @@ VCMPPS_128_0x9(reg) - 228a0db071afdbc0.6672ea61cae9e2a7.dbdc1d4378347360.19c4f0daba7066db - 167f2c93ec9d9343 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7e2000c1aee8b844.eff4202c985c3ea0.9691e80a94c095ea.faa31011d1a3073e - 95bcdbd0ccb1e0ca.e32bc133298196e9.f59036b9ca230938.59bebbfd64cbcb3d - 228a0db071afdbc0.6672ea61cae9e2a7.dbdc1d4378347360.19c4f0daba7066db - 167f2c93ec9d9343 --VCMPPS_128_0x9(mem) -+VCMPPD_256_0xC(mem) - before - 2cbce915195e0fa2.81d892cd386ee6d1.549517a0969edf05.a6c199143a810f0e - 3747a54a5ac09623.0ef06793be7a3ca9.895fc4dea9ae492f.b08aa798ad9518ed -@@ -49026,11 +49026,11 @@ VCMPPS_128_0x9(mem) - after - 2cbce915195e0fa2.81d892cd386ee6d1.549517a0969edf05.a6c199143a810f0e - 3747a54a5ac09623.0ef06793be7a3ca9.895fc4dea9ae492f.b08aa798ad9518ed -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 9b7708818e94b43d.22b2eecb74abbc61.371c8f04160d539a.f5fc666a144463f0 - e73c0f8f41f61d6d - --VCMPPS_256_0x9(reg) -+VCMPPS_128_0xC(reg) - before - 8a913a178ea035ca.adb4a65ab81fc32e.61f39814dde85e98.69a6a5c4a8746c32 - 3847e16f97cde7b5.246e3398687accf2.3e2f82b675a13b47.52082b32f166e047 -@@ -49038,12 +49038,12 @@ VCMPPS_256_0x9(reg) - 2905983b4fe108e5.b08c07f0c7d1c0a1.41c703b79fbd99bc.b88478c81a18d097 - ee3537c932f0c32a - after -- ffffffff00000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 3847e16f97cde7b5.246e3398687accf2.3e2f82b675a13b47.52082b32f166e047 - 4ea90202f9096fda.db722a26b9b18db5.14b1a71ed765901a.ce0e9d3a0eed6e05 - 2905983b4fe108e5.b08c07f0c7d1c0a1.41c703b79fbd99bc.b88478c81a18d097 - ee3537c932f0c32a --VCMPPS_256_0x9(mem) -+VCMPPS_128_0xC(mem) - before - 4aef5627718303e9.23a5a08835e0ef81.7e8847e1afe522e5.20bb92ed6a3792da - aa7c51d0f4dc4b01.99d6145449925f5a.203264e78cfa6eab.0ddb502bd45eb61f -@@ -49053,11 +49053,11 @@ VCMPPS_256_0x9(mem) - after - 4aef5627718303e9.23a5a08835e0ef81.7e8847e1afe522e5.20bb92ed6a3792da - aa7c51d0f4dc4b01.99d6145449925f5a.203264e78cfa6eab.0ddb502bd45eb61f -- ffffffffffffffff.ffffffff00000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - e242ccaf3411e6ea.691b35196441ce76.54bf2ae09854b86f.80ca4b74f2e572d1 - bf317f57df5c8195 - --VCMPPS_256_0x9(reg) -+VCMPPS_128_0xC(reg) - before - 7bf4d2f2dab0ac30.721344be2905b114.7bc6d9eaa5564411.9e3bcaaafdb12cc5 - 125d41b2806e2f50.76e788c7d1f07446.7933daeb824d3399.2c943938c93f7c4d -@@ -49065,12 +49065,12 @@ VCMPPS_256_0x9(reg) - 3d5560523b562cc9.46cc6577add7d575.a97fe52881176f22.88107052001b9ba6 - 0dca32b4a382e2ce - after -- 00000000ffffffff.00000000ffffffff.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 125d41b2806e2f50.76e788c7d1f07446.7933daeb824d3399.2c943938c93f7c4d - debac7046c22469f.c88c14b649dcecad.bfac358697b4d8ba.db97f27715096234 - 3d5560523b562cc9.46cc6577add7d575.a97fe52881176f22.88107052001b9ba6 - 0dca32b4a382e2ce --VCMPPS_256_0x9(mem) -+VCMPPS_128_0xC(mem) - before - 4793b18b1d49f5d9.897b080a88981e7b.ca74f6f618edeac9.93f6e63edc01347a - 13356bc2877d8ef3.2077bb96f0735861.31504320a629e9d5.d95d343343fe6271 -@@ -49080,11 +49080,11 @@ VCMPPS_256_0x9(mem) - after - 4793b18b1d49f5d9.897b080a88981e7b.ca74f6f618edeac9.93f6e63edc01347a - 13356bc2877d8ef3.2077bb96f0735861.31504320a629e9d5.d95d343343fe6271 -- ffffffffffffffff.00000000ffffffff.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - cc387c00a1594401.9a2634df7e269277.19d401219d438fc8.e930a969a662ece6 - 6b32c783dae1c0bd - --VCMPPS_256_0x9(reg) -+VCMPPS_128_0xC(reg) - before - b955222c8ba4ede2.7230cddf8819d94f.376ff173dd150bff.51136bd03e3aaf07 - 2fe5b6d05436b001.1a3147ced076e55a.8dbfa98cc7cebc6b.dcb781da7288a8ae -@@ -49092,12 +49092,12 @@ VCMPPS_256_0x9(reg) - 027c7bbaa0f7e7da.db82ab8df635515e.d7a4fbfea9cbb49e.5b59a1ab055515e6 - 07f0a44b9ced00cf - after -- 0000000000000000.00000000ffffffff.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 2fe5b6d05436b001.1a3147ced076e55a.8dbfa98cc7cebc6b.dcb781da7288a8ae - 282e80dcd22344c4.9e0968ba967b2451.f9625996d7dce067.968abf2a563736ea - 027c7bbaa0f7e7da.db82ab8df635515e.d7a4fbfea9cbb49e.5b59a1ab055515e6 - 07f0a44b9ced00cf --VCMPPS_256_0x9(mem) -+VCMPPS_128_0xC(mem) - before - 761a42f6360cb4d0.181ba3d75b3fd3ed.ad6a8c340baf29ad.84d18d2eda2874bd - 85a5f996f0bdec16.c556f4a09e8645aa.f08b879cf1f5686c.5a340a94067e5b70 -@@ -49107,11 +49107,11 @@ VCMPPS_256_0x9(mem) - after - 761a42f6360cb4d0.181ba3d75b3fd3ed.ad6a8c340baf29ad.84d18d2eda2874bd - 85a5f996f0bdec16.c556f4a09e8645aa.f08b879cf1f5686c.5a340a94067e5b70 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ed0aa0683106dc20.59d402e22e43aad0.39abbd5ca2170ae4.f4d0b6aebc46923f - 70a0dd3a7fd058b4 - --VCMPPD_128_0xA(reg) -+VCMPPD_128_0xD(reg) - before - 86d7dfacac84376d.007c8873f1b60b3b.f6aeb734b2d01592.f741ef8ca50ae4f6 - 92c1b86fe0ec6916.227e77234128ae4c.9c5585e12f8df5ad.96422b2be9fa1626 -@@ -49119,12 +49119,12 @@ VCMPPD_128_0xA(reg) - fcdde198ca0eb8e5.03616027fe8443fa.6f395dfc83c408a0.e6b0b26ca6fe6e93 - 50b6f5e4572b0b28 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 92c1b86fe0ec6916.227e77234128ae4c.9c5585e12f8df5ad.96422b2be9fa1626 - f0a965efb6972a5a.2fdbeb663c69827d.a5146955410588cd.f278ed288bf25aa1 - fcdde198ca0eb8e5.03616027fe8443fa.6f395dfc83c408a0.e6b0b26ca6fe6e93 - 50b6f5e4572b0b28 --VCMPPD_128_0xA(mem) -+VCMPPD_128_0xD(mem) - before - 0b56327cb984f08b.12a728d7badf4d64.7ada5051a485adf0.540e5f429157b2cf - f35ce521e915d7e8.8e5436161f952683.701439d249797b8b.b1e16a930848c109 -@@ -49134,11 +49134,11 @@ VCMPPD_128_0xA(mem) - after - 0b56327cb984f08b.12a728d7badf4d64.7ada5051a485adf0.540e5f429157b2cf - f35ce521e915d7e8.8e5436161f952683.701439d249797b8b.b1e16a930848c109 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - b9c99e3e20119e43.28879848bee1934f.48f6e3860367365e.44ac8c079f7a0249 - 313c9a02f7d2aaa7 - --VCMPPD_128_0xA(reg) -+VCMPPD_128_0xD(reg) - before - 07faa2b728baa9bf.50c89c8f6093f598.fda5e3122f8f9f55.e3379c924e7a9bef - 20309f94cdbc393c.835d019cde7e3f98.a9d5e68e8653dfaa.6c673ea30aaf54d4 -@@ -49146,12 +49146,12 @@ VCMPPD_128_0xA(reg) - 8e386973e544ff18.3279ec9a01bc9c48.f29f0249594aeaf3.bcc82a883eb0b54c - 3b916c33f094d437 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 20309f94cdbc393c.835d019cde7e3f98.a9d5e68e8653dfaa.6c673ea30aaf54d4 - d92c8e04836697cb.30544751b5dd386f.87659d2760b88ffb.c15444a650121e3a - 8e386973e544ff18.3279ec9a01bc9c48.f29f0249594aeaf3.bcc82a883eb0b54c - 3b916c33f094d437 --VCMPPD_128_0xA(mem) -+VCMPPD_128_0xD(mem) - before - 1979869581ca3827.9ba12e4d90e1acce.64986a63df28264f.48d013600c962d3f - 314df5990e5f9d47.5db3d8fe1fc9db9a.a47c3f986a2c93b2.e444cbd81526948b -@@ -49161,11 +49161,11 @@ VCMPPD_128_0xA(mem) - after - 1979869581ca3827.9ba12e4d90e1acce.64986a63df28264f.48d013600c962d3f - 314df5990e5f9d47.5db3d8fe1fc9db9a.a47c3f986a2c93b2.e444cbd81526948b -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 83e8bf3789d459c9.6b01cc955aabae22.bac7dcf7f92d0536.5d24209b9b48bcd0 - f329b5be50f1f623 - --VCMPPD_128_0xA(reg) -+VCMPPD_128_0xD(reg) - before - 3ea0e2f3cb0f4325.744712a9b0cb2882.70d50d543fbdca37.48c59cf8354382b0 - 9bd6a2a4a92fe182.11c3aa6d4352e81d.99822499784a5811.53b9a2168e20d235 -@@ -49173,12 +49173,12 @@ VCMPPD_128_0xA(reg) - fcafcc2ffca2fa00.ba3d969b1a392aa4.c797c16a5707b9c6.51b270550964da0e - fb4f314f63e20aba - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 9bd6a2a4a92fe182.11c3aa6d4352e81d.99822499784a5811.53b9a2168e20d235 - 6717f13f85dc0ae7.3426026f5d7254c4.42540cd2a1df945d.b86e6a3b21d2b1f0 - fcafcc2ffca2fa00.ba3d969b1a392aa4.c797c16a5707b9c6.51b270550964da0e - fb4f314f63e20aba --VCMPPD_128_0xA(mem) -+VCMPPD_128_0xD(mem) - before - 931328154a59fd21.b8e92de0a90eef78.80d4e2de97b223e8.849740cc364f05f9 - f3c8d193dbd56e6f.f51312bd28ab23fc.60b66222efeafebd.d49f8466d841b1a2 -@@ -49188,11 +49188,11 @@ VCMPPD_128_0xA(mem) - after - 931328154a59fd21.b8e92de0a90eef78.80d4e2de97b223e8.849740cc364f05f9 - f3c8d193dbd56e6f.f51312bd28ab23fc.60b66222efeafebd.d49f8466d841b1a2 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 7e372a676808bd6e.666256b10fa93bd6.e18ff061a2c445c8.a2fb4befdb592004 - d7e6c6b674965a15 - --VCMPPD_256_0xA(reg) -+VCMPPD_256_0xD(reg) - before - 100af76540aee64c.618ad1969dd81378.5120ac9eae229685.3a1df534357e2a57 - a8b3d966de2eff54.7dfe1b2cecddd718.2efd76688ffc21ef.1e271eb91327e026 -@@ -49200,12 +49200,12 @@ VCMPPD_256_0xA(reg) - 6ac3a012f993cb8a.d07d864145b39ccb.2f4453448a05b6a6.f8dfcd892274ad36 - a5244bac8b303ccf - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - a8b3d966de2eff54.7dfe1b2cecddd718.2efd76688ffc21ef.1e271eb91327e026 - fd2d6826e7a1e2db.ae6183176f22c77a.5945af7b4fc418c1.6979e8dc59ca2262 - 6ac3a012f993cb8a.d07d864145b39ccb.2f4453448a05b6a6.f8dfcd892274ad36 - a5244bac8b303ccf --VCMPPD_256_0xA(mem) -+VCMPPD_256_0xD(mem) - before - 4d16dd32af0a8d59.4ac27d94b090f610.bf1f9e98889c1537.0a455e2dda4b384b - cc7f0005aa0f5aff.fb77fc1aa7259e17.5713490754eaece9.4795cda4de23da5c -@@ -49215,11 +49215,11 @@ VCMPPD_256_0xA(mem) - after - 4d16dd32af0a8d59.4ac27d94b090f610.bf1f9e98889c1537.0a455e2dda4b384b - cc7f0005aa0f5aff.fb77fc1aa7259e17.5713490754eaece9.4795cda4de23da5c -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - bee9e54698c75a51.3c2dcddfc7455859.f22045ddf9e3a7d2.5752c4e96cb76d70 - e257448f2f8ad6cb - --VCMPPD_256_0xA(reg) -+VCMPPD_256_0xD(reg) - before - 3fdb1872141f4f42.ea82a08bc2930555.84c818f627e8e1ed.add18f1c0aa60260 - ca293afeb7021481.5dc3dccf33b91d26.0d48f3c03852d8b2.81045a2314feace5 -@@ -49227,12 +49227,12 @@ VCMPPD_256_0xA(reg) - da565dc1aadf7005.886bc3015d4483dc.4e254e1ddbad0081.e42068398599dc82 - 2aa1a22123f6dbf3 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - ca293afeb7021481.5dc3dccf33b91d26.0d48f3c03852d8b2.81045a2314feace5 - df8ea89fb6be6033.f37713fd08455eef.31f85ca995107955.4a8624de34f5618c - da565dc1aadf7005.886bc3015d4483dc.4e254e1ddbad0081.e42068398599dc82 - 2aa1a22123f6dbf3 --VCMPPD_256_0xA(mem) -+VCMPPD_256_0xD(mem) - before - fad44f802b16180a.16cd56d131f17fa2.f76b67c74cc14a1b.be1bc589a6b5a8e3 - 2f84ea44b9074ff4.f13f8d39e781cbb7.1e437b3bf4c86cd6.de26be5790b5ae27 -@@ -49242,11 +49242,11 @@ VCMPPD_256_0xA(mem) - after - fad44f802b16180a.16cd56d131f17fa2.f76b67c74cc14a1b.be1bc589a6b5a8e3 - 2f84ea44b9074ff4.f13f8d39e781cbb7.1e437b3bf4c86cd6.de26be5790b5ae27 -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - 378fdaa8d48a9fef.f144aac54d4905f8.00abe4ddd9a6b871.9fab22cd37cac303 - f7bc864d2cf84af4 - --VCMPPD_256_0xA(reg) -+VCMPPD_256_0xD(reg) - before - 6f125ce0b04d1f76.c38027209a352f58.ce6e87c136996b7c.74d331e44e9459aa - 64fa9ef262557e35.232053ac56dfa944.b8c394c6be96fe27.0f02de48ec3d470f -@@ -49254,12 +49254,12 @@ VCMPPD_256_0xA(reg) - 30aa5b43b9b0c81d.d39935b01d654f54.281e2a9b18c895a4.29a848dc0cedf810 - 60b7fee2c80d3403 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - 64fa9ef262557e35.232053ac56dfa944.b8c394c6be96fe27.0f02de48ec3d470f - 30be4aefdb9da2df.353ad9382396cbdf.0d8fcb4080ccf8a6.ac0567f7ccac3dcd - 30aa5b43b9b0c81d.d39935b01d654f54.281e2a9b18c895a4.29a848dc0cedf810 - 60b7fee2c80d3403 --VCMPPD_256_0xA(mem) -+VCMPPD_256_0xD(mem) - before - 2ffe04f71b17add2.c00ccd5a981a2c9e.db0be3006158f1d0.64bcac43231613cf - 7048d60622181eab.3c2f9da013680a0c.275a60150a7c6f7f.1fb44ea43c40acd0 -@@ -49269,11 +49269,11 @@ VCMPPD_256_0xA(mem) - after - 2ffe04f71b17add2.c00ccd5a981a2c9e.db0be3006158f1d0.64bcac43231613cf - 7048d60622181eab.3c2f9da013680a0c.275a60150a7c6f7f.1fb44ea43c40acd0 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - bc19cfc2b92cdb25.68e6436a4ede2261.ffc2b33afd85ea24.7ee6de420a5d210a - dab7c557f768769b - --VCMPPS_128_0xA(reg) -+VCMPPS_128_0xD(reg) - before - 2513bbd46280d6b3.7e37ee4782579e1f.d01312c6471dd49f.427282227f815f72 - b946bc27e7317dff.2389c9776ea94bd2.94312f004c71f17c.3b31107fd6dfa0a3 -@@ -49281,12 +49281,12 @@ VCMPPS_128_0xA(reg) - 3060d1fcb29094e1.87f9a38422f04d11.a06f3fc3eb8157bd.ba08554575ea705c - f9b80586f4b0793d - after -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 - b946bc27e7317dff.2389c9776ea94bd2.94312f004c71f17c.3b31107fd6dfa0a3 - f49cc5bb2408a92a.88dbdc3c9a2d9b69.108c9486f963b3a2.c4c9d73c1fa867e2 - 3060d1fcb29094e1.87f9a38422f04d11.a06f3fc3eb8157bd.ba08554575ea705c - f9b80586f4b0793d --VCMPPS_128_0xA(mem) -+VCMPPS_128_0xD(mem) - before - 5ea663ebb9073cb0.cadfdc562f557bcf.fdae9b3920fd1bf5.a0282b23bd56187a - c39dec60e0fa76e2.1f66e23537e499a1.c6c83f49b360c242.6b0154120c6f3385 -@@ -49296,11 +49296,11 @@ VCMPPS_128_0xA(mem) - after - 5ea663ebb9073cb0.cadfdc562f557bcf.fdae9b3920fd1bf5.a0282b23bd56187a - c39dec60e0fa76e2.1f66e23537e499a1.c6c83f49b360c242.6b0154120c6f3385 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 00da6b2bc1e43e31.65b7d032558d6ea0.c1567b2702598bc6.d7464e4d8f9a6733 - 2f4a1772fbc4f72f - --VCMPPS_128_0xA(reg) -+VCMPPS_128_0xD(reg) - before - c29e0dd55462d128.90b85b59b4f444a7.0f19b029a4c09b25.ac630bcdf6082455 - ee902ce435ff31cb.91cf644678d1b18b.e3b37c54edecf13d.5903387dee3c86fc -@@ -49308,12 +49308,12 @@ VCMPPS_128_0xA(reg) - 7d79d6b2006872bd.56dbb512e61eae4f.7abac4fae06003d9.6c3056ab59689445 - 8a5540010478b83e - after -- 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 - ee902ce435ff31cb.91cf644678d1b18b.e3b37c54edecf13d.5903387dee3c86fc - 0e6a71093a2853c3.dfec03e02a85400a.3dcf2e21cd9daa95.a5047d2306036ce8 - 7d79d6b2006872bd.56dbb512e61eae4f.7abac4fae06003d9.6c3056ab59689445 - 8a5540010478b83e --VCMPPS_128_0xA(mem) -+VCMPPS_128_0xD(mem) - before - da3db512223e9500.9909594a234bcb64.d267f5c8c6a7b787.f4c1384dc0c038b4 - 3ab533c8cfc6e6b6.bc66f53d3e5d9a66.2f5e3feee92d17de.082d88850c4a84d3 -@@ -49323,11 +49323,11 @@ VCMPPS_128_0xA(mem) - after - da3db512223e9500.9909594a234bcb64.d267f5c8c6a7b787.f4c1384dc0c038b4 - 3ab533c8cfc6e6b6.bc66f53d3e5d9a66.2f5e3feee92d17de.082d88850c4a84d3 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 978437d8494ed7b1.8bb669e4cd418825.fcb8e33a625dcb97.6e6caa545208548b - 78d574c384564f7d - --VCMPPS_128_0xA(reg) -+VCMPPS_128_0xD(reg) - before - 8cd609c791fd5362.4c73b6094c65ef4d.ef4239707a29203a.23b53338f0209651 - 05b965cd15899ae7.80232d90506f6b8e.caca12078f711e5a.9c4a7f57300fa9da -@@ -49335,12 +49335,12 @@ VCMPPS_128_0xA(reg) - 9b58638af081e37f.d4f1f350c58982ad.5901d007624f3a66.f174f3a435a29208 - 849f15aa325ee104 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 05b965cd15899ae7.80232d90506f6b8e.caca12078f711e5a.9c4a7f57300fa9da - 41cb843fab8660b7.0e5e18596f77099f.799bf015a8a5bd2f.424640813e36be5d - 9b58638af081e37f.d4f1f350c58982ad.5901d007624f3a66.f174f3a435a29208 - 849f15aa325ee104 --VCMPPS_128_0xA(mem) -+VCMPPS_128_0xD(mem) - before - d994218150766680.6fabfd1b7f055deb.ada83a616fb295e3.c448ad4758fdd1aa - cb209314abf7dea6.19124e5df49f0ba6.744e6a7888fdfc6f.17bb8243273bbda8 -@@ -49350,11 +49350,11 @@ VCMPPS_128_0xA(mem) - after - d994218150766680.6fabfd1b7f055deb.ada83a616fb295e3.c448ad4758fdd1aa - cb209314abf7dea6.19124e5df49f0ba6.744e6a7888fdfc6f.17bb8243273bbda8 -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - f5279a1e8a6297a1.5e4705a30342f1bb.419b7169792ab933.e6590a1cbe938780 - 191bb3d1bec7ddb3 - --VCMPPS_256_0xA(reg) -+VCMPPS_256_0xD(reg) - before - a43a46f107b9784f.e53c276d46634fcf.b2ae6480d363a26d.fdda421a882486c3 - e302bee834f79501.e3160a28b0fdea57.4b586abefbca771e.1938ea8278719859 -@@ -49362,12 +49362,12 @@ VCMPPS_256_0xA(reg) - edbc4e0bab864555.754dc393fb2bb828.c1a55b0ebd987c30.dd83b42464307b42 - 3d09cd369abcc3ed - after -- ffffffff00000000.ffffffff00000000.00000000ffffffff.ffffffff00000000 -+ 00000000ffffffff.00000000ffffffff.ffffffff00000000.00000000ffffffff - e302bee834f79501.e3160a28b0fdea57.4b586abefbca771e.1938ea8278719859 - 32bf1722e10d7074.c983bf3be23c2466.879113ca1502ab7c.6f82e78c621bab1f - edbc4e0bab864555.754dc393fb2bb828.c1a55b0ebd987c30.dd83b42464307b42 - 3d09cd369abcc3ed --VCMPPS_256_0xA(mem) -+VCMPPS_256_0xD(mem) - before - 6cdeaeae1fca404d.70475d0f2eee4f50.c141911a15d663c8.54df3ff7901723e9 - 47d0d4780f66ae8d.17aa429b05d1cb10.8a2ba5be4c49e172.9e8cb9f2290bdf50 -@@ -49377,11 +49377,11 @@ VCMPPS_256_0xA(mem) - after - 6cdeaeae1fca404d.70475d0f2eee4f50.c141911a15d663c8.54df3ff7901723e9 - 47d0d4780f66ae8d.17aa429b05d1cb10.8a2ba5be4c49e172.9e8cb9f2290bdf50 -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 6c36dbb2a2794c60.412b7cf7203a0891.04108f0983b94597.c36f65ca1f8481df - 563d8d7fb320e05e - --VCMPPS_256_0xA(reg) -+VCMPPS_256_0xD(reg) - before - 0fae3df67f62423c.7043b6fb7d08f34a.7ce0c8a09cd741aa.6ca35e89bacea36a - 4b0d709a1cd5e526.8e9bc44534567cc5.4b9fda80dd20dc39.c25d63d57fdbc4f7 -@@ -49389,12 +49389,12 @@ VCMPPS_256_0xA(reg) - b7c94f193f7fd8cc.8b606d91a35c1f1d.15673d951ce42767.a371ff81220d3ef1 - e7638eb9374b0eb6 - after -- ffffffffffffffff.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.ffffffffffffffff.ffffffff00000000.ffffffff00000000 - 4b0d709a1cd5e526.8e9bc44534567cc5.4b9fda80dd20dc39.c25d63d57fdbc4f7 - 64a822d7280502c7.a30c837ee26ea1fd.0ab2ad037fa014e9.e0081ad9eeec636a - b7c94f193f7fd8cc.8b606d91a35c1f1d.15673d951ce42767.a371ff81220d3ef1 - e7638eb9374b0eb6 --VCMPPS_256_0xA(mem) -+VCMPPS_256_0xD(mem) - before - 88ac446e4ab192e5.a1bdf3ccfccea1e1.22640169942db251.c70886a253774f5e - 62169c8a774c84ab.7cd00b5dfb7e9ab1.45e4b8f4d0eb16c6.7ee28596bde5c87b -@@ -49404,11 +49404,11 @@ VCMPPS_256_0xA(mem) - after - 88ac446e4ab192e5.a1bdf3ccfccea1e1.22640169942db251.c70886a253774f5e - 62169c8a774c84ab.7cd00b5dfb7e9ab1.45e4b8f4d0eb16c6.7ee28596bde5c87b -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffff00000000.ffffffff00000000 - 328122ab8c4ea5ab.788284c531330c34.9a8883d09b643f23.687092e4a083a1d5 - 52bd981550cc786b - --VCMPPS_256_0xA(reg) -+VCMPPS_256_0xD(reg) - before - b17244dea51f90d7.df194988adce4c3d.51b9de74a04ffc3f.85438ff961367c62 - dfdc90aa3a0a26c3.3503027d57b25115.8c409ab1c2fd0cb6.6babaf85e3267b91 -@@ -49416,12 +49416,12 @@ VCMPPS_256_0xA(reg) - 1dfffefa95d6bcd2.4bfc1a5fb8d76849.99692d818c3c7b96.98ad1c718a92aa72 - 96e061abe625527b - after -- ffffffff00000000.0000000000000000.ffffffffffffffff.00000000ffffffff -+ 00000000ffffffff.ffffffffffffffff.0000000000000000.ffffffff00000000 - dfdc90aa3a0a26c3.3503027d57b25115.8c409ab1c2fd0cb6.6babaf85e3267b91 - 3a477ae5ab1876de.0f0ac976a7067160.8561b6e631c87744.288a605e3d41f6dd - 1dfffefa95d6bcd2.4bfc1a5fb8d76849.99692d818c3c7b96.98ad1c718a92aa72 - 96e061abe625527b --VCMPPS_256_0xA(mem) -+VCMPPS_256_0xD(mem) - before - 00efaaf76e07ab25.e350165794cf344c.c4a37124a730f1fe.22a4fbed6ce65257 - b1a673403e43719c.e985bf67438f19f7.56cd4bb18f1dc9a8.7d5d1d9670513934 -@@ -49431,11 +49431,11 @@ VCMPPS_256_0xA(mem) - after - 00efaaf76e07ab25.e350165794cf344c.c4a37124a730f1fe.22a4fbed6ce65257 - b1a673403e43719c.e985bf67438f19f7.56cd4bb18f1dc9a8.7d5d1d9670513934 -- ffffffffffffffff.ffffffff00000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.ffffffffffffffff.ffffffffffffffff - 583a777e23fa339f.26cfb65122961c92.35d475d4bce55592.187d49504d9c25f1 - 117b4c386093a329 - --VCMPPD_128_0xB(reg) -+VCMPPD_128_0xE(reg) - before - 4c28930d057b212c.05b0a84a718da883.157bfc028af4b2da.394bbd4139d78228 - 25d0183cd9e1daa7.6afe4bc476aa78e4.b33cc217134aa604.c77478271f8eed65 -@@ -49448,7 +49448,7 @@ VCMPPD_128_0xB(reg) - f8bfd92f77500b46.62f0d9d84f5e62ee.5d5e06fa592334bb.ba1a20708a155275 - 2040d1547b55f0b4.c852cf7317b420cc.702cc319f60b98ac.ed0a330a97786f83 - 3e112de062c4febc --VCMPPD_128_0xB(mem) -+VCMPPD_128_0xE(mem) - before - 88f988de0604bc4c.fba0fc16827bc59e.7af0aa7febb96faa.46f4f5df898f0d83 - a68ec2f09f44645e.e42c57e1274ec5af.5395e5eae6770bb6.3c0098b7ab3ad0eb -@@ -49462,7 +49462,7 @@ VCMPPD_128_0xB(mem) - d2f3c00022f666ba.4ff38942be2c39f8.e9276c89c3541802.f817225212362f1f - 77ba01ec8e9f4344 - --VCMPPD_128_0xB(reg) -+VCMPPD_128_0xE(reg) - before - 85d2414a0b5f94ab.985b7cd64480365c.8ac659b0e74f2489.5eacb095dc8a029b - 7faadfd6240360ff.a2a00671cb39e230.42f549d71e502bf0.6b6944b08daa2911 -@@ -49470,12 +49470,12 @@ VCMPPD_128_0xB(reg) - a7ce212c9b25541f.f6f476a27a6eb921.9d93750128197df6.b8ba4cc026d91c42 - b2e6b88d45006156 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 7faadfd6240360ff.a2a00671cb39e230.42f549d71e502bf0.6b6944b08daa2911 - c18fd6fd7516e1ec.ce8fdbbbd42f2463.d5ca532400ba8adc.ea29a4c5f2c0488f - a7ce212c9b25541f.f6f476a27a6eb921.9d93750128197df6.b8ba4cc026d91c42 - b2e6b88d45006156 --VCMPPD_128_0xB(mem) -+VCMPPD_128_0xE(mem) - before - b27a65196c42d2f6.8db1bfcd32baf544.f79b5311da015c95.f89aaadb33fa3fed - 9542ce4eb7a92d4e.cf85a94ed463ff07.ae4feef30ff4cbec.402cee1fbce80d6b -@@ -49485,11 +49485,11 @@ VCMPPD_128_0xB(mem) - after - b27a65196c42d2f6.8db1bfcd32baf544.f79b5311da015c95.f89aaadb33fa3fed - 9542ce4eb7a92d4e.cf85a94ed463ff07.ae4feef30ff4cbec.402cee1fbce80d6b -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 759ec567261c8bd9.d62f559db0204114.a91250c56a2bf7f2.0b209492b91cbcae - 461bee99667a15cb - --VCMPPD_128_0xB(reg) -+VCMPPD_128_0xE(reg) - before - ded047b801156a1f.29c94a22833f0764.549d0f43204bf1b7.a6b80e8cc8872ef8 - 308c9b5e277af757.30597c3873b85c57.9e2c06780db9faa8.c99c7a776b741f91 -@@ -49497,12 +49497,12 @@ VCMPPD_128_0xB(reg) - 734926e781cfa722.a8d3d5227ede8127.05de9c3fcc900922.ec4d4d6af12e222c - a5b3ac490d14ab85 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 308c9b5e277af757.30597c3873b85c57.9e2c06780db9faa8.c99c7a776b741f91 - 989be7f47334f71f.6618d694139446de.102937a812f79992.ec8911736ffd87e9 - 734926e781cfa722.a8d3d5227ede8127.05de9c3fcc900922.ec4d4d6af12e222c - a5b3ac490d14ab85 --VCMPPD_128_0xB(mem) -+VCMPPD_128_0xE(mem) - before - f386a9fdddbadf20.1be254a3eed8430d.d056f3ced1a2c85b.db9733a9d6118804 - b293c170802c7a2a.edb16d9555da068b.bb6cae8427ecd8a9.eda2f753cd0550e3 -@@ -49512,11 +49512,11 @@ VCMPPD_128_0xB(mem) - after - f386a9fdddbadf20.1be254a3eed8430d.d056f3ced1a2c85b.db9733a9d6118804 - b293c170802c7a2a.edb16d9555da068b.bb6cae8427ecd8a9.eda2f753cd0550e3 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - f38b2e48a9a5d33b.7f2551c784faf5f3.4a85e8be4d45423d.34daf713ef77ad4a - 229f2b02530cbb2a - --VCMPPD_256_0xB(reg) -+VCMPPD_256_0xE(reg) - before - bbe57bdf144602b7.2d0d7c8468c50a99.f76114e082309734.a6205f1b566a14dd - 5df8e618cdaebe9e.48fad43068e09815.0904b2deec8f52b9.357e6331d2469f44 -@@ -49524,12 +49524,12 @@ VCMPPD_256_0xB(reg) - 28b4f64b983d8929.914193889d3da81a.6bae6f396efafd3d.5bb5ff3c9451ce1e - ab278f091398ebe7 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - 5df8e618cdaebe9e.48fad43068e09815.0904b2deec8f52b9.357e6331d2469f44 - 622365181ad22d8b.201cb338c60438dc.115a272d5ba4602d.d26c6feedde49ea1 - 28b4f64b983d8929.914193889d3da81a.6bae6f396efafd3d.5bb5ff3c9451ce1e - ab278f091398ebe7 --VCMPPD_256_0xB(mem) -+VCMPPD_256_0xE(mem) - before - 9e8d9c4075c5b129.09f5931de37c0f25.7633f20c0a95a1fa.734e876ebe1e6795 - 10b2a0cdd6e5db10.63343afb961afa2b.adbe4bb1281ae2a9.85846a38e99ad8e0 -@@ -49539,11 +49539,11 @@ VCMPPD_256_0xB(mem) - after - 9e8d9c4075c5b129.09f5931de37c0f25.7633f20c0a95a1fa.734e876ebe1e6795 - 10b2a0cdd6e5db10.63343afb961afa2b.adbe4bb1281ae2a9.85846a38e99ad8e0 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - e06c8299072c4e7b.edd79487a5a4f303.7ed4dc0ae8d92723.37e5813c3fd0c201 - 8fa8ae4da2a1b22f - --VCMPPD_256_0xB(reg) -+VCMPPD_256_0xE(reg) - before - 613296a44ffb9a01.f79958b00f6a0f58.d7d33f0d39a8772d.cff50c96c32ba446 - 08ce35abe26bb622.fcb615cd86cb2489.a8fde34fa63b5211.e2e026f3bfda57e7 -@@ -49551,12 +49551,12 @@ VCMPPD_256_0xB(reg) - 4a70887e2cba7903.45ee39ca33243d99.720706b37940f8b5.ba4508cd8b7b5255 - 3855c9229487127b - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - 08ce35abe26bb622.fcb615cd86cb2489.a8fde34fa63b5211.e2e026f3bfda57e7 - e2ca87d0f87b423f.cd8e37dd895b4a3b.bd9f7cb787eabe5a.9262a60cf8f0fd33 - 4a70887e2cba7903.45ee39ca33243d99.720706b37940f8b5.ba4508cd8b7b5255 - 3855c9229487127b --VCMPPD_256_0xB(mem) -+VCMPPD_256_0xE(mem) - before - e66064f72e1ff8ce.9b0d35211bb1981b.3fa39782a134b8d0.247f7eae17c93cce - a2305538754fc17d.33ed892561eeda32.9977ceefee97780b.2d54de14fd12c550 -@@ -49566,11 +49566,11 @@ VCMPPD_256_0xB(mem) - after - e66064f72e1ff8ce.9b0d35211bb1981b.3fa39782a134b8d0.247f7eae17c93cce - a2305538754fc17d.33ed892561eeda32.9977ceefee97780b.2d54de14fd12c550 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - b0532aaf7ca8eb99.a4a516005f68bb10.d9aeb39d9783b740.b7444cd114129941 - f0f850017ce05b08 - --VCMPPD_256_0xB(reg) -+VCMPPD_256_0xE(reg) - before - f1382e4b9d9e53e9.ba3d05bc74e9c45f.361648b050bdd12e.77aa5ab52a24ad91 - 1651e11d12d8bd8f.421d27e689f37030.7df911700787fafc.e5f5ca330d48d897 -@@ -49578,12 +49578,12 @@ VCMPPD_256_0xB(reg) - 3c3eb60569edd6dc.37ee2e3d7c8f30a1.9e4858d439ac7957.9cacf1113147bc71 - 9fafa14aab3aee9c - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1651e11d12d8bd8f.421d27e689f37030.7df911700787fafc.e5f5ca330d48d897 - bb8f65e17719d5a7.22bf0b18d8d0ab37.d79b6dae20537426.fd5d7d035cfaf47e - 3c3eb60569edd6dc.37ee2e3d7c8f30a1.9e4858d439ac7957.9cacf1113147bc71 - 9fafa14aab3aee9c --VCMPPD_256_0xB(mem) -+VCMPPD_256_0xE(mem) - before - e0320998e4df432d.f5aad0f483e0fddb.5e770a439239bc99.304cce50eb1e453c - 3c00a6e8f8427a4e.421fb01a627f8650.71271d1535dc0b4c.e7f2cc8dd4361680 -@@ -49593,11 +49593,11 @@ VCMPPD_256_0xB(mem) - after - e0320998e4df432d.f5aad0f483e0fddb.5e770a439239bc99.304cce50eb1e453c - 3c00a6e8f8427a4e.421fb01a627f8650.71271d1535dc0b4c.e7f2cc8dd4361680 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - b5b16b40237479f1.0752afbaddefad49.ce27d6cd933be192.38584dfaba85b2d7 - 89afc802efd4f642 - --VCMPPS_128_0xB(reg) -+VCMPPS_128_0xE(reg) - before - 70d9bb7bcaf92dbd.8b2b8c1f725bbacc.38a9c70eb1d8c327.d00f738c870fdf7d - 492220d1e78094f3.eb21d2af0c30cce7.6d399348ba9c2b2a.2f4e37c6780b91d2 -@@ -49605,12 +49605,12 @@ VCMPPS_128_0xB(reg) - 424135c559e1e142.bcb1b99793d5518f.52343c22d9e6df50.75fd215fc2acfc6d - 13053f9654692e0a - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 492220d1e78094f3.eb21d2af0c30cce7.6d399348ba9c2b2a.2f4e37c6780b91d2 - 71d6f571e3f46791.b25fb7de0eff6a6f.024e11d593c720fe.c8af9d68823bb1be - 424135c559e1e142.bcb1b99793d5518f.52343c22d9e6df50.75fd215fc2acfc6d - 13053f9654692e0a --VCMPPS_128_0xB(mem) -+VCMPPS_128_0xE(mem) - before - 7e9374f8527f03c2.19aedd3be6d33fb3.e5e253c7b8bc3c74.bb3610992784a4cc - 92733a73dbf936c0.526ae73d2557bd90.09c0015898c3e94a.97a28aa81a2eab1d -@@ -49620,11 +49620,11 @@ VCMPPS_128_0xB(mem) - after - 7e9374f8527f03c2.19aedd3be6d33fb3.e5e253c7b8bc3c74.bb3610992784a4cc - 92733a73dbf936c0.526ae73d2557bd90.09c0015898c3e94a.97a28aa81a2eab1d -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 24586f61f84aa941.5aff169a2c42083c.b2ae8a51fa5a7477.1de35d3a5cd36df1 - 7d51ae96e4e7a1cb - --VCMPPS_128_0xB(reg) -+VCMPPS_128_0xE(reg) - before - c25794398136062b.5bf5d4acc439601b.e17033cc2ac24d63.ef575d90b504ca26 - 46430c8fce4cd9bc.ab15bcbf8bbc66ec.3a60a23b4b03a2a6.96dc34e29bfbd176 -@@ -49632,12 +49632,12 @@ VCMPPS_128_0xB(reg) - 7ff89f05e9feb923.060802ee73b04e21.d2eb6b8065f96b2f.97a9df6b5906e2a8 - a889aa7b693063e1 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 46430c8fce4cd9bc.ab15bcbf8bbc66ec.3a60a23b4b03a2a6.96dc34e29bfbd176 - 675f100467b6562b.f082a28666e077df.c11a61532b9243b1.85098b32c84d4592 - 7ff89f05e9feb923.060802ee73b04e21.d2eb6b8065f96b2f.97a9df6b5906e2a8 - a889aa7b693063e1 --VCMPPS_128_0xB(mem) -+VCMPPS_128_0xE(mem) - before - 94766a4d15d9866c.eb5ab2fcefb33d51.c97558e1ce38a9de.c920bc2f96c657cd - 363a9acd780d0473.08d14656165e1f61.1494204d92854241.020350ca59854236 -@@ -49647,11 +49647,11 @@ VCMPPS_128_0xB(mem) - after - 94766a4d15d9866c.eb5ab2fcefb33d51.c97558e1ce38a9de.c920bc2f96c657cd - 363a9acd780d0473.08d14656165e1f61.1494204d92854241.020350ca59854236 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 11793b88d54208a6.c02ee3e535ccecd5.b716f83cc79b20ab.a90532780606091c - d0bd786329e05cf0 - --VCMPPS_128_0xB(reg) -+VCMPPS_128_0xE(reg) - before - a953f2eb4edc9e40.008da49a075d052b.14abe3f065a54f91.c513ff986f7ddd0a - 90149a7b11850db7.17a86d0b60324fdc.896d540f26a600e0.cdf1691cf153c9bf -@@ -49659,12 +49659,12 @@ VCMPPS_128_0xB(reg) - f7476968e4105ccc.292610b6f93ab875.41f17b36c94f3be0.3782524cf10c1dde - 51cdcad0a807fd9f - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 90149a7b11850db7.17a86d0b60324fdc.896d540f26a600e0.cdf1691cf153c9bf - e04c6e810f68e302.309712c5fdcda1e6.79c133ad135b3b6b.a97cb0b4682a9ff7 - f7476968e4105ccc.292610b6f93ab875.41f17b36c94f3be0.3782524cf10c1dde - 51cdcad0a807fd9f --VCMPPS_128_0xB(mem) -+VCMPPS_128_0xE(mem) - before - d52b952da827fb67.2f51879d2a09b6c2.dc21e1c9718650b4.3d492816e30e3deb - 9d662d4d0d77d562.e6b5c48a80e02b90.275403ea80bc25cf.c91736b9fe247d38 -@@ -49674,11 +49674,11 @@ VCMPPS_128_0xB(mem) - after - d52b952da827fb67.2f51879d2a09b6c2.dc21e1c9718650b4.3d492816e30e3deb - 9d662d4d0d77d562.e6b5c48a80e02b90.275403ea80bc25cf.c91736b9fe247d38 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 - 6da6b98a78d7089e.3dbf8c40c6555862.f1912805d417744c.014166f9a487a645 - 6535806d68eb075e - --VCMPPS_256_0xB(reg) -+VCMPPS_256_0xE(reg) - before - c9ceeb559cd79569.2c43a47fb500d939.96fc0fe0ee0c88bf.283322d952546706 - 8958a31cddd68e12.a1ed4de7c98976b5.dcc4a1ea96cfc4a3.663d5d6ad7ac864c -@@ -49686,12 +49686,12 @@ VCMPPS_256_0xB(reg) - 8d6eebf6f53eaceb.189ccbc5dfedfe07.a325e4e8cfaf50b2.68b9837767da3b2e - e3c367caaac84922 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffff00000000 - 8958a31cddd68e12.a1ed4de7c98976b5.dcc4a1ea96cfc4a3.663d5d6ad7ac864c - 011fa52dc7752c03.a67231b0cd7f9941.6c633fc8572d48bb.887b54a57f2a8f4b - 8d6eebf6f53eaceb.189ccbc5dfedfe07.a325e4e8cfaf50b2.68b9837767da3b2e - e3c367caaac84922 --VCMPPS_256_0xB(mem) -+VCMPPS_256_0xE(mem) - before - d5647a8c65017352.899373e203c04974.d43897121bdf6334.db558bb59ae31735 - 1a6a3aa7b39076eb.51d8385d8e84404b.b41211839c6182f3.7141329b5355daef -@@ -49701,11 +49701,11 @@ VCMPPS_256_0xB(mem) - after - d5647a8c65017352.899373e203c04974.d43897121bdf6334.db558bb59ae31735 - 1a6a3aa7b39076eb.51d8385d8e84404b.b41211839c6182f3.7141329b5355daef -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.ffffffff00000000.ffffffff00000000.ffffffffffffffff - 0ed0ae9d7ae2f707.b4f56ab189072c91.53af0082de47e1d9.28786e62001f43bb - 005cfb1c2d916124 - --VCMPPS_256_0xB(reg) -+VCMPPS_256_0xE(reg) - before - a62a779eb86f6a75.74c95b4f2bbcece2.0865cf6131de9859.ca0b6de7d8c39858 - 7730de563d479c59.9d55a40bdf1daad5.97266150c5284e1e.d6d4782187fffa1a -@@ -49713,12 +49713,12 @@ VCMPPS_256_0xB(reg) - 05105e14a714668d.a85afa51c2a170b6.dbc9fd9d24458851.1de059c075e8ae15 - 10bb27feecad78a6 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.0000000000000000.ffffffffffffffff.0000000000000000 - 7730de563d479c59.9d55a40bdf1daad5.97266150c5284e1e.d6d4782187fffa1a - cdb82cae59a5317d.654205bdb310ec0d.bf831debe3718a8d.53d79d1b0707c34a - 05105e14a714668d.a85afa51c2a170b6.dbc9fd9d24458851.1de059c075e8ae15 - 10bb27feecad78a6 --VCMPPS_256_0xB(mem) -+VCMPPS_256_0xE(mem) - before - 083383c08962dd2a.7b826ff3c4207734.426bffb428ddf0fb.4644ffd126318317 - e116e9f2671499cd.8b5b5bb64b559f1f.0f3f91d002ce2909.5e401ef585c0b88a -@@ -49728,11 +49728,11 @@ VCMPPS_256_0xB(mem) - after - 083383c08962dd2a.7b826ff3c4207734.426bffb428ddf0fb.4644ffd126318317 - e116e9f2671499cd.8b5b5bb64b559f1f.0f3f91d002ce2909.5e401ef585c0b88a -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.00000000ffffffff.0000000000000000.ffffffff00000000 - a649c456589c051d.e971b59d096c276f.b16249e78105b42e.01eba3bac7f9bf2a - 44320233e3ba09ae - --VCMPPS_256_0xB(reg) -+VCMPPS_256_0xE(reg) - before - a4296e4bcc4f7d90.4a313161a38b2c24.ef461a987865fe2d.3f4a67ba5d627f9e - 7b1de36e1c43577c.3eb3988b9fa69bf9.ffb34b29c1b8dede.702601f71da6f386 -@@ -49740,12 +49740,12 @@ VCMPPS_256_0xB(reg) - 022cd88668792b1f.8bb445f01c913cbe.ad80ffb8539aa3cb.2be89b5fb70fc570 - 6c679262ca4e9aca - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.0000000000000000.0000000000000000.ffffffffffffffff - 7b1de36e1c43577c.3eb3988b9fa69bf9.ffb34b29c1b8dede.702601f71da6f386 - 275a5d097222d21d.609a75c169f90cc8.750243ba81f0012f.20c1948adcdbcb12 - 022cd88668792b1f.8bb445f01c913cbe.ad80ffb8539aa3cb.2be89b5fb70fc570 - 6c679262ca4e9aca --VCMPPS_256_0xB(mem) -+VCMPPS_256_0xE(mem) - before - c10af67f2fa3094c.69df51539ad39e30.9bcb8303d479e707.02797990d341025f - 059d41a2051acc23.b9bfc3daa5bc66fa.6badabe5aebdc8cf.d238afac9e715897 -@@ -49755,11 +49755,11 @@ VCMPPS_256_0xB(mem) - after - c10af67f2fa3094c.69df51539ad39e30.9bcb8303d479e707.02797990d341025f - 059d41a2051acc23.b9bfc3daa5bc66fa.6badabe5aebdc8cf.d238afac9e715897 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.0000000000000000.ffffffffffffffff.00000000ffffffff - c9c181ab6e9f417f.7f3482cbb46de86a.bffda9cb378b1f89.503c3c65849ddba1 - b5188cd9d6b180cb - --VCMPPD_128_0xC(reg) -+VCMPPD_128_0xF(reg) - before - 05ec8642e37f0d49.01ec6d6939c56a5c.ae62c80cf04c1a69.fb0378a61d2c0dd4 - 9b01280c4792bec6.993632dde43dd83e.35edf7b874eb91d1.67042101955a214e -@@ -49772,7 +49772,7 @@ VCMPPD_128_0xC(reg) - d2a66da39c76ceef.6b6c4af28b144750.70210b3bddd58a4f.e1cb20c8ba201822 - 0826527381b87b70.55593396495573bf.bc4a0001c796418e.4323f1e8a98aae7d - 6bd9104b7ea59e8a --VCMPPD_128_0xC(mem) -+VCMPPD_128_0xF(mem) - before - 33b9fadf537ca576.97ccd1e98fe3fef4.31cb68b43a0d17b6.73b3d276cdbbf23b - 798f2a8e461c7f6d.dde5e86f65839628.dd8c66387b46f062.f2aa7e078bcfd802 -@@ -49786,7 +49786,7 @@ VCMPPD_128_0xC(mem) - ea4c4df2f5e49b2a.faa1cb5fd353f04f.102fa9225c713087.b86d5129a2f5368c - b6d27093322025a7 - --VCMPPD_128_0xC(reg) -+VCMPPD_128_0xF(reg) - before - edf459c7ea693a8c.cfcc377de9245549.89da90a1a39c2b9a.51a8e761337a1059 - b81e0633675eb1e7.a07158d56a5dd222.3fb7dba4aa896944.d0a1ddb5ca35138f -@@ -49799,7 +49799,7 @@ VCMPPD_128_0xC(reg) - 739e7542448ac563.3a082be5959acde1.7682aad484a8e8fa.6ae5070c3caff856 - 7abea2601e7ab4ac.795d2c9a85e804b4.8b89f89dcc85e167.fb42e250a6f279d9 - 5f82e96f230d5345 --VCMPPD_128_0xC(mem) -+VCMPPD_128_0xF(mem) - before - 73729854d00942c6.29cb87f990b8b770.393cd8de565230c4.db16c16b1eaa9338 - 11de6bebc8f40287.db11227a37d30d59.5770a99e25e41040.c07602aa17a53819 -@@ -49813,7 +49813,7 @@ VCMPPD_128_0xC(mem) - 5e5a6fdf0bc5e37b.bd7766df92c99e4b.180baf432cb2d726.bcdfd92b6d4b4eb9 - 8b7f6746010e37d0 - --VCMPPD_128_0xC(reg) -+VCMPPD_128_0xF(reg) - before - 61235c81acd703a7.c50297148ec37c06.a330099d7ebd51ad.7409dc009b0537ea - 9815b54a0931efea.2755d3abccdfd782.fe5150f10fbd45e4.9d8d1ee878b03ac7 -@@ -49826,7 +49826,7 @@ VCMPPD_128_0xC(reg) - 8da26c0cb5a83644.60209f90e226ae1a.29273949e054b79d.6f63f3e9dec09bec - 9c1680334bc81662.4c2f78b0eba3befb.7ffebf108d0ee384.c657d6eeea411783 - 7e3443e3b73d6ab8 --VCMPPD_128_0xC(mem) -+VCMPPD_128_0xF(mem) - before - 72c7b7b462c24fb8.21bdea2b681ec9ef.c74ed8f50362c250.5e22deb2b3770544 - 80ddac4d06dc83af.78e2a760a7358c98.ad493e4d47707746.20df929bee1c588a -@@ -49840,7 +49840,7 @@ VCMPPD_128_0xC(mem) - 57bd0e88abfbc730.0cda0c31fdd730ed.290204e3c1a6e4c4.c153abf210488456 - 58a2073830e7d534 - --VCMPPD_256_0xC(reg) -+VCMPPD_256_0xF(reg) - before - 42bae876d4f24748.d81f7301e31a5013.0044aba54c7a8af1.78585ef830e713a4 - dce74a1699f3173e.e13449f385fc179c.375d8d072d0fe4c0.a2bbacd03aa6e4d4 -@@ -49853,7 +49853,7 @@ VCMPPD_256_0xC(reg) - 83752a861a7881c1.50c60e49adafd8f8.0c71afc13c217907.82f56a57fbef1081 - 91af8330f40dc17e.00a33dee763f5152.dbcc0c41163c8672.f6d2147790cf56d6 - d920271d14517001 --VCMPPD_256_0xC(mem) -+VCMPPD_256_0xF(mem) - before - 06aa1e35a4811b2b.63e35182c23c1220.cc9552d0fcb63cd7.00b9a0f157ec47ac - 5b3b75ac5b6c1383.555b90e72193b154.9269c9da5c2256b3.d686673f9abef861 -@@ -49867,7 +49867,7 @@ VCMPPD_256_0xC(mem) - e9a53363afa0d867.0a4a539a00e7c821.78e6cf161908051d.0aeb7f6297f618f0 - 1e1cc80f89740020 - --VCMPPD_256_0xC(reg) -+VCMPPD_256_0xF(reg) - before - 555b3409ee43c77c.da16937c85021e4c.8459cec0b8fcb812.51285520ad991305 - 0af6bfbd62f0aab0.63bf43a3f24ea10e.8eddaaa97069e545.927b2d038b4e40f3 -@@ -49880,7 +49880,7 @@ VCMPPD_256_0xC(reg) - 983766957f05e567.5e6cbfc413911cd8.8421e3c1c5b98d65.18acd4a9ce344813 - 5d6c24fee411b44e.a9e883cb03d54cd7.c27276755378ea1e.c087c4009356e692 - 64d87bf2f5c1d79c --VCMPPD_256_0xC(mem) -+VCMPPD_256_0xF(mem) - before - e26b756d117fd65c.b3dff5652a9d5211.1e000ca4de29ed36.a41d5e2fb532391d - 140b2c5c029ea1ff.f8ddd534ef37fc5b.9a80d53bc196ba22.866c975d8774b60e -@@ -49894,7 +49894,7 @@ VCMPPD_256_0xC(mem) - 07a6c545d52e859c.baa9b3bf65c36336.18e817540df0cb50.ba28edc1eebd2874 - c42e02d0b9dd9642 - --VCMPPD_256_0xC(reg) -+VCMPPD_256_0xF(reg) - before - 3d08570266b422b1.81389f19eeb618ef.f110a9524ecd981f.d16888adaff587ea - 8304ebc38ecf076e.1f0828104dcf65d4.85319efe2515c93f.017f2a75c7445fc1 -@@ -49907,7 +49907,7 @@ VCMPPD_256_0xC(reg) - f16cb77fd0b98224.bee2da170e832978.d3598e2f86253243.85fb789774e91000 - e38db9a2c5fece80.3a91331a4ce12006.38d475510e8b0ed7.37a6eefecff056d3 - f44d0898f766ed67 --VCMPPD_256_0xC(mem) -+VCMPPD_256_0xF(mem) - before - 98bc4350055690e8.b4b2ec990c2a292e.6fe3ae0623f205ab.0eee50d059d39aa6 - ffbf191217cdfc82.c2294cce3ecacdd9.39a2c7c5b0c49593.b2f31a190287125d -@@ -49921,7 +49921,7 @@ VCMPPD_256_0xC(mem) - 86af8c65b67d1eae.013983a6d994e2d8.fc9ac4705ad9a5da.d4ed6cb5df69b531 - 0a7aebe04bad57a7 - --VCMPPS_128_0xC(reg) -+VCMPPS_128_0xF(reg) - before - 7e224a85868fd6b4.5e361fcd7bcf4c99.eb6a532179d6cc84.ad6b9f34b0349d91 - 8d31840f2b9b6c05.69803fefb3d7334d.811c408b76bbefdd.63da097c2b7f303b -@@ -49934,7 +49934,7 @@ VCMPPS_128_0xC(reg) - 91f395ead75c5745.835a66b87aa18ef6.1e9b46506bd08790.fab27e34e7c71a04 - e7b37a82255ed021.88901213ed3a1abe.203361dcf4a0d249.4ec0784801171617 - 3bd175a4947be2a1 --VCMPPS_128_0xC(mem) -+VCMPPS_128_0xF(mem) - before - 9daff035bc0037cd.eabf2e43b22d1645.53edbfeb28ad93d4.e12f8e9baeb70ab3 - 4f2765e596b1d4c8.f861ac991956635c.c23fe72e4506b562.beddc8f934a26c7b -@@ -49948,7 +49948,7 @@ VCMPPS_128_0xC(mem) - 18142e56cfc8d1da.a29afcb5e7e40515.f9ed9da29c9ce398.3d7a534217219dd4 - 97029d06aacee4bc - --VCMPPS_128_0xC(reg) -+VCMPPS_128_0xF(reg) - before - 7c6ae3187b7e44b3.e62179ef6646aa49.f6c9c4538560d10f.78e222ab0cf06698 - 490023e623bdfb62.74f9af571e20b936.c4bf48356e6795ad.0bfb13ced05b83c1 -@@ -49961,7 +49961,7 @@ VCMPPS_128_0xC(reg) - 5a0f58db41184378.a0664b7c1363bbce.67c783c93e828d9a.8d04edf803e8f43e - 0ce27f636e1a599f.4435ca49621a6c3c.3d2f727a903ff582.d9c82b13c2a3763c - cd15490c2899c5e6 --VCMPPS_128_0xC(mem) -+VCMPPS_128_0xF(mem) - before - 43b5c3d052d59c69.b9c692ea494f7984.3e31a6aa275188ad.a1410fb300290813 - 1975154a5b63b8f0.be078fdc6b44ded2.69285d8b7c15ca4d.ef4a58e22bcd03f7 -@@ -49975,7 +49975,7 @@ VCMPPS_128_0xC(mem) - 5184330f7ba7afbd.40cf34b1fa9b6a5b.c1334a7e4d72b3c8.b871dbd02070a069 - eb260d662287ba50 - --VCMPPS_128_0xC(reg) -+VCMPPS_128_0xF(reg) - before - 7903daa14f88ac3a.6b6cf633cb75015a.75efd56c9e1608ee.a6df7767ff23d1fc - bc523fee42ffb1d4.55a481bd6ac588ac.729b4e43fa80dc9b.2cb56f81b390060e -@@ -49988,7 +49988,7 @@ VCMPPS_128_0xC(reg) - 126037b7987607ca.e9f7519974a300df.93209da0ab65220d.3081adb684c50e2b - d579be6aec7be8c7.0432e1b4061b241e.34cbbdf14d5216f1.8c0fadf48fcfa57e - 1d2aeb26efb98634 --VCMPPS_128_0xC(mem) -+VCMPPS_128_0xF(mem) - before - c0a0e438c0906e78.63e9d171db999077.8321adf83c3ab195.b1e5aaa07bd2f3f2 - 4f3b13161f5f1977.16fc6a3a005d3d88.40903152300b6372.66bd611bd172f6bd -@@ -50002,7 +50002,7 @@ VCMPPS_128_0xC(mem) - a41303e6f615a755.5f3923bf5e049177.e71d52f9c9f52508.e8d31a22673f5e60 - 6ca91486df843a8f - --VCMPPD_128_0xD(reg) -+VCMPPS_256_0xF(reg) - before - 996cc765ef192c39.23e8bcb0a615018c.acfd3b53ce00b1ae.8ad3e71ea425ad1a - ca68302b34897008.fe129cf6533d0f2d.8f93c958e5d1c4f5.db392409af374a40 -@@ -50010,12 +50010,12 @@ VCMPPD_128_0xD(reg) - a73b111dcb2cdcc6.3b99bea715373260.88673c667723b661.fa4587e1c234b27b - 8083a4a60435f5e8 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - ca68302b34897008.fe129cf6533d0f2d.8f93c958e5d1c4f5.db392409af374a40 - 5be94a45496141a8.125f1ea5199a8b65.6547cb3b3f0307f7.b71b85a60538b8a8 - a73b111dcb2cdcc6.3b99bea715373260.88673c667723b661.fa4587e1c234b27b - 8083a4a60435f5e8 --VCMPPD_128_0xD(mem) -+VCMPPS_256_0xF(mem) - before - 25a15ae1e4493c19.0ca9812055767d0e.558df8ea6220c049.553e184729bc0cde - c56a247e807b453a.e58196bb83cc602b.3c0749591d62f14d.28175b48f25b461b -@@ -50025,11 +50025,11 @@ VCMPPD_128_0xD(mem) - after - 25a15ae1e4493c19.0ca9812055767d0e.558df8ea6220c049.553e184729bc0cde - c56a247e807b453a.e58196bb83cc602b.3c0749591d62f14d.28175b48f25b461b -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 6630e58f5b6b88ff.629aa1663ec9da97.e1bd1d6a4b1e2a54.5002085f37d75684 - 5dac694bebcea308 - --VCMPPD_128_0xD(reg) -+VCMPPS_256_0xF(reg) - before - e089210926fac4fb.1fc5d4dbd1403afb.be748e4d0288ea3d.579098e5f6b1abb0 - 35e52c0483e7f50a.4336c73873649d97.ffe6117cda832b68.0a19193c7fcbbed6 -@@ -50037,12 +50037,12 @@ VCMPPD_128_0xD(reg) - c5492d621535762b.3bdbaadaaac66660.9cc6c560395b3301.967e1f2f99ca8d32 - 28f19ba262c6c0c0 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 35e52c0483e7f50a.4336c73873649d97.ffe6117cda832b68.0a19193c7fcbbed6 - b80b87a89f2172e1.ad4f3b945de26dff.7f3e245e6345dac6.d5251d5c017b20f3 - c5492d621535762b.3bdbaadaaac66660.9cc6c560395b3301.967e1f2f99ca8d32 - 28f19ba262c6c0c0 --VCMPPD_128_0xD(mem) -+VCMPPS_256_0xF(mem) - before - 67490da2797b77c8.b8e91a9c82ae3e95.c8a792f6761d43e6.b0ccefecf75072c5 - 2e54f219f9f46c78.ed384bc3811905ca.30806ed4def2c1bc.199a9e6f39b0d2bf -@@ -50052,11 +50052,11 @@ VCMPPD_128_0xD(mem) - after - 67490da2797b77c8.b8e91a9c82ae3e95.c8a792f6761d43e6.b0ccefecf75072c5 - 2e54f219f9f46c78.ed384bc3811905ca.30806ed4def2c1bc.199a9e6f39b0d2bf -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c9af0221a562027a.8d126589a6f28448.0083f286f047900b.55c07c0bbbe3e804 - e1b1a3fc33cd15a7 - --VCMPPD_128_0xD(reg) -+VCMPPS_256_0xF(reg) - before - 329a3f949f53542f.539725880a701b25.af3647000578b3e8.21479332d2df58db - a2c94d3e9c00e149.d761aa1848726326.84385c146620d103.8c471751c025b1ac -@@ -50064,12 +50064,12 @@ VCMPPD_128_0xD(reg) - 5224ab7db700d4e2.39cacc60c0836edd.b30910c39f04cd5e.b529be942eed05ff - 29a4d790e68778d9 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - a2c94d3e9c00e149.d761aa1848726326.84385c146620d103.8c471751c025b1ac - 8e88c768c560f8a1.30d80ebc7b7495aa.6765a13165751c47.1f4efccdd52657a9 - 5224ab7db700d4e2.39cacc60c0836edd.b30910c39f04cd5e.b529be942eed05ff - 29a4d790e68778d9 --VCMPPD_128_0xD(mem) -+VCMPPS_256_0xF(mem) - before - 598bc5af19fe6c65.4ae9f4e90d6bb2b9.d00260f132aaaaea.c670a736af5823f4 - 1faa03dce4619dcc.d2229e19632eced1.cf4b4659eef505fe.fbe661f632fd59b6 -@@ -50079,11 +50079,11 @@ VCMPPD_128_0xD(mem) - after - 598bc5af19fe6c65.4ae9f4e90d6bb2b9.d00260f132aaaaea.c670a736af5823f4 - 1faa03dce4619dcc.d2229e19632eced1.cf4b4659eef505fe.fbe661f632fd59b6 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - e1bf5f10b114a4e1.0324067082e8af77.7943f962b22907ea.3a2e2f0eff6b536d - fc983b3d814d8fba - --VCMPPD_256_0xD(reg) -+VCMPPD_128_0x10(reg) - before - 51415a69e6af9be3.944d76efea7df3e7.6284bc7182f9ec5c.db8abedaf32a2619 - 937588ffc91fb393.4e43cc8c2b006e79.c289c3e4f2915633.1713c5dbec7f53ff -@@ -50091,12 +50091,12 @@ VCMPPD_256_0xD(reg) - 52ae02167b57f73a.48972bb13486dbf3.f2b2b5d59486a565.881a8a257c55cba0 - 773040464aef8cb2 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 937588ffc91fb393.4e43cc8c2b006e79.c289c3e4f2915633.1713c5dbec7f53ff - 2080c16ac7281376.ec6ddfd390aad2c3.7e7f18376f3c2ba7.07a98b50bb344cc8 - 52ae02167b57f73a.48972bb13486dbf3.f2b2b5d59486a565.881a8a257c55cba0 - 773040464aef8cb2 --VCMPPD_256_0xD(mem) -+VCMPPD_128_0x10(mem) - before - aeb8289f420d4d2a.864a466f82379a89.3f8d2a1033a14533.7a6d982afefc0019 - 0a7ebe1c7fbcc836.19a289e17754390f.ad1a5adeaa06cbaf.72febca249297a6e -@@ -50106,11 +50106,11 @@ VCMPPD_256_0xD(mem) - after - aeb8289f420d4d2a.864a466f82379a89.3f8d2a1033a14533.7a6d982afefc0019 - 0a7ebe1c7fbcc836.19a289e17754390f.ad1a5adeaa06cbaf.72febca249297a6e -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - a1f3e53239fadfb4.c7b1fdc09c775a73.5f2d3a736edf1e0e.22cdb7abefdab6ad - 91a487148275f1ef - --VCMPPD_256_0xD(reg) -+VCMPPD_128_0x10(reg) - before - e180885067f73983.943b6ea4efa2f27f.9b012505059454a8.5a4ae213f36a6348 - 6dadb6cc37edcb14.1cf096e95a09b08d.3e3b3d13cc1f39c5.3c2faad16071b46f -@@ -50118,12 +50118,12 @@ VCMPPD_256_0xD(reg) - a8288a300e63bddf.5bd4aea1c04a1c1f.5ca12b3be5acb865.25808c585f1c6c32 - e4859df82bd94c27 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6dadb6cc37edcb14.1cf096e95a09b08d.3e3b3d13cc1f39c5.3c2faad16071b46f - 90760df290e2e34e.15dfd7ef963ed509.0aad41578da34775.e1a80f99d0fdceae - a8288a300e63bddf.5bd4aea1c04a1c1f.5ca12b3be5acb865.25808c585f1c6c32 - e4859df82bd94c27 --VCMPPD_256_0xD(mem) -+VCMPPD_128_0x10(mem) - before - fa81bf664d4128b8.101027f14cfb9471.ca9b98eaf33b42fd.9065f92d6fc7c941 - 43416c8fe35fbd12.2378e2a0e636a5b0.3e0010b84c1d03cd.0243a598c87fb6b4 -@@ -50133,11 +50133,11 @@ VCMPPD_256_0xD(mem) - after - fa81bf664d4128b8.101027f14cfb9471.ca9b98eaf33b42fd.9065f92d6fc7c941 - 43416c8fe35fbd12.2378e2a0e636a5b0.3e0010b84c1d03cd.0243a598c87fb6b4 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - de3d5cbedaee00cf.befaa07da1c764e8.a5d29b90dee045f5.107f8d8955f71211 - 6476bfe7c1d0fa53 - --VCMPPD_256_0xD(reg) -+VCMPPD_128_0x10(reg) - before - 66b7c16e6c75addd.e810969c7277278a.fead9a82f9348a38.50d9a5734fda3ea4 - 72908e8af174695a.94d84de5eee6f7bf.5910a2261d74dae6.70ad2e8956f5c2f7 -@@ -50145,12 +50145,12 @@ VCMPPD_256_0xD(reg) - 18357932fbade6df.47721e6500a88041.d419c9fc3ba0e70b.7eeeab0293bb5a33 - 25f4963c037fe675 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 72908e8af174695a.94d84de5eee6f7bf.5910a2261d74dae6.70ad2e8956f5c2f7 - e44b22a7ed586777.c05ffc8469482b97.2c70b3d6aa14909e.e11bb1bf0e3c8d18 - 18357932fbade6df.47721e6500a88041.d419c9fc3ba0e70b.7eeeab0293bb5a33 - 25f4963c037fe675 --VCMPPD_256_0xD(mem) -+VCMPPD_128_0x10(mem) - before - b1f7f05b7793ed0a.6a9a9095b700213f.05dd3274ce12b2e7.ab57e1066da21cd9 - fdc5344a0d042a1d.35c5623ebedc5342.d56cb19df0937db5.0e76f55edca86bb6 -@@ -50160,11 +50160,11 @@ VCMPPD_256_0xD(mem) - after - b1f7f05b7793ed0a.6a9a9095b700213f.05dd3274ce12b2e7.ab57e1066da21cd9 - fdc5344a0d042a1d.35c5623ebedc5342.d56cb19df0937db5.0e76f55edca86bb6 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 4aed6b470d293970.aba1270e1c618ee4.1f25e4ee9e08cc7c.e98606acdeee4647 - 180ffb7aa9464954 - --VCMPPS_128_0xD(reg) -+VCMPPD_256_0x10(reg) - before - 43a9dc4721d2571e.01df552eb0f78307.0dea120eaa210fdb.51e890ee6213c9cc - c7a0a77fe21daa53.eacc1a96e451f3cd.5829a903f39b7825.06fe99b7ea654ef5 -@@ -50172,12 +50172,12 @@ VCMPPS_128_0xD(reg) - 45d5e8e1ad2012a8.bec3229470d93894.1dbbc87c24eaf163.6856ae59b40de381 - cd30b3082e7a6b3b - after -- 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - c7a0a77fe21daa53.eacc1a96e451f3cd.5829a903f39b7825.06fe99b7ea654ef5 - fe40578e87b37f9c.df7f3569c54346ed.eaabe7599259056e.19347937510a1823 - 45d5e8e1ad2012a8.bec3229470d93894.1dbbc87c24eaf163.6856ae59b40de381 - cd30b3082e7a6b3b --VCMPPS_128_0xD(mem) -+VCMPPD_256_0x10(mem) - before - 258d0432db5d6b7f.f8aa57e2eff19f21.61655e03002084ed.4fa748d944d779b0 - 4d3b1dc2d8c3a077.730d9efee9b161b3.a63164a39223e725.dbb964da8faed900 -@@ -50191,7 +50191,7 @@ VCMPPS_128_0xD(mem) - 79b598c531469834.31a8a938782f76d5.8177be222a8ee2e1.70835c7c1448105c - 31d232f486235fbf - --VCMPPS_128_0xD(reg) -+VCMPPD_256_0x10(reg) - before - bc7792c2931776d5.351af20fc47ad352.2c79652e430542bd.d1880ada680ef1bd - 6ec07a51d6b1904c.30ff056f176233d4.5f07e9ef38fb336e.31f41172187b0727 -@@ -50199,12 +50199,12 @@ VCMPPS_128_0xD(reg) - b26acf627004c007.547842236b7751b6.dc893e810a7476dd.94083cf23b493758 - 50495ab2e7c3c976 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6ec07a51d6b1904c.30ff056f176233d4.5f07e9ef38fb336e.31f41172187b0727 - a1f8e40dec7cebcd.462f4bd2450774e7.259d33e7f19b8694.7e854dd655e0e04d - b26acf627004c007.547842236b7751b6.dc893e810a7476dd.94083cf23b493758 - 50495ab2e7c3c976 --VCMPPS_128_0xD(mem) -+VCMPPD_256_0x10(mem) - before - 8c142102755852d3.fe6334bcfed64ea4.34a4644da4bd876e.df15062c200f40f2 - 25340fce00178e9b.df2f1087337dcf51.c3802f3e0de6d23b.8a8e8751cefa2082 -@@ -50214,11 +50214,11 @@ VCMPPS_128_0xD(mem) - after - 8c142102755852d3.fe6334bcfed64ea4.34a4644da4bd876e.df15062c200f40f2 - 25340fce00178e9b.df2f1087337dcf51.c3802f3e0de6d23b.8a8e8751cefa2082 -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - dea74d8b7e3c0d19.d3701f21007b9d89.5e78ae22dd0e96c2.4777a6bc64ee12bd - 127e3bdb840f9bc1 - --VCMPPS_128_0xD(reg) -+VCMPPD_256_0x10(reg) - before - f5a37924acaf29ef.b6919554aabbc928.9f7c49c7d1ea626c.222c5aed7c2587d4 - 4b305d05785afaf2.5b01f44942932852.708cdb8fb85e0a0f.05c09e2ebb4f7cab -@@ -50226,12 +50226,12 @@ VCMPPS_128_0xD(reg) - c4b5033b6f03502a.7ca3e4662d7bbda6.94e323313987f544.98b6dfc3860a6657 - 00b1d3ee4bb3d284 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 4b305d05785afaf2.5b01f44942932852.708cdb8fb85e0a0f.05c09e2ebb4f7cab - 7272e1e8859d4877.a9c3e55665cfe5c3.a3eacfe35164d21e.e3fff6d1b5983373 - c4b5033b6f03502a.7ca3e4662d7bbda6.94e323313987f544.98b6dfc3860a6657 - 00b1d3ee4bb3d284 --VCMPPS_128_0xD(mem) -+VCMPPD_256_0x10(mem) - before - f7bc5040209f3225.9f45be69d1194eb6.b06c6d67b6a46c27.9fc3d2e40b54b12e - 59a3d1a320d84367.5d6e0fde476a7dc7.21ebfc451d55ad73.20d6d86864554087 -@@ -50241,11 +50241,11 @@ VCMPPS_128_0xD(mem) - after - f7bc5040209f3225.9f45be69d1194eb6.b06c6d67b6a46c27.9fc3d2e40b54b12e - 59a3d1a320d84367.5d6e0fde476a7dc7.21ebfc451d55ad73.20d6d86864554087 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - cd34d0511266687d.f6ba5f4de2ee612c.293c1e43f280d81b.f4c4da931929c939 - ff37ce12ad133be9 - --VCMPPS_256_0xD(reg) -+VCMPPS_128_0x10(reg) - before - f00d0913376271b9.987745733cd3f3a9.897557203e398ed6.79a5a83c9a1239cf - 2392880055a2a754.3ec5af5702be1f25.6ff9d4e91eefdcb6.76f328c28e5c1efe -@@ -50253,12 +50253,12 @@ VCMPPS_256_0xD(reg) - bed93e52b627019d.8ab55015d03f4abf.a88c4f11dccecec7.e672fb21d04a5e7b - 123b46d355053321 - after -- ffffffffffffffff.ffffffffffffffff.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2392880055a2a754.3ec5af5702be1f25.6ff9d4e91eefdcb6.76f328c28e5c1efe - f3124547a0601867.9beb89e98034a81e.0592d3151f9d8878.fcf41bbfec6b41d3 - bed93e52b627019d.8ab55015d03f4abf.a88c4f11dccecec7.e672fb21d04a5e7b - 123b46d355053321 --VCMPPS_256_0xD(mem) -+VCMPPS_128_0x10(mem) - before - 5b1978c197a97af2.df326e8f33849ea4.e9ee7ec711edc035.b2324348f20eea50 - 9cd90bd6b341f019.b26bd169b1022b25.926491ec5c4ac7ac.80d2ae25fcea17be -@@ -50268,11 +50268,11 @@ VCMPPS_256_0xD(mem) - after - 5b1978c197a97af2.df326e8f33849ea4.e9ee7ec711edc035.b2324348f20eea50 - 9cd90bd6b341f019.b26bd169b1022b25.926491ec5c4ac7ac.80d2ae25fcea17be -- 0000000000000000.ffffffff00000000.ffffffffffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7a2e482be77e571c.dda821a32791034c.3732533b863e774b.d92bd1865ea396fc - 1b7d83e1ed996123 - --VCMPPS_256_0xD(reg) -+VCMPPS_128_0x10(reg) - before - 91f89a93e25a2de0.cf5cea41383bc150.ee4506dc55bbc748.e923fb3d9ced98cc - 97e81208d67236de.8c9bdf2fd21d4a89.20f10e63f6376a70.578077622e7b3afd -@@ -50280,12 +50280,12 @@ VCMPPS_256_0xD(reg) - c35617ec31d9f350.b27fae44527da8c1.5ba57806ff5140f3.d3aedbc23361f021 - 9916bbd5dfd27c6c - after -- 0000000000000000.ffffffff00000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 97e81208d67236de.8c9bdf2fd21d4a89.20f10e63f6376a70.578077622e7b3afd - 8998e8ad676ebaca.8fb8a1e1d12faef6.d1f736a2a58f2970.5b15429557f3190b - c35617ec31d9f350.b27fae44527da8c1.5ba57806ff5140f3.d3aedbc23361f021 - 9916bbd5dfd27c6c --VCMPPS_256_0xD(mem) -+VCMPPS_128_0x10(mem) - before - 8a1a5fba77517917.a16c9a32cf401e1b.d2bc81437013f517.1c45d2fc9f08eba6 - 8386445d16eba24f.7f276fecdd2d77d8.cc3b96c948fe5023.6e243fee22416535 -@@ -50295,11 +50295,11 @@ VCMPPS_256_0xD(mem) - after - 8a1a5fba77517917.a16c9a32cf401e1b.d2bc81437013f517.1c45d2fc9f08eba6 - 8386445d16eba24f.7f276fecdd2d77d8.cc3b96c948fe5023.6e243fee22416535 -- ffffffff00000000.ffffffff00000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f8c6be8eda9d6b15.abbbfd68bbcfa1d6.b92e771f9301240f.39cf437a3f66b994 - 6a32d1ec116b0abe - --VCMPPS_256_0xD(reg) -+VCMPPS_128_0x10(reg) - before - 9c05630b35211b72.2d324cf437cd83fb.b12dae03c39beb70.663a3bc63f301347 - 2c92f4434914285f.da3509c70c48b71d.2773a0c1ab1e52ab.5bb831a515e502e6 -@@ -50307,12 +50307,12 @@ VCMPPS_256_0xD(reg) - d70d04aeaae3258f.073405698c4d66c8.d2af38568d7a6bb6.903aa4bbad0acb07 - 88d518cba7931ee1 - after -- 00000000ffffffff.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2c92f4434914285f.da3509c70c48b71d.2773a0c1ab1e52ab.5bb831a515e502e6 - 77268000e6d16d2f.d99d73f57419c4a8.68dbcf0e10e51434.7574d5a83029ab17 - d70d04aeaae3258f.073405698c4d66c8.d2af38568d7a6bb6.903aa4bbad0acb07 - 88d518cba7931ee1 --VCMPPS_256_0xD(mem) -+VCMPPS_128_0x10(mem) - before - 3913afc23ad15fd2.a9937bba30d68d2a.40c73c0f6fef59a8.c03cd506bf6c93de - 80bee48e83cf4b06.4904e18e1537e1ad.602292d23a0b5875.8ecea4884144ca58 -@@ -50322,11 +50322,11 @@ VCMPPS_256_0xD(mem) - after - 3913afc23ad15fd2.a9937bba30d68d2a.40c73c0f6fef59a8.c03cd506bf6c93de - 80bee48e83cf4b06.4904e18e1537e1ad.602292d23a0b5875.8ecea4884144ca58 -- 0000000000000000.ffffffff00000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 3b8e1951a53c13e5.64d66a426b703c19.c55f9065f6e36c84.3930c5b6a7db50ef - cf98103ac3b21766 - --VCMPPD_128_0xE(reg) -+VCMPPS_256_0x10(reg) - before - b4357b409fa0ddde.684b1121b6c367e8.96cf86fa1361ba5b.c2da2f0b1fb6fa1f - 46530436d731dc03.99a69775ed3a56de.06e3812b8aef1534.164cde7f9f338456 -@@ -50334,12 +50334,12 @@ VCMPPD_128_0xE(reg) - dd425e9fce6d7707.7c653e593b29f452.108c04a753134e5d.33485e82175e7e4a - b46a26e94622665f - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 46530436d731dc03.99a69775ed3a56de.06e3812b8aef1534.164cde7f9f338456 - df3ea78708f15082.ac6a273965ad9cf3.105e57406ba68751.9d821aae9367c756 - dd425e9fce6d7707.7c653e593b29f452.108c04a753134e5d.33485e82175e7e4a - b46a26e94622665f --VCMPPD_128_0xE(mem) -+VCMPPS_256_0x10(mem) - before - fcb3eece3cc13bc1.9aaa27eac4318b3d.e56156c18aba1b28.62b984cbddc1a305 - e6f1331c1647b99b.74c4fcd486c7c9d1.c32bed5d6f6acda0.6230d418a63dc5f5 -@@ -50349,11 +50349,11 @@ VCMPPD_128_0xE(mem) - after - fcb3eece3cc13bc1.9aaa27eac4318b3d.e56156c18aba1b28.62b984cbddc1a305 - e6f1331c1647b99b.74c4fcd486c7c9d1.c32bed5d6f6acda0.6230d418a63dc5f5 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 157720a8e4349e69.ea39c036e09fb2c2.4d5885e2695dc129.db30d1de62cc5b5b - 0d4f762e8ef74829 - --VCMPPD_128_0xE(reg) -+VCMPPS_256_0x10(reg) - before - 5deadb586920f0ef.1158c1bd11b57eb5.402da585b0f7d576.b2547fa2b6b67b91 - 274cfbc68ed29058.1f5dcfed904bf72a.21028824bc531138.fc4de7470860b04b -@@ -50361,12 +50361,12 @@ VCMPPD_128_0xE(reg) - 98945c232703a7c6.e6021e49faeca23c.f87e35fefa45c896.ae6af1ed2ed67969 - cf258bc639b98623 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 274cfbc68ed29058.1f5dcfed904bf72a.21028824bc531138.fc4de7470860b04b - c7c1d2e6999a6412.1d52c4228004c4f3.ea03647da13fa4b4.061139bc7c671b85 - 98945c232703a7c6.e6021e49faeca23c.f87e35fefa45c896.ae6af1ed2ed67969 - cf258bc639b98623 --VCMPPD_128_0xE(mem) -+VCMPPS_256_0x10(mem) - before - 440e8433b91cfee0.f81295e9d4999723.553b584f1d0e4d33.a5bdf71264f3ba89 - ebf05720cb0c9ccc.42877aa43be86ed3.48c7ee1e02768002.4e0da7257ad5b639 -@@ -50376,11 +50376,11 @@ VCMPPD_128_0xE(mem) - after - 440e8433b91cfee0.f81295e9d4999723.553b584f1d0e4d33.a5bdf71264f3ba89 - ebf05720cb0c9ccc.42877aa43be86ed3.48c7ee1e02768002.4e0da7257ad5b639 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 3bd37b2a13c03ddf.038635a9a8e3c3dd.260b1fcc884971d9.0410bdf81c61ba83 - c95b1d90e0253b75 - --VCMPPD_128_0xE(reg) -+VCMPPS_256_0x10(reg) - before - fae659d7c04cb5d4.9c6bc520829db75f.33a703cbe6a7b990.c95bb28260cca73a - f3fe6f3a5862654c.9f2dd845f13648bd.bcf06d934f548746.602e91b26cc55523 -@@ -50388,12 +50388,12 @@ VCMPPD_128_0xE(reg) - ad061600228c573a.f65f4ed045ce9fc5.4d2502c0109a9a6e.d59124308d4b0c3f - 6db8d056dbf08cca - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f3fe6f3a5862654c.9f2dd845f13648bd.bcf06d934f548746.602e91b26cc55523 - 10f0592345f3878b.1ee532877f98ac25.fcab6e6b7e7668ac.c5523948c74138c1 - ad061600228c573a.f65f4ed045ce9fc5.4d2502c0109a9a6e.d59124308d4b0c3f - 6db8d056dbf08cca --VCMPPD_128_0xE(mem) -+VCMPPS_256_0x10(mem) - before - 6793b8a6cc3b758e.268c9f3c8cb81008.0466a90e61e4dcc6.0daa25ffa04b5737 - a0ee580d7d3883b6.d7d0f1421f03ef9f.22c8bd2cefe62057.9686d393cb15dbb3 -@@ -50403,11 +50403,11 @@ VCMPPD_128_0xE(mem) - after - 6793b8a6cc3b758e.268c9f3c8cb81008.0466a90e61e4dcc6.0daa25ffa04b5737 - a0ee580d7d3883b6.d7d0f1421f03ef9f.22c8bd2cefe62057.9686d393cb15dbb3 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 4053b1cc8d79fde5.51bee2612d280fd9.01c805b8cfe0acd4.7772c26a5f262c77 - 861afa8501847017 - --VCMPPD_256_0xE(reg) -+VCMPPD_128_0x11(reg) - before - cf4aada5ae2c6b1a.5ef562fc25d5e143.d2007851e11ac7d5.7bff30fe59f06c18 - af4cd83601a95b2d.2b47bbf3eb14dab5.fa30c8bc2d5b954b.75c006d4c41c239b -@@ -50415,12 +50415,12 @@ VCMPPD_256_0xE(reg) - 9ff8825b0a530531.422b56e37768fa88.b48482b4fffa6252.5c0f9fe1b0f8650c - 01355cf068c16853 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - af4cd83601a95b2d.2b47bbf3eb14dab5.fa30c8bc2d5b954b.75c006d4c41c239b - 806d75a496877afb.8316399cfe41a468.2798cc0fae77b5e5.ccd602272d708d88 - 9ff8825b0a530531.422b56e37768fa88.b48482b4fffa6252.5c0f9fe1b0f8650c - 01355cf068c16853 --VCMPPD_256_0xE(mem) -+VCMPPD_128_0x11(mem) - before - 9715b23e71d75288.683bfac8f998377a.445590b474969941.fd42e518bc71d93c - fa7b1fb9e844dfd8.3780da55fee24d83.655f62fb11d63cbe.5d1cf1a883685650 -@@ -50430,11 +50430,11 @@ VCMPPD_256_0xE(mem) - after - 9715b23e71d75288.683bfac8f998377a.445590b474969941.fd42e518bc71d93c - fa7b1fb9e844dfd8.3780da55fee24d83.655f62fb11d63cbe.5d1cf1a883685650 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 97092ae38e58d077.5844be84bbb71584.7441be9c99bd82b5.d658f6f8980251a4 - a751e69120be473d - --VCMPPD_256_0xE(reg) -+VCMPPD_128_0x11(reg) - before - 00976f05202a33af.89c8c26af517ad1f.6159bbfdab593ed4.1ab241cdbc7c9c88 - 3c758dc034d150a6.b83e5fcd3a5e1c91.e0a20f4722313b93.4f334c25ee7daad0 -@@ -50442,12 +50442,12 @@ VCMPPD_256_0xE(reg) - d12d79bb0b0110d6.3c7a9cd7ccb5a385.affcaefe13b1a111.d695eaf6f176956c - df0d7548fa87ea19 - after -- ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 3c758dc034d150a6.b83e5fcd3a5e1c91.e0a20f4722313b93.4f334c25ee7daad0 - b9393d2ef93fdbd0.00357ff87839daf9.316ab7cebbca486e.ef905b8f4ccc69b8 - d12d79bb0b0110d6.3c7a9cd7ccb5a385.affcaefe13b1a111.d695eaf6f176956c - df0d7548fa87ea19 --VCMPPD_256_0xE(mem) -+VCMPPD_128_0x11(mem) - before - e8c67970830923eb.e19f3fd304a22b67.4ad9355651dd325f.b8a6f043c5718127 - cc8a715aa70afd0d.46d98be383ae672d.051dc36223bd45b3.a7b279096d96255d -@@ -50457,11 +50457,11 @@ VCMPPD_256_0xE(mem) - after - e8c67970830923eb.e19f3fd304a22b67.4ad9355651dd325f.b8a6f043c5718127 - cc8a715aa70afd0d.46d98be383ae672d.051dc36223bd45b3.a7b279096d96255d -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 94662e2431b884f4.7ad7a1977d39350a.f188b2cd21d7e17c.a72351c91240a8d7 - 701f979b46ddff73 - --VCMPPD_256_0xE(reg) -+VCMPPD_128_0x11(reg) - before - 8faf159de0100ae0.3115eaddcf7ca810.0334641331cf3e79.db470b058429e448 - 5f1dc73d7d6304c7.19018b0779ee5d2d.4f899c37d90159cd.e21b4a79a562593f -@@ -50469,12 +50469,12 @@ VCMPPD_256_0xE(reg) - 87c6b3042f9fb8b9.39bb69625e0e6918.a34f5c247766b5d7.b6356bc58ebf8b5d - 3b1245758ff9c0dc - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 5f1dc73d7d6304c7.19018b0779ee5d2d.4f899c37d90159cd.e21b4a79a562593f - 3eb6a7e6b9652ad7.27f48c8f4a1b5f76.bb24456e125ac2b3.e1d1ec159f90fd8d - 87c6b3042f9fb8b9.39bb69625e0e6918.a34f5c247766b5d7.b6356bc58ebf8b5d - 3b1245758ff9c0dc --VCMPPD_256_0xE(mem) -+VCMPPD_128_0x11(mem) - before - 4e36f511bd4d5835.9599e6037b9fea1c.29229f6bd3d3383e.6357dbc5a4b26de4 - c96bf78535c40f95.c67b3c4f3af0fcaa.d5f5a895c2778815.5888c0bd36c92787 -@@ -50484,11 +50484,11 @@ VCMPPD_256_0xE(mem) - after - 4e36f511bd4d5835.9599e6037b9fea1c.29229f6bd3d3383e.6357dbc5a4b26de4 - c96bf78535c40f95.c67b3c4f3af0fcaa.d5f5a895c2778815.5888c0bd36c92787 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 6b3be3a67150c918.fd9b427f7fb7aef9.cd0f2801848a9a85.4c94aa62f889903d - 0407a7e85f4ab8a9 - --VCMPPS_128_0xE(reg) -+VCMPPD_256_0x11(reg) - before - 60d3f9749b06d15a.4a6ec42b6d7c4494.bb71e93a3d44c612.d1ed971a8e10d476 - bc449c74484a17fd.01e3e73723fdcdc6.0c86a4f3de53ae06.0067c90583a67fc8 -@@ -50496,12 +50496,12 @@ VCMPPS_128_0xE(reg) - e445c67c62981ec7.6bc2e4992b2cfdff.d39d440b3724de32.50606b02a02b163c - 2875d2eb00337bb8 - after -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - bc449c74484a17fd.01e3e73723fdcdc6.0c86a4f3de53ae06.0067c90583a67fc8 - 74a68c5201a1c83d.6d65c8b8aede22db.4a266e14fd6fa283.374a3caf805556a6 - e445c67c62981ec7.6bc2e4992b2cfdff.d39d440b3724de32.50606b02a02b163c - 2875d2eb00337bb8 --VCMPPS_128_0xE(mem) -+VCMPPD_256_0x11(mem) - before - 9b57ee57bc7a4143.676d445d08ba5547.d5c4b6c6b5f21a5d.0137204327ff9ec1 - 86d03930ee0a230c.5b6904618e93ab68.8838ba2b683c3721.323f0028698b1ddc -@@ -50511,11 +50511,11 @@ VCMPPS_128_0xE(mem) - after - 9b57ee57bc7a4143.676d445d08ba5547.d5c4b6c6b5f21a5d.0137204327ff9ec1 - 86d03930ee0a230c.5b6904618e93ab68.8838ba2b683c3721.323f0028698b1ddc -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - 2fbb51de2a3b2e02.03103882ac9b9f3f.39a6484dbc8d5c8e.08cdbaa956e74a65 - 66ea8b1d38cf712a - --VCMPPS_128_0xE(reg) -+VCMPPD_256_0x11(reg) - before - 37a650eedc98472c.a6c4158a6cf3cf89.6f53a3777ce2b64d.ef37cbe394addc8f - d54d0489dfcf0815.0495fa5494257cfb.ba9b40409c11daac.5f6b706005804ca6 -@@ -50523,12 +50523,12 @@ VCMPPS_128_0xE(reg) - eb8a29c970b43f4d.e5be14f20c29ec57.6269fefa3e543c10.d8e710c32574e7c8 - 9ac804810aad8a2a - after -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - d54d0489dfcf0815.0495fa5494257cfb.ba9b40409c11daac.5f6b706005804ca6 - 9d2aa358ddfff291.25fa7b28c1def287.42340a47a9b3480a.630cb3b22c1466ff - eb8a29c970b43f4d.e5be14f20c29ec57.6269fefa3e543c10.d8e710c32574e7c8 - 9ac804810aad8a2a --VCMPPS_128_0xE(mem) -+VCMPPD_256_0x11(mem) - before - 857b0ad7faca0c54.1bba9346377b2cf5.20af419e93122897.758716c3f881f26d - 75cc9eb10fd72970.8904dc3dccdff534.b2977e1872a66075.d9db501072c4a5ca -@@ -50538,11 +50538,11 @@ VCMPPS_128_0xE(mem) - after - 857b0ad7faca0c54.1bba9346377b2cf5.20af419e93122897.758716c3f881f26d - 75cc9eb10fd72970.8904dc3dccdff534.b2977e1872a66075.d9db501072c4a5ca -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - d37760a119f3232f.8f19fb46d1af0929.4b7f1a27a5fcb6b5.005017e317c2f53b - 7b099c417b9409a6 - --VCMPPS_128_0xE(reg) -+VCMPPD_256_0x11(reg) - before - b72833d20fad0bc2.fa69878f4619782b.df7bca307933cd37.0a17709432d74c70 - 0ef7d7026f9a373c.96292cb1086058ca.dd2967435f855c8d.90d6c67f878ccf77 -@@ -50550,12 +50550,12 @@ VCMPPS_128_0xE(reg) - 81d836ef051dfcf8.9d42e042be7ea89e.5394009558c0cebe.60fd637ff6b58b1c - 63fca26c49413c12 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - 0ef7d7026f9a373c.96292cb1086058ca.dd2967435f855c8d.90d6c67f878ccf77 - dec3843d38e6c9bf.8383cbf47dd37f36.e56dd0eb212ff4d6.b98a98d4bf27fbf7 - 81d836ef051dfcf8.9d42e042be7ea89e.5394009558c0cebe.60fd637ff6b58b1c - 63fca26c49413c12 --VCMPPS_128_0xE(mem) -+VCMPPD_256_0x11(mem) - before - 9d53d187d3d7ca03.5482e98573cc0d93.bf34e889e96e902c.83eaf4aba2c129f3 - e9ce6cbcb184f11e.b40d9a691d7e383b.c7235db31aaef30d.d1bba69b9bc0401f -@@ -50565,11 +50565,11 @@ VCMPPS_128_0xE(mem) - after - 9d53d187d3d7ca03.5482e98573cc0d93.bf34e889e96e902c.83eaf4aba2c129f3 - e9ce6cbcb184f11e.b40d9a691d7e383b.c7235db31aaef30d.d1bba69b9bc0401f -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 2c5fd824d750f87d.86f5e3d0971cca65.f52c8465fb4f1876.36fd39b507e68f0d - 060611b8b3244128 - --VCMPPS_256_0xE(reg) -+VCMPPS_128_0x11(reg) - before - 64bb99437e919eeb.d90ea03057885119.b1ea732a9f20aa3e.d4dd2cc4e4c85357 - ab66cbc403b6e300.0a10c4069b06328e.d9f1f183535794d4.07bc33b743c1f93a -@@ -50577,12 +50577,12 @@ VCMPPS_256_0xE(reg) - 69d02256ac5d14d7.644011bfdc057fb2.8b5fa4e2319074ea.dd334b09d06574b8 - 386354403728c2ab - after -- 00000000ffffffff.ffffffffffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - ab66cbc403b6e300.0a10c4069b06328e.d9f1f183535794d4.07bc33b743c1f93a - 3954a5a6de214c16.9932c191bed65807.58545847504ec3d5.6c94142a3247c54b - 69d02256ac5d14d7.644011bfdc057fb2.8b5fa4e2319074ea.dd334b09d06574b8 - 386354403728c2ab --VCMPPS_256_0xE(mem) -+VCMPPS_128_0x11(mem) - before - 57f1abbc839a6a50.96283f3e08f778f0.4506327b129e63b8.ce60d1c092aae3c2 - 18a9cd67d1ca29d4.1ea6f6cb8f7ab40c.1a4f9fb17caebf48.7da2db4d10264c07 -@@ -50592,11 +50592,11 @@ VCMPPS_256_0xE(mem) - after - 57f1abbc839a6a50.96283f3e08f778f0.4506327b129e63b8.ce60d1c092aae3c2 - 18a9cd67d1ca29d4.1ea6f6cb8f7ab40c.1a4f9fb17caebf48.7da2db4d10264c07 -- 0000000000000000.ffffffff00000000.00000000ffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 - ebc75ffee18ddc28.ab4827858c6ca3ff.0b9e4e3b5960d2b0.8f177825d27afa8a - aae302484d69b71f - --VCMPPS_256_0xE(reg) -+VCMPPS_128_0x11(reg) - before - a12059c955eb5fd3.b7c4c8c2db394750.6803988a3af3ce2f.e13b8867051a00e1 - d01a7a16868c2c50.931cea6646d2b906.f01594e38393c111.198cfebd557b974b -@@ -50604,12 +50604,12 @@ VCMPPS_256_0xE(reg) - 467406c1d05d2756.ef084efee2f8a1cf.cc6d1f46534feda1.237a8e984e60f078 - acaea1f530fc2993 - after -- 0000000000000000.00000000ffffffff.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - d01a7a16868c2c50.931cea6646d2b906.f01594e38393c111.198cfebd557b974b - 931c5f9a7ad95b42.5c9943d64062ee77.9dc918fe02d8b753.905d2c2a648e5319 - 467406c1d05d2756.ef084efee2f8a1cf.cc6d1f46534feda1.237a8e984e60f078 - acaea1f530fc2993 --VCMPPS_256_0xE(mem) -+VCMPPS_128_0x11(mem) - before - 08c6e02c256ebb97.446c6af722a5cd38.263587ca4a9d8f39.da4ba52713849fa7 - 138fc7284ac262b0.eb5188a80c3c8993.deec6b27945f74e2.21b0a60dde010910 -@@ -50619,11 +50619,11 @@ VCMPPS_256_0xE(mem) - after - 08c6e02c256ebb97.446c6af722a5cd38.263587ca4a9d8f39.da4ba52713849fa7 - 138fc7284ac262b0.eb5188a80c3c8993.deec6b27945f74e2.21b0a60dde010910 -- ffffffffffffffff.0000000000000000.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - a65e7e249242decf.a112de2c1a873367.4127203f3b68129f.cd3f0b990209f3bd - eb01651694abec59 - --VCMPPS_256_0xE(reg) -+VCMPPS_128_0x11(reg) - before - b2792c49a1c68d08.e6fe45fbed862b2d.67850fd675549837.a443ead4d1c7430c - 7ff5599cc3e61177.457ea548e7dc7c50.4616eaabd9a00231.f8194fa8b8725b67 -@@ -50631,12 +50631,12 @@ VCMPPS_256_0xE(reg) - 9b24d957bd67b444.d04c1ef52bef1e94.bbbd8a882be7d951.e323d6c2ebdd2f99 - 32eff1df6fb663c8 - after -- 0000000000000000.ffffffff00000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 7ff5599cc3e61177.457ea548e7dc7c50.4616eaabd9a00231.f8194fa8b8725b67 - aebfea7d9998b552.9fa91af89d508f64.990f6918e2f8af00.1975c9a90d7616dd - 9b24d957bd67b444.d04c1ef52bef1e94.bbbd8a882be7d951.e323d6c2ebdd2f99 - 32eff1df6fb663c8 --VCMPPS_256_0xE(mem) -+VCMPPS_128_0x11(mem) - before - e2a496ecb50a6d96.a2702495cbdf4cfa.b4332f2dacc4e60d.0a6c486751f9bdcf - cf1042d5d7e70b2e.1fefc7a5608db71f.272ac78a3cdba2fa.e0689f20efbb9728 -@@ -50646,11 +50646,11 @@ VCMPPS_256_0xE(mem) - after - e2a496ecb50a6d96.a2702495cbdf4cfa.b4332f2dacc4e60d.0a6c486751f9bdcf - cf1042d5d7e70b2e.1fefc7a5608db71f.272ac78a3cdba2fa.e0689f20efbb9728 -- ffffffff00000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - d0389beb256aee6e.ebb501e88cb9f869.2a788267fc01e9e2.957709d5047c1c15 - 2c2114a9b3933e01 - --VCMPPD_128_0xF(reg) -+VCMPPS_256_0x11(reg) - before - ba48a8074b8a4778.9b8d41f18828ab6e.f29491f45d4e46e5.72669bbf6327ec36 - 9c38c15c68ed7124.14c7de82399fece9.dfd6688023495880.b8952ded49c0d3ad -@@ -50658,12 +50658,12 @@ VCMPPD_128_0xF(reg) - cda3739c9e231bcd.7c1ee9f9f2e4e4fe.dbb3dccc04a0b7c7.b3e1a97b047840bb - 1e978bb311b03ea8 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 9c38c15c68ed7124.14c7de82399fece9.dfd6688023495880.b8952ded49c0d3ad - 2f3d5b15a446f9b2.16b4ec8c53d96b0a.0ec782f97c366ae8.dacfb3ddcbd75b76 - cda3739c9e231bcd.7c1ee9f9f2e4e4fe.dbb3dccc04a0b7c7.b3e1a97b047840bb - 1e978bb311b03ea8 --VCMPPD_128_0xF(mem) -+VCMPPS_256_0x11(mem) - before - f9bcd6720d8a106a.d3b5045fef101322.24d350b733cc15f0.a1e6716356137cc9 - 1f1e05a21512732d.9dc10ac936971c5c.e99d9db1329cb80d.beab3d2c0e1bf59b -@@ -50677,7 +50677,7 @@ VCMPPD_128_0xF(mem) - bbc4ff09b75edb64.eef2664110a95332.39a3da09d7244676.6a1f6a01231cf25e - b065c4e5b72deea7 - --VCMPPD_128_0xF(reg) -+VCMPPS_256_0x11(reg) - before - bd6e45aa21038e70.e9a1c218893a5831.2cb0b428db4bfa25.7c76c23fb6f5a91b - eb86e9bcfe2a0d64.d3ea5a49d6f356ae.9e9767660bb8a2ae.4d908061c3de6f9a -@@ -50685,12 +50685,12 @@ VCMPPD_128_0xF(reg) - 1f128b787f9d9b7f.47f0f6c05432c46a.8e0fec980924e730.05c46f1ad42914d9 - a477978810a36af0 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.00000000ffffffff.00000000ffffffff - eb86e9bcfe2a0d64.d3ea5a49d6f356ae.9e9767660bb8a2ae.4d908061c3de6f9a - 98f8ac87e92fa830.536b4287bc979107.a0f37b683c7c8778.86bb905b18eb5420 - 1f128b787f9d9b7f.47f0f6c05432c46a.8e0fec980924e730.05c46f1ad42914d9 - a477978810a36af0 --VCMPPD_128_0xF(mem) -+VCMPPS_256_0x11(mem) - before - 41a08693eb661391.db1e81f95b0022fe.8944f2dfbccfac01.c439b7630e3bfc82 - b60bb8267e7dcaea.2a6989771ae57858.f634b3d0107a05f8.9ebbd736e84d0319 -@@ -50700,11 +50700,11 @@ VCMPPD_128_0xF(mem) - after - 41a08693eb661391.db1e81f95b0022fe.8944f2dfbccfac01.c439b7630e3bfc82 - b60bb8267e7dcaea.2a6989771ae57858.f634b3d0107a05f8.9ebbd736e84d0319 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.00000000ffffffff.ffffffff00000000.00000000ffffffff - 9cd6d09342d7566e.ececc51caf628450.c21971d9e92bf8b9.aefa06a08a94d6c8 - 9c4f0e1089e11a38 - --VCMPPD_128_0xF(reg) -+VCMPPS_256_0x11(reg) - before - 9e2c5a37cd58409e.c4ceb046aa33a1f2.19bbf01abd12b145.d8a466c8a7490bda - 10dfe881f18883a5.3538c2313c13ecdd.47fa1ec51d749ec6.8afc0f3ac0a67f0c -@@ -50712,12 +50712,12 @@ VCMPPD_128_0xF(reg) - b3f2b82e4b3c5448.62926d604b916d96.1af373d2467ca81b.2d3f6f53754a7851 - d7c21dd349a976bd - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.00000000ffffffff.00000000ffffffff - 10dfe881f18883a5.3538c2313c13ecdd.47fa1ec51d749ec6.8afc0f3ac0a67f0c - 4eb2b45a92fa21fa.cbe083401384f15a.d3f34b896c14877f.b2ece91a514d0f7a - b3f2b82e4b3c5448.62926d604b916d96.1af373d2467ca81b.2d3f6f53754a7851 - d7c21dd349a976bd --VCMPPD_128_0xF(mem) -+VCMPPS_256_0x11(mem) - before - 8c416f85e877c5e9.9debf269b9d9583c.d719fe7b01461bbc.7646920c463a3c46 - 2888e2556fc02002.67e95c77775e6b81.0443b17e51afb9f9.4438a5a308da80ae -@@ -50727,11 +50727,11 @@ VCMPPD_128_0xF(mem) - after - 8c416f85e877c5e9.9debf269b9d9583c.d719fe7b01461bbc.7646920c463a3c46 - 2888e2556fc02002.67e95c77775e6b81.0443b17e51afb9f9.4438a5a308da80ae -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 859d17ffa2efeca9.0a23b6bd554da9b1.f9ab6ded2cd0b067.a729949944ec07df - f3bf69cff678c301 - --VCMPPD_256_0xF(reg) -+VCMPPD_128_0x12(reg) - before - 21242013db151d0f.fe04d2b188eed690.9cf79ccdaccf4cf4.79826f31f09e81f0 - 8da4b7d08d4f54b4.ce629e32c498bc13.7d00a460c569ee37.222b820dbd51313f -@@ -50739,12 +50739,12 @@ VCMPPD_256_0xF(reg) - 8f257265cecb4475.e336554db41a6e9f.a0e107bea6131974.5f22d13de4941ee2 - aa090369763cd28d - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 8da4b7d08d4f54b4.ce629e32c498bc13.7d00a460c569ee37.222b820dbd51313f - 938b2972abb2a29d.d184f56c74f85b5f.0b8ac9e139a6c929.d072246db0f47c81 - 8f257265cecb4475.e336554db41a6e9f.a0e107bea6131974.5f22d13de4941ee2 - aa090369763cd28d --VCMPPD_256_0xF(mem) -+VCMPPD_128_0x12(mem) - before - 8ff138dd81f855af.ddbe8f15952576e9.e04439bf9f0bb200.9a515a62a83b1cc5 - e9a7eb8522d56373.d9a17aee994c74a4.a4791eb051d6e3ae.5325bf39d9aa0cc7 -@@ -50754,11 +50754,11 @@ VCMPPD_256_0xF(mem) - after - 8ff138dd81f855af.ddbe8f15952576e9.e04439bf9f0bb200.9a515a62a83b1cc5 - e9a7eb8522d56373.d9a17aee994c74a4.a4791eb051d6e3ae.5325bf39d9aa0cc7 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6cacbb22941f0f93.4b79b0cbce33c2a2.f08cd7bc7c2bfb9f.762dac313f8fa590 - 98f82c29aa1cc7af - --VCMPPD_256_0xF(reg) -+VCMPPD_128_0x12(reg) - before - e958ad05b621c630.4c94d0ef9da52548.7905f1a8360b8b3d.3101a4af2dcd5a3a - c6992c2ffe29debe.1279549fab7bb64e.c40bf15d4de00fcf.a9ce61d0157996d2 -@@ -50766,12 +50766,12 @@ VCMPPD_256_0xF(reg) - 95ed1121b4734db4.bc6e965d49483704.26ba2003f5b13b89.ada09c4cfc2194a7 - f23c12803334ce3d - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - c6992c2ffe29debe.1279549fab7bb64e.c40bf15d4de00fcf.a9ce61d0157996d2 - 8c06a4151fc04d06.9929c220dbad7dd4.8ad9ad58ae3e8b04.34bf8a0b513c6b92 - 95ed1121b4734db4.bc6e965d49483704.26ba2003f5b13b89.ada09c4cfc2194a7 - f23c12803334ce3d --VCMPPD_256_0xF(mem) -+VCMPPD_128_0x12(mem) - before - dd6168911182d580.3e9870c15acd1b73.59154d421057a00a.f4f946ccbfc65a0a - 4cd91a6db316649a.e354bb60ac5af2ef.4aea61bb4ce77413.4fe31c1ea8082632 -@@ -50781,11 +50781,11 @@ VCMPPD_256_0xF(mem) - after - dd6168911182d580.3e9870c15acd1b73.59154d421057a00a.f4f946ccbfc65a0a - 4cd91a6db316649a.e354bb60ac5af2ef.4aea61bb4ce77413.4fe31c1ea8082632 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 22f58332b1410d0a.912f0a4bc63fafd1.9d4d951995b74bdd.21e8c40d4445af2a - 4e9b90823057e651 - --VCMPPD_256_0xF(reg) -+VCMPPD_128_0x12(reg) - before - 7a28fa31aac7b8d0.413132f445f19fb7.53e60570c5ae0c8f.b573add7da0fc7f6 - ffddff844f206252.54f02d300c16a9ec.80dddd43e18162ba.92f712d804189dc1 -@@ -50793,12 +50793,12 @@ VCMPPD_256_0xF(reg) - 88eaccca88bd2d11.c22bf8c6a6f418a0.8ebf16a7df81ec08.0c49b857796a4a20 - 61aff0adfccc990b - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ffddff844f206252.54f02d300c16a9ec.80dddd43e18162ba.92f712d804189dc1 - 3b049ce8baee1f84.3500f0d223bee8d6.75618f31b643eefe.11a5420930dd8a6c - 88eaccca88bd2d11.c22bf8c6a6f418a0.8ebf16a7df81ec08.0c49b857796a4a20 - 61aff0adfccc990b --VCMPPD_256_0xF(mem) -+VCMPPD_128_0x12(mem) - before - eaa266f6d40e3259.44db8b94541ac6a6.d53ec0f8b0c4f477.27416e0ff8c59884 - 84f097201e3dd236.c923d6b4ba9126ef.4b05c4555d3b3987.9c3493d79e9e2d1e -@@ -50808,11 +50808,11 @@ VCMPPD_256_0xF(mem) - after - eaa266f6d40e3259.44db8b94541ac6a6.d53ec0f8b0c4f477.27416e0ff8c59884 - 84f097201e3dd236.c923d6b4ba9126ef.4b05c4555d3b3987.9c3493d79e9e2d1e -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 5cc817c4758f164a.a2e7fca3c7f92f4b.d1df703c124cee00.899c3634ff380559 - baa9aba0f312c053 - --VCMPPS_128_0xF(reg) -+VCMPPD_256_0x12(reg) - before - 3758dd1de2b0541b.51eb5e16bbca32db.adfcd04aa5044fb7.9889119e52fed5c1 - 5cf3c8146b9cfe5c.c7984ff9e32245a9.f39720f68e572686.3217dedba586156b -@@ -50820,12 +50820,12 @@ VCMPPS_128_0xF(reg) - 0d1fbb23b59483fc.a6bf211d46573fb3.9b92200dee0bedff.4f10ec92f64a9029 - 8a1125e52c9d4295 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5cf3c8146b9cfe5c.c7984ff9e32245a9.f39720f68e572686.3217dedba586156b - 84c769f22765fac3.9a9a675708a30be3.ce05e6131d80f264.7b5653de28f16a2a - 0d1fbb23b59483fc.a6bf211d46573fb3.9b92200dee0bedff.4f10ec92f64a9029 - 8a1125e52c9d4295 --VCMPPS_128_0xF(mem) -+VCMPPD_256_0x12(mem) - before - 08277bc2e5f63d9a.5249ba14aeb7d6b2.c7d1f938ba4c9e45.b689c9519e825400 - a51d69163e623c62.ae8f622fb0592f92.d99d6b93808de4c7.7b38dd49c8736216 -@@ -50835,11 +50835,11 @@ VCMPPS_128_0xF(mem) - after - 08277bc2e5f63d9a.5249ba14aeb7d6b2.c7d1f938ba4c9e45.b689c9519e825400 - a51d69163e623c62.ae8f622fb0592f92.d99d6b93808de4c7.7b38dd49c8736216 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - acd7fece3da13af2.20a39e973e4ce27e.40930fb86f251445.74ea3709fdf1662b - 5f8575a93e97d484 - --VCMPPS_128_0xF(reg) -+VCMPPD_256_0x12(reg) - before - 64070eae6be5d99f.ce359c0c1c8cb011.ec082abc01b4b4e2.4d55385bd193769a - dfbbfe841d69b22b.7fa1c36f0bb91aa4.41ba4fbc3dcb7b20.bb00ebeef47eae8d -@@ -50847,12 +50847,12 @@ VCMPPS_128_0xF(reg) - a7edd4538640d040.fedb9959860bbdd9.f23455fd8f39dcd9.2a45e094eff89400 - e3761a7ffea0b9d8 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - dfbbfe841d69b22b.7fa1c36f0bb91aa4.41ba4fbc3dcb7b20.bb00ebeef47eae8d - 2cef4197f3ae9bd2.9beaeee5253535d8.79050a038e1e75e4.6662a45df5f17a4c - a7edd4538640d040.fedb9959860bbdd9.f23455fd8f39dcd9.2a45e094eff89400 - e3761a7ffea0b9d8 --VCMPPS_128_0xF(mem) -+VCMPPD_256_0x12(mem) - before - 6cc1ce0b40f4a4fe.ac03b22474ac8c23.843f41b64b476ed2.06942e16dca6edac - a3f27822ce00139e.977bd777597d0c24.08e461ea8ff603f0.137290bb12f3e309 -@@ -50862,11 +50862,11 @@ VCMPPS_128_0xF(mem) - after - 6cc1ce0b40f4a4fe.ac03b22474ac8c23.843f41b64b476ed2.06942e16dca6edac - a3f27822ce00139e.977bd777597d0c24.08e461ea8ff603f0.137290bb12f3e309 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 - 8835a0a5447267ff.8ec4e74f76804737.7f1cf98407dacc49.83d3e054a75b720e - a0eec5223f8e8210 - --VCMPPS_128_0xF(reg) -+VCMPPD_256_0x12(reg) - before - 24b7242b2ed1674b.eddf15e963efc617.532ccaace6c97a9f.294869c3712878dd - 6c78f8da13ae5e6b.709f70693f55975a.6e28e43bbca761d7.41e34287cc18f845 -@@ -50874,12 +50874,12 @@ VCMPPS_128_0xF(reg) - b916f0df286c720d.3c91c9cda1098110.1507ad9b0c543966.2f9a1b52bf0f6743 - bd4d15308f2ecd31 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6c78f8da13ae5e6b.709f70693f55975a.6e28e43bbca761d7.41e34287cc18f845 - d47f3e9d87b3a31d.eb412d11f5af97f4.3a02316795a7378b.a5bbfebd31b709ad - b916f0df286c720d.3c91c9cda1098110.1507ad9b0c543966.2f9a1b52bf0f6743 - bd4d15308f2ecd31 --VCMPPS_128_0xF(mem) -+VCMPPD_256_0x12(mem) - before - 29a16645bf20f8a3.758a0c0c926306e6.3e5abf895e7012db.5a845545be3ba315 - 515f8c7c6bf0a4c6.65278d9060269c55.cc6a8b3148ef0680.64c224d047e7b144 -@@ -50889,11 +50889,11 @@ VCMPPS_128_0xF(mem) - after - 29a16645bf20f8a3.758a0c0c926306e6.3e5abf895e7012db.5a845545be3ba315 - 515f8c7c6bf0a4c6.65278d9060269c55.cc6a8b3148ef0680.64c224d047e7b144 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 415144ffa45a6ece.510baf4e9a3fbda3.008a95f61566070a.3cb9273a4bbfa8d0 - c00854f0ff020985 - --VCMPPS_256_0xF(reg) -+VCMPPS_128_0x12(reg) - before - 7b4a9838f93cfd6a.c11bce256a0d040b.05ea475f3dacc1db.5d33ccea30778b47 - c7ccef7cd6f6c12a.6d821d1c1cce0ba8.5d223578b514b658.b852c97be8cf620f -@@ -50901,12 +50901,12 @@ VCMPPS_256_0xF(reg) - 86bac6aca620a9ee.b452f630b1ab5ab5.69cd006e920765d3.d3210621a189f8ee - 4d6a3d0dd9022f5d - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - c7ccef7cd6f6c12a.6d821d1c1cce0ba8.5d223578b514b658.b852c97be8cf620f - 02d8552a31be9172.1f50abd1d5aa3ed3.b5ff74039e04d8c7.ebb308945a7c478d - 86bac6aca620a9ee.b452f630b1ab5ab5.69cd006e920765d3.d3210621a189f8ee - 4d6a3d0dd9022f5d --VCMPPS_256_0xF(mem) -+VCMPPS_128_0x12(mem) - before - 33582b4620f4a808.b0c03f70d2a64549.08537a26cde01b7c.d5d8d62430a99729 - 62b84bb78f6b2118.dd34bbe151dea030.f821b19d44523d54.556cf1901277aa75 -@@ -50916,11 +50916,11 @@ VCMPPS_256_0xF(mem) - after - 33582b4620f4a808.b0c03f70d2a64549.08537a26cde01b7c.d5d8d62430a99729 - 62b84bb78f6b2118.dd34bbe151dea030.f821b19d44523d54.556cf1901277aa75 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff - 0cfe12f25b14fe1d.ab9aac7ab6928551.17502cc2b52292e6.005de63f13c5679c - e453b8596a5d88d1 - --VCMPPS_256_0xF(reg) -+VCMPPS_128_0x12(reg) - before - 4c02c0db76507bab.3e7bb093ef5fda6a.06231a7ad42688e2.ff496948e7983ef7 - 93b6f92fd22a7bd6.299b711d1c5fa6cd.d24b7ad8b49c3ab0.f23e4900e47c3bca -@@ -50928,12 +50928,12 @@ VCMPPS_256_0xF(reg) - 335cee01ecc695d2.9aef4a98b3abf986.30a7055a2c5a9dad.694ce6b6b1be1660 - a5fc9b8cb9356c7c - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 93b6f92fd22a7bd6.299b711d1c5fa6cd.d24b7ad8b49c3ab0.f23e4900e47c3bca - 17bb5fc21b78c5ff.a928d07aff1f1c72.6c5ecafef37ed764.ccfb49d6c9da4488 - 335cee01ecc695d2.9aef4a98b3abf986.30a7055a2c5a9dad.694ce6b6b1be1660 - a5fc9b8cb9356c7c --VCMPPS_256_0xF(mem) -+VCMPPS_128_0x12(mem) - before - 5cd9e444fc4b0408.42e7a257e19e27fa.d8bc5961550ff835.7a742856fcbcc635 - 6aad3ecb960a9831.a2a6782f978eb624.3f5b7bc30158d6ab.a60f2d60ff2e8fa8 -@@ -50943,11 +50943,11 @@ VCMPPS_256_0xF(mem) - after - 5cd9e444fc4b0408.42e7a257e19e27fa.d8bc5961550ff835.7a742856fcbcc635 - 6aad3ecb960a9831.a2a6782f978eb624.3f5b7bc30158d6ab.a60f2d60ff2e8fa8 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - fb6d11f242b9a60a.c1f3771ab5e4be2d.f83ee5ffe4c71f99.15e2d24a0b78f002 - 0fb26a034c670041 - --VCMPPS_256_0xF(reg) -+VCMPPS_128_0x12(reg) - before - 5b80d4793197a01b.36f1836a8bbf9811.391899045462ae64.021b26b15305016a - 559a0e1853940b3c.389cf5619ba07764.70a3cb2124278c4c.a4f968ab3c58b2b2 -@@ -50955,12 +50955,12 @@ VCMPPS_256_0xF(reg) - c2dddf82c4273506.019bcb798321eba1.8f1654a4c6b802e1.25ebe428eb697155 - bb971682e941f609 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 559a0e1853940b3c.389cf5619ba07764.70a3cb2124278c4c.a4f968ab3c58b2b2 - 584a134d50eb7e52.dd3ce4c28f68ff30.c3de0bddc1c09492.bca529dabbcaee9c - c2dddf82c4273506.019bcb798321eba1.8f1654a4c6b802e1.25ebe428eb697155 - bb971682e941f609 --VCMPPS_256_0xF(mem) -+VCMPPS_128_0x12(mem) - before - 597439d5d05c3ae3.ee9f6e244ad56c07.7f86257291d9f8e2.2e98a2e3cf9b11e6 - dd50cb0cbcc8f910.38dcbda07f7f5eff.35c97199d89ce220.feadf20479f6fe4d -@@ -50970,11 +50970,11 @@ VCMPPS_256_0xF(mem) - after - 597439d5d05c3ae3.ee9f6e244ad56c07.7f86257291d9f8e2.2e98a2e3cf9b11e6 - dd50cb0cbcc8f910.38dcbda07f7f5eff.35c97199d89ce220.feadf20479f6fe4d -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 - 033029d516c1d611.96f687d263fd6685.b587c7217b6f3c42.9cc884a01e4161ef - 2364bff3514a4f82 - --VCMPPD_128_0x10(reg) -+VCMPPS_256_0x12(reg) - before - 4bc6ecd995fa0b28.5ecdee40bb676d3d.616cfc614be8f46c.3899cb5b1099247e - 6e3805be85ddd18a.0e98103fd58c6f6d.bb8c1f7951002dfa.6134af724cfcd966 -@@ -50982,12 +50982,12 @@ VCMPPD_128_0x10(reg) - 187ef035db6e6938.dce760a9db88a283.88fd64f42ae993be.1a3008ec2aa398ec - 602a752505fe1be2 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.0000000000000000.0000000000000000 - 6e3805be85ddd18a.0e98103fd58c6f6d.bb8c1f7951002dfa.6134af724cfcd966 - e907080ebd80dc56.ee5c0dbe813e97ca.ffa3ee8612d24edc.0e22f0544ba71627 - 187ef035db6e6938.dce760a9db88a283.88fd64f42ae993be.1a3008ec2aa398ec - 602a752505fe1be2 --VCMPPD_128_0x10(mem) -+VCMPPS_256_0x12(mem) - before - bddcb2edf7c35b35.57ebb99f7833b4dc.b20385edfd764cc1.b4e57d2f33d1374b - 0e113b2f1dfe1310.029960b8325cf9ed.4e7df974061550b3.dda935a3cc167730 -@@ -50997,11 +50997,11 @@ VCMPPD_128_0x10(mem) - after - bddcb2edf7c35b35.57ebb99f7833b4dc.b20385edfd764cc1.b4e57d2f33d1374b - 0e113b2f1dfe1310.029960b8325cf9ed.4e7df974061550b3.dda935a3cc167730 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - f83822d17208de11.0ce634a86c075f07.43bbbaff3794595e.9af173e718eabbb0 - e60df18e038f36a3 - --VCMPPD_128_0x10(reg) -+VCMPPS_256_0x12(reg) - before - 9f34ff1feec23d9e.49c17709daef688e.231e5a5723a2f869.561701db978bd66f - 23b29705720e0c4d.fdfe096ce57c5b43.16c74e6567d07ce9.9d0085ab4d649de3 -@@ -51009,12 +51009,12 @@ VCMPPD_128_0x10(reg) - f8e25980bb23f075.ffc4d25f57b86c08.009b8c4d041730f0.3bad38d62ae5fca2 - 49085f0a89a60b46 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffff00000000.00000000ffffffff - 23b29705720e0c4d.fdfe096ce57c5b43.16c74e6567d07ce9.9d0085ab4d649de3 - ccd2b7ac2d00de5b.f1bb53e4b0bb735e.412d0a3dd31e2531.f544c45a75286be5 - f8e25980bb23f075.ffc4d25f57b86c08.009b8c4d041730f0.3bad38d62ae5fca2 - 49085f0a89a60b46 --VCMPPD_128_0x10(mem) -+VCMPPS_256_0x12(mem) - before - fc21b5e3ad7855fc.012c7bedb7037e47.04e400c7f4800170.af5fcf009547d8d0 - 30c4b44bb26696f1.44fd195fbe2dc47c.dce85b0aa61eefc0.aac3cfc2233a5a7e -@@ -51024,11 +51024,11 @@ VCMPPD_128_0x10(mem) - after - fc21b5e3ad7855fc.012c7bedb7037e47.04e400c7f4800170.af5fcf009547d8d0 - 30c4b44bb26696f1.44fd195fbe2dc47c.dce85b0aa61eefc0.aac3cfc2233a5a7e -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.00000000ffffffff.ffffffff00000000.0000000000000000 - 8bd7a27cd2c6ec46.e964b5025a8c66c1.75cd86ceb30ec6ca.f39ef724a49bdcf2 - faad179bcf215311 - --VCMPPD_128_0x10(reg) -+VCMPPS_256_0x12(reg) - before - bc8de4d1679a95ad.6adf881c245179ff.0292ac0b28da3b28.ee454d27467726dc - 97895a330792db73.3aa108fdc729eda6.c5760eca70a1b8a4.abd0310a5de7cf86 -@@ -51036,12 +51036,12 @@ VCMPPD_128_0x10(reg) - 04093227d1306a2b.1d83c72e72ec7970.b9940416e0cb9885.5c533d1e8609eb55 - 08e25d27d0d3d6d1 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.0000000000000000.ffffffff00000000.ffffffff00000000 - 97895a330792db73.3aa108fdc729eda6.c5760eca70a1b8a4.abd0310a5de7cf86 - e6ee762b4c96640e.d7e99f09d8580468.8e5ed7a9cf6e18df.863cad6314697cf5 - 04093227d1306a2b.1d83c72e72ec7970.b9940416e0cb9885.5c533d1e8609eb55 - 08e25d27d0d3d6d1 --VCMPPD_128_0x10(mem) -+VCMPPS_256_0x12(mem) - before - 68b68a6b0dd4fa95.4f248c9232ef2a75.e83bfe57b2f009eb.a265907c40467344 - 57993fd4591812cf.218b7fd80c5ce099.14dcc070b3716f05.a51d77478b6be7c5 -@@ -51051,11 +51051,11 @@ VCMPPD_128_0x10(mem) - after - 68b68a6b0dd4fa95.4f248c9232ef2a75.e83bfe57b2f009eb.a265907c40467344 - 57993fd4591812cf.218b7fd80c5ce099.14dcc070b3716f05.a51d77478b6be7c5 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.ffffffffffffffff.00000000ffffffff.ffffffffffffffff - 52be31ca9195114f.ce7221a59a751d1e.ff0dd1226a17b1c4.697147bc4ee084c4 - e2a6273e00482798 - --VCMPPD_256_0x10(reg) -+VCMPPD_128_0x13(reg) - before - e5f153d50c8a51e1.1698672eb3e870ee.6188c80485391bd7.76341994585504c1 - ce9fc6ed0f313f48.d9b3146756acb3b2.eb1bf8ee59dc001a.be75dba5773f1d0d -@@ -51068,7 +51068,7 @@ VCMPPD_256_0x10(reg) - f9fc7df3a4ca2d7c.76d9b66394ef97c7.ca77add0b1ea0692.b29c9342e4e1bad4 - c254725167df5627.cbd7c80e89bdd857.58e8e4142af06aeb.3074be58ba489441 - 13cbd6d2157f6a80 --VCMPPD_256_0x10(mem) -+VCMPPD_128_0x13(mem) - before - 366b599b1292f7bf.85f3a375f6fff7f5.b379c75252203291.f2ba98285f7968d3 - 7721c2a1cd8ef628.9d240bc9eab34c93.098a2d1c0a26609f.f439c476ed113cf4 -@@ -51082,7 +51082,7 @@ VCMPPD_256_0x10(mem) - bfff3811ea6f3c29.417071b6760c01ee.742d23f3b94a2be9.a16c7a7582a05492 - 03b9fafdc1ae1068 - --VCMPPD_256_0x10(reg) -+VCMPPD_128_0x13(reg) - before - 3de3e470c9fc9327.7fbe3b53856bfb1a.8322662646c9d903.3f57aad7e87f3f7d - ab36333a3515177c.cbc415814d801de5.8c978377ed4b5598.ea208af276861896 -@@ -51095,7 +51095,7 @@ VCMPPD_256_0x10(reg) - a9fee3c7a286d812.81db42885fba5eb7.b71bc315051eb058.4f543e2f7f6c725f - 9486f183abd91496.7bd03c52d6247abc.5ff9236d2dce27f0.4cc1417a203c0904 - bb3212bf750298b3 --VCMPPD_256_0x10(mem) -+VCMPPD_128_0x13(mem) - before - 79722aea99cbdc95.c61c57dbec9c05b4.976f81cdcfca2c1f.e27f9de9fee8f60b - 634f06e7a8a291d9.9c0a1339025be817.af848ce365b8310c.9af72ff617f75956 -@@ -51109,7 +51109,7 @@ VCMPPD_256_0x10(mem) - 260bfc07faac3c32.a3217bbb1bfa735e.473fe495da9e2237.1df088748b26c92a - a00948bd1e5d4f0c - --VCMPPD_256_0x10(reg) -+VCMPPD_128_0x13(reg) - before - c8450e4768ba58cd.b9820d0373f6ab9f.8de21eb757f2939a.7e7e2a08f1ae88cd - f2efd87e05c8211a.e6c6d380497e7b1d.8b2b076ad71695cb.226226c715362f9d -@@ -51122,7 +51122,7 @@ VCMPPD_256_0x10(reg) - 7b54a1ce9013e69f.8aa2c86c965167d7.f94a314037f1b49f.0fb854be6242d6d4 - bdc165a3a528e307.81e16ab2767b2cfa.338998a514102ebf.214c30d9f6de379d - 35ea3604ea170f25 --VCMPPD_256_0x10(mem) -+VCMPPD_128_0x13(mem) - before - 255de32b5cf81997.15802169e19253fe.a750343d060686b2.9535380509fe3dda - ce73b23b678e1320.dfddd08ce0dd7331.d8bba3fb6100312a.7a9a0eccb3471d9a -@@ -51136,7 +51136,7 @@ VCMPPD_256_0x10(mem) - bbb3a7c2bb06c226.3aa6f79a9448b2fb.ccb55cbdea6f680c.42be4940931b44ba - db16a6c503be0273 - --VCMPPS_128_0x10(reg) -+VCMPPD_256_0x13(reg) - before - 6956296096ed8181.b776c4123b01effb.82a8675d827f49e9.46db9f994ffc6cce - 47cbcc7fea33fe91.dc0bf4f9c4e0fb96.ac79bb2ca2c880c2.3b2e7658f027b201 -@@ -51149,7 +51149,7 @@ VCMPPS_128_0x10(reg) - d0c18d8d9b1cb54f.063eb26573afa224.1465ed7591ae9334.87785de4e9fdf4d0 - 628468f64435e266.11da7a41637ba0d1.16b8fca3eabebde8.0586d12a5589ef68 - 93244d1750d75ef4 --VCMPPS_128_0x10(mem) -+VCMPPD_256_0x13(mem) - before - 0c1e4d96f7f3fea1.576057268109c183.d9adc979b14fb0c8.0ebee1224a823b8d - 4c3f4d9266ea8b9b.0da05789ef248d51.3a8119f978378f35.58c3995e4c8949cd -@@ -51163,7 +51163,7 @@ VCMPPS_128_0x10(mem) - 912a3eb609975b23.27807c98cc60deb2.365fb182e375aa25.52f974bda88904cf - bac28eb93a9b29ea - --VCMPPS_128_0x10(reg) -+VCMPPD_256_0x13(reg) - before - e4ba6b21de1ece51.4d8b27b57666160b.45b7991c749adc9d.8a01f063bee25dfe - 2c2d0863309f2eaf.414400e21a3eaeef.9283b684bc4ab7ea.e7d4223b8394cffe -@@ -51176,7 +51176,7 @@ VCMPPS_128_0x10(reg) - ed6660e9cda986b0.48214629122ddffb.6c30d13a40feab44.28a6c2f84e96bc51 - 85b36f2151c91201.3dee7377793e645c.2d09e5ac9d42f658.2b414c843af4df22 - cb723ccd63bbf59e --VCMPPS_128_0x10(mem) -+VCMPPD_256_0x13(mem) - before - e3050ebee6f6baf1.4f5e3176578a0d4e.fe7605b66c7dfa3e.325cee456ea0d2d1 - 51c63f43dfb1ea46.a7b4a2537b78b542.668777d306f75dcc.d773e87150a67c5c -@@ -51190,7 +51190,7 @@ VCMPPS_128_0x10(mem) - 9b01abbaa0d979a8.7091835a900cf6d2.9a6fec59a1c9789f.7220a032b4d92957 - 1f4e569f6f1da41f - --VCMPPS_128_0x10(reg) -+VCMPPD_256_0x13(reg) - before - dc71ed4fab38dda8.2f13de83a15e510d.99b0ea5cb7cb09c5.1edfe698d93aa93b - 05d462ae03b70f9f.8983609087928324.c1aaf0966ee6b710.ba07b16629159734 -@@ -51203,7 +51203,7 @@ VCMPPS_128_0x10(reg) - f6c5b029132577b0.831dabce6f83cc1a.43ca92754eeb3d5e.48b2c8aead67fdb5 - 0b8ed22a780e5186.faad3d27743de81b.7a5dcb66f665d65c.a5aea85c803a98eb - aec5cb5cbe9d2401 --VCMPPS_128_0x10(mem) -+VCMPPD_256_0x13(mem) - before - 3dc4af9b84995c24.a07cc71fceffd9ce.cbff9189b3cb9352.c4af97d3ffe1c0b5 - 2f77cf03ee3cfd80.11db8872b0834a33.d0de24df473988ec.7b0cf22a08ea3516 -@@ -51217,7 +51217,7 @@ VCMPPS_128_0x10(mem) - ad29b4021ba56a91.f71b62e78975da07.ea77f317e0e643f8.a417464283d4b29f - cd5c37dc2fcd321f - --VCMPPS_256_0x10(reg) -+VCMPPS_128_0x13(reg) - before - d5dda70f49832e57.f0bf70701782ad9e.239473e0b8fc71cd.b6c828d11c3d80c1 - 16e492476d83e1f2.063959b926374994.9caf41e8e445e161.27d78b2f1ea5f89d -@@ -51230,7 +51230,7 @@ VCMPPS_256_0x10(reg) - edbef4f03858899c.cb64eac865cdfa9f.bdb6c96ba8de676e.1970991d022967b8 - b6b7ca77468e6002.1c0a9f89ef527cea.e2f605d5a1523fa1.685ecd87e3d5893e - f06fa25addb6195a --VCMPPS_256_0x10(mem) -+VCMPPS_128_0x13(mem) - before - 8d6d97800dd7d438.cd1a0f4632b2a3d0.d3f8f5e8e1d18aa2.66baf3936a2ea4a6 - 1c2525e78e447606.8f35bfcb984f8db2.cdf967d15657e1f2.a7508e0fa0fdd328 -@@ -51244,7 +51244,7 @@ VCMPPS_256_0x10(mem) - 7af30024f6335e1c.7fbf51a34425495f.fa688ff13aa5590d.cc1ebcf5c1a47e55 - 69ee4737e4957358 - --VCMPPS_256_0x10(reg) -+VCMPPS_128_0x13(reg) - before - 31bf6ee8e3a92188.03a145d313ce1cbd.66c62bcfc2769384.e56e3d01e286f22f - 82dd30735b6dc492.ed381472f3e4b0fc.67b4605f2a71746b.83b7f84a7d9dc49a -@@ -51257,7 +51257,7 @@ VCMPPS_256_0x10(reg) - b6948646e86c9a22.1486eaedaf83d806.ded4ecc119a029c3.af103bba28f68a79 - 2b2f6ecd2532dde3.5455423166b74e07.2774cc602a91ee36.4744823bfe9e01f9 - 262149bb1ba0e546 --VCMPPS_256_0x10(mem) -+VCMPPS_128_0x13(mem) - before - 28710c259c08f28b.3bfce272ae4cca82.89729728318acf2b.9edffba8fad0fe70 - 290248659ce3e3f5.4445e0a220459cab.8fa967bf2e0a169c.9f60740624e8971e -@@ -51271,7 +51271,7 @@ VCMPPS_256_0x10(mem) - 971218178b1f64e6.ac7e68542d05e348.7d94667e2d3fe91c.afd73aaff8d34e86 - 75657ed4d9bfe697 - --VCMPPS_256_0x10(reg) -+VCMPPS_128_0x13(reg) - before - 3639fcbd85b4f5cb.bd2aa561b2996cc5.c506eaad00e4cf16.1ee18d7e670ced82 - 4da1b2d8983fb8cf.51b19931c8b5487a.453ae5422cd2901c.ff771ece42b6a8e6 -@@ -51284,7 +51284,7 @@ VCMPPS_256_0x10(reg) - 16e79c90adeb6a4f.31757274ea7fb52e.8968557e4c5c6309.fe239559da47d575 - ec59b451604448f6.3840ab1433046f10.eeda36ccfd0d8487.f6b16f0d4cce315b - c2ed26d5b35477c3 --VCMPPS_256_0x10(mem) -+VCMPPS_128_0x13(mem) - before - 40a2389d2ce764d9.2d41f8874ed68e71.41e0c0ffc04f3149.cedd859ada712f43 - 4a9e2052d392b4cb.34ec639e122e786c.2a1f2e1fac6cb808.86bd3c5380159fe8 -@@ -51298,7 +51298,7 @@ VCMPPS_256_0x10(mem) - 7696632e18616ded.03ba9e1f8f5e2790.08ac01b3134e05c3.ee43d837944ac19f - 5682b3393bf4ea09 - --VCMPPD_128_0x11(reg) -+VCMPPS_256_0x13(reg) - before - 06cde8d61b0dca0d.502bb62fee9d4d76.837566627e4e6311.b5935ffec52b4217 - 5a72727bcf229a56.2636cfcb6322808a.3a244635b53334c2.b149062f470a34a0 -@@ -51311,7 +51311,7 @@ VCMPPD_128_0x11(reg) - aebb4d92f3bd9991.d5832af090fac154.82113906cd9ad44e.d99c7032b5f79789 - 5ef47589246d0269.3add43899434cd01.b9893b3f640e8062.07561bf32afe26ff - 1844825fc22c9e2e --VCMPPD_128_0x11(mem) -+VCMPPS_256_0x13(mem) - before - e93221609a8cbb41.c66be6cbfebb108b.2f12978288d961bc.39d7494e161b74aa - 54eb74e3cd2b3965.426b9dc41b35ffa2.91eca0c78af736b2.60495d9e7e4eecd1 -@@ -51321,11 +51321,11 @@ VCMPPD_128_0x11(mem) - after - e93221609a8cbb41.c66be6cbfebb108b.2f12978288d961bc.39d7494e161b74aa - 54eb74e3cd2b3965.426b9dc41b35ffa2.91eca0c78af736b2.60495d9e7e4eecd1 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6bf22821b653468f.e534ca8b95db7462.0dc2c7e527cc9afe.0ec58cb1e253566e - 4f679f4c153ec03d - --VCMPPD_128_0x11(reg) -+VCMPPS_256_0x13(reg) - before - a55ca8d86f7e9e9a.cfd780b3a4f44eec.c5973931281e7163.de56db96f99ba0ac - 6df0a5c18c9f2d33.3fb87c765d04a70a.29b1dc3e6fbe4009.8cbf96434912d844 -@@ -51333,12 +51333,12 @@ VCMPPD_128_0x11(reg) - c324685b7cb648c9.ae9e5244a29f3a39.ec42b33e8c3e42f5.ef44ee42d229d2e5 - 5cf7836c42e10b45 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6df0a5c18c9f2d33.3fb87c765d04a70a.29b1dc3e6fbe4009.8cbf96434912d844 - 036f9173072ea6b4.95619958fe8e0c15.6dd1b11e08441c00.f3cb73d9333d00f3 - c324685b7cb648c9.ae9e5244a29f3a39.ec42b33e8c3e42f5.ef44ee42d229d2e5 - 5cf7836c42e10b45 --VCMPPD_128_0x11(mem) -+VCMPPS_256_0x13(mem) - before - 16b0af42a0726640.0a5d26e388c34d1d.663a23276642eca1.044fde089937ee94 - f93bedaf07e7a001.3264c879c6e2f25c.990388eb6583e079.10462feacbbc5c88 -@@ -51348,11 +51348,11 @@ VCMPPD_128_0x11(mem) - after - 16b0af42a0726640.0a5d26e388c34d1d.663a23276642eca1.044fde089937ee94 - f93bedaf07e7a001.3264c879c6e2f25c.990388eb6583e079.10462feacbbc5c88 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - aaf68f0362aea188.980fa57c4a830b4e.e047ffca8511792c.731d30a20c976c22 - 8296d8515305871f - --VCMPPD_128_0x11(reg) -+VCMPPS_256_0x13(reg) - before - f62795c72e2f5321.30bfebc18e18dfa5.8e4bd8c1c81ef759.ab5b08bcdf75965e - 291e64703aa10dd6.4f894ac83396ec39.d685dec3e8fa73ff.62cb9741e4a8e4b1 -@@ -51360,12 +51360,12 @@ VCMPPD_128_0x11(reg) - 406a250c53893b03.c753fe5c5a006374.cc2755ae80a709cd.01ee2fb060a80369 - a13932730f8e4b26 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 291e64703aa10dd6.4f894ac83396ec39.d685dec3e8fa73ff.62cb9741e4a8e4b1 - 79c53fb912e5f1e8.e22127026e35846f.cc0bb4ee47a4baec.e0622544b0b51f51 - 406a250c53893b03.c753fe5c5a006374.cc2755ae80a709cd.01ee2fb060a80369 - a13932730f8e4b26 --VCMPPD_128_0x11(mem) -+VCMPPS_256_0x13(mem) - before - 9b10a978da72b4b3.db570fd6991926d4.d9eb4bc314034474.3226bd6f308f9c4e - cd3f10abdd60fa3d.a7d9fa847e1fef07.f4b48b21b74be49a.5954e99ef2e8af1b -@@ -51375,11 +51375,11 @@ VCMPPD_128_0x11(mem) - after - 9b10a978da72b4b3.db570fd6991926d4.d9eb4bc314034474.3226bd6f308f9c4e - cd3f10abdd60fa3d.a7d9fa847e1fef07.f4b48b21b74be49a.5954e99ef2e8af1b -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 45d59f4cf88c0cf7.3dcbc5389bc30a41.b40dd07729d7500a.5f6d79f21d1f4446 - f5efd6efbf153dfd - --VCMPPD_256_0x11(reg) -+VCMPPD_128_0x14(reg) - before - bcd1e60ae3aca7b0.44d3bf9148e1507e.c1d39c160b77d4a0.1234cf45313494ac - 125da6ae2570bc0a.ea5abfb5407161b3.e4a164888ad36c11.e8bdafbc92058724 -@@ -51387,12 +51387,12 @@ VCMPPD_256_0x11(reg) - d7a6224175b0da66.9a2e4f469770d8d1.7abab9d52bb1f5d8.70240653d0346949 - da9b764ae5aad04d - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 125da6ae2570bc0a.ea5abfb5407161b3.e4a164888ad36c11.e8bdafbc92058724 - 52e0104722edb9b8.12341ba2fc47fac0.037f1af9b7630e40.1474eec76857e59f - d7a6224175b0da66.9a2e4f469770d8d1.7abab9d52bb1f5d8.70240653d0346949 - da9b764ae5aad04d --VCMPPD_256_0x11(mem) -+VCMPPD_128_0x14(mem) - before - 2ca3b799c4c5d6d8.fffbd708bb445abf.5c14d88c2ef6b713.a59e3d88844b5e86 - 4409462c88903616.252a2c099036766f.36b2315fdce753b2.e076a27f5ebd85f5 -@@ -51406,7 +51406,7 @@ VCMPPD_256_0x11(mem) - 321f40d03166f758.da4aa26454617288.9d454361ee39b0b5.f63600e40256fcc9 - 89b5f12c0595c485 - --VCMPPD_256_0x11(reg) -+VCMPPD_128_0x14(reg) - before - 9c59b366f9dc39b3.c067a2b74e8ad0b6.21d2bc987bb3c947.e4d2f5688bb1ea72 - 8b6e420079b699fe.833d4293c08ef376.d76565b4a192ac0e.b14767acafc3d03b -@@ -51414,12 +51414,12 @@ VCMPPD_256_0x11(reg) - 6d1bb8018e54059e.19c12ed715680acd.fbdb555959280563.51197b9ffde793a2 - db0e15255f11e899 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 8b6e420079b699fe.833d4293c08ef376.d76565b4a192ac0e.b14767acafc3d03b - b2409b6521af1e13.576c9d4fa47f1dc4.564f9926628a5789.e170151a767c1f3c - 6d1bb8018e54059e.19c12ed715680acd.fbdb555959280563.51197b9ffde793a2 - db0e15255f11e899 --VCMPPD_256_0x11(mem) -+VCMPPD_128_0x14(mem) - before - 5c1a609ab905d94d.184a973f5b30894a.a3087117305575bd.235794b923f7f349 - b00bd7e826cf23e9.0f1a338e25d0e7c4.d20de2fb10521bbf.280d52b25b835de6 -@@ -51429,11 +51429,11 @@ VCMPPD_256_0x11(mem) - after - 5c1a609ab905d94d.184a973f5b30894a.a3087117305575bd.235794b923f7f349 - b00bd7e826cf23e9.0f1a338e25d0e7c4.d20de2fb10521bbf.280d52b25b835de6 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 42c739c4ab16b28b.50cd93071e8921d0.8f813f6090ae08ab.3d5a3c1f860494f8 - 04895f6bb210d9c4 - --VCMPPD_256_0x11(reg) -+VCMPPD_128_0x14(reg) - before - 1923f201bc0a8af8.372b1d29fbac6ee8.53484f0a85ba74bb.d68723b86825c6ed - d874f14b407de340.6fa21c18ce4773df.1294b8cd59df9223.317b256476dcaff2 -@@ -51441,12 +51441,12 @@ VCMPPD_256_0x11(reg) - c4691faf28ff7bb9.18fd61446fc14745.33cd823fb533191c.965d746aa33bf2f3 - 58e3b99bf9fbc347 - after -- ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - d874f14b407de340.6fa21c18ce4773df.1294b8cd59df9223.317b256476dcaff2 - 9dc756b7dbf51f47.c6fab47d41f57c9a.e8fccbba3584b4b4.7d29c251d6df7fe5 - c4691faf28ff7bb9.18fd61446fc14745.33cd823fb533191c.965d746aa33bf2f3 - 58e3b99bf9fbc347 --VCMPPD_256_0x11(mem) -+VCMPPD_128_0x14(mem) - before - 9f870ccff52baf0e.aaa646a1c4263243.41799d5a74b88e0e.4e54dbc6777afb05 - 4614e9f4b2d87174.a9cac9f84af68291.1d38e6a96de50e1e.94dbd1bd14e4971b -@@ -51460,7 +51460,7 @@ VCMPPD_256_0x11(mem) - 291d32bfe1d66bcb.65f7d18586c3d728.5db18ba6aa12a7ca.151b84a85553ec81 - 086d3a742f6f1e28 - --VCMPPS_128_0x11(reg) -+VCMPPD_256_0x14(reg) - before - 96ef7d5f57dff8ad.1c30963c8b401a14.da974e9374d856c8.7a04e12c252a39bc - 1cee49d6672eb9bc.e05d745966568fac.d84e16b6bcc55cdc.baca329c04a8f4a7 -@@ -51468,12 +51468,12 @@ VCMPPS_128_0x11(reg) - 81936c13b09adb25.4a348f2420b7be78.e43277eccc5df00f.13e3baea5c08d317 - e3cde8a00e0170f4 - after -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1cee49d6672eb9bc.e05d745966568fac.d84e16b6bcc55cdc.baca329c04a8f4a7 - f7b69a43fbe89b00.517049038e2487be.bd69255bfb192610.f9d1fce2639993b7 - 81936c13b09adb25.4a348f2420b7be78.e43277eccc5df00f.13e3baea5c08d317 - e3cde8a00e0170f4 --VCMPPS_128_0x11(mem) -+VCMPPD_256_0x14(mem) - before - 475b02f09291267a.17d1bcb321cfb5d9.a977c4aa381af003.a9f509d7cb1ff586 - 1a5885c607c3b0d4.16bc858eeb1364c5.49036380f159d98e.6800d68695ea7221 -@@ -51483,11 +51483,11 @@ VCMPPS_128_0x11(mem) - after - 475b02f09291267a.17d1bcb321cfb5d9.a977c4aa381af003.a9f509d7cb1ff586 - 1a5885c607c3b0d4.16bc858eeb1364c5.49036380f159d98e.6800d68695ea7221 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7cd3b3b52e3e33b6.bac772a4f8fa35fc.bb29cfcbb79dbe4e.431a11e5f9ccc471 - 18c1776bcafc107e - --VCMPPS_128_0x11(reg) -+VCMPPD_256_0x14(reg) - before - 57df0967d664c45f.c3e956a6189fa396.18818fb873b4cd9d.455b951afdb932dc - 5bc0c244b8921cc0.ea9e51cc62d3d8fa.4e1715b7b7ae2c29.8106b56854e24d19 -@@ -51495,12 +51495,12 @@ VCMPPS_128_0x11(reg) - 26fa9952706ea6af.4417416c85e18101.b3094c26078f29ac.7bfbf3b4a689684e - f1dc0a8bd91ee09e - after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5bc0c244b8921cc0.ea9e51cc62d3d8fa.4e1715b7b7ae2c29.8106b56854e24d19 - 82b09e6f0d11534c.cbbf211528e48e0f.b9d5000d5f738c49.49f8aba2d823cb30 - 26fa9952706ea6af.4417416c85e18101.b3094c26078f29ac.7bfbf3b4a689684e - f1dc0a8bd91ee09e --VCMPPS_128_0x11(mem) -+VCMPPD_256_0x14(mem) - before - 89676a118ef0ee4e.a5ecb05a7e345197.2f742dbd96d36cfb.99fef56f4c8f41fc - 1d689134e00b4f87.5ad0ddf4d2ef90ae.6aa061f475c80c2a.c7fff852cafe0ee5 -@@ -51510,11 +51510,11 @@ VCMPPS_128_0x11(mem) - after - 89676a118ef0ee4e.a5ecb05a7e345197.2f742dbd96d36cfb.99fef56f4c8f41fc - 1d689134e00b4f87.5ad0ddf4d2ef90ae.6aa061f475c80c2a.c7fff852cafe0ee5 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - adfc22fdcd49f84a.d4a16f8abe76b81a.3b9993c414e95ad6.6b58f99ade5aba35 - 9948efd7ad5f10f4 - --VCMPPS_128_0x11(reg) -+VCMPPD_256_0x14(reg) - before - 7f752f5f24040cfc.6026837ca084b92c.5326ca5f8e591ac8.8bfd88360a2c80aa - 782ab39de0d4eaf9.80f69b478038bd48.77ce2d741462ff55.9961b53d40a34b64 -@@ -51522,12 +51522,12 @@ VCMPPS_128_0x11(reg) - 18607df095253b85.78b8dd71d8397de0.22b5f813b41345be.6258a8beda56bf34 - d583661077abe0a3 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 782ab39de0d4eaf9.80f69b478038bd48.77ce2d741462ff55.9961b53d40a34b64 - e2b579ff7d5be598.ea38e54a8970c0ca.9ee49237ed1ca46e.429096c7d157772e - 18607df095253b85.78b8dd71d8397de0.22b5f813b41345be.6258a8beda56bf34 - d583661077abe0a3 --VCMPPS_128_0x11(mem) -+VCMPPD_256_0x14(mem) - before - 78de4ca8c26396a7.7678b9ddc7bf266c.074200a8899eb1b3.608e587405d41ef2 - 2535d672d9899d6b.58492b30acb4e2f8.73a2c9dcb7ab1772.b4b9afc67dea6ab6 -@@ -51537,11 +51537,11 @@ VCMPPS_128_0x11(mem) - after - 78de4ca8c26396a7.7678b9ddc7bf266c.074200a8899eb1b3.608e587405d41ef2 - 2535d672d9899d6b.58492b30acb4e2f8.73a2c9dcb7ab1772.b4b9afc67dea6ab6 -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1007c74cda4f8ce5.17459dbb05e1c1b0.52123de7fbef6d5e.0f3734ee51464e9c - cd23599ce4a45d17 - --VCMPPS_256_0x11(reg) -+VCMPPS_128_0x14(reg) - before - 119166ea0e87d0d1.06192634fc08ecf3.ad0997ccb0305b35.7dbbe096493dd4e5 - 37ce55466a7ce376.775819fe59608e72.36b5b5f4800ab60f.f56a1af285635d05 -@@ -51549,12 +51549,12 @@ VCMPPS_256_0x11(reg) - 99e5ced42ac9d834.3a88ace936198371.95f85238fc92a275.3c0a3f5e356ac8c7 - c3922446e26122bf - after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 37ce55466a7ce376.775819fe59608e72.36b5b5f4800ab60f.f56a1af285635d05 - 9b27241b950ed2b3.3f8e1d960e612c8d.1096f59e10fc0feb.96eb65e6cb6ec5ed - 99e5ced42ac9d834.3a88ace936198371.95f85238fc92a275.3c0a3f5e356ac8c7 - c3922446e26122bf --VCMPPS_256_0x11(mem) -+VCMPPS_128_0x14(mem) - before - 07518e8aeb618e03.8d574fdfc63a32a5.441244e1ed934e49.2327c82de156ab58 - e411fb166f76c9bc.d3c8a4a704ec1cb1.38f8606c50dc4a42.146f53e95bd66640 -@@ -51564,11 +51564,11 @@ VCMPPS_256_0x11(mem) - after - 07518e8aeb618e03.8d574fdfc63a32a5.441244e1ed934e49.2327c82de156ab58 - e411fb166f76c9bc.d3c8a4a704ec1cb1.38f8606c50dc4a42.146f53e95bd66640 -- ffffffff00000000.ffffffff00000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - d8c7cbb6510b9c44.c5d6b61fd8448f4b.530715e78808c546.93799a667b38e0d3 - d9d34dff5a3217d4 - --VCMPPS_256_0x11(reg) -+VCMPPS_128_0x14(reg) - before - f27605103d17f08b.a85526a3e9a5ab69.290b6ca6a6039032.31c8a6b09604bba8 - 3baebe03c174a8a4.811473876a8279b5.4f6fe69a86321164.6a15abbbbffed2dc -@@ -51576,12 +51576,12 @@ VCMPPS_256_0x11(reg) - ce0c25431ac39faa.bd59d5e9993b4171.51f3127aed15815c.5c830148d31d5364 - ce3c4ba1f65a3411 - after -- 00000000ffffffff.ffffffff00000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 3baebe03c174a8a4.811473876a8279b5.4f6fe69a86321164.6a15abbbbffed2dc - 11c7754682d478ca.3ed22f50f1b0c254.934e1e68145f4d8e.d9baa0f51f02c60c - ce0c25431ac39faa.bd59d5e9993b4171.51f3127aed15815c.5c830148d31d5364 - ce3c4ba1f65a3411 --VCMPPS_256_0x11(mem) -+VCMPPS_128_0x14(mem) - before - 0ab1f8eca5c6263f.cfcbca6828ce57ef.d976e13e7e2db339.e4acbd3eade1e979 - eead8716fb6be519.704e60204580dd46.6df5d03bbd94d4d8.aac31b1fef4dc092 -@@ -51591,11 +51591,11 @@ VCMPPS_256_0x11(mem) - after - 0ab1f8eca5c6263f.cfcbca6828ce57ef.d976e13e7e2db339.e4acbd3eade1e979 - eead8716fb6be519.704e60204580dd46.6df5d03bbd94d4d8.aac31b1fef4dc092 -- ffffffffffffffff.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1a6d33b30e96b884.03d351f9220a42d9.714843ddb7f01249.3b3ee1e86a3baf66 - bf3a41a8dbd43d7a - --VCMPPS_256_0x11(reg) -+VCMPPS_128_0x14(reg) - before - e5c544353f3e2c39.1ac94aff0233456c.ac6da3f219fa996d.99b5c05aabfca773 - 082be7fb3106b64f.32dd31d90e3a8fb0.65fcd62e91c2aec2.a9b3102f67acdb24 -@@ -51603,12 +51603,12 @@ VCMPPS_256_0x11(reg) - b9b6f9e331dd8d34.165c5fe7ddb748ff.7728d02071060062.f5951592ad2a0ec9 - e911c3f86f108616 - after -- 00000000ffffffff.ffffffffffffffff.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 082be7fb3106b64f.32dd31d90e3a8fb0.65fcd62e91c2aec2.a9b3102f67acdb24 - 86b724674eb7186a.3c74642d4eb7517e.8acbe61925ecbc85.7f0fad490a0d6987 - b9b6f9e331dd8d34.165c5fe7ddb748ff.7728d02071060062.f5951592ad2a0ec9 - e911c3f86f108616 --VCMPPS_256_0x11(mem) -+VCMPPS_128_0x14(mem) - before - 354f336569c98d99.ff7561dd77055359.9a5f9ff3d7453062.885d8fad129cb604 - b61be1c7ba64de7f.b23d58bfbbbaa486.a54a9e3d596ec4d1.19b71f2ea4391a18 -@@ -51618,11 +51618,11 @@ VCMPPS_256_0x11(mem) - after - 354f336569c98d99.ff7561dd77055359.9a5f9ff3d7453062.885d8fad129cb604 - b61be1c7ba64de7f.b23d58bfbbbaa486.a54a9e3d596ec4d1.19b71f2ea4391a18 -- ffffffffffffffff.00000000ffffffff.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - c88be917ca695122.d320e4f0affbd9a7.c108cf3c63bee385.2b09a3b808b8da44 - 649a8f9a13b3afb5 - --VCMPPD_128_0x12(reg) -+VCMPPS_256_0x14(reg) - before - 8d7f3b1f7ee52247.10c83addc3ecea38.f8d1711697a035f3.8973f7c824fde622 - 0106a6b3e6db6ea7.fdc3b9478180be60.fcbe7dd5ed030df6.48f5d043db07857b -@@ -51630,12 +51630,12 @@ VCMPPD_128_0x12(reg) - 3f25a2b91b40847f.372332b8bd080799.0c7703ce542f20d4.1c7282b2a1aa8a14 - e804537fe85b67ab - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 0106a6b3e6db6ea7.fdc3b9478180be60.fcbe7dd5ed030df6.48f5d043db07857b - 1e79c9c2e620d080.6b48e241202f89c7.393104994dae9c5d.da5cd597a7e77dbd - 3f25a2b91b40847f.372332b8bd080799.0c7703ce542f20d4.1c7282b2a1aa8a14 - e804537fe85b67ab --VCMPPD_128_0x12(mem) -+VCMPPS_256_0x14(mem) - before - 1bdec4ea9506d2af.c0562c0220c7c550.3b1f24967414f301.d2dc75e09e12d306 - 91cb52dfc6b8854b.fc57630a9242d09e.540934c960610a2b.e5ac563bc5e2f2a0 -@@ -51645,11 +51645,11 @@ VCMPPD_128_0x12(mem) - after - 1bdec4ea9506d2af.c0562c0220c7c550.3b1f24967414f301.d2dc75e09e12d306 - 91cb52dfc6b8854b.fc57630a9242d09e.540934c960610a2b.e5ac563bc5e2f2a0 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - b612b218235eb5fe.1afdc8082a423363.35d79fda48eca978.65bb557d217962bb - 8a946c3c8c592c93 - --VCMPPD_128_0x12(reg) -+VCMPPS_256_0x14(reg) - before - 6d07e2f446565283.1d047d33876aaa6c.b239efd689df0432.b553f2917c42a8f3 - 6a61b311eafc0f37.37395388deadd723.7776b313c59f8e2e.baed534c5608c2e0 -@@ -51657,12 +51657,12 @@ VCMPPD_128_0x12(reg) - 22f9562a6275419a.f39e1592d606cd1a.f423028a41babf60.c2aa2f7e6a1636c1 - 7e65a3cddc75080e - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 6a61b311eafc0f37.37395388deadd723.7776b313c59f8e2e.baed534c5608c2e0 - ddeedbff15d8a05b.e07eb2044433fa4e.c300102b790f0d04.20703ef7f14bb26b - 22f9562a6275419a.f39e1592d606cd1a.f423028a41babf60.c2aa2f7e6a1636c1 - 7e65a3cddc75080e --VCMPPD_128_0x12(mem) -+VCMPPS_256_0x14(mem) - before - 2f6e15d06475e57d.95d021fe6e5f2da0.4e67f81db0340db3.642a869cba2cdeed - b19101741d21883b.92bd37e7d423a21a.cca4d893edc97644.716397cd80f1a758 -@@ -51672,11 +51672,11 @@ VCMPPD_128_0x12(mem) - after - 2f6e15d06475e57d.95d021fe6e5f2da0.4e67f81db0340db3.642a869cba2cdeed - b19101741d21883b.92bd37e7d423a21a.cca4d893edc97644.716397cd80f1a758 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 9754384b94ae1353.9a0c34a920671119.a1a87bed0154b100.cd96503d60a72677 - d629f153b3ae5482 - --VCMPPD_128_0x12(reg) -+VCMPPS_256_0x14(reg) - before - ea1d0e39c2391c1b.b48d7b5689a77305.5d0614593dff85f6.af0838a91064fc83 - 66bda5592ad4b9ee.120f27b2207c8ab5.19472fcf25a070f7.510ce0fff30960ae -@@ -51684,12 +51684,12 @@ VCMPPD_128_0x12(reg) - 07352ffc736665f1.0021b00aa3eccbc1.f1cc06b9c52e9d13.bd2fe52aa34861af - 40e63ad6a8f977dc - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 66bda5592ad4b9ee.120f27b2207c8ab5.19472fcf25a070f7.510ce0fff30960ae - a757b121860968a7.8ca7bb4a753a1390.2c1a817574d60fc7.6280f1dcc55198ae - 07352ffc736665f1.0021b00aa3eccbc1.f1cc06b9c52e9d13.bd2fe52aa34861af - 40e63ad6a8f977dc --VCMPPD_128_0x12(mem) -+VCMPPS_256_0x14(mem) - before - c5726ccdf1709562.e3a419568c77ec78.484984dec69f6d76.c4aaba06b4335786 - 2a9df5fa99b9786d.97f06d9b6dc738ea.42eab2b2fb5db6d8.00fe9ac8de7279cd -@@ -51699,11 +51699,11 @@ VCMPPD_128_0x12(mem) - after - c5726ccdf1709562.e3a419568c77ec78.484984dec69f6d76.c4aaba06b4335786 - 2a9df5fa99b9786d.97f06d9b6dc738ea.42eab2b2fb5db6d8.00fe9ac8de7279cd -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 000201a577f37dc0.f74f4096fa541239.b8cb0c0a09302d59.283acb5b51cbe486 - cabb1405d2fea64f - --VCMPPD_256_0x12(reg) -+VCMPPD_128_0x15(reg) - before - 47e279d3fe9abe9d.29d57bfce6fb1660.5bf9b824ddaa176f.eca230671a5cd3d0 - f9fdf532702b6b1a.a2773d3924066435.07b0884ef96fd33e.42239f73adc40fa5 -@@ -51711,12 +51711,12 @@ VCMPPD_256_0x12(reg) - 703a2254985d6f52.ef5c8a167e530e2c.a776252249775a5a.c0534b4cc7793b1b - a09a81f186dea314 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - f9fdf532702b6b1a.a2773d3924066435.07b0884ef96fd33e.42239f73adc40fa5 - 3e56848fc53de772.45b6c4484d1f236a.57c1ae7ee92f7f54.941ad41cdd749e05 - 703a2254985d6f52.ef5c8a167e530e2c.a776252249775a5a.c0534b4cc7793b1b - a09a81f186dea314 --VCMPPD_256_0x12(mem) -+VCMPPD_128_0x15(mem) - before - 11baf0f637b0921b.ecf5cbef86173f66.7d360d8dd3ade2a7.531ce9a4b6d29eff - ef801647f5fac45d.0fd27ccb2af59259.c910c99a66395b06.b7fef772cbcd89ed -@@ -51726,11 +51726,11 @@ VCMPPD_256_0x12(mem) - after - 11baf0f637b0921b.ecf5cbef86173f66.7d360d8dd3ade2a7.531ce9a4b6d29eff - ef801647f5fac45d.0fd27ccb2af59259.c910c99a66395b06.b7fef772cbcd89ed -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 632e747d0a26e041.b626e3f60653b58e.0ef3d827bd182b22.17aade9f5fd03e55 - cb0cafd616f08128 - --VCMPPD_256_0x12(reg) -+VCMPPD_128_0x15(reg) - before - a6dab908e5e05af5.b0aea53a9821423b.f234911d75e9fb28.c094237fb783fa37 - 0661f9a1692b0566.da047bf4a4c4d61f.449537350bd5b552.a065971d61515ee1 -@@ -51738,12 +51738,12 @@ VCMPPD_256_0x12(reg) - c2c908b9fe04bfeb.35600b0ba4348858.9b8057e91add7504.5dc7e8db3343d4a2 - f2f0bdd393805e11 - after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 0661f9a1692b0566.da047bf4a4c4d61f.449537350bd5b552.a065971d61515ee1 - 46ec6a0e3d5ebd2a.bdfb74954a1c5a1a.0895cfaa63a320b7.8b32b0edd68d124b - c2c908b9fe04bfeb.35600b0ba4348858.9b8057e91add7504.5dc7e8db3343d4a2 - f2f0bdd393805e11 --VCMPPD_256_0x12(mem) -+VCMPPD_128_0x15(mem) - before - 2678aac1124f6cc5.d542cf1047a94756.1effbd40d1181d04.57a1ca5ccc11f3e5 - d52d2b91cdbcbcea.dda5bb7db5d99116.54a40422ebd5d44b.9946257114cbd405 -@@ -51753,11 +51753,11 @@ VCMPPD_256_0x12(mem) - after - 2678aac1124f6cc5.d542cf1047a94756.1effbd40d1181d04.57a1ca5ccc11f3e5 - d52d2b91cdbcbcea.dda5bb7db5d99116.54a40422ebd5d44b.9946257114cbd405 -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 1449da8866a10c35.3854f44e6d0c5948.1730469a57079b58.1f477f2dd7feb1b3 - 1b3c77ad8a8f269a - --VCMPPD_256_0x12(reg) -+VCMPPD_128_0x15(reg) - before - 0de4467e44d6ee71.5c4900877b3286b3.44393889f0275011.5cae3808e1952377 - 518ae90ca05e46e2.8fa5aa173c903052.b336928b08fdf8df.5e63b1d2c92bbde0 -@@ -51765,12 +51765,12 @@ VCMPPD_256_0x12(reg) - 3f04980fb0629449.25a07b9f31e907a2.2eac7494640b4e3d.099d242a219f1a42 - 69bb1791c9975593 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 518ae90ca05e46e2.8fa5aa173c903052.b336928b08fdf8df.5e63b1d2c92bbde0 - 437c5bc33bb3699c.88295426c5c9c73e.e299fcc0501a8e60.f9192be42ad526c0 - 3f04980fb0629449.25a07b9f31e907a2.2eac7494640b4e3d.099d242a219f1a42 - 69bb1791c9975593 --VCMPPD_256_0x12(mem) -+VCMPPD_128_0x15(mem) - before - f73f81033ec692df.a16f9c5d9bf60396.41d7996e9cfaabab.f1bdf573e15b7425 - 8ef4dc6e9d3a8e51.c509631799fcf22e.b89b2c7f230a7084.89167bc962963bc2 -@@ -51780,11 +51780,11 @@ VCMPPD_256_0x12(mem) - after - f73f81033ec692df.a16f9c5d9bf60396.41d7996e9cfaabab.f1bdf573e15b7425 - 8ef4dc6e9d3a8e51.c509631799fcf22e.b89b2c7f230a7084.89167bc962963bc2 -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 46255adb881eb259.c2fa2b833d8b3ff2.26f49f17f3554d58.a3d2878be2ff9fcd - dfce05cf1944b393 - --VCMPPS_128_0x12(reg) -+VCMPPD_256_0x15(reg) - before - 5e42783ac4a559be.203874b64ba75247.54e8240d1a2c1475.d623767674a9dcac - 7d7cdd3880adcdfb.72ad703968a4a10b.1836d1b47a6f5af4.500eb2c8812a7c7f -@@ -51792,12 +51792,12 @@ VCMPPS_128_0x12(reg) - 0b6d699d99e30e5a.f3ec00e71f2b3bc8.a51d330832092494.164646f1ade8de59 - 1a2c97a0043c18b6 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - 7d7cdd3880adcdfb.72ad703968a4a10b.1836d1b47a6f5af4.500eb2c8812a7c7f - 98c62e35e8e84bf6.1a50cb50fb215bd2.692e2ce3f9df4b1a.7280cef735e6e900 - 0b6d699d99e30e5a.f3ec00e71f2b3bc8.a51d330832092494.164646f1ade8de59 - 1a2c97a0043c18b6 --VCMPPS_128_0x12(mem) -+VCMPPD_256_0x15(mem) - before - 58fe3cf256ef5344.33bd89dc2e2953d4.d84f8beaf0cdfe18.274fe18ec178210e - ae88b0d2c10c4b2f.6a018a5e4446560f.a743e8458b1360ef.4a1032e243b87d33 -@@ -51807,11 +51807,11 @@ VCMPPS_128_0x12(mem) - after - 58fe3cf256ef5344.33bd89dc2e2953d4.d84f8beaf0cdfe18.274fe18ec178210e - ae88b0d2c10c4b2f.6a018a5e4446560f.a743e8458b1360ef.4a1032e243b87d33 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 0ef3fbec4bb560ca.789920dc6037857b.6e1109b48dbdefe1.e76eae9f8edd4530 - 19a3d0e28fd9295f - --VCMPPS_128_0x12(reg) -+VCMPPD_256_0x15(reg) - before - 5c9786a1f3d65ceb.d06cc8fea359f6d2.0784adaf9f232903.2083c5a02c399553 - 0e96cb4a55611b7e.19cd564e839838e7.16940b76ce157afd.2ab744940589cafd -@@ -51819,12 +51819,12 @@ VCMPPS_128_0x12(reg) - 2be4f306854f2c6b.b177a2594a14b3e7.23532b8c6f4117f5.ba947743d3d5cfa3 - f7d523d700ea18f8 - after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 0e96cb4a55611b7e.19cd564e839838e7.16940b76ce157afd.2ab744940589cafd - 89ec9c485206a2c5.c6e220c8077de335.0115379b8a9cb614.6979007b33b94908 - 2be4f306854f2c6b.b177a2594a14b3e7.23532b8c6f4117f5.ba947743d3d5cfa3 - f7d523d700ea18f8 --VCMPPS_128_0x12(mem) -+VCMPPD_256_0x15(mem) - before - fd088223d603df34.4ecccef28acaf61d.b75859eb6869642a.da9ae5b41892da4c - a8f91013722de182.4fee2877fe033c86.b450bf6c7e89b12a.8135607f211a3ac4 -@@ -51834,11 +51834,11 @@ VCMPPS_128_0x12(mem) - after - fd088223d603df34.4ecccef28acaf61d.b75859eb6869642a.da9ae5b41892da4c - a8f91013722de182.4fee2877fe033c86.b450bf6c7e89b12a.8135607f211a3ac4 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5e45a5906be18606.5c144afca2db2b30.04b98de70058120e.0f9a89aec500c4c9 - aefc30ea987766ae - --VCMPPS_128_0x12(reg) -+VCMPPD_256_0x15(reg) - before - ace3887a3b549564.2037a5f4ff84a094.1fae0ad509944cc8.0ec1edbaa41f9d4b - 679b8dc84a258f99.f717c3adc966e5e5.30b439f64f39d9c8.7f11ec2bb0e0b6f5 -@@ -51846,12 +51846,12 @@ VCMPPS_128_0x12(reg) - 80ad8f521fd1ce2a.54d14aca6d1de07e.ad30d4c4e77d26ae.06b8bc986d827c3f - d4a7846b587aa336 - after -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - 679b8dc84a258f99.f717c3adc966e5e5.30b439f64f39d9c8.7f11ec2bb0e0b6f5 - 3a6f3b4163758df6.bfb17ba5e4961124.eb71d3cd10580ddb.337408263fa81738 - 80ad8f521fd1ce2a.54d14aca6d1de07e.ad30d4c4e77d26ae.06b8bc986d827c3f - d4a7846b587aa336 --VCMPPS_128_0x12(mem) -+VCMPPD_256_0x15(mem) - before - 790fdc8c199d464a.979f83661cc48cde.9243aa0780090d1e.d03e394970325eed - d1ba41e8cef621a7.d99215e9f6da04c1.55d3194837665531.b1e7fdc74806f143 -@@ -51861,11 +51861,11 @@ VCMPPS_128_0x12(mem) - after - 790fdc8c199d464a.979f83661cc48cde.9243aa0780090d1e.d03e394970325eed - d1ba41e8cef621a7.d99215e9f6da04c1.55d3194837665531.b1e7fdc74806f143 -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 0a0b1ffd837b73ea.52aa01ebaea011bf.da7c1286079f255f.1d3a925d53341ce6 - 607c5c4ebea72a8b - --VCMPPS_256_0x12(reg) -+VCMPPS_128_0x15(reg) - before - d18874e8e86785f8.a24a908ebabf6129.41685244c5691e32.532d945b589425d1 - ccabd8986c0167d8.5efdfe0a55697860.cb5631bb2984d583.c22c14e4bd2a3067 -@@ -51873,12 +51873,12 @@ VCMPPS_256_0x12(reg) - cf6772e5f3f1b3a3.afedbd7025210f68.24f586b645e6306d.ef44fec3396655a9 - 64f461f18725e8ae - after -- ffffffff00000000.00000000ffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ccabd8986c0167d8.5efdfe0a55697860.cb5631bb2984d583.c22c14e4bd2a3067 - ad3283c8e6000dd8.19efe35c6f8673bc.4ec199bd747f725d.02450e0e546c014b - cf6772e5f3f1b3a3.afedbd7025210f68.24f586b645e6306d.ef44fec3396655a9 - 64f461f18725e8ae --VCMPPS_256_0x12(mem) -+VCMPPS_128_0x15(mem) - before - 3f23b1825bb47686.90969f5c2f5f94e6.fbc3073292460891.aa3ef51336434c5f - 5b9b6c64d020bb5c.4b0d089735d6ed4d.db3d3e8ed3021a63.3de8e03ee32402de -@@ -51888,11 +51888,11 @@ VCMPPS_256_0x12(mem) - after - 3f23b1825bb47686.90969f5c2f5f94e6.fbc3073292460891.aa3ef51336434c5f - 5b9b6c64d020bb5c.4b0d089735d6ed4d.db3d3e8ed3021a63.3de8e03ee32402de -- 00000000ffffffff.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - c59911c80ebb57b5.1fff7b0e1010f735.c34c5fc53f6c77b0.f58e1fb3e3a02b36 - d3236bd36e531666 - --VCMPPS_256_0x12(reg) -+VCMPPS_128_0x15(reg) - before - 2e48237325ba8ad3.ccb7f2220f04288f.ef127e211eeb1f0e.84794278a2333b83 - 604a45fea45fc42b.834f2e7c22599f18.2a9caba96600afbb.477b017449c007af -@@ -51900,12 +51900,12 @@ VCMPPS_256_0x12(reg) - bc14b4866d997a46.751ba5e0ec5772e5.4d4578c81505f640.472904fcd15daac0 - 3c6d405eea85f9fe - after -- 00000000ffffffff.00000000ffffffff.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 - 604a45fea45fc42b.834f2e7c22599f18.2a9caba96600afbb.477b017449c007af - c674cce188d00117.c82c40c263c6797b.2be9001284dae3e7.ea1c19a74f1f985f - bc14b4866d997a46.751ba5e0ec5772e5.4d4578c81505f640.472904fcd15daac0 - 3c6d405eea85f9fe --VCMPPS_256_0x12(mem) -+VCMPPS_128_0x15(mem) - before - a3b648bbb6a44044.9e75fa5aee456e62.68e8d7c3dc194581.eefc1037b40e256f - 5ace99fe52c43cbf.c8e298c9a7601717.7b6054554d17b07c.6859c2ccfe7fac23 -@@ -51915,11 +51915,11 @@ VCMPPS_256_0x12(mem) - after - a3b648bbb6a44044.9e75fa5aee456e62.68e8d7c3dc194581.eefc1037b40e256f - 5ace99fe52c43cbf.c8e298c9a7601717.7b6054554d17b07c.6859c2ccfe7fac23 -- 0000000000000000.ffffffff00000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 239f02e7693d4203.6413d12934147bff.757b1c3b22f8383e.5b38691401cfb1c4 - 8c52559ff2c5a70a - --VCMPPS_256_0x12(reg) -+VCMPPS_128_0x15(reg) - before - 06434c00fe55e584.efef13641badc423.8e6f64f23fc5ad8a.13b85f65c0f3ce5d - 26574ba2c009a6dd.793f5c770d4feb29.70083f06f215855e.42ceddf04e5beb8b -@@ -51927,12 +51927,12 @@ VCMPPS_256_0x12(reg) - c9174e59d712a4de.3a0e87111f5a1791.cb20c2bfc2c41692.c4b877d6b09faac1 - ce248b09bb94c322 - after -- ffffffff00000000.00000000ffffffff.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 26574ba2c009a6dd.793f5c770d4feb29.70083f06f215855e.42ceddf04e5beb8b - 49d94df1d46f27c2.9e5a5a0d5a30733e.662960d1ea913f27.df8a11c7ea3b4bf3 - c9174e59d712a4de.3a0e87111f5a1791.cb20c2bfc2c41692.c4b877d6b09faac1 - ce248b09bb94c322 --VCMPPS_256_0x12(mem) -+VCMPPS_128_0x15(mem) - before - d99ac94d27245342.035b4a46657f59de.2a25616e77dc944c.fd37613c173b484b - c1e6ae8c115e154d.54f23e241941816e.486c63127fbfa69b.57bb39b484810ffd -@@ -51942,11 +51942,11 @@ VCMPPS_256_0x12(mem) - after - d99ac94d27245342.035b4a46657f59de.2a25616e77dc944c.fd37613c173b484b - c1e6ae8c115e154d.54f23e241941816e.486c63127fbfa69b.57bb39b484810ffd -- 00000000ffffffff.00000000ffffffff.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 982e5aafcef923d1.a648fa6364f51dec.81bad0dc0ddd78a8.f33a864518aa4eff - eccdf23777a63ea6 - --VCMPPD_128_0x13(reg) -+VCMPPS_256_0x15(reg) - before - 7efc87d35ea2b4f7.3fc4196bd873e6a4.60a0bc9d34ff0832.545933dacb30b0be - 031442876a28eb9d.335f6fd2d0c6cb10.a07a64779a8f57b8.c658aecea9156c18 -@@ -51954,12 +51954,12 @@ VCMPPD_128_0x13(reg) - 5b2f16e35e078f9a.72d6cd56f824ee6a.23e85ac0996d1133.f7a4dc4932c6644a - 6e8a88a716aa1679 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.00000000ffffffff.ffffffff00000000.00000000ffffffff - 031442876a28eb9d.335f6fd2d0c6cb10.a07a64779a8f57b8.c658aecea9156c18 - d9611dbe36c62045.50cbd7d2d1fd8f44.c324f05f322f462a.b382bda4c2986ae2 - 5b2f16e35e078f9a.72d6cd56f824ee6a.23e85ac0996d1133.f7a4dc4932c6644a - 6e8a88a716aa1679 --VCMPPD_128_0x13(mem) -+VCMPPS_256_0x15(mem) - before - f4003cac8a503e9e.e4ca28647f78744a.754bcd4a6048a4ae.1d13a0066ad5f380 - 65d27442a9c596e3.d27e50ac35a40bfe.35f5539a26746c3d.0df0be9d42f229bc -@@ -51969,11 +51969,11 @@ VCMPPD_128_0x13(mem) - after - f4003cac8a503e9e.e4ca28647f78744a.754bcd4a6048a4ae.1d13a0066ad5f380 - 65d27442a9c596e3.d27e50ac35a40bfe.35f5539a26746c3d.0df0be9d42f229bc -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.ffffffff00000000.0000000000000000.0000000000000000 - 77b960d65949c97e.4960ce42cd5e3d28.5c1be3fe3a1525eb.3ff46e6e747b81b4 - 38b3f98008001ac7 - --VCMPPD_128_0x13(reg) -+VCMPPS_256_0x15(reg) - before - 98544b93116af77a.d1660dab22711b2d.8a261d67e80450f6.7b2fe4ebc0a28e62 - ba2460142d465478.86a02ec207978eac.9f35710307950579.c6a95be31467f9d4 -@@ -51981,12 +51981,12 @@ VCMPPD_128_0x13(reg) - b480c50c0d817c08.70e5bd66930ec7cd.b65e1a51c3aa4550.55fe9da893cbc857 - 4f715f4df781a3c0 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - ba2460142d465478.86a02ec207978eac.9f35710307950579.c6a95be31467f9d4 - fa6f356df81e6c6e.71313f0724c7de28.e5d9c783c79e985e.1b54c5d45171236c - b480c50c0d817c08.70e5bd66930ec7cd.b65e1a51c3aa4550.55fe9da893cbc857 - 4f715f4df781a3c0 --VCMPPD_128_0x13(mem) -+VCMPPS_256_0x15(mem) - before - e77a87ae99a071d4.44a50c5b08f8c0f1.5e8a22cb737704c6.6f1065db984548fc - f8e591b79433eebf.052806c8861173d6.16ebec23dd0e5240.6c3aa78be1fcdc0d -@@ -51996,11 +51996,11 @@ VCMPPD_128_0x13(mem) - after - e77a87ae99a071d4.44a50c5b08f8c0f1.5e8a22cb737704c6.6f1065db984548fc - f8e591b79433eebf.052806c8861173d6.16ebec23dd0e5240.6c3aa78be1fcdc0d -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.0000000000000000.0000000000000000.0000000000000000 - f4113d7106e6e4c7.8f7c04a97a571a42.590f9c58c5f81065.a329f81241eba911 - 948601c0903c5b5b - --VCMPPD_128_0x13(reg) -+VCMPPS_256_0x15(reg) - before - 398cef45c3d88ebb.9769d6fab51ed53e.0ee300f5279c8421.9a6b7b0d7a62f868 - ee87be0e764b7fdc.245341dc2efb653b.30da9f0ec7b24fad.17b3ad652b2be19d -@@ -52008,12 +52008,12 @@ VCMPPD_128_0x13(reg) - f88bf017cfe88914.680e7e56ecd15078.c9a4b7584e82f376.3037ffabee08a546 - 860a17713934f814 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.00000000ffffffff.00000000ffffffff.ffffffffffffffff - ee87be0e764b7fdc.245341dc2efb653b.30da9f0ec7b24fad.17b3ad652b2be19d - 0fc26b854622696b.759cfa018c884fea.4facdd61f525b58f.aab3b04bf35e872d - f88bf017cfe88914.680e7e56ecd15078.c9a4b7584e82f376.3037ffabee08a546 - 860a17713934f814 --VCMPPD_128_0x13(mem) -+VCMPPS_256_0x15(mem) - before - 86f97289f0ee3cc3.052c4b31ac291b82.d77548c869e22411.f90f28606d55440b - 0ed08edf2e422c7e.92f2773d79725b62.9f9fd44220c887e0.3a3a2ce6ef28e6fd -@@ -52023,11 +52023,11 @@ VCMPPD_128_0x13(mem) - after - 86f97289f0ee3cc3.052c4b31ac291b82.d77548c869e22411.f90f28606d55440b - 0ed08edf2e422c7e.92f2773d79725b62.9f9fd44220c887e0.3a3a2ce6ef28e6fd -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.00000000ffffffff.ffffffff00000000.ffffffff00000000 - 2166f6f6b0ea03ca.9c1d33e0564ad326.ab6823fdaa41e8d2.63fadd188a0307a3 - 0229839ddb2300af - --VCMPPD_256_0x13(reg) -+VCMPPD_128_0x16(reg) - before - 2447ac4ffe7438c7.65bd3b8f2c5662b3.d119bb4e9cf18463.a69fde17b5eb5f4d - 239f549a9082ec96.a12b2f15a08c5d58.f66b045f44cfd3c1.6ac84be96a9b54af -@@ -52035,12 +52035,12 @@ VCMPPD_256_0x13(reg) - 2b3011ab7007b70c.6c80199dde861a89.7f3cca1a24613992.be202c663f36abd6 - 05e797e8983a85f3 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 239f549a9082ec96.a12b2f15a08c5d58.f66b045f44cfd3c1.6ac84be96a9b54af - 5c7e77ea2dda57c9.af7e50762798b1e6.675d0a7fe870fbed.d3afe65fe45a8423 - 2b3011ab7007b70c.6c80199dde861a89.7f3cca1a24613992.be202c663f36abd6 - 05e797e8983a85f3 --VCMPPD_256_0x13(mem) -+VCMPPD_128_0x16(mem) - before - 85cfa5d20b73cda7.ed011f49f595460a.b4fe0675e063536c.9c543e9c942dc85d - 1aa5d111b2ec401e.fc3d9c3159114070.63c494ec4a3b1abc.19f16471d661e6f9 -@@ -52050,11 +52050,11 @@ VCMPPD_256_0x13(mem) - after - 85cfa5d20b73cda7.ed011f49f595460a.b4fe0675e063536c.9c543e9c942dc85d - 1aa5d111b2ec401e.fc3d9c3159114070.63c494ec4a3b1abc.19f16471d661e6f9 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - f34c743a13cf9703.7425d48b2c016922.66578065c4083c51.a2e9b3c5392eba57 - 67dcd51c94dfe871 - --VCMPPD_256_0x13(reg) -+VCMPPD_128_0x16(reg) - before - fb8497752f28950b.efb3e3fd0351f2c9.956986d5d48c0fc7.72bcd63e0c1611ef - bc2df73ea795fbd4.703960c499436802.74489819ca351183.559abc652b4f62a9 -@@ -52062,12 +52062,12 @@ VCMPPD_256_0x13(reg) - 31b27fcd9b07e49e.71ce750e25a8947c.dc07c93c111017f2.10ec2a4e616f6a23 - a0f9a9e8af6f993b - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - bc2df73ea795fbd4.703960c499436802.74489819ca351183.559abc652b4f62a9 - 0423f1e297b05676.52a9677bf0b1b4da.6d0e05c2aa88aa03.ebbbafc73ebeebac - 31b27fcd9b07e49e.71ce750e25a8947c.dc07c93c111017f2.10ec2a4e616f6a23 - a0f9a9e8af6f993b --VCMPPD_256_0x13(mem) -+VCMPPD_128_0x16(mem) - before - 77ada88044c9351f.9d259f6b5025dff7.a97504695334c215.1d7ee1f39a5994fd - 70d6a3013d89fafd.a6ca4b285197842e.d56a9279975ffbd0.8cc14853e1ef5cd0 -@@ -52081,7 +52081,7 @@ VCMPPD_256_0x13(mem) - 3db27f73c96ded51.fbd53db0aaa4bbe4.7e6e9963cec87c5f.64d6f3bf1c34c17c - 85412fa247fad4ad - --VCMPPD_256_0x13(reg) -+VCMPPD_128_0x16(reg) - before - 44a7aadfa13e2456.c8fe573b95a89420.ffd479523858c5bc.b2140917fa1c3d8a - fd5461e0c58beb23.e5ee1b9e347a5497.0f3433c4848f6821.4a39682fac42f988 -@@ -52089,12 +52089,12 @@ VCMPPD_256_0x13(reg) - ccb270e3dc72d0d7.49e959e05b100d30.c4460ec4c0b76d45.1b2be03a0f2d51ab - 0a91f206f90b6428 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - fd5461e0c58beb23.e5ee1b9e347a5497.0f3433c4848f6821.4a39682fac42f988 - 0b934f134f6e66bf.724e4886c2eee8e3.8840667127d5e2c0.24a73196ff436c84 - ccb270e3dc72d0d7.49e959e05b100d30.c4460ec4c0b76d45.1b2be03a0f2d51ab - 0a91f206f90b6428 --VCMPPD_256_0x13(mem) -+VCMPPD_128_0x16(mem) - before - cfa5e1e6d9e96328.9bfbc1bb08236616.488dca991ded7fa9.2090272be8c0465b - 44332bc6cad408d7.d3bb3d096e0e6429.4a04179b2190f97b.f86bae113e7ca9ae -@@ -52104,11 +52104,11 @@ VCMPPD_256_0x13(mem) - after - cfa5e1e6d9e96328.9bfbc1bb08236616.488dca991ded7fa9.2090272be8c0465b - 44332bc6cad408d7.d3bb3d096e0e6429.4a04179b2190f97b.f86bae113e7ca9ae -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - b2ebbd3750fe37f0.f3cfa6b559bf8779.c69e362f6559f8d9.8c04f20add3ffbbe - 015aa9f5605e63d3 - --VCMPPS_128_0x13(reg) -+VCMPPD_256_0x16(reg) - before - 6170bc107f5f44d5.63affe9f1d5638b3.91bc8bea169d250f.f8580098dc97f5bc - 099429c5d6d0db70.341c89b86cead1d4.0a4f8b447ee51928.9d1796fb07cceaa9 -@@ -52116,12 +52116,12 @@ VCMPPS_128_0x13(reg) - a131feb19f311b24.aa236da9fef8b5e2.f99bce18bde1fa96.b1d0175fe648af4b - d862fa38d3a7f659 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 099429c5d6d0db70.341c89b86cead1d4.0a4f8b447ee51928.9d1796fb07cceaa9 - 5510ea82023d6451.02fed96c58c7bc7f.b8d6a3302c22a271.92a67444010394ca - a131feb19f311b24.aa236da9fef8b5e2.f99bce18bde1fa96.b1d0175fe648af4b - d862fa38d3a7f659 --VCMPPS_128_0x13(mem) -+VCMPPD_256_0x16(mem) - before - e12899bbe32d2620.48435ec048383b95.0656be5a79897927.27eb086accad5e42 - a9ee70d533e5fbcb.a891071a99de024f.f3624a6ae686c47a.a0124e91f6120a22 -@@ -52131,11 +52131,11 @@ VCMPPS_128_0x13(mem) - after - e12899bbe32d2620.48435ec048383b95.0656be5a79897927.27eb086accad5e42 - a9ee70d533e5fbcb.a891071a99de024f.f3624a6ae686c47a.a0124e91f6120a22 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 - e7a9b77a011d837f.0015265ea5396f4f.f138ff5c03f6dffd.de14ea0d08d9292c - 5d87393b295214ae - --VCMPPS_128_0x13(reg) -+VCMPPD_256_0x16(reg) - before - 950184eed5953614.14361fddb8b4aee0.b0e3932198068eee.b99a2216ec812684 - e3cec593a72dcc0a.70f3af871dae6ed6.881d3ae0a3a24386.82066edf37a8e4ca -@@ -52143,12 +52143,12 @@ VCMPPS_128_0x13(reg) - 32911e5e2e8d4454.252d385d67f89c2f.1f0722fd73775e54.872b765260fbb441 - 7b7c29d3773e3ecb - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - e3cec593a72dcc0a.70f3af871dae6ed6.881d3ae0a3a24386.82066edf37a8e4ca - a43afa943ba6123b.d7ace3634f157e8c.e31015056399cac4.284861a4ff77d4fa - 32911e5e2e8d4454.252d385d67f89c2f.1f0722fd73775e54.872b765260fbb441 - 7b7c29d3773e3ecb --VCMPPS_128_0x13(mem) -+VCMPPD_256_0x16(mem) - before - e108f615604f2fc3.ea1e2d5e1c6d9e00.36422961836082ea.97505c3470c93ce1 - 93995a0235374256.282f23fe9fd25bec.e6b7315bbf5becea.a636bf17f51aa018 -@@ -52158,11 +52158,11 @@ VCMPPS_128_0x13(mem) - after - e108f615604f2fc3.ea1e2d5e1c6d9e00.36422961836082ea.97505c3470c93ce1 - 93995a0235374256.282f23fe9fd25bec.e6b7315bbf5becea.a636bf17f51aa018 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - 4dfcd49219c2c1fb.a608b6d3da5df033.93ef7ce205384068.fe07f28d09ebe932 - fd8bb9f9cf82466d - --VCMPPS_128_0x13(reg) -+VCMPPD_256_0x16(reg) - before - 05dc99c08e491902.0e67e20c607ba566.9e694adeca9b41e6.484bb6464732a03e - 70468e4ee2cb9d9d.8c0776e2033d9b1b.8c7db53bbf8de588.0c37f75118ee7608 -@@ -52170,12 +52170,12 @@ VCMPPS_128_0x13(reg) - e394a86fb630ab93.2f192253d30ab015.baed01982ec3184c.31ef8408dade6f2b - 4952c68d01290bdb - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 70468e4ee2cb9d9d.8c0776e2033d9b1b.8c7db53bbf8de588.0c37f75118ee7608 - 9c14950f65940fe9.a3a90d0021136047.cc90f35558c219c6.bb7fbded95797cf3 - e394a86fb630ab93.2f192253d30ab015.baed01982ec3184c.31ef8408dade6f2b - 4952c68d01290bdb --VCMPPS_128_0x13(mem) -+VCMPPD_256_0x16(mem) - before - e175016829670b30.a310c5da6f2cad47.0c2331c5372d47b2.b2e1da71df1e1fc5 - d425b0856ca32c55.36d5e8bd2c1450b0.1593b6436988e049.10b87a4a075e6ade -@@ -52185,11 +52185,11 @@ VCMPPS_128_0x13(mem) - after - e175016829670b30.a310c5da6f2cad47.0c2331c5372d47b2.b2e1da71df1e1fc5 - d425b0856ca32c55.36d5e8bd2c1450b0.1593b6436988e049.10b87a4a075e6ade -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 3a565a35b446c1c1.49692c9724d46c53.20d41315a5180b18.6e3f00b02abebb9e - 2587de145df6399e - --VCMPPS_256_0x13(reg) -+VCMPPS_128_0x16(reg) - before - b3e1732a7644ebed.66714ea0f1c5ac60.80d1466697c65ce5.d83de33fe76514a8 - 739bbb5d12330d38.5d48a6feba73a880.fbb2555d7ed2dedc.2e3c1a26661910e1 -@@ -52197,12 +52197,12 @@ VCMPPS_256_0x13(reg) - f85a55ca41258f70.1b58723f5d88c2f1.2d0d43701a6e88ac.202ca9d88decd105 - 75b5f97b6d220d47 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - 739bbb5d12330d38.5d48a6feba73a880.fbb2555d7ed2dedc.2e3c1a26661910e1 - c1ffb319cd4fda2a.faa6de392a5a714c.165755e776862ee5.fd9d32b53f42bbf2 - f85a55ca41258f70.1b58723f5d88c2f1.2d0d43701a6e88ac.202ca9d88decd105 - 75b5f97b6d220d47 --VCMPPS_256_0x13(mem) -+VCMPPS_128_0x16(mem) - before - d603a08afbf02ce3.76f89fdc0d3f68b5.9a2adefb7109589b.9d201964071527dc - 21e31af25262ea06.96258cbbcb2ca0a6.55e89f587fe8ef75.c0dcd52fd8074822 -@@ -52212,11 +52212,11 @@ VCMPPS_256_0x13(mem) - after - d603a08afbf02ce3.76f89fdc0d3f68b5.9a2adefb7109589b.9d201964071527dc - 21e31af25262ea06.96258cbbcb2ca0a6.55e89f587fe8ef75.c0dcd52fd8074822 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - e18a7379cc64318f.2b5b40918ea8203b.eb580daafff00f6b.927eedfb97fd009e - f9fc41d3be190e2d - --VCMPPS_256_0x13(reg) -+VCMPPS_128_0x16(reg) - before - 84536a3239b08e81.0ee74b70270b334e.58fcff5fcb50e037.7ea1b276a83210df - 8fd06485a44fbb47.9407e570bb87c443.985c51ab6bfaef8f.bc069c94bc020233 -@@ -52224,12 +52224,12 @@ VCMPPS_256_0x13(reg) - 9566bbb3bcd310d7.1cbc5037012c8182.bc899e694181ed01.aa542c77987da72e - 11d5ca139641d32c - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 8fd06485a44fbb47.9407e570bb87c443.985c51ab6bfaef8f.bc069c94bc020233 - 76bc2b379c81d32a.50b5bd64a6e39f9b.45c732df09318aee.825346f0586da094 - 9566bbb3bcd310d7.1cbc5037012c8182.bc899e694181ed01.aa542c77987da72e - 11d5ca139641d32c --VCMPPS_256_0x13(mem) -+VCMPPS_128_0x16(mem) - before - 93a29cb271c2e0bb.48191167a1cfaffa.d5e919d7ea6d2623.5aee92b4b1775373 - 0d861f3e430e8906.ea2028bee704eb3e.5708942f7db249aa.7941092cf29ef9f1 -@@ -52239,11 +52239,11 @@ VCMPPS_256_0x13(mem) - after - 93a29cb271c2e0bb.48191167a1cfaffa.d5e919d7ea6d2623.5aee92b4b1775373 - 0d861f3e430e8906.ea2028bee704eb3e.5708942f7db249aa.7941092cf29ef9f1 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 54c725d23d35a283.705d8a0503422ddb.274c91b80e79fc1d.aee570535db0f5bf - 7bcd59dabeb3c268 - --VCMPPS_256_0x13(reg) -+VCMPPS_128_0x16(reg) - before - 3ad3b43e6117bfcc.dabba0b19d28890c.0b2bccce1164ab8c.2c090ac045140461 - 48457febe3692898.c7f7bc2e6415fe02.057ec0e9f1eeb60e.6ae7263196e27a3b -@@ -52251,12 +52251,12 @@ VCMPPS_256_0x13(reg) - bc9953d2f2042d16.4676c3b29a0e7ce3.8be2acc990676638.013a35faf34ca363 - 12461f2a3800ce08 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 - 48457febe3692898.c7f7bc2e6415fe02.057ec0e9f1eeb60e.6ae7263196e27a3b - ff6eb54edf343877.f747f335b008bb90.bca261c33c6b8b0e.bdb360f51cf11bd7 - bc9953d2f2042d16.4676c3b29a0e7ce3.8be2acc990676638.013a35faf34ca363 - 12461f2a3800ce08 --VCMPPS_256_0x13(mem) -+VCMPPS_128_0x16(mem) - before - cca39c73061857f5.db1353e2b8664121.9052a7914033ff27.cd8c9b65896e8337 - 0b1f27c07aa0fb54.b828b3eccbe5b043.b1a51cbebe81fe87.e0ea2c05c20d1db8 -@@ -52270,7 +52270,7 @@ VCMPPS_256_0x13(mem) - 88a05816c232831a.1c53819b4e6b937e.e8e3a5b3afcd624d.e5f521fe6541bbef - 90397d2f08ee36fd - --VCMPPD_128_0x14(reg) -+VCMPPS_256_0x16(reg) - before - 7a636b135b621f3c.7e3df5f7ce53dfd8.5b01e618f68a7def.b666b2535be33f0b - 00bde616fa2ab259.6828918df01546ba.c8799b3e5bf7b428.cb9040f14f538996 -@@ -52278,12 +52278,12 @@ VCMPPD_128_0x14(reg) - 5135732a8fe3c5db.8d18b383e4a92394.9cfbe235d2e8f4a0.390dcbd77c7253c1 - 4bf7c1f7ee394bb9 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffff00000000.00000000ffffffff.00000000ffffffff - 00bde616fa2ab259.6828918df01546ba.c8799b3e5bf7b428.cb9040f14f538996 - 7f95eaa482d12bff.242da7c2438373ea.bf099b791b3d72d4.022fc979a629fc19 - 5135732a8fe3c5db.8d18b383e4a92394.9cfbe235d2e8f4a0.390dcbd77c7253c1 - 4bf7c1f7ee394bb9 --VCMPPD_128_0x14(mem) -+VCMPPS_256_0x16(mem) - before - 14b927c5178ba02e.d4ea7d12bbedbd99.7fb432bdee9412e5.bb9c6cdf1b847637 - 6f1f792d14720e4c.62ff05caa57a4fe4.d5cf9f5b7d4ffc09.773836e1939e3346 -@@ -52293,11 +52293,11 @@ VCMPPD_128_0x14(mem) - after - 14b927c5178ba02e.d4ea7d12bbedbd99.7fb432bdee9412e5.bb9c6cdf1b847637 - 6f1f792d14720e4c.62ff05caa57a4fe4.d5cf9f5b7d4ffc09.773836e1939e3346 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffffffffffff.ffffffffffffffff.ffffffff00000000 - 5006d37bf8352330.127d7c561d4e30d3.22ad33729d66b078.3b9076a27d7a517b - fae4e63728542af9 - --VCMPPD_128_0x14(reg) -+VCMPPS_256_0x16(reg) - before - c66384d672db2e9e.8c20d23a17274350.ed7e6303e3adf6d0.cf0952c465daf11c - fd594eeaf59b9a17.cc0dad427ae06bc8.430fb82fd6bf4709.5213502a224e1e42 -@@ -52305,12 +52305,12 @@ VCMPPD_128_0x14(reg) - 18da53211df99933.c493e8e279d6c671.d31499b4b22e76e5.4660d6e3ed6827c6 - 6f3b560d33267c7c - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff - fd594eeaf59b9a17.cc0dad427ae06bc8.430fb82fd6bf4709.5213502a224e1e42 - fa123fdf5021aa0f.ea9ae0813c6c58c4.717d764692115d2c.8597a890f1cff116 - 18da53211df99933.c493e8e279d6c671.d31499b4b22e76e5.4660d6e3ed6827c6 - 6f3b560d33267c7c --VCMPPD_128_0x14(mem) -+VCMPPS_256_0x16(mem) - before - def5a5fbde13ab64.b5fd861df8ada42f.34c440514e2a71fb.c51f1de5d3a2cbe0 - 6d583d9a0b3e72ab.2bc6d53d7ecb07ae.18f864bad774148d.a3ecfe4590fa9bc8 -@@ -52320,11 +52320,11 @@ VCMPPD_128_0x14(mem) - after - def5a5fbde13ab64.b5fd861df8ada42f.34c440514e2a71fb.c51f1de5d3a2cbe0 - 6d583d9a0b3e72ab.2bc6d53d7ecb07ae.18f864bad774148d.a3ecfe4590fa9bc8 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - 5f4b3d975977b205.167db39df973c4e8.a79d012a721c357b.93f7c9434f849710 - 5dceaab98acd3cc9 - --VCMPPD_128_0x14(reg) -+VCMPPS_256_0x16(reg) - before - 8396d80dd12b4a1f.79749dceb29ea470.43033cb4261596fa.0ca57209bd922a2f - 619b50adc027febf.24763665fd321de9.b960cfa16d50b040.53e19f922c2e089c -@@ -52332,12 +52332,12 @@ VCMPPD_128_0x14(reg) - b58b0a7e082e478c.9e380863d7ce94b8.f4ce07aabcc3aa16.fa241d53e3086f4f - 13c46763645f6fee - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.00000000ffffffff - 619b50adc027febf.24763665fd321de9.b960cfa16d50b040.53e19f922c2e089c - 53280c04f44f9455.3d1e8648553dd99d.d6e06acf6bb14d65.591d04b2dafc8bed - b58b0a7e082e478c.9e380863d7ce94b8.f4ce07aabcc3aa16.fa241d53e3086f4f - 13c46763645f6fee --VCMPPD_128_0x14(mem) -+VCMPPS_256_0x16(mem) - before - 7ec75dcd780c48f5.e30e458799505511.249038a29eee0965.7078a49efb1203fe - 18fa7b7c3c1cb690.38feba8b4242f88f.abf293f1c6abf5d1.a7283d17c52b94ca -@@ -52347,11 +52347,11 @@ VCMPPD_128_0x14(mem) - after - 7ec75dcd780c48f5.e30e458799505511.249038a29eee0965.7078a49efb1203fe - 18fa7b7c3c1cb690.38feba8b4242f88f.abf293f1c6abf5d1.a7283d17c52b94ca -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.00000000ffffffff - 4920205e42924035.cc553e354ec4ef29.2d03b670ac2a2195.b1cd4f4867e84cbd - 3d59c1d978a5ec3c - --VCMPPD_256_0x14(reg) -+VCMPPD_128_0x17(reg) - before - f31d1e9e835bb34e.98ab9e68bc11d497.c15446b2e96cbb9c.df4a7877a004d944 - 306362052596dea0.869635685521ec3d.4fef78db0c130db9.02cc533f67aaf862 -@@ -52359,12 +52359,12 @@ VCMPPD_256_0x14(reg) - aaa991659ccd50b3.afba9cfb572a9c06.a22d46dd5b90319f.0bab48bed88c599b - a9a25a4ebbdf140c - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 306362052596dea0.869635685521ec3d.4fef78db0c130db9.02cc533f67aaf862 - 4e798a78fae3a9de.efac604b2ad14653.d173ce1a5346202b.7253c4b31b29391b - aaa991659ccd50b3.afba9cfb572a9c06.a22d46dd5b90319f.0bab48bed88c599b - a9a25a4ebbdf140c --VCMPPD_256_0x14(mem) -+VCMPPD_128_0x17(mem) - before - 2703764edf2e269d.a0407337aae00ecc.a28c6365f73aaa82.2067db8fc07d7cc0 - 639919aa61864a78.8c892c5abda920d4.a4ee3376270d2ef3.a56d899c1d993d3b -@@ -52374,11 +52374,11 @@ VCMPPD_256_0x14(mem) - after - 2703764edf2e269d.a0407337aae00ecc.a28c6365f73aaa82.2067db8fc07d7cc0 - 639919aa61864a78.8c892c5abda920d4.a4ee3376270d2ef3.a56d899c1d993d3b -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 8297e027ed7fbbbe.b6661443688b3064.4592db39a4288361.38122177309110ee - fe47031d1f839a7e - --VCMPPD_256_0x14(reg) -+VCMPPD_128_0x17(reg) - before - 3b79eece76d58918.1d97fe1f2f388081.ac903be137bca543.9c6bacc42a8acdb7 - 4df4def6d1131a67.e5fd91243e2a473f.089d29817dd25ec2.710575a5afdd7bb2 -@@ -52386,12 +52386,12 @@ VCMPPD_256_0x14(reg) - 5bf5be5c057f12d6.6b2a0a0136e5ce5a.61904b73dcde8b4e.0aa7df19288cf645 - 8448788454fe3b36 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 4df4def6d1131a67.e5fd91243e2a473f.089d29817dd25ec2.710575a5afdd7bb2 - 8e04cf02cdc78917.b5941620375fcd23.25d9db8dd559968c.a22ab2c8502f4a7d - 5bf5be5c057f12d6.6b2a0a0136e5ce5a.61904b73dcde8b4e.0aa7df19288cf645 - 8448788454fe3b36 --VCMPPD_256_0x14(mem) -+VCMPPD_128_0x17(mem) - before - eed8faf6ef93d47b.1013a67216c7f14e.e289e8b256c8050f.170d779d2dec77b4 - 2325df5916577e41.0aa983af9b29612b.f57e2c1eb3132f6f.a39e5a7964109769 -@@ -52401,11 +52401,11 @@ VCMPPD_256_0x14(mem) - after - eed8faf6ef93d47b.1013a67216c7f14e.e289e8b256c8050f.170d779d2dec77b4 - 2325df5916577e41.0aa983af9b29612b.f57e2c1eb3132f6f.a39e5a7964109769 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 5d21c8a67699f4fe.38710d4e7371e6c7.635ad7dc97114cdf.ac2836f3f6c76272 - e2b9266a8972851e - --VCMPPD_256_0x14(reg) -+VCMPPD_128_0x17(reg) - before - 5e8dbe437363cbc9.1a69c268e72f384d.2539b288fd6d74dd.76d9360555ddb646 - 7beff9e84f257220.139d11cb54247dcd.c6ab3c996db58309.951deb9bc0410308 -@@ -52413,12 +52413,12 @@ VCMPPD_256_0x14(reg) - 0c9149494e4ece81.25f99b298f58f90f.94b9eff068581651.6b2848b90f02354d - da86e81b2b779227 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 7beff9e84f257220.139d11cb54247dcd.c6ab3c996db58309.951deb9bc0410308 - 972dd4c6b945b4cf.228930bdd8837faa.7712a7ed5cd550f6.9ef37288f549ef51 - 0c9149494e4ece81.25f99b298f58f90f.94b9eff068581651.6b2848b90f02354d - da86e81b2b779227 --VCMPPD_256_0x14(mem) -+VCMPPD_128_0x17(mem) - before - c5d9ce9864b5c20c.386956dea9ccfbe3.f6b8cefb96b0a829.7aee110f2dca12c6 - 09ef761ed7c78127.75fff6ef674c79a1.7293461f09964824.83fb08b446b78000 -@@ -52428,11 +52428,11 @@ VCMPPD_256_0x14(mem) - after - c5d9ce9864b5c20c.386956dea9ccfbe3.f6b8cefb96b0a829.7aee110f2dca12c6 - 09ef761ed7c78127.75fff6ef674c79a1.7293461f09964824.83fb08b446b78000 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 0d90fdf2d9979ab1.9697e03a797f52de.dccdf10ea03e496a.70d06544e534a175 - 0d30c407a3dbcc08 - --VCMPPS_128_0x14(reg) -+VCMPPD_256_0x17(reg) - before - 3e98e701262e5910.84b3d418a06e6d78.3132214a064b27b7.81c41eb0fd17230f - 5f56cc9e09b8843b.c5c85df61049be26.4fbce68866483b9b.42077e5535aede43 -@@ -52440,12 +52440,12 @@ VCMPPS_128_0x14(reg) - e1ffca7161a3a2a4.10f8758a5e3dcde5.7fcbe93b0d061235.83a0cb54a848e50f - bc8eb1871b63aafd - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5f56cc9e09b8843b.c5c85df61049be26.4fbce68866483b9b.42077e5535aede43 - ccb46f4ae9068832.aa9b147846354ae6.4a802a5f3402cb36.f9618fe765103535 - e1ffca7161a3a2a4.10f8758a5e3dcde5.7fcbe93b0d061235.83a0cb54a848e50f - bc8eb1871b63aafd --VCMPPS_128_0x14(mem) -+VCMPPD_256_0x17(mem) - before - 80f8ba6cd96c3f2d.f983db7f0e1b0d3b.d3abfd18736d034e.4be920898cdf4e44 - abaa63efff6f62c8.728c9ce18bfa07a3.cf7f270fa1d1a74e.0826cab34d19b90e -@@ -52455,11 +52455,11 @@ VCMPPS_128_0x14(mem) - after - 80f8ba6cd96c3f2d.f983db7f0e1b0d3b.d3abfd18736d034e.4be920898cdf4e44 - abaa63efff6f62c8.728c9ce18bfa07a3.cf7f270fa1d1a74e.0826cab34d19b90e -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - a615877ff1953cf6.f35c244d67209399.e2be51e4bb682cc2.c82c674f07e20e85 - 838e52983888708a - --VCMPPS_128_0x14(reg) -+VCMPPD_256_0x17(reg) - before - a13ea16f1bc0f2fb.2e67f964f5cf6ddf.b4bbe12ffe7d9d7e.b1c04a9bddb1858e - 7c894f3f4d15d083.8d30fc98d0341ae6.45cf4015d57226e5.2913d5698a5f3ca0 -@@ -52467,12 +52467,12 @@ VCMPPS_128_0x14(reg) - dc20b8790c478e8a.405aa1997eacdaf8.4646d199b4529fe8.84e191ffef18b649 - 1ff2ba9edf3bf237 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7c894f3f4d15d083.8d30fc98d0341ae6.45cf4015d57226e5.2913d5698a5f3ca0 - 71bb58736a1345cf.9f3d0a059fceff34.01e43c6a888a687a.26856e3cdc7d0e25 - dc20b8790c478e8a.405aa1997eacdaf8.4646d199b4529fe8.84e191ffef18b649 - 1ff2ba9edf3bf237 --VCMPPS_128_0x14(mem) -+VCMPPD_256_0x17(mem) - before - d3856606caf27c1c.19036bbcd13ce761.4c533c3e88d7655c.6e41fb10f55509dc - 7c661021c94a1123.84b26ea8557f8b00.9ff357e2d95d5d8c.d720b73be61fe001 -@@ -52482,11 +52482,11 @@ VCMPPS_128_0x14(mem) - after - d3856606caf27c1c.19036bbcd13ce761.4c533c3e88d7655c.6e41fb10f55509dc - 7c661021c94a1123.84b26ea8557f8b00.9ff357e2d95d5d8c.d720b73be61fe001 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 1c424e24790a4a4a.539f512c081ca844.895cffd4c2a88303.d7bed258493ac790 - 28142923f3a25052 - --VCMPPS_128_0x14(reg) -+VCMPPD_256_0x17(reg) - before - 287f0152be0236f6.ccd4dbe3618b67c1.7076299b6f8e9741.d9bc82fa928529a2 - 344b574f45e5b527.e0e55507cfdc7f0a.2b484164057ec3b6.e0f477ce19ed2cbc -@@ -52494,12 +52494,12 @@ VCMPPS_128_0x14(reg) - e1356a68f96572e2.a9af062aaa1f8fc6.eb0c1eb02b06bdb7.821ca030be8b3818 - d6a3cc9714d9b9b1 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 344b574f45e5b527.e0e55507cfdc7f0a.2b484164057ec3b6.e0f477ce19ed2cbc - a9c3268825d70b92.363f3a7bde094d53.e06194f16577664f.79d0573c74eb4880 - e1356a68f96572e2.a9af062aaa1f8fc6.eb0c1eb02b06bdb7.821ca030be8b3818 - d6a3cc9714d9b9b1 --VCMPPS_128_0x14(mem) -+VCMPPD_256_0x17(mem) - before - 5033595b91e28776.39eb205b5e1a27c4.140133025029fe8f.a797db0cf4b5039a - ce96c36a52b15d94.0d3242ccef8266e4.55013feeec3459db.724cc7715b1375a6 -@@ -52509,11 +52509,11 @@ VCMPPS_128_0x14(mem) - after - 5033595b91e28776.39eb205b5e1a27c4.140133025029fe8f.a797db0cf4b5039a - ce96c36a52b15d94.0d3242ccef8266e4.55013feeec3459db.724cc7715b1375a6 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 42081a150ed2148a.9aa3bfde079d708c.c53ae1b3737abeab.a1671e067605cde3 - be65800e60b22a6d - --VCMPPS_256_0x14(reg) -+VCMPPS_128_0x17(reg) - before - 59bd01cf5a3da4cf.f0af008a413c6db9.0a651155c667b46c.ac0b6f6397cd4187 - cdbd9eb6fe3174b4.1259b2f9279dbef2.66e7c0fb2115713a.d9bbcbd720519e96 -@@ -52521,12 +52521,12 @@ VCMPPS_256_0x14(reg) - b4e019a2b4850dba.1dea6b757f703b2c.525f27851c4a494f.71e3dfbcd319d9fa - 94f38e0535762fa9 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - cdbd9eb6fe3174b4.1259b2f9279dbef2.66e7c0fb2115713a.d9bbcbd720519e96 - 78af522de81ad9c9.82d4ac4eddffc45e.0a77c93cb432e4a2.261472fc2b119303 - b4e019a2b4850dba.1dea6b757f703b2c.525f27851c4a494f.71e3dfbcd319d9fa - 94f38e0535762fa9 --VCMPPS_256_0x14(mem) -+VCMPPS_128_0x17(mem) - before - 6c12fbc26c334f39.de9cef7f00fd4d32.c068695a28fcde86.9aecd640f4eadcee - d60aa3df945df6d9.532fd032650ed5dd.451a24eaf4ae6a99.3e6ad2dbd99dd82a -@@ -52536,11 +52536,11 @@ VCMPPS_256_0x14(mem) - after - 6c12fbc26c334f39.de9cef7f00fd4d32.c068695a28fcde86.9aecd640f4eadcee - d60aa3df945df6d9.532fd032650ed5dd.451a24eaf4ae6a99.3e6ad2dbd99dd82a -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - cbb891e92a25c9f4.8a09a5c7f02dac80.6949bfb667b52d98.0968a35e396efe2c - e9806f1eeba3a049 - --VCMPPS_256_0x14(reg) -+VCMPPS_128_0x17(reg) - before - 95ba786d1a1b9bb4.0f06cfaecfdb6cc7.04e890814d5272ce.bf5f97cc4621dbdc - 6960bab761632c18.545e3883d62e8659.38ce76c034417100.68d81a3cb8e56289 -@@ -52548,12 +52548,12 @@ VCMPPS_256_0x14(reg) - f823dbeca991ff7e.525b770e77d90e68.3fdf247d13aa05bf.232717d9c79eeacd - ed9387df9cac64bc - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 6960bab761632c18.545e3883d62e8659.38ce76c034417100.68d81a3cb8e56289 - c1bf32685d068f22.778c46545a2ad2d5.830754f04285e3c2.4081c6f2da0a7ecb - f823dbeca991ff7e.525b770e77d90e68.3fdf247d13aa05bf.232717d9c79eeacd - ed9387df9cac64bc --VCMPPS_256_0x14(mem) -+VCMPPS_128_0x17(mem) - before - 7a9494ef7441a6c3.6cd7b1b0e18fb9d7.c299469b4a49f43e.c9a2e4d3423d13a4 - a6f5b9f66c686c0f.7829b01ea38cf9da.a31030e9ee854182.7d9c8f5f6bc9491c -@@ -52563,11 +52563,11 @@ VCMPPS_256_0x14(mem) - after - 7a9494ef7441a6c3.6cd7b1b0e18fb9d7.c299469b4a49f43e.c9a2e4d3423d13a4 - a6f5b9f66c686c0f.7829b01ea38cf9da.a31030e9ee854182.7d9c8f5f6bc9491c -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 4b053b94299d7825.c7d21aad2eb4fa8c.28db41751b93fe06.d36397c51dfd1b78 - 2dc9ec78debd2fb3 - --VCMPPS_256_0x14(reg) -+VCMPPS_128_0x17(reg) - before - 21961c1009a65c32.7c4d910527c33447.c2c27da431f83393.84c8618adc7ce79e - 0b1623f93b45dca0.bc25ef1bb5ab665d.c67ff9f72c6ae2f4.c11f8b10de622754 -@@ -52575,12 +52575,12 @@ VCMPPS_256_0x14(reg) - 315ea86e22d3c7fc.d9b5b3ebeef31718.558f2d5e7b0d9073.4d39ee1d17529acd - 55951f7b867546e8 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 0b1623f93b45dca0.bc25ef1bb5ab665d.c67ff9f72c6ae2f4.c11f8b10de622754 - 4795fe9f0f25ecaa.e759d1c4ee62c894.2d558b11bb98425b.baab3cf23e507956 - 315ea86e22d3c7fc.d9b5b3ebeef31718.558f2d5e7b0d9073.4d39ee1d17529acd - 55951f7b867546e8 --VCMPPS_256_0x14(mem) -+VCMPPS_128_0x17(mem) - before - ae8b4af9a6c439d1.25be1cd20fd9aa41.6e04127bd26a0f14.987bdd4b085608e9 - 34e7ec84944b2eb4.7f02593773c6d126.81146862b6d46bb4.54639642fcfee669 -@@ -52590,11 +52590,11 @@ VCMPPS_256_0x14(mem) - after - ae8b4af9a6c439d1.25be1cd20fd9aa41.6e04127bd26a0f14.987bdd4b085608e9 - 34e7ec84944b2eb4.7f02593773c6d126.81146862b6d46bb4.54639642fcfee669 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 3600816d4733111b.d56017b50d7eda7e.96a2eee2ebae4294.a25a1402909cc234 - ee01d0a266aa39d9 - --VCMPPD_128_0x15(reg) -+VCMPPS_256_0x17(reg) - before - 21d486fe15470536.6b556da445ab76f6.891490a67c62344a.4eb916547437352a - 98213181380063fa.3c40bf97818cce7c.12dbc148d25bc265.f6bf25cb6ee27c15 -@@ -52602,12 +52602,12 @@ VCMPPD_128_0x15(reg) - c35457ab4cf3c562.2608866020b64638.18d0394ea0bf693a.82cced7c1fcff999 - 1f6a9d8d0e29a68a - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 98213181380063fa.3c40bf97818cce7c.12dbc148d25bc265.f6bf25cb6ee27c15 - af32ce966c608fcf.878df33116e1d5d9.ce00a606aaf6c07b.69829934f2bbd481 - c35457ab4cf3c562.2608866020b64638.18d0394ea0bf693a.82cced7c1fcff999 - 1f6a9d8d0e29a68a --VCMPPD_128_0x15(mem) -+VCMPPS_256_0x17(mem) - before - 1a282655ddd59880.2ed3ca2b7446405e.f77df310bc18dfc6.4c97788b5140fa4c - 51d203bfa8e08ba6.4dfb228281e43d70.d5b7b62b05125aae.c5a15e295907af5d -@@ -52617,11 +52617,11 @@ VCMPPD_128_0x15(mem) - after - 1a282655ddd59880.2ed3ca2b7446405e.f77df310bc18dfc6.4c97788b5140fa4c - 51d203bfa8e08ba6.4dfb228281e43d70.d5b7b62b05125aae.c5a15e295907af5d -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - df1aa9289f416334.17757266b932ac84.26ae2f5511ffe83e.faad0f39db95732f - 6e48d2828d74fb47 - --VCMPPD_128_0x15(reg) -+VCMPPS_256_0x17(reg) - before - 97552ddc07c8970f.ee4f6a0004aec0f4.7a5f61ca1bfa97df.5302dc3d0a0b733e - d3211bb4e21e8233.a9a06f2bd5ab0e94.012326b6d23ef3ff.fc4cd04122ded149 -@@ -52629,12 +52629,12 @@ VCMPPD_128_0x15(reg) - f026a18a31fd383c.8ec73725287e6b27.eb631fd2ae67f040.36f17b4c180ef52e - 7ee4292c30833361 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - d3211bb4e21e8233.a9a06f2bd5ab0e94.012326b6d23ef3ff.fc4cd04122ded149 - 7cf89874bd01f95e.eada35932d410841.080bbc947a89fc91.ff57864c7286be8a - f026a18a31fd383c.8ec73725287e6b27.eb631fd2ae67f040.36f17b4c180ef52e - 7ee4292c30833361 --VCMPPD_128_0x15(mem) -+VCMPPS_256_0x17(mem) - before - b3fd0ed8d5ef344e.89f73061dc9e7a7b.7133f1cee36df371.06794cdb0a6409b9 - b208a53c2461b321.a4b643655a71fcc5.70ece078791b5c4c.b5983e1b2b0d84a7 -@@ -52644,11 +52644,11 @@ VCMPPD_128_0x15(mem) - after - b3fd0ed8d5ef344e.89f73061dc9e7a7b.7133f1cee36df371.06794cdb0a6409b9 - b208a53c2461b321.a4b643655a71fcc5.70ece078791b5c4c.b5983e1b2b0d84a7 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 7924dadc2d801e2c.d132e3a43cdbb02b.2d714983a9e1bf63.3e1f61f02a918e95 - d1218a5d408496ed - --VCMPPD_128_0x15(reg) -+VCMPPS_256_0x17(reg) - before - 685b69b18b52f06a.facd70f1204682bc.9a8667b7d98a59a0.a4d5bcbc791132f8 - 5f19f958a687d7b8.b497a86d2d4154e2.56f95fa7b99b32d0.a6b554a7953075cd -@@ -52656,12 +52656,12 @@ VCMPPD_128_0x15(reg) - dc551c50be583f7a.43c2ee4e020335a1.126b98cfaf106313.bb19df4320695fe9 - 8634cbccc79b7c88 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 5f19f958a687d7b8.b497a86d2d4154e2.56f95fa7b99b32d0.a6b554a7953075cd - 11a936bf2eb08884.8350fe3d6f7c51ca.5fd6c6e177997768.0fdd8b301949460f - dc551c50be583f7a.43c2ee4e020335a1.126b98cfaf106313.bb19df4320695fe9 - 8634cbccc79b7c88 --VCMPPD_128_0x15(mem) -+VCMPPS_256_0x17(mem) - before - 4cfccbb729eb5b18.1b6ba779f30c3845.d0baf58b03e3bc93.cb02d1dffe8c347e - e93b5bf16366b6c4.2935d4a46857ae92.06048de08d26a1cc.e6e86e7bff9a2455 -@@ -52671,11 +52671,11 @@ VCMPPD_128_0x15(mem) - after - 4cfccbb729eb5b18.1b6ba779f30c3845.d0baf58b03e3bc93.cb02d1dffe8c347e - e93b5bf16366b6c4.2935d4a46857ae92.06048de08d26a1cc.e6e86e7bff9a2455 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffff00000000 - 18511dfecc0ad222.261801b583e30461.ddbd6681ae0b77c0.b2d1c10c899953f5 - 1b6c6fd84aa30a16 - --VCMPPD_256_0x15(reg) -+VCMPPD_128_0x18(reg) - before - 568671e12d6ed053.62c046a9344c0b2c.cdc8fa72623c5b3a.36c49da77dc4e1d4 - bf6ac193cf86e358.f3d6ef53e3e8b103.b35e83e2f15c2046.a84d5794451299df -@@ -52688,7 +52688,7 @@ VCMPPD_256_0x15(reg) - b2665d5acb787dd0.a76195e7f6ea80d2.36249a71cccf8f2f.0f240f3523ff5c0c - 8bc440a3becfdb68.592bb251895f33c6.b0683a8c9022e4a1.461541763299e588 - 2bec69448eecf17f --VCMPPD_256_0x15(mem) -+VCMPPD_128_0x18(mem) - before - 9975038955023c1c.a6d167d8431839cb.e701c47db752870a.7e745f9dd8e15a49 - 6c7b8c33a0e9828c.5fd9cc67f6ded2a6.2caf46579ccf38cb.fd95061141962ed3 -@@ -52698,11 +52698,11 @@ VCMPPD_256_0x15(mem) - after - 9975038955023c1c.a6d167d8431839cb.e701c47db752870a.7e745f9dd8e15a49 - 6c7b8c33a0e9828c.5fd9cc67f6ded2a6.2caf46579ccf38cb.fd95061141962ed3 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - b03158633859ee93.1a09453f5911a873.4ac38bc5fd99a073.7945c6d4e418df3b - 306cd8f956fb3571 - --VCMPPD_256_0x15(reg) -+VCMPPD_128_0x18(reg) - before - 06d95c325906d739.d97994c1bbf98b83.d5c9506140975dbc.dcc04632b1fdcfb1 - 58d64cea88c5043f.d86fad33359914f5.9eb48b8bc5ca3d2e.94c661fc8c1c4b1d -@@ -52710,12 +52710,12 @@ VCMPPD_256_0x15(reg) - e0b36587dc8ceab3.c4946b03780bd511.c93b7dad1b697037.ea18a85b28b91829 - 40fdcbc8224ee222 - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 58d64cea88c5043f.d86fad33359914f5.9eb48b8bc5ca3d2e.94c661fc8c1c4b1d - 82b0a68d80c3f62e.88df21a5c0464315.d016f02b85378573.509f5811aa01cfe0 - e0b36587dc8ceab3.c4946b03780bd511.c93b7dad1b697037.ea18a85b28b91829 - 40fdcbc8224ee222 --VCMPPD_256_0x15(mem) -+VCMPPD_128_0x18(mem) - before - 2c1a3f43b3cee9f8.ce2a854438ac1c79.6a5c08397af48613.e46f2d7b24ec3c27 - 8c3a7fb8f845e8d6.a863033131b0c82d.54017234e10e1147.7cfefd023c4d23ef -@@ -52725,11 +52725,11 @@ VCMPPD_256_0x15(mem) - after - 2c1a3f43b3cee9f8.ce2a854438ac1c79.6a5c08397af48613.e46f2d7b24ec3c27 - 8c3a7fb8f845e8d6.a863033131b0c82d.54017234e10e1147.7cfefd023c4d23ef -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 14b754400b45c15c.9046054769917c0e.6815a2255003a8f8.975be9ec06d634b5 - d2c3fe26f016d70c - --VCMPPD_256_0x15(reg) -+VCMPPD_128_0x18(reg) - before - fab422ca596485ea.f4abe12b12e6125c.56898248df87fd93.491b5ff390f52ccc - 6d7d5143dd4c7afb.b7d32ac13cae4c15.78bd4d296290e7b5.df30da36a5497a83 -@@ -52737,12 +52737,12 @@ VCMPPD_256_0x15(reg) - 9fc3c263a4162d69.57eee19a6ce16b60.4028b937fd0ce983.9bb2fcc8c0406748 - 78b99aeffdfc7eaf - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6d7d5143dd4c7afb.b7d32ac13cae4c15.78bd4d296290e7b5.df30da36a5497a83 - 856988fc1758f4ed.39fbabeca6a82bb2.522e60558e397721.071e90d9ac084f48 - 9fc3c263a4162d69.57eee19a6ce16b60.4028b937fd0ce983.9bb2fcc8c0406748 - 78b99aeffdfc7eaf --VCMPPD_256_0x15(mem) -+VCMPPD_128_0x18(mem) - before - 7afce63a80494fa8.18d9fbe31f12621e.eb7a46b5a864c74a.9ef6533d4e987886 - 7e4a5c9565329760.4af52fe824d6cfb6.d269582b793dfc9d.c8e52ad21b6662d7 -@@ -52752,11 +52752,11 @@ VCMPPD_256_0x15(mem) - after - 7afce63a80494fa8.18d9fbe31f12621e.eb7a46b5a864c74a.9ef6533d4e987886 - 7e4a5c9565329760.4af52fe824d6cfb6.d269582b793dfc9d.c8e52ad21b6662d7 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - f733b82cc2087bbb.4c7279323fec3f41.09a470d54422e02d.ef56805a99fd3111 - a570f72484de9053 - --VCMPPS_128_0x15(reg) -+VCMPPD_256_0x18(reg) - before - 97db9b2e5a323892.25679540730e8fb7.d56b874e8c54bb8c.11866fe1764708c2 - 20e268e2b985667a.c4d48c13f6e10a21.879a81a0d3b65e6a.dcfd0af7acf1f870 -@@ -52764,12 +52764,12 @@ VCMPPS_128_0x15(reg) - 6bf86efc815942f9.c58cbaabdf1a23f1.d9ce2592c1970c92.2bd604f1930922c4 - 67d05bad7c8fd4c3 - after -- 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 20e268e2b985667a.c4d48c13f6e10a21.879a81a0d3b65e6a.dcfd0af7acf1f870 - 9ed35bae3d6355b9.b0471a93658ba726.bf4c6192b19e6588.46d4bd03022e6c62 - 6bf86efc815942f9.c58cbaabdf1a23f1.d9ce2592c1970c92.2bd604f1930922c4 - 67d05bad7c8fd4c3 --VCMPPS_128_0x15(mem) -+VCMPPD_256_0x18(mem) - before - d68e3f24d8cb3e8b.e59e9f3a22f269e6.df6ee8477e993aaf.316ac70ba02d8f33 - 54dc2b40c3c91e47.6711e9d3bbbb062d.dabb20535e15a88c.236d4568e9ec2918 -@@ -52779,11 +52779,11 @@ VCMPPS_128_0x15(mem) - after - d68e3f24d8cb3e8b.e59e9f3a22f269e6.df6ee8477e993aaf.316ac70ba02d8f33 - 54dc2b40c3c91e47.6711e9d3bbbb062d.dabb20535e15a88c.236d4568e9ec2918 -- 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - ed580b1cb93d2b4e.f28db9c6460a9178.e2c19f6b53317751.45d7c3832b17955c - 2dd7bb185c9adf14 - --VCMPPS_128_0x15(reg) -+VCMPPD_256_0x18(reg) - before - 1f6d7e43677730bf.c01df7b3fbcad1f0.b32e37f870a9f7d4.a813de4f9fea5191 - 77e6086ee939c50a.11a3dc9f3c4adb37.ecccbe3503a7c23a.bfff17539ecf72a0 -@@ -52791,12 +52791,12 @@ VCMPPS_128_0x15(reg) - c8b16278bf9eaa2e.a21d7e2c2d500e62.372fd881d2f17ad1.4fd5686c1e4e77da - 81567859d900d45d - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 77e6086ee939c50a.11a3dc9f3c4adb37.ecccbe3503a7c23a.bfff17539ecf72a0 - 918e55067d6dd9a0.beb435ce99c8064e.fab34aea9b902f55.0351c66469ec95aa - c8b16278bf9eaa2e.a21d7e2c2d500e62.372fd881d2f17ad1.4fd5686c1e4e77da - 81567859d900d45d --VCMPPS_128_0x15(mem) -+VCMPPD_256_0x18(mem) - before - 74a17216b50e675e.7a9b2a2f4c58725f.99aa34a315efaf9f.008c63684755df5c - 0382d28fce85ed0a.0297a996c0276ee1.7e26d1206cb0a430.b216e60993489a9f -@@ -52806,11 +52806,11 @@ VCMPPS_128_0x15(mem) - after - 74a17216b50e675e.7a9b2a2f4c58725f.99aa34a315efaf9f.008c63684755df5c - 0382d28fce85ed0a.0297a996c0276ee1.7e26d1206cb0a430.b216e60993489a9f -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6a36b5652adcc111.03f9bc29ca36f182.861fb5ddd9c97d00.3cdfca2e260d0004 - cdb82189a5f6237c - --VCMPPS_128_0x15(reg) -+VCMPPD_256_0x18(reg) - before - b6ed624f6b9f8d5f.f8a1309aa3d388c5.35f6492c998ef0fa.6133f3f42739d897 - 54ca88ec16937856.94d1013bcb6331d3.ad367d90be2b1271.9b670ac254fc7832 -@@ -52818,12 +52818,12 @@ VCMPPS_128_0x15(reg) - 1ab1745c8a8dc337.62b49572927d1bb0.deaeca2b7d65b30f.9a5faf30bca87727 - 19bb36a830a94dd8 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 54ca88ec16937856.94d1013bcb6331d3.ad367d90be2b1271.9b670ac254fc7832 - 019d8fcc425e2010.1894a434bc987868.c60454c1d6999594.0f8774327c1c19fe - 1ab1745c8a8dc337.62b49572927d1bb0.deaeca2b7d65b30f.9a5faf30bca87727 - 19bb36a830a94dd8 --VCMPPS_128_0x15(mem) -+VCMPPD_256_0x18(mem) - before - 66668686f32d583e.fb5131068aab9b77.4cfe51df6a1ed4d6.4f7edc3b4d1aa98d - 5f2d19b6213f5484.00cac437df45e57e.b33e53695f876006.77c2845be544b2bb -@@ -52833,11 +52833,11 @@ VCMPPS_128_0x15(mem) - after - 66668686f32d583e.fb5131068aab9b77.4cfe51df6a1ed4d6.4f7edc3b4d1aa98d - 5f2d19b6213f5484.00cac437df45e57e.b33e53695f876006.77c2845be544b2bb -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - c040fdbc313e0d63.e6775ae0f71abe8b.69cf1a8012e3e038.58d18c7fd628f0d6 - c935e25b69fb9d1a - --VCMPPS_256_0x15(reg) -+VCMPPS_128_0x18(reg) - before - 613bc0f832724ebf.e222456b49434353.7f43542ef16dc5ea.6fb8d6e607ee4c90 - 7a3121c2ce1b3e6e.1e51c11b3e075ad4.ab1714b4b06c2ebe.63c7c9188af17ba3 -@@ -52845,12 +52845,12 @@ VCMPPS_256_0x15(reg) - a3185c8dec31cda1.57c2473329f91938.310bd315eb9b1578.80874190a90f10a9 - 62d0bfae7d43eff4 - after -- ffffffffffffffff.00000000ffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7a3121c2ce1b3e6e.1e51c11b3e075ad4.ab1714b4b06c2ebe.63c7c9188af17ba3 - 71610125d882aad6.5198eeba2a950d12.c84195ddcfa235b4.1fc96e02b7f8289d - a3185c8dec31cda1.57c2473329f91938.310bd315eb9b1578.80874190a90f10a9 - 62d0bfae7d43eff4 --VCMPPS_256_0x15(mem) -+VCMPPS_128_0x18(mem) - before - a16f62494e9f81a9.6aa22e66a7b6e57c.0c9c487158403a72.42c2cac89fe40bb6 - 192fa84b383081f5.234b741ca59d2c12.4cf26d62d2742bee.57b2776388095219 -@@ -52860,11 +52860,11 @@ VCMPPS_256_0x15(mem) - after - a16f62494e9f81a9.6aa22e66a7b6e57c.0c9c487158403a72.42c2cac89fe40bb6 - 192fa84b383081f5.234b741ca59d2c12.4cf26d62d2742bee.57b2776388095219 -- ffffffff00000000.00000000ffffffff.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 24460b38c91ebe01.dc2949d0d7bd3921.de42150a19d97156.fc6ce0fc6713c7ff - 45cf94d495116cdb - --VCMPPS_256_0x15(reg) -+VCMPPS_128_0x18(reg) - before - 019aee42671b528c.6f341ffba8947319.93f7d1a6441077f2.e7d38f991d213c9b - 8e1ae8b47bbcb7bf.6374c6d6106e8677.ac13bb0863f3d52f.eb111d8bdd87c9d0 -@@ -52872,12 +52872,12 @@ VCMPPS_256_0x15(reg) - 8769b151d2f3e85a.b619ba84ed7fb8b8.7468aa25299fe09b.53bf664300df13bd - 70c819e39ae84acd - after -- 00000000ffffffff.ffffffff00000000.00000000ffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 8e1ae8b47bbcb7bf.6374c6d6106e8677.ac13bb0863f3d52f.eb111d8bdd87c9d0 - 469b80956a80d520.dcd17bb51eb8b448.83ca0564d1f58f83.c5c63bca7518d222 - 8769b151d2f3e85a.b619ba84ed7fb8b8.7468aa25299fe09b.53bf664300df13bd - 70c819e39ae84acd --VCMPPS_256_0x15(mem) -+VCMPPS_128_0x18(mem) - before - f8add0956040317d.abd078544fa22e19.cd16002f9ace50f2.db39a6b7087f0522 - c73907446ef285f9.101ccf0a7b19e10b.fd95c7a240b13623.1488f68609203ac5 -@@ -52887,11 +52887,11 @@ VCMPPS_256_0x15(mem) - after - f8add0956040317d.abd078544fa22e19.cd16002f9ace50f2.db39a6b7087f0522 - c73907446ef285f9.101ccf0a7b19e10b.fd95c7a240b13623.1488f68609203ac5 -- ffffffffffffffff.ffffffffffffffff.00000000ffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - aa7ae64ecf956308.0991223f578b8032.1849cd91e965de18.6cd47e8be3d6c30e - 4368af99f4038f0c - --VCMPPS_256_0x15(reg) -+VCMPPS_128_0x18(reg) - before - 5bab249597225ad5.75c686805b9e65f2.555315973da0e5c0.ba1604e4244d1834 - 12e9d7e968be6216.f8ea96609e31c459.512a8a5144aba730.e695acb0c8fa91f7 -@@ -52899,12 +52899,12 @@ VCMPPS_256_0x15(reg) - ca85ec4e079d13af.92eaf7dbbb27884d.ca47e79f23d93464.48d7445fbcd02f22 - 37332b1b4512cde0 - after -- ffffffffffffffff.00000000ffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 12e9d7e968be6216.f8ea96609e31c459.512a8a5144aba730.e695acb0c8fa91f7 - c36ec6030463e17a.0eb292dab55b3c69.5a627cdb073a022d.779143dff177058d - ca85ec4e079d13af.92eaf7dbbb27884d.ca47e79f23d93464.48d7445fbcd02f22 - 37332b1b4512cde0 --VCMPPS_256_0x15(mem) -+VCMPPS_128_0x18(mem) - before - 1f7174ffa74898f6.837c45350cf9365e.625d404dcda26532.fe24c70b33127780 - db5d9cf7fe7e4f8e.499dce26af028436.58d9e91d06d68f43.5246188ad473082e -@@ -52914,11 +52914,11 @@ VCMPPS_256_0x15(mem) - after - 1f7174ffa74898f6.837c45350cf9365e.625d404dcda26532.fe24c70b33127780 - db5d9cf7fe7e4f8e.499dce26af028436.58d9e91d06d68f43.5246188ad473082e -- 0000000000000000.ffffffff00000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 436e76d3fd1c6cf6.71905cd3414d940b.2b174b895f9fb89b.cb89fe7137db03ef - a7428bb131fae55a - --VCMPPD_128_0x16(reg) -+VCMPPS_256_0x18(reg) - before - 137079b42b710506.a72c208fdd9c4b1e.89fa5a6768a6cd61.be72fdfbb64b303a - 6b5ec5e6c2cb9ea0.4fc79910234b0478.20be78b59ddc238f.e805ff7ca5e1e5b6 -@@ -52926,12 +52926,12 @@ VCMPPD_128_0x16(reg) - 4fae638836582e4d.dfc7e40d4e6cf775.3788002aa3121021.7202e358bafcf4f3 - 8a04be8b1799c70d - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 6b5ec5e6c2cb9ea0.4fc79910234b0478.20be78b59ddc238f.e805ff7ca5e1e5b6 - 0b5a6ab49294edd4.180c5b40e9385531.902ab0277d7ccf40.869bcdf7486d923a - 4fae638836582e4d.dfc7e40d4e6cf775.3788002aa3121021.7202e358bafcf4f3 - 8a04be8b1799c70d --VCMPPD_128_0x16(mem) -+VCMPPS_256_0x18(mem) - before - a86ed97d7c51c6b3.93a7aed04aa49db8.7ec3b0616bf5a96f.6f25632bac2820de - a90cb018052eae11.339147f66b0375c0.d3ce392a5ede254c.964dd595334c3c22 -@@ -52945,7 +52945,7 @@ VCMPPD_128_0x16(mem) - c51482fdf08d29a8.f7674f91422b535a.0a3c76c835016e5e.1d6dd7532dec87f1 - 35fe5f80d8802fd3 - --VCMPPD_128_0x16(reg) -+VCMPPS_256_0x18(reg) - before - ab49e6c67151d1ee.9715761e8b263339.d3ecb7dd310cd143.a53922755153b3ea - db9b689194ecacec.bc7a169ab9151632.7a915cb89b31a87a.65727d46b236b20a -@@ -52953,12 +52953,12 @@ VCMPPD_128_0x16(reg) - da844f66ebadf843.6fa14a504027560e.9e6e4ecb56745480.c5d02c05b4dcd0b0 - 1c8b79ca8eb8688f - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - db9b689194ecacec.bc7a169ab9151632.7a915cb89b31a87a.65727d46b236b20a - 2241e24ddedcfa7a.1010de5c97678ec0.4aa33b8e1f2515aa.27b6012774b528e7 - da844f66ebadf843.6fa14a504027560e.9e6e4ecb56745480.c5d02c05b4dcd0b0 - 1c8b79ca8eb8688f --VCMPPD_128_0x16(mem) -+VCMPPS_256_0x18(mem) - before - 08b564641d54aab0.60b3ab4956ece2f4.b6f9d762d1612c49.d23e93dcdfaaa0a8 - 651869bd7dbc5241.1019f260bb24f438.bfe6ff7e6521ca9c.415e052b535436cd -@@ -52968,11 +52968,11 @@ VCMPPD_128_0x16(mem) - after - 08b564641d54aab0.60b3ab4956ece2f4.b6f9d762d1612c49.d23e93dcdfaaa0a8 - 651869bd7dbc5241.1019f260bb24f438.bfe6ff7e6521ca9c.415e052b535436cd -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - e2bcb2612221c85d.5fb832dfe5b07e2c.8aab16840866503d.45c26137723230c0 - 909d43cc547e0be6 - --VCMPPD_128_0x16(reg) -+VCMPPS_256_0x18(reg) - before - 88f94150926d20b9.ba94ee839f370d41.b58a231de21c6e33.041bfb474e01b0e2 - 87225a2fc98cabe6.73d735155d48a943.a5c3ef4149b2777e.b0506dc30853c84f -@@ -52985,7 +52985,7 @@ VCMPPD_128_0x16(reg) - eb6487d59566e719.e94f010379625790.8baf92b6b7fdd3b8.6c13e6e6526856b2 - 0e0ac6ae918711fd.f7c9d0390e91d454.c39a08e8c789bf8e.1333e49a474a1435 - 817be3cd0307bf04 --VCMPPD_128_0x16(mem) -+VCMPPS_256_0x18(mem) - before - 92b65d6aa3aa134c.4e621126597c653f.7b111da339dfdcbb.a9cf4e4316e276ac - 22b2d05d4240cb39.05b666a98ad01f8a.50f3642e155a2bf0.999b5f333f9535bd -@@ -52995,11 +52995,11 @@ VCMPPD_128_0x16(mem) - after - 92b65d6aa3aa134c.4e621126597c653f.7b111da339dfdcbb.a9cf4e4316e276ac - 22b2d05d4240cb39.05b666a98ad01f8a.50f3642e155a2bf0.999b5f333f9535bd -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 2e188ef5ef735ab0.4c851c8195c6b3ee.5db5d15352058c75.0629d2839137bb6a - 3c812dbbf13df95e - --VCMPPD_256_0x16(reg) -+VCMPPD_128_0x19(reg) - before - eca143379cce2ff5.631bd1723527a993.939875ada880065e.4c2ceec5ea4d171e - 72d410652e7399dd.860dfdf5eafe4cca.c2d7c79592c9ae88.fd6df608a4f2d845 -@@ -53007,12 +53007,12 @@ VCMPPD_256_0x16(reg) - 6fa1bf84742ef84a.0bf2fdbe134381e6.490d4646613af0b9.117db5aeed80efc0 - 2de463e9b381bc6b - after -- ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 72d410652e7399dd.860dfdf5eafe4cca.c2d7c79592c9ae88.fd6df608a4f2d845 - 296590b042ba73bf.75bc8d6b2b040082.36900ea4f22ee818.4b4464079cfe8c17 - 6fa1bf84742ef84a.0bf2fdbe134381e6.490d4646613af0b9.117db5aeed80efc0 - 2de463e9b381bc6b --VCMPPD_256_0x16(mem) -+VCMPPD_128_0x19(mem) - before - 7945eca40b0fb144.9fd49a4c615c6528.237cc9dcbfca8a23.589b6ce77d790217 - d36bcbcb10358879.144a1c77a4cff605.9b276daf4aa2d865.bf867af3e27859e0 -@@ -53022,11 +53022,11 @@ VCMPPD_256_0x16(mem) - after - 7945eca40b0fb144.9fd49a4c615c6528.237cc9dcbfca8a23.589b6ce77d790217 - d36bcbcb10358879.144a1c77a4cff605.9b276daf4aa2d865.bf867af3e27859e0 -- 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1d3a7c0e937acea1.422f059e9eb4726f.170a2f296f7a33a5.05a344fcf5e3c95d - 9c6cf6d1db68596a - --VCMPPD_256_0x16(reg) -+VCMPPD_128_0x19(reg) - before - fbc282c279dc2090.c57a460149b1b5ed.b13565738d3fd653.d3dc44a74091b7fd - 7ef2e3396ccb587d.eab056111cb16f44.d7ae5c5a42404ee7.5efd218b612b7008 -@@ -53034,12 +53034,12 @@ VCMPPD_256_0x16(reg) - 600b146dc04c0d56.1c2d38348b394bc1.b429ff0a70d068ce.52602535021670ee - 723943d3b97f2f20 - after -- ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 7ef2e3396ccb587d.eab056111cb16f44.d7ae5c5a42404ee7.5efd218b612b7008 - 814615a450c23dda.69a728292984b8d1.0ee6e6bd5a4115d7.953b43c1ee531af5 - 600b146dc04c0d56.1c2d38348b394bc1.b429ff0a70d068ce.52602535021670ee - 723943d3b97f2f20 --VCMPPD_256_0x16(mem) -+VCMPPD_128_0x19(mem) - before - d2911988309a13b6.778cdc0258f6029b.e00c03205fd9e53f.23c3a3ac21788378 - 4c36233e8273d8dd.22176aceb54b5955.921204d8c0724278.b800cf0e08c6a183 -@@ -53049,11 +53049,11 @@ VCMPPD_256_0x16(mem) - after - d2911988309a13b6.778cdc0258f6029b.e00c03205fd9e53f.23c3a3ac21788378 - 4c36233e8273d8dd.22176aceb54b5955.921204d8c0724278.b800cf0e08c6a183 -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 0193c5622991f38c.a477c5bb2c261bdb.2bbe985c9abd33ca.c592acc7ea81d966 - f47f55f51c076b97 - --VCMPPD_256_0x16(reg) -+VCMPPD_128_0x19(reg) - before - ba3f7695f562f0d8.f4e354a6b6eec26d.32e48bb47ec5fffe.cbfc23014c87403b - 711e0911111ea5d4.72af079d8e39618e.c58a0594053f3547.c891d521fb790017 -@@ -53061,12 +53061,12 @@ VCMPPD_256_0x16(reg) - 25687a517feb8eaf.80ebca5191ca0342.67b00aba20f685fa.49ec9b86c10687bd - 864aa8a211bac7e0 - after -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 711e0911111ea5d4.72af079d8e39618e.c58a0594053f3547.c891d521fb790017 - 76670cd60ac8c638.58c35b32ce7e8e1c.b8b431c85c21f862.fe4729a9c39f2e89 - 25687a517feb8eaf.80ebca5191ca0342.67b00aba20f685fa.49ec9b86c10687bd - 864aa8a211bac7e0 --VCMPPD_256_0x16(mem) -+VCMPPD_128_0x19(mem) - before - 8f2ecaebcdc5a91e.da6b50ec0a143be6.c7f2d2e7f4287c2d.2dc98cd8ec4a18bc - 40647f4c1435eba2.f1be881547cd0689.09a6eede12a4b709.684ab48c5ca9ed53 -@@ -53076,11 +53076,11 @@ VCMPPD_256_0x16(mem) - after - 8f2ecaebcdc5a91e.da6b50ec0a143be6.c7f2d2e7f4287c2d.2dc98cd8ec4a18bc - 40647f4c1435eba2.f1be881547cd0689.09a6eede12a4b709.684ab48c5ca9ed53 -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 0ff58f06ad72792f.b57f13bd4925edc1.ee4053a3f0275d42.a9b7e36b9bbb4bb3 - 673be26da1844dd3 - --VCMPPS_128_0x16(reg) -+VCMPPD_256_0x19(reg) - before - 0a5876b5bb898078.e4e8e23738573f8f.1a855e1546db81ae.48bf9448e94742f7 - ec599cb286552150.d25db830bcd053e6.510bfbaa655223b7.0e1ad9000db4d74d -@@ -53088,12 +53088,12 @@ VCMPPS_128_0x16(reg) - e13b8a739e749d43.69fdda2b21b05727.a5c3203c7bb488cc.4b93605547ab048b - 7a499acb954b13ca - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - ec599cb286552150.d25db830bcd053e6.510bfbaa655223b7.0e1ad9000db4d74d - 6b8b4ecd9e756c04.b5208cdd55ea725f.b65be8e943161288.1b1c9fb5787cd970 - e13b8a739e749d43.69fdda2b21b05727.a5c3203c7bb488cc.4b93605547ab048b - 7a499acb954b13ca --VCMPPS_128_0x16(mem) -+VCMPPD_256_0x19(mem) - before - 830bc8037f6ac35b.acb34c1022deefb7.c9c01e04392ebf6a.7a8d9f10a9b7c230 - 44a566e92114d068.26408e11c7409f0d.b335d556bb716653.910661d16babfc5f -@@ -53103,11 +53103,11 @@ VCMPPS_128_0x16(mem) - after - 830bc8037f6ac35b.acb34c1022deefb7.c9c01e04392ebf6a.7a8d9f10a9b7c230 - 44a566e92114d068.26408e11c7409f0d.b335d556bb716653.910661d16babfc5f -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 5a91e370fa35f0a7.9bc887ebe219080d.916389116c7360c9.f5349fcc14985ed0 - f98213dc35a9ff6a - --VCMPPS_128_0x16(reg) -+VCMPPD_256_0x19(reg) - before - b0aebb8a58db9080.687ab9e869c67b32.4d5b359d90a93a0f.3eb57e53d24b2cae - 7505914119ba4cbe.9d6cf1bf001153e9.1f345462cf60b8a3.e4e9d5bd121725e9 -@@ -53115,12 +53115,12 @@ VCMPPS_128_0x16(reg) - 9864bc7ae7b0375f.eb966f361505d88e.93e3d7d46d748f30.8a279bb98ebc9514 - 42c8012303ad835b - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 7505914119ba4cbe.9d6cf1bf001153e9.1f345462cf60b8a3.e4e9d5bd121725e9 - a4d4936d15d370ce.d43104dfdb2233f9.6d9de1a53acac175.5ecb0b3b48e40aa7 - 9864bc7ae7b0375f.eb966f361505d88e.93e3d7d46d748f30.8a279bb98ebc9514 - 42c8012303ad835b --VCMPPS_128_0x16(mem) -+VCMPPD_256_0x19(mem) - before - 647cb966c1c390a9.af0408d42ce0df1b.bc67afafcbc7fed3.ed52325b06e95f81 - ca0d406ce409772a.43ff73e77feca2af.25703f35187361f5.d835eea49eb66d13 -@@ -53130,11 +53130,11 @@ VCMPPS_128_0x16(mem) - after - 647cb966c1c390a9.af0408d42ce0df1b.bc67afafcbc7fed3.ed52325b06e95f81 - ca0d406ce409772a.43ff73e77feca2af.25703f35187361f5.d835eea49eb66d13 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 - d6f9a775cb55c673.563497e9c1cd6b0d.2a593f1de8bacc7e.cc8b7a2f418432ad - 8e95424a839f610c - --VCMPPS_128_0x16(reg) -+VCMPPD_256_0x19(reg) - before - 50445bd73541bd5d.33eb8050c774a693.8d0848b0e8baea2f.80d1a857a46d4d3d - 6ee4c144f4f6844b.46ec189e98f35096.b16608df8db474da.dcb1504e673bfa89 -@@ -53142,12 +53142,12 @@ VCMPPS_128_0x16(reg) - 2d27656b07ca3eb1.f94771482a43f5f3.34f2a72ac3009b74.1ad953267355cb77 - b3b9a4e0f4b96771 - after -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 6ee4c144f4f6844b.46ec189e98f35096.b16608df8db474da.dcb1504e673bfa89 - 43c171fc5b4af083.e9c6e94d5adf81a7.209ad4e44d4745b7.1bc5b5ef4d2f908e - 2d27656b07ca3eb1.f94771482a43f5f3.34f2a72ac3009b74.1ad953267355cb77 - b3b9a4e0f4b96771 --VCMPPS_128_0x16(mem) -+VCMPPD_256_0x19(mem) - before - c3302608ed681fa7.87619bfd9301a980.52392b7b242b68a6.4ab97c1d8c6ab0bd - 260b5489796db046.adbc0e1e9c7c6f9d.d16993d263a395eb.bf3a51294311c13e -@@ -53157,11 +53157,11 @@ VCMPPS_128_0x16(mem) - after - c3302608ed681fa7.87619bfd9301a980.52392b7b242b68a6.4ab97c1d8c6ab0bd - 260b5489796db046.adbc0e1e9c7c6f9d.d16993d263a395eb.bf3a51294311c13e -- 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 561ea44bbcab4c6e.cc059cbd936bf66f.acb25f9d22750fdd.319de93cec48c695 - e817a41b16ef32c5 - --VCMPPS_256_0x16(reg) -+VCMPPS_128_0x19(reg) - before - 6c7c4ec49f048adc.daedbe63abfbd04f.7e8baf13b9f7317c.c163b9e8d9e7d5e2 - 1a17e3a123120986.214f75859dd21c48.6c62efa9ccf7b588.6b83b3084619452a -@@ -53169,12 +53169,12 @@ VCMPPS_256_0x16(reg) - 6423bfab894a6f46.6800a797fc42fe35.6b32e74127818a47.ee3b6f73b0ee1531 - 7f6c2b97e5a9ed48 - after -- 0000000000000000.ffffffffffffffff.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 1a17e3a123120986.214f75859dd21c48.6c62efa9ccf7b588.6b83b3084619452a - 4e365f203da5ec70.0712449daf3bec86.f2d559e967f6bf3c.86dcc6e884171be0 - 6423bfab894a6f46.6800a797fc42fe35.6b32e74127818a47.ee3b6f73b0ee1531 - 7f6c2b97e5a9ed48 --VCMPPS_256_0x16(mem) -+VCMPPS_128_0x19(mem) - before - 153a753f40546052.b82bfeb0a48cceb3.20e61b60a0f40c80.35c3971ca7235352 - 8c73c957ddfc2a7b.a69a189a29f84464.0b911ae2b85cd294.aad564e58368560c -@@ -53184,11 +53184,11 @@ VCMPPS_256_0x16(mem) - after - 153a753f40546052.b82bfeb0a48cceb3.20e61b60a0f40c80.35c3971ca7235352 - 8c73c957ddfc2a7b.a69a189a29f84464.0b911ae2b85cd294.aad564e58368560c -- 0000000000000000.ffffffffffffffff.0000000000000000.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 - 8d5181874970b1d8.c0dccecde37b6840.e960aec5b37e7ac5.09ab45f6c20df938 - ab0852155c841202 - --VCMPPS_256_0x16(reg) -+VCMPPS_128_0x19(reg) - before - 68156cd4c2ce532a.ce8fdb775255e764.a44861ee50aa8ec4.951e3afecd51d33b - 9e1f8f9d9178fb5b.616730880c6664bf.924ac0a49733bb3b.e4cf43a1cb0bd529 -@@ -53196,12 +53196,12 @@ VCMPPS_256_0x16(reg) - e05ae001d81a6b8b.ea15b9b9053d2191.fc43d08024801cb4.da3eb9d5e160c21f - 3a931e3e3215267f - after -- ffffffff00000000.ffffffffffffffff.ffffffff00000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff - 9e1f8f9d9178fb5b.616730880c6664bf.924ac0a49733bb3b.e4cf43a1cb0bd529 - a773b7dd640e4442.21a5fca494afe314.e62fe65b54a12c51.b241449ac9b63bbc - e05ae001d81a6b8b.ea15b9b9053d2191.fc43d08024801cb4.da3eb9d5e160c21f - 3a931e3e3215267f --VCMPPS_256_0x16(mem) -+VCMPPS_128_0x19(mem) - before - ad0cefc1d6e02307.a6230773882aace1.9782e5b17b1bda5f.30d2787da35dc90e - 0e74a94ae9cd74e5.531927a111ca43f1.06b9fb7a1355c9ad.dd28dcc06cc36d0b -@@ -53211,11 +53211,11 @@ VCMPPS_256_0x16(mem) - after - ad0cefc1d6e02307.a6230773882aace1.9782e5b17b1bda5f.30d2787da35dc90e - 0e74a94ae9cd74e5.531927a111ca43f1.06b9fb7a1355c9ad.dd28dcc06cc36d0b -- ffffffff00000000.ffffffffffffffff.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 - 0f45c41fce3e054d.d5bb42dd1ce661ee.96b5d62c180f3c73.1758c5c44d5c8ca1 - 5bca435e9ea68092 - --VCMPPS_256_0x16(reg) -+VCMPPS_128_0x19(reg) - before - 88336beda9a95ad5.65461f43d7dabc2f.63ff36c4d67c6032.701292edbca63744 - fcdf3bdd0af25919.1b66511cc0c8b817.48a01316d9d1a6e0.7a69292ef2ca5a44 -@@ -53223,12 +53223,12 @@ VCMPPS_256_0x16(reg) - 252fc1914084b24f.13352fa2a1cc6fa4.8a2878ac28e8f12a.9234d5e182e7027f - 5840e32a15f70113 - after -- 0000000000000000.ffffffff00000000.ffffffff00000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - fcdf3bdd0af25919.1b66511cc0c8b817.48a01316d9d1a6e0.7a69292ef2ca5a44 - 1219ae9a5e0db808.0b71d898a515b52f.e1e9d53fc0716da4.928516dbd6865f9e - 252fc1914084b24f.13352fa2a1cc6fa4.8a2878ac28e8f12a.9234d5e182e7027f - 5840e32a15f70113 --VCMPPS_256_0x16(mem) -+VCMPPS_128_0x19(mem) - before - be76bba3a8c41685.936b6e2c4de58499.0d7dd226d1faa1a1.9fa8f8c7acc3701d - a2a2d9395a5afe01.b61bb3d820bb6993.d6143d1050a90853.7cb452fde88d2429 -@@ -53238,11 +53238,11 @@ VCMPPS_256_0x16(mem) - after - be76bba3a8c41685.936b6e2c4de58499.0d7dd226d1faa1a1.9fa8f8c7acc3701d - a2a2d9395a5afe01.b61bb3d820bb6993.d6143d1050a90853.7cb452fde88d2429 -- ffffffffffffffff.0000000000000000.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff - 4f0bd768840e36ca.8f02f2158af85f46.46635cc6acc06484.fea3816bfa1f1e3f - 5b1e4e7b08ffdba1 - --VCMPPD_128_0x17(reg) -+VCMPPS_256_0x19(reg) - before - f056e5563fffbecc.d1e0b0da3644fe6f.fdd2e57c5976e856.a4b2086bc13fd15c - 199640683aa9036c.41dcbe18757389ce.90445ea55e9a75c6.42806d2596706398 -@@ -53250,12 +53250,12 @@ VCMPPD_128_0x17(reg) - 966238e1ed31a2be.56746fa90cead66c.9942d7ea7b018976.a9ce4e8cee19e5ef - 2be4c211aaaa4d61 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffff00000000.0000000000000000.00000000ffffffff - 199640683aa9036c.41dcbe18757389ce.90445ea55e9a75c6.42806d2596706398 - 312c5d1d958ce62e.79c97f0e5ea69213.a5a65bfb35ef4142.fa9b05e24760d665 - 966238e1ed31a2be.56746fa90cead66c.9942d7ea7b018976.a9ce4e8cee19e5ef - 2be4c211aaaa4d61 --VCMPPD_128_0x17(mem) -+VCMPPS_256_0x19(mem) - before - 5caae05c941ccae7.a385cb20dd2674c7.b4a808d39b4a1103.c665cedecc5d880d - 19ec2159cb7d17ae.b4e1144602f697f6.6f33c87928d2ff04.895b3d43c38e7cb3 -@@ -53265,11 +53265,11 @@ VCMPPD_128_0x17(mem) - after - 5caae05c941ccae7.a385cb20dd2674c7.b4a808d39b4a1103.c665cedecc5d880d - 19ec2159cb7d17ae.b4e1144602f697f6.6f33c87928d2ff04.895b3d43c38e7cb3 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffff00000000.0000000000000000.0000000000000000 - a2140019893a14af.5174b4f85858c475.6d7aaaeaab8ce2f7.42f0701114a02ddf - ef262c51a79964bd - --VCMPPD_128_0x17(reg) -+VCMPPS_256_0x19(reg) - before - a2604fb350977e5a.279196b44aae3c40.9642055bc303451d.67cec48dd8d55040 - b7e8d6a2ab27b863.a7bb40b1c64024c1.4e79fa56d1b8079a.2ea8f55b737660a4 -@@ -53277,12 +53277,12 @@ VCMPPD_128_0x17(reg) - 7715fcd6e92b7b67.0841c18261f02746.8c53c5c04c7542c5.931d892d61f35a6b - e851e408ece5ba26 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.00000000ffffffff.00000000ffffffff.0000000000000000 - b7e8d6a2ab27b863.a7bb40b1c64024c1.4e79fa56d1b8079a.2ea8f55b737660a4 - 8a0bbb8955d44e83.fe5c7bfc1afd8a5f.d766915420054899.9ed4b842977cd04e - 7715fcd6e92b7b67.0841c18261f02746.8c53c5c04c7542c5.931d892d61f35a6b - e851e408ece5ba26 --VCMPPD_128_0x17(mem) -+VCMPPS_256_0x19(mem) - before - 7b3a45bf5560aead.da5295f404b67cba.a136902db725baa1.c88c9208f09531cc - 27a5293eb770f029.0f0e804f41038d29.a40763eb39a9fd9d.e95ff497a8f05357 -@@ -53292,11 +53292,11 @@ VCMPPD_128_0x17(mem) - after - 7b3a45bf5560aead.da5295f404b67cba.a136902db725baa1.c88c9208f09531cc - 27a5293eb770f029.0f0e804f41038d29.a40763eb39a9fd9d.e95ff497a8f05357 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffff00000000.ffffffff00000000 - 3a316745d87b50b7.5f31416c9312ce0a.5d6c064c2fcb8627.45ff693ac7881baf - 3a64732764dd39d4 - --VCMPPD_128_0x17(reg) -+VCMPPS_256_0x19(reg) - before - 8292020a879d7a2e.59eab9a4cf90e61f.32310e07dfeb75d3.ca98cdc8dc82430d - 7bd51250ca55186a.00557e7c2f68bb2e.47e01e8ebeb51d69.11d0890624b7a143 -@@ -53304,12 +53304,12 @@ VCMPPD_128_0x17(reg) - ebcaa7b721da5d36.5b6f4d439b9711f0.a67bf914a44e5ca6.a294ce79f6cc3052 - a3b84e85b8c4d882 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffff00000000.0000000000000000.0000000000000000 - 7bd51250ca55186a.00557e7c2f68bb2e.47e01e8ebeb51d69.11d0890624b7a143 - 7f79a066c9904f33.0d3d30b814118b10.fa8a6e6fccfd0176.10e0b6f223765cf6 - ebcaa7b721da5d36.5b6f4d439b9711f0.a67bf914a44e5ca6.a294ce79f6cc3052 - a3b84e85b8c4d882 --VCMPPD_128_0x17(mem) -+VCMPPS_256_0x19(mem) - before - ee17b303866a11b2.1b1323ae6dc07c1e.c5b7510be0040bfb.a9febbebe2356aa6 - 617f78e07bcb9710.6ca110b94acde998.29e1b6fbfe66325d.5e61b05f233d6922 -@@ -53319,11 +53319,11 @@ VCMPPD_128_0x17(mem) - after - ee17b303866a11b2.1b1323ae6dc07c1e.c5b7510be0040bfb.a9febbebe2356aa6 - 617f78e07bcb9710.6ca110b94acde998.29e1b6fbfe66325d.5e61b05f233d6922 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.00000000ffffffff.00000000ffffffff.0000000000000000 - 2b9513634ceb7800.dcbc2fb8248d9cf1.4b0b97033638fed4.4df224cd1de0253c - 40b99ba10d945b33 - --VCMPPD_256_0x17(reg) -+VCMPPD_128_0x1A(reg) - before - 548f35c1709a7055.3adce1e25fc34ceb.b4e158845a585a28.c1a20bf388bf1a41 - e7bfee9ae17ca14f.e15bfe6f0a855db3.1c7be213917a56a0.a14cd2bc246a55b5 -@@ -53331,12 +53331,12 @@ VCMPPD_256_0x17(reg) - f661af285f094779.63301b6397f92488.0c3d0a2b6ff5f606.0b044585a85e1760 - 4dabea5dc8bf15f0 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - e7bfee9ae17ca14f.e15bfe6f0a855db3.1c7be213917a56a0.a14cd2bc246a55b5 - 5397c398fdc82acc.fadde9f6693e6683.70d5c9d26480cb06.c5d3664825466a5b - f661af285f094779.63301b6397f92488.0c3d0a2b6ff5f606.0b044585a85e1760 - 4dabea5dc8bf15f0 --VCMPPD_256_0x17(mem) -+VCMPPD_128_0x1A(mem) - before - 6893d1bea2732336.2a6aaeb4a4cc3301.f61e11a2b0c253ee.4cfda08c4f66134b - 398a76935189fb5f.4dfebcaa679c2b11.9074489fd1a5aee0.8c62875fa05d5e82 -@@ -53346,11 +53346,11 @@ VCMPPD_256_0x17(mem) - after - 6893d1bea2732336.2a6aaeb4a4cc3301.f61e11a2b0c253ee.4cfda08c4f66134b - 398a76935189fb5f.4dfebcaa679c2b11.9074489fd1a5aee0.8c62875fa05d5e82 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 68d1ec48a004fc09.ccf7f680d9942e78.4a88668499ebdb19.7c4b391002136c74 - e466fcc44ce9a888 - --VCMPPD_256_0x17(reg) -+VCMPPD_128_0x1A(reg) - before - bc57ff9c7676023d.80b9b40177829de1.e0f31a39bfd4b227.21de4643796625b9 - 606841031d46b540.bcdf2adf9491f84c.52aa3d0b9451300e.6fcb5571d02b8b96 -@@ -53358,12 +53358,12 @@ VCMPPD_256_0x17(reg) - 7b1d6b2f50e119de.131411b50f8fce8b.c17a70ab7a341131.e19ef5c654c39eb4 - bc1b7ec6b9afc24f - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 606841031d46b540.bcdf2adf9491f84c.52aa3d0b9451300e.6fcb5571d02b8b96 - 2be6bb66dce6fe3c.f90ecbcc133cca76.7f695b62f498e7d8.101c11f8ba46cadb - 7b1d6b2f50e119de.131411b50f8fce8b.c17a70ab7a341131.e19ef5c654c39eb4 - bc1b7ec6b9afc24f --VCMPPD_256_0x17(mem) -+VCMPPD_128_0x1A(mem) - before - 7e6026e40515f4d5.ab594bcb14c441d1.e6bb7a87a496c2b6.75297950c2b1ebc7 - 03386b0c5602ed75.16e55aa7c51ab3c2.4ed1812cef5e6023.f7c471be699cb143 -@@ -53373,11 +53373,11 @@ VCMPPD_256_0x17(mem) - after - 7e6026e40515f4d5.ab594bcb14c441d1.e6bb7a87a496c2b6.75297950c2b1ebc7 - 03386b0c5602ed75.16e55aa7c51ab3c2.4ed1812cef5e6023.f7c471be699cb143 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - c6d5b92b709e2bad.1221edcb5c50654d.4d755aa3165f8c76.d6ea1fa643e9f0a4 - ea0dccf8ad64e1e0 - --VCMPPD_256_0x17(reg) -+VCMPPD_128_0x1A(reg) - before - 3c4b59c3e67cadb3.bc32baf97366e89f.59686beb7a481c3f.9c9c244d29b092b4 - 28f0c17289bd92ca.e5524881e9e45c58.4d3006fbf4e30ddf.f0607c7b62f133e4 -@@ -53385,12 +53385,12 @@ VCMPPD_256_0x17(reg) - 3e9f13317fec9272.3f0df8719f3360d6.a87383986f338cd7.17f3c713b47535cb - a259b15505cf0edb - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 28f0c17289bd92ca.e5524881e9e45c58.4d3006fbf4e30ddf.f0607c7b62f133e4 - 0a48007333b4cad0.1d02deb0ee244607.48c5ba6667ad74d8.258fde19dc2f2b32 - 3e9f13317fec9272.3f0df8719f3360d6.a87383986f338cd7.17f3c713b47535cb - a259b15505cf0edb --VCMPPD_256_0x17(mem) -+VCMPPD_128_0x1A(mem) - before - a28d1acceb4a728d.2040f5190af2255b.294112af181c67f1.c7855efda7019287 - f25b7d6284f11d0e.0c79a1956f51c039.b668a95874eb1785.03494601aba1c295 -@@ -53400,11 +53400,11 @@ VCMPPD_256_0x17(mem) - after - a28d1acceb4a728d.2040f5190af2255b.294112af181c67f1.c7855efda7019287 - f25b7d6284f11d0e.0c79a1956f51c039.b668a95874eb1785.03494601aba1c295 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - f7f5229f38f4362c.71de4dfc384afe7e.29c33a98466d60c7.3e122d97898d8f79 - f5b025009befa4a8 - --VCMPPS_128_0x17(reg) -+VCMPPD_256_0x1A(reg) - before - 382f19b9e955d3e4.62585c1e8d681c21.a3a343c0d5fd183e.c68e2d07f43772cd - 63da072c104b57da.8f85806c03383a94.4f2ef5c9bc392aa1.777d8d90f6181dfc -@@ -53412,12 +53412,12 @@ VCMPPS_128_0x17(reg) - e2e8bff5571351a3.9b6d762ac31e09a7.85ca7a59d97e2603.81f680a1644c2c83 - 93180c0008b80933 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - 63da072c104b57da.8f85806c03383a94.4f2ef5c9bc392aa1.777d8d90f6181dfc - d3ffeac7ab5b6d36.59480a77b6714ab2.d1cd5e82898b7054.175bd420671b1c7f - e2e8bff5571351a3.9b6d762ac31e09a7.85ca7a59d97e2603.81f680a1644c2c83 - 93180c0008b80933 --VCMPPS_128_0x17(mem) -+VCMPPD_256_0x1A(mem) - before - 278ff42a706a6ebc.ede28022afff3fcd.33c04171464c329e.c67246b9489e8759 - 1b25b50ab76f1849.50392bba50a97261.fb0de6385a0583c3.f211bd0e7177d003 -@@ -53427,11 +53427,11 @@ VCMPPS_128_0x17(mem) - after - 278ff42a706a6ebc.ede28022afff3fcd.33c04171464c329e.c67246b9489e8759 - 1b25b50ab76f1849.50392bba50a97261.fb0de6385a0583c3.f211bd0e7177d003 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff - 8fe0ae9b539e2b22.8e2e2cdbda6d9a77.8fc4aef7a64e874a.77649c4762860902 - 89b0fc0362d471af - --VCMPPS_128_0x17(reg) -+VCMPPD_256_0x1A(reg) - before - f422f7658d0bb15f.c79edf25e1e20bc5.22637a3dfc9e0650.13c6cac616f5b404 - 16078ad77eb705bf.cfabd915bea8201d.7d26a2b9d7bea942.37f2afc68858f79c -@@ -53439,12 +53439,12 @@ VCMPPS_128_0x17(reg) - eb5a659f24a0d73d.bae614d8d6ead89b.fb816db325fc7e24.d3f7c905e083b118 - 0269f61dfe63a154 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - 16078ad77eb705bf.cfabd915bea8201d.7d26a2b9d7bea942.37f2afc68858f79c - 49abb0c7d265a87a.81d5165706fc2656.fcc19fbc0659bdfa.d914dbe117830d3f - eb5a659f24a0d73d.bae614d8d6ead89b.fb816db325fc7e24.d3f7c905e083b118 - 0269f61dfe63a154 --VCMPPS_128_0x17(mem) -+VCMPPD_256_0x1A(mem) - before - 4334dc158d30971e.5660a6cd11f4ceb4.57ab4e824a7ff318.d5b20809d1322a6c - 7026f9d8abf550a3.e8096dbc34eec88a.32f040427dc633fb.e89f6d29a687fb7d -@@ -53454,11 +53454,11 @@ VCMPPS_128_0x17(mem) - after - 4334dc158d30971e.5660a6cd11f4ceb4.57ab4e824a7ff318.d5b20809d1322a6c - 7026f9d8abf550a3.e8096dbc34eec88a.32f040427dc633fb.e89f6d29a687fb7d -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 01aac575fd97f98d.ec73828d8d01b806.15293db5919c119d.26e1827c38c0feab - 09ce2a862ebca821 - --VCMPPS_128_0x17(reg) -+VCMPPD_256_0x1A(reg) - before - 94a78b0bbc076810.1dd46d256b8d624a.17ccc847fc332603.d5b54040aa4227b5 - 22b9a2787e2d7a25.97553b51d6ab7e71.d9f88472113a870f.45f1eb91f3ca52e2 -@@ -53466,12 +53466,12 @@ VCMPPS_128_0x17(reg) - bcb7dfb5113b8270.108839ce1491bdb0.8df853cc9ef81507.a0a92a3583b3d629 - 44bdb660022aa69b - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 22b9a2787e2d7a25.97553b51d6ab7e71.d9f88472113a870f.45f1eb91f3ca52e2 - 114f6a3712ba190c.49f7abe65afe082f.8c43b47a68a218d8.3fa9bb9487414d4f - bcb7dfb5113b8270.108839ce1491bdb0.8df853cc9ef81507.a0a92a3583b3d629 - 44bdb660022aa69b --VCMPPS_128_0x17(mem) -+VCMPPD_256_0x1A(mem) - before - 07b0da0120b47cd2.7e3cfd5f193cf1fe.c8d261f71f70591f.38655dd24fc7b94b - c5501204fa5c12fa.b529c09fc647a261.4da2a04c98a897a9.e9d4cefa159b424e -@@ -53481,11 +53481,11 @@ VCMPPS_128_0x17(mem) - after - 07b0da0120b47cd2.7e3cfd5f193cf1fe.c8d261f71f70591f.38655dd24fc7b94b - c5501204fa5c12fa.b529c09fc647a261.4da2a04c98a897a9.e9d4cefa159b424e -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff - a2c2afe1513871cb.ee6e27967db0b858.2e034f294250edbc.ceecd75c5784ed43 - b92c666f09b0888c - --VCMPPS_256_0x17(reg) -+VCMPPS_128_0x1A(reg) - before - 1a9e4c534212f846.792d0c920583b2cc.a95ec224bf269644.422db98aacd97b9e - 4d9085749d35761b.ba746d56e51da36e.47e7f3f915d7a5b6.920c28c7f2ea9d4a -@@ -53493,12 +53493,12 @@ VCMPPS_256_0x17(reg) - 9920e21d2bef93c8.efc52bc4986b8844.a0f303286f1b49da.5b1c098688d588b2 - 8be574df0fc7c9c6 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - 4d9085749d35761b.ba746d56e51da36e.47e7f3f915d7a5b6.920c28c7f2ea9d4a - ae4d0e3eb6a641b7.43624e180d1101dc.2654b4811c4f2259.fc6d1acc328f0ded - 9920e21d2bef93c8.efc52bc4986b8844.a0f303286f1b49da.5b1c098688d588b2 - 8be574df0fc7c9c6 --VCMPPS_256_0x17(mem) -+VCMPPS_128_0x1A(mem) - before - 6894d4c5e4718d55.6956fd7d959fa9f7.9a678146a238f3cf.120edb5aabc656e5 - cdf5a62222e0908a.7c3b5ccb923fbff3.2015cb8a4883ffac.d9f238846cdc8425 -@@ -53508,11 +53508,11 @@ VCMPPS_256_0x17(mem) - after - 6894d4c5e4718d55.6956fd7d959fa9f7.9a678146a238f3cf.120edb5aabc656e5 - cdf5a62222e0908a.7c3b5ccb923fbff3.2015cb8a4883ffac.d9f238846cdc8425 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 - a4fb92f54a3a4298.d841d2ddb484d9fc.2cc52c08d6c4ea06.d245726cea7b36f6 - bc4b4702df1b31df - --VCMPPS_256_0x17(reg) -+VCMPPS_128_0x1A(reg) - before - 6a4b9140ca573fad.cc39a3436d3e6ac9.d9fbe27a10415662.6b5f3a1af6d240dc - 388f4d9144ba990d.ee5917b96936bf50.8b9325b36f1ec244.f4342d9e228e27b3 -@@ -53520,12 +53520,12 @@ VCMPPS_256_0x17(reg) - a516071c5b262832.8c6f14cd5d33e713.779135aea56e5b2a.58c3afae0c429712 - eb143710025298f3 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff - 388f4d9144ba990d.ee5917b96936bf50.8b9325b36f1ec244.f4342d9e228e27b3 - 82647561ecd07eab.e42768435a2e005a.4c5798f66daa5b4d.a512808175055bb6 - a516071c5b262832.8c6f14cd5d33e713.779135aea56e5b2a.58c3afae0c429712 - eb143710025298f3 --VCMPPS_256_0x17(mem) -+VCMPPS_128_0x1A(mem) - before - 38d19295743f1a84.fbf1fe2e2f47d44f.c1fc96448e5031a6.678efa47b3f8fe87 - 1dc63e287d18d9f1.e140560304bfbead.5e9c6a9207919a40.7a99e22d34d3820f -@@ -53535,11 +53535,11 @@ VCMPPS_256_0x17(mem) - after - 38d19295743f1a84.fbf1fe2e2f47d44f.c1fc96448e5031a6.678efa47b3f8fe87 - 1dc63e287d18d9f1.e140560304bfbead.5e9c6a9207919a40.7a99e22d34d3820f -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 1b877728c5b7fc12.cd6e1aa71ee63bdf.4440fa6747b1b838.750d0c91fdae1852 - 160e46e67dc5a265 - --VCMPPS_256_0x17(reg) -+VCMPPS_128_0x1A(reg) - before - 484d9339e05efd53.ecebfb6d3d96d91e.8be57e4d9cac460a.44ddadc546a8e4ed - 6917eff5c10463c9.c4b7c070bb8fe2b6.490033678bfa7e27.1ebba2acfdf3205a -@@ -53547,12 +53547,12 @@ VCMPPS_256_0x17(reg) - e37bc5576fa842fc.fab7fa6140016b3c.355481a3295c69e5.cb6e43c209b5b306 - 57dbe7c99545839e - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 6917eff5c10463c9.c4b7c070bb8fe2b6.490033678bfa7e27.1ebba2acfdf3205a - d3b75685bd431073.80b7411d5eafd407.630b365f865b21e1.aca855078a9e26a9 - e37bc5576fa842fc.fab7fa6140016b3c.355481a3295c69e5.cb6e43c209b5b306 - 57dbe7c99545839e --VCMPPS_256_0x17(mem) -+VCMPPS_128_0x1A(mem) - before - 2db9bd084b59529d.f6ae37d673be3311.0f8368267d926382.1b26129e118893df - 27d5416b46fedb2e.669ba86e6611205e.9be6055a326d7704.70cce4bcd96bda7a -@@ -53562,11 +53562,11 @@ VCMPPS_256_0x17(mem) - after - 2db9bd084b59529d.f6ae37d673be3311.0f8368267d926382.1b26129e118893df - 27d5416b46fedb2e.669ba86e6611205e.9be6055a326d7704.70cce4bcd96bda7a -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - faf6444d7c280db8.d1d6789988a0dd4d.89a5c1bb7232e66f.dcc83b117b87b245 - aab4b9208dd8bbcd - --VCMPPD_128_0x18(reg) -+VCMPPS_256_0x1A(reg) - before - 57a66803ef11d2a6.8b93bba5f0c62f09.83bcce04eef32549.a298d7c13534b8af - 41e944243ebd327d.b19fd0d01924fb9d.038d1439b3b4592b.a2530ee5e0b098dc -@@ -53574,12 +53574,12 @@ VCMPPD_128_0x18(reg) - 389174d4109ebfd4.2c2fc554fb50833c.dd1f5eadc8ad7358.c750cc375c476cab - a42a4b3e657bd9a6 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffff00000000.00000000ffffffff.ffffffffffffffff - 41e944243ebd327d.b19fd0d01924fb9d.038d1439b3b4592b.a2530ee5e0b098dc - c3c849f1156817fe.48e4ffbc134e2d9f.ad9446a2736eb4a2.65a1e1138eb23f21 - 389174d4109ebfd4.2c2fc554fb50833c.dd1f5eadc8ad7358.c750cc375c476cab - a42a4b3e657bd9a6 --VCMPPD_128_0x18(mem) -+VCMPPS_256_0x1A(mem) - before - d8fdda12c558443d.fe8ebf3bcdec64ac.394c9d83ec37b79f.ef7859c551fed2f9 - 3f93f6a199ec669d.6f0c2891e5de4332.4b060337030f86f5.3fec3455a7ec0d33 -@@ -53589,11 +53589,11 @@ VCMPPD_128_0x18(mem) - after - d8fdda12c558443d.fe8ebf3bcdec64ac.394c9d83ec37b79f.ef7859c551fed2f9 - 3f93f6a199ec669d.6f0c2891e5de4332.4b060337030f86f5.3fec3455a7ec0d33 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.0000000000000000.00000000ffffffff - 163ac29c0c67c666.c7ba42ba9cda9ef6.ee8569db11bee429.0a55789230d0051c - 3be1d8169bde3b24 - --VCMPPD_128_0x18(reg) -+VCMPPS_256_0x1A(reg) - before - 1bb908c343ba3d73.3de46ae0e2667b28.6483ea6571fd938c.37e162a440afeb5f - 05270305c7ee46b7.08818e8f9c4bd962.1dfca0af14f4b080.f50cd9a005bf7d37 -@@ -53601,12 +53601,12 @@ VCMPPD_128_0x18(reg) - 67f84af9cc945fc8.f7c83cdb2af97ef0.543223d12e8b5930.3ff931e5bf72317f - 84550b05ec2bcb47 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 05270305c7ee46b7.08818e8f9c4bd962.1dfca0af14f4b080.f50cd9a005bf7d37 - 5578c549c0089399.52dfab9455239b40.4f735f041f4a347d.03cf4abc7bfc56de - 67f84af9cc945fc8.f7c83cdb2af97ef0.543223d12e8b5930.3ff931e5bf72317f - 84550b05ec2bcb47 --VCMPPD_128_0x18(mem) -+VCMPPS_256_0x1A(mem) - before - aeae530a1e35df62.97f38f83871de8ee.d209bd5036d93e9c.8a86e980de445c45 - 98d184df729c2bfc.41b58e518c2f68b7.c16eaadf96d09770.4bbaab7fca007967 -@@ -53616,11 +53616,11 @@ VCMPPD_128_0x18(mem) - after - aeae530a1e35df62.97f38f83871de8ee.d209bd5036d93e9c.8a86e980de445c45 - 98d184df729c2bfc.41b58e518c2f68b7.c16eaadf96d09770.4bbaab7fca007967 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.00000000ffffffff.0000000000000000 - 20a597a8efad565a.72bdb06ee51f3fe5.47d3bafcc0310243.e1f61819c8b2f084 - 6f96bb8d12c0c2d7 - --VCMPPD_128_0x18(reg) -+VCMPPS_256_0x1A(reg) - before - f8464a0008019de8.76ee70754f71ad77.b29bc99472160ea1.976bd462c2b28d99 - d953c3de4702bf62.fd3123c241c12cc3.dc708eaeb8c5c5b1.69584a91887aa0c8 -@@ -53628,12 +53628,12 @@ VCMPPD_128_0x18(reg) - 13b3608b0d72c244.0dd4078d49358c96.5d2f0974e680db7c.075c3bffce0e5160 - 8b0bae1486f16721 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffff00000000.ffffffffffffffff.00000000ffffffff - d953c3de4702bf62.fd3123c241c12cc3.dc708eaeb8c5c5b1.69584a91887aa0c8 - 6e0921936a4e62f2.90392c7ce0a98d69.4b88fa2b56baa0c1.9b6499772d95f8fc - 13b3608b0d72c244.0dd4078d49358c96.5d2f0974e680db7c.075c3bffce0e5160 - 8b0bae1486f16721 --VCMPPD_128_0x18(mem) -+VCMPPS_256_0x1A(mem) - before - 013f6da4714af56a.249f7d32cdf81d03.4ecc30e29772e775.6cb0b7f604a4b18f - 47c2f59aac26b868.fd1772f5466eaddb.30ee2468e76b5833.d659011d4db15fa5 -@@ -53643,11 +53643,11 @@ VCMPPD_128_0x18(mem) - after - 013f6da4714af56a.249f7d32cdf81d03.4ecc30e29772e775.6cb0b7f604a4b18f - 47c2f59aac26b868.fd1772f5466eaddb.30ee2468e76b5833.d659011d4db15fa5 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.ffffffff00000000.ffffffffffffffff.ffffffff00000000 - aee94c698195cc31.77ded97bd0595f89.48df5ab3fbc26efb.274e550bceb7318c - c63359aa3ec8ceb5 - --VCMPPD_256_0x18(reg) -+VCMPPD_128_0x1B(reg) - before - 306fe79e48f23392.89241419523f9555.d0c543161ae5f8b6.35479551f7388c5d - bf4dfd528ac19cce.a2df94dfe39d83dd.6169757d8c90b7ad.340889cf659bb04e -@@ -53660,7 +53660,7 @@ VCMPPD_256_0x18(reg) - d01b95349dc24416.d6e548a84fb852f6.86166d1bc3e7d81a.1ff0b41960f697f9 - c023aeaf1f816816.0104ad5fb39ebdcb.9b17265c5b7596a8.d3c9911b0455fc8a - 2c609cc16ec59c2f --VCMPPD_256_0x18(mem) -+VCMPPD_128_0x1B(mem) - before - 078052f7ba503311.e9b2412fac884379.00063eef2a5a8189.fbb99caceec72f04 - 3ef72da903057d5f.a8144b21df6513eb.adb87746d1f95a5c.0448cb771b68ddd9 -@@ -53674,7 +53674,7 @@ VCMPPD_256_0x18(mem) - 33164732fd1618e9.5981b606a8cf7caf.845cd2f61d0d3aef.7e5d462fadc76aa1 - a67b89f34a9ec1eb - --VCMPPD_256_0x18(reg) -+VCMPPD_128_0x1B(reg) - before - e7b575e3f0f41e5f.a9567ee1e78be27f.02240ed376758f59.66e6ec27fa9ab807 - 9c5807693b56bca8.ec1ccabc3e594e2e.b1c9cec05b1f85c2.674f9dce773a3ce4 -@@ -53687,7 +53687,7 @@ VCMPPD_256_0x18(reg) - 20b139f3c64fd973.d834a9ae1e8b1a25.c2bdf03bf35b9b96.636564d7aff980b2 - d10a09ec2e6baf6b.496996a5a42d008e.914c72afd8b40d83.36f2ba2fbee1429c - bcc31dc0c1003bcf --VCMPPD_256_0x18(mem) -+VCMPPD_128_0x1B(mem) - before - d1a40778d4622a76.09af72c00d377a3d.1b890d8ceb4cbc95.7ac24f87a9b61632 - 5161f6411211c9be.26ee71db023e7895.2a5e8b4f10f30c67.d96b8331ffeef352 -@@ -53701,7 +53701,7 @@ VCMPPD_256_0x18(mem) - 019ed1bb808c0ae0.7b661d96982df885.6e5b881a620a531c.6985e1a9b02d188f - 528e034e424dd906 - --VCMPPD_256_0x18(reg) -+VCMPPD_128_0x1B(reg) - before - 21fb6c74cbd25c9b.eab6b543e96e2312.6b37c30e722ef276.5c1900f9c792c256 - 32161987e649e0fd.aeda8d8deccfdd94.afd1ee7dd19b0f9c.f7be6f6579d2b40a -@@ -53714,7 +53714,7 @@ VCMPPD_256_0x18(reg) - e12b04f4303da0d6.28d6d585a8bbf493.a4809b504ffe89a3.1a154f4895d7e565 - 8a882b26443ad7d2.36760917363c243a.a490c5f18be59c39.a3e91e9037ac1193 - 6d0757287a5df3bf --VCMPPD_256_0x18(mem) -+VCMPPD_128_0x1B(mem) - before - 533c76fb7af74916.88788988beccc19e.b386a62fb56028b7.0c4d67ce1edc8607 - 3351f7f75485ccc4.39461a883b809ce6.7ad227ba3e33bd33.39028052a76d81bc -@@ -53728,7 +53728,7 @@ VCMPPD_256_0x18(mem) - 4d53111805ae50d2.20afc60fac7c1098.5a4cc5d5e41389df.4d88fffe04939d86 - edf05fff123f35f3 - --VCMPPS_128_0x18(reg) -+VCMPPD_256_0x1B(reg) - before - c180245884b6cff6.40d6a1141361c88c.0fe2d96ed9dc225b.2b13da3d38383865 - 25864a73f784a73a.9b6c83e86b395f4c.20240f1a788d1349.b646c4c8083c689c -@@ -53741,7 +53741,7 @@ VCMPPS_128_0x18(reg) - 754dcebd0636f86c.3cdf34802841d03e.aec0657f251c200f.d9b1fe616f2ad5b0 - 0d20aaa24d57ff38.fdfc2ec96785d98f.1704d50a7d148558.6e1f04f4890e3acc - 535e526d73f5541d --VCMPPS_128_0x18(mem) -+VCMPPD_256_0x1B(mem) - before - 623865b849eadfce.494cdc8f6973f849.bb8fefad4311336b.b53a5d251b017ed1 - 787ab8c126fa960c.851d5feef6171f4c.5364f31ad9f29dfd.e6aff83e9c6f4625 -@@ -53755,7 +53755,7 @@ VCMPPS_128_0x18(mem) - 2a660ebe66987bde.6dde49b7d025e5d6.7c02af3ca0e18cf5.6d865816b4013611 - 7b8014ae853bd500 - --VCMPPS_128_0x18(reg) -+VCMPPD_256_0x1B(reg) - before - 8be8d4f3a727357b.7da8098a013e21ca.d165a8f856a6fdb5.c76561c90b068ab3 - fa0b9351b8518f2e.478135c3142fe3f3.a5c2485cbce03337.5a39458e9eb187d8 -@@ -53768,7 +53768,7 @@ VCMPPS_128_0x18(reg) - 22364d34544322c4.65bf0d57ba767e84.453f254f9f5cc205.124bd87777eb3e8f - 60b3ff08168b28e9.b12c0d311020aea9.0d293c3d9aa8e7ce.cb669470b2c26c05 - 6158f7656a41cc65 --VCMPPS_128_0x18(mem) -+VCMPPD_256_0x1B(mem) - before - b0ec7c43bb751cdd.10cfa4399ab5de4a.0895b13c31382e8f.58cc87924a4fde3c - 94ed9ff4c2691696.8fd538347d4b8093.46c676663acabc62.847404ba4adee2fb -@@ -53782,7 +53782,7 @@ VCMPPS_128_0x18(mem) - 8b69b08460c2fa81.65d31d34cef1778c.e7af4fc5728eec7e.eb028134ace1041f - df807a5e456d9adb - --VCMPPS_128_0x18(reg) -+VCMPPD_256_0x1B(reg) - before - 2333930b9f112d99.567c953a303f5c0a.7562671175184493.02ff5cd1d9d7071e - 1267caa65658fa05.262c097324ac5986.c30d9068e9dcec33.74487aab98ca205b -@@ -53795,7 +53795,7 @@ VCMPPS_128_0x18(reg) - 0a681b9d05cf3cca.d747881d5b16ad21.ab1d94a4c9c9ad15.19542340ca74f061 - 6582805b48013195.45978c24ee871306.89e16f31ae6cc1e8.cdf0d57a8be1365c - 6ce70b47f81bac76 --VCMPPS_128_0x18(mem) -+VCMPPD_256_0x1B(mem) - before - d10742922c300fde.8101f64cbc7a1311.4cea9372fc0e4862.b9a41d7b37506556 - da1bf446442c1bbe.b8307addfdc71feb.c80a18f49eb40860.97b19beefd01d40b -@@ -53809,7 +53809,7 @@ VCMPPS_128_0x18(mem) - 454dbe9e8f051c98.ebd19a8a530aa467.8ee38c45149318f5.cdddf4ffb6fc06fd - dd93c776e05e4192 - --VCMPPS_256_0x18(reg) -+VCMPPS_128_0x1B(reg) - before - 0bc45ac5b9bd371e.5e04cd19f9fc8aea.9edb2d80a1199562.913573eb1fe3e0e3 - b2bba85adca5254d.8bdf48afb7089165.ddc6bec42b2ba06a.7984c97630832224 -@@ -53822,7 +53822,7 @@ VCMPPS_256_0x18(reg) - 30c6ada0e5a247cc.a7aaac4ae437ec34.05dd48c48ecc002c.219d09d1627f9ce3 - e02f65027141d947.8d3074d79d955884.706ec7eb6589f253.674dafe8d1e4084d - 265e38a69abd238d --VCMPPS_256_0x18(mem) -+VCMPPS_128_0x1B(mem) - before - 399c1ef9d816a8d0.1d43ccee1b0d1669.1b3e1c43fd2d9180.7bc337a44dedb28c - 7ed5dfcda8fc5542.454edfcf80933bdf.2ca12078200b5255.8229955de1847c83 -@@ -53836,7 +53836,7 @@ VCMPPS_256_0x18(mem) - 0a64e0a36c9c1161.c279f620eafa2c76.46912df222ca5f38.f558077c7f7d1c59 - 18b915bbc0f66b90 - --VCMPPS_256_0x18(reg) -+VCMPPS_128_0x1B(reg) - before - a75affa81ed3b335.0952177e996f9a67.d031f26926f470ef.07b62e0e38c3239f - fe89c3b0359f32f4.a96a198ac6fe394b.380f8a568dd68c6b.bb607ba382325f8e -@@ -53849,7 +53849,7 @@ VCMPPS_256_0x18(reg) - 79905b40a0e72278.c77861b21256ab3a.5560b954ba2fbc97.3f5990a01b24d032 - 74bcc6c2fb35bf6e.3d486be19682ab5f.85717bd04a883b1e.6d6feaee1fa432b7 - 226c047aabbf4048 --VCMPPS_256_0x18(mem) -+VCMPPS_128_0x1B(mem) - before - 3b1d5a30da80b711.4b59fda4e3184781.e9a5b305718ef7e7.228bcc35d86f46ad - 924e68fdc9f35340.5ab3fd51f319f45e.a55cb609bc8649fd.89fda8ee007019f0 -@@ -53863,7 +53863,7 @@ VCMPPS_256_0x18(mem) - 6e5f9d885520e97a.8fcc4abcfdaaaf25.c009da61186cf186.2615f31191ec0540 - 13545952318197a6 - --VCMPPS_256_0x18(reg) -+VCMPPS_128_0x1B(reg) - before - 3b193a98dc5ee16f.aad7bc1e2bf35bde.6e258e522f513567.d796f38d6072bf50 - f8b1934f2d111e47.95ff837b2fa7e256.f56a8c63fa48d122.70acb64989948459 -@@ -53876,7 +53876,7 @@ VCMPPS_256_0x18(reg) - a7685ee3c0268bdb.0ba36e8a804a3910.80e83e5bf81abf03.6519a082b0defccc - a48a99c1322764d7.e88ffa3737e71e35.6aeba2a6c7543ab6.93a82c22f15de2d6 - d624d617671bf3a3 --VCMPPS_256_0x18(mem) -+VCMPPS_128_0x1B(mem) - before - 0a5a1a4b2e27eb5e.4c623f531ea2e4e7.088fa16e728b4af4.11beb3b103817fe6 - 0b1675ac638a8534.f93e4d07212349b6.476ee11b4d417c77.d0af6de6472dca3f -@@ -53890,7 +53890,7 @@ VCMPPS_256_0x18(mem) - e44f5da2858b93df.d52d8d81da64ac43.92fd1a885114de7b.0516ce8359346120 - 33256cc15ea625fe - --VCMPPD_128_0x19(reg) -+VCMPPS_256_0x1B(reg) - before - ea81a3dbdcc7dfb6.7465e20faa3f7d0d.bcd9b820c93c2358.56440a1fb2498553 - 84766f3c6f24caf4.41306d58ad7cfb05.19b83a903d4a6ede.a99b83dd22c022a1 -@@ -53898,12 +53898,12 @@ VCMPPD_128_0x19(reg) - d55ab78341c026b0.0119872ebbbf9e05.a53e35932a3570e7.6ca9fd7aa2a52949 - 93f7f732e82c0cfc - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 84766f3c6f24caf4.41306d58ad7cfb05.19b83a903d4a6ede.a99b83dd22c022a1 - 5f4fcd50b2492363.267e7b69a94dc7f4.4815103dd419c97f.67ce00acbe866f8f - d55ab78341c026b0.0119872ebbbf9e05.a53e35932a3570e7.6ca9fd7aa2a52949 - 93f7f732e82c0cfc --VCMPPD_128_0x19(mem) -+VCMPPS_256_0x1B(mem) - before - ba8569c0af24d3d4.44e12b42b9170f87.adcd0d93fedd3b65.8c7da5feda2b9ec3 - bc20cf10119c3bfc.063125f7b5da1993.066889858fb35b3f.591f5ceb818690bf -@@ -53917,7 +53917,7 @@ VCMPPD_128_0x19(mem) - c0a767a61735deef.f75c97f7abd083fc.2e7f55bc08b91414.14bc90f7229cafc5 - bb4f04ee54705428 - --VCMPPD_128_0x19(reg) -+VCMPPS_256_0x1B(reg) - before - b874b017ecd8ad5a.7b2d92c4f36f9011.ddce081add1d5ab0.b6939cda29012467 - 677890dd8762f508.80efa055db57d334.873aeee30304434b.5bbec9340830a7e4 -@@ -53925,12 +53925,12 @@ VCMPPD_128_0x19(reg) - 4a4ed8ef340a4686.dd555b7c3d63fb2b.982b0a1c9dd63be1.6b83c64c6d79f60d - 8eb78ee22caa3912 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 677890dd8762f508.80efa055db57d334.873aeee30304434b.5bbec9340830a7e4 - 23a89eacc0996add.adb80f43eafa6383.51ea45c0ba137a77.f8ca58b6c05459b7 - 4a4ed8ef340a4686.dd555b7c3d63fb2b.982b0a1c9dd63be1.6b83c64c6d79f60d - 8eb78ee22caa3912 --VCMPPD_128_0x19(mem) -+VCMPPS_256_0x1B(mem) - before - 3f302c6418f3dff1.37b739157f40c5af.eb92feebef9e5857.b649376349d7c134 - 58bc1cbe4e60a4d7.452ebd873bc72503.b53b767b1cb83635.0890ca0159a4491d -@@ -53944,7 +53944,7 @@ VCMPPD_128_0x19(mem) - 3638e3ab06d87967.387a1f027df973de.e800d2b35ab764b0.b8c810f317d14f5f - ce51bb1efc484411 - --VCMPPD_128_0x19(reg) -+VCMPPS_256_0x1B(reg) - before - 8834bb51b6ba2b08.b2c1b216c0fa0268.d5e7f4e439bdd9bd.0bb5ae32a2b32ca7 - 42bb0cf6e0b43ff0.088cc30834719a20.0392ddc2d7011077.58054f83d5bf65ff -@@ -53952,12 +53952,12 @@ VCMPPD_128_0x19(reg) - 26e7914bf76de247.ad169c36b88ce565.86d5d9272c3fdb2f.e4a9cc4c6f30187f - da95a29b0cae0b01 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 42bb0cf6e0b43ff0.088cc30834719a20.0392ddc2d7011077.58054f83d5bf65ff - 5833aa7b17c1be77.1264936f7d48fcbb.20c8d50af55352b9.adbd2f9210e4cae3 - 26e7914bf76de247.ad169c36b88ce565.86d5d9272c3fdb2f.e4a9cc4c6f30187f - da95a29b0cae0b01 --VCMPPD_128_0x19(mem) -+VCMPPS_256_0x1B(mem) - before - 6b4d2b6d066b5f93.0825bed11b45e80c.b66f5c4900481149.9304e3841a4fe984 - 749ce5ac7771cf61.5a372c7b1fd40b74.07394e9472883c93.a1a3f18f5b11b665 -@@ -53967,11 +53967,11 @@ VCMPPD_128_0x19(mem) - after - 6b4d2b6d066b5f93.0825bed11b45e80c.b66f5c4900481149.9304e3841a4fe984 - 749ce5ac7771cf61.5a372c7b1fd40b74.07394e9472883c93.a1a3f18f5b11b665 -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 5933d9262f8ef664.bd0bbce939499bd7.f452b98241c57d0d.345c075c43d97f7a - 700f06f723f7f405 - --VCMPPD_256_0x19(reg) -+VCMPPD_128_0x1C(reg) - before - 1e61f9eec6f618cc.ee120b38aebc24f0.8764d5848746802b.483a29fed7db0b93 - 9a9edbaec763287b.6ab95d6814646069.31c120f2252a72d0.55c4bc6106a48930 -@@ -53979,12 +53979,12 @@ VCMPPD_256_0x19(reg) - 6d085c3a54b5fa40.878e53d20854ecd0.94bb3af8c3da70c0.0bec3990a2843f5e - 6b231a3446b3f147 - after -- ffffffffffffffff.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 9a9edbaec763287b.6ab95d6814646069.31c120f2252a72d0.55c4bc6106a48930 - 4011a8a4c2c95fbe.a9f34ca27f9363fa.167098a0af82af73.f7bbed99eb2eb110 - 6d085c3a54b5fa40.878e53d20854ecd0.94bb3af8c3da70c0.0bec3990a2843f5e - 6b231a3446b3f147 --VCMPPD_256_0x19(mem) -+VCMPPD_128_0x1C(mem) - before - f32c0e70f3c681f6.7bcdf4de18b135ad.e054eee4cdb3b517.06f00068fabcf462 - 81d29030c6c9ac98.c7ad6bfbab4b4cb2.90139ac4eabd7cfa.c759e85af2b67506 -@@ -53994,11 +53994,11 @@ VCMPPD_256_0x19(mem) - after - f32c0e70f3c681f6.7bcdf4de18b135ad.e054eee4cdb3b517.06f00068fabcf462 - 81d29030c6c9ac98.c7ad6bfbab4b4cb2.90139ac4eabd7cfa.c759e85af2b67506 -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1c292fec4cd1c264.89eee64fac88fc34.65a7119f99ffee46.aafa0b7994206103 - 84ca3e7d75a843b3 - --VCMPPD_256_0x19(reg) -+VCMPPD_128_0x1C(reg) - before - 1dfe83b487771416.e17243c037ed25e5.b7e6e35f52420e08.4214d57264501207 - d3e3d58a661a0dd6.1b88d6c8b82a130a.932aae9937c9ec23.e6aa99c3f77b2314 -@@ -54006,12 +54006,12 @@ VCMPPD_256_0x19(reg) - 01f190c4f8096e1e.5d4d6725e9347fea.c4c1a3362c70fae1.f27d138ee290fbc5 - 1352bfe173923ac1 - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - d3e3d58a661a0dd6.1b88d6c8b82a130a.932aae9937c9ec23.e6aa99c3f77b2314 - 00c6306cac1c6d9f.a63763f0ea9348fd.79044567f6aad132.2c34da7e6d8cdd9b - 01f190c4f8096e1e.5d4d6725e9347fea.c4c1a3362c70fae1.f27d138ee290fbc5 - 1352bfe173923ac1 --VCMPPD_256_0x19(mem) -+VCMPPD_128_0x1C(mem) - before - 6b7f5d633b9e56b9.33b1f1ffe46e4dff.1e955c52d21a75fe.d2adc57274a8a2dc - d5d066fe57c10bd9.f051508a0cd646ed.c4dac062c150e565.fe14a5886adc07cd -@@ -54021,11 +54021,11 @@ VCMPPD_256_0x19(mem) - after - 6b7f5d633b9e56b9.33b1f1ffe46e4dff.1e955c52d21a75fe.d2adc57274a8a2dc - d5d066fe57c10bd9.f051508a0cd646ed.c4dac062c150e565.fe14a5886adc07cd -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 540dad32f9792e44.7f65f53c82e075a2.2e8fc2e01edd27da.208294eed36ef348 - cd229a177de3f229 - --VCMPPD_256_0x19(reg) -+VCMPPD_128_0x1C(reg) - before - 096c50c945859db1.1f91e3a4b72715e6.0871333c089a23c1.ab965925c54c7041 - 2fadb070c8e1308d.6e6a76df391b8461.8d8d5f3b3a87da9e.7cca4dfee23b23aa -@@ -54038,7 +54038,7 @@ VCMPPD_256_0x19(reg) - 9a31b878a282e769.1b62e0d19a6138e1.6a0674a5b434d8e4.7ff91c5790b7fe42 - a844634d6df4fef0.04469f65f606ed91.fb286ee6132c5740.8eed411cebcbbb34 - 87743839108416ad --VCMPPD_256_0x19(mem) -+VCMPPD_128_0x1C(mem) - before - 44587e9b1aedcdd8.b431ae5bc8c3b0ce.03e12e876a155f9d.9c3e496af3fb935d - a3668e2c26129ae2.1946930f4c7c3ab1.f6010923129b4933.a996019eef2ecae8 -@@ -54048,11 +54048,11 @@ VCMPPD_256_0x19(mem) - after - 44587e9b1aedcdd8.b431ae5bc8c3b0ce.03e12e876a155f9d.9c3e496af3fb935d - a3668e2c26129ae2.1946930f4c7c3ab1.f6010923129b4933.a996019eef2ecae8 -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - b230fc8fb2c16842.6213201545dac430.23fc94796b3978a7.7737fac1aced14f7 - f019328aa692a0d3 - --VCMPPS_128_0x19(reg) -+VCMPPD_256_0x1C(reg) - before - 456c37b22cca15cc.1c8352396a63e2f0.fe64bf3ff2973d25.176f3b0b556934de - d27c06a4da22b08f.963163c394f2622d.630ce9bf386d7ece.6d961fc7e340594e -@@ -54060,12 +54060,12 @@ VCMPPS_128_0x19(reg) - 0402ee9b205f4722.2dc9a227ab046601.fc90d06e059647ea.b22f8c6e5811ce87 - 5a3a0d31782395a8 - after -- 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - d27c06a4da22b08f.963163c394f2622d.630ce9bf386d7ece.6d961fc7e340594e - f39599ce4d25adc8.fd04a9194b78a524.ee569b00b5e9c3d6.023dbb9a30c9a322 - 0402ee9b205f4722.2dc9a227ab046601.fc90d06e059647ea.b22f8c6e5811ce87 - 5a3a0d31782395a8 --VCMPPS_128_0x19(mem) -+VCMPPD_256_0x1C(mem) - before - d428b9ceab0bb5b2.61100077f05cbc4a.034ccad9d19f62f1.e7048475c30047b5 - fdc60e300ed5ead1.650bccce58a946eb.59599b1bd9575520.0cffb3818bb4fee4 -@@ -54075,11 +54075,11 @@ VCMPPS_128_0x19(mem) - after - d428b9ceab0bb5b2.61100077f05cbc4a.034ccad9d19f62f1.e7048475c30047b5 - fdc60e300ed5ead1.650bccce58a946eb.59599b1bd9575520.0cffb3818bb4fee4 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - cc42a1f8d24182fc.d7f87e9e62618b4b.f8402d00fc4c0fea.75ba7358ac27851d - 7012fcfc3cffcb7f - --VCMPPS_128_0x19(reg) -+VCMPPD_256_0x1C(reg) - before - 1521f1544650baf5.2ab8d7356bfb5c60.fc825dee3ce4be61.f9b2e57b50a14edc - c0324cce67a78c2a.a70ea5e8a3c73c89.3828e66a1ee6f7a0.ebde3735f54274bd -@@ -54087,12 +54087,12 @@ VCMPPS_128_0x19(reg) - 988d28d45c93cc82.6e88f96163c6fad9.69fce2926c986a4d.12949b1ba59a64fc - ffb6a41ee668a6b1 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c0324cce67a78c2a.a70ea5e8a3c73c89.3828e66a1ee6f7a0.ebde3735f54274bd - cd920bd43a8e7eca.1f0f87fe98b1dca3.e938137ca5f371b6.aa90a01c083c3cb9 - 988d28d45c93cc82.6e88f96163c6fad9.69fce2926c986a4d.12949b1ba59a64fc - ffb6a41ee668a6b1 --VCMPPS_128_0x19(mem) -+VCMPPD_256_0x1C(mem) - before - 4dc13711eab2be04.7e6fa1396842b1fe.704578fe22114f58.16c14e170f611c11 - d882d0e0ca856a22.d984726ffb256aea.01127fc2f19e9a4b.4bd353772bd8c3af -@@ -54102,11 +54102,11 @@ VCMPPS_128_0x19(mem) - after - 4dc13711eab2be04.7e6fa1396842b1fe.704578fe22114f58.16c14e170f611c11 - d882d0e0ca856a22.d984726ffb256aea.01127fc2f19e9a4b.4bd353772bd8c3af -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 145706c294f4696e.607608fe24bd47bf.400c156b2cb0fd40.bb0d19783d05e428 - b0cdd2f16ad3d55b - --VCMPPS_128_0x19(reg) -+VCMPPD_256_0x1C(reg) - before - 9c0a14f58080ab18.7e029aaeb5a834f4.45ebc62ff289e301.a5d09d29d14c8e99 - dd11dbf11a98a40a.95922425241582f5.10c4cbe1b7ba4363.0ad49cbdf55b0317 -@@ -54114,12 +54114,12 @@ VCMPPS_128_0x19(reg) - c9a7e97d4c3be93e.39950b685a469716.c8cc9b79937c3e35.41cdf4172cff8c30 - ca5845b577ad1823 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - dd11dbf11a98a40a.95922425241582f5.10c4cbe1b7ba4363.0ad49cbdf55b0317 - cd2b234fd5a8fadd.35d52115fc450f9c.1d4b13810edca390.4ae59013b5e819e5 - c9a7e97d4c3be93e.39950b685a469716.c8cc9b79937c3e35.41cdf4172cff8c30 - ca5845b577ad1823 --VCMPPS_128_0x19(mem) -+VCMPPD_256_0x1C(mem) - before - c354fddab1fd78eb.2ed028e51cddafd9.7fa0600c5924d58e.6d955e37e32552fe - 078c9a70f7fb69b4.56f1dcf5e01b865a.e2c09bec15ea8631.67f158269a641896 -@@ -54129,11 +54129,11 @@ VCMPPS_128_0x19(mem) - after - c354fddab1fd78eb.2ed028e51cddafd9.7fa0600c5924d58e.6d955e37e32552fe - 078c9a70f7fb69b4.56f1dcf5e01b865a.e2c09bec15ea8631.67f158269a641896 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffff00000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - dfde70a31533edf7.624f94bab69859bb.6e71b510365e31a7.cf90e146aad1b1e5 - f46c69503c18fbf4 - --VCMPPS_256_0x19(reg) -+VCMPPS_128_0x1C(reg) - before - de0b183ba423e983.2b91a2182585f8ca.fe23904700f0cef5.4f9b8a2cd325a2d1 - ebb9ea737f81b63d.33b0a8aeb1b4844d.cf1ff12bae1344c3.be0b36349e0476d7 -@@ -54141,12 +54141,12 @@ VCMPPS_256_0x19(reg) - da71e87bfc5fe0e4.e36220f2aadf0e15.7bc4d2a8a7eb25d2.b2eb01b92b3b3621 - eff4180d25ab9abe - after -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ebb9ea737f81b63d.33b0a8aeb1b4844d.cf1ff12bae1344c3.be0b36349e0476d7 - 75c2db6569bb9fce.d107fd53d4ce4dad.2f91b3d25c8ef8d4.958c3514b10769e2 - da71e87bfc5fe0e4.e36220f2aadf0e15.7bc4d2a8a7eb25d2.b2eb01b92b3b3621 - eff4180d25ab9abe --VCMPPS_256_0x19(mem) -+VCMPPS_128_0x1C(mem) - before - 2a73f5febe6451e6.74130b22d7f8b529.438c8a7750f284b2.0f034b1a2bb80869 - 3d3414760f7117c4.a1f442c793135949.ce52b8cee2136baf.479b19928381dd47 -@@ -54156,11 +54156,11 @@ VCMPPS_256_0x19(mem) - after - 2a73f5febe6451e6.74130b22d7f8b529.438c8a7750f284b2.0f034b1a2bb80869 - 3d3414760f7117c4.a1f442c793135949.ce52b8cee2136baf.479b19928381dd47 -- 0000000000000000.ffffffff00000000.ffffffffffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 5eab09b04fb7be54.20a3dab724fc01cd.d6e252a337b07a7c.1306a44920344c82 - 5e715a5e9e365e38 - --VCMPPS_256_0x19(reg) -+VCMPPS_128_0x1C(reg) - before - be64542b5f6452e3.25f9d7497509185e.2a0933db30e37c88.0a44b5f833441ba3 - 8e2d901b02496430.34b9d71ac5df71cf.37dd8fac8f7bb7cf.d972cdd08a171ddb -@@ -54168,12 +54168,12 @@ VCMPPS_256_0x19(reg) - ee6cbc145869d060.9dbf5d1550490e94.c5034005b3ef5daf.b96108b5bba7322c - 81ba249bcd7dbe9e - after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 8e2d901b02496430.34b9d71ac5df71cf.37dd8fac8f7bb7cf.d972cdd08a171ddb - 2a160a9a2172cfcb.68b7850f5a4684d2.a16dea96dc50ee4d.2037141559343b4f - ee6cbc145869d060.9dbf5d1550490e94.c5034005b3ef5daf.b96108b5bba7322c - 81ba249bcd7dbe9e --VCMPPS_256_0x19(mem) -+VCMPPS_128_0x1C(mem) - before - 540fe5b3aac09ad0.367ba4f544bda39a.af9cdc16c4f4ca40.ffec8d65b1e33fa1 - 0e2cc5e96f7f84ef.5d8fbcaa80f78325.7b1c7dffd2537603.ac74ce2272b8d1ce -@@ -54183,11 +54183,11 @@ VCMPPS_256_0x19(mem) - after - 540fe5b3aac09ad0.367ba4f544bda39a.af9cdc16c4f4ca40.ffec8d65b1e33fa1 - 0e2cc5e96f7f84ef.5d8fbcaa80f78325.7b1c7dffd2537603.ac74ce2272b8d1ce -- ffffffff00000000.00000000ffffffff.00000000ffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - a7edd75f1f9a6ca2.bdf5723c59525de1.ac30163a2960887d.ca901964aa37f58c - f4bc1cc15af8fe74 - --VCMPPS_256_0x19(reg) -+VCMPPS_128_0x1C(reg) - before - 00b8012b3ccba747.3e290077420fe38f.acdf06f12f8bce69.ca5d0564ab24688c - 4acec60ded3b2bb2.2c5e395ebc2f5818.ecffbc2ac5db3ef3.115c072636cd2661 -@@ -54195,12 +54195,12 @@ VCMPPS_256_0x19(reg) - 087addee2a23b800.7ddecd45289d26b0.cb0b7bd5a3f105bc.89ff3122d9fc2f10 - 733b5234299af141 - after -- 00000000ffffffff.ffffffffffffffff.ffffffffffffffff.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 4acec60ded3b2bb2.2c5e395ebc2f5818.ecffbc2ac5db3ef3.115c072636cd2661 - 2e4b66d508d5c861.4d56fffeaa05846a.d79f8f52b8cee72b.5df9976ce7667f29 - 087addee2a23b800.7ddecd45289d26b0.cb0b7bd5a3f105bc.89ff3122d9fc2f10 - 733b5234299af141 --VCMPPS_256_0x19(mem) -+VCMPPS_128_0x1C(mem) - before - f67a748ef24c82e9.34a928c4eeb4383a.98c21f1d5104f817.22917c1f22cfd652 - ee86151c511f9e33.0e2241c3f11183bb.7acd71744145b7cb.3a7c8f9cd2f4949b -@@ -54210,11 +54210,11 @@ VCMPPS_256_0x19(mem) - after - f67a748ef24c82e9.34a928c4eeb4383a.98c21f1d5104f817.22917c1f22cfd652 - ee86151c511f9e33.0e2241c3f11183bb.7acd71744145b7cb.3a7c8f9cd2f4949b -- 0000000000000000.ffffffffffffffff.00000000ffffffff.00000000ffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ad37c1853f556660.3c26d3ed22646d45.028c064ce886ebc8.19afd8df3344c9f0 - 9890067e1d88b955 - --VCMPPD_128_0x1A(reg) -+VCMPPD_128_0x1D(reg) - before - 470635ffa642861c.2b75c53806d18a9a.484842ef887184a5.61d741a5d79ed869 - 835d62d06d006df0.8fb037ced29d2826.72e570cb9c7c56fd.f77a6c2cfec0a207 -@@ -54222,12 +54222,12 @@ VCMPPD_128_0x1A(reg) - 0ddda30e1fb67771.75515558ec56c6e8.8fbffbbd41ba1e44.37f883746154bce9 - 9a6a670ed5dd8484 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - 835d62d06d006df0.8fb037ced29d2826.72e570cb9c7c56fd.f77a6c2cfec0a207 - a6e1885b0c4ea97e.b4b69335c0c6fe32.16485aebfb1020f9.9f4104cd77f905ce - 0ddda30e1fb67771.75515558ec56c6e8.8fbffbbd41ba1e44.37f883746154bce9 - 9a6a670ed5dd8484 --VCMPPD_128_0x1A(mem) -+VCMPPD_128_0x1D(mem) - before - a3652b85f1a118cd.149eaf5442c61376.b04ef923715b3d74.3b944fac09058c8b - 30b34bc7d1ab36ee.1870a999130ab939.3f78fc826be11e03.75155324ef7da579 -@@ -54237,11 +54237,11 @@ VCMPPD_128_0x1A(mem) - after - a3652b85f1a118cd.149eaf5442c61376.b04ef923715b3d74.3b944fac09058c8b - 30b34bc7d1ab36ee.1870a999130ab939.3f78fc826be11e03.75155324ef7da579 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 427b90584bc3fb69.827754d0285b11a7.cd880cac309d12d9.0245575f8725cbfd - 0e8e51fa716e4fea - --VCMPPD_128_0x1A(reg) -+VCMPPD_128_0x1D(reg) - before - 17b2e9ceea136f2e.7f8cad801de81a1c.a144fd9aa6803caa.8404114f33eb9b78 - 7bfc1c478ca26777.b02216222283b357.2c5183134009601b.ffde65371bea80ca -@@ -54249,12 +54249,12 @@ VCMPPD_128_0x1A(reg) - c03645d9c1accec2.5909bd84384d3e17.f65f18c3397487f6.b5dce6820c284934 - a7980cbe4d80a5a6 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - 7bfc1c478ca26777.b02216222283b357.2c5183134009601b.ffde65371bea80ca - 94b9e7d2f6a6736f.af08482a77a18047.7fece3a89281bba6.1ce2824e05a57bfa - c03645d9c1accec2.5909bd84384d3e17.f65f18c3397487f6.b5dce6820c284934 - a7980cbe4d80a5a6 --VCMPPD_128_0x1A(mem) -+VCMPPD_128_0x1D(mem) - before - cfe171ede3b84d79.59bd32ca8b3fb51d.8bf2f31c8094a8f4.edf71ed2d16f00b8 - 07858ffdebddfbdc.bd9aab10f0eb642c.1f8f65df6b807b0a.c000f13ff5fd6497 -@@ -54264,11 +54264,11 @@ VCMPPD_128_0x1A(mem) - after - cfe171ede3b84d79.59bd32ca8b3fb51d.8bf2f31c8094a8f4.edf71ed2d16f00b8 - 07858ffdebddfbdc.bd9aab10f0eb642c.1f8f65df6b807b0a.c000f13ff5fd6497 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 1b09eb6dbf1b5bfd.518b2d4af9c00814.e114ee919c7d4c8f.6a94f0e85203d75f - f8b813fbc394609f - --VCMPPD_128_0x1A(reg) -+VCMPPD_128_0x1D(reg) - before - d37cf31d31e7c2ad.ae8220a5c34c8513.3b352f17d5007645.c695fc5a1aa5c157 - 562d8cba378a3a34.c285006ea89aa668.5e66ade9bb8a9cda.7ef937fdaba38f07 -@@ -54276,12 +54276,12 @@ VCMPPD_128_0x1A(reg) - c486db167dee5b5f.dd58ad5e88bbbc7d.c28d094d18a9fedf.d79d2180785325d0 - 3075c939ec1c6542 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 562d8cba378a3a34.c285006ea89aa668.5e66ade9bb8a9cda.7ef937fdaba38f07 - dd17db3e720804e1.33dd06b28b117a27.176aa12d48e9b57f.e50d1a666c8472cb - c486db167dee5b5f.dd58ad5e88bbbc7d.c28d094d18a9fedf.d79d2180785325d0 - 3075c939ec1c6542 --VCMPPD_128_0x1A(mem) -+VCMPPD_128_0x1D(mem) - before - cc618d7ce3ebee4d.66c588acf5c67c5c.9cc0745fb9a62996.bc1be0b6c657b3a7 - 872de9367acd7c1c.2122de6e751fa381.4ce2d49f3ddd7d9d.5f5f22d5ee7e0f83 -@@ -54291,11 +54291,11 @@ VCMPPD_128_0x1A(mem) - after - cc618d7ce3ebee4d.66c588acf5c67c5c.9cc0745fb9a62996.bc1be0b6c657b3a7 - 872de9367acd7c1c.2122de6e751fa381.4ce2d49f3ddd7d9d.5f5f22d5ee7e0f83 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - ca9359baf5f895b7.4e617622ff7df2fa.ef845391a861c927.133dd8e11e68af24 - dc6e44a75e436b42 - --VCMPPD_256_0x1A(reg) -+VCMPPD_256_0x1D(reg) - before - bf860bd188c8be24.0ac6665e125999dc.79dcb0ed409b92a4.9a9c6a1ac8c53902 - 18d129cd3981e576.d909fb273ffc9276.2ba48393fa692828.a69d0b93a9a67f7c -@@ -54303,12 +54303,12 @@ VCMPPD_256_0x1A(reg) - 9c2f5be99ec59f17.94efaddc363a51b6.984ae5204742246d.518edd05200c81fa - a81504d6eeaab358 - after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 18d129cd3981e576.d909fb273ffc9276.2ba48393fa692828.a69d0b93a9a67f7c - 439a9a060cfc1ce3.1328940397ee3bb0.c205eb80c972ef32.ef54b3e8680f59c0 - 9c2f5be99ec59f17.94efaddc363a51b6.984ae5204742246d.518edd05200c81fa - a81504d6eeaab358 --VCMPPD_256_0x1A(mem) -+VCMPPD_256_0x1D(mem) - before - cfb6a748edf4ad04.7fda67e08a67a9bf.3829c2a039ec90b5.0bc16cdf13660386 - a43c3f4539f6292a.48e8ba586d6e7787.daa3503abc11b3d9.75b47c29c769c828 -@@ -54318,11 +54318,11 @@ VCMPPD_256_0x1A(mem) - after - cfb6a748edf4ad04.7fda67e08a67a9bf.3829c2a039ec90b5.0bc16cdf13660386 - a43c3f4539f6292a.48e8ba586d6e7787.daa3503abc11b3d9.75b47c29c769c828 -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - c42b42942b549a97.fc5d267c85dc4e25.8d88c4a0afe1983e.a241280f583df2ba - 1c73bb826d26d001 - --VCMPPD_256_0x1A(reg) -+VCMPPD_256_0x1D(reg) - before - fe51c831db1e8382.c82ca5be08c70635.9e5c3700f35bcf54.5489a34557a5d2d8 - a4294a873db248e9.e942ee24a223e5fe.97ed7fb4c8700452.8bfbe96ff00be046 -@@ -54330,12 +54330,12 @@ VCMPPD_256_0x1A(reg) - adf29ed74fdbf816.f1df235480c3ecc0.fbf9a4611489796d.b55e9f065fee6a50 - 61e7064a6d835f44 - after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.0000000000000000.0000000000000000.0000000000000000 - a4294a873db248e9.e942ee24a223e5fe.97ed7fb4c8700452.8bfbe96ff00be046 - 6b453ef0306d5be1.023a9ab21673f31e.425efa069fa628cc.0da9140b93207fb5 - adf29ed74fdbf816.f1df235480c3ecc0.fbf9a4611489796d.b55e9f065fee6a50 - 61e7064a6d835f44 --VCMPPD_256_0x1A(mem) -+VCMPPD_256_0x1D(mem) - before - eb10c6c5dbeb18bc.c77c68aa37895a36.90ff07f6fb208b11.1d0b7a31c4a531e2 - 31a55962c53152e5.152f97d58302beea.bd65c184a3958d3c.06e077e24a878cd7 -@@ -54345,11 +54345,11 @@ VCMPPD_256_0x1A(mem) - after - eb10c6c5dbeb18bc.c77c68aa37895a36.90ff07f6fb208b11.1d0b7a31c4a531e2 - 31a55962c53152e5.152f97d58302beea.bd65c184a3958d3c.06e077e24a878cd7 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 - 5d43edb17b8738f9.bd3f15deb8867cc5.2d31a815ecf8a9d2.9902d6974acb1fee - fce73174fc45ce6a - --VCMPPD_256_0x1A(reg) -+VCMPPD_256_0x1D(reg) - before - 94c0a3e1f4b41015.fbe3e63c7fb05c3c.cf355b95daa94d42.2830cdefc5ff3b95 - bfd7284ccfa5239b.c41fa29a6ee7f1e0.8583f754d0c81006.21a5b8663b4d20e3 -@@ -54357,12 +54357,12 @@ VCMPPD_256_0x1A(reg) - 39f25bc89c3aa6eb.489b587a7fb05cf8.4d5a1e96a9275b0d.7820d0d770f3d2ce - 90bff6aa676317c4 - after -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - bfd7284ccfa5239b.c41fa29a6ee7f1e0.8583f754d0c81006.21a5b8663b4d20e3 - d779bc1f28a341a9.95c39fb56539b210.3b76e486366d00ba.f25ce5656bf014e7 - 39f25bc89c3aa6eb.489b587a7fb05cf8.4d5a1e96a9275b0d.7820d0d770f3d2ce - 90bff6aa676317c4 --VCMPPD_256_0x1A(mem) -+VCMPPD_256_0x1D(mem) - before - 1403d1c96b4a9ff4.428d02b2c6f7900c.ba7349d6d95babc6.177aa2f2c47f5ba9 - e1b9e02098b7258a.4c98ac49436539b9.c817eeb38f435ba3.f5246b0524033d3a -@@ -54372,11 +54372,11 @@ VCMPPD_256_0x1A(mem) - after - 1403d1c96b4a9ff4.428d02b2c6f7900c.ba7349d6d95babc6.177aa2f2c47f5ba9 - e1b9e02098b7258a.4c98ac49436539b9.c817eeb38f435ba3.f5246b0524033d3a -- ffffffffffffffff.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - c6ab8227e04c1f9b.d729f92ea385ba65.23f246a47cffcc41.5d42bc0021bc95ee - 9e4e3cc0f70a8468 - --VCMPPS_128_0x1A(reg) -+VCMPPS_128_0x1D(reg) - before - 6413f2e780b34588.977e0fae328d096e.0f489554bf4f0bbd.29c1f090ebeb0658 - 0adcd9e15b4413fa.20f4be1d1d83e357.b90623d79efa0b50.3a8c3eae27459031 -@@ -54384,12 +54384,12 @@ VCMPPS_128_0x1A(reg) - 65af2aff704bc982.cdf4726530bb511d.d48e0aa512250ad9.ed46b8306f7487d3 - 47ccdb6cb5606cf5 - after -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 - 0adcd9e15b4413fa.20f4be1d1d83e357.b90623d79efa0b50.3a8c3eae27459031 - ecf7ed1b21482c69.3ed70b61be396782.31afa124db13f7cb.321fadea491927f5 - 65af2aff704bc982.cdf4726530bb511d.d48e0aa512250ad9.ed46b8306f7487d3 - 47ccdb6cb5606cf5 --VCMPPS_128_0x1A(mem) -+VCMPPS_128_0x1D(mem) - before - 1c7f928a36ec9187.d34f8cfbe4da29f0.a917701490165f51.fcf15bc8e0bc8128 - 482959770f21b3b7.9024107a18808660.ae0c805cfa544b4d.06228ef7e0659861 -@@ -54399,11 +54399,11 @@ VCMPPS_128_0x1A(mem) - after - 1c7f928a36ec9187.d34f8cfbe4da29f0.a917701490165f51.fcf15bc8e0bc8128 - 482959770f21b3b7.9024107a18808660.ae0c805cfa544b4d.06228ef7e0659861 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 1595096a36bcde9b.6b9d6bb032412af5.a39bc66459afb047.30218f2ee81a9547 - 0887550d283ff34b - --VCMPPS_128_0x1A(reg) -+VCMPPS_128_0x1D(reg) - before - 32eceda90aa5e1eb.6eefe948bd385ea8.41d93b404f75e871.4acdf4fc86e3a09e - 0a9b556e2bd99ad3.8e70c9a50b8fcb01.d6791b039df195a0.8b0225dc2e2c5f6c -@@ -54411,12 +54411,12 @@ VCMPPS_128_0x1A(reg) - 340a822398d86129.921b7a896ffc5b4a.b11900d33aeda6c1.48a07d2558293a1b - 7ca19c6514f7cd55 - after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 0a9b556e2bd99ad3.8e70c9a50b8fcb01.d6791b039df195a0.8b0225dc2e2c5f6c - ece188c826665cae.51e6256c3dcde1d3.88cb0966b73f6a2b.4104d4f06a94a9dd - 340a822398d86129.921b7a896ffc5b4a.b11900d33aeda6c1.48a07d2558293a1b - 7ca19c6514f7cd55 --VCMPPS_128_0x1A(mem) -+VCMPPS_128_0x1D(mem) - before - b8d5ae9eb9081fb5.3e623fec1cbbe5ef.2fdc43e8bc2af692.afb0fcb7c287830c - da062dba646aeb68.6535bc8d4e9c26ad.03f5fc7540636ed5.dcdcfa7fe9973eb9 -@@ -54426,11 +54426,11 @@ VCMPPS_128_0x1A(mem) - after - b8d5ae9eb9081fb5.3e623fec1cbbe5ef.2fdc43e8bc2af692.afb0fcb7c287830c - da062dba646aeb68.6535bc8d4e9c26ad.03f5fc7540636ed5.dcdcfa7fe9973eb9 -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -+ 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 - 3c9368503950e575.7f7be20c2f86cac0.bf5f2fc95f22e403.3722e8678a4e3ee7 - 1cd5d1603c0dfac0 - --VCMPPS_128_0x1A(reg) -+VCMPPS_128_0x1D(reg) - before - a14cacebfd7384ab.35861aa19ceb8a28.298785c015a7a56d.6047a16932c25a45 - 22d473766b0d1754.82a62b86740699dd.603dd6fe19f52cc1.a7b8f3e6ac9c9c33 -@@ -54438,12 +54438,12 @@ VCMPPS_128_0x1A(reg) - 8847ba39bd094c8e.8da257bcf6eee9ff.eada77c5ed492e10.9b60272b072e78c5 - 003002cb1fff89c2 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 22d473766b0d1754.82a62b86740699dd.603dd6fe19f52cc1.a7b8f3e6ac9c9c33 - fbb9246c2265f166.01c115ebdeaed0c0.82ead331d8fc9b69.727ca12ee9bc68fa - 8847ba39bd094c8e.8da257bcf6eee9ff.eada77c5ed492e10.9b60272b072e78c5 - 003002cb1fff89c2 --VCMPPS_128_0x1A(mem) -+VCMPPS_128_0x1D(mem) - before - 7bb8adf94f3a561a.26c9314ad9856477.01146ae6d6d2a0c4.f359be26f5672164 - eac3a4a1b3eb9dfc.2f8d8609116477ce.3ae4cb539d67b33b.fbb2a4c18be3af0e -@@ -54453,11 +54453,11 @@ VCMPPS_128_0x1A(mem) - after - 7bb8adf94f3a561a.26c9314ad9856477.01146ae6d6d2a0c4.f359be26f5672164 - eac3a4a1b3eb9dfc.2f8d8609116477ce.3ae4cb539d67b33b.fbb2a4c18be3af0e -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.00000000ffffffff - 0f96670f84e18408.f506b645467b7975.6cce69aa4ad2d8f2.74263e50d3228e1a - 9dd8ea1ebdfe57d4 - --VCMPPS_256_0x1A(reg) -+VCMPPS_256_0x1D(reg) - before - 359526d5a567ac95.7ff52bad2a3e9c8b.6a558a997ccce11d.1d809d6c68c06289 - 96a9ece028e9c90a.51082b7673411d47.ba132c4d3eb032e2.02bf0f22dd8e3883 -@@ -54465,12 +54465,12 @@ VCMPPS_256_0x1A(reg) - 27050aa76d6a4abe.8f79cf3561694a18.6014c682d7628276.db189f1935fbb34e - 88c9b43352b2d078 - after -- ffffffff00000000.ffffffffffffffff.ffffffff00000000.00000000ffffffff -+ 00000000ffffffff.0000000000000000.00000000ffffffff.ffffffff00000000 - 96a9ece028e9c90a.51082b7673411d47.ba132c4d3eb032e2.02bf0f22dd8e3883 - 1e603aade111eade.629be3547cf6c367.438f96cc28b3a971.f8593cb7c248140b - 27050aa76d6a4abe.8f79cf3561694a18.6014c682d7628276.db189f1935fbb34e - 88c9b43352b2d078 --VCMPPS_256_0x1A(mem) -+VCMPPS_256_0x1D(mem) - before - d938f7f2347a28b4.0ee55a3a67802655.b2706c033ca76d85.6dedb7dbe648f89c - ab31e540f75e772f.304d26d26be0b950.a84a35ac2cbbe9db.c6676543f2f24990 -@@ -54480,11 +54480,11 @@ VCMPPS_256_0x1A(mem) - after - d938f7f2347a28b4.0ee55a3a67802655.b2706c033ca76d85.6dedb7dbe648f89c - ab31e540f75e772f.304d26d26be0b950.a84a35ac2cbbe9db.c6676543f2f24990 -- 00000000ffffffff.0000000000000000.00000000ffffffff.ffffffffffffffff -+ ffffffff00000000.ffffffffffffffff.ffffffff00000000.0000000000000000 - 42f0ae3d93aae990.90df1ec204abf821.7dda3b3cb597dbf1.cb6ee9f06fbf6690 - 3093b70d18faacf4 - --VCMPPS_256_0x1A(reg) -+VCMPPS_256_0x1D(reg) - before - 518932ea2e29bbd7.bf4e82c3a32b84cf.87a343f1d02f1a4f.142871fb8676c909 - 899b56f14cd7d0e2.2d66f18a04f906fc.281ed3d5162ce590.ee8ac244dc5c00b9 -@@ -54492,12 +54492,12 @@ VCMPPS_256_0x1A(reg) - b3478a3211e2fa26.4cf48c872ba8aed2.d967256e82c261fe.dbb9ab24806a3894 - a61e399308aab116 - after -- ffffffff00000000.ffffffff00000000.00000000ffffffff.ffffffffffffffff -+ 00000000ffffffff.00000000ffffffff.ffffffff00000000.0000000000000000 - 899b56f14cd7d0e2.2d66f18a04f906fc.281ed3d5162ce590.ee8ac244dc5c00b9 - 361720900e9126c4.6804757cd31e2a44.d09bcadb732e9391.e7ccac03d0543c2e - b3478a3211e2fa26.4cf48c872ba8aed2.d967256e82c261fe.dbb9ab24806a3894 - a61e399308aab116 --VCMPPS_256_0x1A(mem) -+VCMPPS_256_0x1D(mem) - before - 24c7d43d832163e1.5b789242f15688b7.b502b19629a24cd3.a0cedff9e0738b82 - 3180f60c0ddb0a20.8cf6332e497a0c21.7ff96095e819c073.811cf4ea28cd4cca -@@ -54507,11 +54507,11 @@ VCMPPS_256_0x1A(mem) - after - 24c7d43d832163e1.5b789242f15688b7.b502b19629a24cd3.a0cedff9e0738b82 - 3180f60c0ddb0a20.8cf6332e497a0c21.7ff96095e819c073.811cf4ea28cd4cca -- 0000000000000000.ffffffff00000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.00000000ffffffff.0000000000000000.ffffffffffffffff - 6852c5cec14425ad.f5083147d2ffe532.a6d64d131bab1e3e.019d20abe8ae8654 - 58672e53984d76ef - --VCMPPS_256_0x1A(reg) -+VCMPPS_256_0x1D(reg) - before - 39498810a2c4eefd.4a026897220d1252.e534864c3c79b231.bb53836bc7df7ec1 - ff8d294fa2a22a2b.2af384370247e31b.cede64dd8ed264b9.a0ea3362a4bfa693 -@@ -54519,12 +54519,12 @@ VCMPPS_256_0x1A(reg) - af6e31fff7bcdd95.59c314a9b14424cd.f6d7ac4e5b526b17.4f95f2e163b439d3 - d041f9417ce11d99 - after -- ffffffffffffffff.00000000ffffffff.ffffffffffffffff.ffffffff00000000 -+ 0000000000000000.ffffffff00000000.0000000000000000.00000000ffffffff - ff8d294fa2a22a2b.2af384370247e31b.cede64dd8ed264b9.a0ea3362a4bfa693 - 08800e7a36706624.e6ef94997e005536.0a50c76464963977.3366dae5cf5750e0 - af6e31fff7bcdd95.59c314a9b14424cd.f6d7ac4e5b526b17.4f95f2e163b439d3 - d041f9417ce11d99 --VCMPPS_256_0x1A(mem) -+VCMPPS_256_0x1D(mem) - before - 91386af037eab75d.50a290488311cd2a.5f3b8054b81d0c0c.efbe0e080e913644 - 7044c1dcb0dcc44c.476a26c376fc6f8e.d3225584ae9ac820.4f53e8fd1adfd8ab -@@ -54534,11 +54534,11 @@ VCMPPS_256_0x1A(mem) - after - 91386af037eab75d.50a290488311cd2a.5f3b8054b81d0c0c.efbe0e080e913644 - 7044c1dcb0dcc44c.476a26c376fc6f8e.d3225584ae9ac820.4f53e8fd1adfd8ab -- 00000000ffffffff.ffffffff00000000.ffffffff00000000.0000000000000000 -+ ffffffff00000000.00000000ffffffff.00000000ffffffff.ffffffffffffffff - f4cd121849a92759.a6e1e8fcfec1c075.79712727d9a9ae76.b7b3fa47abda8cd6 - 77162875689e16f1 - --VCMPPD_128_0x1B(reg) -+VCMPPD_128_0x1E(reg) - before - 1056c08eeda267f6.52e30440a29bf4d0.c7290b92ccb3e650.63701c7146545110 - dcbfbdfed871b991.3c3fcc5428a72421.ad345609706bb0aa.2b0f69f212d1b82f -@@ -54546,12 +54546,12 @@ VCMPPD_128_0x1B(reg) - 803bd79449a15238.28f7cff12d369c04.3dc3524aac5b1e8e.c95dfd463873c4a9 - 57a43bf1cbb0e25e - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - dcbfbdfed871b991.3c3fcc5428a72421.ad345609706bb0aa.2b0f69f212d1b82f - 389c1b31c297496e.90ace641f8d67379.b64ec4cd87745931.af1a8b95592da0fe - 803bd79449a15238.28f7cff12d369c04.3dc3524aac5b1e8e.c95dfd463873c4a9 - 57a43bf1cbb0e25e --VCMPPD_128_0x1B(mem) -+VCMPPD_128_0x1E(mem) - before - 33bac1822deeb447.10e6eb91091a119b.e1ec0152e4d25ced.9ddefaec7cab3b70 - 3b6c0ce57a3bf790.44ea55969d8ec244.9857fa4e38b66f61.34ecba2092f0ec80 -@@ -54561,11 +54561,11 @@ VCMPPD_128_0x1B(mem) - after - 33bac1822deeb447.10e6eb91091a119b.e1ec0152e4d25ced.9ddefaec7cab3b70 - 3b6c0ce57a3bf790.44ea55969d8ec244.9857fa4e38b66f61.34ecba2092f0ec80 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - 3ad4ded14831bef5.082d1964b299e918.6bbe2fcc29887d98.73116fea028bf8e1 - d3c05d5994f8cc89 - --VCMPPD_128_0x1B(reg) -+VCMPPD_128_0x1E(reg) - before - d9925108dc8b2310.ea225d3300f1bb68.50046a066b48d79a.41536224fe8ef0b3 - e2d2496577cf3a23.363c901613ef19ec.ac63015e6922a711.838d4cc9e00ca609 -@@ -54578,7 +54578,7 @@ VCMPPD_128_0x1B(reg) - 48ce40db00504d6d.f8edf4689e3893ac.7798d9da47b3952a.0e3968a6ec0e5ac6 - 68d032d6139b989b.0d030413bcd8e6d5.0fedeee5a287dc91.be2332a83da0ca15 - 701727b9efcfb023 --VCMPPD_128_0x1B(mem) -+VCMPPD_128_0x1E(mem) - before - fee0c2c61fa7c81b.9f251cc34d3b5659.51483c058ad9ce93.cfaf3cec162bb9f1 - 454c7fbce932d02a.4719f90c4abcc452.a089182923490611.132ac0593d2a68f7 -@@ -54588,11 +54588,11 @@ VCMPPD_128_0x1B(mem) - after - fee0c2c61fa7c81b.9f251cc34d3b5659.51483c058ad9ce93.cfaf3cec162bb9f1 - 454c7fbce932d02a.4719f90c4abcc452.a089182923490611.132ac0593d2a68f7 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - 6e384f0fb8969a3c.5d0d7c66fa93a0a7.cf2fadb728a459ff.967b57191a6b2aa4 - 8ee8624307c4b6a3 - --VCMPPD_128_0x1B(reg) -+VCMPPD_128_0x1E(reg) - before - 793e938519a803f7.08515b44f687d697.83a51a4ee600855b.672b5ef9cba7ecc7 - b5cae449eba44f4d.cb3c78123d5cf0b8.8b0d9c44047f0afb.7a54a31eaa48bf00 -@@ -54600,12 +54600,12 @@ VCMPPD_128_0x1B(reg) - 8caedb0c4012ceae.3cb7db2658e3b1ff.b278390648e0e3ad.8158dabc8b961873 - 2dccc40fc45a1605 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff - b5cae449eba44f4d.cb3c78123d5cf0b8.8b0d9c44047f0afb.7a54a31eaa48bf00 - 9dd653fd1944d450.93c52464aa21a5cc.d28ffcb3f19b6a32.e474f910e1948fd5 - 8caedb0c4012ceae.3cb7db2658e3b1ff.b278390648e0e3ad.8158dabc8b961873 - 2dccc40fc45a1605 --VCMPPD_128_0x1B(mem) -+VCMPPD_128_0x1E(mem) - before - c49c32f4a9ed44b8.e0a079e2fc9c7b10.a2df174464adcf7c.88134caba6dbaf17 - 2293a156565a5fb8.f3f727ebe86d1524.a00a56aae98bbc70.b0ae320da6170a1d -@@ -54615,11 +54615,11 @@ VCMPPD_128_0x1B(mem) - after - c49c32f4a9ed44b8.e0a079e2fc9c7b10.a2df174464adcf7c.88134caba6dbaf17 - 2293a156565a5fb8.f3f727ebe86d1524.a00a56aae98bbc70.b0ae320da6170a1d -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - a22a6e4675f34b4d.ca02a847c1160212.d994caffd0b5f26b.651069b9fe8361ac - ab6fb1da8dcbd48d - --VCMPPD_256_0x1B(reg) -+VCMPPD_256_0x1E(reg) - before - b3fdbc682f85c7b9.7d61c5ab2037943a.454f7271e605ce43.cb8bf7c56918b4ca - d90687d0803c75dd.8ff00c3e0285ba24.f1313e7eac6c77d6.c5b51684ecc03451 -@@ -54627,12 +54627,12 @@ VCMPPD_256_0x1B(reg) - efb84ada9dd1f5bc.c7465b9fdd718c9e.47e4c9f389cf52d0.46ce1c991f0c6081 - 8355fac806c98483 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - d90687d0803c75dd.8ff00c3e0285ba24.f1313e7eac6c77d6.c5b51684ecc03451 - 79d50d7d1b7c1ba5.b4a3bfeb38ea7936.28f407dbaed63a76.a5dca42775b82e29 - efb84ada9dd1f5bc.c7465b9fdd718c9e.47e4c9f389cf52d0.46ce1c991f0c6081 - 8355fac806c98483 --VCMPPD_256_0x1B(mem) -+VCMPPD_256_0x1E(mem) - before - 3a3ebb9f47fa575b.96f93a55a0c83fcf.a6a45b440e26b085.aa4c8031d8e4fc8f - 4655d90afeab9436.cce6d959c3ed3489.2b8b3bc7e616a01a.ae79280338a07460 -@@ -54642,11 +54642,11 @@ VCMPPD_256_0x1B(mem) - after - 3a3ebb9f47fa575b.96f93a55a0c83fcf.a6a45b440e26b085.aa4c8031d8e4fc8f - 4655d90afeab9436.cce6d959c3ed3489.2b8b3bc7e616a01a.ae79280338a07460 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 - cc3c214c3bbf40a4.51ef16acd3ed12a4.9b1f8b19fdd4d8f8.04523c10993ebde7 - 0f96a023d23806f5 - --VCMPPD_256_0x1B(reg) -+VCMPPD_256_0x1E(reg) - before - 2acfe5798c0a0dc4.fea443fcfa3a258f.59a3abd3f9e1725e.3e65f4be73bb979a - b148087f623e0d01.f66ab2ef9e64662c.5e33df33ad336e6e.f7632df2020c1299 -@@ -54654,12 +54654,12 @@ VCMPPD_256_0x1B(reg) - 732ed446d302eb74.a3406c5207fbe72f.d313164f311e2a46.1fb6ffb4d41d305c - 46a3911a51f64a78 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 - b148087f623e0d01.f66ab2ef9e64662c.5e33df33ad336e6e.f7632df2020c1299 - 004f049ff0624458.8e5aec13444cbda9.bee9af398c6e4283.a4e4b2a0c3d40720 - 732ed446d302eb74.a3406c5207fbe72f.d313164f311e2a46.1fb6ffb4d41d305c - 46a3911a51f64a78 --VCMPPD_256_0x1B(mem) -+VCMPPD_256_0x1E(mem) - before - f378e2bf546810a1.663276e1a6a94102.12e8ae9a047f9fec.fbfb10e339d06166 - 0301708dfc813f03.35a7e6db06e380ad.b51d2ed656e3a30c.90ee995f3f0e248d -@@ -54669,11 +54669,11 @@ VCMPPD_256_0x1B(mem) - after - f378e2bf546810a1.663276e1a6a94102.12e8ae9a047f9fec.fbfb10e339d06166 - 0301708dfc813f03.35a7e6db06e380ad.b51d2ed656e3a30c.90ee995f3f0e248d -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff - bd5e3158a5d6c820.d7131c9bdc41ac0d.0a62dada6b7c7924.752449c4b7643da2 - 7d00688460930be8 - --VCMPPD_256_0x1B(reg) -+VCMPPD_256_0x1E(reg) - before - 621606dd788055e5.1ecb5c2cdf299933.62a3db3a897d1119.7509fd7a65cac573 - 81b31f3b9bb55746.521bb3db2c54c32f.39d357e8337d4ff3.846e4ebe25274bd6 -@@ -54681,12 +54681,12 @@ VCMPPD_256_0x1B(reg) - deb2b3b66f2d71e3.a398d577715b1191.3a467722ecf649bf.01a16be26643f882 - 27082f9b1e1a9624 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 - 81b31f3b9bb55746.521bb3db2c54c32f.39d357e8337d4ff3.846e4ebe25274bd6 - 3623af0a64c04cb7.351bb250a9600240.b7f08d1175cba346.145d4992c7a1c876 - deb2b3b66f2d71e3.a398d577715b1191.3a467722ecf649bf.01a16be26643f882 - 27082f9b1e1a9624 --VCMPPD_256_0x1B(mem) -+VCMPPD_256_0x1E(mem) - before - 625c11a70c315f89.d3ac26ac59860277.785b983ca150ad4f.1d21138533877c09 - 8e6a8df44c940fdc.725c0456be5a3a1e.9033788b544c92a6.bbcc5ca7e60c79d1 -@@ -54696,11 +54696,11 @@ VCMPPD_256_0x1B(mem) - after - 625c11a70c315f89.d3ac26ac59860277.785b983ca150ad4f.1d21138533877c09 - 8e6a8df44c940fdc.725c0456be5a3a1e.9033788b544c92a6.bbcc5ca7e60c79d1 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.ffffffffffffffff.0000000000000000.0000000000000000 - 29e445fd2f6f13fe.1e12f27a669c9258.fa4e7c77b58626cc.9dc6e6da0320c18a - 97ac1fc1a4c783d3 - --VCMPPS_128_0x1B(reg) -+VCMPPS_128_0x1E(reg) - before - be93f4182291ff4a.50e878920a00df25.e3affacce2232a42.022999ed9add4df4 - 6cc7644a180b719a.d8d53517a80c81ea.c2335d83485359f0.be48c19c736aad65 -@@ -54708,12 +54708,12 @@ VCMPPS_128_0x1B(reg) - d145feefdd3c2577.7b9e3ea197cb3b01.3e1f25d044e06f46.bf822759705707d0 - bc355c3fcbcf7923 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - 6cc7644a180b719a.d8d53517a80c81ea.c2335d83485359f0.be48c19c736aad65 - ff9468c322c01470.9d79f87822a1b77b.17ea170b35b95c0d.097772715c39024a - d145feefdd3c2577.7b9e3ea197cb3b01.3e1f25d044e06f46.bf822759705707d0 - bc355c3fcbcf7923 --VCMPPS_128_0x1B(mem) -+VCMPPS_128_0x1E(mem) - before - dc5b8e0f8aad146e.4028203ae50be05c.4e11827f2094c9ab.9320823e1254ce47 - fbc238b5c8fe93de.a687cc10d4ba81ca.f29e40fcdb0a1fa3.723729c13aa2b4bb -@@ -54723,11 +54723,11 @@ VCMPPS_128_0x1B(mem) - after - dc5b8e0f8aad146e.4028203ae50be05c.4e11827f2094c9ab.9320823e1254ce47 - fbc238b5c8fe93de.a687cc10d4ba81ca.f29e40fcdb0a1fa3.723729c13aa2b4bb -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff - a57ee433332630db.cbecb00edee663f4.1c351b87562b0e2e.3eda4bb709fa08ae - e3febc01e91ced85 - --VCMPPS_128_0x1B(reg) -+VCMPPS_128_0x1E(reg) - before - 8269691193474a80.e96cdee39816c6c1.418ae00e2f7b1d07.5bd7306d4eee201a - 76664d52a3075b4a.9bc94119eca8307b.1fd48948d920ac54.dac4afa2e78ee804 -@@ -54735,12 +54735,12 @@ VCMPPS_128_0x1B(reg) - d24aab16687888fd.bd042ec8d3e3721d.84a0361fa6c63c4b.0daadbae6d928d85 - 773c815c920ee273 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 - 76664d52a3075b4a.9bc94119eca8307b.1fd48948d920ac54.dac4afa2e78ee804 - 1d43652fb6e95b90.996387c24ce82b35.c218a72a775f4d87.77c614143d152319 - d24aab16687888fd.bd042ec8d3e3721d.84a0361fa6c63c4b.0daadbae6d928d85 - 773c815c920ee273 --VCMPPS_128_0x1B(mem) -+VCMPPS_128_0x1E(mem) - before - 9347810ac997dd10.f0c81d7254411c3e.e579b2199ea4c35d.c2b9339301e1b54c - 3b9957a52e383b87.d509b5af16cf53fe.ec8e8d9fc837d821.d8af98f2243af337 -@@ -54750,11 +54750,11 @@ VCMPPS_128_0x1B(mem) - after - 9347810ac997dd10.f0c81d7254411c3e.e579b2199ea4c35d.c2b9339301e1b54c - 3b9957a52e383b87.d509b5af16cf53fe.ec8e8d9fc837d821.d8af98f2243af337 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.0000000000000000.00000000ffffffff - a33d754deff30fb5.60034d7d8e6b9eae.05c83dffab0540e8.fc62902135dcb17b - c2b619c95a3ca92b - --VCMPPS_128_0x1B(reg) -+VCMPPS_128_0x1E(reg) - before - d118fc0db80b5674.1a28b6348425fdc4.bf5543e57c9129f5.d18509b09b580c42 - 83d23457e9d5f503.8f89bdb6b6a03e5e.539951deb0ac476c.eb111d475bad8cd1 -@@ -54762,12 +54762,12 @@ VCMPPS_128_0x1B(reg) - 428193b23b8cf8a3.dfdc0e40639ea8e1.8e2aa2355cf23099.7dca0ed7ba8d9a3d - ac8de3a89031a071 - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.00000000ffffffff.00000000ffffffff - 83d23457e9d5f503.8f89bdb6b6a03e5e.539951deb0ac476c.eb111d475bad8cd1 - 3431bd158c27c184.dc2c06c1a16e8eae.7a1c72d5c74836bf.3139f6b007107dc0 - 428193b23b8cf8a3.dfdc0e40639ea8e1.8e2aa2355cf23099.7dca0ed7ba8d9a3d - ac8de3a89031a071 --VCMPPS_128_0x1B(mem) -+VCMPPS_128_0x1E(mem) - before - 9b51f110a6074b8a.080db2999291d40b.72674f1f15394922.ed0fde690c3671a7 - 24e1b2f9171c57b4.e22317382ec09268.7297474ad54d2d9f.f11620df729e3794 -@@ -54777,11 +54777,11 @@ VCMPPS_128_0x1B(mem) - after - 9b51f110a6074b8a.080db2999291d40b.72674f1f15394922.ed0fde690c3671a7 - 24e1b2f9171c57b4.e22317382ec09268.7297474ad54d2d9f.f11620df729e3794 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff - 779441037c3080ea.4219a04ba3d2a2b4.29194934ee0eadf6.5cbeab3ed1103dbd - 7af6ecff0330f551 - --VCMPPS_256_0x1B(reg) -+VCMPPS_256_0x1E(reg) - before - ae8123b15ba62275.f94f08faa847164d.8091bd97b4cc6dfa.99034ccb7ed3c12a - 54ab4ec175fefed4.860672249fcdfc72.41c20e4a7a210ae6.e5c2f45e8c400749 -@@ -54789,12 +54789,12 @@ VCMPPS_256_0x1B(reg) - 670c6da66280b5f5.329823be6054abac.c17e4196930da95f.84f3282991431df5 - 8ffcac39bff263db - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.ffffffff00000000.ffffffffffffffff.ffffffff00000000 - 54ab4ec175fefed4.860672249fcdfc72.41c20e4a7a210ae6.e5c2f45e8c400749 - c9c06899eec2c61b.fb85fc6c7eceef82.e3f891d1905eb424.ea24bfda34613d7e - 670c6da66280b5f5.329823be6054abac.c17e4196930da95f.84f3282991431df5 - 8ffcac39bff263db --VCMPPS_256_0x1B(mem) -+VCMPPS_256_0x1E(mem) - before - e70bc5f5db78cd5c.8bda59556cc4080f.080a6207626dec1a.36a21a071ebd2244 - 68ecf14800e315a4.91772911a819fb15.59a935319f246df8.a0ae198ecef75e7e -@@ -54804,11 +54804,11 @@ VCMPPS_256_0x1B(mem) - after - e70bc5f5db78cd5c.8bda59556cc4080f.080a6207626dec1a.36a21a071ebd2244 - 68ecf14800e315a4.91772911a819fb15.59a935319f246df8.a0ae198ecef75e7e -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffffffffffff.0000000000000000.ffffffff00000000.0000000000000000 - 55536f68d7963236.b34e625f2826b093.db9988dc3b9e22b7.bfb176930a3e0aa3 - 2d40cce8cf63f3e6 - --VCMPPS_256_0x1B(reg) -+VCMPPS_256_0x1E(reg) - before - fee8370429438d2f.7972ba0cc1f67ed9.8720c3caa4f7ea63.c5830034d378cef0 - 90f4b453b36a1529.359206f9246a99f3.adf1f7f2c209b4cf.9ac9fc1f1621aa49 -@@ -54816,12 +54816,12 @@ VCMPPS_256_0x1B(reg) - 626cd03ac8bfdfe3.ea089659c7c02b3a.5fbeca295621e72a.7598715a0e0de50c - 33b9e183fb69bbcf - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 0000000000000000.00000000ffffffff.0000000000000000.0000000000000000 - 90f4b453b36a1529.359206f9246a99f3.adf1f7f2c209b4cf.9ac9fc1f1621aa49 - 3db23d410965c781.6780d1191dff3faf.810cfb431fe84983.3636f88720a473ee - 626cd03ac8bfdfe3.ea089659c7c02b3a.5fbeca295621e72a.7598715a0e0de50c - 33b9e183fb69bbcf --VCMPPS_256_0x1B(mem) -+VCMPPS_256_0x1E(mem) - before - 4b66c6ee04c3b262.5c6f69ab8b0498fa.9af5d2a63fb91bc0.a3546011033fc871 - 9b6b9c87452786f2.850702feefc12f72.5315ffeaa0f7c96c.a918ba65c3cf2803 -@@ -54831,11 +54831,11 @@ VCMPPS_256_0x1B(mem) - after - 4b66c6ee04c3b262.5c6f69ab8b0498fa.9af5d2a63fb91bc0.a3546011033fc871 - 9b6b9c87452786f2.850702feefc12f72.5315ffeaa0f7c96c.a918ba65c3cf2803 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.0000000000000000.ffffffff00000000.0000000000000000 - 4fad06f4dc3fb4b8.d82529fe08d0e639.4f1a210c8e6f51e8.6a5ca605eb7259bb - de7531298a9da138 - --VCMPPS_256_0x1B(reg) -+VCMPPS_256_0x1E(reg) - before - 84ec6f6aac6a58b1.6c81949f6a0a8646.b944ae83f53b7fde.4b970dc054c2a310 - b80e5d34ed64bbd1.30de0229a1102480.3a27249bf34de595.bf76db1d7389a40e -@@ -54843,12 +54843,12 @@ VCMPPS_256_0x1B(reg) - 39833513391175b8.1c5e6f8673fbb8aa.8d6cd53490970ae8.83890f7f2da4a23f - 8b566c5d001017ca - after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ ffffffff00000000.0000000000000000.ffffffff00000000.00000000ffffffff - b80e5d34ed64bbd1.30de0229a1102480.3a27249bf34de595.bf76db1d7389a40e - d527f5f3e8180645.768ecc7c9a5c4c93.b71b88b29d92540a.8983080e07d10f10 - 39833513391175b8.1c5e6f8673fbb8aa.8d6cd53490970ae8.83890f7f2da4a23f - 8b566c5d001017ca --VCMPPS_256_0x1B(mem) -+VCMPPS_256_0x1E(mem) - before - 7bb49b929d212ada.3e6e18007ddb43d7.fc1a663248f725f2.1666078d67e741dc - 3170190b1fe2999e.42339b264f03ae4e.f48e2c6b345f4e97.af551a29be0e3591 -@@ -54858,11 +54858,11 @@ VCMPPS_256_0x1B(mem) - after - 7bb49b929d212ada.3e6e18007ddb43d7.fc1a663248f725f2.1666078d67e741dc - 3170190b1fe2999e.42339b264f03ae4e.f48e2c6b345f4e97.af551a29be0e3591 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -+ 00000000ffffffff.ffffffff00000000.ffffffff00000000.0000000000000000 - 5a32ee7a44a476ed.b37f6dce0f9a45f2.97cd1b39c29cc8a6.8140d4db5f1348f1 - 72d673c8e009def3 - --VCMPPD_128_0x1C(reg) -+VCMPPD_128_0x1F(reg) - before - e390e3a951052267.87d03f481fbe5cd0.d99db5273521ea78.fc303aa59d8a8f69 - 30bb20e84f964ff8.e8fbcd0a4fb88e16.6cc68c6a59361b05.e77b1a50ff120438 -@@ -54875,7 +54875,7 @@ VCMPPD_128_0x1C(reg) - b5a227f37645a253.5a8116acf19fc6ea.c946ee0218651446.357a36240441e13f - cd93f23560a05724.ba2c941a207ec079.4d69d85a0d3811e6.c3f90a0ec922e3ac - 6bc313fb69c2c6a8 --VCMPPD_128_0x1C(mem) -+VCMPPD_128_0x1F(mem) - before - 0aa6cbd6012c4562.d6d87f1aac32a916.e2c9c540f9613aef.527a45e0d43d4d92 - 7c6cb08aac6c1d04.2bbec90ef487d6d5.af24250a9754ee77.35c631ff0a0005f5 -@@ -54889,7 +54889,7 @@ VCMPPD_128_0x1C(mem) - 49d5ef32ad9fc7b2.299e85d3e9acab6e.a8435e3a939cf76f.064077b932ecd793 - ab05c82b5b2f6b25 - --VCMPPD_128_0x1C(reg) -+VCMPPD_128_0x1F(reg) - before - 9e3489e6635e691f.5d0e40fd3bab1116.892eef7dce94cd9e.8ca030792a09c337 - 3c1bb657e607102c.b35cae524cbca412.a69006e51f6fb84c.85ea200bf5b6bac2 -@@ -54902,7 +54902,7 @@ VCMPPD_128_0x1C(reg) - df0449e87eb69af9.288ab41dfde03cd3.db0ec77979c9a924.6feeaade13af983b - e43c4007caf54432.9863ce4a69229485.83f62ca3782fdbd1.26784bdd9e0118cf - 86547df4b2b7f8a9 --VCMPPD_128_0x1C(mem) -+VCMPPD_128_0x1F(mem) - before - 6b4ebe0e6cddf2f6.a710951f64534982.dfb478c6ac8f6953.fc9233d1b72c8b00 - b1318a19e780c2e2.84c9469be859e796.d8492f7be4327769.a02fd76ed34cf55d -@@ -54916,7 +54916,7 @@ VCMPPD_128_0x1C(mem) - d0e6afb0926ad845.fc22aa742092d9b8.556fb1449c4b2d21.dd9be6a50f26e74f - 2e034a1768f9e63c - --VCMPPD_128_0x1C(reg) -+VCMPPD_128_0x1F(reg) - before - 1a9b3ba80d1e8f07.614f0113faca9414.4f5855a90bdca51f.9098743055d94d19 - ffb1b5c49b231d5b.c3d2cd1693d61832.2ca64bf25200f9f9.ee34340672cd960a -@@ -54929,7 +54929,7 @@ VCMPPD_128_0x1C(reg) - 378fb4d7ae93cde5.d13a8fa6799a1ecb.ef5688bc8e8911f3.4b116bb20f34c320 - 1f82344ee0fbdc51.6955c4adc923630a.f4b508735d0429b8.82f9972046199187 - 71b9333c3688bc6a --VCMPPD_128_0x1C(mem) -+VCMPPD_128_0x1F(mem) - before - f31dbcf2f98efff5.14d53293d0e6834a.66ede6199f7ca31b.960fc8845bfb7cf5 - e3f0ac2eab361855.70d6a91418e0017d.a3d073d516b1992c.33afc35a23fd4856 -@@ -54943,7 +54943,7 @@ VCMPPD_128_0x1C(mem) - 8217b6e94e9db643.d10ef27720336d3f.52a2bcec58e19af8.cbf55a04824b3532 - 7d32eeb152b0cf05 - --VCMPPD_256_0x1C(reg) -+VCMPPD_256_0x1F(reg) - before - 9ae6aed35c4fd1ac.e702c7407674b529.8dddbd301aa4d327.7a2a6f205cf31d0c - 7d5d95d63cb377d2.2c8d31ccfe1e7894.2189f1d5db5300f8.542b7d55711246cf -@@ -54956,7 +54956,7 @@ VCMPPD_256_0x1C(reg) - 81e39f268f68fc24.2b846e7b02a6bcaf.e95e8ad201ce2e5f.ba736175b349d26c - 04c4c82ff0fa9d4e.c2b3fc389d183ca6.41a7849128a19a08.8acc986d3fa57d10 - 9e039c29303002e7 --VCMPPD_256_0x1C(mem) -+VCMPPD_256_0x1F(mem) - before - d4e4eb96a3f81e1c.604b0d5efcf696fb.cbe656efec80b6a7.85b2db7feb567f9e - 063b009fb3098ddb.f3c5681d4ee823d8.23e8f98c0aebe4db.11c98c08e67c1acd -@@ -54970,7 +54970,7 @@ VCMPPD_256_0x1C(mem) - d27a6c341c3353aa.2ac256ff36dae7d1.318d062824f84e93.714ee99df74462a9 - fd548d7f44ff86ad - --VCMPPD_256_0x1C(reg) -+VCMPPD_256_0x1F(reg) - before - 41977bad395950fb.23fbbc99ad642212.86dddffa04f39745.9ec7690058b1026e - 9963ad9273dffc3f.e121c24a4b0e34b4.891b70368832ca98.cb00046dcc9e5b2d -@@ -54983,7 +54983,7 @@ VCMPPD_256_0x1C(reg) - 6103219a8d1cc624.e8b9fa33123c44bd.8dc7031f5e22bd77.9206545d9cc815fd - f4c4d331249de957.158fe0401ffb1058.ef2f9721234fac8d.d0a4d3bae23deb09 - 61a5ff72bd089a7e --VCMPPD_256_0x1C(mem) -+VCMPPD_256_0x1F(mem) - before - 21d653704636de88.b0f2bdc3d3eda283.426ff05d8e5652b2.0c9d25a87346d387 - ed034c9f9cd27252.f0d9ddbc37982d55.4c24a7777a59c6f6.3e5eaa20e9926d11 -@@ -54997,7 +54997,7 @@ VCMPPD_256_0x1C(mem) - 1481194618847dd8.6b02ab948c30a79a.6741f74d3a8938ef.54098b94b85aed83 - f08ade674aee4ac3 - --VCMPPD_256_0x1C(reg) -+VCMPPD_256_0x1F(reg) - before - 138f19dc71080c43.2869e69478b36cec.5fdb534ab5350f65.304088e347cdacfb - 1762365dcc326daf.b77e47c413819b71.479e1f1802c63885.4645b02540e944a2 -@@ -55010,7 +55010,7 @@ VCMPPD_256_0x1C(reg) - 59503358f5faa9b2.9d8ab8c206f8c792.7e950d69116e60a7.851ceaff44eaba0f - 35a50b3888ecfef9.b65ab67b6c26ac7c.620d18a97bb9c176.c991b25c6ddccb6f - ee6f842ad7c933ee --VCMPPD_256_0x1C(mem) -+VCMPPD_256_0x1F(mem) - before - d084dc559ebfadb7.07adba692293a62f.ddbabcd96116065a.4d523c43de34979f - 4b9a37c7e0caf6f6.2bb33d575e7bdd01.f07646ca02d59059.9daf75a5d66a20ce -@@ -55024,7 +55024,7 @@ VCMPPD_256_0x1C(mem) - 7bfce3333e4be48a.d9edab1a2e3fec28.4731d611b6ed2769.d8e5186ff23836ec - 7b5579ae4fe83b34 - --VCMPPS_128_0x1C(reg) -+VCMPPS_128_0x1F(reg) - before - f20edf64b083e331.e9df2c0694db0235.1bb88fc7f9333bd5.43c8d540025fabd1 - 9a5c46feb296688f.60f568d0d3aede07.1eb237e2d7990acd.99eb48b169cf500b -@@ -55037,7 +55037,7 @@ VCMPPS_128_0x1C(reg) - cd8babe6f0ac06fc.bb08127f18d2342c.40279dd564fb94bd.2766ab50074ad241 - e8e7098a0751fb21.d8e6a6fe7e53c2cf.dc63bf0e3be81651.c8057b0af9daec9f - 579432c95a8d5c52 --VCMPPS_128_0x1C(mem) -+VCMPPS_128_0x1F(mem) - before - b2de4e7a476fdc86.48bb5c55921281ad.9259a039213b421d.4eb198f8f8e9cc34 - b4b14a0adb8a2866.4754a0b22e7ad54a.c42e7c1b1e987142.f15e24fe388cf212 -@@ -55051,7 +55051,7 @@ VCMPPS_128_0x1C(mem) - 1c1dd3736aa118dd.9506edd70770d669.042dcc8a94e0cbbf.3f064613b0e67c73 - a098d4f91fb5594c - --VCMPPS_128_0x1C(reg) -+VCMPPS_128_0x1F(reg) - before - a4b805ac815595d1.3a4f57259cb433cb.9cb5ed767c16fb43.caf037ed46e26e6f - a6b4d69971526dae.7039ac65e6310a16.b35ace597193dede.784474a8c188afa6 -@@ -55064,7 +55064,7 @@ VCMPPS_128_0x1C(reg) - 01d6412a8c391d8e.98a64d1f64245be9.36408cea8374bae7.ecf6ffa821df4c8f - 136c44cc6d96e11e.8f64b73f319ae071.81b224964e44cd0a.00d255d783f2ff57 - 92a4f12302ce852a --VCMPPS_128_0x1C(mem) -+VCMPPS_128_0x1F(mem) - before - 7c384f76bb7d9933.36c0daecb1f3f40a.323d64b1699e55d9.f0fd91ca6d8f50f2 - 9b59ecbec90ef99f.c81ffff5f3de93fd.5bfed261293d784e.df6dcff07ce2824c -@@ -55078,7 +55078,7 @@ VCMPPS_128_0x1C(mem) - e976cfda55ff874f.a42de771e38c64aa.b368de2caf79b30e.adecafc7dccedf04 - 4492494f657f81ba - --VCMPPS_128_0x1C(reg) -+VCMPPS_128_0x1F(reg) - before - cb8ea37a4f67c293.cf090e860c782fea.a875a2bdc8670ebc.99a9751eae2e44b1 - 9e2abcb43412dc38.5a5a7bd688021199.89f7dca21cff3485.7601bbffa4ae7110 -@@ -55091,7 +55091,7 @@ VCMPPS_128_0x1C(reg) - 19b38d69b30d0c58.663593b6e6a8ea85.a400918c7be112b2.263d2eb9ad04f758 - 9775140565e38e9d.cf65d013407676dd.56dcbee78098e3ef.852a493ae63d92b5 - 7092886d6a64fd52 --VCMPPS_128_0x1C(mem) -+VCMPPS_128_0x1F(mem) - before - c141683e5585f55c.76bc4bf4e9219db3.72b8b0d7b57870cb.f9d75e20c7b0e4e7 - 55056499c5ad36fe.11d431a3d8527647.29f8aff05fbb957b.ea3d6da1edb65147 -@@ -55105,7 +55105,7 @@ VCMPPS_128_0x1C(mem) - b6f8a09e9d3f82bd.eaa5f2ed6dbd7698.4672f5cdc3324fd4.2679c82f44b95ded - 29e70d14aecf758c - --VCMPPD_128_0x1D(reg) -+VCMPPS_256_0x1F(reg) - before - ebf0b1f16502e942.3bbfd81f3fc10531.e1f7c7614a1014ad.6444366ab57e5dd5 - c6e0b03408dff4bc.73cb1ddad47ac1ee.034a394304876cf0.0734850b4d3a8448 -@@ -55113,12 +55113,12 @@ VCMPPD_128_0x1D(reg) - 3aa4af997cc4c2aa.6bdcbbaf48bfd3f1.3c23e4067c0d39ae.4b9d3e09dd341535 - a5ae9f3e0d89f508 - after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - c6e0b03408dff4bc.73cb1ddad47ac1ee.034a394304876cf0.0734850b4d3a8448 - 1703064830f0d3a5.39e5eabc7876721f.aeea440136acba0c.0a0d5e9ca6738359 - 3aa4af997cc4c2aa.6bdcbbaf48bfd3f1.3c23e4067c0d39ae.4b9d3e09dd341535 - a5ae9f3e0d89f508 --VCMPPD_128_0x1D(mem) -+VCMPPS_256_0x1F(mem) - before - f40dff27537fdffe.8b11a89385e4fd77.e47b0ca16063a190.0b4116be73352681 - 1486d9b0ca219141.6594eca2e9debfb7.808d597ddb6e9827.758fd595b6b1bd32 -@@ -55128,11 +55128,11 @@ VCMPPD_128_0x1D(mem) - after - f40dff27537fdffe.8b11a89385e4fd77.e47b0ca16063a190.0b4116be73352681 - 1486d9b0ca219141.6594eca2e9debfb7.808d597ddb6e9827.758fd595b6b1bd32 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 36f5ec53bd9a3865.290f45b0318dcb42.903ed9a36be5efef.8eeeea5193d2d8dc - f497390e6390d42e - --VCMPPD_128_0x1D(reg) -+VCMPPS_256_0x1F(reg) - before - 66a10499f1d16a0d.f1831d457089a69d.ca9f53874d5b8ce5.bd7403c5b86bc878 - 41584960d621d526.ed5cb887c554cad3.65769c223332c5ac.7d4e1981d986b9a9 -@@ -55140,12 +55140,12 @@ VCMPPD_128_0x1D(reg) - 9dfb2f4e1b201db4.171a1dabc4b027ec.f828cf59ce2d8e53.251dfb7805b1d7b6 - c6aabe8a48d87aea - after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 41584960d621d526.ed5cb887c554cad3.65769c223332c5ac.7d4e1981d986b9a9 - df0703cdb10d5224.054a3905d8086134.56df1cef7f9fb242.ac9798c3e94480b0 - 9dfb2f4e1b201db4.171a1dabc4b027ec.f828cf59ce2d8e53.251dfb7805b1d7b6 - c6aabe8a48d87aea --VCMPPD_128_0x1D(mem) -+VCMPPS_256_0x1F(mem) - before - 690b5de7cfc52775.d780c74eb2e67282.fd98de65a559d826.a99bb1ccbc68978d - ec0d557ab5849886.e9e2c93912ec8c39.958ffa1f980d2f0e.c485bfb4e3dd079a -@@ -55155,11 +55155,11 @@ VCMPPD_128_0x1D(mem) - after - 690b5de7cfc52775.d780c74eb2e67282.fd98de65a559d826.a99bb1ccbc68978d - ec0d557ab5849886.e9e2c93912ec8c39.958ffa1f980d2f0e.c485bfb4e3dd079a -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - fe1e3cf10faab8e5.066df8809be60214.471c304322ccc29c.a7ee4c9353a20ede - 2704c362d20a1d6e - --VCMPPD_128_0x1D(reg) -+VCMPPS_256_0x1F(reg) - before - 82c25656fcdc8481.45c724aebc28e08b.c82d1db5fcf1d690.19494386f2ee7598 - 127200dc6ca37ec4.dc3f555138a9bc66.d2fb9c84956c5fa6.0d20a078424cbff3 -@@ -55167,12 +55167,12 @@ VCMPPD_128_0x1D(reg) - 45db894a90421f89.65d07ef90ee28269.2eec95a4e2e1824e.c6fc281dd8ed0875 - 45984ba855487ef4 - after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 127200dc6ca37ec4.dc3f555138a9bc66.d2fb9c84956c5fa6.0d20a078424cbff3 - 3561bd5ebfec49e3.9d5349c69f3808a1.8021705b03e3da01.fd6dc30731f25cd9 - 45db894a90421f89.65d07ef90ee28269.2eec95a4e2e1824e.c6fc281dd8ed0875 - 45984ba855487ef4 --VCMPPD_128_0x1D(mem) -+VCMPPS_256_0x1F(mem) - before - 540fa993c4107b81.a02c600b7b313c62.11806fd7a1b2e4ea.38a807cdcdf29538 - d02bbcca4050bb49.a09f3f0c1e46de1c.7b2f984a73b4eb4f.faa1c34160a24d6c -@@ -55182,898 +55182,7 @@ VCMPPD_128_0x1D(mem) - after - 540fa993c4107b81.a02c600b7b313c62.11806fd7a1b2e4ea.38a807cdcdf29538 - d02bbcca4050bb49.a09f3f0c1e46de1c.7b2f984a73b4eb4f.faa1c34160a24d6c -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -+ ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff - 8085f7ccd168f339.031f0283f50f9cdd.fcbf83a3457fd778.157906b9f0119e61 - 27f0859625e8af7a - --VCMPPD_256_0x1D(reg) -- before -- 61d43d6f728d568c.6b5b156f1d5963b9.1dc3ded063dc303d.cb363d617d603493 -- 1f712bae748fcf44.3306da0fe7f20523.4dbbb20ff7fe392d.cadd1f6565a42642 -- bc134ac0c677554e.b454c1964b4096a4.f05078aa4d01f158.d380a59b185668b2 -- 9605961205d32655.ca0f46f2644ed368.60d12e0e0272946b.c3eb4cefb382b70f -- 76ea8f4d5135cf85 -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 1f712bae748fcf44.3306da0fe7f20523.4dbbb20ff7fe392d.cadd1f6565a42642 -- bc134ac0c677554e.b454c1964b4096a4.f05078aa4d01f158.d380a59b185668b2 -- 9605961205d32655.ca0f46f2644ed368.60d12e0e0272946b.c3eb4cefb382b70f -- 76ea8f4d5135cf85 --VCMPPD_256_0x1D(mem) -- before -- c848e9a10e7a6c3f.08950b0ecc2e7b05.5104e50d4e28759a.fa89cfa8b1dc6011 -- 95d3d9d7075d4969.6d0da522b715930c.25ff1bd526db3b67.1ac358e2f7cb8ff7 -- b955d8db58eb2330.23ba61b86313a814.22cc63350772dffa.1cccc32a70cc5ec9 -- 109b649a1c2eb6c0.84e83a3e6cb4f7c9.243739190ef91e80.5cf00eebb66a0932 -- 367b34906832cbdf -- after -- c848e9a10e7a6c3f.08950b0ecc2e7b05.5104e50d4e28759a.fa89cfa8b1dc6011 -- 95d3d9d7075d4969.6d0da522b715930c.25ff1bd526db3b67.1ac358e2f7cb8ff7 -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -- 109b649a1c2eb6c0.84e83a3e6cb4f7c9.243739190ef91e80.5cf00eebb66a0932 -- 367b34906832cbdf -- --VCMPPD_256_0x1D(reg) -- before -- 06b931871faee17b.7671f7fe7035be44.eee32c1f6d85bcd8.070b196d567db425 -- 28f6023b7a6c87b3.c6a30ff56f09f6e9.bbf734c7021132ed.a7167f1dfc095c14 -- f87da21912f8f833.defc286a35b81bdb.496f4ca2c8e496b3.e022e8151ba9d37a -- d29b0d8b85dd72a6.994abc49df4ee945.f299721c5b8a24d7.8efccf41d06ad582 -- 8c70b08e36571d59 -- after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.ffffffffffffffff -- 28f6023b7a6c87b3.c6a30ff56f09f6e9.bbf734c7021132ed.a7167f1dfc095c14 -- f87da21912f8f833.defc286a35b81bdb.496f4ca2c8e496b3.e022e8151ba9d37a -- d29b0d8b85dd72a6.994abc49df4ee945.f299721c5b8a24d7.8efccf41d06ad582 -- 8c70b08e36571d59 --VCMPPD_256_0x1D(mem) -- before -- b84a07e6697c692b.129d3ffe6fa72fb9.d357497d88d51b54.14bfa1a256901805 -- ed55513786e67323.14cd34de6be26b17.68f04af44d5b6e33.092ed59e5582ade8 -- 065f086ba9a0f76e.3477e998161b646d.33e13b9a49ec9e0f.2e320b7df5ea202c -- e132aa70edb6b337.cee958970bdd5467.12f6985999936614.e0173dacd156ad7f -- 7928699686528f8a -- after -- b84a07e6697c692b.129d3ffe6fa72fb9.d357497d88d51b54.14bfa1a256901805 -- ed55513786e67323.14cd34de6be26b17.68f04af44d5b6e33.092ed59e5582ade8 -- 0000000000000000.ffffffffffffffff.ffffffffffffffff.0000000000000000 -- e132aa70edb6b337.cee958970bdd5467.12f6985999936614.e0173dacd156ad7f -- 7928699686528f8a -- --VCMPPD_256_0x1D(reg) -- before -- 56b38aa6af6804fc.599bb3316f3561ab.3d6e7f46e6b578b0.e0fbde1e585c846d -- d3029d4ae926467f.49669d9a4928bef5.df515a13442e0bf4.78bb88d5a353b246 -- 4d629cedcf1891bf.8f5fe6979a9b8542.0fdfe369c0d44ae1.b804126b9585accd -- 1e1f85fbfdc8226a.055108147c9b74be.286418b4f7337121.7aa0f8ca4bfd302c -- 9c5cb6e0e0c7f88f -- after -- 0000000000000000.ffffffffffffffff.0000000000000000.ffffffffffffffff -- d3029d4ae926467f.49669d9a4928bef5.df515a13442e0bf4.78bb88d5a353b246 -- 4d629cedcf1891bf.8f5fe6979a9b8542.0fdfe369c0d44ae1.b804126b9585accd -- 1e1f85fbfdc8226a.055108147c9b74be.286418b4f7337121.7aa0f8ca4bfd302c -- 9c5cb6e0e0c7f88f --VCMPPD_256_0x1D(mem) -- before -- f804c99871f0c123.a38553e011c5362a.890a81fd0b334594.882cf46085d8bc60 -- 6c64acde19834614.38e00208a49806ab.f554cd3e646fb4f1.8a8373d9054f664b -- d247db9ef48d458d.397b8fe054cfd19a.27fc66c4a25c7f01.89b5918b1322ad8e -- 087bd2c41f1878bb.02a3f4d2bdf5d1a3.f9ceca79e20560ef.e30d4be34cdfcad4 -- f2d89b4b4b11fcca -- after -- f804c99871f0c123.a38553e011c5362a.890a81fd0b334594.882cf46085d8bc60 -- 6c64acde19834614.38e00208a49806ab.f554cd3e646fb4f1.8a8373d9054f664b -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -- 087bd2c41f1878bb.02a3f4d2bdf5d1a3.f9ceca79e20560ef.e30d4be34cdfcad4 -- f2d89b4b4b11fcca -- --VCMPPS_128_0x1D(reg) -- before -- 14627f31ad457d1c.e8ca0e3cb6339bca.efa52f4b7a964371.4996744b3f7714e7 -- a3f7f2ff0d068a75.4f010af2d4e76ce5.5ccb3bb8273f63b0.f120e024d6bd5617 -- fde3f12307e05f81.1aec42d29542a538.a5621484617b6c0e.ce378af2c2e3e4a9 -- 7c727608386037ee.235732c9164f03f0.26b5b71ac3d79b35.bda9efa020f578c9 -- 98408a1a0b00cea4 -- after -- 0000000000000000.0000000000000000.ffffffff00000000.0000000000000000 -- a3f7f2ff0d068a75.4f010af2d4e76ce5.5ccb3bb8273f63b0.f120e024d6bd5617 -- fde3f12307e05f81.1aec42d29542a538.a5621484617b6c0e.ce378af2c2e3e4a9 -- 7c727608386037ee.235732c9164f03f0.26b5b71ac3d79b35.bda9efa020f578c9 -- 98408a1a0b00cea4 --VCMPPS_128_0x1D(mem) -- before -- 3cc9d74c9f0fa466.7def7f1a3c115066.470e56c1721b4239.3b121fe8eadd2cd1 -- 85105222f92fb43a.5da807c5ae7fe495.62dc2ba8c6b01d3f.40c34859711c5a90 -- 4fe17888356bbb4d.76e70b752b372f28.508e2c692d1d512d.90162ed9f51d631b -- 7707c36b6ecf75ca.25f985964ec46ecb.eef1d5efc46b9a2f.8955cdd4126e8121 -- 86cd22b7629af04c -- after -- 3cc9d74c9f0fa466.7def7f1a3c115066.470e56c1721b4239.3b121fe8eadd2cd1 -- 85105222f92fb43a.5da807c5ae7fe495.62dc2ba8c6b01d3f.40c34859711c5a90 -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -- 7707c36b6ecf75ca.25f985964ec46ecb.eef1d5efc46b9a2f.8955cdd4126e8121 -- 86cd22b7629af04c -- --VCMPPS_128_0x1D(reg) -- before -- e3c928ec832eee48.d750b1b5c0689dde.c62a7394b3b2dd29.16cfa228a6a8b373 -- fb97dbe011b4b5c2.4c86bd544841f0b5.b6c5d0dcf78eb8ef.a5f510fff0df5922 -- 2c823700a7bb8266.b276643222662a7a.4f1898d8b5e33bc8.772e9960bd1d486b -- d1d539b7e2cc90df.e5ec203d68e3065a.ee6dc7f68a3da161.6848bb372a6d3c78 -- 540df17152dbf075 -- after -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -- fb97dbe011b4b5c2.4c86bd544841f0b5.b6c5d0dcf78eb8ef.a5f510fff0df5922 -- 2c823700a7bb8266.b276643222662a7a.4f1898d8b5e33bc8.772e9960bd1d486b -- d1d539b7e2cc90df.e5ec203d68e3065a.ee6dc7f68a3da161.6848bb372a6d3c78 -- 540df17152dbf075 --VCMPPS_128_0x1D(mem) -- before -- 174ab8f851742190.45dddb705d751cda.c1b46f6039c54280.ef125aa012292766 -- 8dcc8ab944438bf2.e6e61b99b4416203.229acc87af189719.ae514c44e7320882 -- 925ce5a14754eaca.0e3cf49d84bd9e05.e469b39ee6e6c451.8777994da8e58262 -- 01c9449b75b4f942.1b2b63e869740c8c.e2efa191fb3d8453.d6cf3d27eecccfb1 -- f7a7353e58752c1c -- after -- 174ab8f851742190.45dddb705d751cda.c1b46f6039c54280.ef125aa012292766 -- 8dcc8ab944438bf2.e6e61b99b4416203.229acc87af189719.ae514c44e7320882 -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -- 01c9449b75b4f942.1b2b63e869740c8c.e2efa191fb3d8453.d6cf3d27eecccfb1 -- f7a7353e58752c1c -- --VCMPPS_128_0x1D(reg) -- before -- 46497bfe7f6cd44f.b8de2492ea6e7586.67fe62e6fef2e746.faf6104c0929924c -- 1f030dd3013c04f5.9266ff74c38e1ac3.5002ef03dfc46cdd.074b7ebb2cb4aa67 -- de1fe6297a71f8bb.6b2f532c1b21a325.308405aba975d6fd.e5ba66cb82ec8ad1 -- dfea036d8597ec4c.1f039ba60f32cdd7.64cea04bf7916253.700f446624ddecb5 -- 8315957a30918d41 -- after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -- 1f030dd3013c04f5.9266ff74c38e1ac3.5002ef03dfc46cdd.074b7ebb2cb4aa67 -- de1fe6297a71f8bb.6b2f532c1b21a325.308405aba975d6fd.e5ba66cb82ec8ad1 -- dfea036d8597ec4c.1f039ba60f32cdd7.64cea04bf7916253.700f446624ddecb5 -- 8315957a30918d41 --VCMPPS_128_0x1D(mem) -- before -- fc9ad4f1c216299e.7eb05e09bf3b1b55.89af53cebbcd5406.492dbd4d66a54c8b -- b6687db9f5787bfb.16bcf56bc3e8c281.87fff79039fff3de.39ec561f913cd050 -- 8c4c0cbde5c14082.055cc3fe2d2b1d7e.f4be04d9a8d3688a.9159692b15e22a4f -- 5c12fde9afff345f.a6dac42d9a8f68f5.abbaf59321556d37.aebff1df8d249533 -- ea69eba6968d4ea9 -- after -- fc9ad4f1c216299e.7eb05e09bf3b1b55.89af53cebbcd5406.492dbd4d66a54c8b -- b6687db9f5787bfb.16bcf56bc3e8c281.87fff79039fff3de.39ec561f913cd050 -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -- 5c12fde9afff345f.a6dac42d9a8f68f5.abbaf59321556d37.aebff1df8d249533 -- ea69eba6968d4ea9 -- --VCMPPS_256_0x1D(reg) -- before -- a2a451eccba9905d.0086cd296f3e13bf.5584f566a5a0de95.8abd46acc292be10 -- 32bc211dc90599fa.5673f7693f8998ce.6da45014ebeabc08.6b95730ea7951942 -- f6fd56a52b2ca32d.38a7f7953eec80b7.4c86d3a308fa3efa.2c0cf8a7eb6a38f8 -- 4ab2ecf08eaaeba1.84ec4999867387a7.4c78797f965b9f18.a7ee5261ab1ed85f -- ba09fc2a02bcb4a3 -- after -- ffffffff00000000.ffffffffffffffff.ffffffff00000000.ffffffffffffffff -- 32bc211dc90599fa.5673f7693f8998ce.6da45014ebeabc08.6b95730ea7951942 -- f6fd56a52b2ca32d.38a7f7953eec80b7.4c86d3a308fa3efa.2c0cf8a7eb6a38f8 -- 4ab2ecf08eaaeba1.84ec4999867387a7.4c78797f965b9f18.a7ee5261ab1ed85f -- ba09fc2a02bcb4a3 --VCMPPS_256_0x1D(mem) -- before -- 3f2872ed0c518aef.8a29e06a8d0cac03.140f6a62332b68c9.cbc53f15349a1c0e -- 14163096e6e81470.12ac2c80c4dd23ff.c6dcd4da621fe04b.24b81fcf7c42f187 -- 13a1b311ac8d0e52.3e88ce9cd0aa8c40.741f05ef2e5cab56.b29f171a0adf5a30 -- 1993764b794c36c0.6a09c12c4cfd2373.fca4788cb4ec8518.d3c422637afe92b5 -- e1743c156a2ad6c1 -- after -- 3f2872ed0c518aef.8a29e06a8d0cac03.140f6a62332b68c9.cbc53f15349a1c0e -- 14163096e6e81470.12ac2c80c4dd23ff.c6dcd4da621fe04b.24b81fcf7c42f187 -- 0000000000000000.ffffffff00000000.00000000ffffffff.ffffffffffffffff -- 1993764b794c36c0.6a09c12c4cfd2373.fca4788cb4ec8518.d3c422637afe92b5 -- e1743c156a2ad6c1 -- --VCMPPS_256_0x1D(reg) -- before -- 39fa619b73ef6200.03b9f52e693246e6.f27b029bd5652343.3836aa9c0fde29bd -- 38a48e6333da7120.abdeaca7994afbf2.322a8b54076bc95d.05a3150d5b3b5471 -- 38bdbed8467640ca.eed017a324a1110e.86625ac57d9d516d.3fb537cab511c25f -- 9690ed66474f0bad.a85ab30c27424366.4a6e6a59d386f71e.c3398bbf396b2eb3 -- 6bfb8dd80256569b -- after -- 0000000000000000.ffffffff00000000.ffffffff00000000.00000000ffffffff -- 38a48e6333da7120.abdeaca7994afbf2.322a8b54076bc95d.05a3150d5b3b5471 -- 38bdbed8467640ca.eed017a324a1110e.86625ac57d9d516d.3fb537cab511c25f -- 9690ed66474f0bad.a85ab30c27424366.4a6e6a59d386f71e.c3398bbf396b2eb3 -- 6bfb8dd80256569b --VCMPPS_256_0x1D(mem) -- before -- 14c7ba022ddcf340.af6a1779d3f20e73.b547fbd0bd394e27.da9bb77ca6b2f61d -- 9a688d27d50cc4d1.dd97397d84ea84c9.f2646bda0392ee7d.91353d9a91ae8b15 -- d9ac813416ef8378.7d634edff9c3aa5a.397d7f16145ade93.cd88f9203105f1b3 -- ad5d15160d93ee61.eb1a5109cc0abcd3.675eb4700d9cdb96.e9e0e678214466a3 -- 4189000ffef62490 -- after -- 14c7ba022ddcf340.af6a1779d3f20e73.b547fbd0bd394e27.da9bb77ca6b2f61d -- 9a688d27d50cc4d1.dd97397d84ea84c9.f2646bda0392ee7d.91353d9a91ae8b15 -- 0000000000000000.00000000ffffffff.00000000ffffffff.ffffffffffffffff -- ad5d15160d93ee61.eb1a5109cc0abcd3.675eb4700d9cdb96.e9e0e678214466a3 -- 4189000ffef62490 -- --VCMPPS_256_0x1D(reg) -- before -- 30ce435263a76826.f248c2b7d503beba.84074168994af5df.58d384d40965a1b1 -- 14fdacabece46d13.843906058b4cb2ac.a2781769fd0f932b.e8a76d2e25c0ec11 -- 4760358836387101.3ffc5beb4a798466.a2b7d17793e6d063.f3a8ea6a7cb977e2 -- 2744dc54dd2fae9c.ff5d3f552f96f112.e01169fdf85ae832.55a078752a5dff4f -- ea5c91394cb74085 -- after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -- 14fdacabece46d13.843906058b4cb2ac.a2781769fd0f932b.e8a76d2e25c0ec11 -- 4760358836387101.3ffc5beb4a798466.a2b7d17793e6d063.f3a8ea6a7cb977e2 -- 2744dc54dd2fae9c.ff5d3f552f96f112.e01169fdf85ae832.55a078752a5dff4f -- ea5c91394cb74085 --VCMPPS_256_0x1D(mem) -- before -- 8ea8b3a4fed3f6af.0ef59c7b7c556091.a0272d2f55b0b5dc.b8d2dd69c7f71945 -- 1d5059a05bbedcfa.5abe7269af37c58c.fe28a265d9d28bf2.864629269d4a9d47 -- 721fff1b7f83af91.65ed588a13611738.f52a19e3d608307d.a6b847a015deb0e5 -- 6be32200872e2ba2.8dcc4c4a445d9342.61fa0d95695f60ac.74763543cc4090cb -- 4ccaee7b5dfb77a4 -- after -- 8ea8b3a4fed3f6af.0ef59c7b7c556091.a0272d2f55b0b5dc.b8d2dd69c7f71945 -- 1d5059a05bbedcfa.5abe7269af37c58c.fe28a265d9d28bf2.864629269d4a9d47 -- ffffffffffffffff.ffffffff00000000.0000000000000000.ffffffffffffffff -- 6be32200872e2ba2.8dcc4c4a445d9342.61fa0d95695f60ac.74763543cc4090cb -- 4ccaee7b5dfb77a4 -- --VCMPPD_128_0x1E(reg) -- before -- 8a016eb5659ba21d.e3663d3b8fcc0b56.2ca84915dcb97456.1d64fd68ade2d6a9 -- 8a67b15b7fac4de1.b675ccb8b1680cdc.a0ce4b587a00f81f.07346246bf9d50a0 -- a748b4db47bbb39d.bfdc4b630c0eea5e.43874f7db8bf5949.fa35b91dba9d88be -- 3ff0729f5a5311fc.dc673628b9cb6008.722250f23281d381.d2357fd7baed3a2f -- 6afe2f62dc99241e -- after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -- 8a67b15b7fac4de1.b675ccb8b1680cdc.a0ce4b587a00f81f.07346246bf9d50a0 -- a748b4db47bbb39d.bfdc4b630c0eea5e.43874f7db8bf5949.fa35b91dba9d88be -- 3ff0729f5a5311fc.dc673628b9cb6008.722250f23281d381.d2357fd7baed3a2f -- 6afe2f62dc99241e --VCMPPD_128_0x1E(mem) -- before -- a05d45a93cae00b8.adaae7155401a3ac.e8e20af3d7aa2c07.8aea492185d2a473 -- 4e1e3e98f5378b29.4dc40fa8d050a556.be1841b17fb70887.e52a39784c3f06cb -- 520d941b2341809c.7a88e6c46acc52a9.3cd7594cd0ffb0b3.e030196224533634 -- 87f5c51ee3d69d3e.924369d5bf01e74f.3ce9ceb2e38de2b8.d746e64ba89b705a -- 26b99d9f74a1efeb -- after -- a05d45a93cae00b8.adaae7155401a3ac.e8e20af3d7aa2c07.8aea492185d2a473 -- 4e1e3e98f5378b29.4dc40fa8d050a556.be1841b17fb70887.e52a39784c3f06cb -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -- 87f5c51ee3d69d3e.924369d5bf01e74f.3ce9ceb2e38de2b8.d746e64ba89b705a -- 26b99d9f74a1efeb -- --VCMPPD_128_0x1E(reg) -- before -- 29d539ca25f3f090.c8a44c8d50049c3a.f04193476b7ca0f4.9c1b1acdd66e58c2 -- 3de5b638571daff8.f3e4a55487d739bd.efcd608608c8b845.3639bb8bc5accffc -- bc371155a5a967cd.e2824d60a45a32f2.ed35ccfe35726cee.e80f2cd7cb550292 -- 0315448eac2655bb.724abf9bc1994106.44c4d41b8b05f89a.8c68e99d0575afb2 -- 00126ec98d179085 -- after -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -- 3de5b638571daff8.f3e4a55487d739bd.efcd608608c8b845.3639bb8bc5accffc -- bc371155a5a967cd.e2824d60a45a32f2.ed35ccfe35726cee.e80f2cd7cb550292 -- 0315448eac2655bb.724abf9bc1994106.44c4d41b8b05f89a.8c68e99d0575afb2 -- 00126ec98d179085 --VCMPPD_128_0x1E(mem) -- before -- 1ed738478247613a.6ecc4d4d061db570.800877f3fda02325.52c5734aa90d97f6 -- c384c103fe11e0fb.59a82700521cc395.e688f153717c937a.7185a4f5281787ae -- cce587ea1d82c7f5.20f5cf112aaebad9.8195a9a63b384f32.ff50668aa7ae026d -- 13c606e6fca5d353.1eff3fee2a5fd8e6.2efd1cda77e11178.5672b274bf5e45df -- d436861e0eb48bb2 -- after -- 1ed738478247613a.6ecc4d4d061db570.800877f3fda02325.52c5734aa90d97f6 -- c384c103fe11e0fb.59a82700521cc395.e688f153717c937a.7185a4f5281787ae -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -- 13c606e6fca5d353.1eff3fee2a5fd8e6.2efd1cda77e11178.5672b274bf5e45df -- d436861e0eb48bb2 -- --VCMPPD_128_0x1E(reg) -- before -- d3eaddf6303b118f.75f3b8e4b687c042.b1117502efbc5668.c78ac5da40829579 -- b0d8b367c07f1325.ce371bd1683349ed.34796cb91450730c.29092092b3279961 -- c84d04dd5a0dcd1e.fb5faa982eb52b81.0381207f36a8697e.3046a9eeebdcd75b -- 7595ccc59b707a27.d638e1252219222a.7a768ec0f04f756a.b90ddcdb04ae0c94 -- 9e2936431ba8f438 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.0000000000000000 -- b0d8b367c07f1325.ce371bd1683349ed.34796cb91450730c.29092092b3279961 -- c84d04dd5a0dcd1e.fb5faa982eb52b81.0381207f36a8697e.3046a9eeebdcd75b -- 7595ccc59b707a27.d638e1252219222a.7a768ec0f04f756a.b90ddcdb04ae0c94 -- 9e2936431ba8f438 --VCMPPD_128_0x1E(mem) -- before -- bc6832134cd74a72.14fc08891f3457eb.3c8c3c63636ce913.f4a4b0e8dfd1d37a -- ef944c38b246cb6e.01ceb39681e6a017.092837400aba3d69.cf5784649ebabe5d -- 137a009d69013359.9856c9595d119056.19d74fa7350dda57.66db059eca9773bd -- 04e6cb2d8e153d5f.36e2473c50416455.4867ff8500737c0a.157b2f04fef32e47 -- 3784ff00d75b2ba6 -- after -- bc6832134cd74a72.14fc08891f3457eb.3c8c3c63636ce913.f4a4b0e8dfd1d37a -- ef944c38b246cb6e.01ceb39681e6a017.092837400aba3d69.cf5784649ebabe5d -- 0000000000000000.0000000000000000.0000000000000000.ffffffffffffffff -- 04e6cb2d8e153d5f.36e2473c50416455.4867ff8500737c0a.157b2f04fef32e47 -- 3784ff00d75b2ba6 -- --VCMPPD_256_0x1E(reg) -- before -- 2a436f00f05aa587.9ea428d63c8da7ac.35bc27adf50358c0.72a2c3c486f7deae -- 48027d6fe57cd996.bd80938390752a6b.f2316717e9e2a842.73561851e4a6bd6e -- ef0d25b9534e037e.3d458820a5da85c8.c98d02e5c76a8f88.274d7819358bd577 -- 79b2614ad65b5eeb.fac1839998c772f0.161cf4852c284a3d.6a54610695b2e2f4 -- 18364e0621289f12 -- after -- ffffffffffffffff.0000000000000000.0000000000000000.ffffffffffffffff -- 48027d6fe57cd996.bd80938390752a6b.f2316717e9e2a842.73561851e4a6bd6e -- ef0d25b9534e037e.3d458820a5da85c8.c98d02e5c76a8f88.274d7819358bd577 -- 79b2614ad65b5eeb.fac1839998c772f0.161cf4852c284a3d.6a54610695b2e2f4 -- 18364e0621289f12 --VCMPPD_256_0x1E(mem) -- before -- 0cc1bb04f4f8c9fd.443c2e8e092f278b.cfbe01da8448af0f.352a3a62b3a7150e -- 24bf25eb2b2e1ce0.aaf689f188579a08.9a097dcf8669f550.8202cee9f9742ca7 -- 3bfe07a9e2d753e8.092d6ddff05ef30e.366e7365b93703e0.59f1ae849919cab3 -- 2d48dc2934fe2b40.bb2dd7c4dcd06d4a.7fb95f8639be93eb.1643d6a030252cdf -- 144440a959218dd6 -- after -- 0cc1bb04f4f8c9fd.443c2e8e092f278b.cfbe01da8448af0f.352a3a62b3a7150e -- 24bf25eb2b2e1ce0.aaf689f188579a08.9a097dcf8669f550.8202cee9f9742ca7 -- ffffffffffffffff.0000000000000000.ffffffffffffffff.0000000000000000 -- 2d48dc2934fe2b40.bb2dd7c4dcd06d4a.7fb95f8639be93eb.1643d6a030252cdf -- 144440a959218dd6 -- --VCMPPD_256_0x1E(reg) -- before -- b140e90cb09b2b45.d56a23573daf6015.1d42c10de93a4568.50b5be202409629c -- 4883ce34d21e40d7.113055201af7ad92.8cb82924b227b713.87300a1d93242c20 -- 3558ea8c5b37093a.bc65f06ee6e1d0e4.62db0a77d423fef8.fff4c16ba41baca2 -- d30d3982e670c117.b1d76e2ebe798337.fcf66071eabb57c2.93ce5ff573fb9f4f -- 218a5ea71acfc152 -- after -- ffffffffffffffff.ffffffffffffffff.0000000000000000.0000000000000000 -- 4883ce34d21e40d7.113055201af7ad92.8cb82924b227b713.87300a1d93242c20 -- 3558ea8c5b37093a.bc65f06ee6e1d0e4.62db0a77d423fef8.fff4c16ba41baca2 -- d30d3982e670c117.b1d76e2ebe798337.fcf66071eabb57c2.93ce5ff573fb9f4f -- 218a5ea71acfc152 --VCMPPD_256_0x1E(mem) -- before -- 84f43c6db8a3ced9.80ecb8810f58a61d.ce504d4dbdcc82b6.b656277e917afe1e -- 97d773336784810d.974262f57378f2f6.ed9e09b5ffe58b8e.ed475c0964ec2fb8 -- 380182e5437d971d.735b324aae5ee14e.ec8b1c54a2d158eb.fb15f981009e253b -- 413ce270699acc32.728327ec5a95b1d2.a5e40415bf9aa6f8.3d0cfc4f001b1d54 -- 0f7861e000ef53ae -- after -- 84f43c6db8a3ced9.80ecb8810f58a61d.ce504d4dbdcc82b6.b656277e917afe1e -- 97d773336784810d.974262f57378f2f6.ed9e09b5ffe58b8e.ed475c0964ec2fb8 -- 0000000000000000.0000000000000000.0000000000000000.0000000000000000 -- 413ce270699acc32.728327ec5a95b1d2.a5e40415bf9aa6f8.3d0cfc4f001b1d54 -- 0f7861e000ef53ae -- --VCMPPD_256_0x1E(reg) -- before -- cda422a09da703f6.905510bef4e8db7b.ef053a4716aa9c2e.f6743ce3744f30e2 -- d3de3dfb73ce68d8.ff1889bc01728122.452f68c87b28df0d.b90940acddf9b4d4 -- 7d70ac5e1df0bfff.6b51c857ab457a54.d24baed9289bb51c.cc6d8c5b15a6ecfb -- 27a76e34379a4318.b1cc497a0f6c823c.f0a607e8b6905c07.096e9ddd38619482 -- 4dd6ed1c63366a96 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- d3de3dfb73ce68d8.ff1889bc01728122.452f68c87b28df0d.b90940acddf9b4d4 -- 7d70ac5e1df0bfff.6b51c857ab457a54.d24baed9289bb51c.cc6d8c5b15a6ecfb -- 27a76e34379a4318.b1cc497a0f6c823c.f0a607e8b6905c07.096e9ddd38619482 -- 4dd6ed1c63366a96 --VCMPPD_256_0x1E(mem) -- before -- 7572fa05b1322863.2dcf7ce85e5732ce.ab54891048f35407.fd8c6f5fc3920e79 -- 5b0d3f853f608b14.eb34d3e82eb4c6ce.36b7020773e6ade0.5349e3aceb2d071e -- dc75398629cd4fd6.bd21709f413c3cc4.2ebf324aab5249f4.4f295d3ac9ee85a4 -- d47563f689842fd4.fee44e79367bcf5b.703994c50c42e36f.4e77db75fa5fc2b4 -- aa8058c9190ffbfd -- after -- 7572fa05b1322863.2dcf7ce85e5732ce.ab54891048f35407.fd8c6f5fc3920e79 -- 5b0d3f853f608b14.eb34d3e82eb4c6ce.36b7020773e6ade0.5349e3aceb2d071e -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- d47563f689842fd4.fee44e79367bcf5b.703994c50c42e36f.4e77db75fa5fc2b4 -- aa8058c9190ffbfd -- --VCMPPS_128_0x1E(reg) -- before -- c091d1a2c2876b29.20d838bf7e91e83b.0cc769e2a7fdbc40.d6f1a464b3c3397c -- edf4406c925650e5.9a6b36cf21013637.4217be46304f3f1e.3db3df14bce00448 -- 8bf5a3932505e4dc.1ffad91191ded4f3.fc2047116efc94a2.814abfbf42a503fe -- f7e2f584162263bb.8b519b71e7377f9c.952e02affc91f677.7e84c252611ff0cb -- 102b63ba365889db -- after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffff00000000 -- edf4406c925650e5.9a6b36cf21013637.4217be46304f3f1e.3db3df14bce00448 -- 8bf5a3932505e4dc.1ffad91191ded4f3.fc2047116efc94a2.814abfbf42a503fe -- f7e2f584162263bb.8b519b71e7377f9c.952e02affc91f677.7e84c252611ff0cb -- 102b63ba365889db --VCMPPS_128_0x1E(mem) -- before -- 130c1fe2dd5f8759.8d0632a901380b2d.ba3cfadb4215f35d.6b8cea8d7699a24b -- 63f370b5703da972.a9ac567083d316df.8886713bbb86ec63.d988fb1579a0d4c7 -- dcacd4210e00a951.a7215e433780c17d.d1fd7c7d709625da.3a6c32b5a132c89a -- 5a03c611d1b44423.e4b14590baca48b2.716b978e7d4f5bed.ec858ad889dcb96e -- 4a1fffeace2ae4ef -- after -- 130c1fe2dd5f8759.8d0632a901380b2d.ba3cfadb4215f35d.6b8cea8d7699a24b -- 63f370b5703da972.a9ac567083d316df.8886713bbb86ec63.d988fb1579a0d4c7 -- 0000000000000000.0000000000000000.ffffffff00000000.00000000ffffffff -- 5a03c611d1b44423.e4b14590baca48b2.716b978e7d4f5bed.ec858ad889dcb96e -- 4a1fffeace2ae4ef -- --VCMPPS_128_0x1E(reg) -- before -- af868d560ba685ca.b9c3c271d5633614.baa807c2a73de62b.449d3f58fdbf4ac9 -- 7906308adcded7ab.d5ba452d371b3a4f.8652a0459b66d893.265fefc90cf1ae99 -- 02eae5f1de5d173d.8ab2c93112e70d01.a4fb0c8531d05a97.f37d23cbc7f2428a -- a780a6f8acb0812d.b478cc6a82d46b55.70ee48ee0608a7e3.86c2574c4acdc3c8 -- bdfc0837b08eed7e -- after -- 0000000000000000.0000000000000000.ffffffff00000000.ffffffffffffffff -- 7906308adcded7ab.d5ba452d371b3a4f.8652a0459b66d893.265fefc90cf1ae99 -- 02eae5f1de5d173d.8ab2c93112e70d01.a4fb0c8531d05a97.f37d23cbc7f2428a -- a780a6f8acb0812d.b478cc6a82d46b55.70ee48ee0608a7e3.86c2574c4acdc3c8 -- bdfc0837b08eed7e --VCMPPS_128_0x1E(mem) -- before -- 73f5b07815427bd9.c5127109e3625126.2fd8c9c2a5ed0f78.45794fecb598fd22 -- 847acdfb96f42a04.b6ed42911fffc2d6.d69e3d26943eb796.81e61debdb0e9601 -- cb57daac4eb0b62c.d85d13fdfa1411e6.8795a2836dd41dda.7f82ae5813f6ae2b -- 265854775a83da7d.85aee2b7132c7a04.1d8b76c44cbafd70.9b99ff9df9db834d -- 31760b282a494f12 -- after -- 73f5b07815427bd9.c5127109e3625126.2fd8c9c2a5ed0f78.45794fecb598fd22 -- 847acdfb96f42a04.b6ed42911fffc2d6.d69e3d26943eb796.81e61debdb0e9601 -- 0000000000000000.0000000000000000.00000000ffffffff.0000000000000000 -- 265854775a83da7d.85aee2b7132c7a04.1d8b76c44cbafd70.9b99ff9df9db834d -- 31760b282a494f12 -- --VCMPPS_128_0x1E(reg) -- before -- 9d67ce6442cc4f28.7049b548d5785422.1a2baa2d04d338dc.734a34d44cfd1586 -- 3ab644bcdcf1be38.84f57b0cdc9cde47.f32267ca6996891a.679f58a189a71f46 -- 66b06a9e9444d9f1.402a21ad8af9341a.6ddd15f9de00a669.d4565e1620c6d8dc -- 7ca13a75074fdcfd.7fb22319fc9d14c5.e2a9b128019dce75.953bc31f2d66fb75 -- 881902a8ca92463d -- after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -- 3ab644bcdcf1be38.84f57b0cdc9cde47.f32267ca6996891a.679f58a189a71f46 -- 66b06a9e9444d9f1.402a21ad8af9341a.6ddd15f9de00a669.d4565e1620c6d8dc -- 7ca13a75074fdcfd.7fb22319fc9d14c5.e2a9b128019dce75.953bc31f2d66fb75 -- 881902a8ca92463d --VCMPPS_128_0x1E(mem) -- before -- 87be979d1656735f.d7d5b2add0a00308.1c5afe3a4d943874.afd235c26bfa3bec -- 70f4feeb2bbe3e08.d598cdb28cc289bf.f5ee2dfe99e95d54.30a49f33baa22a77 -- 1d88b47c25d76564.d03687f1d742acce.e43a2b50fda83e91.c16bebe88a22d7c5 -- 6b46333e21aca29e.26faddd44baba5e0.c609771c95dd9956.be72134b76047e80 -- 830715c91ad65a54 -- after -- 87be979d1656735f.d7d5b2add0a00308.1c5afe3a4d943874.afd235c26bfa3bec -- 70f4feeb2bbe3e08.d598cdb28cc289bf.f5ee2dfe99e95d54.30a49f33baa22a77 -- 0000000000000000.0000000000000000.0000000000000000.ffffffff00000000 -- 6b46333e21aca29e.26faddd44baba5e0.c609771c95dd9956.be72134b76047e80 -- 830715c91ad65a54 -- --VCMPPS_256_0x1E(reg) -- before -- 6c74eccf1324a8ef.37faf91b3a49b2e2.3231cac88789b3a2.78298a4e7c9528d0 -- d50694c7fd79a4fa.5b7081018dbb505e.4f274a3a246910bf.d464e1d2cedba72a -- 1a09091f73618924.b57348db350d3a3b.da285995c0d5f9e5.b787f994a8bcd491 -- 97c8474211689417.1fd1c8944e4c2aa8.3080f344f75caabd.fe5e4d8126426931 -- 83b55983637c2335 -- after -- 0000000000000000.ffffffff00000000.ffffffffffffffff.0000000000000000 -- d50694c7fd79a4fa.5b7081018dbb505e.4f274a3a246910bf.d464e1d2cedba72a -- 1a09091f73618924.b57348db350d3a3b.da285995c0d5f9e5.b787f994a8bcd491 -- 97c8474211689417.1fd1c8944e4c2aa8.3080f344f75caabd.fe5e4d8126426931 -- 83b55983637c2335 --VCMPPS_256_0x1E(mem) -- before -- 23589a887b73beca.a8914b9c741b017f.76547f1af583dccf.ab7b15b564875ef6 -- ba128a7a8b35f51c.a9ae109937050b09.96c9e85846be0edd.a964ba53a4e45339 -- 25b1a747aecd8556.f66d92a5f7b3f061.5bfc803b5c0a7afd.8489de8a52ffc235 -- 3eff6cda01482aa4.ea18ce2c4fafea32.a2b9c1ad5471dd5c.99347dc60a62ea94 -- 44b29473699b0503 -- after -- 23589a887b73beca.a8914b9c741b017f.76547f1af583dccf.ab7b15b564875ef6 -- ba128a7a8b35f51c.a9ae109937050b09.96c9e85846be0edd.a964ba53a4e45339 -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffff00000000 -- 3eff6cda01482aa4.ea18ce2c4fafea32.a2b9c1ad5471dd5c.99347dc60a62ea94 -- 44b29473699b0503 -- --VCMPPS_256_0x1E(reg) -- before -- e24f1dfe0b36502d.e2c9561f9fb19f33.e3fcbe9adc883529.45cb299b4902f325 -- cd5616d18bbd07bf.eddbdf02a514a12f.3c65605b39c70ff2.210033f257c67785 -- 62157a5985bf6664.3b00856f2e7decc4.509eafdc03fab238.12225b9c9bcb26a8 -- fdd6460396c5a8c9.a806c35256f93c1d.7df5a887d5ac5ba8.f4fe1d87301cbcb9 -- a360f69d33c6f4e5 -- after -- 0000000000000000.0000000000000000.00000000ffffffff.ffffffffffffffff -- cd5616d18bbd07bf.eddbdf02a514a12f.3c65605b39c70ff2.210033f257c67785 -- 62157a5985bf6664.3b00856f2e7decc4.509eafdc03fab238.12225b9c9bcb26a8 -- fdd6460396c5a8c9.a806c35256f93c1d.7df5a887d5ac5ba8.f4fe1d87301cbcb9 -- a360f69d33c6f4e5 --VCMPPS_256_0x1E(mem) -- before -- fb1460ccbfd48c57.fae7743a595d0a9a.10b715973a944c66.1eb445ca4c6a45ed -- d8e6d9fff1523d3c.b59202696b12c782.4fe1f72af658d9cc.8e28841003bfadb4 -- 16a1dd22e54dc6c0.8a24ebfe67701d2e.414ee6f8a5539f7b.2b9d60c49637cfa9 -- 9113e621b5d0e10e.d5e82c64ea044649.c2cb5deb63915a9f.4f5fd554a25fe777 -- 58badf2bc3c231ca -- after -- fb1460ccbfd48c57.fae7743a595d0a9a.10b715973a944c66.1eb445ca4c6a45ed -- d8e6d9fff1523d3c.b59202696b12c782.4fe1f72af658d9cc.8e28841003bfadb4 -- ffffffff00000000.ffffffffffffffff.ffffffff00000000.0000000000000000 -- 9113e621b5d0e10e.d5e82c64ea044649.c2cb5deb63915a9f.4f5fd554a25fe777 -- 58badf2bc3c231ca -- --VCMPPS_256_0x1E(reg) -- before -- a0f97bb593ece850.240672e87fe74c52.f22cbf078f597f80.ae23d8f14d1cc562 -- 856aa45eb16949b2.ad47fc645f9fc0ba.3d3ba253f3fb037f.e124d3f57f029df3 -- 61575693b7c68f9f.07a2007f7003fc70.1260d0b4b1770ff1.3698cbe3144e9e7c -- 920d8dbe418ff7c1.0ee3fa26cf1fbaa0.cde845976658df82.8b4d3aa6280d832a -- bb0d9e2cd84a0928 -- after -- 00000000ffffffff.0000000000000000.ffffffff00000000.00000000ffffffff -- 856aa45eb16949b2.ad47fc645f9fc0ba.3d3ba253f3fb037f.e124d3f57f029df3 -- 61575693b7c68f9f.07a2007f7003fc70.1260d0b4b1770ff1.3698cbe3144e9e7c -- 920d8dbe418ff7c1.0ee3fa26cf1fbaa0.cde845976658df82.8b4d3aa6280d832a -- bb0d9e2cd84a0928 --VCMPPS_256_0x1E(mem) -- before -- a2a572613f12eca3.72d8454dec4ebdc5.9ed566469700b777.ca1ffd66ad2bafe0 -- 1be1332f7a6fe7c7.5e047baa53911d56.9246c1cae4b1af21.6551f58f227bbab5 -- 048c5b83a46fb8bf.b2dc2a4313e45321.c800869dd33e5dc9.faca277c62d43dad -- 37746849da1e19b8.cbae4e82c7d19ad1.1bd031ad80b47e9c.e4d5919b09c27475 -- 81bf2f57b2d29bb9 -- after -- a2a572613f12eca3.72d8454dec4ebdc5.9ed566469700b777.ca1ffd66ad2bafe0 -- 1be1332f7a6fe7c7.5e047baa53911d56.9246c1cae4b1af21.6551f58f227bbab5 -- ffffffffffffffff.00000000ffffffff.ffffffff00000000.ffffffffffffffff -- 37746849da1e19b8.cbae4e82c7d19ad1.1bd031ad80b47e9c.e4d5919b09c27475 -- 81bf2f57b2d29bb9 -- --VCMPPD_128_0x1F(reg) -- before -- 2cd5fb1cf98fed25.9263d56e3786c6dd.03c4e3d50ce62f13.66823fe5061ecec6 -- 4061f3567b86a763.f0271edcd8b67d5b.b76be6a77daf4d93.87e22a3181880972 -- 1bb01271d3420522.2c8ac081d8b7f85d.43ef5264b7b632fc.58bb707d0effeacd -- 180d54d99e4f420c.245935485397f410.039c2378558a18fb.b7db8cb5c88e2e02 -- 7e0cfbc6cc42913e -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 4061f3567b86a763.f0271edcd8b67d5b.b76be6a77daf4d93.87e22a3181880972 -- 1bb01271d3420522.2c8ac081d8b7f85d.43ef5264b7b632fc.58bb707d0effeacd -- 180d54d99e4f420c.245935485397f410.039c2378558a18fb.b7db8cb5c88e2e02 -- 7e0cfbc6cc42913e --VCMPPD_128_0x1F(mem) -- before -- 8b1b379a3626ceac.92c6b5fa773a9bce.b25ffb1d67612ca0.53bd554ff3b43c3b -- b8d4be1f2046a279.e7253240fb8e4c13.b36a8dec2d215e38.90a0e4562ec2d969 -- e2030b3fa9aec9d1.7178c518c5d79188.044468a1c3e44405.148fcdf7a23f2c31 -- e6749ae8ea6bffdf.8e096cec72a1a5d8.7fbb062844b59a33.3cd80ba0eab7713e -- 64c59abba2b7e43d -- after -- 8b1b379a3626ceac.92c6b5fa773a9bce.b25ffb1d67612ca0.53bd554ff3b43c3b -- b8d4be1f2046a279.e7253240fb8e4c13.b36a8dec2d215e38.90a0e4562ec2d969 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- e6749ae8ea6bffdf.8e096cec72a1a5d8.7fbb062844b59a33.3cd80ba0eab7713e -- 64c59abba2b7e43d -- --VCMPPD_128_0x1F(reg) -- before -- e7a276b667cac0d9.9ef3e7050188ffd0.9825232a9d79c5b1.0299e56dcda11eed -- 23bd9cfcd47d42bf.e74b6f820a1286d0.ed17e43de3eb2dbc.67ab805c7ab38a5f -- 736106f8865aa69b.9e49ad4a2013500a.e72dad90df8118a7.8bbd53e266f79bb7 -- 33d9b21819f02818.9db91d4c609a18aa.e3b278912ec9c31e.4a9adbe9ad790d1e -- 8110925f6c469bc3 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 23bd9cfcd47d42bf.e74b6f820a1286d0.ed17e43de3eb2dbc.67ab805c7ab38a5f -- 736106f8865aa69b.9e49ad4a2013500a.e72dad90df8118a7.8bbd53e266f79bb7 -- 33d9b21819f02818.9db91d4c609a18aa.e3b278912ec9c31e.4a9adbe9ad790d1e -- 8110925f6c469bc3 --VCMPPD_128_0x1F(mem) -- before -- 0ae9f62fbe6902d0.bf729bc727c803e3.c1673b71e5b09cdd.3ef143ab6b4f6acd -- c2f28244c0effe71.7379be724f7074a7.e61f83a6cb6395cf.52370a4a329d495f -- 85f7b28c8de34ad4.aa3715832a73b611.e8ad72d72fbec2ac.7cd0c7db20419b80 -- 2fc403f24251a322.c2fb9e67575e07cc.a3dc83f12dcedd9f.180878c8d1c79dde -- 832b187ee0b98b23 -- after -- 0ae9f62fbe6902d0.bf729bc727c803e3.c1673b71e5b09cdd.3ef143ab6b4f6acd -- c2f28244c0effe71.7379be724f7074a7.e61f83a6cb6395cf.52370a4a329d495f -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 2fc403f24251a322.c2fb9e67575e07cc.a3dc83f12dcedd9f.180878c8d1c79dde -- 832b187ee0b98b23 -- --VCMPPD_128_0x1F(reg) -- before -- 1784a36ae9a5a0fb.9c25f062fa46c58a.1610548b6fbba186.f37932dee09ea3d4 -- 316115f689171a13.a8e5f5c8d1cd6c36.01c134591019c1e8.b450fb8c643ad079 -- 2d0c6b905b9a3317.2fd28e11e5f25352.e15c383fd601a2a1.c22d5be5d6af20b7 -- 67d2a0a3fcba27b2.0db637274fc1370c.112b5ea75c01825a.f9dccdd751084ebd -- 3529cd4df25117b5 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 316115f689171a13.a8e5f5c8d1cd6c36.01c134591019c1e8.b450fb8c643ad079 -- 2d0c6b905b9a3317.2fd28e11e5f25352.e15c383fd601a2a1.c22d5be5d6af20b7 -- 67d2a0a3fcba27b2.0db637274fc1370c.112b5ea75c01825a.f9dccdd751084ebd -- 3529cd4df25117b5 --VCMPPD_128_0x1F(mem) -- before -- 52dfd733d49637cb.3bffb09a07033491.1e5e6df72d47d48d.ec7ba1ff3fa49bc2 -- 2ccc677514e4692c.05df97e31902945f.3e96ab6e9b90e604.d098fdb21a772983 -- 9fbafaffcd476a04.21bd52e9cd4283c9.492a6d77b4a6289b.17cd6e2c89056a4a -- 87760bbe1cc9f67e.ebe7db19c04f3f7b.1be62ffd9497577e.1f68f1d929da98c2 -- 42b381259583f098 -- after -- 52dfd733d49637cb.3bffb09a07033491.1e5e6df72d47d48d.ec7ba1ff3fa49bc2 -- 2ccc677514e4692c.05df97e31902945f.3e96ab6e9b90e604.d098fdb21a772983 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 87760bbe1cc9f67e.ebe7db19c04f3f7b.1be62ffd9497577e.1f68f1d929da98c2 -- 42b381259583f098 -- --VCMPPD_256_0x1F(reg) -- before -- defc1a7d6a8bad77.c0cc169c1c78c8c7.bfa730dd8db60220.8f956dee586f2fda -- 4d8db84b447e0d0c.25889787ea609e0b.f94a4ca2d1020964.8304a4351b386bdb -- ecb357fcbde94a03.94750b69a18b3275.f51c2cd427c090f5.d2ff4fbefa00c8ac -- 18b9f4fd7457a007.e861ed305d084032.0f69cae02b7bd27d.5852ea7510d3027a -- f0c9f2467abbd471 -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 4d8db84b447e0d0c.25889787ea609e0b.f94a4ca2d1020964.8304a4351b386bdb -- ecb357fcbde94a03.94750b69a18b3275.f51c2cd427c090f5.d2ff4fbefa00c8ac -- 18b9f4fd7457a007.e861ed305d084032.0f69cae02b7bd27d.5852ea7510d3027a -- f0c9f2467abbd471 --VCMPPD_256_0x1F(mem) -- before -- 7830e11e53c6fcbc.2bed8ab902544dc5.fc16b9c63be0866d.a27d24317abf0ca8 -- ca5335e7b8003488.8299159b066d8be9.ae61eb195721be53.0ca33532b0187a23 -- c4fd698ec4743800.790b9111192d971e.d90eff14ccd6a510.a829f9516813589a -- 41fbf900942ec651.6c8dfb86d920ad10.58e972a3b60bf6cf.d2596df93e3be1b9 -- e5808b96cf1d522a -- after -- 7830e11e53c6fcbc.2bed8ab902544dc5.fc16b9c63be0866d.a27d24317abf0ca8 -- ca5335e7b8003488.8299159b066d8be9.ae61eb195721be53.0ca33532b0187a23 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 41fbf900942ec651.6c8dfb86d920ad10.58e972a3b60bf6cf.d2596df93e3be1b9 -- e5808b96cf1d522a -- --VCMPPD_256_0x1F(reg) -- before -- 3fea5194b644e69c.1c196228433a98a6.b86c4e66e2d3086c.09bdbfb232cd6fbc -- 3ae3ba5f903cdbb9.33231ef1eea56b2d.b7f4861dcfd1e5de.c658622e5b27ca05 -- 34b6c363f8926b2e.60e5ab49b07afa0f.c6709f173da68012.6d84d7014e25c3d4 -- 88b1660d8bd0d3a6.812a841ba5c5037a.412e95c1c7df14b3.d80e9a1826d41855 -- e5c22860003f83b5 -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 3ae3ba5f903cdbb9.33231ef1eea56b2d.b7f4861dcfd1e5de.c658622e5b27ca05 -- 34b6c363f8926b2e.60e5ab49b07afa0f.c6709f173da68012.6d84d7014e25c3d4 -- 88b1660d8bd0d3a6.812a841ba5c5037a.412e95c1c7df14b3.d80e9a1826d41855 -- e5c22860003f83b5 --VCMPPD_256_0x1F(mem) -- before -- 6e6cfcc3f773c120.911ea1c7e4854ece.70c02653ea93409a.847865850907de6d -- 50d8922f287b8dc1.ad4a6fffa03a1a51.0a710bdd9bef6d9b.eb9b0ad0a0ab1aed -- 68d2678fae63a5c5.3681cc1f5a7d71dc.2c0ab1a6d3e648a8.d2e3800f285504df -- 9025f5cfa637c357.890fb595afda8f1b.b0579398ae838bee.959cc3ad3c94d7ef -- 9012d01578f1d0c8 -- after -- 6e6cfcc3f773c120.911ea1c7e4854ece.70c02653ea93409a.847865850907de6d -- 50d8922f287b8dc1.ad4a6fffa03a1a51.0a710bdd9bef6d9b.eb9b0ad0a0ab1aed -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 9025f5cfa637c357.890fb595afda8f1b.b0579398ae838bee.959cc3ad3c94d7ef -- 9012d01578f1d0c8 -- --VCMPPD_256_0x1F(reg) -- before -- 1f91a1b579fa2b16.a59ebadb2b04a3a4.033f24cc3adbb2b9.73242da049d2f398 -- 9d6434f8da3a2486.8309319f59d503d8.fe5f1730980e1463.513dfbabbfdf3cd3 -- 68d8854a383df6c4.0732d6074db79d1e.d8b9892d64fff2c5.276d7aa32db721ca -- db398e172e90de7b.0be526ff23b52ea3.eb9a762f3a38888a.cf822576ae655faa -- 2646780f5ff6b29f -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 9d6434f8da3a2486.8309319f59d503d8.fe5f1730980e1463.513dfbabbfdf3cd3 -- 68d8854a383df6c4.0732d6074db79d1e.d8b9892d64fff2c5.276d7aa32db721ca -- db398e172e90de7b.0be526ff23b52ea3.eb9a762f3a38888a.cf822576ae655faa -- 2646780f5ff6b29f --VCMPPD_256_0x1F(mem) -- before -- 0886ef5a5b75d5d4.52d34dcc59be1858.6cee9b73f6db7292.944edba2b747115e -- 510e0743bfee8576.28f2bcd35454df07.0618b350e2362418.2f21b3f277b8caef -- dda93bb6a66e7eb0.bbe2d999bcdd7033.b530e98004d00161.185ffa8c1515efe6 -- 8825079f2d007caf.66eea08b2ce50789.5502baf178b8c598.ac54acda2decbbf2 -- 454bc54a5cc96bbd -- after -- 0886ef5a5b75d5d4.52d34dcc59be1858.6cee9b73f6db7292.944edba2b747115e -- 510e0743bfee8576.28f2bcd35454df07.0618b350e2362418.2f21b3f277b8caef -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 8825079f2d007caf.66eea08b2ce50789.5502baf178b8c598.ac54acda2decbbf2 -- 454bc54a5cc96bbd -- --VCMPPS_128_0x1F(reg) -- before -- 409142463d363bf4.2e4ce7ea6fb03a9f.84630b1440f9e0b4.c25aa08e59f72bea -- f9721e3c6dc16742.abec5784888b75ab.738e189f95a43661.d8041942c39bf082 -- cc3a559787f62a54.dbcfd457959ce900.8db9c29ac772463b.73cca0fbd3b0d08d -- 1535e3c32860c1d5.9ac2d951b2ef52c9.3031057071ef4cf0.6f7db1a4a4408737 -- a8e5c9295359d0ab -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- f9721e3c6dc16742.abec5784888b75ab.738e189f95a43661.d8041942c39bf082 -- cc3a559787f62a54.dbcfd457959ce900.8db9c29ac772463b.73cca0fbd3b0d08d -- 1535e3c32860c1d5.9ac2d951b2ef52c9.3031057071ef4cf0.6f7db1a4a4408737 -- a8e5c9295359d0ab --VCMPPS_128_0x1F(mem) -- before -- face6277fb066916.30afc42ceb8b6872.c490e25cfa906b33.b741dd8d2fa88329 -- 4005fa78b8540ba3.79f3f53e6d035bd6.35076b66898cf169.7d37475d9e292894 -- 58560c19a84e757f.4c4e71654955d5af.c8f2f05a7cefa099.df5d3e4c5afc77dd -- 1d8d1547e40061d6.050d340d1b0c13a6.5b1cee24eec333ec.3a00bec6feafacb0 -- e86cc33826cd02b8 -- after -- face6277fb066916.30afc42ceb8b6872.c490e25cfa906b33.b741dd8d2fa88329 -- 4005fa78b8540ba3.79f3f53e6d035bd6.35076b66898cf169.7d37475d9e292894 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 1d8d1547e40061d6.050d340d1b0c13a6.5b1cee24eec333ec.3a00bec6feafacb0 -- e86cc33826cd02b8 -- --VCMPPS_128_0x1F(reg) -- before -- 47ed490c6fe3b6a2.6b758fec8a778cd3.007a3aa381b5506a.c952e0b0fc166791 -- b1cf4db0747c0419.1ddcf8f6b6beb2a3.98e1809114dacaa5.ee6042eac2f4f8b2 -- 835eca8ed22427ca.118ccb5083e28e71.2b900145720abb03.a51290be5a68a17b -- 19e5bc1424685c60.225284e50deddd6a.14d2b92a37ce6031.cc344718e37e2019 -- 3e91e2e576422fb8 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- b1cf4db0747c0419.1ddcf8f6b6beb2a3.98e1809114dacaa5.ee6042eac2f4f8b2 -- 835eca8ed22427ca.118ccb5083e28e71.2b900145720abb03.a51290be5a68a17b -- 19e5bc1424685c60.225284e50deddd6a.14d2b92a37ce6031.cc344718e37e2019 -- 3e91e2e576422fb8 --VCMPPS_128_0x1F(mem) -- before -- d6f6dd0f31c18a83.d0b11fad07d3df88.2bfaa0a371ed5bb9.aff2a4abfeb4f4db -- 7230b4843006efa7.020ff0c516f2ecee.0a509975cbeec48b.573dbe366347b5ac -- ec09e32e8e1d1850.0c492ac8ed4fbe3d.991fed4736fad30c.6aff04360314dd51 -- 224ee7fb6813c2a9.4aabc9222a789222.b6351706ce204567.4384711779a6a876 -- 3d180145628954c6 -- after -- d6f6dd0f31c18a83.d0b11fad07d3df88.2bfaa0a371ed5bb9.aff2a4abfeb4f4db -- 7230b4843006efa7.020ff0c516f2ecee.0a509975cbeec48b.573dbe366347b5ac -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 224ee7fb6813c2a9.4aabc9222a789222.b6351706ce204567.4384711779a6a876 -- 3d180145628954c6 -- --VCMPPS_128_0x1F(reg) -- before -- b606b02d59491bee.eeca3bd6d9f3a8de.1883c93f66f9a448.3b5c939cb069d6c9 -- 089c7b39fb733a99.2e4b5babfdca881d.d21c268b3f5c2f5c.0661def6f7e3415e -- 91245dd6e393ec74.bc9bc366f1a21c90.d4c1dd735130710a.f1107301c0994351 -- abeb5271ae336e2a.7588f0f3d18a2063.7abfe96137fea4fd.da35cda7269798ce -- 9b9c6bd646eafc03 -- after -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 089c7b39fb733a99.2e4b5babfdca881d.d21c268b3f5c2f5c.0661def6f7e3415e -- 91245dd6e393ec74.bc9bc366f1a21c90.d4c1dd735130710a.f1107301c0994351 -- abeb5271ae336e2a.7588f0f3d18a2063.7abfe96137fea4fd.da35cda7269798ce -- 9b9c6bd646eafc03 --VCMPPS_128_0x1F(mem) -- before -- 1111c6793b9d2a1a.b43d5675f7e1fc68.36dc5d3eb88b52c3.206246c38d5404e2 -- 185f5c7c21bddf3f.0666654d5b28d2da.d9648633c2b36cdc.22f6f004f0bdcf64 -- 8d53a7cb1655d79f.ffb27c6775952c2b.3bece7bf0c0d2bd9.dcc7e48ffbc53f30 -- 4ab925523371cd66.f96c962ee2b34508.383ffcccb1a64be7.aa201dd24bf991f2 -- e84f97387be40055 -- after -- 1111c6793b9d2a1a.b43d5675f7e1fc68.36dc5d3eb88b52c3.206246c38d5404e2 -- 185f5c7c21bddf3f.0666654d5b28d2da.d9648633c2b36cdc.22f6f004f0bdcf64 -- 0000000000000000.0000000000000000.ffffffffffffffff.ffffffffffffffff -- 4ab925523371cd66.f96c962ee2b34508.383ffcccb1a64be7.aa201dd24bf991f2 -- e84f97387be40055 -- --VCMPPS_256_0x1F(reg) -- before -- f19e4e2d2813c906.2c5d52fd961d7fbf.51e2af0e3d0e5a1d.ad2b4248ce888731 -- 235a3e1dee1128b0.0f0ba8b85b66a6d7.645ec3732233a615.747a341e7ec29ce4 -- d9cf6475676a5900.cf8fa56f9d5801d9.8c2dcfc92ead679c.6af94e39de5d462c -- 6f49bb9f31aa97a1.48b4c40f78fd4af2.269bcd7dfd08d760.6b740c8709674034 -- 53b7ebf31ceb4729 -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 235a3e1dee1128b0.0f0ba8b85b66a6d7.645ec3732233a615.747a341e7ec29ce4 -- d9cf6475676a5900.cf8fa56f9d5801d9.8c2dcfc92ead679c.6af94e39de5d462c -- 6f49bb9f31aa97a1.48b4c40f78fd4af2.269bcd7dfd08d760.6b740c8709674034 -- 53b7ebf31ceb4729 --VCMPPS_256_0x1F(mem) -- before -- fe8e656932f61736.40133f08e85e1f40.5747818209633e4e.8ef3bbf929d1320a -- 48c4f8d668936c88.aa7bec1d27112d89.d61458b66b959918.208394aa5193b649 -- 0d272024d9ce014b.08cbbe488b50fd27.a2e7c696bba0177d.399555fd0fdb9dc7 -- 29815740a1b493aa.b550b2f7afa6cac7.978c450d158f73a8.3376f85dff332430 -- 6b737b35be298732 -- after -- fe8e656932f61736.40133f08e85e1f40.5747818209633e4e.8ef3bbf929d1320a -- 48c4f8d668936c88.aa7bec1d27112d89.d61458b66b959918.208394aa5193b649 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 29815740a1b493aa.b550b2f7afa6cac7.978c450d158f73a8.3376f85dff332430 -- 6b737b35be298732 -- --VCMPPS_256_0x1F(reg) -- before -- 3dd6d9f3e7490176.789f1b17dd50ded2.0f56c3952f9fd115.91cf5309936e6ac6 -- 05eb0e02171ecfab.d64de693a9ae9eee.7029ed8ea8c84ebc.6b7b6c75544ab803 -- 1f0017cee9342d7b.1f5736a220db8e2b.36152c4eb6ac7c69.035e0a3d712e188a -- e75fefc3fa175692.2f89872e5ee26bb5.bb667d41f4d798c7.3442ab4e08264788 -- daf4ca92353f0128 -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 05eb0e02171ecfab.d64de693a9ae9eee.7029ed8ea8c84ebc.6b7b6c75544ab803 -- 1f0017cee9342d7b.1f5736a220db8e2b.36152c4eb6ac7c69.035e0a3d712e188a -- e75fefc3fa175692.2f89872e5ee26bb5.bb667d41f4d798c7.3442ab4e08264788 -- daf4ca92353f0128 --VCMPPS_256_0x1F(mem) -- before -- d140e3f613840197.b956914de554889e.e1ae532580cff1b7.5d67dbd3fed6de83 -- f4f27267bf010500.f12ffcd94676fd48.13931872a2afdb5e.7665427071348a48 -- 21d5f4cf54c3c791.ea3729d1ba0af13f.a0055101de8de6d5.63acae85e87dd7c3 -- 33b7e31ceed50373.02ba16a3dd9aa22d.64ce7abe5375ce49.81881c7c003e02a0 -- 2a4586c35402478a -- after -- d140e3f613840197.b956914de554889e.e1ae532580cff1b7.5d67dbd3fed6de83 -- f4f27267bf010500.f12ffcd94676fd48.13931872a2afdb5e.7665427071348a48 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 33b7e31ceed50373.02ba16a3dd9aa22d.64ce7abe5375ce49.81881c7c003e02a0 -- 2a4586c35402478a -- --VCMPPS_256_0x1F(reg) -- before -- bb2eeac48155e12e.0662bd39aa4377d5.9403bdb94ab54abe.3aba0f951b744ee5 -- 919143ed22c40e38.75a3fd11a41adde0.fc601c819ee4269f.00978d73529524d6 -- 06b88ea9d4da0753.5e462092f765f2c3.961b2f6673b5717c.91306f4214e40a48 -- 77f0c56432230b2b.9b17a0a7bf3071a8.bd81f0d468b36800.c85031f07f6ebc66 -- 83c44f67ac3ef85d -- after -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- 919143ed22c40e38.75a3fd11a41adde0.fc601c819ee4269f.00978d73529524d6 -- 06b88ea9d4da0753.5e462092f765f2c3.961b2f6673b5717c.91306f4214e40a48 -- 77f0c56432230b2b.9b17a0a7bf3071a8.bd81f0d468b36800.c85031f07f6ebc66 -- 83c44f67ac3ef85d --VCMPPS_256_0x1F(mem) -- before -- 9c584595b9607859.4085e68ad92c546d.0ae1fb3c198818bc.cfde5d37176b47d8 -- f1d89065c2e1f985.bdc3ec8764801fc5.8572ac3e2178a12a.277e71fb1c684ab0 -- 5c10abc2e2cc360e.4af6d3c770aba8df.ea943097f10dc81f.20ad288c1436ac33 -- bbcb129a362eed1f.436998b6983a2b66.13140134a8514bc6.18b77e569a61ab0e -- 69e76fc54b7680ec -- after -- 9c584595b9607859.4085e68ad92c546d.0ae1fb3c198818bc.cfde5d37176b47d8 -- f1d89065c2e1f985.bdc3ec8764801fc5.8572ac3e2178a12a.277e71fb1c684ab0 -- ffffffffffffffff.ffffffffffffffff.ffffffffffffffff.ffffffffffffffff -- bbcb129a362eed1f.436998b6983a2b66.13140134a8514bc6.18b77e569a61ab0e -- 69e76fc54b7680ec -- -diff --git a/none/tests/amd64/avx_estimate_insn.c b/none/tests/amd64/avx_estimate_insn.c -new file mode 100644 -index 000000000..38e63ed56 ---- /dev/null -+++ b/none/tests/amd64/avx_estimate_insn.c -@@ -0,0 +1,63 @@ -+#include"avx_tests.h" -+ -+GEN_test_RandM(VRCPSS_128, -+ "vrcpss %%xmm6, %%xmm8, %%xmm7", -+ "vrcpss (%%rsi), %%xmm8, %%xmm7") -+ -+GEN_test_RandM(VRCPPS_128, -+ "vrcpps %%xmm6, %%xmm8", -+ "vrcpps (%%rsi), %%xmm8") -+ -+GEN_test_RandM(VRCPPS_256, -+ "vrcpps %%ymm6, %%ymm8", -+ "vrcpps (%%rsi), %%ymm8") -+ -+GEN_test_RandM(VSQRTSS_128, -+ "vsqrtss %%xmm6, %%xmm8, %%xmm7", -+ "vsqrtss (%%rsi), %%xmm8, %%xmm7") -+ -+GEN_test_RandM(VSQRTPS_128, -+ "vsqrtps %%xmm6, %%xmm8", -+ "vsqrtps (%%rsi), %%xmm8") -+ -+GEN_test_RandM(VSQRTPS_256, -+ "vsqrtps %%ymm6, %%ymm8", -+ "vsqrtps (%%rsi), %%ymm8") -+ -+GEN_test_RandM(VSQRTPD_128, -+ "vsqrtpd %%xmm6, %%xmm8", -+ "vsqrtpd (%%rsi), %%xmm8") -+ -+GEN_test_RandM(VSQRTPD_256, -+ "vsqrtpd %%ymm6, %%ymm8", -+ "vsqrtpd (%%rsi), %%ymm8") -+ -+GEN_test_RandM(VRSQRTSS_128, -+ "vrsqrtss %%xmm6, %%xmm8, %%xmm7", -+ "vrsqrtss (%%rsi), %%xmm8, %%xmm7") -+ -+GEN_test_RandM(VRSQRTPS_128, -+ "vrsqrtps %%xmm6, %%xmm8", -+ "vrsqrtps (%%rsi), %%xmm8") -+ -+GEN_test_RandM(VRSQRTPS_256, -+ "vrsqrtps %%ymm6, %%ymm8", -+ "vrsqrtps (%%rsi), %%ymm8") -+ -+int main ( void ) -+{ -+ DO_D( VRCPSS_128 ); -+ DO_D( VRCPPS_128 ); -+ DO_D( VRCPPS_256 ); -+ DO_D( VSQRTSS_128 ); -+ DO_D( VSQRTPS_128 ); -+ DO_D( VSQRTPS_256 ); -+ DO_D( VSQRTPD_128 ); -+ DO_D( VSQRTPD_256 ); -+ DO_D( VRSQRTSS_128 ); -+ DO_D( VRSQRTPS_128 ); -+ DO_D( VRSQRTPS_256 ); -+ -+ return 0; -+} -+ -diff --git a/none/tests/amd64/avx_estimate_insn.stderr.exp b/none/tests/amd64/avx_estimate_insn.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/none/tests/amd64/avx_estimate_insn.stdout.exp b/none/tests/amd64/avx_estimate_insn.stdout.exp -new file mode 100644 -index 000000000..4b41c9583 ---- /dev/null -+++ b/none/tests/amd64/avx_estimate_insn.stdout.exp -@@ -0,0 +1,891 @@ -+VRCPSS_128(reg) -+ before -+ 7d6528c5fa956a0d.69c3e9a6af27d13b.5175e39d19c9ca1e.98f24a4984175700 -+ b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50 -+ 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38 -+ cb509970b8136c85.d740b80eb7839b97.d89998df5035ed36.4a4bc43968bc40e5 -+ 56b01a12b0ca1583 -+ after -+ 0000000000000000.0000000000000000.60b160857d45c484.47b8d8c0a3208000 -+ b6d2fb5aa7bc5127.fe9915e556a044b2.60b160857d45c484.47b8d8c0eeef1e50 -+ 065d77195d623e6b.842adc6450659e17.19a348215c3a67fd.399182c2dbcc2d38 -+ cb509970b8136c85.d740b80eb7839b97.d89998df5035ed36.4a4bc43968bc40e5 -+ 56b01a12b0ca1583 -+VRCPSS_128(mem) -+ before -+ 398e0039cf03663d.5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db -+ cfaff39be272ef40.20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597 -+ f4e06e2205236eb7.6897b536bbe4da8a.369dab4f9465b86e.d182c916cebc2e17 -+ 84ededbc53239dcf.95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06 -+ 81f2a547be8d1811 -+ after -+ 398e0039cf03663d.5ff85bc9535c191f.d3a727d1a705f65d.f9dd4a29f8c093db -+ cfaff39be272ef40.20a1bb92cbc97fe8.542da4983df76c96.d8bc5c6dee699597 -+ 0000000000000000.0000000000000000.542da4983df76c96.d8bc5c6d862a2000 -+ 84ededbc53239dcf.95264321bf3b68b2.55c2b9e2c95c9810.407b8d9035449b06 -+ 81f2a547be8d1811 -+ -+VRCPSS_128(reg) -+ before -+ f0350ca70523e0e4.5ba1ec54e87d39b3.019963bf7459630b.8d69483df7e8c6a9 -+ e98ebd1ca893312a.54cae7d5e13dfe91.0a3e0f7c75cb0842.b95ed64d3b13ff64 -+ c84ab71340684590.4d325b2d5a70a792.0a5f45c55f1c9202.b76ddefcb0ebfe6e -+ e9b5f3f66b2e58c1.21a6c3476d21f1e5.5f490104ced83ff8.6262dd37727c80f3 -+ 96084deb9ed0411e -+ after -+ 0000000000000000.0000000000000000.0a3e0f7c75cb0842.b95ed64dce0ae000 -+ e98ebd1ca893312a.54cae7d5e13dfe91.0a3e0f7c75cb0842.b95ed64d3b13ff64 -+ c84ab71340684590.4d325b2d5a70a792.0a5f45c55f1c9202.b76ddefcb0ebfe6e -+ e9b5f3f66b2e58c1.21a6c3476d21f1e5.5f490104ced83ff8.6262dd37727c80f3 -+ 96084deb9ed0411e -+VRCPSS_128(mem) -+ before -+ 2e2dac0350f6fd1c.a81b6e33c572a86a.acf29b0f395c98b4.63483da65c8c49d0 -+ 089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b.73a8f718a8c3ec35 -+ ff1f240eb3e1553f.6f07136773a2ead3.56428c5a66a2ec77.ecb42ac54b0966d4 -+ ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4.28bad218e4ebf159 -+ 8404eb7f0cf4ca6f -+ after -+ 2e2dac0350f6fd1c.a81b6e33c572a86a.acf29b0f395c98b4.63483da65c8c49d0 -+ 089b756aa3f77018.61c82534e9bf6f37.c9e25f72d82e582b.73a8f718a8c3ec35 -+ 0000000000000000.0000000000000000.c9e25f72d82e582b.73a8f71822699800 -+ ee8536da9dbf68bc.3026343700a654eb.2ddd9db4ffc411c4.28bad218e4ebf159 -+ 8404eb7f0cf4ca6f -+ -+VRCPSS_128(reg) -+ before -+ 5cdf726562b02dc2.b39925ba7d9d67bc.ff6f850f2c57ea2a.2c810e6dc1a1833d -+ 0c9761367fac55ff.28276f9a6e880c6b.372f015d9242e83d.2ef85b6fc544fd0f -+ f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66 -+ 65ce6d498492e7e7.96df010bf4b23b84.57436a097df30b8d.aa927a03090dfc6d -+ dc4c446c804bf950 -+ after -+ 0000000000000000.0000000000000000.372f015d9242e83d.2ef85b6f552ff800 -+ 0c9761367fac55ff.28276f9a6e880c6b.372f015d9242e83d.2ef85b6fc544fd0f -+ f078b65e01737fd2.2bfa8f668c8b14f4.36b2a38dcef18acf.0e0f01a829ba3c66 -+ 65ce6d498492e7e7.96df010bf4b23b84.57436a097df30b8d.aa927a03090dfc6d -+ dc4c446c804bf950 -+VRCPSS_128(mem) -+ before -+ 810bdacfab80ee3d.c5e48064a393c8e9.47a34273c10a3c47.f5304f3e3ad1a923 -+ 769ab818a5b7985e.6d08ed19fa045f84.1810cd8c109ed568.6ec34f98a2199d3c -+ 95c45b338afcb3df.b984aed62671e865.e6f21d40fc7bc013.1c4a678450562685 -+ bc563e0c775bfaed.05a5c205c3659f38.8e17b17da2acb976.5d0f926ce1157eaa -+ 8b5fccbef0e1e256 -+ after -+ 810bdacfab80ee3d.c5e48064a393c8e9.47a34273c10a3c47.f5304f3e3ad1a923 -+ 769ab818a5b7985e.6d08ed19fa045f84.1810cd8c109ed568.6ec34f98a2199d3c -+ 0000000000000000.0000000000000000.1810cd8c109ed568.6ec34f98441c4800 -+ bc563e0c775bfaed.05a5c205c3659f38.8e17b17da2acb976.5d0f926ce1157eaa -+ 8b5fccbef0e1e256 -+ -+VRCPPS_128(reg) -+ before -+ 048612e51a468e36.c51cdd8f87e12ab4.acb722146c6cbfa9.ea4a022e1d3d7dbb -+ 22cf5e4cfad1bdf5.8de2b4a9d799ff5f.0c05cb6ebd128663.d7568e3e8a3ac80e -+ 4288ae612c0dad40.f0733f448390351b.80ddba7e53e42d12.3208cf9b04b0569c -+ c1fbfd8f4d8698c2.cb9dfb4ea5d18713.6489eab2c96df363.d52c4330a7aae391 -+ 9d8e66ea90352a18 -+ after -+ 048612e51a468e36.c51cdd8f87e12ab4.acb722146c6cbfa9.ea4a022e1d3d7dbb -+ 0000000000000000.0000000000000000.fe13c8002b0fa000.4cef90007a39d000 -+ 4288ae612c0dad40.f0733f448390351b.80ddba7e53e42d12.3208cf9b04b0569c -+ c1fbfd8f4d8698c2.cb9dfb4ea5d18713.6489eab2c96df363.d52c4330a7aae391 -+ 9d8e66ea90352a18 -+VRCPPS_128(mem) -+ before -+ 66fab2b3db5ce85e.f9754842f9c9ba28.f82a63b15c68b274.14575775bc3a1202 -+ 0c3ca578a32bd88e.474289e7cb61501e.54e7f35bc162726a.ec91fe34c7d6c79a -+ 6b1fba2604afb8d5.08aebee85fda964f.bba02737f3c98220.4784d95987cd4ed8 -+ 5f706da71bf2425f.9605e2b252c1c868.09217c310baca0c3.837be65197abe268 -+ fbc4208894fdc0f5 -+ after -+ 66fab2b3db5ce85e.f9754842f9c9ba28.f82a63b15c68b274.14575775bc3a1202 -+ 0000000000000000.0000000000000000.86c04800228cd000.6a982800c2b01800 -+ 6b1fba2604afb8d5.08aebee85fda964f.bba02737f3c98220.4784d95987cd4ed8 -+ 5f706da71bf2425f.9605e2b252c1c868.09217c310baca0c3.837be65197abe268 -+ fbc4208894fdc0f5 -+ -+VRCPPS_128(reg) -+ before -+ 0aaa836b194e242c.c5fc3ae904033357.4e92f1b240a12214.1a366d352714867e -+ 0e780c65c22b4ab8.778d9ed6d9eb46ea.8ca3e752c306df00.caab752f630ff07e -+ 627bb6e12d1f6d46.51ef145cb9b83843.ac82c1007a7d3cd8.f54b130cdaa89cef -+ 61ff7d4df3b6ca81.31f01866bd76c58f.0a7c7a27fe917447.77e3c0b6a9ec44fc -+ 2c3ffa1aebe6a4d2 -+ after -+ 0aaa836b194e242c.c5fc3ae904033357.4e92f1b240a12214.1a366d352714867e -+ 0000000000000000.0000000000000000.d27a900004816800.89a15800a4426000 -+ 627bb6e12d1f6d46.51ef145cb9b83843.ac82c1007a7d3cd8.f54b130cdaa89cef -+ 61ff7d4df3b6ca81.31f01866bd76c58f.0a7c7a27fe917447.77e3c0b6a9ec44fc -+ 2c3ffa1aebe6a4d2 -+VRCPPS_128(mem) -+ before -+ f02b3b25bca27a9c.69505d14b27d9d16.f25b26e0042fa9fa.02dd0e32eecfc5fa -+ 9f7301c1392d8087.d4ba52a206ff21b1.70fbbab6a7f19faf.f0f1798fe3c1699c -+ 15e3c8dc7e9273bf.0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda -+ 2d460a61a5dd0f6f.47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60 -+ 16559ec50352a3d9 -+ after -+ f02b3b25bca27a9c.69505d14b27d9d16.f25b26e0042fa9fa.02dd0e32eecfc5fa -+ 0000000000000000.0000000000000000.8c9588007aba8800.7c144000901db800 -+ 15e3c8dc7e9273bf.0088596389c893fd.879d51d4c5c764db.3004b7a97cf69dda -+ 2d460a61a5dd0f6f.47086cc3da642fa7.130d662777beb4a9.1e61c5ec52f79c60 -+ 16559ec50352a3d9 -+ -+VRCPPS_128(reg) -+ before -+ 742c3e9e2b92eef2.c569453ccd1b0fc4.0784892e9360315b.f0177599dbe14b46 -+ 9432a2e46543b956.b819f459105730e9.9a49ac115048d4c4.f987fa170d3ce4dd -+ d2b3c4044ef23fb2.e22093a48a9d2e0b.5da3cfd6aea6558e.0c28728e28dc3c9c -+ 89fba268812abdb2.1e4a9e0958fac555.adddf0eb4808f067.04c857e949cc0fac -+ bc3127138b19183c -+ after -+ 742c3e9e2b92eef2.c569453ccd1b0fc4.0784892e9360315b.f0177599dbe14b46 -+ 0000000000000000.0000000000000000.21481000d0450000.72c280005614d000 -+ d2b3c4044ef23fb2.e22093a48a9d2e0b.5da3cfd6aea6558e.0c28728e28dc3c9c -+ 89fba268812abdb2.1e4a9e0958fac555.adddf0eb4808f067.04c857e949cc0fac -+ bc3127138b19183c -+VRCPPS_128(mem) -+ before -+ 12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4.e4450ababbfae0f9 -+ e1917689e3f6bf86.d70f7fb13667914c.413cead25e27ac14.5f2619b1a20662f0 -+ 0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0.7acb193b9abab2f9 -+ 59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685.918107c43ea20cc0 -+ 0194ddb82b49abf0 -+ after -+ 12305efa0acd1475.1755377e9a786f01.4a6592749579b0f4.e4450ababbfae0f9 -+ 0000000000000000.0000000000000000.348eb800e9833800.9aa65000c3029800 -+ 0420edac31a0d599.2573776df1835e3e.de9a220dce0e75e0.7acb193b9abab2f9 -+ 59a93d4f11d611db.5cce191e65591384.ff4cb613013cc685.918107c43ea20cc0 -+ 0194ddb82b49abf0 -+ -+VRCPPS_256(reg) -+ before -+ 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f -+ 570037914d04ab3d.05d75ec6f616ee9a.fa99500fef6024ba.39dce32c239cf309 -+ f6f2b14fbb3184b2.141625713239066f.17a0dc273ba9f803.0a52741849e54740 -+ 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff -+ 6295f64a4ce61473 -+ after -+ 24509983fc3bcc36.baf7e45e9fa43077.da6c63303173ecc9.7e1e22cf15bd5c2f -+ 88070000c3b89000.6ada38004cb11800.674bb8004340c800.749bb000350ee800 -+ f6f2b14fbb3184b2.141625713239066f.17a0dc273ba9f803.0a52741849e54740 -+ 5d700527e24d9241.c57eb74d70183523.8fcf04e5b2dca44f.cf4c517ea3a413ff -+ 6295f64a4ce61473 -+VRCPPS_256(mem) -+ before -+ a0fae06860b606c7.e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b -+ 66478ac4fc21a428.f34428d9c8833f5b.78fb29445f3bc8d7.fcd015ff8f2e73a3 -+ 8e48704b3c31abc2.da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02 -+ f5c90ee73af5d7c0.f9da7f07e00794eb.00b0940ba5e08516.20fd62bd65b57115 -+ be625608d5abd787 -+ after -+ a0fae06860b606c7.e8c72e865de41295.f2db8f44cbbf37e2.bc70c3b3ef84644b -+ de0298001e340000.96248800210fa800.8c154000b32b6000.c28818008f777800 -+ 8e48704b3c31abc2.da30ef8bc0b5573e.34a901384a97a32f.a93bf6332d650e02 -+ f5c90ee73af5d7c0.f9da7f07e00794eb.00b0940ba5e08516.20fd62bd65b57115 -+ be625608d5abd787 -+ -+VRCPPS_256(reg) -+ before -+ ddb5cd8016d27d05.7796e0861576e44f.ac8dd5bbc503330e.b9dd5dab8e212ab7 -+ db43c391c6b69f3a.f17a6312e7c28d9a.4e94ec120b386f52.3bfcd80321664d3e -+ 125934a781e479d3.3d431279cce48fce.3d3cc0784c2f8563.63d9810079bbabd9 -+ df411d2ee2e7467c.38bb69a6e1e9a617.d4d14e592776b1ef.0b40d58cb22d00b1 -+ 10fd4e94e9c808f5 -+ after -+ ddb5cd8016d27d05.7796e0861576e44f.ac8dd5bbc503330e.b9dd5dab8e212ab7 -+ 6c96d800fd0f7000.41a7f800b20f6000.41ad900032bab000.1b16a000052ea000 -+ 125934a781e479d3.3d431279cce48fce.3d3cc0784c2f8563.63d9810079bbabd9 -+ df411d2ee2e7467c.38bb69a6e1e9a617.d4d14e592776b1ef.0b40d58cb22d00b1 -+ 10fd4e94e9c808f5 -+VRCPPS_256(mem) -+ before -+ 4edb6a053a967ecf.9e477892854b43e0.beafe48541dc8da0.6f9f902235982fa0 -+ a1a7a4c9c0a51f6b.acb9433f079dacac.abeb000208c90296.69f2843d15223a22 -+ e52e79ce9700a7f7.63e279a20368bc8b.db3b370954bcbf24.20162517609f0f22 -+ f63a63fedcb4d29c.200d17261638b12a.2a6a07863ec28077.ef56701db49bea4c -+ 31005fb9ada2074b -+ after -+ 4edb6a053a967ecf.9e477892854b43e0.beafe48541dc8da0.6f9f902235982fa0 -+ 301558004459c800.e0a44800f9a13000.c03a48003d149800.0f4d500049575800 -+ e52e79ce9700a7f7.63e279a20368bc8b.db3b370954bcbf24.20162517609f0f22 -+ f63a63fedcb4d29c.200d17261638b12a.2a6a07863ec28077.ef56701db49bea4c -+ 31005fb9ada2074b -+ -+VRCPPS_256(reg) -+ before -+ 445ef059e641a1cc.b097e047aacc5b89.3f871736dc9ac535.7446eb65e4e703bb -+ 83bd1e68fb03f57b.ef136b941e54ffe8.1c9c7740ef193457.959960926235021b -+ 4969e55289753f03.8f7980d1535979e5.139832afee423c3d.6930e0fad3ba39c4 -+ f4ad41832c22ba11.6c949cea66e687ae.80c745ef729f1792.ccd7e987538166e1 -+ 9a5af627ff97439f -+ after -+ 445ef059e641a1cc.b097e047aacc5b89.3f871736dc9ac535.7446eb65e4e703bb -+ 358c1800f585a000.ef8350002b96b000.6b57480090a8b800.15b93800ab2ff800 -+ 4969e55289753f03.8f7980d1535979e5.139832afee423c3d.6930e0fad3ba39c4 -+ f4ad41832c22ba11.6c949cea66e687ae.80c745ef729f1792.ccd7e987538166e1 -+ 9a5af627ff97439f -+VRCPPS_256(mem) -+ before -+ af8484c5f3078d2a.ded72f677f96a350.623139cb7207e36c.bf75aa6c1abe0103 -+ e6230d4d4add00ad.6431aa6a1e5e366d.4c1cd56194c94a4e.2ced5f927f2b383c -+ 1d010fab20265755.e309aef8a605af13.0821eb96e737777e.237d5fcd3f71f6e8 -+ 2feb05cb92ed4f4d.b5a9377eb31749ef.710cf757885d2728.006fa689f61c78b4 -+ 1f1030333fb8fa4b -+ after -+ af8484c5f3078d2a.ded72f677f96a350.623139cb7207e36c.bf75aa6c1abe0103 -+ cf7740008bf1c800.a01850007fd6a350.1cb8e8000cf11800.bf856000642c7000 -+ 1d010fab20265755.e309aef8a605af13.0821eb96e737777e.237d5fcd3f71f6e8 -+ 2feb05cb92ed4f4d.b5a9377eb31749ef.710cf757885d2728.006fa689f61c78b4 -+ 1f1030333fb8fa4b -+ -+VSQRTSS_128(reg) -+ before -+ dbacfa35b7d2b75a.f8ad6b99bb3fa4c2.385e4166df2141ad.63a8769192481679 -+ 928efefdf9f5ec8d.5313bd01b82612e0.c673c91ec9aed3f8.b9c3e32f2103009d -+ 9f043af6a1aed58f.1ee978efa4b054d2.bc36ca100a4a3a7d.5127ba1c529aa0bf -+ 5e58aa8b4c88ae0d.34fa174f9ce927c4.76f140aa4182b4e7.06a17746411ab40c -+ b3fd9698098ef5b0 -+ after -+ 0000000000000000.0000000000000000.c673c91ec9aed3f8.b9c3e32f490caf74 -+ 928efefdf9f5ec8d.5313bd01b82612e0.c673c91ec9aed3f8.b9c3e32f2103009d -+ 9f043af6a1aed58f.1ee978efa4b054d2.bc36ca100a4a3a7d.5127ba1c529aa0bf -+ 5e58aa8b4c88ae0d.34fa174f9ce927c4.76f140aa4182b4e7.06a17746411ab40c -+ b3fd9698098ef5b0 -+VSQRTSS_128(mem) -+ before -+ 360794fec60222d6.2ad7482a960fb2b2.7014160ebbdb47e4.51f2275707e17ae4 -+ 698bec649583f5aa.61cd123e19cf1e2b.b001f1161e946f5c.a7837c83faf3cb1d -+ 2a541ab7911c2b5a.5e86033374552e23.ce8e2455e0205c58.d5f13a9ab645e140 -+ 532f9ae1d7da8010.7c4e1775412d1d47.a8872cb61d8aca05.37885d08d662faf9 -+ 2993e139f7d64ff4 -+ after -+ 360794fec60222d6.2ad7482a960fb2b2.7014160ebbdb47e4.51f2275707e17ae4 -+ 698bec649583f5aa.61cd123e19cf1e2b.b001f1161e946f5c.a7837c83faf3cb1d -+ 0000000000000000.0000000000000000.b001f1161e946f5c.a7837c8323a9e2f6 -+ 532f9ae1d7da8010.7c4e1775412d1d47.a8872cb61d8aca05.37885d08d662faf9 -+ 2993e139f7d64ff4 -+ -+VSQRTSS_128(reg) -+ before -+ 0760c299b42e1fdc.c2e9e9cf82c7aff8.19714a711ce12843.18b88425f2de758f -+ 2d39fd95a9f5a45d.514c816eaff2763f.8f3a9991a2ff8bc2.fceca88e7b281821 -+ f76b8d9773b81b24.de24e0a879648e11.3cf6fe426e128171.2ef114ddd37570e8 -+ c1426e0dae01c0dd.433f816bfd2bb699.7af177f11da748fc.8b9145fe16d0390f -+ f099b6dd61462ec3 -+ after -+ 0000000000000000.0000000000000000.8f3a9991a2ff8bc2.fceca88effc00000 -+ 2d39fd95a9f5a45d.514c816eaff2763f.8f3a9991a2ff8bc2.fceca88e7b281821 -+ f76b8d9773b81b24.de24e0a879648e11.3cf6fe426e128171.2ef114ddd37570e8 -+ c1426e0dae01c0dd.433f816bfd2bb699.7af177f11da748fc.8b9145fe16d0390f -+ f099b6dd61462ec3 -+VSQRTSS_128(mem) -+ before -+ 37d5e366d0e20c30.e70a9c61f55fce33.5d68e1a25652a804.a77700084a491a0e -+ 3d1148867eb08f81.c50f1401e45b82d3.086a7a39a1e6217d.1dd493f591843454 -+ de18612787bc73e3.b79cd05818831869.2112ca1cf9f1dd31.3a542e238fe5d179 -+ f7b8ab3708137382.19ffced22c62cba0.822c4c377b82984c.5842cbfee0f72e2a -+ d4ec68f21f468712 -+ after -+ 37d5e366d0e20c30.e70a9c61f55fce33.5d68e1a25652a804.a77700084a491a0e -+ 3d1148867eb08f81.c50f1401e45b82d3.086a7a39a1e6217d.1dd493f591843454 -+ 0000000000000000.0000000000000000.086a7a39a1e6217d.1dd493f544e2e586 -+ f7b8ab3708137382.19ffced22c62cba0.822c4c377b82984c.5842cbfee0f72e2a -+ d4ec68f21f468712 -+ -+VSQRTSS_128(reg) -+ before -+ 0b9c016be95f18de.62bba1a11cc04c89.478209dbbd84d925.08847c7642a20df9 -+ 579f90d5d9cd1c3a.fceebf50e0d0ba24.9c727edf66767ca3.8fe6d7c56a5ff965 -+ 1541139c8b1cd0d1.a11d81326f4e7880.761b274ac4c4f0c7.f31ed81010c417bc -+ a1cd852d9cd97050.2d146432e64644c9.30c9028972f8733d.11f7fa4450de2529 -+ c33ebc4b44b8ddd8 -+ after -+ 0000000000000000.0000000000000000.9c727edf66767ca3.8fe6d7c5281e6dec -+ 579f90d5d9cd1c3a.fceebf50e0d0ba24.9c727edf66767ca3.8fe6d7c56a5ff965 -+ 1541139c8b1cd0d1.a11d81326f4e7880.761b274ac4c4f0c7.f31ed81010c417bc -+ a1cd852d9cd97050.2d146432e64644c9.30c9028972f8733d.11f7fa4450de2529 -+ c33ebc4b44b8ddd8 -+VSQRTSS_128(mem) -+ before -+ e6c097130b5efcf6.5791e2f2a78f3762.7c9fe23c60c5d82b.25c80a060da03fb0 -+ 56470887bfdd3daf.94d7265949ca62b4.6a8a793cf9d5f0d1.b3633c2f304791cd -+ ef9f8c927c405d2f.b2ed4ecc1e172df2.d3a0a41fce854ae7.35e7926e777aa43f -+ 8d969e225f9318a0.0e1d55b9c001d4c7.93aee0cffbdea09a.06a10a317fc4b5b3 -+ 84db9fe3e4b100d4 -+ after -+ e6c097130b5efcf6.5791e2f2a78f3762.7c9fe23c60c5d82b.25c80a060da03fb0 -+ 56470887bfdd3daf.94d7265949ca62b4.6a8a793cf9d5f0d1.b3633c2f304791cd -+ 0000000000000000.0000000000000000.6a8a793cf9d5f0d1.b3633c2f268f3835 -+ 8d969e225f9318a0.0e1d55b9c001d4c7.93aee0cffbdea09a.06a10a317fc4b5b3 -+ 84db9fe3e4b100d4 -+ -+VSQRTPS_128(reg) -+ before -+ 09e14df041cdc14f.0bf7ba2283e22a31.04b4378bce1492e0.8680a7399beeae16 -+ f30110c432a534d0.478d5d7e053a4e0c.f0fdf0aee1dda4e8.88e2774acbc13287 -+ 9c86e5cb54c59402.1c25022200a7415e.2e467d8e98e7468c.75a0cbeda561e618 -+ 62bbc77143b71e92.668b24fb9133bf52.1adad8978cbfb478.29861f0d48dc87f5 -+ 805ff098ce3ed14b -+ after -+ 09e14df041cdc14f.0bf7ba2283e22a31.04b4378bce1492e0.8680a7399beeae16 -+ 0000000000000000.0000000000000000.36e16b2bffc00000.5a8f76d3ffc00000 -+ 9c86e5cb54c59402.1c25022200a7415e.2e467d8e98e7468c.75a0cbeda561e618 -+ 62bbc77143b71e92.668b24fb9133bf52.1adad8978cbfb478.29861f0d48dc87f5 -+ 805ff098ce3ed14b -+VSQRTPS_128(mem) -+ before -+ 55f9b97953917f46.9fedb2229a090d2c.018b42f3d3ec8415.1004ff355bf02957 -+ 861ef69cf4e34e11.b168a24af5479e7b.c9f1d5f8e2de4bd3.6c11edd5a106e2d6 -+ ee9b23edcc40fad9.f2789356f1fb0d2b.99885af4db13d1b7.894d9fe1f98d1aa0 -+ 683cbc58f8b23fca.bf6982b029b396ea.4f1e4ed5da99d2ee.c5040fc700120f62 -+ 7b813bf15120fbc8 -+ after -+ 55f9b97953917f46.9fedb2229a090d2c.018b42f3d3ec8415.1004ff355bf02957 -+ 0000000000000000.0000000000000000.20858317ffc00000.27b884d44daf5486 -+ ee9b23edcc40fad9.f2789356f1fb0d2b.99885af4db13d1b7.894d9fe1f98d1aa0 -+ 683cbc58f8b23fca.bf6982b029b396ea.4f1e4ed5da99d2ee.c5040fc700120f62 -+ 7b813bf15120fbc8 -+ -+VSQRTPS_128(reg) -+ before -+ 07121ecd88441b7d.d2cc3eca9347d80f.74876ac63afb7562.c67d2c86fa7c09a3 -+ c501b4c64209aa2e.0719232dba0b82d5.6e1d4703bf5de53f.d97270f257c73303 -+ 109cfa471afbe686.e2ede96f8809f947.077815d35567232e.66c997070e860c39 -+ 462deabeada60932.41150c7a1a4df892.9ce5d1a297a56adb.474e1bb03bc55073 -+ 5acd7ad9f991bada -+ after -+ 07121ecd88441b7d.d2cc3eca9347d80f.74876ac63afb7562.c67d2c86fa7c09a3 -+ 0000000000000000.0000000000000000.237c02f54a734053.5320a27d2702fd2d -+ 109cfa471afbe686.e2ede96f8809f947.077815d35567232e.66c997070e860c39 -+ 462deabeada60932.41150c7a1a4df892.9ce5d1a297a56adb.474e1bb03bc55073 -+ 5acd7ad9f991bada -+VSQRTPS_128(mem) -+ before -+ 79112f6f64f5079c.c201829797974fdd.fe5d063c8be33ce1.89ad76dc21a1f8f1 -+ 82e7b65c99fdf3e5.df63bd3c7359f634.f791559ff8d88161.2a1f00ed91e9071d -+ 4f1c8c8db3b639e1.fba1981add7938e3.067d74917c37833e.db866b418009d40a -+ be7a2cefcf2b96bb.70050d9d72825295.09eddffd330cfda3.f82db3448c8c9a65 -+ de62d56351fe96da -+ after -+ 79112f6f64f5079c.c201829797974fdd.fe5d063c8be33ce1.89ad76dc21a1f8f1 -+ 0000000000000000.0000000000000000.ffc00000ffc00000.ffc00000308ffcdd -+ 4f1c8c8db3b639e1.fba1981add7938e3.067d74917c37833e.db866b418009d40a -+ be7a2cefcf2b96bb.70050d9d72825295.09eddffd330cfda3.f82db3448c8c9a65 -+ de62d56351fe96da -+ -+VSQRTPS_128(reg) -+ before -+ e76fcc086aeb0414.a9cd126c0869c6a0.9cdd1a32cd007ff7.daac12cf3a64acbd -+ 6fa194a173e020c0.ede3baf27b7b85bb.d973ba438b80fdb5.56878af3ad4a4cb8 -+ d444299809682589.6787a06c436d8e39.8514e93e478d067a.5a4ac156a6cb98bf -+ 71a4885bc70f501c.f18441c67d4b9e45.fa0ba48e9db3d6f2.c0c135e244f24dfe -+ 65b86284a1cb27a3 -+ after -+ e76fcc086aeb0414.a9cd126c0869c6a0.9cdd1a32cd007ff7.daac12cf3a64acbd -+ 0000000000000000.0000000000000000.ffc0000043865adb.4ce3d3d2ffc00000 -+ d444299809682589.6787a06c436d8e39.8514e93e478d067a.5a4ac156a6cb98bf -+ 71a4885bc70f501c.f18441c67d4b9e45.fa0ba48e9db3d6f2.c0c135e244f24dfe -+ 65b86284a1cb27a3 -+VSQRTPS_128(mem) -+ before -+ 26fbc229d962e2d7.a20cab554a62dd24.68a718ec4422710c.95a6e59e2a7fabcb -+ dd55d3bb09c439c9.c3ca90f22dec084f.a9bca1cab4fdc2ba.b330aadc8a7cbfaf -+ 67940f284cfce9a3.3028339e0d3a0c46.8e8f584ceae94e7a.aef4eeb358364f4a -+ a082f55bbf17ae91.45738ec585d726b8.f4ecb95e02f1d179.e33fad8f313a9649 -+ af5de4ddb013d258 -+ after -+ 26fbc229d962e2d7.a20cab554a62dd24.68a718ec4422710c.95a6e59e2a7fabcb -+ 0000000000000000.0000000000000000.54123f7941cbec93.ffc0000034ffd5e2 -+ 67940f284cfce9a3.3028339e0d3a0c46.8e8f584ceae94e7a.aef4eeb358364f4a -+ a082f55bbf17ae91.45738ec585d726b8.f4ecb95e02f1d179.e33fad8f313a9649 -+ af5de4ddb013d258 -+ -+VSQRTPS_256(reg) -+ before -+ 6c9a8e07714d3d22.64ecfe407d2043c1.5df79fd3324f914f.b79f41ec172107e2 -+ 7742a77a11751354.8f9ea7c3a323665c.d6006035af2e8bb7.b3736be34585abe2 -+ 2ca02ba32b169299.fd646dd04c2dd191.0bd9cf5599014e9d.c435b32da92a7aa5 -+ e70216ec5cbcf49e.8a09cb539549408a.57d0e8a18b5417ad.c6b295b85f1c3056 -+ 95b48e6f81658922 -+ after -+ 6c9a8e07714d3d22.64ecfe407d2043c1.5df79fd3324f914f.b79f41ec172107e2 -+ 360f2f3f35445537.ffc0000045d2f1c8.25a6f8d8ffc00000.ffc00000ffc00000 -+ 2ca02ba32b169299.fd646dd04c2dd191.0bd9cf5599014e9d.c435b32da92a7aa5 -+ e70216ec5cbcf49e.8a09cb539549408a.57d0e8a18b5417ad.c6b295b85f1c3056 -+ 95b48e6f81658922 -+VSQRTPS_256(mem) -+ before -+ 0d07193d2e134034.05b265c33ff4760f.125b3d3899837173.182fa58322b12192 -+ 0a79b210803112b9.e0fd139371495497.7124406c74e81e7a.a9430469f9a6aaf9 -+ 68d5d5d393ccbadd.d52f1cc78e47c9e3.83314ed9438203c8.655800beacbeec8e -+ 03e6fe7283eff6cb.40947ccd307b129e.244ee56d2260de8c.aaba95edd88623fc -+ d2b5bf6419898df0 -+ after -+ 0d07193d2e134034.05b265c33ff4760f.125b3d3899837173.182fa58322b12192 -+ 2639f89836c227b5.22971cb63fb0e488.28ece85affc00000.2bd40cfd31169329 -+ 68d5d5d393ccbadd.d52f1cc78e47c9e3.83314ed9438203c8.655800beacbeec8e -+ 03e6fe7283eff6cb.40947ccd307b129e.244ee56d2260de8c.aaba95edd88623fc -+ d2b5bf6419898df0 -+ -+VSQRTPS_256(reg) -+ before -+ 3b947b8f0a536415.b779aada6ea680b0.7d772f10f5706b75.304780122c8b69f0 -+ 3fa5c4d84771e518.605a54f56dfe15b7.e82632fc79b30f14.83e79bb67d116120 -+ 3b3296ac6d6e4ba4.d95578b09e02700d.ddeb80fe57ce3c26.f9fcb34432fe8249 -+ 8c88ed7717d6d466.003692f81dbe4ede.b71315802c502c58.6d5043a8665c8797 -+ bdb0c6ce36392d36 -+ after -+ 3b947b8f0a536415.b779aada6ea680b0.7d772f10f5706b75.304780122c8b69f0 -+ 3d55d1ba5676fd39.ffc00000ffc00000.ffc000004ba2798f.ffc0000039347dcc -+ 3b3296ac6d6e4ba4.d95578b09e02700d.ddeb80fe57ce3c26.f9fcb34432fe8249 -+ 8c88ed7717d6d466.003692f81dbe4ede.b71315802c502c58.6d5043a8665c8797 -+ bdb0c6ce36392d36 -+VSQRTPS_256(mem) -+ before -+ c4e8bba2bda13050.8cf3c5a6e236ba0a.b0c81fb7053f6b55.d4eaedef93c21b55 -+ 5dc49b10189f4c14.98bf1ba36919393b.c4d999db7390839e.8fbc05b829b247ca -+ 6610e404623f3cac.0d37eadc490b8fa6.1a337e4f82bd51e7.44d5584589abea63 -+ ba97106bb88dbd45.45a92ebc1d99f6f6.8da34afe4ed3935a.4f80e2044f3a41cb -+ 0b0b9f6018e987ae -+ after -+ c4e8bba2bda13050.8cf3c5a6e236ba0a.b0c81fb7053f6b55.d4eaedef93c21b55 -+ ffc00000ffc00000.ffc00000ffc00000.ffc00000225d5df1.ffc00000ffc00000 -+ 6610e404623f3cac.0d37eadc490b8fa6.1a337e4f82bd51e7.44d5584589abea63 -+ ba97106bb88dbd45.45a92ebc1d99f6f6.8da34afe4ed3935a.4f80e2044f3a41cb -+ 0b0b9f6018e987ae -+ -+VSQRTPS_256(reg) -+ before -+ d6c08bc57f47f9ba.34279d2f35968b0a.9d5fe4af824eabd8.f8f577d6f4dd0223 -+ 0beca39f21ddd399.b28a073ef6656128.71a6062013b6eaf8.39f583c290e85d6f -+ 05dbe25a9a3951f7.0e8dc8821606fcca.1eca927d6d5eee01.2a6fe8ae3cfe5e6a -+ 22d9446284e6ae81.26fc5ee9b286181e.fe1783322bd1f4a0.a92e2587172ec23f -+ 90ffb3373b81451b -+ after -+ d6c08bc57f47f9ba.34279d2f35968b0a.9d5fe4af824eabd8.f8f577d6f4dd0223 -+ 22a7c3e7ffc00000.2706b7282ab9e502.2f21068e566ee4af.34f7d2ea3e347113 -+ 05dbe25a9a3951f7.0e8dc8821606fcca.1eca927d6d5eee01.2a6fe8ae3cfe5e6a -+ 22d9446284e6ae81.26fc5ee9b286181e.fe1783322bd1f4a0.a92e2587172ec23f -+ 90ffb3373b81451b -+VSQRTPS_256(mem) -+ before -+ bdaf0fabc405a22a.bd31c5237e7128e3.d4a3445ee5f0714d.6ed9d5a9ea9b3880 -+ 0a08b6d0cfc59797.3131620a2265f8c8.f64df6cdcb51c286.ca5b844f4549f54e -+ 55d7239077cddd8e.dc2316810c4e5ddd.66c8f02281b3c8f2.6eeb8d90d86668b6 -+ 78e7d2d9d92a333d.1854ddf6d8b991ce.01deaf4923243fc0.b6d3ebd9407ecd63 -+ fe609a94181e6002 -+ after -+ bdaf0fabc405a22a.bd31c5237e7128e3.d4a3445ee5f0714d.6ed9d5a9ea9b3880 -+ ffc00000ffc00000.ffc000005ef87816.ffc00000ffc00000.5726fb45ffc00000 -+ 55d7239077cddd8e.dc2316810c4e5ddd.66c8f02281b3c8f2.6eeb8d90d86668b6 -+ 78e7d2d9d92a333d.1854ddf6d8b991ce.01deaf4923243fc0.b6d3ebd9407ecd63 -+ fe609a94181e6002 -+ -+VSQRTPD_128(reg) -+ before -+ a2de962ffdd15c3e.50063f9610e753cd.4210b3d32431d146.a45cad2eccb0e21a -+ fe98dc158b24fec4.bafee7b33811fa6d.b7a39486894259f1.290e68be98626e2d -+ 6ddc67b25da28240.909c451c6eb3e447.d1587d7aa579647d.6dc05be3a4469f24 -+ 4df433720fd7245d.afacd5bdced9cd88.ee7d691b14613094.4d3d038a0b69312c -+ a353dba0ead5df70 -+ after -+ a2de962ffdd15c3e.50063f9610e753cd.4210b3d32431d146.a45cad2eccb0e21a -+ 0000000000000000.0000000000000000.fff8000000000000.56d6e13bde7e653f -+ 6ddc67b25da28240.909c451c6eb3e447.d1587d7aa579647d.6dc05be3a4469f24 -+ 4df433720fd7245d.afacd5bdced9cd88.ee7d691b14613094.4d3d038a0b69312c -+ a353dba0ead5df70 -+VSQRTPD_128(mem) -+ before -+ 4ccc5e105c99661d.f92e3cc13e4f1fc8.f3fa1382738f705b.685c54d57186f6e2 -+ 24750ac67ebe825f.cdd47e0b8597b02c.38527c577ae28aed.9c423a145875f514 -+ 071b5bad6b52ee61.2533f6bc813a1336.5b808a28feded669.e77b184466b967d6 -+ d187cbb340606850.5c979f40cdc58392.364fbbe21b8d12fc.a353e8d137de89d3 -+ 2d16a827667197b8 -+ after -+ 4ccc5e105c99661d.f92e3cc13e4f1fc8.f3fa1382738f705b.685c54d57186f6e2 -+ 0000000000000000.0000000000000000.fff8000000000000.54254a77f0f9759b -+ 071b5bad6b52ee61.2533f6bc813a1336.5b808a28feded669.e77b184466b967d6 -+ d187cbb340606850.5c979f40cdc58392.364fbbe21b8d12fc.a353e8d137de89d3 -+ 2d16a827667197b8 -+ -+VSQRTPD_128(reg) -+ before -+ e11053b38ffdcd30.5e88d8c318f5aa57.d04b750405c33deb.a68d8a6feefdf8d2 -+ 1b8ce6e04f0e66e8.8ae9fdca101c70a3.dc9d7472c7c07dee.870474bd92394516 -+ 37d75b1941319f8c.3175b6b243e17860.dbd798f8ac487f46.b581f3b7244eb4f5 -+ 913db0cc02f1b3c7.2ff97f68cd517cb9.2b46de0152e87ea0.0ccf8549bf47029a -+ 68bca55e8030eb32 -+ after -+ e11053b38ffdcd30.5e88d8c318f5aa57.d04b750405c33deb.a68d8a6feefdf8d2 -+ 0000000000000000.0000000000000000.fff8000000000000.fff8000000000000 -+ 37d75b1941319f8c.3175b6b243e17860.dbd798f8ac487f46.b581f3b7244eb4f5 -+ 913db0cc02f1b3c7.2ff97f68cd517cb9.2b46de0152e87ea0.0ccf8549bf47029a -+ 68bca55e8030eb32 -+VSQRTPD_128(mem) -+ before -+ a513cfe482162be8.850ae0642ddae046.6041d5d9cb7738db.263641f8552cb7a7 -+ 9e9f80c6e2047dea.6f8ae74d5f7960b4.a01933ef595f6af1.2af3bd4b509e6608 -+ 312d32f1bb069e61.ab09c2f3335970be.cb4d15989216cc28.91c94f65dfccc66f -+ 3989634f2a294a7c.95d26cc246074b10.bda9f7bf92a71bac.b903f1b29f411487 -+ fcefa19f2c8a8cfd -+ after -+ a513cfe482162be8.850ae0642ddae046.6041d5d9cb7738db.263641f8552cb7a7 -+ 0000000000000000.0000000000000000.5017e3d6012c1b6a.3312df0897d53a00 -+ 312d32f1bb069e61.ab09c2f3335970be.cb4d15989216cc28.91c94f65dfccc66f -+ 3989634f2a294a7c.95d26cc246074b10.bda9f7bf92a71bac.b903f1b29f411487 -+ fcefa19f2c8a8cfd -+ -+VSQRTPD_128(reg) -+ before -+ b8d75a9620326a7d.927f8ecd4a783d65.8932e026330d2e55.52f8564f761e13a8 -+ 470818041ac5e9b2.18db305838ff3248.e3761d8b97fa553a.6508ac365a886f48 -+ 06ced856b4d04648.a668c3da0fcbe652.ffe81c5e0d57fc6a.d4a3775f58f0ecba -+ 527594f68adebded.1af4c541ebe715af.39d4db0931b25e92.7a9632b68f624628 -+ 32ad5a2818eb39be -+ after -+ b8d75a9620326a7d.927f8ecd4a783d65.8932e026330d2e55.52f8564f761e13a8 -+ 0000000000000000.0000000000000000.fff8000000000000.fff8000000000000 -+ 06ced856b4d04648.a668c3da0fcbe652.ffe81c5e0d57fc6a.d4a3775f58f0ecba -+ 527594f68adebded.1af4c541ebe715af.39d4db0931b25e92.7a9632b68f624628 -+ 32ad5a2818eb39be -+VSQRTPD_128(mem) -+ before -+ dab3699f129680a9.85484a52397b894a.4f49b178e95f7a8a.ed8854faa096b85e -+ 4d76dd08966fd815.fc95f5d55c34e70e.2034036b2540d210.764f859cf68f4679 -+ 66c03150c383fd2d.13a692ea909413e3.6b813705ba95d96d.32746a5ace2a448f -+ 035ee161b2ddaa1e.27c81bff70274976.0afcca34c46a4acc.7c44fda2c4f3ed4e -+ b00b3cdf75747e60 -+ after -+ dab3699f129680a9.85484a52397b894a.4f49b178e95f7a8a.ed8854faa096b85e -+ 0000000000000000.0000000000000000.479cac7afe7ae76e.fff8000000000000 -+ 66c03150c383fd2d.13a692ea909413e3.6b813705ba95d96d.32746a5ace2a448f -+ 035ee161b2ddaa1e.27c81bff70274976.0afcca34c46a4acc.7c44fda2c4f3ed4e -+ b00b3cdf75747e60 -+ -+VSQRTPD_256(reg) -+ before -+ 2915227d7d3b3371.fe1c6a2981899c14.92478e7f987ac472.db7137e460cce35a -+ 45aeabe876d3472e.35c647934c948f3a.b16fe6d6a518c184.b9abfaffa9c65e42 -+ 5e21d38dffc9f743.8228f38b2e093fbc.e08c1f71338e7c57.7f778f72bc6577b1 -+ d2bc96d6b1a87f5b.c30eedfc43f567c8.7be936badd663098.0aa27329b5b3ecd2 -+ 37f62011aebf77d2 -+ after -+ 2915227d7d3b3371.fe1c6a2981899c14.92478e7f987ac472.db7137e460cce35a -+ 4f07e24c49692a0f.fff8000000000000.fff8000000000000.5fb36a64bdee8d70 -+ 5e21d38dffc9f743.8228f38b2e093fbc.e08c1f71338e7c57.7f778f72bc6577b1 -+ d2bc96d6b1a87f5b.c30eedfc43f567c8.7be936badd663098.0aa27329b5b3ecd2 -+ 37f62011aebf77d2 -+VSQRTPD_256(mem) -+ before -+ e0401415c692d5dd.fbc9f1302bfc1b23.d243aed4a862c488.ded3251e3f2e1bf3 -+ e34bca20163ac21e.3795df0806520647.8d94b3ff795f1228.6597ea0af6727713 -+ 1ae5bf20bcc2f9c2.e06c5cc8e1357d72.cece7967d1f50cd5.6c7f80e89ebd80a5 -+ 62d86d00d43737f5.549a65de5531bc50.72bb7bf9cc326fbb.4fd7e326d29b7454 -+ 6aed102f2e988dcd -+ after -+ e0401415c692d5dd.fbc9f1302bfc1b23.d243aed4a862c488.ded3251e3f2e1bf3 -+ fff8000000000000.fff8000000000000.fff8000000000000.fff8000000000000 -+ 1ae5bf20bcc2f9c2.e06c5cc8e1357d72.cece7967d1f50cd5.6c7f80e89ebd80a5 -+ 62d86d00d43737f5.549a65de5531bc50.72bb7bf9cc326fbb.4fd7e326d29b7454 -+ 6aed102f2e988dcd -+ -+VSQRTPD_256(reg) -+ before -+ 190c026f4f4108bb.97f152ac79a338e2.ed6bf4b500d2fe8f.552735a28721f705 -+ b87fb552d02120cc.96fce910c815b7b5.082a07b97ea580d9.54e0244c1dcf60e0 -+ a29325444ec512a9.39c5af18dc96719b.022499566a367eda.49b0c2e5ab476577 -+ 35954eb164b81a01.5d181eb0d13422c0.35a6a7f8600f343f.11658d574d95c3f7 -+ 88c900901dc5368c -+ after -+ 190c026f4f4108bb.97f152ac79a338e2.ed6bf4b500d2fe8f.552735a28721f705 -+ fff8000000000000.3cda577c1d6f624b.2109ac9bc095d5b7.44d06050ef3b99f9 -+ a29325444ec512a9.39c5af18dc96719b.022499566a367eda.49b0c2e5ab476577 -+ 35954eb164b81a01.5d181eb0d13422c0.35a6a7f8600f343f.11658d574d95c3f7 -+ 88c900901dc5368c -+VSQRTPD_256(mem) -+ before -+ 8aa9987b39e47961.cccf2d05af86747e.dec1b4c5c4fa8650.fefa2b0bfdbeddb4 -+ f3d1cf04bdfd4aa3.c38dbdaccabb5bcc.988bec41d1f55876.ba6d23fbddcfb6e4 -+ 9f0d2317c41d637d.751dfa1352e40c98.674442111330555e.c34a8a359bcdfb7c -+ 6a280fa06b4f801c.40c9e0a4e28cc38e.27b63222a6b73935.76df5c23d344e727 -+ 2f76953322c0b892 -+ after -+ 8aa9987b39e47961.cccf2d05af86747e.dec1b4c5c4fa8650.fefa2b0bfdbeddb4 -+ fff8000000000000.fff8000000000000.fff8000000000000.fff8000000000000 -+ 9f0d2317c41d637d.751dfa1352e40c98.674442111330555e.c34a8a359bcdfb7c -+ 6a280fa06b4f801c.40c9e0a4e28cc38e.27b63222a6b73935.76df5c23d344e727 -+ 2f76953322c0b892 -+ -+VSQRTPD_256(reg) -+ before -+ 4a5c32cf23cea869.30f00f8bcd9f5fac.7fdf6bcd1740bc59.b4ae395fa797c027 -+ 23de2e6573f9f357.cd2f9fc5071aba58.8da998f88c8b32a6.eaf8d1b431daa560 -+ 16458560adcdd709.1db23c3834cb4d4d.c8746293ddf96221.a55f780d618fa50b -+ 7fe0332c6ed78e2a.fc4561d270bed6b6.8a8cc509a7178875.c1b1aa5552bf7b54 -+ 1ab8e17b2178e568 -+ after -+ 4a5c32cf23cea869.30f00f8bcd9f5fac.7fdf6bcd1740bc59.b4ae395fa797c027 -+ 2b1a3e18b9cb8e5e.2ed114c27afe12c2.fff8000000000000.fff8000000000000 -+ 16458560adcdd709.1db23c3834cb4d4d.c8746293ddf96221.a55f780d618fa50b -+ 7fe0332c6ed78e2a.fc4561d270bed6b6.8a8cc509a7178875.c1b1aa5552bf7b54 -+ 1ab8e17b2178e568 -+VSQRTPD_256(mem) -+ before -+ 8c419b68e9c69d73.bafa353551a25467.46b48a7dd8000fc0.313cbec68670df4e -+ f3185309c7b360a0.23de85e7f3ba676c.d7ca3327879cb597.17d247361590a45a -+ 2a09854ad64de91c.16da21aeefac01e4.8b55d9bb9a9e8466.9a985ec5f0031343 -+ 0fe0ad1832a0f513.ef3804f7e2035f7c.3d1ff6252d13375a.14dcfee0b45668b5 -+ e2e823f1fc15de5d -+ after -+ 8c419b68e9c69d73.bafa353551a25467.46b48a7dd8000fc0.313cbec68670df4e -+ fff8000000000000.fff8000000000000.435220fd41798f09.38957221ad0f32df -+ 2a09854ad64de91c.16da21aeefac01e4.8b55d9bb9a9e8466.9a985ec5f0031343 -+ 0fe0ad1832a0f513.ef3804f7e2035f7c.3d1ff6252d13375a.14dcfee0b45668b5 -+ e2e823f1fc15de5d -+ -+VRSQRTSS_128(reg) -+ before -+ 6109ca6565cab2e7.7d69475df9b640b0.0a452b2c674cbddf.cbf508515b068b9e -+ eb8aeda98a0320fe.506fd007449d8620.c34d90bb1a1256ba.10a38a2b40833c5f -+ ddb98a28084c634f.63bfc3013161828e.759b310e98e167b9.e8f5f99ff99706c8 -+ 94e09c4d7a2fb985.94259c37dc0df227.7e7d09937d452c87.2eb7cf99a14da407 -+ c0b48a0655b1d345 -+ after -+ 0000000000000000.0000000000000000.c34d90bb1a1256ba.10a38a2bffc00000 -+ eb8aeda98a0320fe.506fd007449d8620.c34d90bb1a1256ba.10a38a2b40833c5f -+ ddb98a28084c634f.63bfc3013161828e.759b310e98e167b9.e8f5f99ff99706c8 -+ 94e09c4d7a2fb985.94259c37dc0df227.7e7d09937d452c87.2eb7cf99a14da407 -+ c0b48a0655b1d345 -+VRSQRTSS_128(mem) -+ before -+ 78baa5d030d04fb1.6a4d20867d3a5b4d.bd6dd8955fad8f17.393d14b564cbe1d0 -+ 34939ce54eb5d374.bc4a103eacf98853.bc63f107d94d1889.02284fdfe9fec142 -+ ce0cec2fcc6d1cbd.e6246ae1a4f77a42.6cd3657964fa47a9.348ab47fa96b0987 -+ 24f10f9cc602e6b6.442729db00c06ec7.a888afd71cbfd9a5.2daf41013f9df44b -+ 48e3f1cf4820c03b -+ after -+ 78baa5d030d04fb1.6a4d20867d3a5b4d.bd6dd8955fad8f17.393d14b564cbe1d0 -+ 34939ce54eb5d374.bc4a103eacf98853.bc63f107d94d1889.02284fdfe9fec142 -+ 0000000000000000.0000000000000000.bc63f107d94d1889.02284fdf2ccad000 -+ 24f10f9cc602e6b6.442729db00c06ec7.a888afd71cbfd9a5.2daf41013f9df44b -+ 48e3f1cf4820c03b -+ -+VRSQRTSS_128(reg) -+ before -+ e072c1566081a703.100e83175782ed8c.329e49985ce0a08d.4e504c0d1ea88aa7 -+ 53a7ab02214be64e.702ec38c9cf9ec6a.0cd7c78555e44c41.38f5b60885c215db -+ fbcfad402a0ab8c9.1e1f4ce7b072a07d.2e1c9d0c8757ad8f.43446bb26e18386e -+ 3637c27a144a5b20.f8ab9814aff9c5f0.f4bac99b8dc50022.4c09e6f9f4b7ac8c -+ 2d0fa3c734a93060 -+ after -+ 0000000000000000.0000000000000000.0cd7c78555e44c41.38f5b60828260000 -+ 53a7ab02214be64e.702ec38c9cf9ec6a.0cd7c78555e44c41.38f5b60885c215db -+ fbcfad402a0ab8c9.1e1f4ce7b072a07d.2e1c9d0c8757ad8f.43446bb26e18386e -+ 3637c27a144a5b20.f8ab9814aff9c5f0.f4bac99b8dc50022.4c09e6f9f4b7ac8c -+ 2d0fa3c734a93060 -+VRSQRTSS_128(mem) -+ before -+ c3241e0a49fd7e17.5e28e61e7d9809fe.d89f25ffb69a16f0.bafd469c03bb81a7 -+ eb12d4ad50bc53dc.d1f115970180fe0f.9bc76e95e06250a9.dc31117d86c46bc9 -+ 7fa6409c64f46bdc.e9dd4c503b8c7801.1defefc04a5c2f46.b6a224a9b26dfb35 -+ 5caddec3a1b08243.033786b7c84ab17d.3be2256e10956ff4.a49c7d8b21406d97 -+ 026a179172ccfc9a -+ after -+ c3241e0a49fd7e17.5e28e61e7d9809fe.d89f25ffb69a16f0.bafd469c03bb81a7 -+ eb12d4ad50bc53dc.d1f115970180fe0f.9bc76e95e06250a9.dc31117d86c46bc9 -+ 0000000000000000.0000000000000000.9bc76e95e06250a9.dc31117d5d537800 -+ 5caddec3a1b08243.033786b7c84ab17d.3be2256e10956ff4.a49c7d8b21406d97 -+ 026a179172ccfc9a -+ -+VRSQRTSS_128(reg) -+ before -+ 2c59ee263f9ae6eb.5ef02a0e24fd533c.7c4dbf374346e632.cf6e8a894c18cbde -+ 7db5feb724386535.623ea06909e69bf4.ae69f33c480a53ca.b65d9cff1df10031 -+ 53ca44aebd31b525.4262bdc16b771596.f6d81f33742433f2.cc7dd6bb9c2cca19 -+ 09e4bb78a8121467.db27fc0066bc7f4f.b0e63d866320c355.ed98b4a9e8d6e4c1 -+ f57ab3b51afb0c56 -+ after -+ 0000000000000000.0000000000000000.ae69f33c480a53ca.b65d9cffffc00000 -+ 7db5feb724386535.623ea06909e69bf4.ae69f33c480a53ca.b65d9cff1df10031 -+ 53ca44aebd31b525.4262bdc16b771596.f6d81f33742433f2.cc7dd6bb9c2cca19 -+ 09e4bb78a8121467.db27fc0066bc7f4f.b0e63d866320c355.ed98b4a9e8d6e4c1 -+ f57ab3b51afb0c56 -+VRSQRTSS_128(mem) -+ before -+ c0f14ecb50a5fc04.fb4f5f827e66bca6.095bd91417c2934b.39df4ba2b0883fa0 -+ 2ac801d7a6e270f6.84562c36ddb9ea8e.a8c8d0e79a950eb5.eb0e45f4f7eae27e -+ 0fca48c537bd2658.02471f026197d9cd.943b5e67093fabba.23c025e6d5d2e99c -+ 4bc49f812043d857.cf6c3250a58dc60d.a980fe7f83ce2785.3d42e9e6e5cb90a6 -+ 95de8b5fc4611347 -+ after -+ c0f14ecb50a5fc04.fb4f5f827e66bca6.095bd91417c2934b.39df4ba2b0883fa0 -+ 2ac801d7a6e270f6.84562c36ddb9ea8e.a8c8d0e79a950eb5.eb0e45f4f7eae27e -+ 0000000000000000.0000000000000000.a8c8d0e79a950eb5.eb0e45f4ffc00000 -+ 4bc49f812043d857.cf6c3250a58dc60d.a980fe7f83ce2785.3d42e9e6e5cb90a6 -+ 95de8b5fc4611347 -+ -+VRSQRTPS_128(reg) -+ before -+ 87e109bc0d20ad2c.ba8283f87c7f421f.4912638e4626edfa.c3622c1b224d3e43 -+ 6f975f6b5d959b00.38d06f14677d22db.cb85ad27dfef8a41.beaf642702c9ac20 -+ a94b87d74f4b1970.a17adfc3fe4a32b8.b0100d870c73d98e.7631228f404d2c47 -+ 914b7f6c80ce6328.d14c4ff05df12fe2.56017d1a6a3e158c.c6b5e33ff7e57be5 -+ 8c072223439e5525 -+ after -+ 87e109bc0d20ad2c.ba8283f87c7f421f.4912638e4626edfa.c3622c1b224d3e43 -+ 0000000000000000.0000000000000000.ffc0000059032800.2419d8003f0ef800 -+ a94b87d74f4b1970.a17adfc3fe4a32b8.b0100d870c73d98e.7631228f404d2c47 -+ 914b7f6c80ce6328.d14c4ff05df12fe2.56017d1a6a3e158c.c6b5e33ff7e57be5 -+ 8c072223439e5525 -+VRSQRTPS_128(mem) -+ before -+ a3f35b2742837634.83e142978babb4d3.a4113b879f7ed584.17a2fb4c94dd7be8 -+ e7450a380da0993e.db5accc20d6d491e.f5972073e0fedfcb.5040828927db464e -+ 33c9ac40c2027b6e.f502195aa1a15db4.a2a879a23d7c0ae2.5e270e3ebfc4b369 -+ 654abc2d7db4d8f1.2c2526cce3d22e42.8611c200d10412f6.9ba39cd5f625fee5 -+ 640027bc6b896370 -+ after -+ a3f35b2742837634.83e142978babb4d3.a4113b879f7ed584.17a2fb4c94dd7be8 -+ 0000000000000000.0000000000000000.ffc00000ffc00000.5362e800ffc00000 -+ 33c9ac40c2027b6e.f502195aa1a15db4.a2a879a23d7c0ae2.5e270e3ebfc4b369 -+ 654abc2d7db4d8f1.2c2526cce3d22e42.8611c200d10412f6.9ba39cd5f625fee5 -+ 640027bc6b896370 -+ -+VRSQRTPS_128(reg) -+ before -+ 168aaa5db77c1eb3.5895b6ea59c26bf2.de0fee83708cf673.7d9e7877b9a3b333 -+ 0b8c2426798b6a5d.e77616637239f19e.660b6deae45bf2f5.621a15f41064a8c4 -+ a0538e824a418418.f0b95884e5242620.20669f6fdacc5d71.13531763f353aed5 -+ 312ce5ddc92aa790.4e2af939ce90c5a5.676d807dee6a7596.6a13f9b17d7d8194 -+ 452737c8cbeddc2b -+ after -+ 168aaa5db77c1eb3.5895b6ea59c26bf2.de0fee83708cf673.7d9e7877b9a3b333 -+ 0000000000000000.0000000000000000.4f06e000ffc00000.558cf800ffc00000 -+ a0538e824a418418.f0b95884e5242620.20669f6fdacc5d71.13531763f353aed5 -+ 312ce5ddc92aa790.4e2af939ce90c5a5.676d807dee6a7596.6a13f9b17d7d8194 -+ 452737c8cbeddc2b -+VRSQRTPS_128(mem) -+ before -+ 7f5b4e96f8b07cc6.1a6126a38fd31173.dc95746e47878c59.996a0d80bdc2740e -+ f37bb80620d01d92.b83e4c403ac7fc6a.78c5450f6f173567.11aa41e4e25f9685 -+ 7e53f304605c7bbb.651153206692a424.fc88e808604c7cfc.2a781815facd19a8 -+ fdaf7a7cd45d516c.7e2538b0aec1474b.46a8d94636311f44.42228e7fa1993723 -+ b3f2a08f714e2da1 -+ after -+ 7f5b4e96f8b07cc6.1a6126a38fd31173.dc95746e47878c59.996a0d80bdc2740e -+ 0000000000000000.0000000000000000.ffc000003b78c000.ffc00000ffc00000 -+ 7e53f304605c7bbb.651153206692a424.fc88e808604c7cfc.2a781815facd19a8 -+ fdaf7a7cd45d516c.7e2538b0aec1474b.46a8d94636311f44.42228e7fa1993723 -+ b3f2a08f714e2da1 -+ -+VRSQRTPS_128(reg) -+ before -+ db3648af097836cf.4a5aca5a97e15cd2.5fc5f55aaedf1f8b.30f295b30ed2d86a -+ 1438844d02a38f59.43215d8ac5f35818.643e888b03796992.9732973d033b649a -+ bc4550d3fa5c74ea.c2d1b1f87b9f006c.e9dcecb049196109.58335bce32797f02 -+ 2da9a6af8d2f212e.a4344190d5f211f7.4aeb1e341b4e429f.4dc35e54b697e4cc -+ 53ac1abaaba25024 -+ after -+ db3648af097836cf.4a5aca5a97e15cd2.5fc5f55aaedf1f8b.30f295b30ed2d86a -+ 0000000000000000.0000000000000000.ffc000003aa55800.3318f0004601b000 -+ bc4550d3fa5c74ea.c2d1b1f87b9f006c.e9dcecb049196109.58335bce32797f02 -+ 2da9a6af8d2f212e.a4344190d5f211f7.4aeb1e341b4e429f.4dc35e54b697e4cc -+ 53ac1abaaba25024 -+VRSQRTPS_128(mem) -+ before -+ 47bb0dec2ea57f37.c5af844c56a6d2d3.c616893fedf747e7.e3b7188215a149fe -+ 03bdb2d65bac2c31.dea5e516f24fc282.024505efe2bb5e68.0f8bd808d4a0b2d2 -+ 647b85644dc3143d.d5d5c579fcb62eea.358c328ece4911a6.2cb55931f3d6b9c8 -+ 46c4038221f7f388.078c20e1106551b5.3bb68b07cdad1dcc.957f97690fcf998c -+ a6368e1cc3188fca -+ after -+ 47bb0dec2ea57f37.c5af844c56a6d2d3.c616893fedf747e7.e3b7188215a149fe -+ 0000000000000000.0000000000000000.ffc00000ffc00000.ffc0000054640800 -+ 647b85644dc3143d.d5d5c579fcb62eea.358c328ece4911a6.2cb55931f3d6b9c8 -+ 46c4038221f7f388.078c20e1106551b5.3bb68b07cdad1dcc.957f97690fcf998c -+ a6368e1cc3188fca -+ -+VRSQRTPS_256(reg) -+ before -+ bb263bb7ac3dd62d.8563a61df253853d.ce16f2bacbea6990.f0908c45fcf43e06 -+ 2f9b99a465c8ac61.fd23ec1fdce48589.87bf3870c9d1b026.30e6b13676282f82 -+ 60e0a4508b474b13.8ad25076fcb5b098.8ed3ed6fa5a46224.d78477c55858ae69 -+ a9435828b945f0ef.083a4f0c6dd2c295.409d0d24fbf1bd35.c23659debd8d75ea -+ cbc7d36dc1d5402f -+ after -+ bb263bb7ac3dd62d.8563a61df253853d.ce16f2bacbea6990.f0908c45fcf43e06 -+ 2ec13800ffc00000.ffc00000ffc00000.ffc00000ffc00000.ffc00000330b2000 -+ 60e0a4508b474b13.8ad25076fcb5b098.8ed3ed6fa5a46224.d78477c55858ae69 -+ a9435828b945f0ef.083a4f0c6dd2c295.409d0d24fbf1bd35.c23659debd8d75ea -+ cbc7d36dc1d5402f -+VRSQRTPS_256(mem) -+ before -+ cf05615f813bcd64.650eb2968b4fd6a0.532863cf4c4877ad.f76b95fa6844fb06 -+ a9ba7f9e19ccd6b6.f28eac089ff03bd3.47680aaab4228a0b.10877f5c87275943 -+ 37b3aa17a4931751.aa0f44e98eb45934.c0c5bf89c26cb8dc.e73ec9b8f5291397 -+ 54bc5db73e9c4e61.ebdd75a5f6276c6e.9a0dfe589133bc4c.d8dc6e794dd364af -+ 3fad6a0b2cb38936 -+ after -+ cf05615f813bcd64.650eb2968b4fd6a0.532863cf4c4877ad.f76b95fa6844fb06 -+ ffc00000ffc00000.2cab7000ffc00000.359dd0003910a800.ffc000002b11f000 -+ 37b3aa17a4931751.aa0f44e98eb45934.c0c5bf89c26cb8dc.e73ec9b8f5291397 -+ 54bc5db73e9c4e61.ebdd75a5f6276c6e.9a0dfe589133bc4c.d8dc6e794dd364af -+ 3fad6a0b2cb38936 -+ -+VRSQRTPS_256(reg) -+ before -+ 78fcbada2d54bed9.dca1146904f43511.0f443ca873d6b22d.b10a44033e825486 -+ df175852ed423e44.ab2d4b1812a6898d.7490935e9f4d651f.e1890b76e4653ab7 -+ d04842df070a4722.9d2e7eb283be0602.740c78331916c2ee.0656d19da0e92b0a -+ a7dc73ed18371320.8e6e2a227349679c.6d05e6937bbf0446.fc3d11658d19e2ac -+ 9e0a48b8c8011cc8 -+ after -+ 78fcbada2d54bed9.dca1146904f43511.0f443ca873d6b22d.b10a44033e825486 -+ ffc000005bae2000.ffc00000ffc00000.252cd00052a6c800.5c0bb800ffc00000 -+ d04842df070a4722.9d2e7eb283be0602.740c78331916c2ee.0656d19da0e92b0a -+ a7dc73ed18371320.8e6e2a227349679c.6d05e6937bbf0446.fc3d11658d19e2ac -+ 9e0a48b8c8011cc8 -+VRSQRTPS_256(mem) -+ before -+ ca89f0846cae958b.bf1fe8e9bb56dee9.59baca54ff526986.b9c7d9eb61d469d4 -+ 5b8587b3952b0921.765d9b3d8cf2e62a.dcdeda3442e5c8ed.b59e4ea568df2b44 -+ 2ccb8833608433b6.27e28a572897658e.f2a6d6ae590f40fd.bed6402f2b6e8641 -+ 1b276fefe9c6d174.2ef9b0a22bd197c3.76de3baf5fdb8ce1.2ebbabf3470db878 -+ 62988b5f5746fb94 -+ after -+ ca89f0846cae958b.bf1fe8e9bb56dee9.59baca54ff526986.b9c7d9eb61d469d4 -+ ffc0000028db3800.ffc00000ffc00000.3253e800ffc00000.ffc000002e46b800 -+ 2ccb8833608433b6.27e28a572897658e.f2a6d6ae590f40fd.bed6402f2b6e8641 -+ 1b276fefe9c6d174.2ef9b0a22bd197c3.76de3baf5fdb8ce1.2ebbabf3470db878 -+ 62988b5f5746fb94 -+ -+VRSQRTPS_256(reg) -+ before -+ b6badcdef8a78c42.0365b8d34bfc9c8a.e7f00989302dba72.46518421715669c6 -+ 876d9bdcc5bca72e.bf51e0cba2325322.ad11927ad336084a.3ccd2df1aa8a93d7 -+ 2ffdc2c55b0f8703.2db762c30b75b069.dea946e0b179bef5.361cb20c2785c541 -+ 0bb64f05552e696e.2762baa7a1d0708a.d50420276581181f.0f0b8f5d0353bc2f -+ a26641cf5aff34ce -+ after -+ b6badcdef8a78c42.0365b8d34bfc9c8a.e7f00989302dba72.46518421715669c6 -+ 4735d00031aaf000.4855d8005982a800.ffc00000ffc00000.4423a0004b7a6000 -+ 2ffdc2c55b0f8703.2db762c30b75b069.dea946e0b179bef5.361cb20c2785c541 -+ 0bb64f05552e696e.2762baa7a1d0708a.d50420276581181f.0f0b8f5d0353bc2f -+ a26641cf5aff34ce -+VRSQRTPS_256(mem) -+ before -+ ccf943504995e94a.77e43d084fa5891a.8b20646381504fb2.ed6e1ebb8cda5175 -+ 6a8f11cbec2196ce.cfd2893ae6ff22b4.33bbdde4c7ff080c.84323c09c110a7a3 -+ 56f6272c5eb0f887.6fce2e08b6c871e8.fc009f148dec59c5.f49e747ba1b05354 -+ 6ef8025fbb4dcba1.b32227dc5a8cb261.c3bb28e1f220fb09.9bfcc47ec7469435 -+ d399277fd05ca4f2 -+ after -+ ccf943504995e94a.77e43d084fa5891a.8b20646381504fb2.ed6e1ebb8cda5175 -+ ffc000003a6c8800.233fb80037611800.ffc00000ffc00000.ffc00000ffc00000 -+ 56f6272c5eb0f887.6fce2e08b6c871e8.fc009f148dec59c5.f49e747ba1b05354 -+ 6ef8025fbb4dcba1.b32227dc5a8cb261.c3bb28e1f220fb09.9bfcc47ec7469435 -+ d399277fd05ca4f2 -+ -diff --git a/none/tests/amd64/avx_estimate_insn.vgtest b/none/tests/amd64/avx_estimate_insn.vgtest -new file mode 100644 -index 000000000..e2e71a240 ---- /dev/null -+++ b/none/tests/amd64/avx_estimate_insn.vgtest -@@ -0,0 +1,3 @@ -+prog: avx_estimate_insn -+vgopts: -q -+ -diff --git a/none/tests/amd64/avx_tests.h b/none/tests/amd64/avx_tests.h -new file mode 100644 -index 000000000..a38f9ab78 ---- /dev/null -+++ b/none/tests/amd64/avx_tests.h -@@ -0,0 +1,133 @@ -+#include -+#include -+#include -+#include "tests/malloc.h" -+ -+typedef unsigned char UChar; -+typedef unsigned int UInt; -+typedef unsigned long int UWord; -+typedef unsigned long long int ULong; -+ -+#define IS_32_ALIGNED(_ptr) (0 == (0x1F & (UWord)(_ptr))) -+ -+typedef union { UChar u8[32]; UInt u32[8]; } YMM; -+ -+typedef struct { YMM a1; YMM a2; YMM a3; YMM a4; ULong u64; } Block; -+ -+void showYMM ( YMM* vec ) -+{ -+ int i; -+ assert(IS_32_ALIGNED(vec)); -+ for (i = 31; i >= 0; i--) { -+ printf("%02x", (UInt)vec->u8[i]); -+ if (i > 0 && 0 == ((i+0) & 7)) printf("."); -+ } -+} -+ -+void showBlock ( char* msg, Block* block ) -+{ -+ printf(" %s\n", msg); -+ printf(" "); showYMM(&block->a1); printf("\n"); -+ printf(" "); showYMM(&block->a2); printf("\n"); -+ printf(" "); showYMM(&block->a3); printf("\n"); -+ printf(" "); showYMM(&block->a4); printf("\n"); -+ printf(" %016llx\n", block->u64); -+} -+ -+UChar randUChar ( void ) -+{ -+ static UInt seed = 80021; -+ seed = 1103515245 * seed + 12345; -+ return (seed >> 17) & 0xFF; -+} -+ -+void randBlock ( Block* b ) -+{ -+ int i; -+ UChar* p = (UChar*)b; -+ for (i = 0; i < sizeof(Block); i++) -+ p[i] = randUChar(); -+} -+ -+/* Generate a function test_NAME, that tests the given insn, in both -+ its mem and reg forms. The reg form of the insn may mention, as -+ operands only %ymm6, %ymm7, %ymm8, %ymm9 and %r14. The mem form of -+ the insn may mention as operands only (%rsi), %ymm7, %ymm8, %ymm9 -+ and %r14. It's OK for the insn to clobber ymm0, rax and rdx, as these -+ are needed for testing PCMPxSTRx, and ymm6, as this is needed for testing -+ MOVMASK variants. */ -+ -+#define GEN_test_RandM(_name, _reg_form, _mem_form) \ -+ \ -+ __attribute__ ((noinline)) static void test_##_name ( void ) \ -+ { \ -+ Block* b = memalign32(sizeof(Block)); \ -+ randBlock(b); \ -+ printf("%s(reg)\n", #_name); \ -+ showBlock("before", b); \ -+ __asm__ __volatile__( \ -+ "vmovdqa 0(%0),%%ymm7" "\n\t" \ -+ "vmovdqa 32(%0),%%ymm8" "\n\t" \ -+ "vmovdqa 64(%0),%%ymm6" "\n\t" \ -+ "vmovdqa 96(%0),%%ymm9" "\n\t" \ -+ "movq 128(%0),%%r14" "\n\t" \ -+ _reg_form "\n\t" \ -+ "vmovdqa %%ymm7, 0(%0)" "\n\t" \ -+ "vmovdqa %%ymm8, 32(%0)" "\n\t" \ -+ "vmovdqa %%ymm6, 64(%0)" "\n\t" \ -+ "vmovdqa %%ymm9, 96(%0)" "\n\t" \ -+ "movq %%r14, 128(%0)" "\n\t" \ -+ : /*OUT*/ \ -+ : /*IN*/"r"(b) \ -+ : /*TRASH*/"xmm0","xmm7","xmm8","xmm6","xmm9","r14","memory","cc", \ -+ "rax","rdx" \ -+ ); \ -+ showBlock("after", b); \ -+ randBlock(b); \ -+ printf("%s(mem)\n", #_name); \ -+ showBlock("before", b); \ -+ __asm__ __volatile__( \ -+ "leaq 0(%0),%%rsi" "\n\t" \ -+ "vmovdqa 32(%0),%%ymm8" "\n\t" \ -+ "vmovdqa 64(%0),%%ymm7" "\n\t" \ -+ "vmovdqa 96(%0),%%ymm9" "\n\t" \ -+ "movq 128(%0),%%r14" "\n\t" \ -+ _mem_form "\n\t" \ -+ "vmovdqa %%ymm8, 32(%0)" "\n\t" \ -+ "vmovdqa %%ymm7, 64(%0)" "\n\t" \ -+ "vmovdqa %%ymm9, 96(%0)" "\n\t" \ -+ "movq %%r14, 128(%0)" "\n\t" \ -+ : /*OUT*/ \ -+ : /*IN*/"r"(b) \ -+ : /*TRASH*/"xmm6", \ -+ "xmm0","xmm8","xmm7","xmm9","r14","rsi","memory","cc", \ -+ "rax","rdx" \ -+ ); \ -+ showBlock("after", b); \ -+ printf("\n"); \ -+ free(b); \ -+ } -+ -+#define GEN_test_Ronly(_name, _reg_form) \ -+ GEN_test_RandM(_name, _reg_form, "") -+#define GEN_test_Monly(_name, _mem_form) \ -+ GEN_test_RandM(_name, "", _mem_form) -+ -+/* Comment duplicated above, for convenient reference: -+ Allowed operands in test insns: -+ Reg form: %ymm6, %ymm7, %ymm8, %ymm9 and %r14. -+ Mem form: (%rsi), %ymm7, %ymm8, %ymm9 and %r14. -+ Imm8 etc fields are also allowed, where they make sense. -+ Both forms may use ymm0, rax and rdx as scratch. -+ Mem form may also use ymm6 as scratch. -+*/ -+ -+#define N_DEFAULT_ITERS 3 -+ -+// Do the specified test some number of times -+#define DO_N(_iters, _testfn) \ -+ do { int i; for (i = 0; i < (_iters); i++) { test_##_testfn(); } } while (0) -+ -+// Do the specified test the default number of times -+#define DO_D(_testfn) DO_N(N_DEFAULT_ITERS, _testfn) -+ -commit ce094ba912b1fb1539242e4d6b2a76c513a3d132 -Author: Mark Wielaard -Date: Sat Jan 25 17:19:11 2020 +0100 - - none/tests/amd64/avx_estimate_insn.vgtest: Add missing prereq. - - This test only works when the processor actually implements AVX. - -diff --git a/none/tests/amd64/avx_estimate_insn.vgtest b/none/tests/amd64/avx_estimate_insn.vgtest -index e2e71a240..f5d75f2ec 100644 ---- a/none/tests/amd64/avx_estimate_insn.vgtest -+++ b/none/tests/amd64/avx_estimate_insn.vgtest -@@ -1,3 +1,3 @@ - prog: avx_estimate_insn - vgopts: -q -- -+prereq: ../../../tests/x86_amd64_features amd64-avx diff --git a/valgrind-3.15.0-copy_file_range.patch b/valgrind-3.15.0-copy_file_range.patch deleted file mode 100644 index 6cf9827..0000000 --- a/valgrind-3.15.0-copy_file_range.patch +++ /dev/null @@ -1,374 +0,0 @@ -commit 5f00db054a6f59502e9deeeb59ace2261207ee31 -Author: Alexandra Hajkova -Date: Thu May 2 08:24:02 2019 -0400 - - Add support for the copy_file_range syscall - - Support amd64, x86, arm64, ppc64, ppc32 and s390x architectures. - Also add sys-copy_file_range test case. - -diff --git a/configure.ac b/configure.ac -index d043ce3..3528925 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -4172,6 +4172,7 @@ AC_CHECK_FUNCS([ \ - utimensat \ - process_vm_readv \ - process_vm_writev \ -+ copy_file_range \ - ]) - - # AC_CHECK_LIB adds any library found to the variable LIBS, and links these -@@ -4187,6 +4188,8 @@ AM_CONDITIONAL([HAVE_PTHREAD_SPINLOCK], - [test x$ac_cv_func_pthread_spin_lock = xyes]) - AM_CONDITIONAL([HAVE_PTHREAD_SETNAME_NP], - [test x$ac_cv_func_pthread_setname_np = xyes]) -+AM_CONDITIONAL([HAVE_COPY_FILE_RANGE], -+ [test x$ac_cv_func_copy_file_range = xyes]) - - if test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \ - -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX ; then -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index f76191a..1edf9eb 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -379,6 +379,7 @@ DECL_TEMPLATE(linux, sys_getsockname); - DECL_TEMPLATE(linux, sys_getpeername); - DECL_TEMPLATE(linux, sys_socketpair); - DECL_TEMPLATE(linux, sys_kcmp); -+DECL_TEMPLATE(linux, sys_copy_file_range); - - // Some arch specific functions called from syswrap-linux.c - extern Int do_syscall_clone_x86_linux ( Word (*fn)(void *), -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 30e7d0e..0c1d8d1 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -863,6 +863,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_statx, sys_statx), // 332 - - LINX_(__NR_membarrier, sys_membarrier), // 324 -+ -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 326 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 290320a..f66be2d 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -819,7 +819,7 @@ static SyscallTableEntry syscall_main_table[] = { - // (__NR_userfaultfd, sys_ni_syscall), // 282 - LINX_(__NR_membarrier, sys_membarrier), // 283 - // (__NR_mlock2, sys_ni_syscall), // 284 -- // (__NR_copy_file_range, sys_ni_syscall), // 285 -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 285 - // (__NR_preadv2, sys_ni_syscall), // 286 - // (__NR_pwritev2, sys_ni_syscall), // 287 - // (__NR_pkey_mprotect, sys_ni_syscall), // 288 -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 73ef98d..cd0ee74 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -12093,6 +12093,36 @@ POST(sys_bpf) - } - } - -+PRE(sys_copy_file_range) -+{ -+ PRINT("sys_copy_file_range (%lu, %lu, %lu, %lu, %lu, %lu)", ARG1, ARG2, ARG3, -+ ARG4, ARG5, ARG6); -+ -+ PRE_REG_READ6(vki_size_t, "copy_file_range", -+ int, "fd_in", -+ vki_loff_t *, "off_in", -+ int, "fd_out", -+ vki_loff_t *, "off_out", -+ vki_size_t, "len", -+ unsigned int, "flags"); -+ -+ /* File descriptors are "specially" tracked by valgrind. -+ valgrind itself uses some, so make sure someone didn't -+ put in one of our own... */ -+ if (!ML_(fd_allowed)(ARG1, "copy_file_range(fd_in)", tid, False) || -+ !ML_(fd_allowed)(ARG3, "copy_file_range(fd_in)", tid, False)) { -+ SET_STATUS_Failure( VKI_EBADF ); -+ } else { -+ /* Now see if the offsets are defined. PRE_MEM_READ will -+ double check it can dereference them. */ -+ if (ARG2 != 0) -+ PRE_MEM_READ( "copy_file_range(off_in)", ARG2, sizeof(vki_loff_t)); -+ if (ARG4 != 0) -+ PRE_MEM_READ( "copy_file_range(off_out)", ARG4, sizeof(vki_loff_t)); -+ } -+} -+ -+ - #undef PRE - #undef POST - -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index f812f1f..71f208d 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1021,6 +1021,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_getrandom, sys_getrandom), // 359 - LINXY(__NR_memfd_create, sys_memfd_create), // 360 - -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 379 -+ - LINXY(__NR_statx, sys_statx), // 383 - }; - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index eada099..1a42c1f 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1007,6 +1007,8 @@ static SyscallTableEntry syscall_table[] = { - - LINX_(__NR_membarrier, sys_membarrier), // 365 - -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 379 -+ - LINXY(__NR_statx, sys_statx), // 383 - }; - -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index ad78384..41ada8d 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -854,6 +854,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_recvmsg, sys_recvmsg), // 372 - LINX_(__NR_shutdown, sys_shutdown), // 373 - -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 375 -+ - LINXY(__NR_statx, sys_statx), // 379 - }; - -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index f05619e..f8d97ea 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1608,6 +1608,8 @@ static SyscallTableEntry syscall_table[] = { - - LINX_(__NR_membarrier, sys_membarrier), // 375 - -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 377 -+ - LINXY(__NR_statx, sys_statx), // 383 - - /* Explicitly not supported on i386 yet. */ -diff --git a/memcheck/tests/linux/Makefile.am b/memcheck/tests/linux/Makefile.am -index d7515d9..00e99a5 100644 ---- a/memcheck/tests/linux/Makefile.am -+++ b/memcheck/tests/linux/Makefile.am -@@ -20,6 +20,7 @@ EXTRA_DIST = \ - stack_switch.stderr.exp stack_switch.vgtest \ - syscalls-2007.vgtest syscalls-2007.stderr.exp \ - syslog-syscall.vgtest syslog-syscall.stderr.exp \ -+ sys-copy_file_range.vgtest sys-copy_file_range.stderr.exp \ - sys-openat.vgtest sys-openat.stderr.exp sys-openat.stdout.exp \ - sys-statx.vgtest sys-statx.stderr.exp \ - timerfd-syscall.vgtest timerfd-syscall.stderr.exp \ -@@ -49,6 +50,10 @@ if HAVE_AT_FDCWD - check_PROGRAMS += sys-openat - endif - -+if HAVE_COPY_FILE_RANGE -+ check_PROGRAMS += sys-copy_file_range -+endif -+ - AM_CFLAGS += $(AM_FLAG_M3264_PRI) - AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) - -diff --git a/memcheck/tests/linux/sys-copy_file_range.c b/memcheck/tests/linux/sys-copy_file_range.c -new file mode 100644 -index 0000000..83981c6 ---- /dev/null -+++ b/memcheck/tests/linux/sys-copy_file_range.c -@@ -0,0 +1,67 @@ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include -+ -+int main(int argc, char **argv) -+{ -+ int fd_in, fd_out; -+ struct stat stat; -+ loff_t len, ret; -+ -+ fd_in = open("copy_file_range_source", O_CREAT | O_RDWR); -+ if (fd_in == -1) { -+ perror("open copy_file_range_source"); -+ exit(EXIT_FAILURE); -+ } -+ -+ if (write(fd_in, "foo bar\n", 8) != 8) { -+ perror("writing to the copy_file_range_source"); -+ exit(EXIT_FAILURE); -+ } -+ lseek(fd_in, 0, SEEK_SET); -+ -+ if (fstat(fd_in, &stat) == -1) { -+ perror("fstat"); -+ exit(EXIT_FAILURE); -+ } -+ -+ len = stat.st_size; -+ -+ fd_out = open("copy_file_range_dest", O_CREAT | O_WRONLY | O_TRUNC, 0644); -+ if (fd_out == -1) { -+ perror("open copy_file_range_dest"); -+ exit(EXIT_FAILURE); -+ } -+ -+ /* Check copy_file_range called with the correct arguments works. */ -+ do { -+ ret = copy_file_range(fd_in, NULL, fd_out, NULL, len, 0); -+ if (ret == -1) { -+ perror("copy_file_range"); -+ exit(EXIT_FAILURE); -+ } -+ -+ len -= ret; -+ } while (len > 0); -+ -+ /* Check valgrind will produce expected warnings for the -+ various wrong arguments. */ -+ do { -+ void *t; -+ void *z = (void *) -1; -+ -+ ret = copy_file_range(fd_in, t, fd_out, NULL, len, 0); -+ ret = copy_file_range(fd_in, NULL, fd_out, z, len, 0); -+ ret = copy_file_range(- 1, NULL, - 1, NULL, len, 0); -+ } while (0); -+ -+ close(fd_in); -+ close(fd_out); -+ unlink("copy_file_range_source"); -+ unlink("copy_file_range_dest"); -+ exit(EXIT_SUCCESS); -+} -diff --git a/memcheck/tests/linux/sys-copy_file_range.stderr.exp b/memcheck/tests/linux/sys-copy_file_range.stderr.exp -new file mode 100644 -index 0000000..1aa4dc2 ---- /dev/null -+++ b/memcheck/tests/linux/sys-copy_file_range.stderr.exp -@@ -0,0 +1,21 @@ -+ -+Syscall param copy_file_range("off_in") contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-copy_file_range.c:57) -+ -+Syscall param copy_file_range(off_out) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-copy_file_range.c:58) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Warning: invalid file descriptor -1 in syscall copy_file_range(fd_in)() -+ -+HEAP SUMMARY: -+ in use at exit: 0 bytes in 0 blocks -+ total heap usage: 0 allocs, 0 frees, 0 bytes allocated -+ -+For a detailed leak analysis, rerun with: --leak-check=full -+ -+Use --track-origins=yes to see where uninitialised values come from -+For lists of detected and suppressed errors, rerun with: -s -+ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) -diff --git a/memcheck/tests/linux/sys-copy_file_range.vgtest b/memcheck/tests/linux/sys-copy_file_range.vgtest -new file mode 100644 -index 0000000..b7741e8 ---- /dev/null -+++ b/memcheck/tests/linux/sys-copy_file_range.vgtest -@@ -0,0 +1,2 @@ -+prereq: test -e sys-copy_file_range -+prog: sys-copy_file_range -commit bd27ad3ff31555484b7fdb310c4b033620882e44 -Author: Mark Wielaard -Date: Sun May 5 16:01:41 2019 +0200 - - Hook linux copy_file_range syscall on arm. - -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 9f1bdab..9ba0665 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1016,6 +1016,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_getrandom, sys_getrandom), // 384 - LINXY(__NR_memfd_create, sys_memfd_create), // 385 - -+ LINX_(__NR_copy_file_range, sys_copy_file_range), // 391 -+ - LINXY(__NR_statx, sys_statx), // 397 - }; - -commit c212b72a63e43be323a4e028bbdbe8b023c22be8 -Author: Mark Wielaard -Date: Wed May 15 21:30:00 2019 +0200 - - Explicitly make testcase variable for sys-copy_file_range undefined. - - On some systems an extra warning could occur when a variable in - the memcheck/tests/linux/sys-copy_file_range testcase was undefined, - but (accidentially) pointed to known bad memory. Fix by defining the - variable as 0, but then marking it explicitly undefined using memcheck - VALGRIND_MAKE_MEM_UNDEFINED. - - Followup for https://bugs.kde.org/show_bug.cgi?id=407218 - -diff --git a/memcheck/tests/linux/sys-copy_file_range.c b/memcheck/tests/linux/sys-copy_file_range.c -index 83981c6..589399c 100644 ---- a/memcheck/tests/linux/sys-copy_file_range.c -+++ b/memcheck/tests/linux/sys-copy_file_range.c -@@ -3,8 +3,8 @@ - #include - #include - #include --#include - #include -+#include "../../memcheck.h" - - int main(int argc, char **argv) - { -@@ -51,7 +51,7 @@ int main(int argc, char **argv) - /* Check valgrind will produce expected warnings for the - various wrong arguments. */ - do { -- void *t; -+ void *t = 0; VALGRIND_MAKE_MEM_UNDEFINED (&t, sizeof (void *)); - void *z = (void *) -1; - - ret = copy_file_range(fd_in, t, fd_out, NULL, len, 0); -commit 033d013bebeb3471c0da47060deb9a5771e6c913 -Author: Mark Wielaard -Date: Fri May 24 21:51:31 2019 +0200 - - Fix memcheck/tests/linux/sys-copy_file_range open call (mode). - - sys-copy_file_range.c calls open with O_CREAT flag and so must provide - a mode argument. valgrind memcheck actually caught this ommission on - some arches (fedora rawhide i686 specifically). - - This is a small additional fixup for - https://bugs.kde.org/show_bug.cgi?id=407218 - -diff --git a/memcheck/tests/linux/sys-copy_file_range.c b/memcheck/tests/linux/sys-copy_file_range.c -index 589399c..3022fa1 100644 ---- a/memcheck/tests/linux/sys-copy_file_range.c -+++ b/memcheck/tests/linux/sys-copy_file_range.c -@@ -12,7 +12,7 @@ int main(int argc, char **argv) - struct stat stat; - loff_t len, ret; - -- fd_in = open("copy_file_range_source", O_CREAT | O_RDWR); -+ fd_in = open("copy_file_range_source", O_CREAT | O_RDWR, 0644); - if (fd_in == -1) { - perror("open copy_file_range_source"); - exit(EXIT_FAILURE); diff --git a/valgrind-3.15.0-disable-s390x-z13.patch b/valgrind-3.15.0-disable-s390x-z13.patch deleted file mode 100644 index 60df335..0000000 --- a/valgrind-3.15.0-disable-s390x-z13.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -ur valgrind-3.14.0.orig/VEX/priv/guest_s390_helpers.c valgrind-3.14.0/VEX/priv/guest_s390_helpers.c ---- valgrind-3.14.0.orig/VEX/priv/guest_s390_helpers.c 2019-01-10 17:00:57.203206690 +0100 -+++ valgrind-3.14.0/VEX/priv/guest_s390_helpers.c 2019-01-10 17:06:23.335253900 +0100 -@@ -2469,7 +2469,7 @@ - /*--- Dirty helper for vector instructions ---*/ - /*------------------------------------------------------------*/ - --#if defined(VGA_s390x) -+#if defined(VGA_s390x) && 0 /* disable for old binutils */ - ULong - s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - const ULong serialized) -diff -ur valgrind-3.14.0.orig/none/tests/s390x/Makefile.am valgrind-3.14.0/none/tests/s390x/Makefile.am ---- valgrind-3.14.0.orig/none/tests/s390x/Makefile.am 2019-01-10 17:00:57.411202894 +0100 -+++ valgrind-3.14.0/none/tests/s390x/Makefile.am 2019-01-10 17:10:28.963776813 +0100 -@@ -18,8 +18,7 @@ - spechelper-cr spechelper-clr \ - spechelper-ltr spechelper-or \ - spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ -- spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ -- vector_float -+ spechelper-tm laa - - if BUILD_DFP_TESTS - INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo -@@ -68,8 +67,3 @@ - fixbr_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@ - fpext_CFLAGS = $(AM_CFLAGS) @FLAG_MLONG_DOUBLE_128@ - ex_clone_LDADD = -lpthread --vector_CFLAGS = $(AM_CFLAGS) -march=z13 --lsc2_CFLAGS = -march=z13 -DS390_TESTS_NOCOLOR --vector_string_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=5 --vector_integer_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 --vector_float_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 diff --git a/valgrind-3.15.0-exp-sgcheck-no-aarch64.patch b/valgrind-3.15.0-exp-sgcheck-no-aarch64.patch deleted file mode 100644 index 69f13b3..0000000 --- a/valgrind-3.15.0-exp-sgcheck-no-aarch64.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit 59784c512ec40e588b21cf5ae8e31e9c4f99d6b8 -Author: Mark Wielaard -Date: Sat May 18 14:55:50 2019 +0200 - - aarch64 (arm64) isn't a supported architecture for exp-sgcheck. - - exp-sgcheck/pc_main.c contains: - - #if defined(VGA_arm) || defined(VGA_arm64) - VG_(printf)("SGCheck doesn't work on ARM yet, sorry.\n"); - VG_(exit)(1); - #endif - - But exp-sgcheck/tests/is_arch_supported checked against uname -m - which returns aarch64 (not arm64). Fix the test check so the - exp-sgcheck tests are skipped instead of producing failures. - -diff --git a/exp-sgcheck/tests/is_arch_supported b/exp-sgcheck/tests/is_arch_supported -index 818cc61..d4c6191 100755 ---- a/exp-sgcheck/tests/is_arch_supported -+++ b/exp-sgcheck/tests/is_arch_supported -@@ -10,6 +10,6 @@ - # architectures. - - case `uname -m` in -- ppc*|arm*|s390x|mips*) exit 1;; -+ ppc*|aarch64|arm*|s390x|mips*) exit 1;; - *) exit 0;; - esac diff --git a/valgrind-3.15.0-gcc-10-i686-asm-test.patch b/valgrind-3.15.0-gcc-10-i686-asm-test.patch deleted file mode 100644 index 943410e..0000000 --- a/valgrind-3.15.0-gcc-10-i686-asm-test.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/none/tests/x86/incdec_alt.c b/none/tests/x86/incdec_alt.c -index 2db324275..b8ff5c07e 100644 ---- a/none/tests/x86/incdec_alt.c -+++ b/none/tests/x86/incdec_alt.c -@@ -8,6 +8,7 @@ int r1,r2,r3,r4,r5,r6,r7,r8,a1,a2; - - extern void foo ( void ); - asm("\n" -+".text\n" - VG_SYM(foo) ":\n" - "\tpushl $0\n" - "\tpopfl\n" -@@ -49,6 +50,7 @@ VG_SYM(foo) ":\n" - "\tpopl " VG_SYM(r8) "\n" - - "\tret\n" -+".previous\n" - ); - - int main ( void ) diff --git a/valgrind-3.15.0-gcc-10-typedef-enum.patch b/valgrind-3.15.0-gcc-10-typedef-enum.patch deleted file mode 100644 index 9df1b9d..0000000 --- a/valgrind-3.15.0-gcc-10-typedef-enum.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index b9f038aaa..9f93cff19 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -261,7 +261,7 @@ extern ULong last_execute_target; - /* Vector operatons passed to s390x_dirtyhelper_vec_op(...) helper. - Please don't change ordering of elements and append new items - before S390_VEC_OP_LAST. */ --enum { -+typedef enum { - S390_VEC_OP_INVALID = 0, - S390_VEC_OP_VPKS = 1, - S390_VEC_OP_VPKLS = 2, diff --git a/valgrind-3.15.0-gcc-10-x86-amd64-asm-test.patch b/valgrind-3.15.0-gcc-10-x86-amd64-asm-test.patch deleted file mode 100644 index ea1fdcc..0000000 --- a/valgrind-3.15.0-gcc-10-x86-amd64-asm-test.patch +++ /dev/null @@ -1,644 +0,0 @@ -commit fe6805efc1b6db0cfa5f1cd5fb1854775cbfa31a -Author: Mark Wielaard -Date: Sat Jan 25 18:34:58 2020 +0100 - - x86 and amd64 tests: Use .text and .previous around all top-level asm. - - GCC10 defaults to -fno-common which exposes some latent bugs in - some of the top-level asm code in various .c test files. Some of the - tests started to segfault (even if not run under valgrind). Such code - needs to be wrapped inside a .text and a .previous asm statement to - make sure the code is generated in the .text code section and to - make sure the compiler doesn't lose track of the section currently - being used to generate data or code in. Without it code might be - generated inside a data section or the other way around. - -diff --git a/memcheck/tests/amd64/shr_edx.c b/memcheck/tests/amd64/shr_edx.c -index f8746afff..bed289471 100644 ---- a/memcheck/tests/amd64/shr_edx.c -+++ b/memcheck/tests/amd64/shr_edx.c -@@ -8,6 +8,7 @@ ULong result; - - extern void shrl32_with_0x10 ( void ); - asm("\n" -+".text\n" - "shrl32_with_0x10:\n" - "\tpushq %rdx\n" - "\tmovq data, %rdx\n" -@@ -20,6 +21,7 @@ asm("\n" - "\tshrl32_with_0x10_jump:\n" - "\tmov $0xdeaddead, %edx\n" - "\tjmp shrl32_with_0x10_cont\n" -+".previous\n" - ); - - -diff --git a/none/tests/amd64/fxtract.c b/none/tests/amd64/fxtract.c -index 4dff2a1f9..f4dfd36df 100644 ---- a/none/tests/amd64/fxtract.c -+++ b/none/tests/amd64/fxtract.c -@@ -6,6 +6,7 @@ double arg, res1, res2; - - extern void do_fxtract ( void ); - asm("\n" -+".text\n" - ".global do_fxtract\n" - "do_fxtract:\n" - "\tfinit\n" -@@ -13,7 +14,8 @@ asm("\n" - "\tfxtract\n" - "\tfstpl res1\n" - "\tfstpl res2\n" --"\tret" -+"\tret\n" -+".previous\n" - ); - - void try ( double x ) -diff --git a/none/tests/amd64/jrcxz.c b/none/tests/amd64/jrcxz.c -index dad088f08..4d70734c2 100644 ---- a/none/tests/amd64/jrcxz.c -+++ b/none/tests/amd64/jrcxz.c -@@ -8,6 +8,7 @@ ULong arg64, res64; - - extern void foo64 ( void ); - asm("\n" -+".text\n" - "foo64:\n" - "\tpushq %rcx\n" - -@@ -25,6 +26,7 @@ asm("\n" - - "\tpopq %rcx\n" - "\tret\n" -+".previous\n" - ); - - -@@ -32,6 +34,7 @@ UInt arg32, res32; - - extern void foo32 ( void ); - asm("\n" -+".text\n" - "foo32:\n" - "\tpushq %rcx\n" - -@@ -49,6 +52,7 @@ asm("\n" - - "\tpopq %rcx\n" - "\tret\n" -+".previous\n" - ); - - -diff --git a/none/tests/amd64/looper.c b/none/tests/amd64/looper.c -index cb7f5cbea..586464242 100644 ---- a/none/tests/amd64/looper.c -+++ b/none/tests/amd64/looper.c -@@ -22,6 +22,7 @@ asm("\n" - "\tmovq %rax, res\n" - "\tpopq %rcx\n" - "\tret\n" -+".previous\n" - ); - - extern void loop_ne ( void ); -@@ -42,6 +43,7 @@ asm("\n" - "\tmovq %rax, res\n" - "\tpopq %rcx\n" - "\tret\n" -+".previous\n" - ); - - extern void loop_e ( void ); -@@ -66,6 +68,7 @@ asm("\n" - "\tmovq %rax, res\n" - "\tpopq %rcx\n" - "\tret\n" -+".previous\n" - ); - - int main ( void ) -diff --git a/none/tests/amd64/sbbmisc.c b/none/tests/amd64/sbbmisc.c -index dd70efadc..1024bfd57 100644 ---- a/none/tests/amd64/sbbmisc.c -+++ b/none/tests/amd64/sbbmisc.c -@@ -9,6 +9,7 @@ int in_l, out_l1, out_l2; - - extern void sbb_ib_al ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_ib_al) ":\n" - - #ifndef VGP_amd64_darwin -@@ -37,11 +38,13 @@ VG_SYM(sbb_ib_al) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void sbb_iw_ax ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_iw_ax) ":\n" - - #ifndef VGP_amd64_darwin -@@ -69,11 +72,13 @@ VG_SYM(sbb_iw_ax) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void sbb_il_eax ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_il_eax) ":\n" - - #ifndef VGP_amd64_darwin -@@ -101,11 +106,13 @@ VG_SYM(sbb_il_eax) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void sbb_eb_gb ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_eb_gb) ":\n" - - #ifndef VGP_amd64_darwin -@@ -135,11 +142,13 @@ VG_SYM(sbb_eb_gb) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void sbb_eb_gb_2 ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_eb_gb_2) ":\n" - "\tpushq %rcx\n" - -@@ -173,11 +182,13 @@ VG_SYM(sbb_eb_gb_2) ":\n" - - "\tpopq %rcx\n" - "\tretq\n" -+".previous\n" - ); - - - extern void adc_eb_gb ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_eb_gb) ":\n" - - #ifndef VGP_amd64_darwin -@@ -207,11 +218,13 @@ VG_SYM(adc_eb_gb) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void adc_eb_gb_2 ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_eb_gb_2) ":\n" - "\tpushq %rcx\n" - -@@ -245,10 +258,12 @@ VG_SYM(adc_eb_gb_2) ":\n" - - "\tpopq %rcx\n" - "\tretq\n" -+".previous\n" - ); - - extern void adc_ib_al ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_ib_al) ":\n" - - #ifndef VGP_amd64_darwin -@@ -276,11 +291,13 @@ VG_SYM(adc_ib_al) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void adc_iw_ax ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_iw_ax) ":\n" - - #ifndef VGP_amd64_darwin -@@ -308,11 +325,13 @@ VG_SYM(adc_iw_ax) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - - extern void adc_il_eax ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_il_eax) ":\n" - - #ifndef VGP_amd64_darwin -@@ -340,6 +359,7 @@ VG_SYM(adc_il_eax) ":\n" - #endif - - "\tretq\n" -+".previous\n" - ); - - -diff --git a/none/tests/amd64/shrld.c b/none/tests/amd64/shrld.c -index ca9d699e2..d77cfbdc9 100644 ---- a/none/tests/amd64/shrld.c -+++ b/none/tests/amd64/shrld.c -@@ -30,6 +30,7 @@ ULong flags_out; - - extern void shld64 ( void ); - asm("\n" -+".text\n" - "shld64:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -47,10 +48,12 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - extern void shld32 ( void ); - asm("\n" -+".text\n" - "shld32:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -68,10 +71,12 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - extern void shld16 ( void ); - asm("\n" -+".text\n" - "shld16:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -89,11 +94,13 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - - extern void shrd64 ( void ); - asm("\n" -+".text\n" - "shrd64:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -111,10 +118,12 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - extern void shrd32 ( void ); - asm("\n" -+".text\n" - "shrd32:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -132,10 +141,12 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - extern void shrd16 ( void ); - asm("\n" -+".text\n" - "shrd16:\n" - "\tpushq %rsi\n" - "\tpushq %r11\n" -@@ -153,6 +164,7 @@ asm("\n" - "\tpopq %r11\n" - "\tpopq %rsi\n" - "\tret\n" -+".previous\n" - ); - - -diff --git a/none/tests/amd64/slahf-amd64.c b/none/tests/amd64/slahf-amd64.c -index 31857ecba..361b6791b 100644 ---- a/none/tests/amd64/slahf-amd64.c -+++ b/none/tests/amd64/slahf-amd64.c -@@ -5,6 +5,7 @@ typedef unsigned long long int ULong; - - extern ULong lahf_1 ( void ); - asm("\n" -+".text\n" - "lahf_1:\n" - "\tpushq $0\n" - "\tpopfq\n" -@@ -13,10 +14,12 @@ asm("\n" - "\tsubq %rax, %rdx\n" - "\t.byte 0x9F\n" /* lahf */ - "\tret\n" -+".previous\n" - ); - - extern ULong lahf_0 ( void ); - asm("\n" -+".text\n" - "lahf_0:\n" - "\tpushq $0\n" - "\tpopfq\n" -@@ -25,16 +28,19 @@ asm("\n" - "\tsubq %rax, %rdx\n" - "\t.byte 0x9F\n" /* lahf */ - "\tret\n" -+".previous\n" - ); - - extern ULong sahf_then_lahf ( ULong ); - asm("\n" -+".text\n" - "sahf_then_lahf:\n" - "\tmovq %rdi, %rax\n" - "\t.byte 0x9E\n" /* sahf */ - "\tmovabsq $0, %rax\n" - "\t.byte 0x9F\n" /* lahf */ - "\tret\n" -+".previous\n" - ); - - int main ( void ) -diff --git a/none/tests/x86/cmpxchg8b.c b/none/tests/x86/cmpxchg8b.c -index 3588840a8..9ca56afa6 100644 ---- a/none/tests/x86/cmpxchg8b.c -+++ b/none/tests/x86/cmpxchg8b.c -@@ -14,6 +14,7 @@ UInt zout; - - extern void foo ( void ); - asm("\n" -+ ".text\n" - VG_SYM(foo) ":\n" - "\tpushl %eax\n" - "\tpushl %ebx\n" -@@ -40,6 +41,7 @@ asm("\n" - "\tpopl %ebx\n" - "\tpopl %eax\n" - "\tret\n" -+ ".previous\n" - ); - - int main ( void ) -diff --git a/none/tests/x86/fxtract.c b/none/tests/x86/fxtract.c -index 235cda72c..f8c9bc41a 100644 ---- a/none/tests/x86/fxtract.c -+++ b/none/tests/x86/fxtract.c -@@ -6,13 +6,15 @@ double arg, res1, res2; - - extern void do_fxtract ( void ); - asm("\n" -+".text\n" - VG_SYM(do_fxtract) ":\n" - "\tfinit\n" - "\tfldl " VG_SYM(arg) "\n" - "\tfxtract\n" - "\tfstpl " VG_SYM(res1) "\n" - "\tfstpl " VG_SYM(res2) "\n" --"\tret" -+"\tret\n" -+".previous\n" - ); - - void try ( double x ) -diff --git a/none/tests/x86/lahf.c b/none/tests/x86/lahf.c -index fc09352ac..a04c10da9 100644 ---- a/none/tests/x86/lahf.c -+++ b/none/tests/x86/lahf.c -@@ -3,6 +3,7 @@ - - extern int foo_1 ( void ); - asm("\n" -+".text\n" - VG_SYM(foo_1) ":\n" - "\tpushl $0\n" - "\tpopfl\n" -@@ -11,10 +12,12 @@ VG_SYM(foo_1) ":\n" - "\tsubl %eax, %edx\n" - "\tlahf\n" - "\tret\n" -+".previous\n" - ); - - extern int foo_0 ( void ); - asm("\n" -+".text\n" - VG_SYM(foo_0) ":\n" - "\tpushl $0\n" - "\tpopfl\n" -@@ -23,6 +26,7 @@ VG_SYM(foo_0) ":\n" - "\tsubl %eax, %edx\n" - "\tlahf\n" - "\tret\n" -+".previous\n" - ); - - int main ( void ) -diff --git a/none/tests/x86/looper.c b/none/tests/x86/looper.c -index 60554ec76..7f7ace8ad 100644 ---- a/none/tests/x86/looper.c -+++ b/none/tests/x86/looper.c -@@ -21,6 +21,7 @@ VG_SYM(loop_plain) ":\n" - "\tmovl %eax, " VG_SYM(res) "\n" - "\tpopl %ecx\n" - "\tret\n" -+".previous\n" - ); - - extern void loop_ne ( void ); -@@ -40,6 +41,7 @@ VG_SYM(loop_ne) ":\n" - "\tmovl %eax, " VG_SYM(res) "\n" - "\tpopl %ecx\n" - "\tret\n" -+".previous\n" - ); - - extern void loop_e ( void ); -@@ -63,6 +65,7 @@ VG_SYM(loop_e) ":\n" - "\tmovl %eax, " VG_SYM(res) "\n" - "\tpopl %ecx\n" - "\tret\n" -+".previous\n" - ); - - int main ( void ) -diff --git a/none/tests/x86/sbbmisc.c b/none/tests/x86/sbbmisc.c -index 322d6e17d..7c4585d95 100644 ---- a/none/tests/x86/sbbmisc.c -+++ b/none/tests/x86/sbbmisc.c -@@ -9,6 +9,7 @@ int in_l, out_l1, out_l2; - - extern void sbb_ib_al ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_ib_al) ":\n" - - "\tmovb " VG_SYM(in_b) ", %al\n" -@@ -22,11 +23,13 @@ VG_SYM(sbb_ib_al) ":\n" - "\tmovb %al, " VG_SYM(out_b2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void sbb_iw_ax ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_iw_ax) ":\n" - - "\tmovw " VG_SYM(in_w) ", %ax\n" -@@ -40,11 +43,13 @@ VG_SYM(sbb_iw_ax) ":\n" - "\tmovw %ax, " VG_SYM(out_w2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void sbb_il_eax ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_il_eax) ":\n" - - "\tmovl " VG_SYM(in_l) ", %eax\n" -@@ -58,11 +63,13 @@ VG_SYM(sbb_il_eax) ":\n" - "\tmovl %eax, " VG_SYM(out_l2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void sbb_eb_gb ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_eb_gb) ":\n" - - "\tmovb " VG_SYM(in_b) ", %al\n" -@@ -76,11 +83,13 @@ VG_SYM(sbb_eb_gb) ":\n" - "\tmovb %al, " VG_SYM(out_b2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void sbb_eb_gb_2 ( void ); - asm("\n" -+".text\n" - VG_SYM(sbb_eb_gb_2) ":\n" - "\tpushl %ecx\n" - -@@ -98,11 +107,13 @@ VG_SYM(sbb_eb_gb_2) ":\n" - - "\tpopl %ecx\n" - "\tret\n" -+".previous\n" - ); - - - extern void adc_eb_gb ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_eb_gb) ":\n" - - "\tmovb " VG_SYM(in_b) ", %al\n" -@@ -116,11 +127,13 @@ VG_SYM(adc_eb_gb) ":\n" - "\tmovb %al, " VG_SYM(out_b2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void adc_eb_gb_2 ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_eb_gb_2) ":\n" - "\tpushl %ecx\n" - -@@ -138,10 +151,12 @@ VG_SYM(adc_eb_gb_2) ":\n" - - "\tpopl %ecx\n" - "\tret\n" -+".previous\n" - ); - - extern void adc_ib_al ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_ib_al) ":\n" - - "\tmovb " VG_SYM(in_b) ", %al\n" -@@ -155,11 +170,13 @@ VG_SYM(adc_ib_al) ":\n" - "\tmovb %al, " VG_SYM(out_b2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void adc_iw_ax ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_iw_ax) ":\n" - - "\tmovw " VG_SYM(in_w) ", %ax\n" -@@ -173,11 +190,13 @@ VG_SYM(adc_iw_ax) ":\n" - "\tmovw %ax, " VG_SYM(out_w2) "\n" - - "\tret\n" -+".previous\n" - ); - - - extern void adc_il_eax ( void ); - asm("\n" -+".text\n" - VG_SYM(adc_il_eax) ":\n" - - "\tmovl " VG_SYM(in_l) ", %eax\n" -@@ -191,6 +210,7 @@ VG_SYM(adc_il_eax) ":\n" - "\tmovl %eax, " VG_SYM(out_l2) "\n" - - "\tret\n" -+".previous\n" - ); - - diff --git a/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch b/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch deleted file mode 100644 index c12dc12..0000000 --- a/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch +++ /dev/null @@ -1,89 +0,0 @@ -diff --git a/none/tests/ppc64/test_isa_2_07_part1.c b/none/tests/ppc64/test_isa_2_07_part1.c -index 187af3741..0efd39c1c 100644 ---- a/none/tests/ppc64/test_isa_2_07_part1.c -+++ b/none/tests/ppc64/test_isa_2_07_part1.c -@@ -384,27 +384,27 @@ static void test_fmrgow (void) - // VSX move instructions - static void test_mfvsrd (void) - { -- __asm__ __volatile__ ("mfvsrd %0,%x1" : "=r" (r14) : "ws" (vec_inA)); -+ __asm__ __volatile__ ("mfvsrd %0,%x1" : "=r" (r14) : "wa" (vec_inA)); - }; - - static void test_mfvsrwz (void) - { -- __asm__ __volatile__ ("mfvsrwz %0,%x1" : "=r" (r14) : "ws" (vec_inA)); -+ __asm__ __volatile__ ("mfvsrwz %0,%x1" : "=r" (r14) : "wa" (vec_inA)); - }; - - static void test_mtvsrd (void) - { -- __asm__ __volatile__ ("mtvsrd %x0,%1" : "=ws" (vec_out) : "r" (r14)); -+ __asm__ __volatile__ ("mtvsrd %x0,%1" : "=wa" (vec_out) : "r" (r14)); - }; - - static void test_mtvsrwz (void) - { -- __asm__ __volatile__ ("mtvsrwz %x0,%1" : "=ws" (vec_out) : "r" (r14)); -+ __asm__ __volatile__ ("mtvsrwz %x0,%1" : "=wa" (vec_out) : "r" (r14)); - }; - - static void test_mtvsrwa (void) - { -- __asm__ __volatile__ ("mtvsrwa %x0,%1" : "=ws" (vec_out) : "r" (r14)); -+ __asm__ __volatile__ ("mtvsrwa %x0,%1" : "=wa" (vec_out) : "r" (r14)); - }; - - static void test_mtfprwa (void) -diff --git a/none/tests/ppc64/test_isa_3_0.c b/none/tests/ppc64/test_isa_3_0.c -index 78b5130c1..cf9df8ac9 100644 ---- a/none/tests/ppc64/test_isa_3_0.c -+++ b/none/tests/ppc64/test_isa_3_0.c -@@ -1177,23 +1177,23 @@ static void test_xscmpexpdp(void) { - } - - static void test_xscmpeqdp(void) { -- __asm__ __volatile__ ("xscmpeqdp %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb)); -+ __asm__ __volatile__ ("xscmpeqdp %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb)); - } - - static void test_xscmpgtdp(void) { -- __asm__ __volatile__ ("xscmpgtdp %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb)); -+ __asm__ __volatile__ ("xscmpgtdp %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb)); - } - - static void test_xscmpgedp(void) { -- __asm__ __volatile__ ("xscmpgedp %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb)); -+ __asm__ __volatile__ ("xscmpgedp %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb)); - } - - static void test_xsmincdp(void) { -- __asm__ __volatile__ ("xsmincdp %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb)); -+ __asm__ __volatile__ ("xsmincdp %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb)); - } - - static void test_xsmaxcdp(void) { -- __asm__ __volatile__ ("xsmaxcdp %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb)); -+ __asm__ __volatile__ ("xsmaxcdp %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb)); - } - - static test_list_t testgroup_vector_scalar_compare_double[] = { -@@ -1827,15 +1827,15 @@ static void test_xscvhpdp(void) { - } - - static void test_xscvdphp(void) { -- __asm__ __volatile__ ("xscvdphp %x0, %x1 " : "+wi" (vec_xt) : "wi" (vec_xb)); -+ __asm__ __volatile__ ("xscvdphp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb)); - } - - static void test_xvcvhpsp(void) { -- __asm__ __volatile__ ("xvcvhpsp %x0, %x1 " : "+ww" (vec_xt) : "ww" (vec_xb)); -+ __asm__ __volatile__ ("xvcvhpsp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb)); - } - - static void test_xvcvsphp(void) { -- __asm__ __volatile__ ("xvcvsphp %x0, %x1 " : "+ww" (vec_xt) : "ww" (vec_xb)); -+ __asm__ __volatile__ ("xvcvsphp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb)); - } - - static test_list_t testgroup_vector_scalar_two_double[] = { diff --git a/valgrind-3.15.0-glibc-dtv-supp.patch b/valgrind-3.15.0-glibc-dtv-supp.patch deleted file mode 100644 index cb862f8..0000000 --- a/valgrind-3.15.0-glibc-dtv-supp.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/glibc-2.X.supp.in b/glibc-2.X.supp.in -index 126e8b338..eeefa3935 100644 ---- a/glibc-2.X.supp.in -+++ b/glibc-2.X.supp.in -@@ -248,3 +248,37 @@ - Memcheck:Cond - fun:_dl_runtime_resolve_avx_slow - } -+ -+# The main thread dynamic thread vector, DTV, which contains pointers -+# to thread local variables, isn't freed. There are a couple of call -+# patterns that can cause it to be extended. -+{ -+ dtv-addr-tail -+ Memcheck:Leak -+ match-leak-kinds: possible,reachable -+ fun:malloc -+ fun:tls_get_addr_tail* -+ fun:__tls_get_addr -+} -+ -+{ -+ dtv-addr-resize -+ Memcheck:Leak -+ match-leak-kinds: possible,reachable -+ fun:malloc -+ fun:_dl_resize_dtv -+ fun:_dl_update_slotinfo -+ fun:update_get_addr -+ fun:__tls_get_addr -+} -+ -+{ -+ dtv-addr-init -+ Memcheck:Leak -+ match-leak-kinds: possible,reachable -+ fun:malloc -+ fun:allocate_dtv_entry -+ fun:allocate_and_init -+ fun:tls_get_addr_tail* -+ fun:__tls_get_addr -+} diff --git a/valgrind-3.15.0-pkey.patch b/valgrind-3.15.0-pkey.patch deleted file mode 100644 index 3f534c5..0000000 --- a/valgrind-3.15.0-pkey.patch +++ /dev/null @@ -1,226 +0,0 @@ -commit b064131bdf099d3647b4501e5d15391e1e9623e6 -Author: Mark Wielaard -Date: Thu May 30 00:29:58 2019 +0200 - - linux x86 and amd64 memory protection key syscalls. - - This implements minimal support for the pkey_alloc, pkey_free and - pkey_mprotect syscalls. pkey_alloc will simply indicate that pkeys - are not supported. pkey_free always fails. pkey_mprotect works just - like mprotect if the special pkey -1 is provided. - - https://bugs.kde.org/show_bug.cgi?id=408091 - -diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h -index 88530f0..3e1c8b6 100644 ---- a/coregrind/m_syswrap/priv_syswrap-generic.h -+++ b/coregrind/m_syswrap/priv_syswrap-generic.h -@@ -106,6 +106,10 @@ extern Bool - ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, - int flags); - -+/* Helper function for generic mprotect and linux pkey_mprotect. */ -+extern void handle_sys_mprotect (ThreadId tid, SyscallStatus *status, -+ Addr *addr, SizeT *len, Int *prot); -+ - DECL_TEMPLATE(generic, sys_ni_syscall); // * P -- unimplemented - DECL_TEMPLATE(generic, sys_exit); - DECL_TEMPLATE(generic, sys_fork); -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index 5cf5407..2471524 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -299,6 +299,11 @@ DECL_TEMPLATE(linux, sys_bpf); - // Linux-specific (new in Linux 4.11) - DECL_TEMPLATE(linux, sys_statx); - -+// Linux-specific memory protection key syscalls (since Linux 4.9) -+DECL_TEMPLATE(linux, sys_pkey_alloc); -+DECL_TEMPLATE(linux, sys_pkey_free); -+DECL_TEMPLATE(linux, sys_pkey_mprotect); -+ - /* --------------------------------------------------------------------- - Wrappers for sockets and ipc-ery. These are split into standalone - procedures because x86-linux hides them inside multiplexors -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index d4fe413..2d6b95f 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -863,6 +863,10 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_membarrier, sys_membarrier), // 324 - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 326 -+ -+ LINXY(__NR_pkey_mprotect, sys_pkey_mprotect), // 329 -+ LINX_(__NR_pkey_alloc, sys_pkey_alloc), // 330 -+ LINX_(__NR_pkey_free, sys_pkey_free), // 331 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c -index 0b64919..01191f6 100644 ---- a/coregrind/m_syswrap/syswrap-generic.c -+++ b/coregrind/m_syswrap/syswrap-generic.c -@@ -3842,12 +3842,28 @@ PRE(sys_mprotect) - PRE_REG_READ3(long, "mprotect", - unsigned long, addr, vki_size_t, len, unsigned long, prot); - -- if (!ML_(valid_client_addr)(ARG1, ARG2, tid, "mprotect")) { -+ Addr addr = ARG1; -+ SizeT len = ARG2; -+ Int prot = ARG3; -+ -+ handle_sys_mprotect (tid, status, &addr, &len, &prot); -+ -+ ARG1 = addr; -+ ARG2 = len; -+ ARG3 = prot; -+} -+/* This will be called from the generic mprotect, or the linux specific -+ pkey_mprotect. Pass pointers to ARG1, ARG2 and ARG3 as addr, len and prot, -+ they might be adjusted and have to assigned back to ARG1, ARG2 and ARG3. */ -+void handle_sys_mprotect(ThreadId tid, SyscallStatus* status, -+ Addr *addr, SizeT *len, Int *prot) -+{ -+ if (!ML_(valid_client_addr)(*addr, *len, tid, "mprotect")) { - SET_STATUS_Failure( VKI_ENOMEM ); - } - #if defined(VKI_PROT_GROWSDOWN) - else -- if (ARG3 & (VKI_PROT_GROWSDOWN|VKI_PROT_GROWSUP)) { -+ if (*prot & (VKI_PROT_GROWSDOWN|VKI_PROT_GROWSUP)) { - /* Deal with mprotects on growable stack areas. - - The critical files to understand all this are mm/mprotect.c -@@ -3862,8 +3878,8 @@ PRE(sys_mprotect) - - The sanity check provided by the kernel is that the vma must - have the VM_GROWSDOWN/VM_GROWSUP flag set as appropriate. */ -- UInt grows = ARG3 & (VKI_PROT_GROWSDOWN|VKI_PROT_GROWSUP); -- NSegment const *aseg = VG_(am_find_nsegment)(ARG1); -+ UInt grows = *prot & (VKI_PROT_GROWSDOWN|VKI_PROT_GROWSUP); -+ NSegment const *aseg = VG_(am_find_nsegment)(*addr); - NSegment const *rseg; - - vg_assert(aseg); -@@ -3874,10 +3890,10 @@ PRE(sys_mprotect) - && rseg->kind == SkResvn - && rseg->smode == SmUpper - && rseg->end+1 == aseg->start) { -- Addr end = ARG1 + ARG2; -- ARG1 = aseg->start; -- ARG2 = end - aseg->start; -- ARG3 &= ~VKI_PROT_GROWSDOWN; -+ Addr end = *addr + *len; -+ *addr = aseg->start; -+ *len = end - aseg->start; -+ *prot &= ~VKI_PROT_GROWSDOWN; - } else { - SET_STATUS_Failure( VKI_EINVAL ); - } -@@ -3887,8 +3903,8 @@ PRE(sys_mprotect) - && rseg->kind == SkResvn - && rseg->smode == SmLower - && aseg->end+1 == rseg->start) { -- ARG2 = aseg->end - ARG1 + 1; -- ARG3 &= ~VKI_PROT_GROWSUP; -+ *len = aseg->end - *addr + 1; -+ *prot &= ~VKI_PROT_GROWSUP; - } else { - SET_STATUS_Failure( VKI_EINVAL ); - } -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 810ca24..5452b8d 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -12120,6 +12120,76 @@ PRE(sys_copy_file_range) - } - } - -+PRE(sys_pkey_alloc) -+{ -+ PRINT("pkey_alloc (%lu, %lu)", ARG1, ARG2); -+ -+ PRE_REG_READ2(long, "pkey_alloc", -+ unsigned long, "flags", -+ unsigned long, "access_rights"); -+ -+ /* The kernel says: pkey_alloc() is always safe to call regardless of -+ whether or not the operating system supports protection keys. It can be -+ used in lieu of any other mechanism for detecting pkey support and will -+ simply fail with the error ENOSPC if the operating system has no pkey -+ support. -+ -+ So we simply always return ENOSPC to signal memory protection keys are -+ not supported under valgrind, unless there are unknown flags, then we -+ return EINVAL. */ -+ unsigned long pkey_flags = ARG1; -+ if (pkey_flags != 0) -+ SET_STATUS_Failure( VKI_EINVAL ); -+ else -+ SET_STATUS_Failure( VKI_ENOSPC ); -+} -+ -+PRE(sys_pkey_free) -+{ -+ PRINT("pkey_free (%" FMT_REGWORD "u )", ARG1); -+ -+ PRE_REG_READ1(long, "pkey_free", -+ unsigned long, "pkey"); -+ -+ /* Since pkey_alloc () can never succeed, see above, freeing any pkey is -+ always an error. */ -+ SET_STATUS_Failure( VKI_EINVAL ); -+} -+ -+PRE(sys_pkey_mprotect) -+{ -+ PRINT("sys_pkey_mprotect ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" -+ FMT_REGWORD "u %" FMT_REGWORD "u )", ARG1, ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "pkey_mprotect", -+ unsigned long, addr, vki_size_t, len, unsigned long, prot, -+ unsigned long, pkey); -+ -+ Addr addr = ARG1; -+ SizeT len = ARG2; -+ Int prot = ARG3; -+ Int pkey = ARG4; -+ -+ /* Since pkey_alloc () can never succeed, see above, any pkey is -+ invalid. Except for -1, then pkey_mprotect acts just like mprotect. */ -+ if (pkey != -1) -+ SET_STATUS_Failure( VKI_EINVAL ); -+ else -+ handle_sys_mprotect (tid, status, &addr, &len, &prot); -+ -+ ARG1 = addr; -+ ARG2 = len; -+ ARG3 = prot; -+} -+ -+POST(sys_pkey_mprotect) -+{ -+ Addr addr = ARG1; -+ SizeT len = ARG2; -+ Int prot = ARG3; -+ -+ ML_(notify_core_and_tool_of_mprotect)(addr, len, prot); -+} -+ - - #undef PRE - #undef POST -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index ad54cf6..3829fa4 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1608,6 +1608,9 @@ static SyscallTableEntry syscall_table[] = { - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 377 - -+ LINXY(__NR_pkey_mprotect, sys_pkey_mprotect), // 380 -+ LINX_(__NR_pkey_alloc, sys_pkey_alloc), // 381 -+ LINX_(__NR_pkey_free, sys_pkey_free), // 382 - LINXY(__NR_statx, sys_statx), // 383 - - /* Explicitly not supported on i386 yet. */ diff --git a/valgrind-3.15.0-ppc64-filter_gdb.patch b/valgrind-3.15.0-ppc64-filter_gdb.patch deleted file mode 100644 index b4137fe..0000000 --- a/valgrind-3.15.0-ppc64-filter_gdb.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit b1cc37ddb660afc536131227a9fb452ac9328972 -Author: Alexandra Hájková -Date: Mon Apr 15 15:34:12 2019 +0200 - - filter_gdb: add regexp to filter out names which starts with a "." - - such names are used for "function descriptors" on ppc64 - - https://bugs.kde.org/show_bug.cgi?id=406561 - -diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb -index 6eff229..fd2e8e7 100755 ---- a/gdbserver_tests/filter_gdb -+++ b/gdbserver_tests/filter_gdb -@@ -119,6 +119,7 @@ sed -e '/Remote debugging using/,/vgdb launched process attached/d' - -e 's/in select ()$/in syscall .../' \ - -e 's/in \.__select ()$/in syscall .../' \ - -e 's/in select () at \.\.\/sysdeps\/unix\/syscall-template\.S.*$/in syscall .../' \ -+ -e 's/in \.__select () at \.\.\/sysdeps\/unix\/syscall-template\.S.*$/in syscall .../' \ - -e '/^[ ]*at \.\.\/sysdeps\/unix\/syscall-template\.S/d' \ - -e '/^[ ]*in \.\.\/sysdeps\/unix\/syscall-template\.S/d' \ - -e '/^[1-9][0-9]*[ ]*\.\.\/sysdeps\/unix\/syscall-template\.S/d' \ diff --git a/valgrind-3.15.0-ppc64-sigframe.patch b/valgrind-3.15.0-ppc64-sigframe.patch deleted file mode 100644 index 839ce1a..0000000 --- a/valgrind-3.15.0-ppc64-sigframe.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- - coregrind/m_sigframe/sigframe-ppc64-linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/coregrind/m_sigframe/sigframe-ppc64-linux.c b/coregrind/m_sigframe/ -sigframe-ppc64-linux.c -index 0406f3c..b54c4e0 100644 ---- a/coregrind/m_sigframe/sigframe-ppc64-linux.c -+++ b/coregrind/m_sigframe/sigframe-ppc64-linux.c -@@ -112,7 +112,7 @@ struct rt_sigframe { - vki_siginfo_t info; - struct vg_sig_private priv; - UChar abigap[288]; // unused --}; -+} __attribute__ ((aligned (16))); - - #define SET_SIGNAL_LR(zztst, zzval) \ - do { tst->arch.vex.guest_LR = (zzval); \ --- -2.7.4 diff --git a/valgrind-3.15.0-preadv2-pwritev2.patch b/valgrind-3.15.0-preadv2-pwritev2.patch deleted file mode 100644 index eb17a7e..0000000 --- a/valgrind-3.15.0-preadv2-pwritev2.patch +++ /dev/null @@ -1,751 +0,0 @@ -commit b0861063a8d2a55bb7423e90d26806bab0f78a12 -Author: Alexandra Hájková -Date: Tue Jun 4 13:47:14 2019 +0200 - - Add support for preadv2 and pwritev2 syscalls - - Support for amd64, x86 - 64 and 32 bit, arm64, ppc64, ppc64le, - s390x, mips64. This should work identically on all - arches, tested on x86 32bit and 64bit one, but enabled on all. - - Refactor the code to be reusable between old/new syscalls. Resolve TODO - items in the code. Add the testcase for the preadv2/pwritev2 and also - add the (similar) testcase for the older preadv/pwritev syscalls. - - Trying to test handling an uninitialized flag argument for the v2 syscalls - does not work because the flag always comes out as defined zero. - Turns out glibc does this deliberately on 64bit architectures because - the kernel does actually have a low_offset and high_offset argument, but - ignores the high_offset/assumes it is zero. - https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=601cc11d054ae4b5e9b5babec3d8e4667a2cb9b5 - - https://bugs.kde.org/408414 - -diff --git a/configure.ac b/configure.ac -index 352892565..3596d2fec 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -4173,6 +4173,10 @@ AC_CHECK_FUNCS([ \ - process_vm_readv \ - process_vm_writev \ - copy_file_range \ -+ preadv \ -+ pwritev \ -+ preadv2 \ -+ pwritev2 \ - ]) - - # AC_CHECK_LIB adds any library found to the variable LIBS, and links these -@@ -4190,6 +4194,10 @@ AM_CONDITIONAL([HAVE_PTHREAD_SETNAME_NP], - [test x$ac_cv_func_pthread_setname_np = xyes]) - AM_CONDITIONAL([HAVE_COPY_FILE_RANGE], - [test x$ac_cv_func_copy_file_range = xyes]) -+AM_CONDITIONAL([HAVE_PREADV_PWRITEV], -+ [test x$ac_cv_func_preadv = xyes && test x$ac_cv_func_pwritev = xyes]) -+AM_CONDITIONAL([HAVE_PREADV2_PWRITEV2], -+ [test x$ac_cv_func_preadv2 = xyes && test x$ac_cv_func_pwritev2 = xyes]) - - if test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \ - -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX ; then -diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h -index 3e1c8b682..73f9224f7 100644 ---- a/coregrind/m_syswrap/priv_syswrap-generic.h -+++ b/coregrind/m_syswrap/priv_syswrap-generic.h -@@ -109,6 +109,19 @@ ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, - /* Helper function for generic mprotect and linux pkey_mprotect. */ - extern void handle_sys_mprotect (ThreadId tid, SyscallStatus *status, - Addr *addr, SizeT *len, Int *prot); -+/* Helper functions for preadv/preadv2. */ -+extern -+void handle_pre_sys_preadv(ThreadId tid, SyscallStatus* status, -+ Int fd, Addr vector, Int count, -+ const char *str); -+extern -+void handle_post_sys_preadv(ThreadId tid, SyscallStatus* status, Addr vector, Int count); -+ -+/* Helper function for pwritev/pwritev2. */ -+extern -+void handle_sys_pwritev(ThreadId tid, SyscallStatus* status, -+ Int fd, Addr vector, Int count, -+ const char *str); - - DECL_TEMPLATE(generic, sys_ni_syscall); // * P -- unimplemented - DECL_TEMPLATE(generic, sys_exit); -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index be2f9bdde..8ce8ef3d5 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -46,7 +46,9 @@ DECL_TEMPLATE(linux, sys_oldumount); - DECL_TEMPLATE(linux, sys_umount); - DECL_TEMPLATE(linux, sys_perf_event_open); - DECL_TEMPLATE(linux, sys_preadv); -+DECL_TEMPLATE(linux, sys_preadv2); - DECL_TEMPLATE(linux, sys_pwritev); -+DECL_TEMPLATE(linux, sys_pwritev2); - DECL_TEMPLATE(linux, sys_sendmmsg); - DECL_TEMPLATE(linux, sys_recvmmsg); - DECL_TEMPLATE(linux, sys_dup3); -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 382dc65cf..9b8068d0f 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -857,6 +857,8 @@ static SyscallTableEntry syscall_table[] = { - // LIN__(__NR_kexec_file_load, sys_ni_syscall), // 320 - LINXY(__NR_bpf, sys_bpf), // 321 - -+ LINXY(__NR_preadv2, sys_preadv2), // 327 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 328 - - LINXY(__NR_statx, sys_statx), // 332 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index c700e3dbe..d12d40632 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -818,8 +818,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_membarrier, sys_membarrier), // 283 - // (__NR_mlock2, sys_ni_syscall), // 284 - LINX_(__NR_copy_file_range, sys_copy_file_range), // 285 -- // (__NR_preadv2, sys_ni_syscall), // 286 -- // (__NR_pwritev2, sys_ni_syscall), // 287 -+ LINX_(__NR_preadv2, sys_ni_syscall), // 286 -+ LINX_(__NR_pwritev2, sys_ni_syscall), // 287 - // (__NR_pkey_mprotect, sys_ni_syscall), // 288 - // (__NR_pkey_alloc, sys_ni_syscall), // 289 - // (__NR_pkey_free, sys_ni_syscall), // 290 -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 36d09d6e0..2fe15d97b 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -5501,12 +5501,57 @@ POST(sys_open_by_handle_at) - /* --------------------------------------------------------------------- - p{read,write}v wrappers - ------------------------------------------------------------------ */ -+/* This handles the common part of the PRE macro for preadv and preadv2. */ -+void handle_pre_sys_preadv(ThreadId tid, SyscallStatus* status, -+ Int fd, Addr vector, Int count, const char *str) -+{ -+ struct vki_iovec * vec; -+ Int i; -+ /* safe size for the "preadv/preadv2(vector[i])" string */ -+ char tmp[30]; -+ -+ if (!ML_(fd_allowed)(fd, str, tid, False)) { -+ SET_STATUS_Failure( VKI_EBADF ); -+ } else if (count > 0) { -+ VG_(strcpy) (tmp, str); -+ VG_(strcat) (tmp, "(vector)"); -+ PRE_MEM_READ( tmp, vector, count * sizeof(struct vki_iovec) ); -+ -+ if (ML_(safe_to_deref) ((void *)(Addr)vector, -+ count * sizeof(struct vki_iovec))) { -+ vec = (struct vki_iovec *)(Addr)vector; -+ for (i = 0; i < count; i++) { -+ VG_(snprintf) (tmp, 30, "%s(vector[%d])", str, i); -+ PRE_MEM_WRITE( tmp, (Addr)vec[i].iov_base, vec[i].iov_len ); -+ } -+ } -+ } -+} -+ -+/* This handles the common part of the POST macro for preadv and preadv2. */ -+void handle_post_sys_preadv(ThreadId tid, SyscallStatus* status, Addr vector, Int count) -+{ -+ vg_assert(SUCCESS); -+ if (RES > 0) { -+ Int i; -+ struct vki_iovec * vec = (struct vki_iovec *)(Addr)vector; -+ Int remains = RES; -+ -+ /* RES holds the number of bytes read. */ -+ for (i = 0; i < count; i++) { -+ Int nReadThisBuf = vec[i].iov_len; -+ if (nReadThisBuf > remains) nReadThisBuf = remains; -+ POST_MEM_WRITE( (Addr)vec[i].iov_base, nReadThisBuf ); -+ remains -= nReadThisBuf; -+ if (remains < 0) VG_(core_panic)("preadv: remains < 0"); -+ } -+ } -+} - - PRE(sys_preadv) - { -- Int i; -- struct vki_iovec * vec; - *flags |= SfMayBlock; -+ const char *str = "preadv"; - #if VG_WORDSIZE == 4 - /* Note that the offset argument here is in lo+hi order on both - big and little endian platforms... */ -@@ -5525,45 +5570,89 @@ PRE(sys_preadv) - #else - # error Unexpected word size - #endif -- if (!ML_(fd_allowed)(ARG1, "preadv", tid, False)) { -- SET_STATUS_Failure( VKI_EBADF ); -- } else { -- PRE_MEM_READ( "preadv(vector)", ARG2, ARG3 * sizeof(struct vki_iovec) ); -+ Int fd = ARG1; -+ Addr vector = ARG2; -+ Int count = ARG3; -+ -+ handle_pre_sys_preadv(tid, status, fd, vector, count, str); - -- if (ARG2 != 0) { -- /* ToDo: don't do any of the following if the vector is invalid */ -- vec = (struct vki_iovec *)(Addr)ARG2; -- for (i = 0; i < (Int)ARG3; i++) -- PRE_MEM_WRITE( "preadv(vector[...])", -- (Addr)vec[i].iov_base, vec[i].iov_len ); -- } -- } - } - - POST(sys_preadv) - { -- vg_assert(SUCCESS); -- if (RES > 0) { -- Int i; -- struct vki_iovec * vec = (struct vki_iovec *)(Addr)ARG2; -- Int remains = RES; -+ Addr vector = ARG2; -+ Int count = ARG3; - -- /* RES holds the number of bytes read. */ -- for (i = 0; i < (Int)ARG3; i++) { -- Int nReadThisBuf = vec[i].iov_len; -- if (nReadThisBuf > remains) nReadThisBuf = remains; -- POST_MEM_WRITE( (Addr)vec[i].iov_base, nReadThisBuf ); -- remains -= nReadThisBuf; -- if (remains < 0) VG_(core_panic)("preadv: remains < 0"); -+ handle_post_sys_preadv(tid, status, vector, count); -+} -+ -+PRE(sys_preadv2) -+{ -+ *flags |= SfMayBlock; -+ const char *str = "preadv2"; -+#if VG_WORDSIZE == 4 -+ /* Note that the offset argument here is in lo+hi order on both -+ big and little endian platforms... */ -+ PRINT("sys_preadv2 ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD -+ "u, %lld, %" FMT_REGWORD "u )", -+ ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5), ARG6); -+ PRE_REG_READ6(ssize_t, "preadv2", -+ unsigned long, fd, const struct iovec *, vector, -+ unsigned long, count, vki_u32, offset_low, -+ vki_u32, offset_high, unsigned long, flags); -+#elif VG_WORDSIZE == 8 -+ PRINT("sys_preadv2 ( %lu, %#lx, %lu, %ld, %lu )", ARG1, ARG2, ARG3, SARG4, ARG5); -+ PRE_REG_READ5(ssize_t, "preadv2", -+ unsigned long, fd, const struct iovec *, vector, -+ unsigned long, count, Word, offset, unsigned long, flags); -+#else -+# error Unexpected word size -+#endif -+ Int fd = ARG1; -+ Addr vector = ARG2; -+ Int count = ARG3; -+ -+ handle_pre_sys_preadv(tid, status, fd, vector, count, str); -+} -+ -+POST(sys_preadv2) -+{ -+ Addr vector = ARG2; -+ Int count = ARG3; -+ -+ handle_post_sys_preadv(tid, status, vector, count); -+} -+ -+/* This handles the common part of the PRE macro for pwritev and pwritev2. */ -+void handle_sys_pwritev(ThreadId tid, SyscallStatus* status, -+ Int fd, Addr vector, Int count, const char *str) -+{ -+ Int i; -+ struct vki_iovec * vec; -+ /* safe size for the "preadv/preadv2(vector[i])" string */ -+ char tmp[30]; -+ -+ if (!ML_(fd_allowed)(fd, str, tid, False)) { -+ SET_STATUS_Failure( VKI_EBADF ); -+ } else if (count > 0) { -+ VG_(strcpy) (tmp, str); -+ VG_(strcat) (tmp, "(vector)"); -+ PRE_MEM_READ( tmp, vector, count * sizeof(struct vki_iovec) ); -+ if (ML_(safe_to_deref) ((void *)(Addr)vector, -+ count * sizeof(struct vki_iovec))) { -+ vec = (struct vki_iovec *)(Addr)vector; -+ for (i = 0; i < count; i++) { -+ VG_(snprintf) (tmp, 30, "%s(vector[%d])", str, i); -+ PRE_MEM_READ( tmp, (Addr)vec[i].iov_base, vec[i].iov_len ); -+ } - } - } - } - - PRE(sys_pwritev) - { -- Int i; -- struct vki_iovec * vec; - *flags |= SfMayBlock; -+ const char *str = "pwritev"; - #if VG_WORDSIZE == 4 - /* Note that the offset argument here is in lo+hi order on both - big and little endian platforms... */ -@@ -5581,19 +5670,41 @@ PRE(sys_pwritev) - #else - # error Unexpected word size - #endif -- if (!ML_(fd_allowed)(ARG1, "pwritev", tid, False)) { -- SET_STATUS_Failure( VKI_EBADF ); -- } else { -- PRE_MEM_READ( "pwritev(vector)", -- ARG2, ARG3 * sizeof(struct vki_iovec) ); -- if (ARG2 != 0) { -- /* ToDo: don't do any of the following if the vector is invalid */ -- vec = (struct vki_iovec *)(Addr)ARG2; -- for (i = 0; i < (Int)ARG3; i++) -- PRE_MEM_READ( "pwritev(vector[...])", -- (Addr)vec[i].iov_base, vec[i].iov_len ); -- } -- } -+ Int fd = ARG1; -+ Addr vector = ARG2; -+ Int count = ARG3; -+ -+ handle_sys_pwritev(tid, status, fd, vector, count, str); -+} -+ -+PRE(sys_pwritev2) -+{ -+ *flags |= SfMayBlock; -+ const char *str = "pwritev2"; -+#if VG_WORDSIZE == 4 -+ /* Note that the offset argument here is in lo+hi order on both -+ big and little endian platforms... */ -+ PRINT("sys_pwritev2 ( %" FMT_REGWORD "u, %#" FMT_REGWORD "x, %" FMT_REGWORD -+ "u, %lld, %" FMT_REGWORD "u )", -+ ARG1, ARG2, ARG3, (Long)LOHI64(ARG4,ARG5), ARG6); -+ PRE_REG_READ6(ssize_t, "pwritev2", -+ unsigned long, fd, const struct iovec *, vector, -+ unsigned long, count, vki_u32, offset_low, -+ vki_u32, offset_high, unsigned long, flags); -+#elif VG_WORDSIZE == 8 -+ /* Note offset_high isn't actually used? */ -+ PRE_REG_READ6(ssize_t, "pwritev2", -+ unsigned long, fd, const struct iovec *, vector, -+ unsigned long, count, Word, offset, -+ Word, offset_high, unsigned long, flags); -+#else -+# error Unexpected word size -+#endif -+ Int fd = ARG1; -+ Addr vector = ARG2; -+ Int count = ARG3; -+ -+ handle_sys_pwritev(tid, status, fd, vector, count, str); - } - - /* --------------------------------------------------------------------- -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index baa2934ab..d65a664dd 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1006,6 +1006,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_membarrier, sys_membarrier), // 365 - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 379 -+ LINX_(__NR_preadv2, sys_preadv2), // 380 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 381 - - LINXY(__NR_statx, sys_statx), // 383 - }; -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index 1481e768b..3354d41c0 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -853,6 +853,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_shutdown, sys_shutdown), // 373 - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 375 -+ LINXY(__NR_preadv2, sys_preadv2), // 376 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 377 - - LINXY(__NR_statx, sys_statx), // 379 - }; -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index 9ff53a92a..33d1213a3 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1607,6 +1607,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_membarrier, sys_membarrier), // 375 - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 377 -+ LINXY(__NR_preadv2, sys_preadv2), // 378 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 379 - - LINXY(__NR_pkey_mprotect, sys_pkey_mprotect), // 380 - LINX_(__NR_pkey_alloc, sys_pkey_alloc), // 381 -diff --git a/memcheck/tests/linux/Makefile.am b/memcheck/tests/linux/Makefile.am -index 00e99a52a..e13325869 100644 ---- a/memcheck/tests/linux/Makefile.am -+++ b/memcheck/tests/linux/Makefile.am -@@ -26,7 +26,9 @@ EXTRA_DIST = \ - timerfd-syscall.vgtest timerfd-syscall.stderr.exp \ - with-space.stderr.exp with-space.stdout.exp with-space.vgtest \ - proc-auxv.vgtest proc-auxv.stderr.exp getregset.vgtest \ -- getregset.stderr.exp getregset.stdout.exp -+ getregset.stderr.exp getregset.stdout.exp \ -+ sys-preadv_pwritev.vgtest sys-preadv_pwritev.stderr.exp \ -+ sys-preadv2_pwritev2.vgtest sys-preadv2_pwritev2.stderr.exp - - check_PROGRAMS = \ - brk \ -@@ -54,6 +56,14 @@ if HAVE_COPY_FILE_RANGE - check_PROGRAMS += sys-copy_file_range - endif - -+if HAVE_PREADV_PWRITEV -+ check_PROGRAMS += sys-preadv_pwritev -+endif -+ -+if HAVE_PREADV2_PWRITEV2 -+ check_PROGRAMS += sys-preadv2_pwritev2 -+endif -+ - AM_CFLAGS += $(AM_FLAG_M3264_PRI) - AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) - -diff --git a/memcheck/tests/linux/sys-preadv2_pwritev2.c b/memcheck/tests/linux/sys-preadv2_pwritev2.c -new file mode 100644 -index 000000000..942eab68b ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv2_pwritev2.c -@@ -0,0 +1,79 @@ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "../../memcheck.h" -+ -+#include -+ -+int main(int argc, char **argv) -+{ -+ char str0[] = "hello "; -+ char str1[] = "world\n"; -+ struct iovec iov[2]; -+ int fd; -+ -+ fd = open("prwv2_source", O_CREAT | O_RDWR, 0644); -+ if (fd == -1) { -+ perror("prwv2_source"); -+ exit(EXIT_FAILURE); -+ } -+ -+ iov[0].iov_base = str0; -+ iov[0].iov_len = strlen(str0); -+ iov[1].iov_base = str1; -+ iov[1].iov_len = strlen(str1); -+ -+ /* Check pwritev2 and preadv2 called with the correct arguments works. */ -+ if (pwritev2(fd, iov, 2, 0, 0) == -1) { -+ perror("pwritev2"); -+ exit(EXIT_FAILURE); -+ } -+ -+ if (preadv2(fd, iov, 2, 0, 0) == -1) { -+ perror("preadv2"); -+ printf("errno: %d\n", errno); -+ exit(EXIT_FAILURE); -+ } -+ -+ /* Check valgrind will produce expected warnings for the -+ various wrong arguments. */ -+ do { -+ /* always allocate 16 bytes to not to have different .exps for different reg sizes */ -+ char *mem = malloc(16); -+ void *t = (void *) &mem[0]; -+ void *z = (void *) -1; -+ int c = *((int *) &mem[4]); -+ int flag = *((int *) &mem[8]); -+ pwritev2(fd, NULL, 2, 0, 0); -+ pwritev2(fd, z, 2, 0, 0); -+ pwritev2(fd, t, 2, 0, 0); -+ pwritev2(fd, iov, -1, 0, 0); -+ pwritev2(fd, iov, c, 0, 0); -+ pwritev2(fd, iov, 2, -5, 0); -+ pwritev2(-1, iov, 2, -5, 0); -+ pwritev2(fd, iov, 2, -5, flag); -+ -+ preadv2(fd, NULL, 2, 0, 0); -+ preadv2(fd, z, 2, 0, 0); -+ preadv2(fd, t, 2, 0, 0); -+ preadv2(fd, iov, -1, 0, 0); -+ preadv2(fd, iov, c, 0, 0); -+ preadv2(fd, iov, 2, -5, 0); -+ preadv2(-1, iov, 2, -5, 0); -+ -+ iov[1].iov_base = (void *) -1; -+ pwritev2(fd, iov, 2, 0, 0); -+ preadv2(fd, iov, 2, 0, 0); -+ free(mem); -+ } while (0); -+ -+ close(fd); -+ unlink("prwv2_source"); -+ exit(EXIT_SUCCESS); -+} -diff --git a/memcheck/tests/linux/sys-preadv2_pwritev2.stderr.exp b/memcheck/tests/linux/sys-preadv2_pwritev2.stderr.exp -new file mode 100644 -index 000000000..e11f2a51d ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv2_pwritev2.stderr.exp -@@ -0,0 +1,56 @@ -+Syscall param pwritev2(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:53) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param pwritev2(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:54) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param pwritev2(vector) points to uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:55) -+ Address 0x........ is 0 bytes inside a block of size 16 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ by 0x........: main (sys-preadv2_pwritev2.c:48) -+ -+Syscall param pwritev2(count) contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:57) -+ -+Syscall param pwritev2(flags) contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:60) -+ -+Syscall param preadv2(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:62) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv2(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:63) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv2(vector) points to uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:64) -+ Address 0x........ is 0 bytes inside a block of size 16 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ by 0x........: main (sys-preadv2_pwritev2.c:48) -+ -+Syscall param preadv2(count) contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:66) -+ -+Syscall param pwritev2(vector[1]) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:71) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv2(vector[1]) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv2_pwritev2.c:72) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -diff --git a/memcheck/tests/linux/sys-preadv2_pwritev2.vgtest b/memcheck/tests/linux/sys-preadv2_pwritev2.vgtest -new file mode 100644 -index 000000000..5cd23aacd ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv2_pwritev2.vgtest -@@ -0,0 +1,3 @@ -+prereq: test -e sys-preadv2_pwritev2 -+prog: sys-preadv2_pwritev2 -+vgopts: -q -diff --git a/memcheck/tests/linux/sys-preadv_pwritev.c b/memcheck/tests/linux/sys-preadv_pwritev.c -new file mode 100644 -index 000000000..f5087dddc ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv_pwritev.c -@@ -0,0 +1,77 @@ -+#define _GNU_SOURCE -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "../../memcheck.h" -+ -+#include -+ -+int main(int argc, char **argv) -+{ -+ char str0[] = "hello "; -+ char str1[] = "world\n"; -+ struct iovec iov[2]; -+ int fd; -+ -+ fd = open("prwv_source", O_CREAT | O_RDWR, 0644); -+ if (fd == -1) { -+ perror("prwv2_source"); -+ exit(EXIT_FAILURE); -+ } -+ -+ iov[0].iov_base = str0; -+ iov[0].iov_len = strlen(str0); -+ iov[1].iov_base = str1; -+ iov[1].iov_len = strlen(str1); -+ -+ /* Check pwritev and preadv called with the correct arguments works. */ -+ if (pwritev(fd, iov, 2, 0) == -1) { -+ perror("pwritev"); -+ exit(EXIT_FAILURE); -+ } -+ -+ if (preadv(fd, iov, 2, 0) == -1) { -+ perror("preadv"); -+ printf("errno: %d\n", errno); -+ exit(EXIT_FAILURE); -+ } -+ -+ /* Check valgrind will produce expected warnings for the -+ various wrong arguments. */ -+ do { -+ /* always allocate 16 bytes to not to have different .exps for different reg sizes */ -+ char *mem = malloc(16); -+ void *t = (void *) &mem[0]; -+ void *z = (void *) -1; -+ int c = *((int *) &mem[4]); -+ pwritev(fd, NULL, 2, 0); -+ pwritev(fd, z, 2, 0); -+ pwritev(fd, t, 2, 0); -+ pwritev(fd, iov, -1, 0); -+ pwritev(fd, iov, c, 0); -+ pwritev(fd, iov, 2, -5); -+ pwritev(-1, iov, 2, -5); -+ -+ preadv(fd, NULL, 2, 0); -+ preadv(fd, z, 2, 0); -+ preadv(fd, t, 2, 0); -+ preadv(fd, iov, -1, 0); -+ preadv(fd, iov, c, 0); -+ preadv(fd, iov, 2, -5); -+ preadv(-1, iov, 2, -5); -+ -+ iov[1].iov_base = (void *) -1; -+ pwritev(fd, iov, 2, 0); -+ preadv(fd, iov, 2, 0); -+ free(mem); -+ } while (0); -+ -+ close(fd); -+ unlink("prwv_source"); -+ exit(EXIT_SUCCESS); -+} -diff --git a/memcheck/tests/linux/sys-preadv_pwritev.stderr.exp b/memcheck/tests/linux/sys-preadv_pwritev.stderr.exp -new file mode 100644 -index 000000000..4fede44d8 ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv_pwritev.stderr.exp -@@ -0,0 +1,52 @@ -+Syscall param pwritev(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:52) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param pwritev(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:53) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param pwritev(vector) points to uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:54) -+ Address 0x........ is 0 bytes inside a block of size 16 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ by 0x........: main (sys-preadv_pwritev.c:48) -+ -+Syscall param pwritev(count) contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:56) -+ -+Syscall param preadv(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:60) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv(vector) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:61) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv(vector) points to uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:62) -+ Address 0x........ is 0 bytes inside a block of size 16 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ by 0x........: main (sys-preadv_pwritev.c:48) -+ -+Syscall param preadv(count) contains uninitialised byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:64) -+ -+Syscall param pwritev(vector[1]) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:69) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -+Syscall param preadv(vector[1]) points to unaddressable byte(s) -+ ... -+ by 0x........: main (sys-preadv_pwritev.c:70) -+ Address 0x........ is not stack'd, malloc'd or (recently) free'd -+ -diff --git a/memcheck/tests/linux/sys-preadv_pwritev.vgtest b/memcheck/tests/linux/sys-preadv_pwritev.vgtest -new file mode 100644 -index 000000000..f07dc2935 ---- /dev/null -+++ b/memcheck/tests/linux/sys-preadv_pwritev.vgtest -@@ -0,0 +1,3 @@ -+prereq: test -e sys-preadv_pwritev -+prog: sys-preadv_pwritev -+vgopts: -q - -commit 514f899388e05142513ff3f679a9e0131145e34e -Author: Mark Wielaard -Date: Wed Jul 3 10:27:17 2019 +0200 - - Hook up preadv2 and pwritev2 correctly for arm64. - - Use the correct generic linux sys wrapper. - - Followup for https://bugs.kde.org/408414 - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index d12d40632..91329b682 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -818,8 +818,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_membarrier, sys_membarrier), // 283 - // (__NR_mlock2, sys_ni_syscall), // 284 - LINX_(__NR_copy_file_range, sys_copy_file_range), // 285 -- LINX_(__NR_preadv2, sys_ni_syscall), // 286 -- LINX_(__NR_pwritev2, sys_ni_syscall), // 287 -+ LINXY(__NR_preadv2, sys_preadv2), // 286 -+ LINX_(__NR_pwritev2, sys_pwritev2), // 287 - // (__NR_pkey_mprotect, sys_ni_syscall), // 288 - // (__NR_pkey_alloc, sys_ni_syscall), // 289 - // (__NR_pkey_free, sys_ni_syscall), // 290 diff --git a/valgrind-3.15.0-ptrace-siginfo.patch b/valgrind-3.15.0-ptrace-siginfo.patch deleted file mode 100644 index 0276762..0000000 --- a/valgrind-3.15.0-ptrace-siginfo.patch +++ /dev/null @@ -1,170 +0,0 @@ -commit 3bac39a10abf292d332bb20ab58c6dd5c28f9108 -Author: Eugene Syromyatnikov -Date: Fri Mar 8 04:07:00 2019 +0100 - - include/vki: fix vki_siginfo_t definition on amd64, arm64, and ppc64 - - As it turned out, the size of vki_siginfo_t is incorrect on these 64-bit - architectures: - - (gdb) p sizeof(vki_siginfo_t) - $1 = 136 - (gdb) ptype struct vki_siginfo - type = struct vki_siginfo { - int si_signo; - int si_errno; - int si_code; - union { - int _pad[29]; - struct {...} _kill; - struct {...} _timer; - struct {...} _rt; - struct {...} _sigchld; - struct {...} _sigfault; - struct {...} _sigpoll; - } _sifields; - } - - It looks like that for this architecture, __VKI_ARCH_SI_PREAMBLE_SIZE - hasn't been defined properly, which resulted in incorrect - VKI_SI_PAD_SIZE calculation (29 instead of 28). - - <6a9e4> DW_AT_name : (indirect string, offset: 0xcf59): _sifields - <6a9ef> DW_AT_data_member_location: 16 - - This issue has been discovered with strace's "make check-valgrind-memcheck", - which produced false out-of-bounds writes on ptrace(PTRACE_GETSIGINFO) calls: - - SYSCALL[24264,1](101) sys_ptrace ( 16898, 24283, 0x0, 0x606bd40 ) - ==24264== Syscall param ptrace(getsiginfo) points to unaddressable byte(s) - ==24264== at 0x575C06E: ptrace (ptrace.c:45) - ==24264== by 0x443244: next_event (strace.c:2431) - ==24264== by 0x443D30: main (strace.c:2845) - ==24264== Address 0x606bdc0 is 0 bytes after a block of size 144 alloc'd - - (Note that the address passed is 0x606bd40 and the address reported is - 0x606bdc0). - - After the patch, no such errors observed. - - * include/vki/vki-amd64-linux.h [__x86_64__ && __ILP32__] - (__vki_kernel_si_clock_t): New typedef. - [__x86_64__ && __ILP32__] (__VKI_ARCH_SI_CLOCK_T, - __VKI_ARCH_SI_ATTRIBUTES): New macros. - [__x86_64__ && !__ILP32__] (__VKI_ARCH_SI_PREAMBLE_SIZE): New macro, - define to 4 ints. - * include/vki/vki-arm64-linux.h (__VKI_ARCH_SI_PREAMBLE_SIZE): Likewise. - * include/vki/vki-ppc64-linux.h [__powerpc64__] (__VKI_ARCH_SI_PREAMBLE_SIZE): - Likewise. - * include/vki/vki-linux.h [!__VKI_ARCH_SI_CLOCK_T] - (__VKI_ARCH_SI_CLOCK_T): New macro, define to vki_clock_t. - [!__VKI_ARCH_SI_ATTRIBUTES] (__VKI_ARCH_SI_ATTRIBUTES): New macro, - define to nil. - (struct vki_siginfo): Use __VKI_ARCH_SI_CLOCK_T type for _utime and - _stime fields. Add __VKI_ARCH_SI_ATTRIBUTES. - - Resolves: https://bugs.kde.org/show_bug.cgi?id=405201 - Reported-by: Dmitry V. Levin - Signed-off-by: Eugene Syromyatnikov - -diff --git a/include/vki/vki-amd64-linux.h b/include/vki/vki-amd64-linux.h -index d6a5a77e6..fbd353aed 100644 ---- a/include/vki/vki-amd64-linux.h -+++ b/include/vki/vki-amd64-linux.h -@@ -297,6 +297,21 @@ struct vki_f_owner_ex { - #define VKI_RLIMIT_CORE 4 /* max core file size */ - #define VKI_RLIMIT_NOFILE 7 /* max number of open files */ - -+//---------------------------------------------------------------------- -+// From linux-5.0.0/arch/x86/include/uapi/asm/siginfo.h -+//---------------------------------------------------------------------- -+ -+/* We need that to ensure that sizeof(siginfo) == 128. */ -+#ifdef __x86_64__ -+# ifdef __ILP32__ -+typedef long long __vki_kernel_si_clock_t __attribute__((aligned(4))); -+# define __VKI_ARCH_SI_CLOCK_T __vki_kernel_si_clock_t -+# define __VKI_ARCH_SI_ATTRIBUTES __attribute__((aligned(8))) -+# else -+# define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) -+# endif -+#endif -+ - //---------------------------------------------------------------------- - // From linux-2.6.9/include/asm-x86_64/socket.h - //---------------------------------------------------------------------- -diff --git a/include/vki/vki-arm64-linux.h b/include/vki/vki-arm64-linux.h -index ecea8cc78..69fb3ed00 100644 ---- a/include/vki/vki-arm64-linux.h -+++ b/include/vki/vki-arm64-linux.h -@@ -193,6 +193,12 @@ struct vki_sigcontext { - __vki_u8 __reserved[4096] __attribute__((__aligned__(16))); - }; - -+//---------------------------------------------------------------------- -+// From linux-5.0.0/arch/arm64/include/uapi/asm/siginfo.h -+//---------------------------------------------------------------------- -+ -+#define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) -+ - //---------------------------------------------------------------------- - // From linux-3.10.5/uapi/include/asm-generic/mman-common.h - //---------------------------------------------------------------------- -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index 6024f2165..6903c77db 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -426,6 +426,14 @@ typedef union vki_sigval { - #define __VKI_ARCH_SI_BAND_T long - #endif - -+#ifndef __VKI_ARCH_SI_CLOCK_T -+#define __VKI_ARCH_SI_CLOCK_T vki_clock_t -+#endif -+ -+#ifndef __VKI_ARCH_SI_ATTRIBUTES -+#define __VKI_ARCH_SI_ATTRIBUTES -+#endif -+ - // [[Nb: this type changed between 2.4 and 2.6, but not in a way that - // affects Valgrind.]] - typedef struct vki_siginfo { -@@ -463,8 +471,8 @@ typedef struct vki_siginfo { - vki_pid_t _pid; /* which child */ - __VKI_ARCH_SI_UID_T _uid; /* sender's uid */ - int _status; /* exit code */ -- vki_clock_t _utime; -- vki_clock_t _stime; -+ __VKI_ARCH_SI_CLOCK_T _utime; -+ __VKI_ARCH_SI_CLOCK_T _stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ -@@ -481,7 +489,7 @@ typedef struct vki_siginfo { - int _fd; - } _sigpoll; - } _sifields; --} vki_siginfo_t; -+} __VKI_ARCH_SI_ATTRIBUTES vki_siginfo_t; - #endif - - #define __VKI_SI_FAULT 0 -diff --git a/include/vki/vki-ppc64-linux.h b/include/vki/vki-ppc64-linux.h -index a5e64dd39..04f72048a 100644 ---- a/include/vki/vki-ppc64-linux.h -+++ b/include/vki/vki-ppc64-linux.h -@@ -335,6 +335,14 @@ struct vki_sigcontext { - long vmx_reserve[VKI_ELF_NVRREG+VKI_ELF_NVRREG+1]; - }; - -+//---------------------------------------------------------------------- -+// From linux-5.0.0/arch/powerpc/include/uapi/asm/siginfo.h -+//---------------------------------------------------------------------- -+ -+#ifdef __powerpc64__ -+# define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) -+#endif -+ - //---------------------------------------------------------------------- - // From linux-2.6.13/include/asm-ppc64/mman.h - //---------------------------------------------------------------------- diff --git a/valgrind-3.15.0-s390x-HRcVec128.patch b/valgrind-3.15.0-s390x-HRcVec128.patch deleted file mode 100644 index c0a5202..0000000 --- a/valgrind-3.15.0-s390x-HRcVec128.patch +++ /dev/null @@ -1,153 +0,0 @@ -From abbd80e7e23deb1f27fb50410c8b3a3f7cdfb646 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Wed, 12 Feb 2020 14:13:55 +0100 -Subject: [PATCH] Bug 417452 - s390_insn_store_emit: dst->tag for HRcVec128 - -It was seen that the s390 instruction selector chose a wrong addressing -mode for storing a vector register. The VST instruction only handles -short (12-bit unsigned) displacements, but a long (20-bit signed) -displacement was generated instead, resulting in a panic: - -vex: the `impossible' happened: - s390_insn_store_emit: unknown dst->tag for HRcVec128 - -The fix prevents long displacements for vector store operations. It also -optimizes vector store operations from an Iex_Get, by converting them to a -memory copy. This optimization was already performed for integer -registers. ---- - VEX/priv/host_s390_defs.c | 2 +- - VEX/priv/host_s390_isel.c | 67 +++++++++++++++++++++++++++------------ - 2 files changed, 48 insertions(+), 21 deletions(-) - -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 9ad7240c4..47928cbe1 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -6314,7 +6314,7 @@ s390_insn_memcpy(UChar size, s390_amode *dst, s390_amode *src) - insn->variant.memcpy.src = src; - insn->variant.memcpy.dst = dst; - -- vassert(size == 1 || size == 2 || size == 4 || size == 8); -+ vassert(size == 1 || size == 2 || size == 4 || size == 8 || size == 16); - - return insn; - } -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 97614c873..fff81fe0f 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -302,12 +302,14 @@ ulong_fits_signed_8bit(ULong val) - return val == v; - } - --/* EXPR is an expression that is used as an address. Return an s390_amode -- for it. If select_b12_b20_only is true the returned amode must be either -- S390_AMODE_B12 or S390_AMODE_B20. */ -+/* EXPR is an expression that is used as an address. Return an s390_amode for -+ it. If no_index is true the returned amode must be either S390_AMODE_B12 or -+ S390_AMODE_B20. If short_displacement is true it must be either -+ S390_AMODE_B12 or S390_AMODE_BX12. */ - static s390_amode * - s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, -- Bool select_b12_b20_only __attribute__((unused))) -+ Bool no_index __attribute__((unused)), -+ Bool short_displacement) - { - if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { - IRExpr *arg1 = expr->Iex.Binop.arg1; -@@ -328,7 +330,7 @@ s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, - if (ulong_fits_unsigned_12bit(value)) { - return s390_amode_b12((Int)value, s390_isel_int_expr(env, arg1)); - } -- if (ulong_fits_signed_20bit(value)) { -+ if (!short_displacement && ulong_fits_signed_20bit(value)) { - return s390_amode_b20((Int)value, s390_isel_int_expr(env, arg1)); - } - } -@@ -348,7 +350,25 @@ s390_isel_amode(ISelEnv *env, IRExpr *expr) - /* Address computation should yield a 64-bit value */ - vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); - -- am = s390_isel_amode_wrk(env, expr, /* B12, B20 only */ False); -+ am = s390_isel_amode_wrk(env, expr, False, False); -+ -+ /* Check post-condition */ -+ vassert(s390_amode_is_sane(am)); -+ -+ return am; -+} -+ -+/* Sometimes we need an amode with short (12-bit) displacement. An example is -+ the vector-store opcode. */ -+static s390_amode * -+s390_isel_amode_short(ISelEnv *env, IRExpr *expr) -+{ -+ s390_amode *am; -+ -+ /* Address computation should yield a 64-bit value */ -+ vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); -+ -+ am = s390_isel_amode_wrk(env, expr, False, True); - - /* Check post-condition */ - vassert(s390_amode_is_sane(am)); -@@ -379,7 +399,7 @@ s390_isel_amode_b12_b20(ISelEnv *env, IRExpr *expr) - /* Address computation should yield a 64-bit value */ - vassert(typeOfIRExpr(env->type_env, expr) == Ity_I64); - -- am = s390_isel_amode_wrk(env, expr, /* B12, B20 only */ True); -+ am = s390_isel_amode_wrk(env, expr, True, False); - - /* Check post-condition */ - vassert(s390_amode_is_sane(am) && -@@ -4727,7 +4747,26 @@ s390_isel_stmt(ISelEnv *env, IRStmt *stmt) - - if (stmt->Ist.Store.end != Iend_BE) goto stmt_fail; - -- am = s390_isel_amode(env, stmt->Ist.Store.addr); -+ if (tyd == Ity_V128) { -+ am = s390_isel_amode_short(env, stmt->Ist.Store.addr); -+ } else { -+ am = s390_isel_amode(env, stmt->Ist.Store.addr); -+ } -+ -+ /* Check whether we can use a memcpy. Currently, the restriction -+ is that both amodes need to be B12, so MVC can be emitted. -+ We do not consider a store whose data expression is a load because -+ we don't want to deal with overlapping locations. */ -+ /* store(get) never overlaps*/ -+ if (am->tag == S390_AMODE_B12 && -+ stmt->Ist.Store.data->tag == Iex_Get) { -+ UInt offset = stmt->Ist.Store.data->Iex.Get.offset; -+ s390_amode *from = s390_amode_for_guest_state(offset); -+ if (from->tag == S390_AMODE_B12) { -+ addInstr(env, s390_insn_memcpy(sizeofIRType(tyd), am, from)); -+ return; -+ } -+ } - - switch (tyd) { - case Ity_I8: -@@ -4742,18 +4781,6 @@ s390_isel_stmt(ISelEnv *env, IRStmt *stmt) - addInstr(env, s390_insn_mimm(sizeofIRType(tyd), am, value)); - return; - } -- /* Check whether we can use a memcpy here. Currently, the restriction -- is that both amodes need to be B12, so MVC can be emitted. -- We do not consider a store whose data expression is a load because -- we don't want to deal with overlapping locations. */ -- /* store(get) never overlaps*/ -- if (am->tag == S390_AMODE_B12 && -- stmt->Ist.Store.data->tag == Iex_Get) { -- UInt offset = stmt->Ist.Store.data->Iex.Get.offset; -- s390_amode *from = s390_amode_for_guest_state(offset); -- addInstr(env, s390_insn_memcpy(sizeofIRType(tyd), am, from)); -- return; -- } - /* General case: compile data into a register */ - src = s390_isel_int_expr(env, stmt->Ist.Store.data); - break; --- -2.23.0 - diff --git a/valgrind-3.15.0-s390x-compare-and-signal.patch b/valgrind-3.15.0-s390x-compare-and-signal.patch deleted file mode 100644 index 473e3db..0000000 --- a/valgrind-3.15.0-s390x-compare-and-signal.patch +++ /dev/null @@ -1,436 +0,0 @@ -diff --git a/README.s390 b/README.s390 -index ac9485a62..7df386ef4 100644 ---- a/README.s390 -+++ b/README.s390 -@@ -11,7 +11,10 @@ Limitations - ----------- - - 31-bit client programs are not supported. - - Hexadecimal floating point is not supported. --- Transactional memory is not supported. -+- Transactional memory is not supported. The transactional-execution -+ facility is masked off from HWCAP. -+- FP signalling is not accurate. E.g., the "compare and signal" -+ instructions behave like their non-signalling counterparts. - - memcheck, cachegrind, drd, helgrind, massif, lackey, and none are - supported. - - On machine models predating z10, cachegrind will assume a z10 cache -@@ -21,8 +24,6 @@ Limitations - - Some gcc versions use mvc to copy 4/8 byte values. This will affect - certain debug messages. For example, memcheck will complain about - 4 one-byte reads/writes instead of just a single read/write. --- The transactional-execution facility is not supported; it is masked -- off from HWCAP. - - - Hardware facilities -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index a8f0d3a07..1f626f722 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -1204,6 +1204,16 @@ get_dpr_dw0(UInt archreg) - return IRExpr_Get(fpr_dw0_offset(archreg), Ity_D64); - } - -+/* Read a float of given type from an fpr. */ -+static IRExpr * -+get_fpr_float(UInt archreg, IRType type) -+{ -+ if (type == Ity_F128) -+ return get_fpr_pair(archreg); -+ else -+ return IRExpr_Get(fpr_offset(archreg), type); -+} -+ - /*------------------------------------------------------------*/ - /*--- gpr registers ---*/ - /*------------------------------------------------------------*/ -@@ -14055,94 +14065,102 @@ s390_irgen_AXBR(UChar r1, UChar r2) - return "axbr"; - } - -+/* Helper for "compare" insns CEBR, CDBR, CXBR, and their signalling -+ counterparts. */ - static const HChar * --s390_irgen_CEBR(UChar r1, UChar r2) -+s390_irgen_CxBR(const HChar *mnem, UChar r1, UChar r2, IRType type, IROp cmp_op) - { -- IRTemp op1 = newTemp(Ity_F32); -- IRTemp op2 = newTemp(Ity_F32); -+ IRTemp op1 = newTemp(type); -+ IRTemp op2 = newTemp(type); - IRTemp cc_vex = newTemp(Ity_I32); - IRTemp cc_s390 = newTemp(Ity_I32); - -- assign(op1, get_fpr_w0(r1)); -- assign(op2, get_fpr_w0(r2)); -- assign(cc_vex, binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2))); -+ assign(op1, get_fpr_float(r1, type)); -+ assign(op2, get_fpr_float(r2, type)); -+ assign(cc_vex, binop(cmp_op, mkexpr(op1), mkexpr(op2))); - - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); - s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); -+ return mnem; -+} -+ -+static const HChar * -+s390_irgen_CEBR(UChar r1, UChar r2) -+{ -+ return s390_irgen_CxBR("cebr", r1, r2, Ity_F32, Iop_CmpF32); -+} - -- return "cebr"; -+static const HChar * -+s390_irgen_KEBR(UChar r1, UChar r2) -+{ -+ return s390_irgen_CxBR("kebr", r1, r2, Ity_F32, Iop_CmpF32); - } - - static const HChar * - s390_irgen_CDBR(UChar r1, UChar r2) - { -- IRTemp op1 = newTemp(Ity_F64); -- IRTemp op2 = newTemp(Ity_F64); -- IRTemp cc_vex = newTemp(Ity_I32); -- IRTemp cc_s390 = newTemp(Ity_I32); -+ return s390_irgen_CxBR("cdbr", r1, r2, Ity_F64, Iop_CmpF64); -+} - -- assign(op1, get_fpr_dw0(r1)); -- assign(op2, get_fpr_dw0(r2)); -- assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2))); -+static const HChar * -+s390_irgen_KDBR(UChar r1, UChar r2) -+{ -+ return s390_irgen_CxBR("kdbr", r1, r2, Ity_F64, Iop_CmpF64); -+} - -- assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); -- s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); -+static const HChar * -+s390_irgen_CXBR(UChar r1, UChar r2) -+{ -+ return s390_irgen_CxBR("cxbr", r1, r2, Ity_F128, Iop_CmpF128); -+} - -- return "cdbr"; -+static const HChar * -+s390_irgen_KXBR(UChar r1, UChar r2) -+{ -+ return s390_irgen_CxBR("kxbr", r1, r2, Ity_F128, Iop_CmpF128); - } - -+/* Helper for "compare" insns CEB, CDB, and their signalling counterparts. */ - static const HChar * --s390_irgen_CXBR(UChar r1, UChar r2) -+s390_irgen_CxB(const HChar *mnem, UChar r1, IRTemp op2addr, IRType type, IROp cmp_op) - { -- IRTemp op1 = newTemp(Ity_F128); -- IRTemp op2 = newTemp(Ity_F128); -+ IRTemp op1 = newTemp(type); -+ IRTemp op2 = newTemp(type); - IRTemp cc_vex = newTemp(Ity_I32); - IRTemp cc_s390 = newTemp(Ity_I32); - -- assign(op1, get_fpr_pair(r1)); -- assign(op2, get_fpr_pair(r2)); -- assign(cc_vex, binop(Iop_CmpF128, mkexpr(op1), mkexpr(op2))); -+ assign(op1, get_fpr_float(r1, type)); -+ assign(op2, load(type, mkexpr(op2addr))); -+ assign(cc_vex, binop(cmp_op, mkexpr(op1), mkexpr(op2))); - - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); - s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); -- -- return "cxbr"; -+ return mnem; - } - - static const HChar * - s390_irgen_CEB(UChar r1, IRTemp op2addr) - { -- IRTemp op1 = newTemp(Ity_F32); -- IRTemp op2 = newTemp(Ity_F32); -- IRTemp cc_vex = newTemp(Ity_I32); -- IRTemp cc_s390 = newTemp(Ity_I32); -- -- assign(op1, get_fpr_w0(r1)); -- assign(op2, load(Ity_F32, mkexpr(op2addr))); -- assign(cc_vex, binop(Iop_CmpF32, mkexpr(op1), mkexpr(op2))); -- -- assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); -- s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); -+ return s390_irgen_CxB("ceb", r1, op2addr, Ity_F32, Iop_CmpF32); -+} - -- return "ceb"; -+static const HChar * -+s390_irgen_KEB(UChar r1, IRTemp op2addr) -+{ -+ return s390_irgen_CxB("keb", r1, op2addr, Ity_F32, Iop_CmpF32); -+ return "keb"; - } - - static const HChar * - s390_irgen_CDB(UChar r1, IRTemp op2addr) - { -- IRTemp op1 = newTemp(Ity_F64); -- IRTemp op2 = newTemp(Ity_F64); -- IRTemp cc_vex = newTemp(Ity_I32); -- IRTemp cc_s390 = newTemp(Ity_I32); -- -- assign(op1, get_fpr_dw0(r1)); -- assign(op2, load(Ity_F64, mkexpr(op2addr))); -- assign(cc_vex, binop(Iop_CmpF64, mkexpr(op1), mkexpr(op2))); -- -- assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); -- s390_cc_thunk_put1(S390_CC_OP_SET, cc_s390, False); -+ return s390_irgen_CxB("cdb", r1, op2addr, Ity_F64, Iop_CmpF64); -+} - -- return "cdb"; -+static const HChar * -+s390_irgen_KDB(UChar r1, IRTemp op2addr) -+{ -+ return s390_irgen_CxB("kdb", r1, op2addr, Ity_F64, Iop_CmpF64); - } - - static const HChar * -@@ -19270,7 +19288,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb306: s390_format_RRE_FF(s390_irgen_LXEBR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb307: /* MXDBR */ goto unimplemented; -- case 0xb308: /* KEBR */ goto unimplemented; -+ case 0xb308: s390_format_RRE_FF(s390_irgen_KEBR, RRE_r1(ovl), -+ RRE_r2(ovl)); goto ok; - case 0xb309: s390_format_RRE_FF(s390_irgen_CEBR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb30a: s390_format_RRE_FF(s390_irgen_AEBR, RRE_r1(ovl), -@@ -19300,7 +19319,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - RRE_r2(ovl)); goto ok; - case 0xb317: s390_format_RRE_FF(s390_irgen_MEEBR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; -- case 0xb318: /* KDBR */ goto unimplemented; -+ case 0xb318: s390_format_RRE_FF(s390_irgen_KDBR, RRE_r1(ovl), -+ RRE_r2(ovl)); goto ok; - case 0xb319: s390_format_RRE_FF(s390_irgen_CDBR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb31a: s390_format_RRE_FF(s390_irgen_ADBR, RRE_r1(ovl), -@@ -19351,7 +19371,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb347: s390_format_RRF_UUFF(s390_irgen_FIXBRA, RRF2_m3(ovl), - RRF2_m4(ovl), RRF2_r1(ovl), - RRF2_r2(ovl)); goto ok; -- case 0xb348: /* KXBR */ goto unimplemented; -+ case 0xb348: s390_format_RRE_FF(s390_irgen_KXBR, RRE_r1(ovl), -+ RRE_r2(ovl)); goto ok; - case 0xb349: s390_format_RRE_FF(s390_irgen_CXBR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb34a: s390_format_RRE_FF(s390_irgen_AXBR, RRE_r1(ovl), -@@ -21408,7 +21429,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXE_x2(ovl), RXE_b2(ovl), - RXE_d2(ovl)); goto ok; - case 0xed0000000007ULL: /* MXDB */ goto unimplemented; -- case 0xed0000000008ULL: /* KEB */ goto unimplemented; -+ case 0xed0000000008ULL: s390_format_RXE_FRRD(s390_irgen_KEB, RXE_r1(ovl), -+ RXE_x2(ovl), RXE_b2(ovl), -+ RXE_d2(ovl)); goto ok; - case 0xed0000000009ULL: s390_format_RXE_FRRD(s390_irgen_CEB, RXE_r1(ovl), - RXE_x2(ovl), RXE_b2(ovl), - RXE_d2(ovl)); goto ok; -@@ -21448,7 +21471,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xed0000000017ULL: s390_format_RXE_FRRD(s390_irgen_MEEB, RXE_r1(ovl), - RXE_x2(ovl), RXE_b2(ovl), - RXE_d2(ovl)); goto ok; -- case 0xed0000000018ULL: /* KDB */ goto unimplemented; -+ case 0xed0000000018ULL: s390_format_RXE_FRRD(s390_irgen_KDB, RXE_r1(ovl), -+ RXE_x2(ovl), RXE_b2(ovl), -+ RXE_d2(ovl)); goto ok; - case 0xed0000000019ULL: s390_format_RXE_FRRD(s390_irgen_CDB, RXE_r1(ovl), - RXE_x2(ovl), RXE_b2(ovl), - RXE_d2(ovl)); goto ok; -diff --git a/none/tests/s390x/bfp-4.c b/none/tests/s390x/bfp-4.c -index c2d88818c..645421294 100644 ---- a/none/tests/s390x/bfp-4.c -+++ b/none/tests/s390x/bfp-4.c -@@ -1,61 +1,77 @@ - #include - --/* Test BFP comparison for 32/64-bit. */ -+#define TEST_CxBR(insn, fmt, v1, v2) \ -+ do { \ -+ int cc; \ -+ \ -+ __asm__ volatile(insn " %[r1],%[r2]\n\t" \ -+ "ipm %[psw]\n\t" \ -+ "srl %[psw],28\n\t" \ -+ : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); \ -+ if (cc == 0) \ -+ printf(insn ": " fmt " == " fmt "\n", v1, v2); \ -+ else if (cc == 1) \ -+ printf(insn ": " fmt " < " fmt "\n", v1, v2); \ -+ else if (cc == 2) \ -+ printf(insn ": " fmt " > " fmt "\n", v1, v2); \ -+ else \ -+ printf(insn ": " fmt " ?? " fmt "\n", v1, v2); \ -+ } while (0) - --void cebr(float v1, float v2) -+/* Test BFP comparison for 32/64/128-bit. */ -+ -+void cebr(float a, float b) -+{ -+ TEST_CxBR("cebr", "%g", a, b); -+} -+ -+void cdbr(double a, double b) -+{ -+ TEST_CxBR("cdbr", "%g", a, b); -+} -+ -+void cxbr(long double a, long double b) - { -- int cc; -+ TEST_CxBR("cxbr", "%Lg", a, b); -+} - -- __asm__ volatile("cebr %[r1],%[r2]\n\t" -- "ipm %[psw]\n\t" -- "srl %[psw],28\n\t" -- : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); -- if (cc == 0) -- printf("cfebr: %f == %f\n", v1, v2); -- if (cc == 1) -- printf("cfebr: %f < %f\n", v1, v2); -- if (cc == 2) -- printf("cfebr: %f > %f\n", v1, v2); -+void kebr(float a, float b) -+{ -+ TEST_CxBR("kebr", "%g", a, b); - } - --void cdbr(double v1, double v2) -+void kdbr(double a, double b) - { -- int cc; -+ TEST_CxBR("kdbr", "%g", a, b); -+} - -- __asm__ volatile("cdbr %[r1],%[r2]\n\t" -- "ipm %[psw]\n\t" -- "srl %[psw],28\n\t" -- : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); -- if (cc == 0) -- printf("cdebr: %f == %f\n", v1, v2); -- if (cc == 1) -- printf("cdebr: %f < %f\n", v1, v2); -- if (cc == 2) -- printf("cdebr: %f > %f\n", v1, v2); -+void kxbr(long double a, long double b) -+{ -+ TEST_CxBR("kxbr", "%Lg", a, b); -+} -+ -+void do_compare(float a, float b) -+{ -+ cebr(a, b); -+ kebr(a, b); -+ cdbr((double) a, (double) b); -+ kdbr((double) a, (double) b); -+ cxbr((long double) a, (long double) b); -+ kxbr((long double) a, (long double) b); - } - - int main(void) - { -- float f1, f2; -- float d1, d2; -- -- // compare 4 bytes -- f1 = 3.14f; -- f2 = f1; -- cebr(f1, f2); -- f2 = f1 + 10.; -- cebr(f1, f2); -- f2 = f1 - 100.; -- cebr(f1, f2); -- -- // compare 8 bytes -- d1 = 2.78; -- d2 = d1; -- cdbr(d1, d2); -- d2 = d1 + 10.; -- cdbr(d1, d2); -- d2 = d1 - 100.; -- cdbr(d1, d2); -+ float inf = 1.f / 0.; -+ float neg_inf = -1.f / 0.; - -+ do_compare(3.14f, 3.14f); -+ do_compare(-2.78f, 2.78f); -+ do_compare(inf, inf); -+ do_compare(inf, neg_inf); -+ do_compare(neg_inf, neg_inf); -+ do_compare(inf, 1.f); -+ do_compare(neg_inf, -1.f); -+ do_compare(1.f / inf, -1.f / inf); - return 0; - } -diff --git a/none/tests/s390x/bfp-4.stdout.exp b/none/tests/s390x/bfp-4.stdout.exp -index eff136654..027b1587a 100644 ---- a/none/tests/s390x/bfp-4.stdout.exp -+++ b/none/tests/s390x/bfp-4.stdout.exp -@@ -1,6 +1,48 @@ --cfebr: 3.140000 == 3.140000 --cfebr: 3.140000 < 13.140000 --cfebr: 3.140000 > -96.860001 --cdebr: 2.780000 == 2.780000 --cdebr: 2.780000 < 12.780000 --cdebr: 2.780000 > -97.220001 -+cebr: 3.14 == 3.14 -+kebr: 3.14 == 3.14 -+cdbr: 3.14 == 3.14 -+kdbr: 3.14 == 3.14 -+cxbr: 3.14 == 3.14 -+kxbr: 3.14 == 3.14 -+cebr: -2.78 < 2.78 -+kebr: -2.78 < 2.78 -+cdbr: -2.78 < 2.78 -+kdbr: -2.78 < 2.78 -+cxbr: -2.78 < 2.78 -+kxbr: -2.78 < 2.78 -+cebr: inf == inf -+kebr: inf == inf -+cdbr: inf == inf -+kdbr: inf == inf -+cxbr: inf == inf -+kxbr: inf == inf -+cebr: inf > -inf -+kebr: inf > -inf -+cdbr: inf > -inf -+kdbr: inf > -inf -+cxbr: inf > -inf -+kxbr: inf > -inf -+cebr: -inf == -inf -+kebr: -inf == -inf -+cdbr: -inf == -inf -+kdbr: -inf == -inf -+cxbr: -inf == -inf -+kxbr: -inf == -inf -+cebr: inf > 1 -+kebr: inf > 1 -+cdbr: inf > 1 -+kdbr: inf > 1 -+cxbr: inf > 1 -+kxbr: inf > 1 -+cebr: -inf < -1 -+kebr: -inf < -1 -+cdbr: -inf < -1 -+kdbr: -inf < -1 -+cxbr: -inf < -1 -+kxbr: -inf < -1 -+cebr: 0 == -0 -+kebr: 0 == -0 -+cdbr: 0 == -0 -+kdbr: 0 == -0 -+cxbr: 0 == -0 -+kxbr: 0 == -0 diff --git a/valgrind-3.15.0-s390x-wrap-drd.patch b/valgrind-3.15.0-s390x-wrap-drd.patch deleted file mode 100644 index be5adb5..0000000 --- a/valgrind-3.15.0-s390x-wrap-drd.patch +++ /dev/null @@ -1,194 +0,0 @@ -From bfa89eae00ba7067445bc0532e1f17405c062954 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Thu, 23 May 2019 17:17:43 +0200 -Subject: [PATCH] Bug 407764 - s390x: drd fails on z13 due to function wrapping - issue - -The s390x-specific inline assembly macros for function wrapping in -include/valgrind.h have a few issues. - -When the compiler uses vector registers, such as with "-march=z13", all -vector registers must be declared as clobbered by the callee. Because -this is missing, many drd test failures are seen with "-march=z13". - -Also, the inline assemblies write the return value into the target -register before restoring r11. If r11 is used as the target register, -this means that the restore operation corrupts the result. This bug -causes failures with memcheck's "wrap6" test case. - -These bugs are fixed. The clobber list is extended by the vector -registers (if appropriate), and the target register is now written at the -end, after restoring r11. ---- - include/valgrind.h | 38 +++++++++++++++++++++++--------------- - 1 file changed, 23 insertions(+), 15 deletions(-) - -diff --git a/include/valgrind.h b/include/valgrind.h -index f071bd392..815efa893 100644 ---- a/include/valgrind.h -+++ b/include/valgrind.h -@@ -4687,8 +4687,16 @@ typedef - r14 in s390_irgen_noredir (VEX/priv/guest_s390_irgen.c) to give the - function a proper return address. All others are ABI defined call - clobbers. */ --#define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ -- "f0","f1","f2","f3","f4","f5","f6","f7" -+#if defined(__VX__) || defined(__S390_VX__) -+#define __CALLER_SAVED_REGS "0", "1", "2", "3", "4", "5", "14", \ -+ "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", \ -+ "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", \ -+ "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", \ -+ "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" -+#else -+#define __CALLER_SAVED_REGS "0", "1", "2", "3", "4", "5", "14", \ -+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7" -+#endif - - /* Nb: Although r11 is modified in the asm snippets below (inside - VALGRIND_CFI_PROLOGUE) it is not listed in the clobber section, for -@@ -4710,9 +4718,9 @@ typedef - "aghi 15,-160\n\t" \ - "lg 1, 0(1)\n\t" /* target->r1 */ \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "d" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ -@@ -4734,9 +4742,9 @@ typedef - "lg 2, 8(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ -@@ -4759,9 +4767,9 @@ typedef - "lg 3,16(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ -@@ -4786,9 +4794,9 @@ typedef - "lg 4,24(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ -@@ -4815,9 +4823,9 @@ typedef - "lg 5,32(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ -@@ -4846,9 +4854,9 @@ typedef - "lg 6,40(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,160\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -4880,9 +4888,9 @@ typedef - "mvc 160(8,15), 48(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,168\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -4916,9 +4924,9 @@ typedef - "mvc 168(8,15), 56(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,176\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -4954,9 +4962,9 @@ typedef - "mvc 176(8,15), 64(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,184\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -4994,9 +5002,9 @@ typedef - "mvc 184(8,15), 72(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,192\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -5036,9 +5044,9 @@ typedef - "mvc 192(8,15), 80(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,200\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -5080,9 +5088,9 @@ typedef - "mvc 200(8,15), 88(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,208\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ -@@ -5126,9 +5134,9 @@ typedef - "mvc 208(8,15), 96(1)\n\t" \ - "lg 1, 0(1)\n\t" \ - VALGRIND_CALL_NOREDIR_R1 \ -- "lgr %0, 2\n\t" \ - "aghi 15,216\n\t" \ - VALGRIND_CFI_EPILOGUE \ -+ "lgr %0, 2\n\t" \ - : /*out*/ "=d" (_res) \ - : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ - : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ --- -2.17.0 - diff --git a/valgrind-3.15.0-scalar-arm64.patch b/valgrind-3.15.0-scalar-arm64.patch deleted file mode 100644 index 2fa9ca7..0000000 --- a/valgrind-3.15.0-scalar-arm64.patch +++ /dev/null @@ -1,83 +0,0 @@ -commit 917e423073c5eacffbad83008c27c8e61e0e342a -Author: Mark Wielaard -Date: Mon May 20 00:09:59 2019 +0200 - - Make memcheck/tests/arm64-linux/scalar test work under root. - - Running the testsuite as root isn't really recommended. - But lets not make tests fail unnecessarily when running as root. - Pass really invalid arguments to setuid, setgid, acct and fchown. - Make setresgid, setresuid, setregid and setreuid always succeed. - -diff --git a/memcheck/tests/arm64-linux/scalar.c b/memcheck/tests/arm64-linux/scalar.c -index fd49db6..622ea1c 100644 ---- a/memcheck/tests/arm64-linux/scalar.c -+++ b/memcheck/tests/arm64-linux/scalar.c -@@ -136,7 +136,7 @@ int main(void) - - // __NR_setuid 23 - GO(__NR_setuid, "1s 0m"); -- SY(__NR_setuid, x0); FAIL; -+ SY(__NR_setuid, x0-1); FAIL; - - // __NR_getuid 24 - GO(__NR_getuid, "0s 0m"); -@@ -229,7 +229,7 @@ int main(void) - - // __NR_setgid 46 - GO(__NR_setgid, "1s 0m"); -- SY(__NR_setgid, x0); FAIL; -+ SY(__NR_setgid, x0-1); FAIL; - - // __NR_getgid 47 - GO(__NR_getgid, "0s 0m"); -@@ -249,7 +249,7 @@ int main(void) - - // __NR_acct 51 - GO(__NR_acct, "1s 1m"); -- SY(__NR_acct, x0); FAIL; -+ SY(__NR_acct, x0-1); FAIL; - - // __NR_umount2 52 - GO(__NR_umount2, "2s 1m"); -@@ -340,11 +340,11 @@ int main(void) - - // __NR_setreuid 70 - GO(__NR_setreuid, "2s 0m"); -- SY(__NR_setreuid, x0, x0); FAIL; -+ SY(__NR_setreuid, x0-1, x0-1); SUCC; - - // __NR_setregid 71 - GO(__NR_setregid, "2s 0m"); -- SY(__NR_setregid, x0, x0); FAIL; -+ SY(__NR_setregid, x0-1, x0-1); SUCC; - - // __NR_sigsuspend arm64 only has rt_sigsuspend - // XXX: how do you use this function? -@@ -447,7 +447,7 @@ int main(void) - - // __NR_fchown 95 - GO(__NR_fchown, "3s 0m"); -- SY(__NR_fchown, x0, x0, x0); FAIL; -+ SY(__NR_fchown, x0-1, x0, x0); FAIL; - - // __NR_getpriority 96 - GO(__NR_getpriority, "2s 0m"); -@@ -733,7 +733,7 @@ int main(void) - - // __NR_setresuid 164 - GO(__NR_setresuid, "3s 0m"); -- SY(__NR_setresuid, x0, x0, x0); FAIL; -+ SY(__NR_setresuid, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresuid 165 - GO(__NR_getresuid, "3s 3m"); -@@ -757,7 +757,7 @@ int main(void) - - // __NR_setresgid 170 - GO(__NR_setresgid, "3s 0m"); -- SY(__NR_setresgid, x0, x0, x0); FAIL; -+ SY(__NR_setresgid, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresgid 171 - GO(__NR_getresgid, "3s 3m"); diff --git a/valgrind-3.15.0-scalar-x86.patch b/valgrind-3.15.0-scalar-x86.patch deleted file mode 100644 index 32fd243..0000000 --- a/valgrind-3.15.0-scalar-x86.patch +++ /dev/null @@ -1,137 +0,0 @@ -commit abc09f23e1ad55a07beb827aef969acfe6c496ef -Author: Mark Wielaard -Date: Mon May 20 13:08:41 2019 +0200 - - Make memcheck/tests/x86-linux/scalar test work under root. - - Running the testsuite as root isn't really recommended. - But lets not make tests fail unnecessarily when running as root. - Similar to the arm64-linux/scalar fixes. Plus 32bit variants that - don't exist on arm64. - - Pass really invalid arguments to setuid[32], setgid[32], acct, fchown[32]. - Make setresgid[32], setresuid[32], setregid[32], setreuid[32] always succeed. - -diff --git a/memcheck/tests/x86-linux/scalar.c b/memcheck/tests/x86-linux/scalar.c -index 213a5ad..52f0d4e 100644 ---- a/memcheck/tests/x86-linux/scalar.c -+++ b/memcheck/tests/x86-linux/scalar.c -@@ -145,7 +145,7 @@ int main(void) - - // __NR_setuid 23 - GO(__NR_setuid, "1s 0m"); -- SY(__NR_setuid, x0); FAIL; -+ SY(__NR_setuid, x0-1); FAIL; - - // __NR_getuid 24 - GO(__NR_getuid, "0s 0m"); -@@ -238,7 +238,7 @@ int main(void) - - // __NR_setgid 46 - GO(__NR_setgid, "1s 0m"); -- SY(__NR_setgid, x0); FAIL; -+ SY(__NR_setgid, x0-1); FAIL; - - // __NR_getgid 47 - GO(__NR_getgid, "0s 0m"); -@@ -258,7 +258,7 @@ int main(void) - - // __NR_acct 51 - GO(__NR_acct, "1s 1m"); -- SY(__NR_acct, x0); FAIL; -+ SY(__NR_acct, x0-1); FAIL; - - // __NR_umount2 52 - GO(__NR_umount2, "2s 1m"); -@@ -349,11 +349,11 @@ int main(void) - - // __NR_setreuid 70 - GO(__NR_setreuid, "2s 0m"); -- SY(__NR_setreuid, x0, x0); FAIL; -+ SY(__NR_setreuid, x0-1, x0-1); SUCC; - - // __NR_setregid 71 - GO(__NR_setregid, "2s 0m"); -- SY(__NR_setregid, x0, x0); FAIL; -+ SY(__NR_setregid, x0-1, x0-1); SUCC; - - // __NR_sigsuspend 72 - // XXX: how do you use this function? -@@ -456,7 +456,7 @@ int main(void) - - // __NR_fchown 95 - GO(__NR_fchown, "3s 0m"); -- SY(__NR_fchown, x0, x0, x0); FAIL; -+ SY(__NR_fchown, x0-1, x0, x0); FAIL; - - // __NR_getpriority 96 - GO(__NR_getpriority, "2s 0m"); -@@ -742,7 +742,7 @@ int main(void) - - // __NR_setresuid 164 - GO(__NR_setresuid, "3s 0m"); -- SY(__NR_setresuid, x0, x0, x0); FAIL; -+ SY(__NR_setresuid, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresuid 165 - GO(__NR_getresuid, "3s 3m"); -@@ -766,7 +766,7 @@ int main(void) - - // __NR_setresgid 170 - GO(__NR_setresgid, "3s 0m"); -- SY(__NR_setresgid, x0, x0, x0); FAIL; -+ SY(__NR_setresgid, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresgid 171 - GO(__NR_getresgid, "3s 3m"); -@@ -923,11 +923,11 @@ int main(void) - - // __NR_setreuid32 203 - GO(__NR_setreuid32, "2s 0m"); -- SY(__NR_setreuid32, x0, x0); FAIL; -+ SY(__NR_setreuid32, x0-1, x0-1); SUCC; - - // __NR_setregid32 204 - GO(__NR_setregid32, "2s 0m"); -- SY(__NR_setregid32, x0, x0); FAIL; -+ SY(__NR_setregid32, x0-1, x0-1); SUCC; - - // __NR_getgroups32 205 - GO(__NR_getgroups32, "2s 1m"); -@@ -939,11 +939,11 @@ int main(void) - - // __NR_fchown32 207 - GO(__NR_fchown32, "3s 0m"); -- SY(__NR_fchown32, x0, x0, x0); FAIL; -+ SY(__NR_fchown32, x0-1, x0, x0); FAIL; - - // __NR_setresuid32 208 - GO(__NR_setresuid32, "3s 0m"); -- SY(__NR_setresuid32, x0, x0, x0); FAIL; -+ SY(__NR_setresuid32, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresuid32 209 - GO(__NR_getresuid32, "3s 3m"); -@@ -951,7 +951,7 @@ int main(void) - - // __NR_setresgid32 210 - GO(__NR_setresgid32, "3s 0m"); -- SY(__NR_setresgid32, x0, x0, x0); FAIL; -+ SY(__NR_setresgid32, x0-1, x0-1, x0-1); SUCC; - - // __NR_getresgid32 211 - GO(__NR_getresgid32, "3s 3m"); -@@ -963,11 +963,11 @@ int main(void) - - // __NR_setuid32 213 - GO(__NR_setuid32, "1s 0m"); -- SY(__NR_setuid32, x0); FAIL; -+ SY(__NR_setuid32, x0-1); FAIL; - - // __NR_setgid32 214 - GO(__NR_setgid32, "1s 0m"); -- SY(__NR_setgid32, x0); FAIL; -+ SY(__NR_setgid32, x0-1); FAIL; - - // __NR_setfsuid32 215 - GO(__NR_setfsuid32, "1s 0m"); diff --git a/valgrind-3.15.0-time64.patch b/valgrind-3.15.0-time64.patch deleted file mode 100644 index 3c4f43b..0000000 --- a/valgrind-3.15.0-time64.patch +++ /dev/null @@ -1,1336 +0,0 @@ -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/priv_syswrap-linux.h valgrind-3.15.0/coregrind/m_syswrap/priv_syswrap-linux.h ---- valgrind-3.15.0.orig/coregrind/m_syswrap/priv_syswrap-linux.h 2020-02-28 14:02:29.841341757 +0100 -+++ valgrind-3.15.0/coregrind/m_syswrap/priv_syswrap-linux.h 2020-02-28 14:55:44.622692816 +0100 -@@ -388,6 +388,28 @@ - DECL_TEMPLATE(linux, sys_kcmp); - DECL_TEMPLATE(linux, sys_copy_file_range); - -+/* 64bit time_t syscalls for 32bit arches. */ -+DECL_TEMPLATE(linux, sys_clock_gettime64) -+DECL_TEMPLATE(linux, sys_clock_settime64) -+// clock_adjtime64 -+DECL_TEMPLATE(linux, sys_clock_getres_time64) -+DECL_TEMPLATE(linux, sys_clock_nanosleep_time64); -+DECL_TEMPLATE(linux, sys_timer_gettime64); -+DECL_TEMPLATE(linux, sys_timer_settime64); -+DECL_TEMPLATE(linux, sys_timerfd_gettime64); -+DECL_TEMPLATE(linux, sys_timerfd_settime64); -+DECL_TEMPLATE(linux, sys_utimensat_time64); -+DECL_TEMPLATE(linux, sys_pselect6_time64); -+DECL_TEMPLATE(linux, sys_ppoll_time64); -+// io_pgetevents_time64 -+DECL_TEMPLATE(linux, sys_recvmmsg_time64); -+DECL_TEMPLATE(linux, sys_mq_timedsend_time64); -+DECL_TEMPLATE(linux, sys_mq_timedreceive_time64); -+DECL_TEMPLATE(linux, sys_semtimedop_time64); -+DECL_TEMPLATE(linux, sys_rt_sigtimedwait_time64); -+DECL_TEMPLATE(linux, sys_futex_time64); -+DECL_TEMPLATE(linux, sys_sched_rr_get_interval_time64); -+ - // Some arch specific functions called from syswrap-linux.c - extern Int do_syscall_clone_x86_linux ( Word (*fn)(void *), - void* stack, -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-arm-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-arm-linux.c ---- valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-arm-linux.c 2020-02-28 14:02:29.848341656 +0100 -+++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-arm-linux.c 2020-02-28 14:55:44.623692804 +0100 -@@ -744,7 +744,7 @@ - LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max),// 159 - - LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 160 --//zz //LINX?(__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 161 */* -+ LINXY(__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 161 - GENXY(__NR_nanosleep, sys_nanosleep), // 162 - GENX_(__NR_mremap, sys_mremap), // 163 - LINX_(__NR_setresuid, sys_setresuid16), // 164 -@@ -1020,6 +1020,28 @@ - LINX_(__NR_copy_file_range, sys_copy_file_range), // 391 - - LINXY(__NR_statx, sys_statx), // 397 -+ -+ LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 -+ LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 -+ -+ LINXY(__NR_clock_getres_time64, sys_clock_getres_time64), // 406 -+ LINXY(__NR_clock_nanosleep_time64, sys_clock_nanosleep_time64), // 407 -+ LINXY(__NR_timer_gettime64, sys_timer_gettime64), // 408 -+ LINXY(__NR_timer_settime64, sys_timer_settime64), // 409 -+ LINXY(__NR_timerfd_gettime64, sys_timerfd_gettime64),// 410 -+ LINXY(__NR_timerfd_settime64, sys_timerfd_settime64),// 411 -+ LINX_(__NR_utimensat_time64, sys_utimensat_time64), // 412 -+ LINXY(__NR_pselect6_time64, sys_pselect6_time64), // 413 -+ LINXY(__NR_ppoll_time64, sys_ppoll_time64), // 414 -+ -+ LINXY(__NR_recvmmsg_time64, sys_recvmmsg_time64), // 417 -+ LINX_(__NR_mq_timedsend_time64, sys_mq_timedsend_time64), // 418 -+ LINXY(__NR_mq_timedreceive_time64, sys_mq_timedreceive_time64), // 419 -+ LINX_(__NR_semtimedop_time64, sys_semtimedop_time64),// 420 -+ LINXY(__NR_rt_sigtimedwait_time64, sys_rt_sigtimedwait_time64), // 421 -+ LINXY(__NR_futex_time64, sys_futex_time64), // 422 -+ LINXY(__NR_sched_rr_get_interval_time64, -+ sys_sched_rr_get_interval_time64), // 423 - }; - - -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c ---- valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-linux.c 2020-02-28 14:02:29.843341728 +0100 -+++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-linux.c 2020-02-28 14:55:44.625692781 +0100 -@@ -1584,7 +1584,9 @@ - } - } - --PRE(sys_futex) -+static void futex_pre_helper ( ThreadId tid, SyscallArgLayout* layout, -+ SyscallArgs* arrghs, SyscallStatus* status, -+ UWord* flags, Bool is_time64 ) - { - /* - arg param used by ops -@@ -1596,21 +1598,32 @@ - ARG5 - u32 *uaddr2 REQUEUE,CMP_REQUEUE - ARG6 - int val3 CMP_REQUEUE - */ -- PRINT("sys_futex ( %#" FMT_REGWORD "x, %ld, %ld, %#" FMT_REGWORD -- "x, %#" FMT_REGWORD "x )", ARG1, SARG2, SARG3, ARG4, ARG5); -+ - switch(ARG2 & ~(VKI_FUTEX_PRIVATE_FLAG|VKI_FUTEX_CLOCK_REALTIME)) { - case VKI_FUTEX_CMP_REQUEUE: - case VKI_FUTEX_WAKE_OP: - case VKI_FUTEX_CMP_REQUEUE_PI: -- PRE_REG_READ6(long, "futex", -- vki_u32 *, futex, int, op, int, val, -- struct timespec *, utime, vki_u32 *, uaddr2, int, val3); -+ if (is_time64) { -+ PRE_REG_READ6(long, "futex_time64", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime, vki_u32 *, uaddr2, int, val3); -+ } else { -+ PRE_REG_READ6(long, "futex", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec *, utime, vki_u32 *, uaddr2, int, val3); -+ } - break; - case VKI_FUTEX_REQUEUE: - case VKI_FUTEX_WAIT_REQUEUE_PI: -- PRE_REG_READ5(long, "futex", -- vki_u32 *, futex, int, op, int, val, -- struct timespec *, utime, vki_u32 *, uaddr2); -+ if (is_time64) { -+ PRE_REG_READ5(long, "futex_time64", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime, vki_u32 *, uaddr2); -+ } else { -+ PRE_REG_READ5(long, "futex", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec *, utime, vki_u32 *, uaddr2); -+ } - break; - case VKI_FUTEX_WAIT_BITSET: - /* Check that the address at least begins in client-accessible area. */ -@@ -1619,15 +1632,27 @@ - return; - } - if (*(vki_u32 *)(Addr)ARG1 != ARG3) { -- PRE_REG_READ4(long, "futex", -- vki_u32 *, futex, int, op, int, val, -- struct timespec *, utime); -+ if (is_time64) { -+ PRE_REG_READ4(long, "futex_time64", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime); -+ } else { -+ PRE_REG_READ4(long, "futex", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime); -+ } - } else { - /* Note argument 5 is unused, but argument 6 is used. - So we cannot just PRE_REG_READ6. Read argument 6 separately. */ -- PRE_REG_READ4(long, "futex", -- vki_u32 *, futex, int, op, int, val, -- struct timespec *, utime); -+ if (is_time64) { -+ PRE_REG_READ4(long, "futex_time64", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime); -+ } else { -+ PRE_REG_READ4(long, "futex", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec *, utime); -+ } - if (VG_(tdict).track_pre_reg_read) - PRA6("futex",int,val3); - } -@@ -1641,9 +1666,15 @@ - break; - case VKI_FUTEX_WAIT: - case VKI_FUTEX_LOCK_PI: -- PRE_REG_READ4(long, "futex", -- vki_u32 *, futex, int, op, int, val, -- struct timespec *, utime); -+ if (is_time64) { -+ PRE_REG_READ4(long, "futex_time64", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec64 *, utime); -+ } else { -+ PRE_REG_READ4(long, "futex", -+ vki_u32 *, futex, int, op, int, val, -+ struct timespec *, utime); -+ } - break; - case VKI_FUTEX_WAKE: - case VKI_FUTEX_FD: -@@ -1665,8 +1696,15 @@ - case VKI_FUTEX_WAIT_BITSET: - case VKI_FUTEX_WAIT_REQUEUE_PI: - PRE_MEM_READ( "futex(futex)", ARG1, sizeof(Int) ); -- if (ARG4 != 0) -- PRE_MEM_READ( "futex(timeout)", ARG4, sizeof(struct vki_timespec) ); -+ if (ARG4 != 0) { -+ if (is_time64) { -+ PRE_MEM_READ( "futex_time64(timeout)", ARG4, -+ sizeof(struct vki_timespec64) ); -+ } else { -+ PRE_MEM_READ( "futex(timeout)", ARG4, -+ sizeof(struct vki_timespec) ); -+ } -+ } - break; - - case VKI_FUTEX_REQUEUE: -@@ -1690,7 +1728,9 @@ - break; - } - } --POST(sys_futex) -+ -+static void futex_post_helper ( ThreadId tid, SyscallArgs* arrghs, -+ SyscallStatus* status ) - { - vg_assert(SUCCESS); - POST_MEM_WRITE( ARG1, sizeof(int) ); -@@ -1705,6 +1745,30 @@ - } - } - -+PRE(sys_futex) -+{ -+ PRINT("sys_futex ( %#" FMT_REGWORD "x, %ld, %ld, %#" FMT_REGWORD -+ "x, %#" FMT_REGWORD "x )", ARG1, SARG2, SARG3, ARG4, ARG5); -+ futex_pre_helper (tid, layout, arrghs, status, flags, False); -+} -+ -+POST(sys_futex) -+{ -+ futex_post_helper (tid, arrghs, status); -+} -+ -+PRE(sys_futex_time64) -+{ -+ PRINT("sys_futex_time64 ( %#" FMT_REGWORD "x, %ld, %ld, %#" FMT_REGWORD -+ "x, %#" FMT_REGWORD "x )", ARG1, SARG2, SARG3, ARG4, ARG5); -+ futex_pre_helper (tid, layout, arrghs, status, flags, True); -+} -+ -+POST(sys_futex_time64) -+{ -+ futex_post_helper (tid, arrghs, status); -+} -+ - PRE(sys_set_robust_list) - { - PRINT("sys_set_robust_list ( %#" FMT_REGWORD "x, %" -@@ -1747,16 +1811,22 @@ - vki_sigset_t adjusted_ss; - }; - --PRE(sys_pselect6) -+static void pselect6_pre_helper ( ThreadId tid, SyscallArgLayout* layout, -+ SyscallArgs* arrghs, SyscallStatus* status, -+ UWord* flags, Bool is_time64 ) - { - *flags |= SfMayBlock | SfPostOnFail; -- PRINT("sys_pselect6 ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" -- FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", -- SARG1, ARG2, ARG3, ARG4, ARG5, ARG6); -- PRE_REG_READ6(long, "pselect6", -- int, n, vki_fd_set *, readfds, vki_fd_set *, writefds, -- vki_fd_set *, exceptfds, struct vki_timeval *, timeout, -- void *, sig); -+ if (is_time64) { -+ PRE_REG_READ6(long, "pselect6_time64", -+ int, n, vki_fd_set *, readfds, vki_fd_set *, writefds, -+ vki_fd_set *, exceptfds, struct vki_timespec64 *, timeout, -+ void *, sig); -+ } else { -+ PRE_REG_READ6(long, "pselect6", -+ int, n, vki_fd_set *, readfds, vki_fd_set *, writefds, -+ vki_fd_set *, exceptfds, struct vki_timespec *, timeout, -+ void *, sig); -+ } - // XXX: this possibly understates how much memory is read. - if (ARG2 != 0) - PRE_MEM_READ( "pselect6(readfds)", -@@ -1767,8 +1837,15 @@ - if (ARG4 != 0) - PRE_MEM_READ( "pselect6(exceptfds)", - ARG4, ARG1/8 /* __FD_SETSIZE/8 */ ); -- if (ARG5 != 0) -- PRE_MEM_READ( "pselect6(timeout)", ARG5, sizeof(struct vki_timeval) ); -+ if (ARG5 != 0) { -+ if (is_time64) { -+ PRE_MEM_READ( "pselect6_time64(timeout)", ARG5, -+ sizeof(struct vki_timespec64) ); -+ } else { -+ PRE_MEM_READ( "pselect6(timeout)", ARG5, -+ sizeof(struct vki_timespec) ); -+ } -+ } - if (ARG6 != 0) { - const struct pselect_sized_sigset *pss = - (struct pselect_sized_sigset *)(Addr)ARG6; -@@ -1796,6 +1873,15 @@ - } - } - } -+ -+PRE(sys_pselect6) -+{ -+ PRINT("sys_pselect6 ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", -+ SARG1, ARG2, ARG3, ARG4, ARG5, ARG6); -+ pselect6_pre_helper (tid, layout, arrghs, status, flags, False); -+} -+ - POST(sys_pselect6) - { - if (ARG6 != 0 && ARG6 != 1) { -@@ -1803,7 +1889,24 @@ - } - } - --PRE(sys_ppoll) -+PRE(sys_pselect6_time64) -+{ -+ PRINT("sys_pselect6_time64 ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", -+ SARG1, ARG2, ARG3, ARG4, ARG5, ARG6); -+ pselect6_pre_helper (tid, layout, arrghs, status, flags, True); -+} -+ -+POST(sys_pselect6_time64) -+{ -+ if (ARG6 != 0 && ARG6 != 1) { -+ VG_(free)((struct pselect_adjusted_sigset *)(Addr)ARG6); -+ } -+} -+ -+static void ppoll_pre_helper ( ThreadId tid, SyscallArgLayout* layout, -+ SyscallArgs* arrghs, SyscallStatus* status, -+ UWord* flags, Bool is_time64 ) - { - UInt i; - struct vki_pollfd* ufds = (struct vki_pollfd *)(Addr)ARG1; -@@ -1811,10 +1914,17 @@ - PRINT("sys_ppoll ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#" FMT_REGWORD - "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )\n", - ARG1, ARG2, ARG3, ARG4, ARG5); -- PRE_REG_READ5(long, "ppoll", -- struct vki_pollfd *, ufds, unsigned int, nfds, -- struct vki_timespec *, tsp, vki_sigset_t *, sigmask, -- vki_size_t, sigsetsize); -+ if (is_time64) { -+ PRE_REG_READ5(long, "ppoll_time64", -+ struct vki_pollfd *, ufds, unsigned int, nfds, -+ struct vki_timespec64 *, tsp, vki_sigset_t *, sigmask, -+ vki_size_t, sigsetsize); -+ } else { -+ PRE_REG_READ5(long, "ppoll", -+ struct vki_pollfd *, ufds, unsigned int, nfds, -+ struct vki_timespec *, tsp, vki_sigset_t *, sigmask, -+ vki_size_t, sigsetsize); -+ } - - for (i = 0; i < ARG2; i++) { - PRE_MEM_READ( "ppoll(ufds.fd)", -@@ -1825,8 +1935,15 @@ - (Addr)(&ufds[i].revents), sizeof(ufds[i].revents) ); - } - -- if (ARG3) -- PRE_MEM_READ( "ppoll(tsp)", ARG3, sizeof(struct vki_timespec) ); -+ if (ARG3) { -+ if (is_time64) { -+ PRE_MEM_READ( "ppoll_time64(tsp)", ARG3, -+ sizeof(struct vki_timespec64) ); -+ } else { -+ PRE_MEM_READ( "ppoll(tsp)", ARG3, -+ sizeof(struct vki_timespec) ); -+ } -+ } - if (ARG4 != 0 && sizeof(vki_sigset_t) == ARG5) { - const vki_sigset_t *guest_sigmask = (vki_sigset_t *)(Addr)ARG4; - PRE_MEM_READ( "ppoll(sigmask)", ARG4, ARG5); -@@ -1842,7 +1959,8 @@ - } - } - --POST(sys_ppoll) -+static void ppoll_post_helper ( ThreadId tid, SyscallArgs* arrghs, -+ SyscallStatus* status ) - { - vg_assert(SUCCESS || FAILURE); - if (SUCCESS && (RES >= 0)) { -@@ -1856,6 +1974,32 @@ - } - } - -+PRE(sys_ppoll) -+{ -+ PRINT("sys_ppoll ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %#" FMT_REGWORD -+ "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )\n", -+ ARG1, ARG2, ARG3, ARG4, ARG5); -+ ppoll_pre_helper (tid, layout, arrghs, status, flags, False); -+} -+ -+POST(sys_ppoll) -+{ -+ ppoll_post_helper (tid, arrghs, status); -+} -+ -+PRE(sys_ppoll_time64) -+{ -+ PRINT("sys_ppoll_time64 ( %#" FMT_REGWORD "x, %" FMT_REGWORD -+ "u, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )\n", -+ ARG1, ARG2, ARG3, ARG4, ARG5); -+ ppoll_pre_helper (tid, layout, arrghs, status, flags, False); -+} -+ -+POST(sys_ppoll_time64) -+{ -+ ppoll_post_helper (tid, arrghs, status); -+} -+ - - /* --------------------------------------------------------------------- - epoll_* wrappers -@@ -2644,6 +2788,26 @@ - } - } - -+PRE(sys_mq_timedsend_time64) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_mq_timedsend_time64 ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD -+ "u, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", -+ SARG1,ARG2,ARG3,ARG4,ARG5); -+ PRE_REG_READ5(long, "mq_timedsend_time64", -+ vki_mqd_t, mqdes, const char *, msg_ptr, vki_size_t, msg_len, -+ unsigned int, msg_prio, -+ const struct vki_timespec64 *, abs_timeout); -+ if (!ML_(fd_allowed)(ARG1, "mq_timedsend_time64", tid, False)) { -+ SET_STATUS_Failure( VKI_EBADF ); -+ } else { -+ PRE_MEM_READ( "mq_timedsend_time64(msg_ptr)", ARG2, ARG3 ); -+ if (ARG5 != 0) -+ PRE_MEM_READ( "mq_timedsend_time64(abs_timeout)", ARG5, -+ sizeof(struct vki_timespec64) ); -+ } -+} -+ - PRE(sys_mq_timedreceive) - { - *flags |= SfMayBlock; -@@ -2673,6 +2837,36 @@ - POST_MEM_WRITE( ARG4, sizeof(unsigned int) ); - } - -+PRE(sys_mq_timedreceive_time64) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_mq_timedreceive_time64( %ld, %#" FMT_REGWORD "x, %" -+ FMT_REGWORD "u, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", -+ SARG1,ARG2,ARG3,ARG4,ARG5); -+ PRE_REG_READ5(ssize_t, "mq_timedreceive_time64", -+ vki_mqd_t, mqdes, char *, msg_ptr, vki_size_t, msg_len, -+ unsigned int *, msg_prio, -+ const struct vki_timespec64 *, abs_timeout); -+ if (!ML_(fd_allowed)(ARG1, "mq_timedreceive_time64", tid, False)) { -+ SET_STATUS_Failure( VKI_EBADF ); -+ } else { -+ PRE_MEM_WRITE( "mq_timedreceive_time64(msg_ptr)", ARG2, ARG3 ); -+ if (ARG4 != 0) -+ PRE_MEM_WRITE( "mq_timedreceive_time64(msg_prio)", -+ ARG4, sizeof(unsigned int) ); -+ if (ARG5 != 0) -+ PRE_MEM_READ( "mq_timedreceive_time64(abs_timeout)", -+ ARG5, sizeof(struct vki_timespec64) ); -+ } -+} -+ -+POST(sys_mq_timedreceive_time64) -+{ -+ POST_MEM_WRITE( ARG2, RES ); -+ if (ARG4 != 0) -+ POST_MEM_WRITE( ARG4, sizeof(unsigned int) ); -+} -+ - PRE(sys_mq_notify) - { - PRINT("sys_mq_notify( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2 ); -@@ -2723,6 +2917,14 @@ - PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) ); - } - -+PRE(sys_clock_settime64) -+{ -+ PRINT("sys_clock_settime64( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2); -+ PRE_REG_READ2(long, "clock_settime64", -+ vki_clockid_t, clk_id, const struct timespec64 *, tp); -+ PRE_MEM_READ( "clock_settime64(tp)", ARG2, sizeof(struct vki_timespec64) ); -+} -+ - PRE(sys_clock_gettime) - { - PRINT("sys_clock_gettime( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2); -@@ -2735,6 +2937,18 @@ - POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) ); - } - -+PRE(sys_clock_gettime64) -+{ -+ PRINT("sys_clock_gettime64( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2); -+ PRE_REG_READ2(long, "clock_gettime64", -+ vki_clockid_t, clk_id, struct vki_timespec64 *, tp); -+ PRE_MEM_WRITE( "clock_gettime64(tp)", ARG2, sizeof(struct vki_timespec64) ); -+} -+POST(sys_clock_gettime64) -+{ -+ POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec64) ); -+} -+ - PRE(sys_clock_getres) - { - PRINT("sys_clock_getres( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2); -@@ -2751,6 +2965,23 @@ - POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) ); - } - -+PRE(sys_clock_getres_time64) -+{ -+ PRINT("sys_clock_getres_time64( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2); -+ // Nb: we can't use "RES" as the param name because that's a macro -+ // defined above! -+ PRE_REG_READ2(long, "clock_getres_time64", -+ vki_clockid_t, clk_id, struct vki_timespec64 *, res); -+ if (ARG2 != 0) -+ PRE_MEM_WRITE( "clock_getres_time64(res)", ARG2, -+ sizeof(struct vki_timespec64) ); -+} -+POST(sys_clock_getres_time64) -+{ -+ if (ARG2 != 0) -+ POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec64) ); -+} -+ - PRE(sys_clock_nanosleep) - { - *flags |= SfMayBlock|SfPostOnFail; -@@ -2770,6 +3001,28 @@ - POST_MEM_WRITE( ARG4, sizeof(struct vki_timespec) ); - } - -+PRE(sys_clock_nanosleep_time64) -+{ -+ *flags |= SfMayBlock|SfPostOnFail; -+ PRINT("sys_clock_nanosleep_time64( %ld, %ld, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x )", -+ SARG1, SARG2, ARG3, ARG4); -+ PRE_REG_READ4(int32_t, "clock_nanosleep_time64", -+ vki_clockid_t, clkid, int, flags, -+ const struct vki_timespec64 *, rqtp, -+ struct vki_timespec64 *, rmtp); -+ PRE_MEM_READ( "clock_nanosleep_time64(rqtp)", ARG3, -+ sizeof(struct vki_timespec64) ); -+ if (ARG4 != 0) -+ PRE_MEM_WRITE( "clock_nanosleep_time64(rmtp)", ARG4, -+ sizeof(struct vki_timespec64) ); -+} -+POST(sys_clock_nanosleep_time64) -+{ -+ if (ARG4 != 0 && FAILURE && ERR == VKI_EINTR) -+ POST_MEM_WRITE( ARG4, sizeof(struct vki_timespec64) ); -+} -+ - /* --------------------------------------------------------------------- - timer_* wrappers - ------------------------------------------------------------------ */ -@@ -2821,6 +3074,26 @@ - POST_MEM_WRITE( ARG4, sizeof(struct vki_itimerspec) ); - } - -+PRE(sys_timer_settime64) -+{ -+ PRINT("sys_timer_settime64( %ld, %ld, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x )", SARG1,SARG2,ARG3,ARG4); -+ PRE_REG_READ4(long, "timer_settime64", -+ vki_timer_t, timerid, int, flags, -+ const struct vki_itimerspec64 *, value, -+ struct vki_itimerspec64 *, ovalue); -+ PRE_MEM_READ( "timer_settime64(value)", ARG3, -+ sizeof(struct vki_itimerspec64) ); -+ if (ARG4 != 0) -+ PRE_MEM_WRITE( "timer_settime64(ovalue)", ARG4, -+ sizeof(struct vki_itimerspec64) ); -+} -+POST(sys_timer_settime64) -+{ -+ if (ARG4 != 0) -+ POST_MEM_WRITE( ARG4, sizeof(struct vki_itimerspec64) ); -+} -+ - PRE(sys_timer_gettime) - { - PRINT("sys_timer_gettime( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2); -@@ -2834,6 +3107,19 @@ - POST_MEM_WRITE( ARG2, sizeof(struct vki_itimerspec) ); - } - -+PRE(sys_timer_gettime64) -+{ -+ PRINT("sys_timer_gettime64( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2); -+ PRE_REG_READ2(long, "timer_gettime64", -+ vki_timer_t, timerid, struct vki_itimerspec64 *, value); -+ PRE_MEM_WRITE( "timer_gettime64(value)", ARG2, -+ sizeof(struct vki_itimerspec64)); -+} -+POST(sys_timer_gettime64) -+{ -+ POST_MEM_WRITE( ARG2, sizeof(struct vki_itimerspec64) ); -+} -+ - PRE(sys_timer_getoverrun) - { - PRINT("sys_timer_getoverrun( %#" FMT_REGWORD "x )", ARG1); -@@ -2940,6 +3226,24 @@ - POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerspec)); - } - -+PRE(sys_timerfd_gettime64) -+{ -+ PRINT("sys_timerfd_gettime64 ( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2); -+ PRE_REG_READ2(long, "timerfd_gettime64", -+ int, ufd, -+ struct vki_itimerspec64*, otmr); -+ if (!ML_(fd_allowed)(ARG1, "timerfd_gettime64", tid, False)) -+ SET_STATUS_Failure(VKI_EBADF); -+ else -+ PRE_MEM_WRITE("timerfd_gettime64(result)", -+ ARG2, sizeof(struct vki_itimerspec64)); -+} -+POST(sys_timerfd_gettime64) -+{ -+ if (RES == 0) -+ POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerspec64)); -+} -+ - PRE(sys_timerfd_settime) - { - PRINT("sys_timerfd_settime ( %ld, %ld, %#" FMT_REGWORD "x, %#" -@@ -2968,6 +3272,34 @@ - POST_MEM_WRITE(ARG4, sizeof(struct vki_itimerspec)); - } - -+PRE(sys_timerfd_settime64) -+{ -+ PRINT("sys_timerfd_settime64 ( %ld, %ld, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x )", SARG1, SARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "timerfd_settime64", -+ int, ufd, -+ int, flags, -+ const struct vki_itimerspec64*, utmr, -+ struct vki_itimerspec64*, otmr); -+ if (!ML_(fd_allowed)(ARG1, "timerfd_settime64", tid, False)) -+ SET_STATUS_Failure(VKI_EBADF); -+ else -+ { -+ PRE_MEM_READ("timerfd_settime64(result)", -+ ARG3, sizeof(struct vki_itimerspec64)); -+ if (ARG4) -+ { -+ PRE_MEM_WRITE("timerfd_settime64(result)", -+ ARG4, sizeof(struct vki_itimerspec64)); -+ } -+ } -+} -+POST(sys_timerfd_settime64) -+{ -+ if (RES == 0 && ARG4 != 0) -+ POST_MEM_WRITE(ARG4, sizeof(struct vki_itimerspec64)); -+} -+ - /* --------------------------------------------------------------------- - capabilities wrappers - ------------------------------------------------------------------ */ -@@ -3350,6 +3682,22 @@ - POST_MEM_WRITE(ARG2, sizeof(struct vki_timespec)); - } - -+PRE(sys_sched_rr_get_interval_time64) -+{ -+ PRINT("sys_sched_rr_get_interval_time64 ( %ld, %#" FMT_REGWORD "x )", -+ SARG1, ARG2); -+ PRE_REG_READ2(int, "sched_rr_get_interval_time64", -+ vki_pid_t, pid, -+ struct vki_timespec *, tp); -+ PRE_MEM_WRITE("sched_rr_get_interval_time64(timespec)", -+ ARG2, sizeof(struct vki_timespec64)); -+} -+ -+POST(sys_sched_rr_get_interval_time64) -+{ -+ POST_MEM_WRITE(ARG2, sizeof(struct vki_timespec64)); -+} -+ - PRE(sys_sched_setaffinity) - { - PRINT("sched_setaffinity ( %ld, %" FMT_REGWORD "u, %#" FMT_REGWORD "x )", -@@ -4067,6 +4415,31 @@ - POST_MEM_WRITE( ARG2, sizeof(vki_siginfo_t) ); - } - -+PRE(sys_rt_sigtimedwait_time64) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_rt_sigtimedwait_time64 ( %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )", -+ ARG1, ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "rt_sigtimedwait_time64", -+ const vki_sigset_t *, set, vki_siginfo_t *, info, -+ const struct vki_timespec64 *, timeout, -+ vki_size_t, sigsetsize); -+ if (ARG1 != 0) -+ PRE_MEM_READ( "rt_sigtimedwait_time64(set)", ARG1, sizeof(vki_sigset_t) ); -+ if (ARG2 != 0) -+ PRE_MEM_WRITE( "rt_sigtimedwait_time64(info)", ARG2, -+ sizeof(vki_siginfo_t) ); -+ if (ARG3 != 0) -+ PRE_MEM_READ( "rt_sigtimedwait_time64(timeout)", -+ ARG3, sizeof(struct vki_timespec64) ); -+} -+POST(sys_rt_sigtimedwait_time64) -+{ -+ if (ARG2 != 0) -+ POST_MEM_WRITE( ARG2, sizeof(vki_siginfo_t) ); -+} -+ - PRE(sys_rt_sigqueueinfo) - { - PRINT("sys_rt_sigqueueinfo(%ld, %ld, %#" FMT_REGWORD "x)", -@@ -4515,6 +4888,21 @@ - ML_(generic_PRE_sys_semtimedop)(tid, ARG1,ARG2,ARG3,ARG4); - } - -+PRE(sys_semtimedop_time64) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_semtimedop_time64 ( %ld, %#" FMT_REGWORD "x, %" -+ FMT_REGWORD "u, %#" FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "semtimedop_time64", -+ int, semid, struct sembuf *, sops, unsigned, nsoops, -+ struct vki_timespec64 *, timeout); -+ PRE_MEM_READ( "semtimedop_time64(sops)", ARG1, -+ ARG2 * sizeof(struct vki_sembuf) ); -+ if (ARG3 != 0) -+ PRE_MEM_READ( "semtimedop_time64(timeout)", ARG3, -+ sizeof(struct vki_timespec64) ); -+} -+ - PRE(sys_msgget) - { - PRINT("sys_msgget ( %ld, %ld )", SARG1, SARG2); -@@ -5324,6 +5712,36 @@ - } - } - -+PRE(sys_utimensat_time64) -+{ -+ PRINT("sys_utimensat_time64 ( %ld, %#" FMT_REGWORD "x(%s), %#" -+ FMT_REGWORD "x, 0x%" FMT_REGWORD "x )", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "utimensat_time64", -+ int, dfd, char *, filename, struct timespec *, utimes, int, flags); -+ if (ARG2 != 0) -+ PRE_MEM_RASCIIZ( "utimensat_time64(filename)", ARG2 ); -+ if (ARG3 != 0) { -+ /* If timespec.tv_nsec has the special value UTIME_NOW or UTIME_OMIT -+ then the tv_sec field is ignored. */ -+ struct vki_timespec64 *times = (struct vki_timespec64 *)(Addr)ARG3; -+ PRE_MEM_READ( "utimensat_time64(times[0].tv_nsec)", -+ (Addr)×[0].tv_nsec, sizeof(times[0].tv_nsec)); -+ PRE_MEM_READ( "utimensat_time64(times[1].tv_nsec)", -+ (Addr)×[1].tv_nsec, sizeof(times[1].tv_nsec)); -+ if (ML_(safe_to_deref)(times, 2 * sizeof(struct vki_timespec64))) { -+ if (times[0].tv_nsec != VKI_UTIME_NOW -+ && times[0].tv_nsec != VKI_UTIME_OMIT) -+ PRE_MEM_READ( "utimensat_time64(times[0].tv_sec)", -+ (Addr)×[0].tv_sec, sizeof(times[0].tv_sec)); -+ if (times[1].tv_nsec != VKI_UTIME_NOW -+ && times[1].tv_nsec != VKI_UTIME_OMIT) -+ PRE_MEM_READ( "utimensat_time64(times[1].tv_sec)", -+ (Addr)×[1].tv_sec, sizeof(times[1].tv_sec)); -+ } -+ } -+} -+ - PRE(sys_newfstatat) - { - FUSE_COMPATIBLE_MAY_BLOCK(); -@@ -5816,6 +6234,34 @@ - ML_(linux_POST_sys_recvmmsg) (tid, RES, ARG1,ARG2,ARG3,ARG4,ARG5); - } - -+PRE(sys_recvmmsg_time64) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_recvmmsg_time64 ( %ld, %#" FMT_REGWORD "x, %ld, %ld, %#" -+ FMT_REGWORD "x )", -+ SARG1, ARG2, SARG3, SARG4, ARG5); -+ PRE_REG_READ5(long, "recvmmsg_time64", -+ int, s, struct mmsghdr *, mmsg, int, vlen, -+ int, flags, struct vki_timespec64 *, timeout); -+ struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; -+ HChar name[40]; // large enough -+ UInt i; -+ for (i = 0; i < ARG3; i++) { -+ VG_(sprintf)(name, "mmsg[%u].msg_hdr", i); -+ ML_(generic_PRE_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr); -+ VG_(sprintf)(name, "recvmmsg(mmsg[%u].msg_len)", i); -+ PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); -+ } -+ if (ARG5) -+ PRE_MEM_READ( "recvmmsg(timeout)", ARG5, sizeof(struct vki_timespec64) ); -+} -+ -+POST(sys_recvmmsg_time64) -+{ -+ /* ARG5 isn't actually used, so just use the generic POST. */ -+ ML_(linux_POST_sys_recvmmsg) (tid, RES, ARG1,ARG2,ARG3,ARG4,ARG5); -+} -+ - /* --------------------------------------------------------------------- - key retention service wrappers - ------------------------------------------------------------------ */ -@@ -12312,3 +12758,4 @@ - /*--------------------------------------------------------------------*/ - /*--- end ---*/ - /*--------------------------------------------------------------------*/ -+ -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-mips32-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-mips32-linux.c ---- valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-mips32-linux.c 2019-04-13 12:56:21.000000000 +0200 -+++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-mips32-linux.c 2020-02-28 15:48:55.507851274 +0100 -@@ -1066,7 +1066,29 @@ - //.. - LINX_(__NR_membarrier, sys_membarrier), // 358 - //.. -- LINXY(__NR_statx, sys_statx) // 366 -+ LINXY(__NR_statx, sys_statx), // 366 -+ -+ LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 -+ LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 -+ -+ LINXY(__NR_clock_getres_time64, sys_clock_getres_time64), // 406 -+ LINXY(__NR_clock_nanosleep_time64, sys_clock_nanosleep_time64), // 407 -+ LINXY(__NR_timer_gettime64, sys_timer_gettime64), // 408 -+ LINXY(__NR_timer_settime64, sys_timer_settime64), // 409 -+ LINXY(__NR_timerfd_gettime64, sys_timerfd_gettime64), // 410 -+ LINXY(__NR_timerfd_settime64, sys_timerfd_settime64), // 411 -+ LINX_(__NR_utimensat_time64, sys_utimensat_time64), // 412 -+ LINXY(__NR_pselect6_time64, sys_pselect6_time64), // 413 -+ LINXY(__NR_ppoll_time64, sys_ppoll_time64), // 414 -+ -+ LINXY(__NR_recvmmsg_time64, sys_recvmmsg_time64), // 417 -+ LINX_(__NR_mq_timedsend_time64, sys_mq_timedsend_time64), // 418 -+ LINXY(__NR_mq_timedreceive_time64, sys_mq_timedreceive_time64), // 419 -+ LINX_(__NR_semtimedop_time64, sys_semtimedop_time64), // 420 -+ LINXY(__NR_rt_sigtimedwait_time64, sys_rt_sigtimedwait_time64), // 421 -+ LINXY(__NR_futex_time64, sys_futex_time64), // 422 -+ LINXY(__NR_sched_rr_get_interval_time64, -+ sys_sched_rr_get_interval_time64), // 423 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-ppc32-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-ppc32-linux.c ---- valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-ppc32-linux.c 2020-02-28 14:02:29.809342221 +0100 -+++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-ppc32-linux.c 2020-02-28 14:55:44.626692770 +0100 -@@ -1024,6 +1024,28 @@ - LINX_(__NR_copy_file_range, sys_copy_file_range), // 379 - - LINXY(__NR_statx, sys_statx), // 383 -+ -+ LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 -+ LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 -+ -+ LINXY(__NR_clock_getres_time64, sys_clock_getres_time64), // 406 -+ LINXY(__NR_clock_nanosleep_time64, sys_clock_nanosleep_time64), // 407 -+ LINXY(__NR_timer_gettime64, sys_timer_gettime64), // 408 -+ LINXY(__NR_timer_settime64, sys_timer_settime64), // 409 -+ LINXY(__NR_timerfd_gettime64, sys_timerfd_gettime64),// 410 -+ LINXY(__NR_timerfd_settime64, sys_timerfd_settime64),// 411 -+ LINX_(__NR_utimensat_time64, sys_utimensat_time64), // 412 -+ LINXY(__NR_pselect6_time64, sys_pselect6_time64), // 413 -+ LINXY(__NR_ppoll_time64, sys_ppoll_time64), // 414 -+ -+ LINXY(__NR_recvmmsg_time64, sys_recvmmsg_time64), // 417 -+ LINX_(__NR_mq_timedsend_time64, sys_mq_timedsend_time64), // 418 -+ LINXY(__NR_mq_timedreceive_time64, sys_mq_timedreceive_time64), // 419 -+ LINX_(__NR_semtimedop_time64, sys_semtimedop_time64),// 420 -+ LINXY(__NR_rt_sigtimedwait_time64, sys_rt_sigtimedwait_time64), // 421 -+ LINXY(__NR_futex_time64, sys_futex_time64), // 422 -+ LINXY(__NR_sched_rr_get_interval_time64, -+ sys_sched_rr_get_interval_time64), // 423 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff -ur valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-x86-linux.c valgrind-3.15.0/coregrind/m_syswrap/syswrap-x86-linux.c ---- valgrind-3.15.0.orig/coregrind/m_syswrap/syswrap-x86-linux.c 2020-02-28 14:02:29.844341714 +0100 -+++ valgrind-3.15.0/coregrind/m_syswrap/syswrap-x86-linux.c 2020-02-28 15:44:37.688691592 +0100 -@@ -1618,7 +1618,30 @@ - LINXY(__NR_statx, sys_statx), // 383 - - /* Explicitly not supported on i386 yet. */ -- GENX_(__NR_arch_prctl, sys_ni_syscall) // 384 -+ GENX_(__NR_arch_prctl, sys_ni_syscall), // 384 -+ -+ LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 -+ LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 -+ -+ LINXY(__NR_clock_getres_time64, sys_clock_getres_time64), // 406 -+ LINXY(__NR_clock_nanosleep_time64, sys_clock_nanosleep_time64), // 407 -+ LINXY(__NR_timer_gettime64, sys_timer_gettime64), // 408 -+ LINXY(__NR_timer_settime64, sys_timer_settime64), // 409 -+ LINXY(__NR_timerfd_gettime64, sys_timerfd_gettime64),// 410 -+ LINXY(__NR_timerfd_settime64, sys_timerfd_settime64),// 411 -+ LINX_(__NR_utimensat_time64, sys_utimensat_time64), // 412 -+ LINXY(__NR_pselect6_time64, sys_pselect6_time64), // 413 -+ LINXY(__NR_ppoll_time64, sys_ppoll_time64), // 414 -+ -+ LINXY(__NR_recvmmsg_time64, sys_recvmmsg_time64), // 417 -+ LINX_(__NR_mq_timedsend_time64, sys_mq_timedsend_time64), // 418 -+ LINXY(__NR_mq_timedreceive_time64, sys_mq_timedreceive_time64), // 419 -+ LINX_(__NR_semtimedop_time64, sys_semtimedop_time64),// 420 -+ LINXY(__NR_rt_sigtimedwait_time64, sys_rt_sigtimedwait_time64), // 421 -+ LINXY(__NR_futex_time64, sys_futex_time64), // 422 -+ LINXY(__NR_sched_rr_get_interval_time64, -+ sys_sched_rr_get_interval_time64), // 423 -+ - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff -ur valgrind-3.15.0.orig/include/pub_tool_vkiscnums_asm.h valgrind-3.15.0/include/pub_tool_vkiscnums_asm.h ---- valgrind-3.15.0.orig/include/pub_tool_vkiscnums_asm.h 2019-04-13 12:56:21.000000000 +0200 -+++ valgrind-3.15.0/include/pub_tool_vkiscnums_asm.h 2020-02-28 14:55:44.627692759 +0100 -@@ -34,30 +34,43 @@ - #define __PUB_TOOL_VKISCNUMS_ASM_H - - #if defined(VGP_x86_linux) -+# include "vki/vki-scnums-shared-linux.h" -+# include "vki/vki-scnums-32bit-linux.h" - # include "vki/vki-scnums-x86-linux.h" - - #elif defined(VGP_amd64_linux) -+# include "vki/vki-scnums-shared-linux.h" - # include "vki/vki-scnums-amd64-linux.h" - - #elif defined(VGP_ppc32_linux) -+# include "vki/vki-scnums-shared-linux.h" -+# include "vki/vki-scnums-32bit-linux.h" - # include "vki/vki-scnums-ppc32-linux.h" - - #elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) -+# include "vki/vki-scnums-shared-linux.h" - # include "vki/vki-scnums-ppc64-linux.h" - - #elif defined(VGP_s390x_linux) -+# include "vki/vki-scnums-shared-linux.h" - # include "vki/vki-scnums-s390x-linux.h" - - #elif defined(VGP_arm_linux) -+# include "vki/vki-scnums-shared-linux.h" -+# include "vki/vki-scnums-32bit-linux.h" - # include "vki/vki-scnums-arm-linux.h" - - #elif defined(VGP_arm64_linux) -+# include "vki/vki-scnums-shared-linux.h" - # include "vki/vki-scnums-arm64-linux.h" - - #elif defined(VGP_mips32_linux) -+# include "vki/vki-scnums-shared-linux.h" -+# include "vki/vki-scnums-32bit-linux.h" - # include "vki/vki-scnums-mips32-linux.h" - - #elif defined(VGP_mips64_linux) -+# include "vki/vki-scnums-shared-linux.h" - # include "vki/vki-scnums-mips64-linux.h" - - #elif defined(VGP_x86_darwin) || defined(VGP_amd64_darwin) -diff -ur valgrind-3.15.0.orig/include/vki/vki-linux.h valgrind-3.15.0/include/vki/vki-linux.h ---- valgrind-3.15.0.orig/include/vki/vki-linux.h 2020-02-28 14:02:29.873341294 +0100 -+++ valgrind-3.15.0/include/vki/vki-linux.h 2020-02-28 14:55:44.627692759 +0100 -@@ -5130,6 +5130,20 @@ - __vki_u32 id; - } __attribute__((aligned(8))); - -+/* Needed for 64bit time_t on 32bit arches. */ -+ -+typedef vki_int64_t vki_time64_t; -+ -+struct vki_timespec64 { -+ vki_time64_t tv_sec; -+ long tv_nsec; -+}; -+ -+struct vki_itimerspec64 { -+ struct vki_timespec it_interval; -+ struct vki_timespec it_value; -+}; -+ - /*--------------------------------------------------------------------*/ - /*--- end ---*/ - /*--------------------------------------------------------------------*/ -Only in valgrind-3.15.0/include/vki: vki-scnums-32bit-linux.h -diff -ur valgrind-3.15.0.orig/include/vki/vki-scnums-amd64-linux.h valgrind-3.15.0/include/vki/vki-scnums-amd64-linux.h ---- valgrind-3.15.0.orig/include/vki/vki-scnums-amd64-linux.h 2019-04-13 12:56:21.000000000 +0200 -+++ valgrind-3.15.0/include/vki/vki-scnums-amd64-linux.h 2020-02-28 14:55:44.628692747 +0100 -@@ -32,7 +32,7 @@ - #ifndef __VKI_SCNUMS_AMD64_LINUX_H - #define __VKI_SCNUMS_AMD64_LINUX_H - --// Derived from linux-2.6/arch/x86/entry/syscalls/syscall_64.tbl -+// Derived from linux-5.2/arch/x86/entry/syscalls/syscall_64.tbl - - #define __NR_read 0 - #define __NR_write 1 -@@ -414,6 +414,8 @@ - #define __NR_pkey_alloc 330 - #define __NR_pkey_free 331 - #define __NR_statx 332 -+#define __NR_io_pgetevents 333 -+#define __NR_rseq 334 - - #endif /* __VKI_SCNUMS_AMD64_LINUX_H */ - -Only in valgrind-3.15.0/include/vki: vki-scnums-shared-linux.h -diff -ur valgrind-3.15.0.orig/include/vki/vki-scnums-x86-linux.h valgrind-3.15.0/include/vki/vki-scnums-x86-linux.h ---- valgrind-3.15.0.orig/include/vki/vki-scnums-x86-linux.h 2019-04-13 12:56:21.000000000 +0200 -+++ valgrind-3.15.0/include/vki/vki-scnums-x86-linux.h 2020-02-28 14:55:44.628692747 +0100 -@@ -32,7 +32,7 @@ - #ifndef __VKI_SCNUMS_X86_LINUX_H - #define __VKI_SCNUMS_X86_LINUX_H - --// Derived from linux-2.6/arch/x86/entry/syscalls/syscall_32.tbl -+// Derived from linux-5.2/arch/x86/entry/syscalls/syscall_32.tbl - - #define __NR_restart_syscall 0 - #define __NR_exit 1 -@@ -419,6 +419,18 @@ - #define __NR_pkey_free 382 - #define __NR_statx 383 - #define __NR_arch_prctl 384 -+#define __NR_io_pgetevents 385 -+#define __NR_rseq 386 -+#define __NR_semget 393 -+#define __NR_semctl 394 -+#define __NR_shmget 395 -+#define __NR_shmctl 396 -+#define __NR_shmat 397 -+#define __NR_shmdt 398 -+#define __NR_msgget 399 -+#define __NR_msgsnd 400 -+#define __NR_msgrcv 401 -+#define __NR_msgctl 402 - - #endif /* __VKI_SCNUMS_X86_LINUX_H */ - -diff --git a/include/vki/vki-scnums-32bit-linux.h b/include/vki/vki-scnums-32bit-linux.h -new file mode 100644 -index 000000000..f276ddaed ---- /dev/null -+++ b/include/vki/vki-scnums-32bit-linux.h -@@ -0,0 +1,49 @@ -+/* -+ This file is part of Valgrind, a dynamic binary instrumentation framework. -+ -+ Copyright (C) 2019 Bart Van Assche -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public License as -+ published by the Free Software Foundation; either version 2 of the -+ License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, see . -+ -+ The GNU General Public License is contained in the file COPYING. -+*/ -+ -+#ifndef __VKI_SCNUMS_32BIT_LINUX_H -+#define __VKI_SCNUMS_32BIT_LINUX_H -+ -+// Derived from the __BITS_PER_LONG == 32 sections in -+// linux-5.2/include/uapi/asm-generic/unistd.h -+ -+#define __NR_clock_gettime64 403 -+#define __NR_clock_settime64 404 -+#define __NR_clock_adjtime64 405 -+#define __NR_clock_getres_time64 406 -+#define __NR_clock_nanosleep_time64 407 -+#define __NR_timer_gettime64 408 -+#define __NR_timer_settime64 409 -+#define __NR_timerfd_gettime64 410 -+#define __NR_timerfd_settime64 411 -+#define __NR_utimensat_time64 412 -+#define __NR_pselect6_time64 413 -+#define __NR_ppoll_time64 414 -+#define __NR_io_pgetevents_time64 416 -+#define __NR_recvmmsg_time64 417 -+#define __NR_mq_timedsend_time64 418 -+#define __NR_mq_timedreceive_time64 419 -+#define __NR_semtimedop_time64 420 -+#define __NR_rt_sigtimedwait_time64 421 -+#define __NR_futex_time64 422 -+#define __NR_sched_rr_get_interval_time64 423 -+ -+#endif -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -new file mode 100644 -index 000000000..6221d5a81 ---- /dev/null -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -0,0 +1,42 @@ -+ -+/* System call numbers for Linux that are shared across all architectures. */ -+ -+/* -+ This file is part of Valgrind, a dynamic binary instrumentation -+ framework. -+ -+ Copyright (C) 2019 Bart Van Assche -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public License as -+ published by the Free Software Foundation; either version 2 of the -+ License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, see . -+ -+ The GNU General Public License is contained in the file COPYING. -+*/ -+ -+#ifndef __VKI_SCNUMS_SHARED_LINUX_H -+#define __VKI_SCNUMS_SHARED_LINUX_H -+ -+// Derived from linux-5.2/include/uapi/asm-generic/unistd.h -+ -+#define __NR_pidfd_send_signal 424 -+#define __NR_io_uring_setup 425 -+#define __NR_io_uring_enter 426 -+#define __NR_io_uring_register 427 -+#define __NR_open_tree 428 -+#define __NR_move_mount 429 -+#define __NR_fsopen 430 -+#define __NR_fsconfig 431 -+#define __NR_fsmount 432 -+#define __NR_fspick 433 -+ -+#endif - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 14b78addb..1190a57d6 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -1622,6 +1622,20 @@ POST(sys_sendfile64) - } - } - -+static void pre_read_timespec64 (ThreadId tid, const char *msg, UWord arg) -+{ -+ struct vki_timespec64 *ts64 = (void *)(Addr)arg; -+ PRE_MEM_READ (msg, (Addr) &ts64->tv_sec, sizeof(vki_time64_t)); -+ PRE_MEM_READ (msg, (Addr) &ts64->tv_nsec, sizeof(vki_int32_t)); -+} -+ -+static void pre_read_itimerspec64 (ThreadId tid, const char *msg, UWord arg) -+{ -+ struct vki_itimerspec64 *its64 = (void *)(Addr)arg; -+ pre_read_timespec64 (tid, msg, (UWord) &its64->it_interval); -+ pre_read_timespec64 (tid, msg, (UWord) &its64->it_value); -+} -+ - static void futex_pre_helper ( ThreadId tid, SyscallArgLayout* layout, - SyscallArgs* arrghs, SyscallStatus* status, - UWord* flags, Bool is_time64 ) -@@ -1736,8 +1750,7 @@ static void futex_pre_helper ( ThreadId tid, SyscallArgLayout* layout, - PRE_MEM_READ( "futex(futex)", ARG1, sizeof(Int) ); - if (ARG4 != 0) { - if (is_time64) { -- PRE_MEM_READ( "futex_time64(timeout)", ARG4, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64 (tid, "futex_time64(timeout)", ARG4); - } else { - PRE_MEM_READ( "futex(timeout)", ARG4, - sizeof(struct vki_timespec) ); -@@ -1877,8 +1890,7 @@ static void pselect6_pre_helper ( ThreadId tid, SyscallArgLayout* layout, - ARG4, ARG1/8 /* __FD_SETSIZE/8 */ ); - if (ARG5 != 0) { - if (is_time64) { -- PRE_MEM_READ( "pselect6_time64(timeout)", ARG5, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "pselect6_time64(timeout)", ARG5); - } else { - PRE_MEM_READ( "pselect6(timeout)", ARG5, - sizeof(struct vki_timespec) ); -@@ -1975,8 +1987,7 @@ static void ppoll_pre_helper ( ThreadId tid, SyscallArgLayout* layout, - - if (ARG3) { - if (is_time64) { -- PRE_MEM_READ( "ppoll_time64(tsp)", ARG3, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "ppoll_time64(tsp)", ARG3); - } else { - PRE_MEM_READ( "ppoll(tsp)", ARG3, - sizeof(struct vki_timespec) ); -@@ -2841,8 +2852,7 @@ PRE(sys_mq_timedsend_time64) - } else { - PRE_MEM_READ( "mq_timedsend_time64(msg_ptr)", ARG2, ARG3 ); - if (ARG5 != 0) -- PRE_MEM_READ( "mq_timedsend_time64(abs_timeout)", ARG5, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "mq_timedsend_time64(abs_timeout)", ARG5); - } - } - -@@ -2893,8 +2903,7 @@ PRE(sys_mq_timedreceive_time64) - PRE_MEM_WRITE( "mq_timedreceive_time64(msg_prio)", - ARG4, sizeof(unsigned int) ); - if (ARG5 != 0) -- PRE_MEM_READ( "mq_timedreceive_time64(abs_timeout)", -- ARG5, sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "mq_timedreceive_time64(abs_timeout)", ARG5); - } - } - -@@ -2960,7 +2969,7 @@ PRE(sys_clock_settime64) - PRINT("sys_clock_settime64( %ld, %#" FMT_REGWORD "x )", SARG1, ARG2); - PRE_REG_READ2(long, "clock_settime64", - vki_clockid_t, clk_id, const struct timespec64 *, tp); -- PRE_MEM_READ( "clock_settime64(tp)", ARG2, sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "clock_settime64(tp)", ARG2); - } - - PRE(sys_clock_gettime) -@@ -2980,7 +2989,8 @@ PRE(sys_clock_gettime64) - PRINT("sys_clock_gettime64( %ld, %#" FMT_REGWORD "x )" , SARG1, ARG2); - PRE_REG_READ2(long, "clock_gettime64", - vki_clockid_t, clk_id, struct vki_timespec64 *, tp); -- PRE_MEM_WRITE( "clock_gettime64(tp)", ARG2, sizeof(struct vki_timespec64) ); -+ PRE_MEM_WRITE ( "clock_gettime64(tp)", ARG2, -+ sizeof(struct vki_timespec64) ); - } - POST(sys_clock_gettime64) - { -@@ -3012,7 +3022,7 @@ PRE(sys_clock_getres_time64) - vki_clockid_t, clk_id, struct vki_timespec64 *, res); - if (ARG2 != 0) - PRE_MEM_WRITE( "clock_getres_time64(res)", ARG2, -- sizeof(struct vki_timespec64) ); -+ sizeof(struct vki_timespec64) ); - } - POST(sys_clock_getres_time64) - { -@@ -3049,8 +3059,7 @@ PRE(sys_clock_nanosleep_time64) - vki_clockid_t, clkid, int, flags, - const struct vki_timespec64 *, rqtp, - struct vki_timespec64 *, rmtp); -- PRE_MEM_READ( "clock_nanosleep_time64(rqtp)", ARG3, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "clock_nanosleep_time64(rqtp)", ARG3); - if (ARG4 != 0) - PRE_MEM_WRITE( "clock_nanosleep_time64(rmtp)", ARG4, - sizeof(struct vki_timespec64) ); -@@ -3323,8 +3332,7 @@ PRE(sys_timerfd_settime64) - SET_STATUS_Failure(VKI_EBADF); - else - { -- PRE_MEM_READ("timerfd_settime64(result)", -- ARG3, sizeof(struct vki_itimerspec64)); -+ pre_read_itimerspec64 (tid, "timerfd_settime64(result)", ARG3); - if (ARG4) - { - PRE_MEM_WRITE("timerfd_settime64(result)", -@@ -4479,8 +4487,7 @@ PRE(sys_rt_sigtimedwait_time64) - PRE_MEM_WRITE( "rt_sigtimedwait_time64(info)", ARG2, - sizeof(vki_siginfo_t) ); - if (ARG3 != 0) -- PRE_MEM_READ( "rt_sigtimedwait_time64(timeout)", -- ARG3, sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "rt_sigtimedwait_time64(timeout)", ARG3); - } - POST(sys_rt_sigtimedwait_time64) - { -@@ -4947,8 +4954,7 @@ PRE(sys_semtimedop_time64) - PRE_MEM_READ( "semtimedop_time64(sops)", ARG1, - ARG2 * sizeof(struct vki_sembuf) ); - if (ARG3 != 0) -- PRE_MEM_READ( "semtimedop_time64(timeout)", ARG3, -- sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "semtimedop_time64(timeout)", ARG3); - } - - PRE(sys_msgget) -@@ -6303,7 +6309,7 @@ PRE(sys_recvmmsg_time64) - PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); - } - if (ARG5) -- PRE_MEM_READ( "recvmmsg(timeout)", ARG5, sizeof(struct vki_timespec64) ); -+ pre_read_timespec64(tid, "recvmmsg(timeout)", ARG5); - } - - POST(sys_recvmmsg_time64) -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index 6f42b3822..3d9dabc86 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -5317,9 +5317,21 @@ struct vki_ptp_pin_desc { - - typedef vki_int64_t vki_time64_t; - -+/* Note that this is the padding used by glibc, the kernel uses -+ a 64-bit signed int, but is ignoring the upper 32 bits of the -+ tv_nsec field. It does always write the full struct though. -+ So this is only needed for PRE_MEM_READ. See pre_read_timespec64. */ - struct vki_timespec64 { - vki_time64_t tv_sec; -- long tv_nsec; -+#if defined(VKI_BIG_ENDIAN) -+ vki_int32_t tv_pad; -+ vki_int32_t tv_nsec; -+#elif defined(VKI_LITTLE_ENDIAN) -+ vki_int32_t tv_nsec; -+ vki_int32_t tv_pad; -+#else -+#error edit for your odd byteorder. -+#endif - }; - - struct vki_itimerspec64 { diff --git a/valgrind-3.15.0-z14-misc.patch b/valgrind-3.15.0-z14-misc.patch deleted file mode 100644 index ef042de..0000000 --- a/valgrind-3.15.0-z14-misc.patch +++ /dev/null @@ -1,8463 +0,0 @@ -commit 65d8e9ed96287235b33dfe40525a442dc978e3af -Author: Andreas Arnez -Date: Tue Oct 2 13:47:50 2018 +0200 - - s390x: Add models "z14" and "z14 ZR1" - - Add IBM z14 and IBM z14 ZR1 to the list of known machine models. Add an - expected output variant for z14 to the s390x-specific "ecag" test case. - In README.s390, refer to a current version of the z/Architecture - Principles of Operation that describes the instructions introduced with - IBM z14. - -diff --git a/README.s390 b/README.s390 -index 4679bb317..ac9485a62 100644 ---- a/README.s390 -+++ b/README.s390 -@@ -12,7 +12,6 @@ Limitations - - 31-bit client programs are not supported. - - Hexadecimal floating point is not supported. - - Transactional memory is not supported. --- Instructions operating on vector registers are not supported. - - memcheck, cachegrind, drd, helgrind, massif, lackey, and none are - supported. - - On machine models predating z10, cachegrind will assume a z10 cache -@@ -49,6 +48,6 @@ Reading Material - (1) Linux for zSeries ELF ABI Supplement - http://refspecs.linuxfoundation.org/ELF/zSeries/index.html - (2) z/Architecture Principles of Operation -- http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr010.pdf -+ http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr011.pdf - (3) z/Architecture Reference Summary -- http://publibfi.boulder.ibm.com/epubs/pdf/dz9zs008.pdf -+ http://publibfi.boulder.ibm.com/epubs/pdf/dz9zs009.pdf -diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c -index ac3006d69..97c0bacd6 100644 ---- a/VEX/priv/main_main.c -+++ b/VEX/priv/main_main.c -@@ -1719,6 +1719,8 @@ static const HChar* show_hwcaps_s390x ( UInt hwcaps ) - { VEX_HWCAPS_S390X_FPEXT, "fpext" }, - { VEX_HWCAPS_S390X_LSC, "lsc" }, - { VEX_HWCAPS_S390X_PFPO, "pfpo" }, -+ { VEX_HWCAPS_S390X_VX, "vx" }, -+ { VEX_HWCAPS_S390X_MSA5, "msa5" }, - }; - /* Allocate a large enough buffer */ - static HChar buf[sizeof prefix + -diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h -index 1e112f509..37afd185a 100644 ---- a/VEX/pub/libvex.h -+++ b/VEX/pub/libvex.h -@@ -144,7 +144,9 @@ typedef - #define VEX_S390X_MODEL_ZBC12 11 - #define VEX_S390X_MODEL_Z13 12 - #define VEX_S390X_MODEL_Z13S 13 --#define VEX_S390X_MODEL_UNKNOWN 14 /* always last in list */ -+#define VEX_S390X_MODEL_Z14 14 -+#define VEX_S390X_MODEL_Z14_ZR1 15 -+#define VEX_S390X_MODEL_UNKNOWN 16 /* always last in list */ - #define VEX_S390X_MODEL_MASK 0x3F - - #define VEX_HWCAPS_S390X_LDISP (1<<6) /* Long-displacement facility */ -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 56a28d108..cbb88472d 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -578,6 +578,8 @@ static UInt VG_(get_machine_model)(void) - { "2828", VEX_S390X_MODEL_ZBC12 }, - { "2964", VEX_S390X_MODEL_Z13 }, - { "2965", VEX_S390X_MODEL_Z13S }, -+ { "3906", VEX_S390X_MODEL_Z14 }, -+ { "3907", VEX_S390X_MODEL_Z14_ZR1 }, - }; - - Int model, n, fh; -diff --git a/none/tests/s390x/ecag.stdout.exp-z14 b/none/tests/s390x/ecag.stdout.exp-z14 -new file mode 100644 -index 000000000..98f53280c ---- /dev/null -+++ b/none/tests/s390x/ecag.stdout.exp-z14 -@@ -0,0 +1,28 @@ -+L1 topology: separate data and instruction; private -+L1 cache line size data: 256 -+L1 cache line size insn: 256 -+L1 total cachesize data: 131072 -+L1 total cachesize insn: 131072 -+L1 set. assoc. data: 8 -+L1 set. assoc. insn: 8 -+L2 topology: separate data and instruction; private -+L2 cache line size data: 256 -+L2 cache line size insn: 256 -+L2 total cachesize data: 4194304 -+L2 total cachesize insn: 2097152 -+L2 set. assoc. data: 8 -+L2 set. assoc. insn: 8 -+L3 topology: unified data and instruction; shared -+L3 cache line size data: 256 -+L3 cache line size insn: 256 -+L3 total cachesize data: 134217728 -+L3 total cachesize insn: 134217728 -+L3 set. assoc. data: 32 -+L3 set. assoc. insn: 32 -+L4 topology: unified data and instruction; shared -+L4 cache line size data: 256 -+L4 cache line size insn: 256 -+L4 total cachesize data: 704643072 -+L4 total cachesize insn: 704643072 -+L4 set. assoc. data: 42 -+L4 set. assoc. insn: 42 -diff --git a/tests/s390x_features.c b/tests/s390x_features.c -index 25734abb1..301785fac 100644 ---- a/tests/s390x_features.c -+++ b/tests/s390x_features.c -@@ -98,6 +98,8 @@ model_info models[] = { - { "2828", "zBC12" }, - { "2964", "z13" }, - { "2965", "z13s" }, -+ { "3906", "z14" }, -+ { "3907", "z14 ZR1"}, - }; - - - -commit e63f93a970b8eb83d83dfb8bb39d578229fa3496 -Author: Andreas Arnez -Date: Tue May 14 17:19:34 2019 +0200 - - s390x: Clean up s390-check-opcodes.pl - - Fix false positives when invoking s390-check-opcodes.pl. Also clean up - some code formatting issues in that script. Add the instructions TPEI and - IRBM to guest_s390_toIR.c and s390-opcodes.csv, so they are not longer - warned about. - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 515b6dba3..076a4211f 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -19613,8 +19613,10 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb99d: /* ESEA */ goto unimplemented; - case 0xb99e: /* PTI */ goto unimplemented; - case 0xb99f: /* SSAIR */ goto unimplemented; -+ case 0xb9a1: /* TPEI */ goto unimplemented; - case 0xb9a2: /* PTF */ goto unimplemented; - case 0xb9aa: /* LPTEA */ goto unimplemented; -+ case 0xb9ac: /* IRBM */ goto unimplemented; - case 0xb9ae: /* RRBM */ goto unimplemented; - case 0xb9af: /* PFMF */ goto unimplemented; - case 0xb9b0: s390_format_RRF_M0RERE(s390_irgen_CU14, RRF3_r3(ovl), - -commit 50b20aa244c1fddd9b9e872526d4daad49ddd7a5 -Author: Ilya Leoshkevich -Date: Thu May 16 12:34:37 2019 +0200 - - Bug 404406 - s390x: implement z14 miscellaneous instructions - - (from bug 404406 comment 0): - Valgrind on s390x currently lacks support for the miscellaneous - instruction extensions facility 2. - - Signed-off-by: Ilya Leoshkevich - -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index 0185de5fd..1470558ce 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -158,7 +158,9 @@ enum { - S390_CC_OP_DFP_128_TO_INT_64 = 57, - S390_CC_OP_PFPO_32 = 58, - S390_CC_OP_PFPO_64 = 59, -- S390_CC_OP_PFPO_128 = 60 -+ S390_CC_OP_PFPO_128 = 60, -+ S390_CC_OP_MUL_32 = 61, -+ S390_CC_OP_MUL_64 = 62 - }; - - /*------------------------------------------------------------*/ -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 63ee68b24..525e7000c 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -990,6 +990,16 @@ decode_bfp_rounding_mode(UInt irrm) - psw >> 28; /* cc */ \ - }) - -+#define S390_CC_FOR_TERNARY(opcode,cc_dep1,cc_dep2) \ -+({ \ -+ __asm__ volatile ( \ -+ opcode ",%[op1],%[op1],%[op2],0\n\t" \ -+ "ipm %[psw]\n\t" : [psw] "=d"(psw), [op1] "+d"(cc_dep1) \ -+ : [op2] "d"(cc_dep2) \ -+ : "cc");\ -+ psw >> 28; /* cc */ \ -+}) -+ - #define S390_CC_FOR_TERNARY_SUBB(opcode,cc_dep1,cc_dep2,cc_ndep) \ - ({ \ - /* Recover the original DEP2 value. See comment near s390_cc_thunk_put3 \ -@@ -1802,6 +1812,12 @@ s390_calculate_cc(ULong cc_op, ULong cc_dep1, ULong cc_dep2, ULong cc_ndep) - return psw >> 28; /* cc */ - } - -+ case S390_CC_OP_MUL_32: -+ return S390_CC_FOR_TERNARY(".insn rrf,0xb9fd0000", cc_dep1, cc_dep2); -+ -+ case S390_CC_OP_MUL_64: -+ return S390_CC_FOR_TERNARY(".insn rrf,0xb9ed0000", cc_dep1, cc_dep2); -+ - default: - break; - } -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 076a4211f..06ec27fae 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -49,7 +49,7 @@ - static UInt s390_decode_and_irgen(const UChar *, UInt, DisResult *); - static void s390_irgen_xonc(IROp, IRTemp, IRTemp, IRTemp); - static void s390_irgen_CLC_EX(IRTemp, IRTemp, IRTemp); -- -+static const HChar *s390_irgen_BIC(UChar r1, IRTemp op2addr); - - /*------------------------------------------------------------*/ - /*--- Globals ---*/ -@@ -3314,8 +3314,12 @@ s390_format_RXY_RRRD(const HChar *(*irgen)(UChar r1, IRTemp op2addr), - - mnm = irgen(r1, op2addr); - -- if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) -- s390_disasm(ENC3(MNM, GPR, SDXB), mnm, r1, dh2, dl2, x2, b2); -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) { -+ if (irgen == s390_irgen_BIC) -+ s390_disasm(ENC2(XMNM, SDXB), S390_XMNM_BIC, r1, dh2, dl2, x2, b2); -+ else -+ s390_disasm(ENC3(MNM, GPR, SDXB), mnm, r1, dh2, dl2, x2, b2); -+ } - } - - static void -@@ -4280,6 +4284,22 @@ s390_irgen_AHIK(UChar r1, UChar r3, UShort i2) - return "ahik"; - } - -+static const HChar * -+s390_irgen_AGH(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I64); -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I64); -+ -+ assign(op1, get_gpr_dw0(r1)); -+ assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkexpr(op2addr)))); -+ assign(result, binop(Iop_Add64, mkexpr(op1), mkexpr(op2))); -+ s390_cc_thunk_putSS(S390_CC_OP_SIGNED_ADD_64, op1, op2); -+ put_gpr_dw0(r1, mkexpr(result)); -+ -+ return "agh"; -+} -+ - static const HChar * - s390_irgen_AGHIK(UChar r1, UChar r3, UShort i2) - { -@@ -5197,6 +5217,24 @@ s390_irgen_BCTG(UChar r1, IRTemp op2addr) - return "bctg"; - } - -+static const HChar * -+s390_irgen_BIC(UChar r1, IRTemp op2addr) -+{ -+ IRTemp cond = newTemp(Ity_I32); -+ -+ if (r1 == 0) { -+ /* nothing */ -+ } else if (r1 == 15) { -+ always_goto(load(Ity_I64, mkexpr(op2addr))); -+ } else { -+ assign(cond, s390_call_calculate_cond(r1)); -+ if_condition_goto_computed(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -+ load(Ity_I64, mkexpr(op2addr))); -+ } -+ -+ return "bic"; -+} -+ - static const HChar * - s390_irgen_BXH(UChar r1, UChar r3, IRTemp op2addr) - { -@@ -8333,6 +8371,54 @@ s390_irgen_MFY(UChar r1, IRTemp op2addr) - return "mfy"; - } - -+static const HChar * -+s390_irgen_MG(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I64); -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I128); -+ -+ assign(op1, get_gpr_dw0(r1 + 1)); -+ assign(op2, load(Ity_I64, mkexpr(op2addr))); -+ assign(result, binop(Iop_MullS64, mkexpr(op1), mkexpr(op2))); -+ put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result))); -+ put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result))); -+ -+ return "mg"; -+} -+ -+static const HChar * -+s390_irgen_MGH(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I64); -+ IRTemp op2 = newTemp(Ity_I16); -+ IRTemp result = newTemp(Ity_I128); -+ -+ assign(op1, get_gpr_dw0(r1)); -+ assign(op2, load(Ity_I16, mkexpr(op2addr))); -+ assign(result, binop(Iop_MullS64, mkexpr(op1), unop(Iop_16Sto64, mkexpr(op2)) -+ )); -+ put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result))); -+ -+ return "mgh"; -+} -+ -+static const HChar * -+s390_irgen_MGRK(UChar r3, UChar r1, UChar r2) -+{ -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp op3 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I128); -+ -+ assign(op2, get_gpr_dw0(r2)); -+ assign(op3, get_gpr_dw0(r3)); -+ assign(result, binop(Iop_MullS64, mkexpr(op2), mkexpr(op3))); -+ put_gpr_dw0(r1, unop(Iop_128HIto64, mkexpr(result))); -+ put_gpr_dw0(r1 + 1, unop(Iop_128to64, mkexpr(result))); -+ -+ return "mgrk"; -+} -+ - static const HChar * - s390_irgen_MH(UChar r1, IRTemp op2addr) - { -@@ -8522,6 +8608,38 @@ s390_irgen_MS(UChar r1, IRTemp op2addr) - return "ms"; - } - -+static const HChar * -+s390_irgen_MSC(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I32); -+ IRTemp op2 = newTemp(Ity_I32); -+ IRTemp result = newTemp(Ity_I64); -+ -+ assign(op1, get_gpr_w1(r1)); -+ assign(op2, load(Ity_I32, mkexpr(op2addr))); -+ assign(result, binop(Iop_MullS32, mkexpr(op1), mkexpr(op2))); -+ s390_cc_thunk_putSS(S390_CC_OP_MUL_32, op1, op2); -+ put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result))); -+ -+ return "msc"; -+} -+ -+static const HChar * -+s390_irgen_MSRKC(UChar r3, UChar r1, UChar r2) -+{ -+ IRTemp op2 = newTemp(Ity_I32); -+ IRTemp op3 = newTemp(Ity_I32); -+ IRTemp result = newTemp(Ity_I64); -+ -+ assign(op2, get_gpr_w1(r2)); -+ assign(op3, get_gpr_w1(r3)); -+ assign(result, binop(Iop_MullS32, mkexpr(op2), mkexpr(op3))); -+ s390_cc_thunk_putSS(S390_CC_OP_MUL_32, op2, op3); -+ put_gpr_w1(r1, unop(Iop_64to32, mkexpr(result))); -+ -+ return "msrkc"; -+} -+ - static const HChar * - s390_irgen_MSY(UChar r1, IRTemp op2addr) - { -@@ -8552,6 +8670,22 @@ s390_irgen_MSG(UChar r1, IRTemp op2addr) - return "msg"; - } - -+static const HChar * -+s390_irgen_MSGC(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I64); -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I128); -+ -+ assign(op1, get_gpr_dw0(r1)); -+ assign(op2, load(Ity_I64, mkexpr(op2addr))); -+ assign(result, binop(Iop_MullS64, mkexpr(op1), mkexpr(op2))); -+ s390_cc_thunk_putSS(S390_CC_OP_MUL_64, op1, op2); -+ put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result))); -+ -+ return "msgc"; -+} -+ - static const HChar * - s390_irgen_MSGF(UChar r1, IRTemp op2addr) - { -@@ -8599,6 +8733,22 @@ s390_irgen_MSGFI(UChar r1, UInt i2) - return "msgfi"; - } - -+static const HChar * -+s390_irgen_MSGRKC(UChar r3, UChar r1, UChar r2) -+{ -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp op3 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I128); -+ -+ assign(op2, get_gpr_dw0(r2)); -+ assign(op3, get_gpr_dw0(r3)); -+ assign(result, binop(Iop_MullS64, mkexpr(op2), mkexpr(op3))); -+ s390_cc_thunk_putSS(S390_CC_OP_MUL_64, op2, op3); -+ put_gpr_dw0(r1, unop(Iop_128to64, mkexpr(result))); -+ -+ return "msgrkc"; -+} -+ - static const HChar * - s390_irgen_OR(UChar r1, UChar r2) - { -@@ -10060,6 +10210,22 @@ s390_irgen_SGF(UChar r1, IRTemp op2addr) - return "sgf"; - } - -+static const HChar * -+s390_irgen_SGH(UChar r1, IRTemp op2addr) -+{ -+ IRTemp op1 = newTemp(Ity_I64); -+ IRTemp op2 = newTemp(Ity_I64); -+ IRTemp result = newTemp(Ity_I64); -+ -+ assign(op1, get_gpr_dw0(r1)); -+ assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkexpr(op2addr)))); -+ assign(result, binop(Iop_Sub64, mkexpr(op1), mkexpr(op2))); -+ s390_cc_thunk_putSS(S390_CC_OP_SIGNED_SUB_64, op1, op2); -+ put_gpr_dw0(r1, mkexpr(result)); -+ -+ return "sgh"; -+} -+ - static const HChar * - s390_irgen_SH(UChar r1, IRTemp op2addr) - { -@@ -19693,8 +19859,12 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9eb: s390_format_RRF_R0RR2(s390_irgen_SLGRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -- case 0xb9ec: /* MGRK */ goto unimplemented; -- case 0xb9ed: /* MSGRKC */ goto unimplemented; -+ case 0xb9ec: s390_format_RRF_R0RR2(s390_irgen_MGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); -+ goto ok; -+ case 0xb9ed: s390_format_RRF_R0RR2(s390_irgen_MSGRKC, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); -+ goto ok; - case 0xb9f2: s390_format_RRF_U0RR(s390_irgen_LOCR, RRF3_r3(ovl), - RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_LOCR); goto ok; -@@ -19719,7 +19889,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9fb: s390_format_RRF_R0RR2(s390_irgen_SLRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -- case 0xb9fd: /* MSRKC */ goto unimplemented; -+ case 0xb9fd: s390_format_RRF_R0RR2(s390_irgen_MSRKC, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); -+ goto ok; - } - - switch ((ovl & 0xff000000) >> 24) { -@@ -20036,8 +20208,14 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -- case 0xe30000000038ULL: /* AGH */ goto unimplemented; -- case 0xe30000000039ULL: /* SGH */ goto unimplemented; -+ case 0xe30000000038ULL: s390_format_RXY_RRRD(s390_irgen_AGH, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; -+ case 0xe30000000039ULL: s390_format_RXY_RRRD(s390_irgen_SGH, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; - case 0xe3000000003aULL: s390_format_RXY_RRRD(s390_irgen_LLZRGF, RXY_r1(ovl), - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), -@@ -20046,7 +20224,10 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -- case 0xe3000000003cULL: /* MGH */ goto unimplemented; -+ case 0xe3000000003cULL: s390_format_RXY_RRRD(s390_irgen_MGH, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; - case 0xe3000000003eULL: s390_format_RXY_RRRD(s390_irgen_STRV, RXY_r1(ovl), - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), -@@ -20059,7 +20240,10 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -- case 0xe30000000047ULL: /* BIC */ goto unimplemented; -+ case 0xe30000000047ULL: s390_format_RXY_RRRD(s390_irgen_BIC, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; - case 0xe30000000048ULL: /* LLGFSG */ goto unimplemented; - case 0xe30000000049ULL: /* STGSC */ goto unimplemented; - case 0xe3000000004cULL: /* LGG */ goto unimplemented; -@@ -20072,7 +20256,10 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -- case 0xe30000000053ULL: /* MSC */ goto unimplemented; -+ case 0xe30000000053ULL: s390_format_RXY_RRRD(s390_irgen_MSC, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; - case 0xe30000000054ULL: s390_format_RXY_RRRD(s390_irgen_NY, RXY_r1(ovl), - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), -@@ -20177,8 +20364,14 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -- case 0xe30000000083ULL: /* MSGC */ goto unimplemented; -- case 0xe30000000084ULL: /* MG */ goto unimplemented; -+ case 0xe30000000083ULL: s390_format_RXY_RRRD(s390_irgen_MSGC, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; -+ case 0xe30000000084ULL: s390_format_RXY_RRRD(s390_irgen_MG, RXY_r1(ovl), -+ RXY_x2(ovl), RXY_b2(ovl), -+ RXY_dl2(ovl), -+ RXY_dh2(ovl)); goto ok; - case 0xe30000000085ULL: s390_format_RXY_RRRD(s390_irgen_LGAT, RXY_r1(ovl), - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 8aa2ba67f..162550fd7 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -3023,6 +3023,26 @@ s390_emit_MFY(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) - } - - -+static UChar * -+s390_emit_MG(UChar *p, UChar r1, UChar x2, UChar b2, UShort dl2, UChar dh2) -+{ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -+ s390_disasm(ENC3(MNM, GPR, SDXB), "mg", r1, dh2, dl2, x2, b2); -+ -+ return emit_RXY(p, 0xe30000000084ULL, r1, x2, b2, dl2, dh2); -+} -+ -+ -+static UChar * -+s390_emit_MGRK(UChar *p, UChar r3, UChar r1, UChar r2) -+{ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -+ s390_disasm(ENC4(MNM, GPR, GPR, GPR), "mgrk", r1, r2, r3); -+ -+ return emit_RRF3(p, 0xb9ec0000, r3, r1, r2); -+} -+ -+ - static UChar * - s390_emit_MH(UChar *p, UChar r1, UChar x2, UChar b2, UShort d2) - { -@@ -9595,7 +9615,7 @@ s390_insn_mul_emit(UChar *buf, const s390_insn *insn) - - case 8: - if (signed_multiply) -- vpanic("s390_insn_mul_emit"); -+ return s390_emit_MGRK(buf, r1 + 1, r1, r2); - else - return s390_emit_MLGR(buf, r1, r2); - -@@ -9640,7 +9660,7 @@ s390_insn_mul_emit(UChar *buf, const s390_insn *insn) - - case 8: - if (signed_multiply) -- vpanic("s390_insn_mul_emit"); -+ return s390_emit_MG(buf, r1, x, b, DISP20(d)); - else - return s390_emit_MLG(buf, r1, x, b, DISP20(d)); - -@@ -9665,7 +9685,7 @@ s390_insn_mul_emit(UChar *buf, const s390_insn *insn) - case 8: - buf = s390_emit_load_64imm(buf, R0, value); - if (signed_multiply) -- vpanic("s390_insn_mul_emit"); -+ return s390_emit_MGRK(buf, r1 + 1, r1, R0); - else - return s390_emit_MLGR(buf, r1, R0); - -diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c -index 97c0bacd6..3cfe8c1cb 100644 ---- a/VEX/priv/main_main.c -+++ b/VEX/priv/main_main.c -@@ -1721,6 +1721,7 @@ static const HChar* show_hwcaps_s390x ( UInt hwcaps ) - { VEX_HWCAPS_S390X_PFPO, "pfpo" }, - { VEX_HWCAPS_S390X_VX, "vx" }, - { VEX_HWCAPS_S390X_MSA5, "msa5" }, -+ { VEX_HWCAPS_S390X_MI2, "mi2" }, - }; - /* Allocate a large enough buffer */ - static HChar buf[sizeof prefix + -diff --git a/VEX/priv/s390_disasm.c b/VEX/priv/s390_disasm.c -index 4d3fec544..e3fbc11af 100644 ---- a/VEX/priv/s390_disasm.c -+++ b/VEX/priv/s390_disasm.c -@@ -433,6 +433,16 @@ s390_disasm(UInt command, ...) - the integer mask is appended as the final operand */ - if (mask == 0 || mask == 15) mask_suffix = mask; - break; -+ case S390_XMNM_BIC: -+ mask = va_arg(args, UInt); -+ if (mask == 0) { -+ /* There is no special opcode when mask == 0. */ -+ p += vex_sprintf(p, "bic"); -+ mask_suffix = mask; -+ } else { -+ p += vex_sprintf(p, "%s", construct_mnemonic("bi", "", mask)); -+ } -+ break; - } - } - continue; -diff --git a/VEX/priv/s390_disasm.h b/VEX/priv/s390_disasm.h -index 8469f72ab..eec41f8ac 100644 ---- a/VEX/priv/s390_disasm.h -+++ b/VEX/priv/s390_disasm.h -@@ -91,7 +91,8 @@ enum { - S390_XMNM_LOCFHR = 13, - S390_XMNM_LOCHI = 14, - S390_XMNM_LOCGHI = 15, -- S390_XMNM_LOCHHI = 16 -+ S390_XMNM_LOCHHI = 16, -+ S390_XMNM_BIC = 17 - }; - - void s390_disasm(UInt command, ...); -diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h -index 37afd185a..9337a7c32 100644 ---- a/VEX/pub/libvex.h -+++ b/VEX/pub/libvex.h -@@ -163,6 +163,7 @@ typedef - #define VEX_HWCAPS_S390X_PFPO (1<<17) /* Perform floating point ops facility */ - #define VEX_HWCAPS_S390X_VX (1<<18) /* Vector facility */ - #define VEX_HWCAPS_S390X_MSA5 (1<<19) /* message security assistance facility */ -+#define VEX_HWCAPS_S390X_MI2 (1<<20) /* miscellaneous-instruction-extensions facility 2 */ - - - /* Special value representing all available s390x hwcaps */ -@@ -179,7 +180,8 @@ typedef - VEX_HWCAPS_S390X_ETF2 | \ - VEX_HWCAPS_S390X_PFPO | \ - VEX_HWCAPS_S390X_VX | \ -- VEX_HWCAPS_S390X_MSA5) -+ VEX_HWCAPS_S390X_MSA5 | \ -+ VEX_HWCAPS_S390X_MI2) - - #define VEX_HWCAPS_S390X(x) ((x) & ~VEX_S390X_MODEL_MASK) - #define VEX_S390X_MODEL(x) ((x) & VEX_S390X_MODEL_MASK) -diff --git a/VEX/pub/libvex_s390x_common.h b/VEX/pub/libvex_s390x_common.h -index c976395fc..d945a4472 100644 ---- a/VEX/pub/libvex_s390x_common.h -+++ b/VEX/pub/libvex_s390x_common.h -@@ -99,6 +99,7 @@ - #define S390_FAC_CTREXE 50 // constrained transactional execution - #define S390_FAC_LSC2 53 // load/store on condition 2 and load and zero rightmost byte - #define S390_FAC_MSA5 57 // message-security-assist 5 -+#define S390_FAC_MI2 58 // miscellaneous-instruction-extensions 2 - #define S390_FAC_TREXE 73 // transactional execution - #define S390_FAC_MSA4 77 // message-security-assist 4 - #define S390_FAC_VX 129 // vector facility -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index cbb88472d..9eab9000f 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -1534,7 +1534,8 @@ Bool VG_(machine_get_hwcaps)( void ) - { False, S390_FAC_LSC, VEX_HWCAPS_S390X_LSC, "LSC" }, - { False, S390_FAC_PFPO, VEX_HWCAPS_S390X_PFPO, "PFPO" }, - { False, S390_FAC_VX, VEX_HWCAPS_S390X_VX, "VX" }, -- { False, S390_FAC_MSA5, VEX_HWCAPS_S390X_MSA5, "MSA5" } -+ { False, S390_FAC_MSA5, VEX_HWCAPS_S390X_MSA5, "MSA5" }, -+ { False, S390_FAC_MI2, VEX_HWCAPS_S390X_MI2, "MI2" }, - }; - - /* Set hwcaps according to the detected facilities */ - -commit 91d53d11671a07269846b189fcb2c5f2194d1da4 -Author: Ilya Leoshkevich -Date: Thu May 16 12:34:38 2019 +0200 - - Bug 404406 - s390x: test z14 miscellaneous instructions - - Reuse the existing infrastructure for add, sub and mul. - Add cc checks to all mul tests. - Write a new test for bic. - - Signed-off-by: Ilya Leoshkevich - -diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am -index 097c85ac1..a5fbffd1e 100644 ---- a/none/tests/s390x/Makefile.am -+++ b/none/tests/s390x/Makefile.am -@@ -19,7 +19,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ - spechelper-ltr spechelper-or \ - spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ - spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ -- vector_float -+ vector_float add-z14 sub-z14 mul-z14 bic - - if BUILD_DFP_TESTS - INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo -diff --git a/none/tests/s390x/add-z14.c b/none/tests/s390x/add-z14.c -new file mode 100644 -index 000000000..0f433980d ---- /dev/null -+++ b/none/tests/s390x/add-z14.c -@@ -0,0 +1,13 @@ -+#include "add.h" -+ -+#define agh(x, y) ".insn rxy,0xe30000000038, " x ", " y "\n" -+ -+static void do_regmem_insns(unsigned long m2) -+{ -+ memsweep(agh, m2, 0); -+} -+ -+int main() -+{ -+ for_each_m2(do_regmem_insns); -+} -diff --git a/none/tests/s390x/add-z14.stderr.exp b/none/tests/s390x/add-z14.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/add-z14.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/add-z14.stdout.exp b/none/tests/s390x/add-z14.stdout.exp -new file mode 100644 -index 000000000..d1b2c261f ---- /dev/null -+++ b/none/tests/s390x/add-z14.stdout.exp -@@ -0,0 +1,154 @@ -+agh 0 + 0000000000000000 + 0000000000000000 = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 0000000000000000 = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 0000000000000000 = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 0000000000000000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 0000000000000000 = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 0000000000000000 = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 0000000000000000 = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 0000000000000000 = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 0000000000000000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 0000000000000000 = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 0000000000000000 = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 7FFFFFFFFFFFFFFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000000001 + 7FFFFFFFFFFFFFFF = 0000000000008000 (cc=2) -+agh 0 + 000000000000FFFF + 7FFFFFFFFFFFFFFF = 0000000000017FFE (cc=2) -+agh 0 + 0000000000007FFF + 7FFFFFFFFFFFFFFF = 000000000000FFFE (cc=2) -+agh 0 + 0000000000008000 + 7FFFFFFFFFFFFFFF = 000000000000FFFF (cc=2) -+agh 0 + 00000000FFFFFFFF + 7FFFFFFFFFFFFFFF = 0000000100007FFE (cc=2) -+agh 0 + 0000000080000000 + 7FFFFFFFFFFFFFFF = 0000000080007FFF (cc=2) -+agh 0 + 000000007FFFFFFF + 7FFFFFFFFFFFFFFF = 0000000080007FFE (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 7FFFFFFFFFFFFFFF = 0000000000007FFE (cc=2) -+agh 0 + 8000000000000000 + 7FFFFFFFFFFFFFFF = 8000000000007FFF (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 7FFFFFFFFFFFFFFF = 8000000000007FFE (cc=3) -+agh 0 + 0000000000000000 + 8000000000000000 = FFFFFFFFFFFF8000 (cc=1) -+agh 0 + 0000000000000001 + 8000000000000000 = FFFFFFFFFFFF8001 (cc=1) -+agh 0 + 000000000000FFFF + 8000000000000000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000007FFF + 8000000000000000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 0000000000008000 + 8000000000000000 = 0000000000000000 (cc=0) -+agh 0 + 00000000FFFFFFFF + 8000000000000000 = 00000000FFFF7FFF (cc=2) -+agh 0 + 0000000080000000 + 8000000000000000 = 000000007FFF8000 (cc=2) -+agh 0 + 000000007FFFFFFF + 8000000000000000 = 000000007FFF7FFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 8000000000000000 = FFFFFFFFFFFF7FFF (cc=1) -+agh 0 + 8000000000000000 + 8000000000000000 = 7FFFFFFFFFFF8000 (cc=3) -+agh 0 + 7FFFFFFFFFFFFFFF + 8000000000000000 = 7FFFFFFFFFFF7FFF (cc=2) -+agh 0 + 0000000000000000 + FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 0000000000000001 + FFFFFFFFFFFFFFFF = 0000000000000000 (cc=0) -+agh 0 + 000000000000FFFF + FFFFFFFFFFFFFFFF = 000000000000FFFE (cc=2) -+agh 0 + 0000000000007FFF + FFFFFFFFFFFFFFFF = 0000000000007FFE (cc=2) -+agh 0 + 0000000000008000 + FFFFFFFFFFFFFFFF = 0000000000007FFF (cc=2) -+agh 0 + 00000000FFFFFFFF + FFFFFFFFFFFFFFFF = 00000000FFFFFFFE (cc=2) -+agh 0 + 0000000080000000 + FFFFFFFFFFFFFFFF = 000000007FFFFFFF (cc=2) -+agh 0 + 000000007FFFFFFF + FFFFFFFFFFFFFFFF = 000000007FFFFFFE (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE (cc=1) -+agh 0 + 8000000000000000 + FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF (cc=3) -+agh 0 + 7FFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE (cc=2) -+agh 0 + 0000000000000000 + 7FFFFFFF00000000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000000001 + 7FFFFFFF00000000 = 0000000000008000 (cc=2) -+agh 0 + 000000000000FFFF + 7FFFFFFF00000000 = 0000000000017FFE (cc=2) -+agh 0 + 0000000000007FFF + 7FFFFFFF00000000 = 000000000000FFFE (cc=2) -+agh 0 + 0000000000008000 + 7FFFFFFF00000000 = 000000000000FFFF (cc=2) -+agh 0 + 00000000FFFFFFFF + 7FFFFFFF00000000 = 0000000100007FFE (cc=2) -+agh 0 + 0000000080000000 + 7FFFFFFF00000000 = 0000000080007FFF (cc=2) -+agh 0 + 000000007FFFFFFF + 7FFFFFFF00000000 = 0000000080007FFE (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 7FFFFFFF00000000 = 0000000000007FFE (cc=2) -+agh 0 + 8000000000000000 + 7FFFFFFF00000000 = 8000000000007FFF (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 7FFFFFFF00000000 = 8000000000007FFE (cc=3) -+agh 0 + 0000000000000000 + 8000000000000000 = FFFFFFFFFFFF8000 (cc=1) -+agh 0 + 0000000000000001 + 8000000000000000 = FFFFFFFFFFFF8001 (cc=1) -+agh 0 + 000000000000FFFF + 8000000000000000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000007FFF + 8000000000000000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 0000000000008000 + 8000000000000000 = 0000000000000000 (cc=0) -+agh 0 + 00000000FFFFFFFF + 8000000000000000 = 00000000FFFF7FFF (cc=2) -+agh 0 + 0000000080000000 + 8000000000000000 = 000000007FFF8000 (cc=2) -+agh 0 + 000000007FFFFFFF + 8000000000000000 = 000000007FFF7FFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 8000000000000000 = FFFFFFFFFFFF7FFF (cc=1) -+agh 0 + 8000000000000000 + 8000000000000000 = 7FFFFFFFFFFF8000 (cc=3) -+agh 0 + 7FFFFFFFFFFFFFFF + 8000000000000000 = 7FFFFFFFFFFF7FFF (cc=2) -+agh 0 + 0000000000000000 + FFFFFFFF00000000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 0000000000000001 + FFFFFFFF00000000 = 0000000000000000 (cc=0) -+agh 0 + 000000000000FFFF + FFFFFFFF00000000 = 000000000000FFFE (cc=2) -+agh 0 + 0000000000007FFF + FFFFFFFF00000000 = 0000000000007FFE (cc=2) -+agh 0 + 0000000000008000 + FFFFFFFF00000000 = 0000000000007FFF (cc=2) -+agh 0 + 00000000FFFFFFFF + FFFFFFFF00000000 = 00000000FFFFFFFE (cc=2) -+agh 0 + 0000000080000000 + FFFFFFFF00000000 = 000000007FFFFFFF (cc=2) -+agh 0 + 000000007FFFFFFF + FFFFFFFF00000000 = 000000007FFFFFFE (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + FFFFFFFF00000000 = FFFFFFFFFFFFFFFE (cc=1) -+agh 0 + 8000000000000000 + FFFFFFFF00000000 = 7FFFFFFFFFFFFFFF (cc=3) -+agh 0 + 7FFFFFFFFFFFFFFF + FFFFFFFF00000000 = 7FFFFFFFFFFFFFFE (cc=2) -+agh 0 + 0000000000000000 + 000000007FFFFFFF = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 000000007FFFFFFF = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 000000007FFFFFFF = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 000000007FFFFFFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 000000007FFFFFFF = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 000000007FFFFFFF = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 000000007FFFFFFF = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 000000007FFFFFFF = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 000000007FFFFFFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 000000007FFFFFFF = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 000000007FFFFFFF = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 0000000080000000 = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 0000000080000000 = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 0000000080000000 = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 0000000080000000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 0000000080000000 = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 0000000080000000 = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 0000000080000000 = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 0000000080000000 = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 0000000080000000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 0000000080000000 = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 0000000080000000 = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 00000000FFFFFFFF = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 00000000FFFFFFFF = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 00000000FFFFFFFF = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 00000000FFFFFFFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 00000000FFFFFFFF = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 00000000FFFFFFFF = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 00000000FFFFFFFF = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 00000000FFFFFFFF = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 00000000FFFFFFFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 00000000FFFFFFFF = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 00000000FFFFFFFF = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 000000000000FFFF = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 000000000000FFFF = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 000000000000FFFF = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 000000000000FFFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 000000000000FFFF = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 000000000000FFFF = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 000000000000FFFF = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 000000000000FFFF = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 000000000000FFFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 000000000000FFFF = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 000000000000FFFF = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 0000000000007FFF = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 0000000000007FFF = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 0000000000007FFF = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 0000000000007FFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 0000000000007FFF = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 0000000000007FFF = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 0000000000007FFF = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 0000000000007FFF = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 0000000000007FFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 0000000000007FFF = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 0000000000007FFF = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 0000000000008000 = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 0000000000008000 = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 0000000000008000 = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 0000000000008000 = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 0000000000008000 = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 0000000000008000 = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 0000000000008000 = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 0000000000008000 = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 0000000000008000 = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 0000000000008000 = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 0000000000008000 = 7FFFFFFFFFFFFFFF (cc=2) -+agh 0 + 0000000000000000 + 000000000000FFFF = 0000000000000000 (cc=0) -+agh 0 + 0000000000000001 + 000000000000FFFF = 0000000000000001 (cc=2) -+agh 0 + 000000000000FFFF + 000000000000FFFF = 000000000000FFFF (cc=2) -+agh 0 + 0000000000007FFF + 000000000000FFFF = 0000000000007FFF (cc=2) -+agh 0 + 0000000000008000 + 000000000000FFFF = 0000000000008000 (cc=2) -+agh 0 + 00000000FFFFFFFF + 000000000000FFFF = 00000000FFFFFFFF (cc=2) -+agh 0 + 0000000080000000 + 000000000000FFFF = 0000000080000000 (cc=2) -+agh 0 + 000000007FFFFFFF + 000000000000FFFF = 000000007FFFFFFF (cc=2) -+agh 0 + FFFFFFFFFFFFFFFF + 000000000000FFFF = FFFFFFFFFFFFFFFF (cc=1) -+agh 0 + 8000000000000000 + 000000000000FFFF = 8000000000000000 (cc=1) -+agh 0 + 7FFFFFFFFFFFFFFF + 000000000000FFFF = 7FFFFFFFFFFFFFFF (cc=2) -diff --git a/none/tests/s390x/add-z14.vgtest b/none/tests/s390x/add-z14.vgtest -new file mode 100644 -index 000000000..531b58f4f ---- /dev/null -+++ b/none/tests/s390x/add-z14.vgtest -@@ -0,0 +1,2 @@ -+prog: add-z14 -+prereq: ../../../tests/s390x_features s390x-mi2 -diff --git a/none/tests/s390x/add.c b/none/tests/s390x/add.c -index 0041ed207..4f2f9be15 100644 ---- a/none/tests/s390x/add.c -+++ b/none/tests/s390x/add.c -@@ -1,7 +1,9 @@ --#include - #include "add.h" - #include "opcodes.h" - -+#define ahi(x, y) "ahi " x ", " y "\n" -+#define aghi(x, y) "aghi " x ", " y "\n" -+ - static void do_imm_insns(void) - { - immsweep(ahi, 0, 0); -@@ -14,6 +16,24 @@ static void do_imm_insns(void) - immsweep(aghi, 32767, 0); - } - -+#define a(x, y) "a " x ", " y "\n" -+#define ah(x, y) "ah " x ", " y "\n" -+#define ag(x, y) "ag " x ", " y "\n" -+#define agf(x, y) "agf " x ", " y "\n" -+#define al(x, y) "al " x ", " y "\n" -+#define alg(x, y) "alg " x ", " y "\n" -+#define agf(x, y) "agf " x ", " y "\n" -+#define algf(x, y) "algf " x ", " y "\n" -+#define ar(x, y) "ar " x ", " y "\n" -+#define agr(x, y) "agr " x ", " y "\n" -+#define agfr(x, y) "agfr " x ", " y "\n" -+#define alr(x, y) "alr " x ", " y "\n" -+#define algr(x, y) "algr " x ", " y "\n" -+#define algfr(x, y) "algfr " x ", " y "\n" -+#define alc(x, y) "alc " x ", " y "\n" -+#define alcg(x, y) "alcg " x ", " y "\n" -+#define alcr(x, y) "alcr " x ", " y "\n" -+#define alcgr(x, y) "alcgr " x ", " y "\n" - - static void do_regmem_insns(unsigned long s2) - { -@@ -46,22 +66,7 @@ static void do_regmem_insns(unsigned long s2) - - int main() - { -- do_regmem_insns(0x0ul); -- do_regmem_insns(0x7ffffffffffffffful); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xfffffffffffffffful); -- do_regmem_insns(0x7fffffff00000000ul); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xffffffff00000000ul); -- do_regmem_insns(0x000000007ffffffful); -- do_regmem_insns(0x0000000080000000ul); -- do_regmem_insns(0x00000000fffffffful); -- do_regmem_insns(0x000000000000fffful); -- do_regmem_insns(0x0000000000007ffful); -- do_regmem_insns(0x0000000000008000ul); -- do_regmem_insns(0x000000000000fffful); -+ for_each_m2(do_regmem_insns); - - do_imm_insns(); -- -- return 0; - } -diff --git a/none/tests/s390x/add.h b/none/tests/s390x/add.h -index 53111617a..a5051cf11 100644 ---- a/none/tests/s390x/add.h -+++ b/none/tests/s390x/add.h -@@ -9,7 +9,7 @@ volatile long v; - int cc; \ - asm volatile( "lghi 0," #CARRY "\n" \ - "aghi 0, 0\n" \ -- #insn " %0, %3\n" \ -+ insn("%0", "%3") \ - "ipm %1\n" \ - "srl %1,28\n" \ - : "+d" (tmp), "=d" (cc) \ -@@ -24,7 +24,7 @@ volatile long v; - int cc; \ - asm volatile( "lghi 0," #CARRY "\n" \ - "aghi 0, 0\n" \ -- #insn " %0, %3\n" \ -+ insn("%0", "%3") \ - "ipm %1\n" \ - "srl %1,28\n" \ - : "+d" (tmp), "=d" (cc) \ -@@ -39,7 +39,7 @@ volatile long v; - int cc; \ - asm volatile( "lghi 0," #CARRY "\n" \ - "aghi 0, 0\n" \ -- #insn " %0," #s2 "\n" \ -+ insn("%0", #s2) \ - "ipm %1\n" \ - "srl %1,28\n" \ - : "+d" (tmp), "=d" (cc) \ -@@ -204,3 +204,20 @@ volatile long v; - ADD_REG_XIMM(i, 0x7ffffffffffffffful, us2, s2, carryset); \ - }) - -+#define for_each_m2(f) \ -+({ \ -+ f(0x0ul); \ -+ f(0x7ffffffffffffffful); \ -+ f(0x8000000000000000ul); \ -+ f(0xfffffffffffffffful); \ -+ f(0x7fffffff00000000ul); \ -+ f(0x8000000000000000ul); \ -+ f(0xffffffff00000000ul); \ -+ f(0x000000007ffffffful); \ -+ f(0x0000000080000000ul); \ -+ f(0x00000000fffffffful); \ -+ f(0x000000000000fffful); \ -+ f(0x0000000000007ffful); \ -+ f(0x0000000000008000ul); \ -+ f(0x000000000000fffful); \ -+}) -diff --git a/none/tests/s390x/bic.c b/none/tests/s390x/bic.c -new file mode 100644 -index 000000000..a8d28d9d6 ---- /dev/null -+++ b/none/tests/s390x/bic.c -@@ -0,0 +1,78 @@ -+#include -+ -+#define HEAD "agfi %[i], -8\n" \ -+ "jl 1f\n" \ -+ "larl %[table], 6f\n" \ -+ "sllg %[i], %[i], 3(0)\n" \ -+ "clgfi %[i], 4*8\n" -+ -+#define TAIL "0: lghi %[i], 200\n" \ -+ "j 7f\n" \ -+ "1: lghi %[i], 100\n" \ -+ "j 7f\n" \ -+ "2: lghi %[i], 111\n" \ -+ "j 7f\n" \ -+ "3: lghi %[i], 122\n" \ -+ "j 7f\n" \ -+ "4: lghi %[i], 133\n" \ -+ "j 7f\n" \ -+ "5: lghi %[i], 144\n" \ -+ "j 7f\n" \ -+ "6:\n" \ -+ ".quad 2b\n" \ -+ ".quad 3b\n" \ -+ ".quad 4b\n" \ -+ ".quad 5b\n" \ -+ ".quad 5b\n" \ -+ "7:\n" -+ -+static int bic0(int i) -+{ -+ void *table; -+ asm volatile(HEAD -+ "brcl 10, 0f\n" -+ ".insn rxy, 0xe30000000047, 0, 8(%[i],%[table])\n" -+ "lg %[table],0(%[i],%[table])\n" -+ "br %[table]\n" -+ TAIL -+ : [i] "+d" (i) -+ , [table] "=d" (table) -+ :: "cc"); -+ return i; -+} -+ -+static int bic4(int i) -+{ -+ void *table; -+ asm volatile(HEAD -+ ".insn rxy, 0xe30000000047, 4, 0(%[i],%[table])\n" -+ TAIL -+ : [i] "+d" (i) -+ , [table] "=d" (table) -+ :: "cc"); -+ return i; -+} -+ -+static int bic15(int i) -+{ -+ void *table; -+ asm volatile(HEAD -+ "brcl 10, 0f\n" -+ ".insn rxy, 0xe30000000047, 15, 0(%[i],%[table])\n" -+ TAIL -+ : [i] "+d" (i) -+ , [table] "=d" (table) -+ :: "cc"); -+ return i; -+} -+ -+int main() -+{ -+ int i; -+ -+ for (i = 0; i < 16; i++) { -+ printf("bic0: %d -> %d\n", i, bic0(i)); -+ printf("bic4: %d -> %d\n", i, bic4(i)); -+ printf("bic15: %d -> %d\n", i, bic15(i)); -+ } -+} -diff --git a/none/tests/s390x/bic.stderr.exp b/none/tests/s390x/bic.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/bic.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/bic.stdout.exp b/none/tests/s390x/bic.stdout.exp -new file mode 100644 -index 000000000..64dcac49e ---- /dev/null -+++ b/none/tests/s390x/bic.stdout.exp -@@ -0,0 +1,48 @@ -+bic0: 0 -> 100 -+bic4: 0 -> 100 -+bic15: 0 -> 100 -+bic0: 1 -> 100 -+bic4: 1 -> 100 -+bic15: 1 -> 100 -+bic0: 2 -> 100 -+bic4: 2 -> 100 -+bic15: 2 -> 100 -+bic0: 3 -> 100 -+bic4: 3 -> 100 -+bic15: 3 -> 100 -+bic0: 4 -> 100 -+bic4: 4 -> 100 -+bic15: 4 -> 100 -+bic0: 5 -> 100 -+bic4: 5 -> 100 -+bic15: 5 -> 100 -+bic0: 6 -> 100 -+bic4: 6 -> 100 -+bic15: 6 -> 100 -+bic0: 7 -> 100 -+bic4: 7 -> 100 -+bic15: 7 -> 100 -+bic0: 8 -> 111 -+bic4: 8 -> 111 -+bic15: 8 -> 111 -+bic0: 9 -> 122 -+bic4: 9 -> 122 -+bic15: 9 -> 122 -+bic0: 10 -> 133 -+bic4: 10 -> 133 -+bic15: 10 -> 133 -+bic0: 11 -> 144 -+bic4: 11 -> 144 -+bic15: 11 -> 144 -+bic0: 12 -> 200 -+bic4: 12 -> 200 -+bic15: 12 -> 200 -+bic0: 13 -> 200 -+bic4: 13 -> 200 -+bic15: 13 -> 200 -+bic0: 14 -> 200 -+bic4: 14 -> 200 -+bic15: 14 -> 200 -+bic0: 15 -> 200 -+bic4: 15 -> 200 -+bic15: 15 -> 200 -diff --git a/none/tests/s390x/bic.vgtest b/none/tests/s390x/bic.vgtest -new file mode 100644 -index 000000000..dfb8c2331 ---- /dev/null -+++ b/none/tests/s390x/bic.vgtest -@@ -0,0 +1,2 @@ -+prog: bic -+prereq: ../../../tests/s390x_features s390x-mi2 -diff --git a/none/tests/s390x/mul-z14.c b/none/tests/s390x/mul-z14.c -new file mode 100644 -index 000000000..1a28af89a ---- /dev/null -+++ b/none/tests/s390x/mul-z14.c -@@ -0,0 +1,25 @@ -+#include "mul.h" -+ -+#define mg(x, y) ".insn rxy,0xe30000000084, " x ", " y "\n" -+#define mgh(x, y) ".insn rxy,0xe3000000003c, " x ", " y "\n" -+#define mgrk(x, y, z) ".insn rrf,0xb9ec0000, " x ", " y ", " z ", 0\n" -+#define msc(x, y) ".insn rxy,0xe30000000053, " x ", " y "\n" -+#define msrkc(x, y, z) ".insn rrf,0xb9fd0000, " x ", " y ", " z ", 0\n" -+#define msgc(x, y) ".insn rxy,0xe30000000083, " x ", " y "\n" -+#define msgrkc(x, y, z) ".insn rrf,0xb9ed0000, " x ", " y ", " z ", 0\n" -+ -+static void do_regmem_insns(unsigned long m2) -+{ -+ memsweep(mg, m2); -+ memsweep(mgh, m2); -+ regregsweep(mgrk, m2); -+ memsweep(msc, m2); -+ regregsweep(msrkc, m2); -+ memsweep(msgc, m2); -+ regregsweep(msgrkc, m2); -+} -+ -+int main() -+{ -+ for_each_m2(do_regmem_insns); -+} -diff --git a/none/tests/s390x/mul-z14.stderr.exp b/none/tests/s390x/mul-z14.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/mul-z14.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/mul-z14.stdout.exp b/none/tests/s390x/mul-z14.stdout.exp -new file mode 100644 -index 000000000..da22b5795 ---- /dev/null -+++ b/none/tests/s390x/mul-z14.stdout.exp -@@ -0,0 +1,1078 @@ -+mg 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000008000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000080000000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF000000000000000000000002 (cc=0) -+msrkc 8000000000000000 * 0000000000000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000000000000000000002 (cc=0) -+msgc 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgc 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgc 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgc 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgc 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgc 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgc 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgc FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgc 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgc 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgrkc 0000000000000000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000008000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000080000000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 8000000000000000 * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000002 (cc=0) -+mg 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mg 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mg 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mg 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mg 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mg 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mg 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF8000000000000001 (cc=0) -+mg 8000000000000000 * 7FFFFFFFFFFFFFFF = C0000000000000008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+mgh 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000007FFF0000000000000001 (cc=0) -+mgh 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFE8001000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000003FFF00010000000000007FFF (cc=0) -+mgh 0000000000008000 * 7FFFFFFFFFFFFFFF = 000000003FFF80000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 7FFFFFFFFFFFFFFF = 00003FFF800000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mgrk 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mgrk 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mgrk 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF8000000000000001 (cc=0) -+mgrk 8000000000000000 * 7FFFFFFFFFFFFFFF = C0000000000000008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msc 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 (cc=2) -+msc 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFF0001000000000000FFFF (cc=3) -+msc 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000007FFF80010000000000007FFF (cc=3) -+msc 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=3) -+msc 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000008000000100000000FFFFFFFF (cc=1) -+msc 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001000000007FFFFFFF (cc=3) -+msc FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=1) -+msc 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=1) -+msrkc 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000002 (cc=1) -+msrkc 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF00010000000000000002 (cc=1) -+msrkc 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00000000FFFF80010000000000000002 (cc=1) -+msrkc 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000000002 (cc=1) -+msrkc 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000010000000000000002 (cc=2) -+msrkc 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 00000000800000010000000000000002 (cc=1) -+msrkc FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF000000010000000000000002 (cc=2) -+msrkc 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000010000000000000002 (cc=2) -+msgc 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF0001000000000000FFFF (cc=3) -+msgc 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000007FFF (cc=3) -+msgc 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=3) -+msgc 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF0000000100000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=3) -+msgc 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF80000001000000007FFFFFFF (cc=3) -+msgc FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 8000000000000001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF00010000000000000002 (cc=3) -+msgrkc 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000000002 (cc=3) -+msgrkc 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000000002 (cc=3) -+msgrkc 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000010000000000000002 (cc=3) -+msgrkc 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000000000002 (cc=3) -+msgrkc 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000010000000000000002 (cc=3) -+msgrkc FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 80000000000000010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000010000000000000002 (cc=3) -+mg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 8000000000000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mg 000000000000FFFF * 8000000000000000 = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mg 0000000000007FFF * 8000000000000000 = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mg 0000000000008000 * 8000000000000000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mg 00000000FFFFFFFF * 8000000000000000 = FFFFFFFF800000008000000000000000 (cc=0) -+mg 0000000080000000 * 8000000000000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mg 000000007FFFFFFF * 8000000000000000 = FFFFFFFFC00000008000000000000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 8000000000000000 = C0000000000000008000000000000000 (cc=0) -+mgh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 8000000000000000 = FFFFFFFFFFFF80000000000000000001 (cc=0) -+mgh 000000000000FFFF * 8000000000000000 = FFFFFFFF80008000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 8000000000000000 = FFFFFFFFC00080000000000000007FFF (cc=0) -+mgh 0000000000008000 * 8000000000000000 = FFFFFFFFC00000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 8000000000000000 = FFFF80000000800000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 8000000000000000 = FFFFC000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 8000000000000000 = FFFFC00000008000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000008000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000080007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 8000000000000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mgrk 000000000000FFFF * 8000000000000000 = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mgrk 0000000000007FFF * 8000000000000000 = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mgrk 0000000000008000 * 8000000000000000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mgrk 00000000FFFFFFFF * 8000000000000000 = FFFFFFFF800000008000000000000000 (cc=0) -+mgrk 0000000080000000 * 8000000000000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * 8000000000000000 = FFFFFFFFC00000008000000000000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mgrk 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 8000000000000000 = C0000000000000008000000000000000 (cc=0) -+msc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=1) -+msc 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=3) -+msc 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=3) -+msc 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=3) -+msc 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=3) -+msc 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=3) -+msc FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=3) -+msc 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=3) -+msrkc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000008000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000080000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF000000000000000000000002 (cc=0) -+msrkc 8000000000000000 * 8000000000000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000000000000000000002 (cc=0) -+msgc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=1) -+msgc 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=3) -+msgc 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=3) -+msgc 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=3) -+msgc 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=3) -+msgc 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=3) -+msgc FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=3) -+msgc 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 8000000000000000 = 80000000000000000000000000000002 (cc=1) -+msgrkc 000000000000FFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000000007FFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000000008000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 00000000FFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000080000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 000000007FFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc FFFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 8000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+mg 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (cc=0) -+mg 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mg 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 (cc=0) -+mg 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 (cc=0) -+mg 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF00000001 (cc=0) -+mg 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000000 (cc=0) -+mg 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mg FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mg 8000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF8000000000000001 (cc=0) -+mgh 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+mgh 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+mgh 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+mgh 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF (cc=0) -+mgrk 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mgrk 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 (cc=0) -+mgrk 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF00000001 (cc=0) -+mgrk 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mgrk 8000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF8000000000000001 (cc=0) -+msc 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=1) -+msc 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=1) -+msc 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=1) -+msc 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=1) -+msc 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=2) -+msc 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=1) -+msc FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=2) -+msc 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=2) -+msrkc 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000002 (cc=1) -+msrkc 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF00010000000000000002 (cc=1) -+msrkc 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000000002 (cc=1) -+msrkc 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000000002 (cc=1) -+msrkc 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000010000000000000002 (cc=2) -+msrkc 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000800000010000000000000002 (cc=1) -+msrkc FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF000000010000000000000002 (cc=2) -+msrkc 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000010000000000000002 (cc=2) -+msgc 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=1) -+msgc 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=1) -+msgc 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=1) -+msgc 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=1) -+msgc 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=1) -+msgc 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=1) -+msgc 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=1) -+msgc FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=2) -+msgc 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=1) -+msgrkc 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000002 (cc=1) -+msgrkc 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF00010000000000000002 (cc=1) -+msgrkc 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000000002 (cc=1) -+msgrkc 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000000002 (cc=1) -+msgrkc 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF000000010000000000000002 (cc=1) -+msgrkc 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000000000002 (cc=1) -+msgrkc 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF800000010000000000000002 (cc=1) -+msgrkc FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000010000000000000002 (cc=2) -+msgrkc 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000010000000000000002 (cc=1) -+mg 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 (cc=0) -+mg 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 (cc=0) -+mg 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 (cc=0) -+mg 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 (cc=0) -+mg 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mg 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mg 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000100000000 (cc=0) -+mg 8000000000000000 * 7FFFFFFF00000000 = C0000000800000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 (cc=0) -+mgh 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 7FFFFFFF00000000 = 0000000000007FFF0000000000000001 (cc=0) -+mgh 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFE8001000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 7FFFFFFF00000000 = 000000003FFF00010000000000007FFF (cc=0) -+mgh 0000000000008000 * 7FFFFFFF00000000 = 000000003FFF80000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 7FFFFFFF00000000 = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 7FFFFFFF00000000 = 00003FFF800000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 7FFFFFFF00000000 = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 (cc=0) -+mgrk 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 (cc=0) -+mgrk 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 (cc=0) -+mgrk 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 (cc=0) -+mgrk 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mgrk 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000100000000 (cc=0) -+mgrk 8000000000000000 * 7FFFFFFF00000000 = C0000000800000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 (cc=0) -+msc 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 (cc=2) -+msc 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFF0001000000000000FFFF (cc=3) -+msc 0000000000007FFF * 7FFFFFFF00000000 = 000000007FFF80010000000000007FFF (cc=3) -+msc 0000000000008000 * 7FFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=3) -+msc 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000008000000100000000FFFFFFFF (cc=1) -+msc 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000001000000007FFFFFFF (cc=3) -+msc FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=1) -+msc 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=1) -+msrkc 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000000000FFFF * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000007FFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF000000000000000000000002 (cc=0) -+msrkc 8000000000000000 * 7FFFFFFF00000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000002 (cc=0) -+msgc 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000001 (cc=2) -+msgc 000000000000FFFF * 7FFFFFFF00000000 = 7FFF000100000000000000000000FFFF (cc=3) -+msgc 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000007FFF (cc=3) -+msgc 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=3) -+msgc 00000000FFFFFFFF * 7FFFFFFF00000000 = 800000010000000000000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000080000000 (cc=3) -+msgc 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000100000000000000007FFFFFFF (cc=3) -+msgc FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 8000000100000000FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 7FFFFFFF00000000 = 7FFF0001000000000000000000000002 (cc=3) -+msgrkc 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000000002 (cc=3) -+msgrkc 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000000002 (cc=3) -+msgrkc 00000000FFFFFFFF * 7FFFFFFF00000000 = 80000001000000000000000000000002 (cc=3) -+msgrkc 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 000000007FFFFFFF * 7FFFFFFF00000000 = 00000001000000000000000000000002 (cc=3) -+msgrkc FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000000000000000000002 (cc=1) -+msgrkc 8000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000000000000000000002 (cc=3) -+mg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 8000000000000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mg 000000000000FFFF * 8000000000000000 = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mg 0000000000007FFF * 8000000000000000 = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mg 0000000000008000 * 8000000000000000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mg 00000000FFFFFFFF * 8000000000000000 = FFFFFFFF800000008000000000000000 (cc=0) -+mg 0000000080000000 * 8000000000000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mg 000000007FFFFFFF * 8000000000000000 = FFFFFFFFC00000008000000000000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 8000000000000000 = C0000000000000008000000000000000 (cc=0) -+mgh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 8000000000000000 = FFFFFFFFFFFF80000000000000000001 (cc=0) -+mgh 000000000000FFFF * 8000000000000000 = FFFFFFFF80008000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 8000000000000000 = FFFFFFFFC00080000000000000007FFF (cc=0) -+mgh 0000000000008000 * 8000000000000000 = FFFFFFFFC00000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 8000000000000000 = FFFF80000000800000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 8000000000000000 = FFFFC000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 8000000000000000 = FFFFC00000008000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000008000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000080007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 8000000000000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mgrk 000000000000FFFF * 8000000000000000 = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mgrk 0000000000007FFF * 8000000000000000 = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mgrk 0000000000008000 * 8000000000000000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mgrk 00000000FFFFFFFF * 8000000000000000 = FFFFFFFF800000008000000000000000 (cc=0) -+mgrk 0000000080000000 * 8000000000000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * 8000000000000000 = FFFFFFFFC00000008000000000000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mgrk 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 8000000000000000 = C0000000000000008000000000000000 (cc=0) -+msc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=1) -+msc 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=3) -+msc 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=3) -+msc 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=3) -+msc 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=3) -+msc 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=3) -+msc FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=3) -+msc 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=3) -+msrkc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000008000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000080000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msrkc FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF000000000000000000000002 (cc=0) -+msrkc 8000000000000000 * 8000000000000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000000000000000000002 (cc=0) -+msgc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=1) -+msgc 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=3) -+msgc 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=3) -+msgc 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=3) -+msgc 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=3) -+msgc 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=3) -+msgc FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=3) -+msgc 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 8000000000000000 = 80000000000000000000000000000002 (cc=1) -+msgrkc 000000000000FFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000000007FFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000000008000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 00000000FFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 0000000080000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 000000007FFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc FFFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+msgrkc 8000000000000000 * 8000000000000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000000000000000000002 (cc=3) -+mg 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF00000000 (cc=0) -+mg 000000000000FFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF000100000000 (cc=0) -+mg 0000000000007FFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF800100000000 (cc=0) -+mg 0000000000008000 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF800000000000 (cc=0) -+mg 00000000FFFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF0000000100000000 (cc=0) -+mg 0000000080000000 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mg 000000007FFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000100000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000100000000 (cc=0) -+mg 8000000000000000 * FFFFFFFF00000000 = 00000000800000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF800000000000000100000000 (cc=0) -+mgh 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+mgh 000000000000FFFF * FFFFFFFF00000000 = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+mgh 0000000000007FFF * FFFFFFFF00000000 = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+mgh 0000000000008000 * FFFFFFFF00000000 = FFFFFFFFFFFF80000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * FFFFFFFF00000000 = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * FFFFFFFF00000000 = FFFFFFFF800000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * FFFFFFFF00000000 = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF00000000 (cc=0) -+mgrk 000000000000FFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF000100000000 (cc=0) -+mgrk 0000000000007FFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF800100000000 (cc=0) -+mgrk 0000000000008000 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFF800000000000 (cc=0) -+mgrk 00000000FFFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF0000000100000000 (cc=0) -+mgrk 0000000080000000 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF8000000100000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000100000000 (cc=0) -+mgrk 8000000000000000 * FFFFFFFF00000000 = 00000000800000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF800000000000000100000000 (cc=0) -+msc 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 (cc=1) -+msc 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF (cc=1) -+msc 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF (cc=1) -+msc 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=1) -+msc 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF (cc=2) -+msc 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 (cc=3) -+msc 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF (cc=1) -+msc FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=2) -+msc 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=2) -+msrkc 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000000000FFFF * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 000000007FFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msrkc FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF000000000000000000000002 (cc=0) -+msrkc 8000000000000000 * FFFFFFFF00000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000000000000000000002 (cc=0) -+msgc 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000001 (cc=1) -+msgc 000000000000FFFF * FFFFFFFF00000000 = FFFF000100000000000000000000FFFF (cc=1) -+msgc 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000007FFF (cc=1) -+msgc 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=1) -+msgc 00000000FFFFFFFF * FFFFFFFF00000000 = 000000010000000000000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000080000000 (cc=1) -+msgc 000000007FFFFFFF * FFFFFFFF00000000 = 8000000100000000000000007FFFFFFF (cc=1) -+msgc FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000100000000FFFFFFFFFFFFFFFF (cc=2) -+msgc 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000002 (cc=1) -+msgrkc 000000000000FFFF * FFFFFFFF00000000 = FFFF0001000000000000000000000002 (cc=1) -+msgrkc 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000000002 (cc=1) -+msgrkc 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000000002 (cc=1) -+msgrkc 00000000FFFFFFFF * FFFFFFFF00000000 = 00000001000000000000000000000002 (cc=3) -+msgrkc 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000000000002 (cc=1) -+msgrkc 000000007FFFFFFF * FFFFFFFF00000000 = 80000001000000000000000000000002 (cc=1) -+msgrkc FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000000000000000000002 (cc=2) -+msgrkc 8000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000000000000000000002 (cc=3) -+mg 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mg 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mg 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mg 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 (cc=0) -+mg 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mg 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 (cc=0) -+mg 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mg 8000000000000000 * 000000007FFFFFFF = FFFFFFFFC00000008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mgh 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 000000007FFFFFFF = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgrk 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mgrk 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mgrk 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mgrk 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mgrk 8000000000000000 * 000000007FFFFFFF = FFFFFFFFC00000008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+msc 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000002 (cc=2) -+msrkc 000000000000FFFF * 000000007FFFFFFF = 000000007FFF00010000000000000002 (cc=3) -+msrkc 0000000000007FFF * 000000007FFFFFFF = 000000007FFF80010000000000000002 (cc=3) -+msrkc 0000000000008000 * 000000007FFFFFFF = 00000000FFFF80000000000000000002 (cc=3) -+msrkc 00000000FFFFFFFF * 000000007FFFFFFF = 00000000800000010000000000000002 (cc=1) -+msrkc 0000000080000000 * 000000007FFFFFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000010000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF800000010000000000000002 (cc=1) -+msrkc 8000000000000000 * 000000007FFFFFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000010000000000000002 (cc=1) -+msgc 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=2) -+msgc 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF00010000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000000002 (cc=2) -+msgrkc 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE800000010000000000000002 (cc=2) -+msgrkc 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF000000010000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF800000010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 000000007FFFFFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000010000000000000002 (cc=3) -+mg 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mg 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 (cc=0) -+mg 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 (cc=0) -+mg 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 (cc=0) -+mg 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 (cc=0) -+mg 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 (cc=0) -+mg 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000000 (cc=0) -+mg 8000000000000000 * 0000000080000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mgh 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 0000000080000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mgrk 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 (cc=0) -+mgrk 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 (cc=0) -+mgrk 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 (cc=0) -+mgrk 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 (cc=0) -+mgrk 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 (cc=0) -+mgrk 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000000 (cc=0) -+mgrk 8000000000000000 * 0000000080000000 = FFFFFFFFC00000000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+msc 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 0000000080000000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 0000000080000000 = 00000000800000000000000000000002 (cc=1) -+msrkc 000000000000FFFF * 0000000080000000 = 00000000800000000000000000000002 (cc=3) -+msrkc 0000000000007FFF * 0000000080000000 = 00000000800000000000000000000002 (cc=3) -+msrkc 0000000000008000 * 0000000080000000 = 00000000000000000000000000000002 (cc=3) -+msrkc 00000000FFFFFFFF * 0000000080000000 = 00000000800000000000000000000002 (cc=3) -+msrkc 0000000080000000 * 0000000080000000 = 00000000000000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 0000000080000000 = 00000000800000000000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000000000000000000002 (cc=3) -+msrkc 8000000000000000 * 0000000080000000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF800000000000000000000002 (cc=3) -+msgc 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 (cc=2) -+msgc 000000000000FFFF * 0000000080000000 = 00007FFF80000000000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000007FFF (cc=2) -+msgc 0000000000008000 * 0000000080000000 = 00004000000000000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF8000000000000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 0000000080000000 = 40000000000000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF80000000000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 0000000080000000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 0000000080000000 = 00000000800000000000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 0000000080000000 = 00007FFF800000000000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000000002 (cc=2) -+msgrkc 0000000000008000 * 0000000080000000 = 00004000000000000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF800000000000000000000002 (cc=2) -+msgrkc 0000000080000000 * 0000000080000000 = 40000000000000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF800000000000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000000000000000000002 (cc=1) -+msgrkc 8000000000000000 * 0000000080000000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000000000000000000002 (cc=3) -+mg 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mg 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mg 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mg 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 (cc=0) -+mg 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 (cc=0) -+mg 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 (cc=0) -+mg 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF00000001 (cc=0) -+mg 8000000000000000 * 00000000FFFFFFFF = FFFFFFFF800000008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mgh 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 00000000FFFFFFFF = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgrk 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mgrk 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mgrk 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 (cc=0) -+mgrk 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF00000001 (cc=0) -+mgrk 8000000000000000 * 00000000FFFFFFFF = FFFFFFFF800000008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+msc 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000002 (cc=1) -+msrkc 000000000000FFFF * 00000000FFFFFFFF = 00000000FFFF00010000000000000002 (cc=1) -+msrkc 0000000000007FFF * 00000000FFFFFFFF = 00000000FFFF80010000000000000002 (cc=1) -+msrkc 0000000000008000 * 00000000FFFFFFFF = 00000000FFFF80000000000000000002 (cc=1) -+msrkc 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000010000000000000002 (cc=2) -+msrkc 0000000080000000 * 00000000FFFFFFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 00000000FFFFFFFF = 00000000800000010000000000000002 (cc=1) -+msrkc FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF000000010000000000000002 (cc=2) -+msrkc 8000000000000000 * 00000000FFFFFFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000010000000000000002 (cc=2) -+msgc 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF0001000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000007FFF (cc=2) -+msgc 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE0000000100000000FFFFFFFF (cc=3) -+msgc 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE80000001000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF00010000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000000002 (cc=2) -+msgrkc 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE000000010000000000000002 (cc=3) -+msgrkc 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE800000010000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF000000010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 00000000FFFFFFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000010000000000000002 (cc=3) -+mg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mg 8000000000000000 * 000000000000FFFF = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mgh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mgrk 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mgrk 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mgrk 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mgrk 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mgrk 8000000000000000 * 000000000000FFFF = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+msc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000002 (cc=2) -+msrkc 000000000000FFFF * 000000000000FFFF = 00000000FFFE00010000000000000002 (cc=3) -+msrkc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000000002 (cc=2) -+msrkc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000000002 (cc=2) -+msrkc 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF00010000000000000002 (cc=1) -+msrkc 0000000080000000 * 000000000000FFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 000000000000FFFF = 000000007FFF00010000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF00010000000000000002 (cc=1) -+msrkc 8000000000000000 * 000000000000FFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00010000000000000002 (cc=1) -+msgc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=2) -+msgc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 000000000000FFFF = 00000000FFFE00010000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000000002 (cc=2) -+msgrkc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF00010000000000000002 (cc=2) -+msgrkc 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF00010000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF00010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 000000000000FFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00010000000000000002 (cc=3) -+mg 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mg 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mg 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mg 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mg 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mg 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 (cc=0) -+mg 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 (cc=0) -+mg 8000000000000000 * 0000000000007FFF = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mgh 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 0000000000007FFF = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 0000000000007FFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mgrk 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mgrk 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mgrk 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mgrk 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 (cc=0) -+mgrk 8000000000000000 * 0000000000007FFF = FFFFFFFFFFFFC0008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+msc 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000002 (cc=2) -+msrkc 000000000000FFFF * 0000000000007FFF = 000000007FFE80010000000000000002 (cc=2) -+msrkc 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000000002 (cc=2) -+msrkc 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000000002 (cc=2) -+msrkc 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF80010000000000000002 (cc=1) -+msrkc 0000000080000000 * 0000000000007FFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 0000000000007FFF = 000000007FFF80010000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF80010000000000000002 (cc=1) -+msrkc 8000000000000000 * 0000000000007FFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80010000000000000002 (cc=1) -+msgc 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=2) -+msgc 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 0000000000007FFF = 000000007FFE80010000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000000002 (cc=2) -+msgrkc 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF80010000000000000002 (cc=2) -+msgrkc 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF80010000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF80010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 0000000000007FFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80010000000000000002 (cc=3) -+mg 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mg 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mg 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mg 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mg 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 (cc=0) -+mg 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 (cc=0) -+mg 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 (cc=0) -+mg FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 (cc=0) -+mg 8000000000000000 * 0000000000008000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mgh 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 0000000000008000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mgrk 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mgrk 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mgrk 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mgrk 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 (cc=0) -+mgrk 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 (cc=0) -+mgrk 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 (cc=0) -+mgrk 8000000000000000 * 0000000000008000 = FFFFFFFFFFFFC0000000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+msc 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 0000000000008000 = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 0000000000008000 = 00000000000080000000000000000002 (cc=2) -+msrkc 000000000000FFFF * 0000000000008000 = 000000007FFF80000000000000000002 (cc=2) -+msrkc 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000000002 (cc=2) -+msrkc 0000000000008000 * 0000000000008000 = 00000000400000000000000000000002 (cc=2) -+msrkc 00000000FFFFFFFF * 0000000000008000 = 00000000FFFF80000000000000000002 (cc=1) -+msrkc 0000000080000000 * 0000000000008000 = 00000000000000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 0000000000008000 = 00000000FFFF80000000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80000000000000000002 (cc=1) -+msrkc 8000000000000000 * 0000000000008000 = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFFFFFF80000000000000000002 (cc=1) -+msgc 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 (cc=2) -+msgc 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF (cc=2) -+msgc 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 0000000000008000 = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 0000000000008000 = 00000000000080000000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 0000000000008000 = 000000007FFF80000000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000000002 (cc=2) -+msgrkc 0000000000008000 * 0000000000008000 = 00000000400000000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF80000000000000000002 (cc=2) -+msgrkc 0000000080000000 * 0000000000008000 = 00004000000000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF80000000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80000000000000000002 (cc=1) -+msgrkc 8000000000000000 * 0000000000008000 = 00000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80000000000000000002 (cc=3) -+mg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mg 8000000000000000 * 000000000000FFFF = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mgh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mgh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mgh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mgh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mgh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mgh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mgh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mgh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mgh FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mgh 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 (cc=0) -+mgh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mgrk 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mgrk 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mgrk 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mgrk 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mgrk 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mgrk 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mgrk 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mgrk 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mgrk FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mgrk 8000000000000000 * 000000000000FFFF = FFFFFFFFFFFF80008000000000000000 (cc=0) -+mgrk 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+msc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msc 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msc 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msc 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msc 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msc 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msc 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msc 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msc 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msrkc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000002 (cc=0) -+msrkc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000002 (cc=2) -+msrkc 000000000000FFFF * 000000000000FFFF = 00000000FFFE00010000000000000002 (cc=3) -+msrkc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000000002 (cc=2) -+msrkc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000000002 (cc=2) -+msrkc 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF00010000000000000002 (cc=1) -+msrkc 0000000080000000 * 000000000000FFFF = 00000000800000000000000000000002 (cc=3) -+msrkc 000000007FFFFFFF * 000000000000FFFF = 000000007FFF00010000000000000002 (cc=3) -+msrkc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF00010000000000000002 (cc=1) -+msrkc 8000000000000000 * 000000000000FFFF = 80000000000000000000000000000002 (cc=0) -+msrkc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00010000000000000002 (cc=1) -+msgc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=2) -+msgc 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=2) -+msgc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=2) -+msgc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=2) -+msgc 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=2) -+msgc 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=2) -+msgc 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=2) -+msgc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=1) -+msgc 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=3) -+msgc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=3) -+msgrkc 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000002 (cc=0) -+msgrkc 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000002 (cc=2) -+msgrkc 000000000000FFFF * 000000000000FFFF = 00000000FFFE00010000000000000002 (cc=2) -+msgrkc 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000000002 (cc=2) -+msgrkc 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000000002 (cc=2) -+msgrkc 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF00010000000000000002 (cc=2) -+msgrkc 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000000000002 (cc=2) -+msgrkc 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF00010000000000000002 (cc=2) -+msgrkc FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF00010000000000000002 (cc=1) -+msgrkc 8000000000000000 * 000000000000FFFF = 80000000000000000000000000000002 (cc=3) -+msgrkc 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00010000000000000002 (cc=3) -diff --git a/none/tests/s390x/mul-z14.vgtest b/none/tests/s390x/mul-z14.vgtest -new file mode 100644 -index 000000000..2836e9113 ---- /dev/null -+++ b/none/tests/s390x/mul-z14.vgtest -@@ -0,0 +1,2 @@ -+prog: mul-z14 -+prereq: ../../../tests/s390x_features s390x-mi2 -diff --git a/none/tests/s390x/mul.c b/none/tests/s390x/mul.c -index 95a11dc23..1604c8ad7 100644 ---- a/none/tests/s390x/mul.c -+++ b/none/tests/s390x/mul.c -@@ -1,7 +1,9 @@ --#include - #include "mul.h" - #include "opcodes.h" - -+#define mhi(x, y) "mhi " x ", " y "\n" -+#define mghi(x, y) "mghi " x ", " y "\n" -+ - static void do_imm_insns(void) - { - immsweep(mhi, 0); -@@ -14,6 +16,19 @@ static void do_imm_insns(void) - immsweep(mghi, 32767); - } - -+#define m(x, y) "m " x ", " y "\n" -+#define mr(x, y) "mr " x ", " y "\n" -+#define mh(x, y) "mh " x ", " y "\n" -+#define mlg(x, y) "mlg " x ", " y "\n" -+#define mlgr(x, y) "mlgr " x ", " y "\n" -+#define ml(x, y) "ml " x ", " y "\n" -+#define mlr(x, y) "mlr " x ", " y "\n" -+#define ms(x, y) "ms " x ", " y "\n" -+#define msr(x, y) "msr " x ", " y "\n" -+#define msg(x, y) "msg " x ", " y "\n" -+#define msgr(x, y) "msgr " x ", " y "\n" -+#define msgf(x, y) "msgf " x ", " y "\n" -+#define msgfr(x, y) "msgfr " x ", " y "\n" - - static void do_regmem_insns(unsigned long m2) - { -@@ -35,20 +50,6 @@ static void do_regmem_insns(unsigned long m2) - - int main() - { -- do_regmem_insns(0x0ul); -- do_regmem_insns(0x7ffffffffffffffful); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xfffffffffffffffful); -- do_regmem_insns(0x7fffffff00000000ul); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xffffffff00000000ul); -- do_regmem_insns(0x000000007ffffffful); -- do_regmem_insns(0x0000000080000000ul); -- do_regmem_insns(0x00000000fffffffful); -- do_regmem_insns(0x000000000000fffful); -- do_regmem_insns(0x0000000000007ffful); -- do_regmem_insns(0x0000000000008000ul); -- do_regmem_insns(0x000000000000fffful); -+ for_each_m2(do_regmem_insns); - do_imm_insns(); -- return 0; - } -diff --git a/none/tests/s390x/mul.h b/none/tests/s390x/mul.h -index edb2aa876..27290b572 100644 ---- a/none/tests/s390x/mul.h -+++ b/none/tests/s390x/mul.h -@@ -4,58 +4,101 @@ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -- #insn " 2, %2\n" \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- : "Q" (m2) \ -- : "2","3"); \ -- printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ -+ int cc; \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ -+ insn("2", "%[m2]") \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "Q" (m2) \ -+ : "2","3","cc"); \ -+ printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ - }) - - #define MUL_REG_REG(insn, m1, m2) \ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -- #insn " 2, %2\n" \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- : "d" (m2) \ -- : "2","3"); \ -- printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ -+ int cc; \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ -+ insn("2", "%[m2]") \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "d" (m2) \ -+ : "2","3","cc"); \ -+ printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ -+}) -+ -+#define MUL_REG_REG_REG(insn, m1, m2) \ -+({ \ -+ unsigned long tmp1 = m1; \ -+ unsigned long tmp2 = m1; \ -+ int cc; \ -+ asm volatile( "xr %[cc],%[cc]\n" \ -+ insn("2", "%[tmp1]", "%[m2]") \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "d" (m2) \ -+ : "2","3","cc"); \ -+ printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ - }) - - #define MUL_REG_IMM(insn, m1, m2) \ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -- #insn " 2, " #m2 "\n" \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- :: "2","3"); \ -- printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, (unsigned long) m2, tmp1, tmp2); \ -+ int cc; \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ -+ insn("2", #m2) \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ :: "2","3","cc"); \ -+ printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, (unsigned long) m2, tmp1, tmp2, cc); \ - }) - - #define MUL_REG_XIMM(insn, m1, um2, m2) \ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -+ int cc; \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ - insn(2,m2) \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- :: "2","3"); \ -- printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, (unsigned long) 0x##um2##m2, tmp1, tmp2); \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ :: "2","3","cc"); \ -+ printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, (unsigned long) 0x##um2##m2, tmp1, tmp2, cc); \ - }) - - -@@ -89,6 +132,21 @@ - MUL_REG_REG(i, 0x7ffffffffffffffful, m2); \ - }) - -+#define regregsweep(i, m2) \ -+({ \ -+ MUL_REG_REG_REG(i, 0ul, m2); \ -+ MUL_REG_REG_REG(i, 1ul, m2); \ -+ MUL_REG_REG_REG(i, 0xfffful, m2); \ -+ MUL_REG_REG_REG(i, 0x7ffful, m2); \ -+ MUL_REG_REG_REG(i, 0x8000ul, m2); \ -+ MUL_REG_REG_REG(i, 0xfffffffful, m2); \ -+ MUL_REG_REG_REG(i, 0x80000000ul, m2); \ -+ MUL_REG_REG_REG(i, 0x7ffffffful, m2); \ -+ MUL_REG_REG_REG(i, 0xfffffffffffffffful, m2); \ -+ MUL_REG_REG_REG(i, 0x8000000000000000ul, m2); \ -+ MUL_REG_REG_REG(i, 0x7ffffffffffffffful, m2); \ -+}) -+ - #define immsweep(i, m2) \ - ({ \ - MUL_REG_IMM(i, 0ul, m2); \ -@@ -123,16 +181,23 @@ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -+ int cc; \ - register unsigned long *addr asm("5") = &m2; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ - MSY(2,0,5,000,00) \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- : "Q" (m2), "d" (addr) \ -- : "2","3"); \ -- printf("msy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "Q" (m2) \ -+ , [addr] "d" (addr) \ -+ : "2","3","cc"); \ -+ printf("msy %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ - }) - - #define msysweep(s2) \ -@@ -154,16 +219,23 @@ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -+ int cc; \ - register unsigned long *addr asm("5") = &m2; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ - MHY(2,0,5,000,00) \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- : "Q" (m2), "d" (addr) \ -- : "2","3"); \ -- printf("mhy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2] "+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "Q" (m2) \ -+ , [addr] "d" (addr) \ -+ : "2","3","cc"); \ -+ printf("mhy %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ - }) - - #define mhysweep(s2) \ -@@ -185,16 +257,23 @@ - ({ \ - unsigned long tmp1 = m1; \ - unsigned long tmp2 = m1; \ -+ int cc; \ - register unsigned long *addr asm("5") = &m2; \ -- asm volatile( "lgr 2, %0\n" \ -- "lgr 3, %1\n" \ -+ asm volatile( "lgr 2, %[tmp1]\n" \ -+ "lgr 3, %[tmp2]\n" \ -+ "xr %[cc],%[cc]\n" \ - MFY(2,0,5,000,00) \ -- "lgr %0,2\n" \ -- "lgr %1,3\n" \ -- : "+d" (tmp1), "+d" (tmp2) \ -- : "Q" (m2), "d" (addr) \ -+ "ipm %[cc]\n" \ -+ "srl %[cc],28\n" \ -+ "lgr %[tmp1],2\n" \ -+ "lgr %[tmp2],3\n" \ -+ : [tmp1] "+d" (tmp1) \ -+ , [tmp2]"+d" (tmp2) \ -+ , [cc] "=&d" (cc) \ -+ : [m2] "Q" (m2) \ -+ , [addr] "d" (addr) \ - : "2","3"); \ -- printf("mfy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ -+ printf("mfy %16.16lX * %16.16lX = %16.16lX%16.16lX (cc=%d)\n", m1, m2, tmp1, tmp2, cc); \ - }) - - #define mfysweep(s2) \ -@@ -211,3 +290,21 @@ - MUL_MFY(0x8000000000000000ul, s2); \ - MUL_MFY(0x7ffffffffffffffful, s2); \ - }) -+ -+#define for_each_m2(f) \ -+({ \ -+ do_regmem_insns(0x0ul); \ -+ do_regmem_insns(0x7ffffffffffffffful); \ -+ do_regmem_insns(0x8000000000000000ul); \ -+ do_regmem_insns(0xfffffffffffffffful); \ -+ do_regmem_insns(0x7fffffff00000000ul); \ -+ do_regmem_insns(0x8000000000000000ul); \ -+ do_regmem_insns(0xffffffff00000000ul); \ -+ do_regmem_insns(0x000000007ffffffful); \ -+ do_regmem_insns(0x0000000080000000ul); \ -+ do_regmem_insns(0x00000000fffffffful); \ -+ do_regmem_insns(0x000000000000fffful); \ -+ do_regmem_insns(0x0000000000007ffful); \ -+ do_regmem_insns(0x0000000000008000ul); \ -+ do_regmem_insns(0x000000000000fffful); \ -+}) -diff --git a/none/tests/s390x/mul.stdout.exp b/none/tests/s390x/mul.stdout.exp -index 0c4a5c519..2be53240f 100644 ---- a/none/tests/s390x/mul.stdout.exp -+++ b/none/tests/s390x/mul.stdout.exp -@@ -1,2244 +1,2244 @@ --m 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --m 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --m 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --m 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --m 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --m 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --m 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --mr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --mr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --mr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --mr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --mr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mh 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mh 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --mh 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --mh 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --mlg 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --mlg 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --mlg 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --mlg 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlg 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --mlg 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlg FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlg 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --mlgr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --mlgr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --mlgr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlgr 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --ml 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --ml 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --ml 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --ml 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --ml 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --ml 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --mlr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --mlr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --mlr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --mlr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --mlr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mlr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mlr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --ms 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --ms 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --ms 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --ms 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msg 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msg 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msg 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msg 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msg 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msg 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msg 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msg 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msgr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msgr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msgr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msgr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msgr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msgr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msgf 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msgf 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msgfr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msgfr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msgfr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msgfr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msgfr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msgfr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --msy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --msy 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --msy 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --m 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF --m 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 --m 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 --m 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 --m 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --m 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000C00000000000000080000000 --m 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 --m FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 --m 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 --mr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF --mr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 --mr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 --mr 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 --mr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000001 --mr 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000080000000 --mr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --mr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 --mr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 --mh 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mh 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000007FFF0000000000000001 --mh 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFE8001000000000000FFFF --mh 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000003FFF00010000000000007FFF --mh 0000000000008000 * 7FFFFFFFFFFFFFFF = 000000003FFF80000000000000008000 --mh 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF800100000000FFFFFFFF --mh 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 --mh 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFF8001000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mh 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --mlg 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF --mlg 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 --mlg 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 --mlg 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 --mlg 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 --mlg 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 --mlg 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 --mlg FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 --mlg 8000000000000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 --mlgr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF --mlgr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 --mlgr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 --mlgr 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 --mlgr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 --mlgr 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 --mlgr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 --mlgr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 --mlgr 8000000000000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 --ml 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --ml 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF --ml 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 --ml 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 --ml 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 --ml 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 --ml 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000080000000 --ml 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 --ml FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF7FFFFFFEFFFFFFFF80000001 --ml 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 --mlr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF --mlr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 --mlr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 --mlr 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 --mlr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 --mlr 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 --mlr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 --mlr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 --mlr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 --ms 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --ms 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 --ms 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFF0001000000000000FFFF --ms 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000007FFF80010000000000007FFF --ms 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --ms 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000008000000100000000FFFFFFFF --ms 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 --ms 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --ms 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --msr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --msr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --msr 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --msr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --msr 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msg 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msg 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000001 --msg 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF0001000000000000FFFF --msg 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000007FFF --msg 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msg 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF0000000100000000FFFFFFFF --msg 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msg 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF80000001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 8000000000000001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000001 --msgr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF0001000000000000FFFF --msgr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000007FFF --msgr 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF0000000100000000FFFFFFFF --msgr 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msgr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF80000001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 8000000000000001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 --msgf 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00007FFF7FFF0001000000000000FFFF --msgf 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00003FFF7FFF80010000000000007FFF --msgf 0000000000008000 * 7FFFFFFFFFFFFFFF = 00003FFFFFFF80000000000000008000 --msgf 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF --msgf 0000000080000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFF800000000000000080000000 --msgf 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFF00000001000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msgfr 000000000000FFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msgfr 0000000000007FFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msgfr 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgfr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msgfr 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msgfr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msy 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 --msy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFF0001000000000000FFFF --msy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000007FFF80010000000000007FFF --msy 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --msy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000008000000100000000FFFFFFFF --msy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 --msy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --m 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --m 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 --m 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 --m 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 --m 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 --m 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 --m 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --m 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 --m FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 --m 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 --mr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 --mr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 --mr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 --mr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mh 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 --mh 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF --mh 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF --mh 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 --mh 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF --mh 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 --mlg 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 --mlg 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 --mlg 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --mlg 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 --mlg 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mlg 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 --mlg FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 --mlg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 --mlgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 --mlgr 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 --mlgr 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 --mlgr 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --mlgr 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 --mlgr 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mlgr 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 --mlgr FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 --mlgr 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 --ml 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --ml 0000000000000001 * 8000000000000000 = 00000000000000000000000080000000 --ml 000000000000FFFF * 8000000000000000 = 0000000000007FFF0000000080000000 --ml 0000000000007FFF * 8000000000000000 = 0000000000003FFF0000000080000000 --ml 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --ml 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF0000000080000000 --ml 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --ml 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF0000000080000000 --ml FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 --ml 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 --mlr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 --mlr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mlr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --ms 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --ms 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 --ms 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF --ms 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF --ms 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF --ms 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 --msr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF --msr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF --msr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF --msr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msg 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 --msg 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF --msg 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF --msg 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msg 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF --msg 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msg 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 --msgr 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF --msgr 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF --msgr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msgr 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF --msgr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msgr 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 8000000000000000 = FFFFFFFF800000000000000000000001 --msgf 000000000000FFFF * 8000000000000000 = FFFF800080000000000000000000FFFF --msgf 0000000000007FFF * 8000000000000000 = FFFFC000800000000000000000007FFF --msgf 0000000000008000 * 8000000000000000 = FFFFC000000000000000000000008000 --msgf 00000000FFFFFFFF * 8000000000000000 = 800000008000000000000000FFFFFFFF --msgf 0000000080000000 * 8000000000000000 = C0000000000000000000000080000000 --msgf 000000007FFFFFFF * 8000000000000000 = C000000080000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000080000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000800000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 --msgfr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF --msgfr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF --msgfr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msgfr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF --msgfr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msgfr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msy 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 --msy 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF --msy 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF --msy 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF --msy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --m 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --m 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF --m 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 --m 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 --m 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 --m 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 --m 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 --m 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --m FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 --m 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 --mr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mr 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF --mr 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 --mr 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 --mr 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 --mr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 --mr 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 --mr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --mr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 --mr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 --mh 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mh 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --mh 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --mh 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --mh 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --mh 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --mh 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --mh 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --mh 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --mlg 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * FFFFFFFFFFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF --mlg 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlg 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFEFFFFFFFFFFFF8001 --mlg 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFFFFFFFFFFFFFF8000 --mlg 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 --mlg 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFFFFFFFFFF80000000 --mlg 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 --mlg FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE0000000000000001 --mlg 8000000000000000 * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 --mlgr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * FFFFFFFFFFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF --mlgr 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlgr 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFEFFFFFFFFFFFF8001 --mlgr 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFFFFFFFFFFFFFF8000 --mlgr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 --mlgr 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFFFFFFFFFF80000000 --mlgr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 --mlgr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE0000000000000001 --mlgr 8000000000000000 * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 --ml 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --ml 0000000000000001 * FFFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF --ml 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 --ml 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 --ml 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 --ml 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 --ml 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 --ml 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 --ml FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 --ml 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 --mlr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * FFFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF --mlr 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 --mlr 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 --mlr 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 --mlr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 --mlr 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 --mlr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 --mlr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 --mlr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 --ms 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --ms 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --ms 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --ms 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --ms 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --ms 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --ms 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --ms 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --ms 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msr 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --msr 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --msr 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --msr 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --msr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --msr 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msg 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msg 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msg 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msg 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msg 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msg 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msg 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msg 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msg 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msgr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msgr 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msgr 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msgr 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msgr 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msgr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msgf 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msgf 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msgf 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msgf 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgf 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msgf 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msgf 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msgf 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msgfr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msgfr 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msgfr 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msgfr 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgfr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msgfr 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --msgfr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --msy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --msy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --msy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --msy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --msy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --msy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --msy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --m 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --m 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF --m 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 --m 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 --m 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 --m 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 --m 0000000080000000 * 7FFFFFFF00000000 = 00000000C00000000000000080000000 --m 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 --m FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000001 --m 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 --mr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 000000000000FFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr 000000007FFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 --mr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 --mh 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mh 0000000000000001 * 7FFFFFFF00000000 = 0000000000007FFF0000000000000001 --mh 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFE8001000000000000FFFF --mh 0000000000007FFF * 7FFFFFFF00000000 = 000000003FFF00010000000000007FFF --mh 0000000000008000 * 7FFFFFFF00000000 = 000000003FFF80000000000000008000 --mh 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFF800100000000FFFFFFFF --mh 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 --mh 000000007FFFFFFF * 7FFFFFFF00000000 = 000000007FFF8001000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mh 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --mlg 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 --mlg 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 --mlg 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 --mlg 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 --mlg 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 --mlg 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 --mlg 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 --mlg FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFEFFFFFFFF8000000100000000 --mlg 8000000000000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 --mlgr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 --mlgr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 --mlgr 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 --mlgr 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 --mlgr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 --mlgr 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 --mlgr 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 --mlgr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFEFFFFFFFF8000000100000000 --mlgr 8000000000000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 --ml 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --ml 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF --ml 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 --ml 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 --ml 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 --ml 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE0000000080000001 --ml 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF0000000080000000 --ml 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 --ml FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF7FFFFFFEFFFFFFFF80000001 --ml 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 --mlr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 000000000000FFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr 000000007FFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mlr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 --mlr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 --ms 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --ms 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 --ms 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFF0001000000000000FFFF --ms 0000000000007FFF * 7FFFFFFF00000000 = 000000007FFF80010000000000007FFF --ms 0000000000008000 * 7FFFFFFF00000000 = 00000000FFFF80000000000000008000 --ms 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000008000000100000000FFFFFFFF --ms 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 --ms 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000001000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF --ms 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000001 --msr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000000000000000000000FFFF --msr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000007FFF --msr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000000000000000000000FFFFFFFF --msr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msg 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msg 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000001 --msg 000000000000FFFF * 7FFFFFFF00000000 = 7FFF000100000000000000000000FFFF --msg 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000007FFF --msg 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000008000 --msg 00000000FFFFFFFF * 7FFFFFFF00000000 = 800000010000000000000000FFFFFFFF --msg 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000080000000 --msg 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000100000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 8000000100000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000001 --msgr 000000000000FFFF * 7FFFFFFF00000000 = 7FFF000100000000000000000000FFFF --msgr 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000007FFF --msgr 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000008000 --msgr 00000000FFFFFFFF * 7FFFFFFF00000000 = 800000010000000000000000FFFFFFFF --msgr 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000080000000 --msgr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000100000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 8000000100000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 --msgf 000000000000FFFF * 7FFFFFFF00000000 = 00007FFF7FFF0001000000000000FFFF --msgf 0000000000007FFF * 7FFFFFFF00000000 = 00003FFF7FFF80010000000000007FFF --msgf 0000000000008000 * 7FFFFFFF00000000 = 00003FFFFFFF80000000000000008000 --msgf 00000000FFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFE8000000100000000FFFFFFFF --msgf 0000000080000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000080000000 --msgf 000000007FFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF00000001000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000001 --msgfr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000000000000000000000FFFF --msgfr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000007FFF --msgfr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000008000 --msgfr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000000000000000000000FFFFFFFF --msgfr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000080000000 --msgfr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 00000000000000007FFFFFFFFFFFFFFF --msy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --msy 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 --msy 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFF0001000000000000FFFF --msy 0000000000007FFF * 7FFFFFFF00000000 = 000000007FFF80010000000000007FFF --msy 0000000000008000 * 7FFFFFFF00000000 = 00000000FFFF80000000000000008000 --msy 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000008000000100000000FFFFFFFF --msy 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 --msy 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000001000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF --m 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --m 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 --m 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 --m 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 --m 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 --m 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 --m 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --m 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 --m FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 --m 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 --mr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 --mr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 --mr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 --mr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mh 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 --mh 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF --mh 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF --mh 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 --mh 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF --mh 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 --mlg 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 --mlg 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 --mlg 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --mlg 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 --mlg 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mlg 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 --mlg FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 --mlg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 --mlgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 --mlgr 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 --mlgr 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 --mlgr 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --mlgr 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 --mlgr 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mlgr 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 --mlgr FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 --mlgr 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 --ml 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --ml 0000000000000001 * 8000000000000000 = 00000000000000000000000080000000 --ml 000000000000FFFF * 8000000000000000 = 0000000000007FFF0000000080000000 --ml 0000000000007FFF * 8000000000000000 = 0000000000003FFF0000000080000000 --ml 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 --ml 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF0000000080000000 --ml 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --ml 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF0000000080000000 --ml FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 --ml 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 --mlr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 --mlr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 --mlr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 --mlr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mlr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --ms 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --ms 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 --ms 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF --ms 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF --ms 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF --ms 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 --msr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF --msr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF --msr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF --msr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msg 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 --msg 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF --msg 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF --msg 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msg 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF --msg 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msg 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 --msgr 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF --msgr 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF --msgr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msgr 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF --msgr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msgr 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 8000000000000000 = FFFFFFFF800000000000000000000001 --msgf 000000000000FFFF * 8000000000000000 = FFFF800080000000000000000000FFFF --msgf 0000000000007FFF * 8000000000000000 = FFFFC000800000000000000000007FFF --msgf 0000000000008000 * 8000000000000000 = FFFFC000000000000000000000008000 --msgf 00000000FFFFFFFF * 8000000000000000 = 800000008000000000000000FFFFFFFF --msgf 0000000080000000 * 8000000000000000 = C0000000000000000000000080000000 --msgf 000000007FFFFFFF * 8000000000000000 = C000000080000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000080000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000800000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 --msgfr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF --msgfr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF --msgfr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msgfr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF --msgfr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msgfr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --msy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --msy 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 --msy 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF --msy 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF --msy 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF --msy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --m 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --m 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFFFFFF --m 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF0001 --m 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8001 --m 0000000000008000 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8000 --m 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000001 --m 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 --m 000000007FFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 --m FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000001 --m 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000001 --mr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 000000000000FFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr 000000007FFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 --mr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 --mh 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mh 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 --mh 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF --mh 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF --mh 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 --mh 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF --mh 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 --mh 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF --mh 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF --mlg 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * FFFFFFFF00000000 = 0000000000000000FFFFFFFF00000000 --mlg 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFEFFFF000100000000 --mlg 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFEFFFF800100000000 --mlg 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFFFFFF800000000000 --mlg 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000100000000 --mlg 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF8000000000000000 --mlg 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE8000000100000000 --mlg FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFEFFFFFFFF0000000100000000 --mlg 8000000000000000 * FFFFFFFF00000000 = 7FFFFFFF800000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF7FFFFFFF0000000100000000 --mlgr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * FFFFFFFF00000000 = 0000000000000000FFFFFFFF00000000 --mlgr 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFEFFFF000100000000 --mlgr 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFEFFFF800100000000 --mlgr 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFFFFFF800000000000 --mlgr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000100000000 --mlgr 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF8000000000000000 --mlgr 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE8000000100000000 --mlgr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFEFFFFFFFF0000000100000000 --mlgr 8000000000000000 * FFFFFFFF00000000 = 7FFFFFFF800000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF7FFFFFFF0000000100000000 --ml 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --ml 0000000000000001 * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF --ml 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFE00000000FFFF0001 --ml 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFE00000000FFFF8001 --ml 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFF00000000FFFF8000 --ml 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000000000001 --ml 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF0000000080000000 --ml 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE0000000080000001 --ml FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFEFFFFFFFF00000001 --ml 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 --mlr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 000000000000FFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr 000000007FFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 --mlr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 --mlr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 --ms 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --ms 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 --ms 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF --ms 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF --ms 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 --ms 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF --ms 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 --ms 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF --ms 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000001 --msr 000000000000FFFF * FFFFFFFF00000000 = 0000000000000000000000000000FFFF --msr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000007FFF --msr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF --msr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * FFFFFFFF00000000 = 0000000000000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msg 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msg 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000001 --msg 000000000000FFFF * FFFFFFFF00000000 = FFFF000100000000000000000000FFFF --msg 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000007FFF --msg 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000008000 --msg 00000000FFFFFFFF * FFFFFFFF00000000 = 000000010000000000000000FFFFFFFF --msg 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000080000000 --msg 000000007FFFFFFF * FFFFFFFF00000000 = 8000000100000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000100000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000001 --msgr 000000000000FFFF * FFFFFFFF00000000 = FFFF000100000000000000000000FFFF --msgr 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000007FFF --msgr 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000008000 --msgr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000010000000000000000FFFFFFFF --msgr 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000080000000 --msgr 000000007FFFFFFF * FFFFFFFF00000000 = 8000000100000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000100000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF0000000000000001 --msgf 000000000000FFFF * FFFFFFFF00000000 = FFFFFFFFFFFF0001000000000000FFFF --msgf 0000000000007FFF * FFFFFFFF00000000 = FFFFFFFFFFFF80010000000000007FFF --msgf 0000000000008000 * FFFFFFFF00000000 = FFFFFFFFFFFF80000000000000008000 --msgf 00000000FFFFFFFF * FFFFFFFF00000000 = FFFFFFFF0000000100000000FFFFFFFF --msgf 0000000080000000 * FFFFFFFF00000000 = FFFFFFFF800000000000000080000000 --msgf 000000007FFFFFFF * FFFFFFFF00000000 = FFFFFFFF80000001000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000000000001FFFFFFFFFFFFFFFF --msgf 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 80000000000000017FFFFFFFFFFFFFFF --msgfr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000001 --msgfr 000000000000FFFF * FFFFFFFF00000000 = 0000000000000000000000000000FFFF --msgfr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000007FFF --msgfr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000008000 --msgfr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF --msgfr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 --msgfr 000000007FFFFFFF * FFFFFFFF00000000 = 0000000000000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000000000000007FFFFFFFFFFFFFFF --msy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --msy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 --msy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF --msy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF --msy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 --msy 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF --msy 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 --msy 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF --m 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --m 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 --m 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --m 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 --m 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --m 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --m 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mr 000000000000FFFF * 000000007FFFFFFF = 0000000000007FFF000000007FFF0001 --mr 0000000000007FFF * 000000007FFFFFFF = 0000000000003FFF000000007FFF8001 --mr 0000000000008000 * 000000007FFFFFFF = 0000000000003FFF00000000FFFF8000 --mr 00000000FFFFFFFF * 000000007FFFFFFF = 00000000FFFFFFFF0000000080000001 --mr 0000000080000000 * 000000007FFFFFFF = 00000000C00000000000000080000000 --mr 000000007FFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF0000000000000001 --mr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 --mr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 --mh 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mh 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 --mh 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF --mh 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mlg 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 --mlg 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 --mlg 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 --mlg 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 --mlg 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 --mlg 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 --mlg FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 --mlg 8000000000000000 * 000000007FFFFFFF = 000000003FFFFFFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 --mlgr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mlgr 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 --mlgr 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 --mlgr 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 --mlgr 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 --mlgr 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 --mlgr 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 --mlgr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 --mlgr 8000000000000000 * 000000007FFFFFFF = 000000003FFFFFFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 --ml 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mlr 000000000000FFFF * 000000007FFFFFFF = 0000000000007FFF000000007FFF0001 --mlr 0000000000007FFF * 000000007FFFFFFF = 0000000000003FFF000000007FFF8001 --mlr 0000000000008000 * 000000007FFFFFFF = 0000000000003FFF00000000FFFF8000 --mlr 00000000FFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFE0000000080000001 --mlr 0000000080000000 * 000000007FFFFFFF = 000000003FFFFFFF0000000080000000 --mlr 000000007FFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF0000000000000001 --mlr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF7FFFFFFEFFFFFFFF80000001 --mlr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 --ms 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --ms 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 --ms 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF --ms 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --msr 000000000000FFFF * 000000007FFFFFFF = 000000007FFF0001000000000000FFFF --msr 0000000000007FFF * 000000007FFFFFFF = 000000007FFF80010000000000007FFF --msr 0000000000008000 * 000000007FFFFFFF = 00000000FFFF80000000000000008000 --msr 00000000FFFFFFFF * 000000007FFFFFFF = 000000008000000100000000FFFFFFFF --msr 0000000080000000 * 000000007FFFFFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msg 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msg 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --msg 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF --msg 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF --msg 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 --msg 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF --msg 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 --msg 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --msgr 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF --msgr 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF --msgr 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 --msgr 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF --msgr 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 --msgr 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 --msgf 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF --msgf 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 000000007FFFFFFF = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --msgfr 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF --msgfr 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF --msgfr 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 --msgfr 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF --msgfr 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 --msgfr 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --msy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --msy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 --msy 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF --msy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --m 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 --m 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 --m 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 --m 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --m 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 --m 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mr 0000000000000001 * 0000000080000000 = 00000000FFFFFFFF0000000080000000 --mr 000000000000FFFF * 0000000080000000 = 00000000FFFF80000000000080000000 --mr 0000000000007FFF * 0000000080000000 = 00000000FFFFC0000000000080000000 --mr 0000000000008000 * 0000000080000000 = 00000000FFFFC0000000000000000000 --mr 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000080000000 --mr 0000000080000000 * 0000000080000000 = 00000000400000000000000000000000 --mr 000000007FFFFFFF * 0000000080000000 = 00000000C00000000000000080000000 --mr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF80000000 --mr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF80000000 --mh 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mh 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 --mh 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF --mh 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 --mlg 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 --mlg 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 --mlg 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 --mlg 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 --mlg 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 --mlg 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 --mlg FFFFFFFFFFFFFFFF * 0000000080000000 = 000000007FFFFFFFFFFFFFFF80000000 --mlg 8000000000000000 * 0000000080000000 = 00000000400000000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 --mlgr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 --mlgr 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 --mlgr 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 --mlgr 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 --mlgr 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 --mlgr 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 --mlgr 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 --mlgr FFFFFFFFFFFFFFFF * 0000000080000000 = 000000007FFFFFFFFFFFFFFF80000000 --mlgr 8000000000000000 * 0000000080000000 = 00000000400000000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 --ml 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --ml 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 --ml 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 --ml 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 --ml 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --ml 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 --mlr 000000000000FFFF * 0000000080000000 = 0000000000007FFF0000000080000000 --mlr 0000000000007FFF * 0000000080000000 = 0000000000003FFF0000000080000000 --mlr 0000000000008000 * 0000000080000000 = 00000000000040000000000000000000 --mlr 00000000FFFFFFFF * 0000000080000000 = 000000007FFFFFFF0000000080000000 --mlr 0000000080000000 * 0000000080000000 = 00000000400000000000000000000000 --mlr 000000007FFFFFFF * 0000000080000000 = 000000003FFFFFFF0000000080000000 --mlr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 --mlr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 --ms 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --ms 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 --ms 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF --ms 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msr 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 --msr 000000000000FFFF * 0000000080000000 = 0000000080000000000000000000FFFF --msr 0000000000007FFF * 0000000080000000 = 00000000800000000000000000007FFF --msr 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --msr 00000000FFFFFFFF * 0000000080000000 = 000000008000000000000000FFFFFFFF --msr 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 0000000080000000 = 0000000080000000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --msg 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msg 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 --msg 000000000000FFFF * 0000000080000000 = 00007FFF80000000000000000000FFFF --msg 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000007FFF --msg 0000000000008000 * 0000000080000000 = 00004000000000000000000000008000 --msg 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF8000000000000000FFFFFFFF --msg 0000000080000000 * 0000000080000000 = 40000000000000000000000080000000 --msg 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF80000000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 --msgr 000000000000FFFF * 0000000080000000 = 00007FFF80000000000000000000FFFF --msgr 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000007FFF --msgr 0000000000008000 * 0000000080000000 = 00004000000000000000000000008000 --msgr 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF8000000000000000FFFFFFFF --msgr 0000000080000000 * 0000000080000000 = 40000000000000000000000080000000 --msgr 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF80000000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 --msgf 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF --msgf 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 0000000080000000 = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 0000000080000000 = FFFFFFFF800000000000000000000001 --msgfr 000000000000FFFF * 0000000080000000 = FFFF800080000000000000000000FFFF --msgfr 0000000000007FFF * 0000000080000000 = FFFFC000800000000000000000007FFF --msgfr 0000000000008000 * 0000000080000000 = FFFFC000000000000000000000008000 --msgfr 00000000FFFFFFFF * 0000000080000000 = 800000008000000000000000FFFFFFFF --msgfr 0000000080000000 * 0000000080000000 = C0000000000000000000000080000000 --msgfr 000000007FFFFFFF * 0000000080000000 = C000000080000000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 0000000080000000 = 0000000080000000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 0000000080000000 = 00000000800000007FFFFFFFFFFFFFFF --msy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --msy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 --msy 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF --msy 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --m 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF --mr 000000000000FFFF * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 --mr 0000000000007FFF * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 --mr 0000000000008000 * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 --mr 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000001 --mr 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --mr 000000007FFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFF0000000080000001 --mr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 --mr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 --mh 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mh 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 --mh 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF --mh 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --mlg 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 --mlg 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 --mlg 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 --mlg 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 --mlg 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 --mlg 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 --mlg FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 --mlg 8000000000000000 * 00000000FFFFFFFF = 000000007FFFFFFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 --mlgr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --mlgr 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 --mlgr 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 --mlgr 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 --mlgr 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 --mlgr 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 --mlgr 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 --mlgr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 --mlgr 8000000000000000 * 00000000FFFFFFFF = 000000007FFFFFFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 --ml 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --mlr 000000000000FFFF * 00000000FFFFFFFF = 000000000000FFFE00000000FFFF0001 --mlr 0000000000007FFF * 00000000FFFFFFFF = 0000000000007FFE00000000FFFF8001 --mlr 0000000000008000 * 00000000FFFFFFFF = 0000000000007FFF00000000FFFF8000 --mlr 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFE0000000000000001 --mlr 0000000080000000 * 00000000FFFFFFFF = 000000007FFFFFFF0000000080000000 --mlr 000000007FFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFE0000000080000001 --mlr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 --mlr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 --ms 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --ms 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 --ms 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF --ms 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 --msr 000000000000FFFF * 00000000FFFFFFFF = 00000000FFFF0001000000000000FFFF --msr 0000000000007FFF * 00000000FFFFFFFF = 00000000FFFF80010000000000007FFF --msr 0000000000008000 * 00000000FFFFFFFF = 00000000FFFF80000000000000008000 --msr 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000100000000FFFFFFFF --msr 0000000080000000 * 00000000FFFFFFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 00000000FFFFFFFF = 0000000080000001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msg 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msg 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 --msg 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF0001000000000000FFFF --msg 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000007FFF --msg 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000008000 --msg 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE0000000100000000FFFFFFFF --msg 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000080000000 --msg 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE80000001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 --msgr 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF0001000000000000FFFF --msgr 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000007FFF --msgr 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000008000 --msgr 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE0000000100000000FFFFFFFF --msgr 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000080000000 --msgr 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE80000001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 --msgf 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF --msgf 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 00000000FFFFFFFF = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 00000000FFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --msgfr 000000000000FFFF * 00000000FFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --msgfr 0000000000007FFF * 00000000FFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --msgfr 0000000000008000 * 00000000FFFFFFFF = FFFFFFFFFFFF80000000000000008000 --msgfr 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --msgfr 0000000080000000 * 00000000FFFFFFFF = FFFFFFFF800000000000000080000000 --msgfr 000000007FFFFFFF * 00000000FFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --msy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --msy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 --msy 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF --msy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --m 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --m 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFFFFFF00000000FFFF0001 --mr 0000000080000000 * 000000000000FFFF = 00000000FFFF80000000000080000000 --mr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 --mr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 --mr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF0001 --mh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --mh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --mh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 --mlg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 --mlg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 --mlg FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlg 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 --mlgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlgr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlgr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlgr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlgr 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 --mlgr 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 --mlgr 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 --mlgr FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlgr 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 --ml 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --ml 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlr 00000000FFFFFFFF * 000000000000FFFF = 000000000000FFFE00000000FFFF0001 --mlr 0000000080000000 * 000000000000FFFF = 0000000000007FFF0000000080000000 --mlr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 --mlr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF0000FFFEFFFFFFFFFFFF0001 --mlr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF0000FFFE7FFFFFFFFFFF0001 --ms 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --ms 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --ms 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --ms 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF000100000000FFFFFFFF --msr 0000000080000000 * 000000000000FFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 000000000000FFFF = 000000007FFF0001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msg 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msg 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msg 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msg 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msg 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msg 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msg 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msgr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msgr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msgr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msgr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msgr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msgr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --msgf 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --msgf 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msgfr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msgfr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msgfr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msgfr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msgfr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msgfr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --msy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --msy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --m 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 --m 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 --m 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 --m 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --m 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 --m 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF --mr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 --mr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 --mr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 --mr 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFFFFFF00000000FFFF8001 --mr 0000000080000000 * 0000000000007FFF = 00000000FFFFC0000000000080000000 --mr 000000007FFFFFFF * 0000000000007FFF = 0000000000003FFF000000007FFF8001 --mr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 --mr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF8001 --mh 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mh 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 --mh 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF --mh 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF --mlg 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 --mlg 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 --mlg 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 --mlg 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 --mlg 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 --mlg 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 --mlg FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000007FFEFFFFFFFFFFFF8001 --mlg 8000000000000000 * 0000000000007FFF = 0000000000003FFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 --mlgr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF --mlgr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 --mlgr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 --mlgr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 --mlgr 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 --mlgr 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 --mlgr 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 --mlgr FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000007FFEFFFFFFFFFFFF8001 --mlgr 8000000000000000 * 0000000000007FFF = 0000000000003FFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 --ml 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --ml 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 --ml 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 --ml 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 --ml 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --ml 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF --mlr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 --mlr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 --mlr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 --mlr 00000000FFFFFFFF * 0000000000007FFF = 0000000000007FFE00000000FFFF8001 --mlr 0000000080000000 * 0000000000007FFF = 0000000000003FFF0000000080000000 --mlr 000000007FFFFFFF * 0000000000007FFF = 0000000000003FFF000000007FFF8001 --mlr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00007FFEFFFFFFFFFFFF8001 --mlr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF00007FFE7FFFFFFFFFFF8001 --ms 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --ms 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 --ms 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF --ms 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --msr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --msr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --msr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --msr 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF --msr 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --msg 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msg 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --msg 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --msg 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --msg 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --msg 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --msg 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --msg 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --msgr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --msgr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --msgr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --msgr 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --msgr 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --msgr 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 --msgf 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF --msgf 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 0000000000007FFF = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 0000000000007FFF = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --msgfr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --msgfr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --msgfr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --msgfr 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --msgfr 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --msgfr 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --msy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --msy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 --msy 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF --msy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --m 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 --m 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 --m 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 --m 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --m 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 --m 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 --mr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 --mr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 --mr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 --mr 00000000FFFFFFFF * 0000000000008000 = 00000000FFFFFFFF00000000FFFF8000 --mr 0000000080000000 * 0000000000008000 = 00000000FFFFC0000000000000000000 --mr 000000007FFFFFFF * 0000000000008000 = 0000000000003FFF00000000FFFF8000 --mr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 --mr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF8000 --mh 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mh 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 --mh 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF --mh 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mlg 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 --mlg 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 --mlg 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 --mlg 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 --mlg 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 --mlg 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 --mlg 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 --mlg FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000007FFFFFFFFFFFFFFF8000 --mlg 8000000000000000 * 0000000000008000 = 00000000000040000000000000000000 --mlg 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 --mlgr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mlgr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 --mlgr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 --mlgr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 --mlgr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 --mlgr 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 --mlgr 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 --mlgr 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 --mlgr FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000007FFFFFFFFFFFFFFF8000 --mlgr 8000000000000000 * 0000000000008000 = 00000000000040000000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 --ml 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --ml 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 --ml 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 --ml 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 --ml 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --ml 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mlr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 --mlr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 --mlr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 --mlr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 --mlr 00000000FFFFFFFF * 0000000000008000 = 0000000000007FFF00000000FFFF8000 --mlr 0000000080000000 * 0000000000008000 = 00000000000040000000000000000000 --mlr 000000007FFFFFFF * 0000000000008000 = 0000000000003FFF00000000FFFF8000 --mlr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00007FFFFFFFFFFFFFFF8000 --mlr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF00007FFF7FFFFFFFFFFF8000 --ms 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --ms 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 --ms 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF --ms 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 --msr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF --msr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF --msr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 --msr 00000000FFFFFFFF * 0000000000008000 = 00000000FFFF800000000000FFFFFFFF --msr 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --msr 000000007FFFFFFF * 0000000000008000 = 00000000FFFF8000000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF --msr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFFFFFF80007FFFFFFFFFFFFFFF --msg 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msg 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 --msg 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF --msg 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF --msg 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 --msg 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF --msg 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 --msg 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF --msg 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF --msgr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msgr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 --msgr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF --msgr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF --msgr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 --msgr 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF --msgr 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 --msgr 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF --msgf 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msgf 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 --msgf 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF --msgf 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 0000000000008000 = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msgfr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 --msgfr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF --msgfr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF --msgfr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 --msgfr 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF --msgfr 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 --msgfr 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF --msy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --msy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 --msy 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF --msy 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --m 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --m 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --m 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --m 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --m 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --m FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --m 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --m 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --mr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFFFFFF00000000FFFF0001 --mr 0000000080000000 * 000000000000FFFF = 00000000FFFF80000000000080000000 --mr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 --mr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 --mr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF0001 --mh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --mh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --mh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --mh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --mh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --mh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --mh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --mh FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mh 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mlg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 --mlg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 --mlg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 --mlg FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlg 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 --mlg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 --mlgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlgr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlgr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlgr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlgr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlgr 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 --mlgr 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 --mlgr 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 --mlgr FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 --mlgr 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 --mlgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 --ml 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --ml 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --ml 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --ml FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --ml 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --ml 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --mlr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mlr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF --mlr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 --mlr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 --mlr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 --mlr 00000000FFFFFFFF * 000000000000FFFF = 000000000000FFFE00000000FFFF0001 --mlr 0000000080000000 * 000000000000FFFF = 0000000000007FFF0000000080000000 --mlr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 --mlr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF0000FFFEFFFFFFFFFFFF0001 --mlr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mlr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF0000FFFE7FFFFFFFFFFF0001 --ms 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --ms 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --ms 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --ms 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --ms 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --ms 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --ms 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --ms 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --ms FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --ms 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --ms 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --msr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF000100000000FFFFFFFF --msr 0000000080000000 * 000000000000FFFF = 00000000800000000000000080000000 --msr 000000007FFFFFFF * 000000000000FFFF = 000000007FFF0001000000007FFFFFFF --msr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msg 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msg 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msg 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msg 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msg 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msg 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msg 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msg 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msgr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msgr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msgr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msgr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msgr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msgr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msgr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msgr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msgf 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgf 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --msgf 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --msgf 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --msgf 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --msgf 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --msgf 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --msgf 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --msgf FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF --msgf 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 --msgf 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF --msgfr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msgfr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 --msgfr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF --msgfr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF --msgfr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 --msgfr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF --msgfr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 --msgfr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF --msgfr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF --msgfr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msgfr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF --msy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --msy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --msy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --msy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --msy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --msy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --msy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --msy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --msy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --msy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --msy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mhi 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mhi 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --mhi 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --mhi 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --mhi 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --mhi 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --mhi 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --mhi 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --mhi FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhi 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mhi 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mhi 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mhi 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --mhi 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --mhi 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --mhi 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --mhi 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --mhi 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --mhi 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --mhi FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --mhi 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mhi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --mhi 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 --mhi 0000000000000001 * FFFFFFFFFFFF8000 = 00000000FFFF80000000000000000001 --mhi 000000000000FFFF * FFFFFFFFFFFF8000 = 0000000080008000000000000000FFFF --mhi 0000000000007FFF * FFFFFFFFFFFF8000 = 00000000C00080000000000000007FFF --mhi 0000000000008000 * FFFFFFFFFFFF8000 = 00000000C00000000000000000008000 --mhi 00000000FFFFFFFF * FFFFFFFFFFFF8000 = 000000000000800000000000FFFFFFFF --mhi 0000000080000000 * FFFFFFFFFFFF8000 = 00000000000000000000000080000000 --mhi 000000007FFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000000000007FFFFFFF --mhi FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --mhi 8000000000000000 * FFFFFFFFFFFF8000 = 80000000000000008000000000000000 --mhi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --mhi 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mhi 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --mhi 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --mhi 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --mhi 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --mhi 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF --mhi 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 --mhi 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF --mhi FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mhi 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mhi 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --mghi 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mghi 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --mghi 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --mghi 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --mghi 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --mghi 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --mghi 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --mghi 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --mghi FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --mghi 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --mghi 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --mghi 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mghi 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --mghi 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --mghi 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --mghi 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --mghi 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --mghi 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --mghi 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --mghi FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --mghi 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mghi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --mghi 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 --mghi 0000000000000001 * FFFFFFFFFFFF8000 = FFFFFFFFFFFF80000000000000000001 --mghi 000000000000FFFF * FFFFFFFFFFFF8000 = FFFFFFFF80008000000000000000FFFF --mghi 0000000000007FFF * FFFFFFFFFFFF8000 = FFFFFFFFC00080000000000000007FFF --mghi 0000000000008000 * FFFFFFFFFFFF8000 = FFFFFFFFC00000000000000000008000 --mghi 00000000FFFFFFFF * FFFFFFFFFFFF8000 = FFFF80000000800000000000FFFFFFFF --mghi 0000000080000000 * FFFFFFFFFFFF8000 = FFFFC000000000000000000080000000 --mghi 000000007FFFFFFF * FFFFFFFFFFFF8000 = FFFFC00000008000000000007FFFFFFF --mghi FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000FFFFFFFFFFFFFFFF --mghi 8000000000000000 * FFFFFFFFFFFF8000 = 00000000000000008000000000000000 --mghi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 00000000000080007FFFFFFFFFFFFFFF --mghi 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mghi 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --mghi 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --mghi 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --mghi 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --mghi 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --mghi 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --mghi 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --mghi FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mghi 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mghi 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF -+m 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mh 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 8000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mlr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+ms 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msg 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msg 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+m 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+m 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 (cc=0) -+m 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 (cc=0) -+m 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+m 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000C00000000000000080000000 (cc=0) -+m 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 (cc=0) -+m FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+m 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 (cc=0) -+mr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+mr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mr 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mr 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+mr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mh 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000007FFF0000000000000001 (cc=0) -+mh 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFE8001000000000000FFFF (cc=0) -+mh 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000003FFF00010000000000007FFF (cc=0) -+mh 0000000000008000 * 7FFFFFFFFFFFFFFF = 000000003FFF80000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mlg 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mlg 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mlg 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 (cc=0) -+mlg 8000000000000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+mlgr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mlgr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mlgr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mlgr 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mlgr 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 (cc=0) -+mlgr 8000000000000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+ml 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+ml 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+ml 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 (cc=0) -+ml 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 (cc=0) -+ml 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+ml 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000080000000 (cc=0) -+ml 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 (cc=0) -+ml FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF7FFFFFFEFFFFFFFF80000001 (cc=0) -+ml 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 (cc=0) -+mlr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mlr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+mlr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 (cc=0) -+mlr 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 (cc=0) -+mlr 0000000080000000 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 (cc=0) -+mlr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 (cc=0) -+ms 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+ms 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFF0001000000000000FFFF (cc=0) -+ms 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000007FFF80010000000000007FFF (cc=0) -+ms 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000008000000100000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+msr 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000007FFF (cc=0) -+msg 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF0000000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF80000001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 8000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80010000000000007FFF (cc=0) -+msgr 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF80000001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 8000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msgf 000000000000FFFF * 7FFFFFFFFFFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 7FFFFFFFFFFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=0) -+msgf 0000000000008000 * 7FFFFFFFFFFFFFFF = 00003FFFFFFF80000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 7FFFFFFFFFFFFFFF = 3FFFFFFF800000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 7FFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 7FFFFFFFFFFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFF0001000000000000FFFF (cc=0) -+msy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000007FFF80010000000000007FFF (cc=0) -+msy 0000000000008000 * 7FFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 000000008000000100000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 0000000000000001000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 (cc=0) -+m 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 (cc=0) -+m 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 (cc=0) -+m 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+m 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 (cc=0) -+m 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 (cc=0) -+mr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 (cc=0) -+mh 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF (cc=0) -+mh 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mlg 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 (cc=0) -+mlg 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 (cc=0) -+mlg 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+mlg 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlg 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mlg 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mlgr 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 (cc=0) -+mlgr 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 (cc=0) -+mlgr 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+mlgr 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlgr 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+ml 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+ml 000000000000FFFF * 8000000000000000 = 0000000000007FFF0000000080000000 (cc=0) -+ml 0000000000007FFF * 8000000000000000 = 0000000000003FFF0000000080000000 (cc=0) -+ml 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF0000000080000000 (cc=0) -+ml 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF0000000080000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 (cc=0) -+ml 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 (cc=0) -+mlr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mlr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+ms 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=0) -+ms 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=0) -+ms 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 (cc=0) -+msr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=0) -+msg 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=0) -+msg 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=0) -+msgr 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=0) -+msgr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 8000000000000000 = FFFFFFFF800000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 8000000000000000 = FFFF800080000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 8000000000000000 = FFFFC000800000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 8000000000000000 = FFFFC000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 8000000000000000 = 800000008000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 8000000000000000 = C0000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 8000000000000000 = C000000080000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000080000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000800000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=0) -+msy 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=0) -+msy 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+m 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+m 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+m 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+m 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+m 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 (cc=0) -+m 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+m FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+m 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+mr 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mr 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mr 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mr 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+mr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mh 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+mh 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+mh 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+mh 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+mh 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * FFFFFFFFFFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mlg 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlg 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFEFFFFFFFFFFFF8001 (cc=0) -+mlg 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFFFFFFFFFFFFFF8000 (cc=0) -+mlg 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 (cc=0) -+mlg 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFFFFFFFFFF80000000 (cc=0) -+mlg 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE0000000000000001 (cc=0) -+mlg 8000000000000000 * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 (cc=0) -+mlgr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * FFFFFFFFFFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mlgr 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlgr 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFEFFFFFFFFFFFF8001 (cc=0) -+mlgr 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFFFFFFFFFFFFFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 (cc=0) -+mlgr 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFFFFFFFFFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE0000000000000001 (cc=0) -+mlgr 8000000000000000 * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE8000000000000001 (cc=0) -+ml 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * FFFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+ml 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+ml 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 (cc=0) -+ml 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 (cc=0) -+ml 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 (cc=0) -+ml 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 (cc=0) -+ml 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+ml FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 (cc=0) -+ml 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 (cc=0) -+mlr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * FFFFFFFFFFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mlr 000000000000FFFF * FFFFFFFFFFFFFFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+mlr 0000000000007FFF * FFFFFFFFFFFFFFFF = 0000000000007FFE00000000FFFF8001 (cc=0) -+mlr 0000000000008000 * FFFFFFFFFFFFFFFF = 0000000000007FFF00000000FFFF8000 (cc=0) -+mlr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFE0000000000000001 (cc=0) -+mlr 0000000080000000 * FFFFFFFFFFFFFFFF = 000000007FFFFFFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 (cc=0) -+mlr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 (cc=0) -+ms 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+ms 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+ms 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+ms 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+ms 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+msr 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msg 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgr 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgf 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgf 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgf 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+msy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+msy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+msy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+m 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 (cc=0) -+m 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 (cc=0) -+m 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 (cc=0) -+m 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 (cc=0) -+m 0000000080000000 * 7FFFFFFF00000000 = 00000000C00000000000000080000000 (cc=0) -+m 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 (cc=0) -+m FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+m 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 (cc=0) -+mr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000000000FFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mh 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 7FFFFFFF00000000 = 0000000000007FFF0000000000000001 (cc=0) -+mh 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFE8001000000000000FFFF (cc=0) -+mh 0000000000007FFF * 7FFFFFFF00000000 = 000000003FFF00010000000000007FFF (cc=0) -+mh 0000000000008000 * 7FFFFFFF00000000 = 000000003FFF80000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFF800100000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 7FFFFFFF00000000 = 000000007FFF8001000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 (cc=0) -+mlg 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 (cc=0) -+mlg 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 (cc=0) -+mlg 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 (cc=0) -+mlg 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mlg 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlg 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFEFFFFFFFF8000000100000000 (cc=0) -+mlg 8000000000000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 (cc=0) -+mlgr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000007FFFFFFF00000000 (cc=0) -+mlgr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF7FFF000100000000 (cc=0) -+mlgr 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF7FFF800100000000 (cc=0) -+mlgr 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFFFFFF800000000000 (cc=0) -+mlgr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mlgr 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000100000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFEFFFFFFFF8000000100000000 (cc=0) -+mlgr 8000000000000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF7FFFFFFF8000000100000000 (cc=0) -+ml 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+ml 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 (cc=0) -+ml 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 (cc=0) -+ml 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 (cc=0) -+ml 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000007FFFFFFE0000000080000001 (cc=0) -+ml 0000000080000000 * 7FFFFFFF00000000 = 000000003FFFFFFF0000000080000000 (cc=0) -+ml 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 (cc=0) -+ml FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF7FFFFFFEFFFFFFFF80000001 (cc=0) -+ml 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 (cc=0) -+mlr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000000000FFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mlr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+ms 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 (cc=0) -+ms 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFF0001000000000000FFFF (cc=0) -+ms 0000000000007FFF * 7FFFFFFF00000000 = 000000007FFF80010000000000007FFF (cc=0) -+ms 0000000000008000 * 7FFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000008000000100000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000001000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+msr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000007FFF (cc=0) -+msr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000001 (cc=0) -+msg 000000000000FFFF * 7FFFFFFF00000000 = 7FFF000100000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000007FFF (cc=0) -+msg 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 7FFFFFFF00000000 = 800000010000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000100000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 8000000100000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 7FFFFFFF00000000 = 7FFFFFFF000000000000000000000001 (cc=0) -+msgr 000000000000FFFF * 7FFFFFFF00000000 = 7FFF000100000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 7FFFFFFF00000000 = 7FFF8001000000000000000000007FFF (cc=0) -+msgr 0000000000008000 * 7FFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 7FFFFFFF00000000 = 800000010000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 7FFFFFFF00000000 = 80000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000100000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 8000000100000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 80000001000000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 (cc=0) -+msgf 000000000000FFFF * 7FFFFFFF00000000 = 00007FFF7FFF0001000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 7FFFFFFF00000000 = 00003FFF7FFF80010000000000007FFF (cc=0) -+msgf 0000000000008000 * 7FFFFFFF00000000 = 00003FFFFFFF80000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 7FFFFFFF00000000 = 3FFFFFFF800000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 7FFFFFFF00000000 = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 7FFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 7FFFFFFF00000000 = 0000000000000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 7FFFFFFF00000000 = 00000000000000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 7FFFFFFF00000000 = 00000000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 7FFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 7FFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 7FFFFFFF00000000 = 000000007FFFFFFF0000000000000001 (cc=0) -+msy 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFF0001000000000000FFFF (cc=0) -+msy 0000000000007FFF * 7FFFFFFF00000000 = 000000007FFF80010000000000007FFF (cc=0) -+msy 0000000000008000 * 7FFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 7FFFFFFF00000000 = 000000008000000100000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 7FFFFFFF00000000 = 0000000000000001000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 (cc=0) -+m 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 (cc=0) -+m 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 (cc=0) -+m 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+m 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 (cc=0) -+m 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 (cc=0) -+mr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mh 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 (cc=0) -+mh 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF (cc=0) -+mh 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mlg 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 (cc=0) -+mlg 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 (cc=0) -+mlg 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+mlg 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlg 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mlg 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlg 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+mlgr 000000000000FFFF * 8000000000000000 = 0000000000007FFF8000000000000000 (cc=0) -+mlgr 0000000000007FFF * 8000000000000000 = 0000000000003FFF8000000000000000 (cc=0) -+mlgr 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+mlgr 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlgr 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF8000000000000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+mlgr 8000000000000000 * 8000000000000000 = 40000000000000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 3FFFFFFFFFFFFFFF8000000000000000 (cc=0) -+ml 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+ml 000000000000FFFF * 8000000000000000 = 0000000000007FFF0000000080000000 (cc=0) -+ml 0000000000007FFF * 8000000000000000 = 0000000000003FFF0000000080000000 (cc=0) -+ml 0000000000008000 * 8000000000000000 = 00000000000040000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 8000000000000000 = 000000007FFFFFFF0000000080000000 (cc=0) -+ml 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 8000000000000000 = 000000003FFFFFFF0000000080000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 (cc=0) -+ml 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 (cc=0) -+mlr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000000000FFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000008000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000080000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mlr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+ms 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=0) -+ms 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=0) -+ms 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 (cc=0) -+msr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=0) -+msg 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=0) -+msg 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 8000000000000000 = 80000000000000000000000000000001 (cc=0) -+msgr 000000000000FFFF * 8000000000000000 = 8000000000000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 8000000000000000 = 80000000000000000000000000007FFF (cc=0) -+msgr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 8000000000000000 = 800000000000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 8000000000000000 = 8000000000000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 8000000000000000 = 8000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 8000000000000000 = 80000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 8000000000000000 = FFFFFFFF800000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 8000000000000000 = FFFF800080000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 8000000000000000 = FFFFC000800000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 8000000000000000 = FFFFC000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 8000000000000000 = 800000008000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 8000000000000000 = C0000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 8000000000000000 = C000000080000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000080000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000800000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 8000000000000000 = 00000000000000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 8000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 8000000000000000 = 00000000000000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 8000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 8000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 8000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 8000000000000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 8000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 8000000000000000 = 00000000800000000000000000000001 (cc=0) -+msy 000000000000FFFF * 8000000000000000 = 0000000080000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 8000000000000000 = 00000000800000000000000000007FFF (cc=0) -+msy 0000000000008000 * 8000000000000000 = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 8000000000000000 = 000000008000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 8000000000000000 = 0000000080000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+m 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+m 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+m 0000000000008000 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+m 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+m 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+m 000000007FFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 (cc=0) -+m FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+m 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000000000FFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mh 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 (cc=0) -+mh 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF (cc=0) -+mh 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF (cc=0) -+mh 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF (cc=0) -+mh 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * FFFFFFFF00000000 = 0000000000000000FFFFFFFF00000000 (cc=0) -+mlg 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFEFFFF000100000000 (cc=0) -+mlg 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFEFFFF800100000000 (cc=0) -+mlg 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFFFFFF800000000000 (cc=0) -+mlg 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000100000000 (cc=0) -+mlg 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlg 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFEFFFFFFFF0000000100000000 (cc=0) -+mlg 8000000000000000 * FFFFFFFF00000000 = 7FFFFFFF800000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF7FFFFFFF0000000100000000 (cc=0) -+mlgr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * FFFFFFFF00000000 = 0000000000000000FFFFFFFF00000000 (cc=0) -+mlgr 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFEFFFF000100000000 (cc=0) -+mlgr 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFEFFFF800100000000 (cc=0) -+mlgr 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFFFFFF800000000000 (cc=0) -+mlgr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000100000000 (cc=0) -+mlgr 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF8000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE8000000100000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFEFFFFFFFF0000000100000000 (cc=0) -+mlgr 8000000000000000 * FFFFFFFF00000000 = 7FFFFFFF800000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF7FFFFFFF0000000100000000 (cc=0) -+ml 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF (cc=0) -+ml 000000000000FFFF * FFFFFFFF00000000 = 000000000000FFFE00000000FFFF0001 (cc=0) -+ml 0000000000007FFF * FFFFFFFF00000000 = 0000000000007FFE00000000FFFF8001 (cc=0) -+ml 0000000000008000 * FFFFFFFF00000000 = 0000000000007FFF00000000FFFF8000 (cc=0) -+ml 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFE0000000000000001 (cc=0) -+ml 0000000080000000 * FFFFFFFF00000000 = 000000007FFFFFFF0000000080000000 (cc=0) -+ml 000000007FFFFFFF * FFFFFFFF00000000 = 000000007FFFFFFE0000000080000001 (cc=0) -+ml FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFFFFFFFFFEFFFFFFFF00000001 (cc=0) -+ml 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 (cc=0) -+mlr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000000000FFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mlr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+ms 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 (cc=0) -+ms 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF (cc=0) -+ms 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF (cc=0) -+ms 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF (cc=0) -+ms 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+msr 000000000000FFFF * FFFFFFFF00000000 = 0000000000000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000007FFF (cc=0) -+msr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * FFFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000001 (cc=0) -+msg 000000000000FFFF * FFFFFFFF00000000 = FFFF000100000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000007FFF (cc=0) -+msg 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * FFFFFFFF00000000 = 000000010000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * FFFFFFFF00000000 = 8000000100000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000100000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * FFFFFFFF00000000 = FFFFFFFF000000000000000000000001 (cc=0) -+msgr 000000000000FFFF * FFFFFFFF00000000 = FFFF000100000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * FFFFFFFF00000000 = FFFF8001000000000000000000007FFF (cc=0) -+msgr 0000000000008000 * FFFFFFFF00000000 = FFFF8000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000010000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * FFFFFFFF00000000 = 80000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * FFFFFFFF00000000 = 8000000100000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000100000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000001000000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * FFFFFFFF00000000 = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgf 000000000000FFFF * FFFFFFFF00000000 = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgf 0000000000007FFF * FFFFFFFF00000000 = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgf 0000000000008000 * FFFFFFFF00000000 = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * FFFFFFFF00000000 = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * FFFFFFFF00000000 = FFFFFFFF800000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * FFFFFFFF00000000 = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * FFFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * FFFFFFFF00000000 = 0000000000000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * FFFFFFFF00000000 = 00000000000000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * FFFFFFFF00000000 = 00000000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * FFFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * FFFFFFFF00000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 (cc=0) -+msy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF (cc=0) -+msy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF (cc=0) -+msy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF (cc=0) -+msy 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mr 000000000000FFFF * 000000007FFFFFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mr 0000000000007FFF * 000000007FFFFFFF = 0000000000003FFF000000007FFF8001 (cc=0) -+mr 0000000000008000 * 000000007FFFFFFF = 0000000000003FFF00000000FFFF8000 (cc=0) -+mr 00000000FFFFFFFF * 000000007FFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mr 0000000080000000 * 000000007FFFFFFF = 00000000C00000000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF0000000000000001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 (cc=0) -+mh 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mlg 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlg 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mlg 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mlg 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 (cc=0) -+mlg 8000000000000000 * 000000007FFFFFFF = 000000003FFFFFFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+mlgr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mlgr 000000000000FFFF * 000000007FFFFFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlgr 0000000000007FFF * 000000007FFFFFFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mlgr 0000000000008000 * 000000007FFFFFFF = 000000000000000000003FFFFFFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mlgr 0000000080000000 * 000000007FFFFFFF = 00000000000000003FFFFFFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000003FFFFFFF00000001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFEFFFFFFFF80000001 (cc=0) -+mlgr 8000000000000000 * 000000007FFFFFFF = 000000003FFFFFFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF7FFFFFFF80000001 (cc=0) -+ml 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mlr 000000000000FFFF * 000000007FFFFFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mlr 0000000000007FFF * 000000007FFFFFFF = 0000000000003FFF000000007FFF8001 (cc=0) -+mlr 0000000000008000 * 000000007FFFFFFF = 0000000000003FFF00000000FFFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 000000007FFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+mlr 0000000080000000 * 000000007FFFFFFF = 000000003FFFFFFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 000000007FFFFFFF = 000000003FFFFFFF0000000000000001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF7FFFFFFEFFFFFFFF80000001 (cc=0) -+mlr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF7FFFFFFE7FFFFFFF80000001 (cc=0) -+ms 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 000000007FFFFFFF = 000000007FFF0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 000000007FFFFFFF = 000000007FFF80010000000000007FFF (cc=0) -+msr 0000000000008000 * 000000007FFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 000000007FFFFFFF = 000000008000000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 000000007FFFFFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=0) -+msg 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=0) -+msgr 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 000000007FFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 000000007FFFFFFF = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 0000000080000000 = 00000000FFFFFFFF0000000080000000 (cc=0) -+mr 000000000000FFFF * 0000000080000000 = 00000000FFFF80000000000080000000 (cc=0) -+mr 0000000000007FFF * 0000000080000000 = 00000000FFFFC0000000000080000000 (cc=0) -+mr 0000000000008000 * 0000000080000000 = 00000000FFFFC0000000000000000000 (cc=0) -+mr 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mr 0000000080000000 * 0000000080000000 = 00000000400000000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 0000000080000000 = 00000000C00000000000000080000000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF80000000 (cc=0) -+mr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF80000000 (cc=0) -+mh 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mlg 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 (cc=0) -+mlg 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 (cc=0) -+mlg 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 (cc=0) -+mlg 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 (cc=0) -+mlg 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 (cc=0) -+mlg 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 0000000080000000 = 000000007FFFFFFFFFFFFFFF80000000 (cc=0) -+mlg 8000000000000000 * 0000000080000000 = 00000000400000000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+mlgr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mlgr 000000000000FFFF * 0000000080000000 = 000000000000000000007FFF80000000 (cc=0) -+mlgr 0000000000007FFF * 0000000080000000 = 000000000000000000003FFF80000000 (cc=0) -+mlgr 0000000000008000 * 0000000080000000 = 00000000000000000000400000000000 (cc=0) -+mlgr 00000000FFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFF80000000 (cc=0) -+mlgr 0000000080000000 * 0000000080000000 = 00000000000000004000000000000000 (cc=0) -+mlgr 000000007FFFFFFF * 0000000080000000 = 00000000000000003FFFFFFF80000000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 0000000080000000 = 000000007FFFFFFFFFFFFFFF80000000 (cc=0) -+mlgr 8000000000000000 * 0000000080000000 = 00000000400000000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 0000000080000000 = 000000003FFFFFFFFFFFFFFF80000000 (cc=0) -+ml 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mlr 000000000000FFFF * 0000000080000000 = 0000000000007FFF0000000080000000 (cc=0) -+mlr 0000000000007FFF * 0000000080000000 = 0000000000003FFF0000000080000000 (cc=0) -+mlr 0000000000008000 * 0000000080000000 = 00000000000040000000000000000000 (cc=0) -+mlr 00000000FFFFFFFF * 0000000080000000 = 000000007FFFFFFF0000000080000000 (cc=0) -+mlr 0000000080000000 * 0000000080000000 = 00000000400000000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 0000000080000000 = 000000003FFFFFFF0000000080000000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF7FFFFFFFFFFFFFFF80000000 (cc=0) -+mlr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF7FFFFFFF7FFFFFFF80000000 (cc=0) -+ms 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 (cc=0) -+msr 000000000000FFFF * 0000000080000000 = 0000000080000000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 0000000080000000 = 00000000800000000000000000007FFF (cc=0) -+msr 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 0000000080000000 = 000000008000000000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 0000000080000000 = 0000000080000000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 (cc=0) -+msg 000000000000FFFF * 0000000080000000 = 00007FFF80000000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000007FFF (cc=0) -+msg 0000000000008000 * 0000000080000000 = 00004000000000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF8000000000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 0000000080000000 = 40000000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF80000000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 0000000080000000 = 00000000800000000000000000000001 (cc=0) -+msgr 000000000000FFFF * 0000000080000000 = 00007FFF80000000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 0000000080000000 = 00003FFF800000000000000000007FFF (cc=0) -+msgr 0000000000008000 * 0000000080000000 = 00004000000000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 0000000080000000 = 7FFFFFFF8000000000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 0000000080000000 = 40000000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 0000000080000000 = 3FFFFFFF80000000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 0000000080000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 0000000080000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 0000000080000000 = FFFFFFFF800000000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 0000000080000000 = FFFF800080000000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 0000000080000000 = FFFFC000800000000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 0000000080000000 = FFFFC000000000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 0000000080000000 = 800000008000000000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 0000000080000000 = C0000000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 0000000080000000 = C000000080000000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 0000000080000000 = 0000000080000000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 0000000080000000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 0000000080000000 = 00000000800000007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+mr 000000000000FFFF * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mr 0000000000007FFF * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mr 0000000000008000 * 00000000FFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mr 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mr 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+mr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mh 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mlg 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlg 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mlg 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 (cc=0) -+mlg 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 (cc=0) -+mlg 8000000000000000 * 00000000FFFFFFFF = 000000007FFFFFFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+mlgr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mlgr 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlgr 0000000000007FFF * 00000000FFFFFFFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mlgr 0000000000008000 * 00000000FFFFFFFF = 000000000000000000007FFFFFFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFE00000001 (cc=0) -+mlgr 0000000080000000 * 00000000FFFFFFFF = 00000000000000007FFFFFFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFE80000001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFEFFFFFFFF00000001 (cc=0) -+mlgr 8000000000000000 * 00000000FFFFFFFF = 000000007FFFFFFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFF7FFFFFFF00000001 (cc=0) -+ml 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mlr 000000000000FFFF * 00000000FFFFFFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+mlr 0000000000007FFF * 00000000FFFFFFFF = 0000000000007FFE00000000FFFF8001 (cc=0) -+mlr 0000000000008000 * 00000000FFFFFFFF = 0000000000007FFF00000000FFFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000FFFFFFFE0000000000000001 (cc=0) -+mlr 0000000080000000 * 00000000FFFFFFFF = 000000007FFFFFFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 00000000FFFFFFFF = 000000007FFFFFFE0000000080000001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFFFFFFFFFEFFFFFFFF00000001 (cc=0) -+mlr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFFFFFFFFFE7FFFFFFF00000001 (cc=0) -+ms 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 00000000FFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 00000000FFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+msr 0000000000008000 * 00000000FFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 00000000FFFFFFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 00000000FFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000007FFF (cc=0) -+msg 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE0000000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE80000001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 00000000FFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 00000000FFFFFFFF = 0000FFFEFFFF0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 00000000FFFFFFFF = 00007FFEFFFF80010000000000007FFF (cc=0) -+msgr 0000000000008000 * 00000000FFFFFFFF = 00007FFFFFFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFE0000000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 00000000FFFFFFFF = 7FFFFFFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 00000000FFFFFFFF = 7FFFFFFE80000001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 00000000FFFFFFFF = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 00000000FFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 00000000FFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 00000000FFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 00000000FFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 00000000FFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 00000000FFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 00000000FFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mr 0000000080000000 * 000000000000FFFF = 00000000FFFF80000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF0001 (cc=0) -+mh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlg 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mlgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlgr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlgr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlgr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlgr 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlgr 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+ml 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 000000000000FFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+mlr 0000000080000000 * 000000000000FFFF = 0000000000007FFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF0000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF0000FFFE7FFFFFFFFFFF0001 (cc=0) -+ms 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 000000000000FFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 000000000000FFFF = 000000007FFF0001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msg 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msgr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mr 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mr 0000000080000000 * 0000000000007FFF = 00000000FFFFC0000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 0000000000007FFF = 0000000000003FFF000000007FFF8001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8001 (cc=0) -+mr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF8001 (cc=0) -+mh 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mlg 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mlg 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mlg 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mlg 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000007FFEFFFFFFFFFFFF8001 (cc=0) -+mlg 8000000000000000 * 0000000000007FFF = 0000000000003FFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+mlgr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mlgr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mlgr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mlgr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000007FFEFFFF8001 (cc=0) -+mlgr 0000000080000000 * 0000000000007FFF = 000000000000000000003FFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 0000000000007FFF = 000000000000000000003FFF7FFF8001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000007FFEFFFFFFFFFFFF8001 (cc=0) -+mlgr 8000000000000000 * 0000000000007FFF = 0000000000003FFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000003FFF7FFFFFFFFFFF8001 (cc=0) -+ml 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mlr 000000000000FFFF * 0000000000007FFF = 0000000000000000000000007FFE8001 (cc=0) -+mlr 0000000000007FFF * 0000000000007FFF = 0000000000000000000000003FFF0001 (cc=0) -+mlr 0000000000008000 * 0000000000007FFF = 0000000000000000000000003FFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 0000000000007FFF = 0000000000007FFE00000000FFFF8001 (cc=0) -+mlr 0000000080000000 * 0000000000007FFF = 0000000000003FFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 0000000000007FFF = 0000000000003FFF000000007FFF8001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00007FFEFFFFFFFFFFFF8001 (cc=0) -+mlr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF00007FFE7FFFFFFFFFFF8001 (cc=0) -+ms 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+msr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+msg 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+msgr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 0000000000007FFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 0000000000007FFF = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 0000000000007FFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mr 00000000FFFFFFFF * 0000000000008000 = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mr 0000000080000000 * 0000000000008000 = 00000000FFFFC0000000000000000000 (cc=0) -+mr 000000007FFFFFFF * 0000000000008000 = 0000000000003FFF00000000FFFF8000 (cc=0) -+mr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFFFFFFFFFFFFFFFFFF8000 (cc=0) -+mr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF8000 (cc=0) -+mh 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mlg 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mlg 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mlg 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mlg 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 (cc=0) -+mlg 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 (cc=0) -+mlg 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000007FFFFFFFFFFFFFFF8000 (cc=0) -+mlg 8000000000000000 * 0000000000008000 = 00000000000040000000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+mlgr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mlgr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mlgr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mlgr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mlgr 00000000FFFFFFFF * 0000000000008000 = 000000000000000000007FFFFFFF8000 (cc=0) -+mlgr 0000000080000000 * 0000000000008000 = 00000000000000000000400000000000 (cc=0) -+mlgr 000000007FFFFFFF * 0000000000008000 = 000000000000000000003FFFFFFF8000 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000007FFFFFFFFFFFFFFF8000 (cc=0) -+mlgr 8000000000000000 * 0000000000008000 = 00000000000040000000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 0000000000008000 = 0000000000003FFFFFFFFFFFFFFF8000 (cc=0) -+ml 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mlr 000000000000FFFF * 0000000000008000 = 0000000000000000000000007FFF8000 (cc=0) -+mlr 0000000000007FFF * 0000000000008000 = 0000000000000000000000003FFF8000 (cc=0) -+mlr 0000000000008000 * 0000000000008000 = 00000000000000000000000040000000 (cc=0) -+mlr 00000000FFFFFFFF * 0000000000008000 = 0000000000007FFF00000000FFFF8000 (cc=0) -+mlr 0000000080000000 * 0000000000008000 = 00000000000040000000000000000000 (cc=0) -+mlr 000000007FFFFFFF * 0000000000008000 = 0000000000003FFF00000000FFFF8000 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00007FFFFFFFFFFFFFFF8000 (cc=0) -+mlr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF00007FFF7FFFFFFFFFFF8000 (cc=0) -+ms 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 (cc=0) -+msr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF (cc=0) -+msr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF (cc=0) -+msr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 0000000000008000 = 00000000FFFF800000000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 0000000000008000 = 00000000FFFF8000000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFFFFFF80007FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 (cc=0) -+msg 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF (cc=0) -+msg 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF (cc=0) -+msg 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 (cc=0) -+msgr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF (cc=0) -+msgr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 0000000000008000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 0000000000008000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 0000000000008000 = 00000000000080000000000000000001 (cc=0) -+msgfr 000000000000FFFF * 0000000000008000 = 000000007FFF8000000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 0000000000008000 = 000000003FFF80000000000000007FFF (cc=0) -+msgfr 0000000000008000 * 0000000000008000 = 00000000400000000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 0000000000008000 = 00007FFFFFFF800000000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 0000000000008000 = 00004000000000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 0000000000008000 = 00003FFFFFFF8000000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF8000FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 0000000000008000 = 00000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFFFFFF80007FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+m 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+m FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+m 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+m 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mr 0000000080000000 * 000000000000FFFF = 00000000FFFF80000000000080000000 (cc=0) -+mr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFFFFFFFFFFFFFFFFFF0001 (cc=0) -+mr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFFFFFF7FFFFFFFFFFF0001 (cc=0) -+mh 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mh 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mh 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mh 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mh 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mh 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mh 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mh 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mh FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mh 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mh 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mlg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlg 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlg 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlg 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlg 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlg 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlg 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mlg 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlg FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlg 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 (cc=0) -+mlg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+mlgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlgr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlgr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlgr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlgr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlgr 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000FFFEFFFF0001 (cc=0) -+mlgr 0000000080000000 * 000000000000FFFF = 000000000000000000007FFF80000000 (cc=0) -+mlgr 000000007FFFFFFF * 000000000000FFFF = 000000000000000000007FFF7FFF0001 (cc=0) -+mlgr FFFFFFFFFFFFFFFF * 000000000000FFFF = 000000000000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlgr 8000000000000000 * 000000000000FFFF = 0000000000007FFF8000000000000000 (cc=0) -+mlgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000007FFF7FFFFFFFFFFF0001 (cc=0) -+ml 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ml FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+ml 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+ml 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mlr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mlr 0000000000000001 * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mlr 000000000000FFFF * 000000000000FFFF = 000000000000000000000000FFFE0001 (cc=0) -+mlr 0000000000007FFF * 000000000000FFFF = 0000000000000000000000007FFE8001 (cc=0) -+mlr 0000000000008000 * 000000000000FFFF = 0000000000000000000000007FFF8000 (cc=0) -+mlr 00000000FFFFFFFF * 000000000000FFFF = 000000000000FFFE00000000FFFF0001 (cc=0) -+mlr 0000000080000000 * 000000000000FFFF = 0000000000007FFF0000000080000000 (cc=0) -+mlr 000000007FFFFFFF * 000000000000FFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mlr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF0000FFFEFFFFFFFFFFFF0001 (cc=0) -+mlr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mlr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF0000FFFE7FFFFFFFFFFF0001 (cc=0) -+ms 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+ms 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+ms 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+ms 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+ms 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+ms 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+ms 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+ms 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+ms FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+ms 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+ms 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+msr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msr 00000000FFFFFFFF * 000000000000FFFF = 00000000FFFF000100000000FFFFFFFF (cc=0) -+msr 0000000080000000 * 000000000000FFFF = 00000000800000000000000080000000 (cc=0) -+msr 000000007FFFFFFF * 000000000000FFFF = 000000007FFF0001000000007FFFFFFF (cc=0) -+msr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msg 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msg 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msg 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msg 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msg 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msg 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msg 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msg 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msg FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msg 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msg 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msgr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msgr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msgr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msgr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msgr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msgr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msgr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msgr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msgr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msgr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msgf 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgf 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msgf 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msgf 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msgf 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msgf 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msgf 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msgf 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msgf FFFFFFFFFFFFFFFF * 000000000000FFFF = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+msgf 8000000000000000 * 000000000000FFFF = 00000000000000008000000000000000 (cc=0) -+msgf 7FFFFFFFFFFFFFFF * 000000000000FFFF = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+msgfr 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msgfr 0000000000000001 * 000000000000FFFF = 000000000000FFFF0000000000000001 (cc=0) -+msgfr 000000000000FFFF * 000000000000FFFF = 00000000FFFE0001000000000000FFFF (cc=0) -+msgfr 0000000000007FFF * 000000000000FFFF = 000000007FFE80010000000000007FFF (cc=0) -+msgfr 0000000000008000 * 000000000000FFFF = 000000007FFF80000000000000008000 (cc=0) -+msgfr 00000000FFFFFFFF * 000000000000FFFF = 0000FFFEFFFF000100000000FFFFFFFF (cc=0) -+msgfr 0000000080000000 * 000000000000FFFF = 00007FFF800000000000000080000000 (cc=0) -+msgfr 000000007FFFFFFF * 000000000000FFFF = 00007FFF7FFF0001000000007FFFFFFF (cc=0) -+msgfr FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFFFFFF0001FFFFFFFFFFFFFFFF (cc=0) -+msgfr 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msgfr 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFFFFFF00017FFFFFFFFFFFFFFF (cc=0) -+msy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+msy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+msy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+msy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+msy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+msy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+msy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+msy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+msy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+msy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+msy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mhi 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mhi 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+mhi 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+mhi 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+mhi 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+mhi 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mhi 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+mhi 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mhi FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhi 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mhi 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mhi 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mhi 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+mhi 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+mhi 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+mhi 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+mhi 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+mhi 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+mhi 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+mhi FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+mhi 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mhi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+mhi 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 (cc=0) -+mhi 0000000000000001 * FFFFFFFFFFFF8000 = 00000000FFFF80000000000000000001 (cc=0) -+mhi 000000000000FFFF * FFFFFFFFFFFF8000 = 0000000080008000000000000000FFFF (cc=0) -+mhi 0000000000007FFF * FFFFFFFFFFFF8000 = 00000000C00080000000000000007FFF (cc=0) -+mhi 0000000000008000 * FFFFFFFFFFFF8000 = 00000000C00000000000000000008000 (cc=0) -+mhi 00000000FFFFFFFF * FFFFFFFFFFFF8000 = 000000000000800000000000FFFFFFFF (cc=0) -+mhi 0000000080000000 * FFFFFFFFFFFF8000 = 00000000000000000000000080000000 (cc=0) -+mhi 000000007FFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000000000007FFFFFFF (cc=0) -+mhi FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+mhi 8000000000000000 * FFFFFFFFFFFF8000 = 80000000000000008000000000000000 (cc=0) -+mhi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+mhi 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mhi 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+mhi 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+mhi 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+mhi 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+mhi 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+mhi 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 (cc=0) -+mhi 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+mhi FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mhi 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mhi 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mghi 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mghi 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+mghi 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+mghi 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+mghi 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+mghi 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mghi 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+mghi 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mghi FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+mghi 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+mghi 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+mghi 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mghi 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+mghi 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+mghi 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+mghi 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+mghi 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+mghi 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+mghi 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+mghi FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+mghi 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mghi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+mghi 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 (cc=0) -+mghi 0000000000000001 * FFFFFFFFFFFF8000 = FFFFFFFFFFFF80000000000000000001 (cc=0) -+mghi 000000000000FFFF * FFFFFFFFFFFF8000 = FFFFFFFF80008000000000000000FFFF (cc=0) -+mghi 0000000000007FFF * FFFFFFFFFFFF8000 = FFFFFFFFC00080000000000000007FFF (cc=0) -+mghi 0000000000008000 * FFFFFFFFFFFF8000 = FFFFFFFFC00000000000000000008000 (cc=0) -+mghi 00000000FFFFFFFF * FFFFFFFFFFFF8000 = FFFF80000000800000000000FFFFFFFF (cc=0) -+mghi 0000000080000000 * FFFFFFFFFFFF8000 = FFFFC000000000000000000080000000 (cc=0) -+mghi 000000007FFFFFFF * FFFFFFFFFFFF8000 = FFFFC00000008000000000007FFFFFFF (cc=0) -+mghi FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000FFFFFFFFFFFFFFFF (cc=0) -+mghi 8000000000000000 * FFFFFFFFFFFF8000 = 00000000000000008000000000000000 (cc=0) -+mghi 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 00000000000080007FFFFFFFFFFFFFFF (cc=0) -+mghi 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mghi 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+mghi 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+mghi 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+mghi 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+mghi 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+mghi 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+mghi 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+mghi FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mghi 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mghi 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -diff --git a/none/tests/s390x/mul_GE.stdout.exp b/none/tests/s390x/mul_GE.stdout.exp -index a94288aa3..32a349bbe 100644 ---- a/none/tests/s390x/mul_GE.stdout.exp -+++ b/none/tests/s390x/mul_GE.stdout.exp -@@ -1,484 +1,484 @@ --mhy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --mhy 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --mhy 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 --mfy 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 --mfy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 --mfy 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mfy 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000007FFF0000000000000001 --mhy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFE8001000000000000FFFF --mhy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000003FFF00010000000000007FFF --mhy 0000000000008000 * 7FFFFFFFFFFFFFFF = 000000003FFF80000000000000008000 --mhy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF800100000000FFFFFFFF --mhy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 --mhy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFF8001000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --mfy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF --mfy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 --mfy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 --mfy 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 --mfy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --mfy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000C00000000000000080000000 --mfy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 --mfy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 --mfy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 --mhy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 --mhy 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF --mhy 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF --mhy 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 --mhy 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF --mhy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 --mfy 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 --mfy 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 --mfy 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 --mfy 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 --mfy 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mfy 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 --mfy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 --mfy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 --mhy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --mhy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --mhy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --mhy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --mhy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --mhy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --mhy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --mhy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --mfy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF --mfy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 --mfy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 --mfy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 --mfy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 --mfy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 --mfy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 --mfy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 --mfy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 --mhy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 7FFFFFFF00000000 = 0000000000007FFF0000000000000001 --mhy 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFE8001000000000000FFFF --mhy 0000000000007FFF * 7FFFFFFF00000000 = 000000003FFF00010000000000007FFF --mhy 0000000000008000 * 7FFFFFFF00000000 = 000000003FFF80000000000000008000 --mhy 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFF800100000000FFFFFFFF --mhy 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 --mhy 000000007FFFFFFF * 7FFFFFFF00000000 = 000000007FFF8001000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --mfy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF --mfy 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 --mfy 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 --mfy 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 --mfy 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 --mfy 0000000080000000 * 7FFFFFFF00000000 = 00000000C00000000000000080000000 --mfy 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 --mfy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000001 --mfy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 --mhy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 --mhy 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF --mhy 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF --mhy 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 --mhy 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF --mhy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 --mfy 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 --mfy 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 --mfy 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 --mfy 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 --mfy 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 --mfy 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 --mfy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 --mfy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 --mhy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 --mhy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF --mhy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF --mhy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 --mhy 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF --mhy 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 --mhy 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF --mhy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF --mfy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFFFFFF --mfy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF0001 --mfy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8001 --mfy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8000 --mfy 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000001 --mfy 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 --mfy 000000007FFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 --mfy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000001 --mfy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000001 --mhy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 --mhy 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF --mhy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 --mhy 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF --mhy 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 --mfy 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 --mfy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 --mfy 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --mfy 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 --mhy 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF --mhy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --mhy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --mhy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 --mhy 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF --mhy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 --mfy 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 --mfy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 --mfy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --mfy 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mhy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 --mhy 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF --mhy 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 --mfy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 --mfy 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 --mfy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 --mfy 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --mfy 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 --mhy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mhy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 --mhy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF --mhy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF --mhy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 --mhy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF --mhy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 --mhy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF --mhy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF --mhy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mhy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF --mfy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 --mfy 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 --mfy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 --mfy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 --mfy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 --MSFI 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --MSFI 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --MSFI 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --MSFI 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --MSFI 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --MSFI 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --MSFI 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --MSFI 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF --MSFI 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --MSFI 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 --MSFI 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF --MSFI 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF --MSFI 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 --MSFI 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF --MSFI 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 --MSFI 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF --MSFI 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 --MSFI 0000000000000001 * FFFFFFFFFFFF8000 = 00000000FFFF80000000000000000001 --MSFI 000000000000FFFF * FFFFFFFFFFFF8000 = 0000000080008000000000000000FFFF --MSFI 0000000000007FFF * FFFFFFFFFFFF8000 = 00000000C00080000000000000007FFF --MSFI 0000000000008000 * FFFFFFFFFFFF8000 = 00000000C00000000000000000008000 --MSFI 00000000FFFFFFFF * FFFFFFFFFFFF8000 = 000000000000800000000000FFFFFFFF --MSFI 0000000080000000 * FFFFFFFFFFFF8000 = 00000000000000000000000080000000 --MSFI 000000007FFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * FFFFFFFFFFFF8000 = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF --MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF --MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 --MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF --MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 --MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF --MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 --MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSFI 0000000000000000 * FFFFFFFF80000000 = 00000000000000000000000000000000 --MSFI 0000000000000001 * FFFFFFFF80000000 = 00000000800000000000000000000001 --MSFI 000000000000FFFF * FFFFFFFF80000000 = 0000000080000000000000000000FFFF --MSFI 0000000000007FFF * FFFFFFFF80000000 = 00000000800000000000000000007FFF --MSFI 0000000000008000 * FFFFFFFF80000000 = 00000000000000000000000000008000 --MSFI 00000000FFFFFFFF * FFFFFFFF80000000 = 000000008000000000000000FFFFFFFF --MSFI 0000000080000000 * FFFFFFFF80000000 = 00000000000000000000000080000000 --MSFI 000000007FFFFFFF * FFFFFFFF80000000 = 0000000080000000000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * FFFFFFFF80000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * FFFFFFFF80000000 = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * FFFFFFFF80000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF --MSFI 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --MSFI 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --MSFI 000000000000FFFF * 000000007FFFFFFF = 000000007FFF0001000000000000FFFF --MSFI 0000000000007FFF * 000000007FFFFFFF = 000000007FFF80010000000000007FFF --MSFI 0000000000008000 * 000000007FFFFFFF = 00000000FFFF80000000000000008000 --MSFI 00000000FFFFFFFF * 000000007FFFFFFF = 000000008000000100000000FFFFFFFF --MSFI 0000000080000000 * 000000007FFFFFFF = 00000000800000000000000080000000 --MSFI 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000001000000007FFFFFFF --MSFI FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --MSFI 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --MSFI 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 --MSGFI 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 --MSGFI 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF --MSGFI 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF --MSGFI 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 --MSGFI 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF --MSGFI 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 --MSGFI 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 --MSGFI 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 --MSGFI 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF --MSGFI 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF --MSGFI 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 --MSGFI 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF --MSGFI 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 --MSGFI 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 --MSGFI 0000000000000001 * FFFFFFFFFFFF8000 = FFFFFFFFFFFF80000000000000000001 --MSGFI 000000000000FFFF * FFFFFFFFFFFF8000 = FFFFFFFF80008000000000000000FFFF --MSGFI 0000000000007FFF * FFFFFFFFFFFF8000 = FFFFFFFFC00080000000000000007FFF --MSGFI 0000000000008000 * FFFFFFFFFFFF8000 = FFFFFFFFC00000000000000000008000 --MSGFI 00000000FFFFFFFF * FFFFFFFFFFFF8000 = FFFF80000000800000000000FFFFFFFF --MSGFI 0000000080000000 * FFFFFFFFFFFF8000 = FFFFC000000000000000000080000000 --MSGFI 000000007FFFFFFF * FFFFFFFFFFFF8000 = FFFFC00000008000000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * FFFFFFFFFFFF8000 = 00000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 00000000000080007FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 --MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 --MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF --MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF --MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 --MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF --MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 --MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * FFFFFFFF80000000 = 00000000000000000000000000000000 --MSGFI 0000000000000001 * FFFFFFFF80000000 = FFFFFFFF800000000000000000000001 --MSGFI 000000000000FFFF * FFFFFFFF80000000 = FFFF800080000000000000000000FFFF --MSGFI 0000000000007FFF * FFFFFFFF80000000 = FFFFC000800000000000000000007FFF --MSGFI 0000000000008000 * FFFFFFFF80000000 = FFFFC000000000000000000000008000 --MSGFI 00000000FFFFFFFF * FFFFFFFF80000000 = 800000008000000000000000FFFFFFFF --MSGFI 0000000080000000 * FFFFFFFF80000000 = C0000000000000000000000080000000 --MSGFI 000000007FFFFFFF * FFFFFFFF80000000 = C000000080000000000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * FFFFFFFF80000000 = 0000000080000000FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * FFFFFFFF80000000 = 00000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFF80000000 = 00000000800000007FFFFFFFFFFFFFFF --MSGFI 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 --MSGFI 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 --MSGFI 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF --MSGFI 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF --MSGFI 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 --MSGFI 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF --MSGFI 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 --MSGFI 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF --MSGFI FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF --MSGFI 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 --MSGFI 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF -+mhy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000007FFF0000000000000001 (cc=0) -+mhy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 000000007FFE8001000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 000000003FFF00010000000000007FFF (cc=0) -+mhy 0000000000008000 * 7FFFFFFFFFFFFFFF = 000000003FFF80000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 7FFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 7FFFFFFFFFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mfy 000000000000FFFF * 7FFFFFFFFFFFFFFF = 0000000000007FFF000000007FFF0001 (cc=0) -+mfy 0000000000007FFF * 7FFFFFFFFFFFFFFF = 0000000000003FFF000000007FFF8001 (cc=0) -+mfy 0000000000008000 * 7FFFFFFFFFFFFFFF = 0000000000003FFF00000000FFFF8000 (cc=0) -+mfy 00000000FFFFFFFF * 7FFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mfy 0000000080000000 * 7FFFFFFFFFFFFFFF = 00000000C00000000000000080000000 (cc=0) -+mfy 000000007FFFFFFF * 7FFFFFFFFFFFFFFF = 000000003FFFFFFF0000000000000001 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mfy 8000000000000000 * 7FFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 7FFFFFFFFFFFFFFF = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 (cc=0) -+mhy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 (cc=0) -+mhy 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF (cc=0) -+mhy 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 (cc=0) -+mfy 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 (cc=0) -+mfy 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 (cc=0) -+mfy 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mfy 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 (cc=0) -+mfy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 (cc=0) -+mhy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+mhy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+mhy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+mhy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+mfy 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mfy 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mfy 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mfy 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mfy 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mfy 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000080000001 (cc=0) -+mfy FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+mfy 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mhy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 7FFFFFFF00000000 = 0000000000007FFF0000000000000001 (cc=0) -+mhy 000000000000FFFF * 7FFFFFFF00000000 = 000000007FFE8001000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 7FFFFFFF00000000 = 000000003FFF00010000000000007FFF (cc=0) -+mhy 0000000000008000 * 7FFFFFFF00000000 = 000000003FFF80000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFF800100000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 7FFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 7FFFFFFF00000000 = 000000007FFF8001000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 7FFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 7FFFFFFF00000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mfy 000000000000FFFF * 7FFFFFFF00000000 = 0000000000007FFF000000007FFF0001 (cc=0) -+mfy 0000000000007FFF * 7FFFFFFF00000000 = 0000000000003FFF000000007FFF8001 (cc=0) -+mfy 0000000000008000 * 7FFFFFFF00000000 = 0000000000003FFF00000000FFFF8000 (cc=0) -+mfy 00000000FFFFFFFF * 7FFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 (cc=0) -+mfy 0000000080000000 * 7FFFFFFF00000000 = 00000000C00000000000000080000000 (cc=0) -+mfy 000000007FFFFFFF * 7FFFFFFF00000000 = 000000003FFFFFFF0000000000000001 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 7FFFFFFF00000000 = FFFFFFFFFFFFFFFFFFFFFFFF80000001 (cc=0) -+mfy 8000000000000000 * 7FFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 7FFFFFFF00000000 = 7FFFFFFFFFFFFFFF7FFFFFFF80000001 (cc=0) -+mhy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 8000000000000000 = 00000000FFFF80000000000000000001 (cc=0) -+mhy 000000000000FFFF * 8000000000000000 = 0000000080008000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 8000000000000000 = 00000000C00080000000000000007FFF (cc=0) -+mhy 0000000000008000 * 8000000000000000 = 00000000C00000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 8000000000000000 = 000000000000800000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 8000000000000000 = 0000000000008000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 8000000000000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 8000000000000000 = 00000000FFFFFFFF0000000080000000 (cc=0) -+mfy 000000000000FFFF * 8000000000000000 = 00000000FFFF80000000000080000000 (cc=0) -+mfy 0000000000007FFF * 8000000000000000 = 00000000FFFFC0000000000080000000 (cc=0) -+mfy 0000000000008000 * 8000000000000000 = 00000000FFFFC0000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 8000000000000000 = 00000000000000000000000080000000 (cc=0) -+mfy 0000000080000000 * 8000000000000000 = 00000000400000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 8000000000000000 = 00000000C00000000000000080000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 8000000000000000 = FFFFFFFF00000000FFFFFFFF80000000 (cc=0) -+mfy 8000000000000000 * 8000000000000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 8000000000000000 = 7FFFFFFF000000007FFFFFFF80000000 (cc=0) -+mhy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF0000000000000001 (cc=0) -+mhy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFF0001000000000000FFFF (cc=0) -+mhy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFF80010000000000007FFF (cc=0) -+mhy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFF80000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * FFFFFFFF00000000 = 000000000000000100000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * FFFFFFFF00000000 = 00000000800000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * FFFFFFFF00000000 = 0000000080000001000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * FFFFFFFF00000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFFFFFF (cc=0) -+mfy 000000000000FFFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF0001 (cc=0) -+mfy 0000000000007FFF * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8001 (cc=0) -+mfy 0000000000008000 * FFFFFFFF00000000 = 00000000FFFFFFFF00000000FFFF8000 (cc=0) -+mfy 00000000FFFFFFFF * FFFFFFFF00000000 = 00000000000000000000000000000001 (cc=0) -+mfy 0000000080000000 * FFFFFFFF00000000 = 00000000000000000000000080000000 (cc=0) -+mfy 000000007FFFFFFF * FFFFFFFF00000000 = 00000000FFFFFFFF0000000080000001 (cc=0) -+mfy FFFFFFFFFFFFFFFF * FFFFFFFF00000000 = FFFFFFFF00000000FFFFFFFF00000001 (cc=0) -+mfy 8000000000000000 * FFFFFFFF00000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * FFFFFFFF00000000 = 7FFFFFFF000000007FFFFFFF00000001 (cc=0) -+mhy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 000000007FFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 000000007FFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 0000000080000000 = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 0000000080000000 = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 0000000080000000 = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 0000000080000000 = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 0000000080000000 = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 0000000080000000 = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 0000000080000000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 0000000080000000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 0000000080000000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 00000000FFFFFFFF = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 00000000FFFFFFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 00000000FFFFFFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 00000000FFFFFFFF = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 00000000FFFFFFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 00000000FFFFFFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 00000000FFFFFFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 0000000000007FFF = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 0000000000007FFF = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 0000000000007FFF = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 0000000000007FFF = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 0000000000008000 = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 0000000000008000 = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 0000000000008000 = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 0000000000008000 = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 0000000000008000 = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 0000000000008000 = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 0000000000008000 = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 0000000000008000 = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 0000000000008000 = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+mhy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mhy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000001 (cc=0) -+mhy 000000000000FFFF * 000000000000FFFF = 0000000000000000000000000000FFFF (cc=0) -+mhy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000007FFF (cc=0) -+mhy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000008000 (cc=0) -+mhy 00000000FFFFFFFF * 000000000000FFFF = 000000000000000000000000FFFFFFFF (cc=0) -+mhy 0000000080000000 * 000000000000FFFF = 00000000000000000000000080000000 (cc=0) -+mhy 000000007FFFFFFF * 000000000000FFFF = 0000000000000000000000007FFFFFFF (cc=0) -+mhy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+mhy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mhy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+mfy 0000000000000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000000001 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000000000FFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000007FFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000000008000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 00000000FFFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 0000000080000000 * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy 000000007FFFFFFF * 000000000000FFFF = 00000000000000000000000000000000 (cc=0) -+mfy FFFFFFFFFFFFFFFF * 000000000000FFFF = FFFFFFFF00000000FFFFFFFF00000000 (cc=0) -+mfy 8000000000000000 * 000000000000FFFF = 80000000000000008000000000000000 (cc=0) -+mfy 7FFFFFFFFFFFFFFF * 000000000000FFFF = 7FFFFFFF000000007FFFFFFF00000000 (cc=0) -+MSFI 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+MSFI 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+MSFI 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * 0000000000000000 = FFFFFFFF00000000FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * 0000000000000000 = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * 0000000000000000 = 7FFFFFFF000000007FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * FFFFFFFFFFFFFFFF = 00000000FFFFFFFF0000000000000001 (cc=0) -+MSFI 000000000000FFFF * FFFFFFFFFFFFFFFF = 00000000FFFF0001000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * FFFFFFFFFFFFFFFF = 00000000FFFF80010000000000007FFF (cc=0) -+MSFI 0000000000008000 * FFFFFFFFFFFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = 000000000000000100000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * FFFFFFFFFFFFFFFF = 00000000800000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * FFFFFFFFFFFFFFFF = 0000000080000001000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF00000001FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 7FFFFFFF000000017FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * FFFFFFFFFFFF8000 = 00000000FFFF80000000000000000001 (cc=0) -+MSFI 000000000000FFFF * FFFFFFFFFFFF8000 = 0000000080008000000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * FFFFFFFFFFFF8000 = 00000000C00080000000000000007FFF (cc=0) -+MSFI 0000000000008000 * FFFFFFFFFFFF8000 = 00000000C00000000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * FFFFFFFFFFFF8000 = 000000000000800000000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * FFFFFFFFFFFF8000 = 00000000000000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = FFFFFFFF00008000FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * FFFFFFFFFFFF8000 = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 7FFFFFFF000080007FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * 0000000000007FFF = 00000000FFFF800100000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * 0000000000007FFF = 00000000800000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * 0000000000007FFF = 000000007FFF8001000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * FFFFFFFF80000000 = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * FFFFFFFF80000000 = 00000000800000000000000000000001 (cc=0) -+MSFI 000000000000FFFF * FFFFFFFF80000000 = 0000000080000000000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * FFFFFFFF80000000 = 00000000800000000000000000007FFF (cc=0) -+MSFI 0000000000008000 * FFFFFFFF80000000 = 00000000000000000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * FFFFFFFF80000000 = 000000008000000000000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * FFFFFFFF80000000 = 00000000000000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * FFFFFFFF80000000 = 0000000080000000000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * FFFFFFFF80000000 = FFFFFFFF80000000FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * FFFFFFFF80000000 = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * FFFFFFFF80000000 = 7FFFFFFF800000007FFFFFFFFFFFFFFF (cc=0) -+MSFI 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+MSFI 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+MSFI 000000000000FFFF * 000000007FFFFFFF = 000000007FFF0001000000000000FFFF (cc=0) -+MSFI 0000000000007FFF * 000000007FFFFFFF = 000000007FFF80010000000000007FFF (cc=0) -+MSFI 0000000000008000 * 000000007FFFFFFF = 00000000FFFF80000000000000008000 (cc=0) -+MSFI 00000000FFFFFFFF * 000000007FFFFFFF = 000000008000000100000000FFFFFFFF (cc=0) -+MSFI 0000000080000000 * 000000007FFFFFFF = 00000000800000000000000080000000 (cc=0) -+MSFI 000000007FFFFFFF * 000000007FFFFFFF = 0000000000000001000000007FFFFFFF (cc=0) -+MSFI FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+MSFI 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+MSFI 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * 0000000000000000 = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * 0000000000000000 = 00000000000000000000000000000001 (cc=0) -+MSGFI 000000000000FFFF * 0000000000000000 = 0000000000000000000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * 0000000000000000 = 00000000000000000000000000007FFF (cc=0) -+MSGFI 0000000000008000 * 0000000000000000 = 00000000000000000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * 0000000000000000 = 000000000000000000000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * 0000000000000000 = 00000000000000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * 0000000000000000 = 0000000000000000000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * 0000000000000000 = 0000000000000000FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * 0000000000000000 = 00000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * 0000000000000000 = 00000000000000007FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * FFFFFFFFFFFFFFFF = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFF0000000000000001 (cc=0) -+MSGFI 000000000000FFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF0001000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80010000000000007FFF (cc=0) -+MSGFI 0000000000008000 * FFFFFFFFFFFFFFFF = FFFFFFFFFFFF80000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF0000000100000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * FFFFFFFFFFFFFFFF = FFFFFFFF800000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFF80000001000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 0000000000000001FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * FFFFFFFFFFFFFFFF = 80000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = 80000000000000017FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * FFFFFFFFFFFF8000 = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * FFFFFFFFFFFF8000 = FFFFFFFFFFFF80000000000000000001 (cc=0) -+MSGFI 000000000000FFFF * FFFFFFFFFFFF8000 = FFFFFFFF80008000000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * FFFFFFFFFFFF8000 = FFFFFFFFC00080000000000000007FFF (cc=0) -+MSGFI 0000000000008000 * FFFFFFFFFFFF8000 = FFFFFFFFC00000000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * FFFFFFFFFFFF8000 = FFFF80000000800000000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * FFFFFFFFFFFF8000 = FFFFC000000000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * FFFFFFFFFFFF8000 = FFFFC00000008000000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 0000000000008000FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * FFFFFFFFFFFF8000 = 00000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFFFFFF8000 = 00000000000080007FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * 0000000000007FFF = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * 0000000000007FFF = 0000000000007FFF0000000000000001 (cc=0) -+MSGFI 000000000000FFFF * 0000000000007FFF = 000000007FFE8001000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * 0000000000007FFF = 000000003FFF00010000000000007FFF (cc=0) -+MSGFI 0000000000008000 * 0000000000007FFF = 000000003FFF80000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * 0000000000007FFF = 00007FFEFFFF800100000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * 0000000000007FFF = 00003FFF800000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * 0000000000007FFF = 00003FFF7FFF8001000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * 0000000000007FFF = FFFFFFFFFFFF8001FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * 0000000000007FFF = 80000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * 0000000000007FFF = 7FFFFFFFFFFF80017FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * FFFFFFFF80000000 = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * FFFFFFFF80000000 = FFFFFFFF800000000000000000000001 (cc=0) -+MSGFI 000000000000FFFF * FFFFFFFF80000000 = FFFF800080000000000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * FFFFFFFF80000000 = FFFFC000800000000000000000007FFF (cc=0) -+MSGFI 0000000000008000 * FFFFFFFF80000000 = FFFFC000000000000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * FFFFFFFF80000000 = 800000008000000000000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * FFFFFFFF80000000 = C0000000000000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * FFFFFFFF80000000 = C000000080000000000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * FFFFFFFF80000000 = 0000000080000000FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * FFFFFFFF80000000 = 00000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * FFFFFFFF80000000 = 00000000800000007FFFFFFFFFFFFFFF (cc=0) -+MSGFI 0000000000000000 * 000000007FFFFFFF = 00000000000000000000000000000000 (cc=0) -+MSGFI 0000000000000001 * 000000007FFFFFFF = 000000007FFFFFFF0000000000000001 (cc=0) -+MSGFI 000000000000FFFF * 000000007FFFFFFF = 00007FFF7FFF0001000000000000FFFF (cc=0) -+MSGFI 0000000000007FFF * 000000007FFFFFFF = 00003FFF7FFF80010000000000007FFF (cc=0) -+MSGFI 0000000000008000 * 000000007FFFFFFF = 00003FFFFFFF80000000000000008000 (cc=0) -+MSGFI 00000000FFFFFFFF * 000000007FFFFFFF = 7FFFFFFE8000000100000000FFFFFFFF (cc=0) -+MSGFI 0000000080000000 * 000000007FFFFFFF = 3FFFFFFF800000000000000080000000 (cc=0) -+MSGFI 000000007FFFFFFF * 000000007FFFFFFF = 3FFFFFFF00000001000000007FFFFFFF (cc=0) -+MSGFI FFFFFFFFFFFFFFFF * 000000007FFFFFFF = FFFFFFFF80000001FFFFFFFFFFFFFFFF (cc=0) -+MSGFI 8000000000000000 * 000000007FFFFFFF = 80000000000000008000000000000000 (cc=0) -+MSGFI 7FFFFFFFFFFFFFFF * 000000007FFFFFFF = 7FFFFFFF800000017FFFFFFFFFFFFFFF (cc=0) -diff --git a/none/tests/s390x/sub-z14.c b/none/tests/s390x/sub-z14.c -new file mode 100644 -index 000000000..de0a72fb0 ---- /dev/null -+++ b/none/tests/s390x/sub-z14.c -@@ -0,0 +1,13 @@ -+#include "sub.h" -+ -+#define sgh(x, y) ".insn rxy,0xe30000000039, " x ", " y "\n" -+ -+static void do_regmem_insns(unsigned long m2) -+{ -+ memsweep(sgh, m2, 0); -+} -+ -+int main() -+{ -+ for_each_m2(do_regmem_insns); -+} -diff --git a/none/tests/s390x/sub-z14.stderr.exp b/none/tests/s390x/sub-z14.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/sub-z14.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/sub-z14.stdout.exp b/none/tests/s390x/sub-z14.stdout.exp -new file mode 100644 -index 000000000..d6dd55ed1 ---- /dev/null -+++ b/none/tests/s390x/sub-z14.stdout.exp -@@ -0,0 +1,154 @@ -+sgh 0000000000000000 - 0000000000000000 - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 0000000000000000 - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 0000000000000000 - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 0000000000000000 - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 0000000000000000 - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 0000000000000000 - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 0000000000000000 - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 0000000000000000 - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 0000000000000000 - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 0000000000000000 - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 0000000000000000 - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 7FFFFFFFFFFFFFFF - 1 = FFFFFFFFFFFF8001 (cc=1) -+sgh 0000000000000001 - 7FFFFFFFFFFFFFFF - 1 = FFFFFFFFFFFF8002 (cc=1) -+sgh 000000000000FFFF - 7FFFFFFFFFFFFFFF - 1 = 0000000000008000 (cc=2) -+sgh 0000000000007FFF - 7FFFFFFFFFFFFFFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000008000 - 7FFFFFFFFFFFFFFF - 1 = 0000000000000001 (cc=2) -+sgh 00000000FFFFFFFF - 7FFFFFFFFFFFFFFF - 1 = 00000000FFFF8000 (cc=2) -+sgh 0000000080000000 - 7FFFFFFFFFFFFFFF - 1 = 000000007FFF8001 (cc=2) -+sgh 000000007FFFFFFF - 7FFFFFFFFFFFFFFF - 1 = 000000007FFF8000 (cc=2) -+sgh FFFFFFFFFFFFFFFF - 7FFFFFFFFFFFFFFF - 1 = FFFFFFFFFFFF8000 (cc=1) -+sgh 8000000000000000 - 7FFFFFFFFFFFFFFF - 1 = 7FFFFFFFFFFF8001 (cc=3) -+sgh 7FFFFFFFFFFFFFFF - 7FFFFFFFFFFFFFFF - 1 = 7FFFFFFFFFFF8000 (cc=2) -+sgh 0000000000000000 - 8000000000000000 - 1 = 0000000000008000 (cc=2) -+sgh 0000000000000001 - 8000000000000000 - 1 = 0000000000008001 (cc=2) -+sgh 000000000000FFFF - 8000000000000000 - 1 = 0000000000017FFF (cc=2) -+sgh 0000000000007FFF - 8000000000000000 - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000008000 - 8000000000000000 - 1 = 0000000000010000 (cc=2) -+sgh 00000000FFFFFFFF - 8000000000000000 - 1 = 0000000100007FFF (cc=2) -+sgh 0000000080000000 - 8000000000000000 - 1 = 0000000080008000 (cc=2) -+sgh 000000007FFFFFFF - 8000000000000000 - 1 = 0000000080007FFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 8000000000000000 - 1 = 0000000000007FFF (cc=2) -+sgh 8000000000000000 - 8000000000000000 - 1 = 8000000000008000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 8000000000000000 - 1 = 8000000000007FFF (cc=3) -+sgh 0000000000000000 - FFFFFFFFFFFFFFFF - 1 = 0000000000000001 (cc=2) -+sgh 0000000000000001 - FFFFFFFFFFFFFFFF - 1 = 0000000000000002 (cc=2) -+sgh 000000000000FFFF - FFFFFFFFFFFFFFFF - 1 = 0000000000010000 (cc=2) -+sgh 0000000000007FFF - FFFFFFFFFFFFFFFF - 1 = 0000000000008000 (cc=2) -+sgh 0000000000008000 - FFFFFFFFFFFFFFFF - 1 = 0000000000008001 (cc=2) -+sgh 00000000FFFFFFFF - FFFFFFFFFFFFFFFF - 1 = 0000000100000000 (cc=2) -+sgh 0000000080000000 - FFFFFFFFFFFFFFFF - 1 = 0000000080000001 (cc=2) -+sgh 000000007FFFFFFF - FFFFFFFFFFFFFFFF - 1 = 0000000080000000 (cc=2) -+sgh FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF - 1 = 0000000000000000 (cc=0) -+sgh 8000000000000000 - FFFFFFFFFFFFFFFF - 1 = 8000000000000001 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF - 1 = 8000000000000000 (cc=3) -+sgh 0000000000000000 - 7FFFFFFF00000000 - 1 = FFFFFFFFFFFF8001 (cc=1) -+sgh 0000000000000001 - 7FFFFFFF00000000 - 1 = FFFFFFFFFFFF8002 (cc=1) -+sgh 000000000000FFFF - 7FFFFFFF00000000 - 1 = 0000000000008000 (cc=2) -+sgh 0000000000007FFF - 7FFFFFFF00000000 - 1 = 0000000000000000 (cc=0) -+sgh 0000000000008000 - 7FFFFFFF00000000 - 1 = 0000000000000001 (cc=2) -+sgh 00000000FFFFFFFF - 7FFFFFFF00000000 - 1 = 00000000FFFF8000 (cc=2) -+sgh 0000000080000000 - 7FFFFFFF00000000 - 1 = 000000007FFF8001 (cc=2) -+sgh 000000007FFFFFFF - 7FFFFFFF00000000 - 1 = 000000007FFF8000 (cc=2) -+sgh FFFFFFFFFFFFFFFF - 7FFFFFFF00000000 - 1 = FFFFFFFFFFFF8000 (cc=1) -+sgh 8000000000000000 - 7FFFFFFF00000000 - 1 = 7FFFFFFFFFFF8001 (cc=3) -+sgh 7FFFFFFFFFFFFFFF - 7FFFFFFF00000000 - 1 = 7FFFFFFFFFFF8000 (cc=2) -+sgh 0000000000000000 - 8000000000000000 - 1 = 0000000000008000 (cc=2) -+sgh 0000000000000001 - 8000000000000000 - 1 = 0000000000008001 (cc=2) -+sgh 000000000000FFFF - 8000000000000000 - 1 = 0000000000017FFF (cc=2) -+sgh 0000000000007FFF - 8000000000000000 - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000008000 - 8000000000000000 - 1 = 0000000000010000 (cc=2) -+sgh 00000000FFFFFFFF - 8000000000000000 - 1 = 0000000100007FFF (cc=2) -+sgh 0000000080000000 - 8000000000000000 - 1 = 0000000080008000 (cc=2) -+sgh 000000007FFFFFFF - 8000000000000000 - 1 = 0000000080007FFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 8000000000000000 - 1 = 0000000000007FFF (cc=2) -+sgh 8000000000000000 - 8000000000000000 - 1 = 8000000000008000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 8000000000000000 - 1 = 8000000000007FFF (cc=3) -+sgh 0000000000000000 - FFFFFFFF00000000 - 1 = 0000000000000001 (cc=2) -+sgh 0000000000000001 - FFFFFFFF00000000 - 1 = 0000000000000002 (cc=2) -+sgh 000000000000FFFF - FFFFFFFF00000000 - 1 = 0000000000010000 (cc=2) -+sgh 0000000000007FFF - FFFFFFFF00000000 - 1 = 0000000000008000 (cc=2) -+sgh 0000000000008000 - FFFFFFFF00000000 - 1 = 0000000000008001 (cc=2) -+sgh 00000000FFFFFFFF - FFFFFFFF00000000 - 1 = 0000000100000000 (cc=2) -+sgh 0000000080000000 - FFFFFFFF00000000 - 1 = 0000000080000001 (cc=2) -+sgh 000000007FFFFFFF - FFFFFFFF00000000 - 1 = 0000000080000000 (cc=2) -+sgh FFFFFFFFFFFFFFFF - FFFFFFFF00000000 - 1 = 0000000000000000 (cc=0) -+sgh 8000000000000000 - FFFFFFFF00000000 - 1 = 8000000000000001 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - FFFFFFFF00000000 - 1 = 8000000000000000 (cc=3) -+sgh 0000000000000000 - 000000007FFFFFFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 000000007FFFFFFF - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 000000007FFFFFFF - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 000000007FFFFFFF - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 000000007FFFFFFF - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 000000007FFFFFFF - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 000000007FFFFFFF - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 000000007FFFFFFF - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 000000007FFFFFFF - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 000000007FFFFFFF - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 000000007FFFFFFF - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 0000000080000000 - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 0000000080000000 - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 0000000080000000 - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 0000000080000000 - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 0000000080000000 - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 0000000080000000 - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 0000000080000000 - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 0000000080000000 - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 0000000080000000 - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 0000000080000000 - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 0000000080000000 - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 00000000FFFFFFFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 00000000FFFFFFFF - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 00000000FFFFFFFF - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 00000000FFFFFFFF - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 00000000FFFFFFFF - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 00000000FFFFFFFF - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 00000000FFFFFFFF - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 00000000FFFFFFFF - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 00000000FFFFFFFF - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 00000000FFFFFFFF - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 00000000FFFFFFFF - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 000000000000FFFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 000000000000FFFF - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 000000000000FFFF - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 000000000000FFFF - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 000000000000FFFF - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 000000000000FFFF - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 000000000000FFFF - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 000000000000FFFF - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 000000000000FFFF - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 000000000000FFFF - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 000000000000FFFF - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 0000000000007FFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 0000000000007FFF - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 0000000000007FFF - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 0000000000007FFF - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 0000000000007FFF - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 0000000000007FFF - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 0000000000007FFF - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 0000000000007FFF - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 0000000000007FFF - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 0000000000007FFF - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 0000000000007FFF - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 0000000000008000 - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 0000000000008000 - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 0000000000008000 - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 0000000000008000 - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 0000000000008000 - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 0000000000008000 - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 0000000000008000 - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 0000000000008000 - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 0000000000008000 - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 0000000000008000 - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 0000000000008000 - 1 = 7FFFFFFFFFFFFFFF (cc=2) -+sgh 0000000000000000 - 000000000000FFFF - 1 = 0000000000000000 (cc=0) -+sgh 0000000000000001 - 000000000000FFFF - 1 = 0000000000000001 (cc=2) -+sgh 000000000000FFFF - 000000000000FFFF - 1 = 000000000000FFFF (cc=2) -+sgh 0000000000007FFF - 000000000000FFFF - 1 = 0000000000007FFF (cc=2) -+sgh 0000000000008000 - 000000000000FFFF - 1 = 0000000000008000 (cc=2) -+sgh 00000000FFFFFFFF - 000000000000FFFF - 1 = 00000000FFFFFFFF (cc=2) -+sgh 0000000080000000 - 000000000000FFFF - 1 = 0000000080000000 (cc=2) -+sgh 000000007FFFFFFF - 000000000000FFFF - 1 = 000000007FFFFFFF (cc=2) -+sgh FFFFFFFFFFFFFFFF - 000000000000FFFF - 1 = FFFFFFFFFFFFFFFF (cc=1) -+sgh 8000000000000000 - 000000000000FFFF - 1 = 8000000000000000 (cc=1) -+sgh 7FFFFFFFFFFFFFFF - 000000000000FFFF - 1 = 7FFFFFFFFFFFFFFF (cc=2) -diff --git a/none/tests/s390x/sub-z14.vgtest b/none/tests/s390x/sub-z14.vgtest -new file mode 100644 -index 000000000..7b338980a ---- /dev/null -+++ b/none/tests/s390x/sub-z14.vgtest -@@ -0,0 +1,2 @@ -+prog: sub-z14 -+prereq: ../../../tests/s390x_features s390x-mi2 -diff --git a/none/tests/s390x/sub.c b/none/tests/s390x/sub.c -index 6b610ab2d..737c039df 100644 ---- a/none/tests/s390x/sub.c -+++ b/none/tests/s390x/sub.c -@@ -1,7 +1,25 @@ --#include - #include "sub.h" - #include "opcodes.h" - -+#define s(x, y) "s " x ", " y "\n" -+#define sh(x, y) "sh " x ", " y "\n" -+#define sg(x, y) "sg " x ", " y "\n" -+#define sgf(x, y) "sgf " x ", " y "\n" -+#define sl(x, y) "sl " x ", " y "\n" -+#define slg(x, y) "slg " x ", " y "\n" -+#define sgf(x, y) "sgf " x ", " y "\n" -+#define slgf(x, y) "slgf " x ", " y "\n" -+#define sr(x, y) "sr " x ", " y "\n" -+#define sgr(x, y) "sgr " x ", " y "\n" -+#define sgfr(x, y) "sgfr " x ", " y "\n" -+#define slr(x, y) "slr " x ", " y "\n" -+#define slgr(x, y) "slgr " x ", " y "\n" -+#define slgfr(x, y) "slgfr " x ", " y "\n" -+#define slb(x, y) "slb " x ", " y "\n" -+#define slbg(x, y) "slbg " x ", " y "\n" -+#define slbr(x, y) "slbr " x ", " y "\n" -+#define slbgr(x, y) "slbgr " x ", " y "\n" -+ - static void do_regmem_insns(unsigned long s2) - { - memsweep(s, s2, 0); -@@ -33,20 +51,5 @@ static void do_regmem_insns(unsigned long s2) - - int main() - { -- do_regmem_insns(0x0ul); -- do_regmem_insns(0x7ffffffffffffffful); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xfffffffffffffffful); -- do_regmem_insns(0x7fffffff00000000ul); -- do_regmem_insns(0x8000000000000000ul); -- do_regmem_insns(0xffffffff00000000ul); -- do_regmem_insns(0x000000007ffffffful); -- do_regmem_insns(0x0000000080000000ul); -- do_regmem_insns(0x00000000fffffffful); -- do_regmem_insns(0x000000000000fffful); -- do_regmem_insns(0x0000000000007ffful); -- do_regmem_insns(0x0000000000008000ul); -- do_regmem_insns(0x000000000000fffful); -- -- return 0; -+ for_each_m2(do_regmem_insns); - } -diff --git a/none/tests/s390x/sub.h b/none/tests/s390x/sub.h -index 7d4bed792..5caa7e385 100644 ---- a/none/tests/s390x/sub.h -+++ b/none/tests/s390x/sub.h -@@ -7,9 +7,9 @@ volatile long v; - ({ \ - unsigned long tmp = s1; \ - int cc; \ -- asm volatile( "lghi 0," #NOBORROW "\n" \ -+ asm volatile( "lghi 0," #NOBORROW "\n" \ - "aghi 0, 0\n" \ -- #insn " %0, %3\n" \ -+ insn("%0", "%3") \ - "ipm %1\n" \ - "srl %1,28\n" \ - : "+d" (tmp), "=d" (cc) \ -@@ -22,9 +22,9 @@ volatile long v; - ({ \ - unsigned long tmp = s1; \ - int cc; \ -- asm volatile( "lghi 0," #NOBORROW "\n" \ -+ asm volatile( "lghi 0," #NOBORROW "\n" \ - "aghi 0, 0\n" \ -- #insn " %0, %3\n" \ -+ insn("%0", "%3") \ - "ipm %1\n" \ - "srl %1,28\n" \ - : "+d" (tmp), "=d" (cc) \ -@@ -37,7 +37,7 @@ volatile long v; - ({ \ - register unsigned long tmp asm("2") = s1; \ - int cc; \ -- asm volatile( "lghi 0," #NOBORROW "\n" \ -+ asm volatile( "lghi 0," #NOBORROW "\n" \ - "aghi 0, 0\n" \ - insn(2,s2) \ - "ipm %1\n" \ -@@ -125,3 +125,21 @@ volatile long v; - SUB_REG_LDISP(i, 0x8000000000000000ul, s2, carryset); \ - SUB_REG_LDISP(i, 0x7ffffffffffffffful, s2, carryset); \ - }) -+ -+#define for_each_m2(f) \ -+({ \ -+ f(0x0ul); \ -+ f(0x7ffffffffffffffful); \ -+ f(0x8000000000000000ul); \ -+ f(0xfffffffffffffffful); \ -+ f(0x7fffffff00000000ul); \ -+ f(0x8000000000000000ul); \ -+ f(0xffffffff00000000ul); \ -+ f(0x000000007ffffffful); \ -+ f(0x0000000080000000ul); \ -+ f(0x00000000fffffffful); \ -+ f(0x000000000000fffful); \ -+ f(0x0000000000007ffful); \ -+ f(0x0000000000008000ul); \ -+ f(0x000000000000fffful); \ -+}) -diff --git a/tests/s390x_features.c b/tests/s390x_features.c -index 301785fac..ce6c4ab26 100644 ---- a/tests/s390x_features.c -+++ b/tests/s390x_features.c -@@ -249,6 +249,8 @@ static int go(char *feature, char *cpu) - match = facilities[2] & FAC_BIT(0); - } else if (strcmp(feature, "s390x-msa5") == 0 ) { - match = facilities[0] & FAC_BIT(57); /* message security assist 5 facility */ -+ } else if (strcmp(feature, "s390x-mi2") == 0 ) { -+ match = facilities[0] & FAC_BIT(58); - } else { - return 2; // Unrecognised feature. - } - -commit 379c62017f1e573eeb54725bf3a3bc84c5aa9977 -Author: Petar Jovanovic -Date: Fri Jun 14 14:14:05 2019 +0000 - - Fix makefile consistency check - - Add ecag.stdout.exp-z14 to EXTRA_DIST. - -diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am -index a5fbffd1e..c5b07f7a2 100644 ---- a/none/tests/s390x/Makefile.am -+++ b/none/tests/s390x/Makefile.am -@@ -39,7 +39,7 @@ EXTRA_DIST = \ - $(addsuffix .stdout.exp,$(INSN_TESTS)) \ - $(addsuffix .vgtest,$(INSN_TESTS)) \ - ecag.stdout.exp-z10ec ecag.stdout.exp-z196 ecag.stdout.exp-zec12 \ -- ecag.stdout.exp-z13 \ -+ ecag.stdout.exp-z13 ecag.stdout.exp-z14 \ - op00.stderr.exp1 op00.stderr.exp2 op00.vgtest \ - fixbr.vgtest fixbr.stderr.exp fixbr.stdout.exp \ - fpext.vgtest fpext.stderr.exp fpext.stdout.exp \ diff --git a/valgrind-3.15.0-z15.patch b/valgrind-3.15.0-z15.patch deleted file mode 100644 index b456ced..0000000 --- a/valgrind-3.15.0-z15.patch +++ /dev/null @@ -1,126 +0,0 @@ -commit 3a2711c659ac839934f13e0529e14d6c15325383 -Author: Andreas Arnez -Date: Thu Feb 27 15:52:53 2020 +0100 - - s390x: Add CPU model for z15 - - Make the z15 CPU models known to Valgrind. Add test case output for z15 - to the "ecag" test. Also ensure that the facility bits for CPU facilities - unsupported by Valgrind are unset, particularly for the new - deflate-conversion facility. - -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 525e7000c..a470d9f8d 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -377,6 +377,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) - s390_set_facility_bit(addr, S390_FAC_CTREXE, 0); - s390_set_facility_bit(addr, S390_FAC_TREXE, 0); - s390_set_facility_bit(addr, S390_FAC_MSA4, 0); -+ s390_set_facility_bit(addr, S390_FAC_VXE, 0); -+ s390_set_facility_bit(addr, S390_FAC_VXE2, 0); -+ s390_set_facility_bit(addr, S390_FAC_DFLT, 0); - - return cc; - } -diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h -index 359d10809..6da26dcb5 100644 ---- a/VEX/pub/libvex.h -+++ b/VEX/pub/libvex.h -@@ -147,7 +147,8 @@ typedef - #define VEX_S390X_MODEL_Z13S 13 - #define VEX_S390X_MODEL_Z14 14 - #define VEX_S390X_MODEL_Z14_ZR1 15 --#define VEX_S390X_MODEL_UNKNOWN 16 /* always last in list */ -+#define VEX_S390X_MODEL_Z15 16 -+#define VEX_S390X_MODEL_UNKNOWN 17 /* always last in list */ - #define VEX_S390X_MODEL_MASK 0x3F - - #define VEX_HWCAPS_S390X_LDISP (1<<6) /* Long-displacement facility */ -diff --git a/VEX/pub/libvex_s390x_common.h b/VEX/pub/libvex_s390x_common.h -index d945a4472..289421677 100644 ---- a/VEX/pub/libvex_s390x_common.h -+++ b/VEX/pub/libvex_s390x_common.h -@@ -103,6 +103,9 @@ - #define S390_FAC_TREXE 73 // transactional execution - #define S390_FAC_MSA4 77 // message-security-assist 4 - #define S390_FAC_VX 129 // vector facility -+#define S390_FAC_VXE 135 // vector enhancements facility 1 -+#define S390_FAC_VXE2 148 // vector enhancements facility 2 -+#define S390_FAC_DFLT 151 // deflate-conversion facility - - - /*--------------------------------------------------------------*/ -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 672a02124..0fd1d21c7 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -581,6 +581,8 @@ static UInt VG_(get_machine_model)(void) - { "2965", VEX_S390X_MODEL_Z13S }, - { "3906", VEX_S390X_MODEL_Z14 }, - { "3907", VEX_S390X_MODEL_Z14_ZR1 }, -+ { "8561", VEX_S390X_MODEL_Z15 }, -+ { "8562", VEX_S390X_MODEL_Z15 }, - }; - - Int model, n, fh; -diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am -index c5b07f7a2..a0fb92ef5 100644 ---- a/none/tests/s390x/Makefile.am -+++ b/none/tests/s390x/Makefile.am -@@ -39,7 +39,7 @@ EXTRA_DIST = \ - $(addsuffix .stdout.exp,$(INSN_TESTS)) \ - $(addsuffix .vgtest,$(INSN_TESTS)) \ - ecag.stdout.exp-z10ec ecag.stdout.exp-z196 ecag.stdout.exp-zec12 \ -- ecag.stdout.exp-z13 ecag.stdout.exp-z14 \ -+ ecag.stdout.exp-z13 ecag.stdout.exp-z14 ecag.stdout.exp-z15 \ - op00.stderr.exp1 op00.stderr.exp2 op00.vgtest \ - fixbr.vgtest fixbr.stderr.exp fixbr.stdout.exp \ - fpext.vgtest fpext.stderr.exp fpext.stdout.exp \ -diff --git a/none/tests/s390x/ecag.stdout.exp-z15 b/none/tests/s390x/ecag.stdout.exp-z15 -new file mode 100644 -index 000000000..b98d81b78 ---- /dev/null -+++ b/none/tests/s390x/ecag.stdout.exp-z15 -@@ -0,0 +1,28 @@ -+L1 topology: separate data and instruction; private -+L1 cache line size data: 256 -+L1 cache line size insn: 256 -+L1 total cachesize data: 131072 -+L1 total cachesize insn: 131072 -+L1 set. assoc. data: 8 -+L1 set. assoc. insn: 8 -+L2 topology: separate data and instruction; private -+L2 cache line size data: 256 -+L2 cache line size insn: 256 -+L2 total cachesize data: 4194304 -+L2 total cachesize insn: 4194304 -+L2 set. assoc. data: 8 -+L2 set. assoc. insn: 8 -+L3 topology: unified data and instruction; shared -+L3 cache line size data: 256 -+L3 cache line size insn: 256 -+L3 total cachesize data: 268435456 -+L3 total cachesize insn: 268435456 -+L3 set. assoc. data: 32 -+L3 set. assoc. insn: 32 -+L4 topology: unified data and instruction; shared -+L4 cache line size data: 256 -+L4 cache line size insn: 256 -+L4 total cachesize data: 1006632960 -+L4 total cachesize insn: 1006632960 -+L4 set. assoc. data: 60 -+L4 set. assoc. insn: 60 -diff --git a/tests/s390x_features.c b/tests/s390x_features.c -index baa349311..25b98f3a3 100644 ---- a/tests/s390x_features.c -+++ b/tests/s390x_features.c -@@ -116,6 +116,8 @@ model_info models[] = { - { "2965", "z13s" }, - { "3906", "z14" }, - { "3907", "z14 ZR1"}, -+ { "8561", "z15" }, -+ { "8562", "z15" }, - }; - - diff --git a/valgrind-3.15.0-pkglibexecdir.patch b/valgrind-3.16.0-pkglibexecdir.patch similarity index 100% rename from valgrind-3.15.0-pkglibexecdir.patch rename to valgrind-3.16.0-pkglibexecdir.patch diff --git a/valgrind-3.15.0-some-Wl-z-now.patch b/valgrind-3.16.0-some-Wl-z-now.patch similarity index 100% rename from valgrind-3.15.0-some-Wl-z-now.patch rename to valgrind-3.16.0-some-Wl-z-now.patch diff --git a/valgrind-3.15.0-some-stack-protector.patch b/valgrind-3.16.0-some-stack-protector.patch similarity index 100% rename from valgrind-3.15.0-some-stack-protector.patch rename to valgrind-3.16.0-some-stack-protector.patch diff --git a/valgrind.spec b/valgrind.spec index 0d803c4..513a8ae 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.15.0 -Release: 20%{?dist} +Version: 3.16.0 +Release: 0.2.GIT%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.GIT.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -85,94 +85,13 @@ Patch3: valgrind-3.9.0-ldso-supp.patch # We want all executables and libraries in libexec instead of lib # so they are only available for valgrind usage itself and so the # same directory is used independent of arch. -Patch4: valgrind-3.15.0-pkglibexecdir.patch - -# KDE#398649 s390x z13 support doesn't build with older gcc/binutils -# Disable z13 support (on rhel6) -Patch5: valgrind-3.15.0-disable-s390x-z13.patch +Patch4: valgrind-3.16.0-pkglibexecdir.patch # Add some stack-protector -Patch6: valgrind-3.15.0-some-stack-protector.patch - -# KDE#406561 mcinfcallWSRU gdbserver_test fails on ppc64 -Patch7: valgrind-3.15.0-ppc64-filter_gdb.patch - -# KDE#407218 Add support for the copy_file_range syscall -Patch8: valgrind-3.15.0-copy_file_range.patch - -# KDE#407307 Intercept stpcpy also in ld.so for arm64 -Patch9: valgrind-3.15.0-arm64-ld-stpcpy.patch - -# commit 59784c aarch64 (arm64) isn't a supported architecture for exp-sgcheck. -Patch10: valgrind-3.15.0-exp-sgcheck-no-aarch64.patch - -# commit 917e42 Make memcheck/tests/arm64-linux/scalar work under root -Patch11: valgrind-3.15.0-scalar-arm64.patch - -# commit abc09f Make memcheck/tests/x86-linux/scalar test work under root. -Patch12: valgrind-3.15.0-scalar-x86.patch - -# KDE#407764 s390x: drd fails on z13 due to function wrapping issue -Patch13: valgrind-3.15.0-s390x-wrap-drd.patch +Patch5: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. -Patch14: valgrind-3.15.0-some-Wl-z-now.patch - -# KDE#408009 Expose rdrand and f16c even on avx if host cpu supports them -Patch15: valgrind-3.15.0-avx-rdrand-f16c.patch - -# KDE#408091 Missing pkey syscalls -Patch16: valgrind-3.15.0-pkey.patch - -# KDE#408414 Add support for preadv2 and pwritev2 syscalls -Patch17: valgrind-3.15.0-preadv2-pwritev2.patch - -# Upstream commit 9616e9bc9a1950f70ab1abd1c6ca9abc3f26eb7f -Patch18: valgrind-3.15.0-arm-membarrier.patch - -# KDE#404406 s390x: z14 miscellaneous instructions not implemented -Patch19: valgrind-3.15.0-z14-misc.patch - -# KDE#405201 Incorrect size of struct vki_siginfo on 64-bit Linux architectures -Patch20: valgrind-3.15.0-ptrace-siginfo.patch - -# RHBZ#1794482 guest_s390_defs.h:291: multiple definition of `s390x_vec_op_t' -Patch21: valgrind-3.15.0-gcc-10-typedef-enum.patch - -# GCC10 build error bad asm on i686 -# Upstream commit 2dab3249867615055a680cad7fccb22411587579 -Patch22: valgrind-3.15.0-gcc-10-i686-asm-test.patch - -# KDE#416667 gcc10 ppc64le impossible constraint in 'asm' in test_isa -Patch23: valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch - -# KDE#416301 s390x: "compare and signal" not supported -Patch24: valgrind-3.15.0-s390x-compare-and-signal.patch - -# KDE#417452 s390_insn_store_emit: dst->tag for HRcVec128 -Patch25: valgrind-3.15.0-s390x-HRcVec128.patch - -# KDE#417578 - Add suppressions for glibc DTV leaks -Patch26: valgrind-3.15.0-glibc-dtv-supp.patch - -# KDE#416760 Assertion 'VG_IS_16_ALIGNED(sizeof(struct rt_sigframe))' failed -# KDE#417427 commit to fix vki_siginfo_t definition created errors on PPC64 -Patch27: valgrind-3.15.0-ppc64-sigframe.patch - -# KDE#416753 new 32bit time syscalls for 2038+ -Patch28: valgrind-3.15.0-time64.patch - -# Upstream commit 2d040ce2c7fd328b4e8b0c2363ebe0c2ea2cbc9f -Patch29: valgrind-3.15.0-arm-preadv2-pwritev2.patch - -# Upstream commit ce094ba912b1fb1539242e4d6b2a76c513a3d132 -Patch30: valgrind-3.15.0-avx_estimate_insn-test.patch - -# Upstream commit fe6805efc1b6db0cfa5f1cd5fb1854775cbfa31a -Patch31: valgrind-3.15.0-gcc-10-x86-amd64-asm-test.patch - -# Upstream commit 3a2711c659ac839934f13e0529e14d6c15325383 -Patch32: valgrind-3.15.0-z15.patch +Patch6: valgrind-3.16.0-some-Wl-z-now.patch BuildRequires: glibc-devel @@ -289,60 +208,13 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.GIT %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 -# Disable s390x z13 support on old rhel, binutils is just too old. -%if 0%{?rhel} == 6 -%patch5 -p1 -%endif - -# Old rhel gcc doesn't have -fstack-protector-strong. -%if 0%{?fedora} || 0%{?rhel} >= 7 -%patch6 -p1 -%endif - -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 - -# This depends on patch6, old rhel gcc doesn't have -fstack-protector-strong. -%if 0%{?fedora} || 0%{?rhel} >= 7 -%patch14 -p1 -%endif - -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 - -# Don't add s390x z14 support on old rhel, binutils is just too old. -%if 0%{?fedora} || 0%{?rhel} >= 7 -%patch19 -p1 -%endif - -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 - %build # Some patches (might) touch Makefile.am or configure.ac files. @@ -562,6 +434,13 @@ fi %endif %changelog +* Fri May 1 2020 Mark Wielaard - 3.16.0-0.2.GIT +- Update to upstream 3.16.0 branch point (commit 55cdb7c4e) + +* Fri Apr 17 2020 Mark Wielaard - 3.16.0-0.1.GIT +- Update to upstream 3.16.0-GIT (commit 52d02fe23) + - Drop all streamed patches. + * Wed Mar 4 2020 Mark Wielaard - 3.15.0-20 - Add valgrind-3.15.0-z15.patch From f98cd63e1cc2d7c217473142f762200195a5f15a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 19 May 2020 15:13:31 +0200 Subject: [PATCH 002/196] 3.16.0-0.3.RC2 - Update to upstream 3.16.0 RC2 --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 87467ef..ba94d54 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ /valgrind-3.15.0.RC2.tar.bz2 /valgrind-3.15.0.tar.bz2 /valgrind-3.16.0.GIT.tar.bz2 +/valgrind-3.16.0.RC2.tar.bz2 diff --git a/sources b/sources index 79d281e..8ee9be9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.16.0.GIT.tar.bz2) = 74ed4e090ff3412458fef1b1d5c451d71551545234cff8328a2db9cd7f2b3feeba4fc53121844afafaa1f5fb0334df33446d15dabb0fa9136840d5dac9282f12 +SHA512 (valgrind-3.16.0.RC2.tar.bz2) = ff8ab11d515791a4b4e84c2d30d8f9ebf29731c6df16dbd558d93291ff54bfb2e73cfd0e10bd1fb5c9c77c11b60252c2ae1e6ca5bf903bea5fb44066742b5ef0 diff --git a/valgrind.spec b/valgrind.spec index 513a8ae..17be24f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.0 -Release: 0.2.GIT%{?dist} +Release: 0.3.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.GIT.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -208,7 +208,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.GIT +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 %patch1 -p1 %patch2 -p1 @@ -434,6 +434,9 @@ fi %endif %changelog +* Tue May 19 2020 Mark Wielaard - 3.16.0-0.3.RC2 +- Update to upstream 3.16.0 RC2 + * Fri May 1 2020 Mark Wielaard - 3.16.0-0.2.GIT - Update to upstream 3.16.0 branch point (commit 55cdb7c4e) From 94292abea9be7b69267d9a81b920a199b6433307 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 19 May 2020 15:58:42 +0200 Subject: [PATCH 003/196] 3.16.0-0.4.RC2 - Add docbook-dtds to BuildRequires. --- valgrind.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 17be24f..73f0c5e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.0 -Release: 0.3.RC2%{?dist} +Release: 0.4.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -119,6 +119,9 @@ BuildRequires: perl(Getopt::Long) BuildRequires: automake BuildRequires: autoconf +# For make check validating the documentation +BuildRequires: docbook-dtds + %{?scl:Requires:%scl_runtime} # We need to fixup selinux file context when doing a scl build. @@ -434,6 +437,9 @@ fi %endif %changelog +* Tue May 19 2020 Mark Wielaard - 3.16.0-0.4.RC2 +- Add docbook-dtds to BuildRequires. + * Tue May 19 2020 Mark Wielaard - 3.16.0-0.3.RC2 - Update to upstream 3.16.0 RC2 From 85d3012e02234b9c0e6839c9eb724a9e71c8d1d8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 27 May 2020 22:01:01 +0200 Subject: [PATCH 004/196] 3.16.0-1 - Update to upstream 3.16.0 final. --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index ba94d54..bd162ca 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ /valgrind-3.15.0.tar.bz2 /valgrind-3.16.0.GIT.tar.bz2 /valgrind-3.16.0.RC2.tar.bz2 +/valgrind-3.16.0.tar.bz2 diff --git a/sources b/sources index 8ee9be9..5f318d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.16.0.RC2.tar.bz2) = ff8ab11d515791a4b4e84c2d30d8f9ebf29731c6df16dbd558d93291ff54bfb2e73cfd0e10bd1fb5c9c77c11b60252c2ae1e6ca5bf903bea5fb44066742b5ef0 +SHA512 (valgrind-3.16.0.tar.bz2) = 6c82a0121e0ffde79f84943ea0f5791159ad3e37a490c1a18ff23f41cd4de62b62110e9c4d48b95b06d542f2a6d638492ecaeba9fed48f7e909e959aa4b4856d diff --git a/valgrind.spec b/valgrind.spec index 73f0c5e..9ca2d76 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.0 -Release: 0.4.RC2%{?dist} +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -211,7 +211,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 %patch2 -p1 @@ -437,6 +437,9 @@ fi %endif %changelog +* Wed May 27 2020 Mark Wielaard - 3.16.0-1 +- Update to upstream valgrind 3.16.0 final. + * Tue May 19 2020 Mark Wielaard - 3.16.0-0.4.RC2 - Add docbook-dtds to BuildRequires. From 65f97c3deae4f30bbc3b27d24e2550469588084b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 28 May 2020 20:10:26 +0200 Subject: [PATCH 005/196] 3.16.0-2 - Apply stack-protector and -Wl,z,now patches. --- valgrind.spec | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/valgrind.spec b/valgrind.spec index 9ca2d76..2695237 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -218,6 +218,12 @@ Valgrind User Manual for details. %patch3 -p1 %patch4 -p1 +# Old rhel gcc doesn't have -fstack-protector-strong. +%if 0%{?fedora} || 0%{?rhel} >= 7 +%patch5 -p1 +%patch6 -p1 +%endif + %build # Some patches (might) touch Makefile.am or configure.ac files. @@ -437,6 +443,9 @@ fi %endif %changelog +* Wed May 27 2020 Mark Wielaard - 3.16.0-2 +- Apply stack-protector and -Wl,z,now patches. + * Wed May 27 2020 Mark Wielaard - 3.16.0-1 - Update to upstream valgrind 3.16.0 final. From 2f27a7a930677b50f9b91b06c24d9c0ae47e1c96 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 28 May 2020 20:25:09 +0200 Subject: [PATCH 006/196] valgrind-3.16.0-2 --- valgrind.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 2695237..6128b10 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ From a5301888c28a4ca3135b728ff8065121af0b4c1b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 19 Jun 2020 10:29:02 +0200 Subject: [PATCH 007/196] 3.16.0-3 - Add valgrind-3.16.0-ppc-L-field.patch --- valgrind-3.16.0-ppc-L-field.patch | 29 +++++++++++++++++++++++++++++ valgrind.spec | 10 +++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.0-ppc-L-field.patch diff --git a/valgrind-3.16.0-ppc-L-field.patch b/valgrind-3.16.0-ppc-L-field.patch new file mode 100644 index 0000000..ee1d225 --- /dev/null +++ b/valgrind-3.16.0-ppc-L-field.patch @@ -0,0 +1,29 @@ +commit fb6f7abcbc92506d302fb18a2c5fc853d2929248 +Author: Carl Love +Date: Tue Jun 9 10:42:03 2020 -0500 + + Power PC Fix extraction of the L field for sync instruction + + The L field is currently a two bit[22:21] field in ISA 3.0. The size of the + L field has changed over time. + + Currently the ISA 3.0 Valgrind sync instruction support code sets the + flag_L for the instruction L field to a five bit value that includes bits + that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0 + to only setting flag_L the specified two bits. + + Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677 + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 582c59ec0..c4965a19e 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -8777,7 +8777,7 @@ static Bool dis_memsync ( UInt theInstr ) + /* X-Form, XL-Form */ + UChar opc1 = ifieldOPC(theInstr); + UInt b11to25 = IFIELD(theInstr, 11, 15); +- UChar flag_L = ifieldRegDS(theInstr); ++ UChar flag_L = IFIELD(theInstr, 21, 2); //ISA 3.0 + UInt b11to20 = IFIELD(theInstr, 11, 10); + UInt M0 = IFIELD(theInstr, 11, 5); + UChar rD_addr = ifieldRegDS(theInstr); diff --git a/valgrind.spec b/valgrind.spec index 6128b10..daf60c6 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -93,6 +93,9 @@ Patch5: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch6: valgrind-3.16.0-some-Wl-z-now.patch +# KDE#422677 PPC sync instruction L field should only be 2 bits in ISA 3.0 +Patch7: valgrind-3.16.0-ppc-L-field.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -224,6 +227,8 @@ Valgrind User Manual for details. %patch6 -p1 %endif +%patch7 -p1 + %build # Some patches (might) touch Makefile.am or configure.ac files. @@ -443,6 +448,9 @@ fi %endif %changelog +* Fri Jun 19 2020 Mark Wielaard - 3.16.0-3 +- Add valgrind-3.16.0-ppc-L-field.patch + * Wed May 27 2020 Mark Wielaard - 3.16.0-2 - Apply stack-protector and -Wl,z,now patches. From 0bfb6d5ba49f71dbc6147cf1ba6129fc389abe8c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 23 Jun 2020 13:09:53 +0200 Subject: [PATCH 008/196] 3.16.1-1 - Update to upstream valgrind 3.16.1. --- .gitignore | 1 + sources | 2 +- valgrind-3.16.0-ppc-L-field.patch | 29 ----------------------------- valgrind.spec | 12 +++++------- 4 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 valgrind-3.16.0-ppc-L-field.patch diff --git a/.gitignore b/.gitignore index bd162ca..3a77629 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ /valgrind-3.16.0.GIT.tar.bz2 /valgrind-3.16.0.RC2.tar.bz2 /valgrind-3.16.0.tar.bz2 +/valgrind-3.16.1.tar.bz2 diff --git a/sources b/sources index 5f318d3..0d18846 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.16.0.tar.bz2) = 6c82a0121e0ffde79f84943ea0f5791159ad3e37a490c1a18ff23f41cd4de62b62110e9c4d48b95b06d542f2a6d638492ecaeba9fed48f7e909e959aa4b4856d +SHA512 (valgrind-3.16.1.tar.bz2) = 2a4173efe1b6facdd2f5c5ee8ed006704168eba1813736fccc8191d60363afd96197512cf42037e65f18d4ddd49adc74a54c47210df216fba3c46bf68ef0f950 diff --git a/valgrind-3.16.0-ppc-L-field.patch b/valgrind-3.16.0-ppc-L-field.patch deleted file mode 100644 index ee1d225..0000000 --- a/valgrind-3.16.0-ppc-L-field.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit fb6f7abcbc92506d302fb18a2c5fc853d2929248 -Author: Carl Love -Date: Tue Jun 9 10:42:03 2020 -0500 - - Power PC Fix extraction of the L field for sync instruction - - The L field is currently a two bit[22:21] field in ISA 3.0. The size of the - L field has changed over time. - - Currently the ISA 3.0 Valgrind sync instruction support code sets the - flag_L for the instruction L field to a five bit value that includes bits - that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0 - to only setting flag_L the specified two bits. - - Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677 - -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index 582c59ec0..c4965a19e 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -8777,7 +8777,7 @@ static Bool dis_memsync ( UInt theInstr ) - /* X-Form, XL-Form */ - UChar opc1 = ifieldOPC(theInstr); - UInt b11to25 = IFIELD(theInstr, 11, 15); -- UChar flag_L = ifieldRegDS(theInstr); -+ UChar flag_L = IFIELD(theInstr, 21, 2); //ISA 3.0 - UInt b11to20 = IFIELD(theInstr, 11, 10); - UInt M0 = IFIELD(theInstr, 11, 5); - UChar rD_addr = ifieldRegDS(theInstr); diff --git a/valgrind.spec b/valgrind.spec index daf60c6..31c9d90 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.16.0 -Release: 3%{?dist} +Version: 3.16.1 +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -93,9 +93,6 @@ Patch5: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch6: valgrind-3.16.0-some-Wl-z-now.patch -# KDE#422677 PPC sync instruction L field should only be 2 bits in ISA 3.0 -Patch7: valgrind-3.16.0-ppc-L-field.patch - BuildRequires: glibc-devel %if %{build_openmpi} @@ -227,8 +224,6 @@ Valgrind User Manual for details. %patch6 -p1 %endif -%patch7 -p1 - %build # Some patches (might) touch Makefile.am or configure.ac files. @@ -448,6 +443,9 @@ fi %endif %changelog +* Tue Jun 23 2020 Mark Wielaard - 3.16.1-1 +- Update to upstream valgrind 3.16.1. + * Fri Jun 19 2020 Mark Wielaard - 3.16.0-3 - Add valgrind-3.16.0-ppc-L-field.patch From df2573b83138c8f37934dba226ba9a780a2f5b9d Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 8 Jul 2020 13:39:11 -0600 Subject: [PATCH 009/196] Disable LTO --- valgrind.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 31c9d90..90f136e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -225,6 +225,10 @@ Valgrind User Manual for details. %endif %build +# LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto +# configure time option, but that doesn't seem to help. +# Disable LTO for now. +%define _lto_cflags %{nil} # Some patches (might) touch Makefile.am or configure.ac files. # Just always autoreconf so we don't need patches to prebuild files. @@ -443,6 +447,9 @@ fi %endif %changelog +* Wed July 8 2020 Jeff Law - 3.16.1-2 +- Disable LTO + * Tue Jun 23 2020 Mark Wielaard - 3.16.1-1 - Update to upstream valgrind 3.16.1. From 2731a32f071ccb4b78eb057f0a0d753c956508b9 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Jul 2020 23:07:26 +0200 Subject: [PATCH 010/196] Fix date in changelog --- valgrind.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 90f136e..ff5fb43 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -447,7 +447,7 @@ fi %endif %changelog -* Wed July 8 2020 Jeff Law - 3.16.1-2 +* Wed Jul 8 2020 Jeff Law - 3.16.1-2 - Disable LTO * Tue Jun 23 2020 Mark Wielaard - 3.16.1-1 From 8befd4367eade205f36d37b0bc50e2b032c27d7d Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 14 Jul 2020 21:26:23 +0000 Subject: [PATCH 011/196] Use make macros https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro --- valgrind.spec | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index ff5fb43..40ad728 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -294,11 +294,11 @@ export LDFLAGS %{only_arch} \ GDB=%{_bindir}/gdb -make %{?_smp_mflags} +%make_build %install rm -rf $RPM_BUILD_ROOT -make DESTDIR=$RPM_BUILD_ROOT install +%make_install mkdir docs/installed mv $RPM_BUILD_ROOT%{_datadir}/doc/valgrind/* docs/installed/ rm -f docs/installed/*.ps @@ -360,7 +360,7 @@ cat /proc/cpuinfo %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} # Make sure no extra CFLAGS, CXXFLAGS or LDFLAGS leak through, # the testsuite sets all flags necessary. See also configure above. -make %{?_smp_mflags} CFLAGS="" CXXFLAGS="" LDFLAGS="" check +%make_build CFLAGS="" CXXFLAGS="" LDFLAGS="" check # Workaround https://bugzilla.redhat.com/show_bug.cgi?id=1434601 # for gdbserver tests. @@ -447,6 +447,10 @@ fi %endif %changelog +* Tue Jul 14 2020 Tom Stellard - 3.16.1-3 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Wed Jul 8 2020 Jeff Law - 3.16.1-2 - Disable LTO From 0d4d18b277398876e54ec777b407bd413ddb3a78 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 28 Jul 2020 00:11:24 +0200 Subject: [PATCH 012/196] Add valgrind-3.16.1-REX-prefix-JMP.patch --- valgrind-3.16.1-REX-prefix-JMP.patch | 38 ++++++++++++++++++++++++++++ valgrind.spec | 8 ++++++ 2 files changed, 46 insertions(+) create mode 100644 valgrind-3.16.1-REX-prefix-JMP.patch diff --git a/valgrind-3.16.1-REX-prefix-JMP.patch b/valgrind-3.16.1-REX-prefix-JMP.patch new file mode 100644 index 0000000..f780fb1 --- /dev/null +++ b/valgrind-3.16.1-REX-prefix-JMP.patch @@ -0,0 +1,38 @@ +commit e2dec0ff9b1e071779bee2c4e6fc82f8194b1c1d +Author: Mark Wielaard +Date: Sun Jul 26 21:17:23 2020 +0200 + + Handle REX prefixed JMP instruction. + + The NET Core runtime might generate a JMP with a REX prefix. + For Jv (32bit offset) and Jb (8bit offset) this is valid. + Prefixes that change operand size are ignored for such JMPs. + So remove the check for sz == 4 and force sz = 4 for Jv. + + https://bugs.kde.org/show_bug.cgi?id=422174 + +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index fadf47d41..7888132eb 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -21392,8 +21392,8 @@ Long dis_ESC_NONE ( + + case 0xE9: /* Jv (jump, 16/32 offset) */ + if (haveF3(pfx)) goto decode_failure; +- if (sz != 4) +- goto decode_failure; /* JRS added 2004 July 11 */ ++ sz = 4; /* Prefixes that change operand size are ignored for this ++ instruction. Operand size is forced to 32bit. */ + if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */ + d64 = (guest_RIP_bbstart+delta+sz) + getSDisp(sz,delta); + delta += sz; +@@ -21404,8 +21404,7 @@ Long dis_ESC_NONE ( + + case 0xEB: /* Jb (jump, byte offset) */ + if (haveF3(pfx)) goto decode_failure; +- if (sz != 4) +- goto decode_failure; /* JRS added 2004 July 11 */ ++ /* Prefixes that change operand size are ignored for this instruction. */ + if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */ + d64 = (guest_RIP_bbstart+delta+1) + getSDisp8(delta); + delta++; diff --git a/valgrind.spec b/valgrind.spec index 40ad728..141f77f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -93,6 +93,9 @@ Patch5: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch6: valgrind-3.16.0-some-Wl-z-now.patch +# KDE#422174 unhandled instruction bytes: 0x48 0xE9 (REX prefix JMP instr) +Patch7: valgrind-3.16.1-REX-prefix-JMP.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -224,6 +227,8 @@ Valgrind User Manual for details. %patch6 -p1 %endif +%patch7 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -447,6 +452,9 @@ fi %endif %changelog +* Mon Jul 27 2020 Mark Wielaard +- Add valgrind-3.16.1-REX-prefix-JMP.patch + * Tue Jul 14 2020 Tom Stellard - 3.16.1-3 - Use make macros - https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro From bf5c38fcec550730e7cd10be580eff6f1760bcfb Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 28 Jul 2020 00:17:06 +0200 Subject: [PATCH 013/196] Add valgrind-3.16.1-epoll.patch --- valgrind-3.16.1-epoll.patch | 86 +++++++++++++++++++++++++++++++++++++ valgrind.spec | 5 +++ 2 files changed, 91 insertions(+) create mode 100644 valgrind-3.16.1-epoll.patch diff --git a/valgrind-3.16.1-epoll.patch b/valgrind-3.16.1-epoll.patch new file mode 100644 index 0000000..5bb1808 --- /dev/null +++ b/valgrind-3.16.1-epoll.patch @@ -0,0 +1,86 @@ +commit f326d68d762edf4b0e9604daa446b6f8ca25725a +Author: Mark Wielaard +Date: Sun Jul 26 22:40:22 2020 +0200 + + epoll_ctl warns for uninitialized padding on non-amd64 64bit arches + + struct vki_epoll_event is packed on x86_64, but not on other 64bit + arches. This means that on 64bit arches there can be padding in the + epoll_event struct. Seperately the data field is only used by user + space (which might not set the data field if it doesn't need to). + + Only check the events field on epoll_ctl. But assume both events + and data are both written to by epoll_[p]wait (exclude padding). + + https://bugs.kde.org/show_bug.cgi?id=422623 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 5b5b7eee6..929a4d9af 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -2099,8 +2099,29 @@ PRE(sys_epoll_ctl) + SARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), SARG3, ARG4); + PRE_REG_READ4(long, "epoll_ctl", + int, epfd, int, op, int, fd, struct vki_epoll_event *, event); +- if (ARG2 != VKI_EPOLL_CTL_DEL) +- PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct vki_epoll_event) ); ++ if (ARG2 != VKI_EPOLL_CTL_DEL) { ++ /* Just check the events field, the data field is for user space and ++ unused by the kernel. */ ++ struct vki_epoll_event *event = (struct vki_epoll_event *) ARG4; ++ PRE_MEM_READ( "epoll_ctl(event)", (Addr) &event->events, ++ sizeof(__vki_u32) ); ++ } ++} ++ ++/* RES event records have been written (exclude padding). */ ++static void epoll_post_helper ( ThreadId tid, SyscallArgs* arrghs, ++ SyscallStatus* status ) ++{ ++ vg_assert(SUCCESS); ++ if (RES > 0) { ++ Int i; ++ struct vki_epoll_event **events = (struct vki_epoll_event**)(Addr)ARG2; ++ for (i = 0; i < RES; i++) { ++ /* Assume both events and data are set (data is user space only). */ ++ POST_FIELD_WRITE(events[i]->events); ++ POST_FIELD_WRITE(events[i]->data); ++ } ++ } + } + + PRE(sys_epoll_wait) +@@ -2111,13 +2132,12 @@ PRE(sys_epoll_wait) + PRE_REG_READ4(long, "epoll_wait", + int, epfd, struct vki_epoll_event *, events, + int, maxevents, int, timeout); ++ /* Assume all (maxevents) events records should be (fully) writable. */ + PRE_MEM_WRITE( "epoll_wait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); + } + POST(sys_epoll_wait) + { +- vg_assert(SUCCESS); +- if (RES > 0) +- POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ; ++ epoll_post_helper (tid, arrghs, status); + } + + PRE(sys_epoll_pwait) +@@ -2130,15 +2150,14 @@ PRE(sys_epoll_pwait) + int, epfd, struct vki_epoll_event *, events, + int, maxevents, int, timeout, vki_sigset_t *, sigmask, + vki_size_t, sigsetsize); ++ /* Assume all (maxevents) events records should be (fully) writable. */ + PRE_MEM_WRITE( "epoll_pwait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); + if (ARG5) + PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) ); + } + POST(sys_epoll_pwait) + { +- vg_assert(SUCCESS); +- if (RES > 0) +- POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ; ++ epoll_post_helper (tid, arrghs, status); + } + + PRE(sys_eventfd) diff --git a/valgrind.spec b/valgrind.spec index 141f77f..0245617 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -96,6 +96,9 @@ Patch6: valgrind-3.16.0-some-Wl-z-now.patch # KDE#422174 unhandled instruction bytes: 0x48 0xE9 (REX prefix JMP instr) Patch7: valgrind-3.16.1-REX-prefix-JMP.patch +# KDE#422623 epoll_ctl warns for uninit padding on non-amd64 64bit arches +Patch8: valgrind-3.16.1-epoll.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -228,6 +231,7 @@ Valgrind User Manual for details. %endif %patch7 -p1 +%patch8 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -454,6 +458,7 @@ fi %changelog * Mon Jul 27 2020 Mark Wielaard - Add valgrind-3.16.1-REX-prefix-JMP.patch +- Add valgrind-3.16.1-epoll.patch * Tue Jul 14 2020 Tom Stellard - 3.16.1-3 - Use make macros From 5aafd964b233230ff8ede0a0115c5b90d60a6455 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 28 Jul 2020 00:26:08 +0200 Subject: [PATCH 014/196] Add valgrind-3.16.1-sched_getsetattr.patch --- valgrind-3.16.1-sched_getsetattr.patch | 201 +++++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 206 insertions(+) create mode 100644 valgrind-3.16.1-sched_getsetattr.patch diff --git a/valgrind-3.16.1-sched_getsetattr.patch b/valgrind-3.16.1-sched_getsetattr.patch new file mode 100644 index 0000000..b95267d --- /dev/null +++ b/valgrind-3.16.1-sched_getsetattr.patch @@ -0,0 +1,201 @@ +commit a53adb79711ccfc76a4ee32b20253045cdab55c7 +Author: Mark Wielaard +Date: Mon Jul 27 16:36:17 2020 +0200 + + Handle linux syscalls sched_getattr and sched_setattr + + The only "special" thing about these syscalls is that the given + struct sched_attr determines its own size for future expansion. + + Original fix by "ISHIKAWA,chiaki" + + https://bugs.kde.org/show_bug.cgi?id=369029 + +diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h +index cdc73c1e6..eb0b320ca 100644 +--- a/coregrind/m_syswrap/priv_syswrap-linux.h ++++ b/coregrind/m_syswrap/priv_syswrap-linux.h +@@ -227,6 +227,8 @@ DECL_TEMPLATE(linux, sys_fremovexattr); + // syscalls. + DECL_TEMPLATE(linux, sys_sched_setparam); + DECL_TEMPLATE(linux, sys_sched_getparam); ++DECL_TEMPLATE(linux, sys_sched_setattr); ++DECL_TEMPLATE(linux, sys_sched_getattr); + DECL_TEMPLATE(linux, sys_sched_setscheduler); + DECL_TEMPLATE(linux, sys_sched_getscheduler); + DECL_TEMPLATE(linux, sys_sched_yield); +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 28d90135a..d6f3eb910 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -846,9 +846,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 311 + LINX_(__NR_kcmp, sys_kcmp), // 312 + LINX_(__NR_finit_module, sys_finit_module), // 313 +-// LIN__(__NR_sched_setattr, sys_ni_syscall), // 314 +- +-// LIN__(__NR_sched_getattr, sys_ni_syscall), // 315 ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 314 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 315 + LINX_(__NR_renameat2, sys_renameat2), // 316 + // LIN__(__NR_seccomp, sys_ni_syscall), // 317 + LINXY(__NR_getrandom, sys_getrandom), // 318 +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 579542785..70700e53f 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1009,6 +1009,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 376 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 377 + ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 380 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 381 + LINX_(__NR_renameat2, sys_renameat2), // 382 + + LINXY(__NR_getrandom, sys_getrandom), // 384 +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 81e01456f..acca02442 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -806,8 +806,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271 + LINX_(__NR_kcmp, sys_kcmp), // 272 + LINX_(__NR_finit_module, sys_finit_module), // 273 +- // (__NR_sched_setattr, sys_ni_syscall), // 274 +- // (__NR_sched_getattr, sys_ni_syscall), // 275 ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 274 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 275 + LINX_(__NR_renameat2, sys_renameat2), // 276 + // (__NR_seccomp, sys_ni_syscall), // 277 + LINXY(__NR_getrandom, sys_getrandom), // 278 +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 5b5b7eee6..56be3032d 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -3677,6 +3677,41 @@ POST(sys_sched_getparam) + POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) ); + } + ++PRE(sys_sched_setattr) ++{ ++ struct vki_sched_attr *attr; ++ PRINT("sched_setattr ( %ld, %#" FMT_REGWORD "x, %#" ++ FMT_REGWORD "x )", SARG1, ARG2, ARG3 ); ++ PRE_REG_READ3(long, "sched_setattr", ++ vki_pid_t, pid, struct sched_attr *, p, unsigned int, flags); ++ /* We need to be able to read at least the size field. */ ++ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) ); ++ attr = (struct vki_sched_attr *)(Addr)ARG2; ++ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t))) ++ PRE_MEM_READ( "sched_setattr(attr)", (Addr)attr, attr->size); ++} ++ ++PRE(sys_sched_getattr) ++{ ++ struct vki_sched_attr *attr; ++ PRINT("sched_getattr ( %ld, %#" FMT_REGWORD "x, %ld, %#" ++ FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4 ); ++ PRE_REG_READ4(long, "sched_getattr", ++ vki_pid_t, pid, struct sched_attr *, p, ++ unsigned int, size, unsigned int, flags); ++ /* We need to be able to read at least the size field. */ ++ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) ); ++ /* And the kernel needs to be able to write to the whole struct size. */ ++ attr = (struct vki_sched_attr *)(Addr)ARG2; ++ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t))) ++ PRE_MEM_WRITE( "sched_setattr(attr)", (Addr)attr, attr->size); ++} ++POST(sys_sched_getattr) ++{ ++ struct vki_sched_attr *attr = (struct vki_sched_attr *)(Addr)ARG2; ++ POST_MEM_WRITE( (Addr)attr, attr->size ); ++} ++ + PRE(sys_sched_getscheduler) + { + PRINT("sys_sched_getscheduler ( %ld )", SARG1); +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index eed12a1bc..c19cb9e0e 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1016,6 +1016,9 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 + ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356 ++ + LINXY(__NR_getrandom, sys_getrandom), // 359 + LINXY(__NR_memfd_create, sys_memfd_create), // 360 + +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index d58200b49..b6422a765 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -998,6 +998,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 + ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356 + LINX_(__NR_renameat2, sys_renameat2), // 357 + + LINXY(__NR_getrandom, sys_getrandom), // 359 +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index a0a330aa2..3427fee16 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -825,8 +825,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_kcmp, sys_kcmp), // 343 + // ?????(__NR_finit_module, ), // 344 + +-// ?????(__NR_sched_setattr, ), // 345 +-// ?????(__NR_sched_getattr, ), // 346 ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 345 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 346 + LINX_(__NR_renameat2, sys_renameat2), // 347 + // ?????(__NR_seccomp, ), // 348 + LINXY(__NR_getrandom, sys_getrandom), // 349 +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index 332ed0bf2..b59d96f37 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1580,8 +1580,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_kcmp, sys_kcmp), // 349 + + // LIN__(__NR_finit_module, sys_ni_syscall), // 350 +-// LIN__(__NR_sched_setattr, sys_ni_syscall), // 351 +-// LIN__(__NR_sched_getattr, sys_ni_syscall), // 352 ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 351 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 352 + LINX_(__NR_renameat2, sys_renameat2), // 353 + // LIN__(__NR_seccomp, sys_ni_syscall), // 354 + +diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h +index 75b583165..ef93b9258 100644 +--- a/include/vki/vki-linux.h ++++ b/include/vki/vki-linux.h +@@ -410,6 +410,23 @@ struct vki_sched_param { + int sched_priority; + }; + ++struct vki_sched_attr { ++ vki_uint32_t size; ++ vki_uint32_t sched_policy; ++ vki_uint64_t sched_flags; ++ ++ /* SCHED_NORMAL, SCHED_BATCH */ ++ vki_int32_t sched_nice; ++ ++ /* SCHED_FIFO, SCHED_RR */ ++ vki_uint32_t sched_priority; ++ ++ /* SCHED_DEADLINE */ ++ vki_uint64_t sched_runtime; ++ vki_uint64_t sched_deadline; ++ vki_uint64_t sched_period; ++}; ++ + #define VKI_TASK_COMM_LEN 16 + + //---------------------------------------------------------------------- diff --git a/valgrind.spec b/valgrind.spec index 0245617..a18d502 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -99,6 +99,9 @@ Patch7: valgrind-3.16.1-REX-prefix-JMP.patch # KDE#422623 epoll_ctl warns for uninit padding on non-amd64 64bit arches Patch8: valgrind-3.16.1-epoll.patch +# KDE#369029 handle linux syscalls sched_getattr and sched_setattr +Patch9: valgrind-3.16.1-sched_getsetattr.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -232,6 +235,7 @@ Valgrind User Manual for details. %patch7 -p1 %patch8 -p1 +%patch9 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -459,6 +463,7 @@ fi * Mon Jul 27 2020 Mark Wielaard - Add valgrind-3.16.1-REX-prefix-JMP.patch - Add valgrind-3.16.1-epoll.patch +- Add valgrind-3.16.1-sched_getsetattr.patch * Tue Jul 14 2020 Tom Stellard - 3.16.1-3 - Use make macros From 75a7dbe5041fa4886bbf852067339641ac8dd51c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 28 Jul 2020 00:33:18 +0200 Subject: [PATCH 015/196] 3.16.1-4 - Add valgrind-3.16.1-dl_runtime_resolve.patch --- valgrind-3.16.1-dl_runtime_resolve.patch | 206 +++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.16.1-dl_runtime_resolve.patch diff --git a/valgrind-3.16.1-dl_runtime_resolve.patch b/valgrind-3.16.1-dl_runtime_resolve.patch new file mode 100644 index 0000000..0a34759 --- /dev/null +++ b/valgrind-3.16.1-dl_runtime_resolve.patch @@ -0,0 +1,206 @@ +commit f4abcc05fdba3f25890a9b30b71d511ccc906d46 +Author: Mark Wielaard +Date: Mon Jul 27 22:43:28 2020 +0200 + + Incorrect call-graph tracking due to new _dl_runtime_resolve_xsave* + + Newer glibc have alternate ld.so _ld_runtime_resolve functions. + Namely _dl_runtime_resolve_xsave and _dl_runtime_resolve_xsave'2 + + This patch recognizes the xsave, xsvec and fxsave variants and + changes callgrind so that any variant counts as _dl_runtime_resolve. + + Original patch by paulo.cesar.pereira.de.andrade@gmail.com + https://bugs.kde.org/show_bug.cgi?id=415293 + +diff --git a/callgrind/fn.c b/callgrind/fn.c +index e9d8dd214..7cce1a0c7 100644 +--- a/callgrind/fn.c ++++ b/callgrind/fn.c +@@ -30,8 +30,11 @@ + + static fn_array current_fn_active; + +-static Addr runtime_resolve_addr = 0; +-static int runtime_resolve_length = 0; ++/* x86_64 defines 4 variants. */ ++#define MAX_RESOLVE_ADDRS 4 ++static int runtime_resolve_addrs = 0; ++static Addr runtime_resolve_addr[MAX_RESOLVE_ADDRS]; ++static int runtime_resolve_length[MAX_RESOLVE_ADDRS]; + + // a code pattern is a list of tuples (start offset, length) + struct chunk_t { int start, len; }; +@@ -56,6 +59,9 @@ static Bool check_code(obj_node* obj, + /* first chunk of pattern should always start at offset 0 and + * have at least 3 bytes */ + CLG_ASSERT((pat->chunk[0].start == 0) && (pat->chunk[0].len >2)); ++ ++ /* and we cannot be called more than MAX_RESOLVE_ADDRS times */ ++ CLG_ASSERT(runtime_resolve_addrs < MAX_RESOLVE_ADDRS); + + CLG_DEBUG(1, "check_code: %s, pattern %s, check %d bytes of [%x %x %x...]\n", + obj->name, pat->name, pat->chunk[0].len, code[0], code[1], code[2]); +@@ -93,8 +99,9 @@ static Bool check_code(obj_node* obj, + pat->name, obj->name + obj->last_slash_pos, + addr - obj->start, addr, pat->len); + +- runtime_resolve_addr = addr; +- runtime_resolve_length = pat->len; ++ runtime_resolve_addr[runtime_resolve_addrs] = addr; ++ runtime_resolve_length[runtime_resolve_addrs] = pat->len; ++ runtime_resolve_addrs++; + return True; + } + } +@@ -138,8 +145,9 @@ static Bool search_runtime_resolve(obj_node* obj) + "x86-glibc2.8", 30, {{ 0,12 }, { 16,14 }, { 30,0}} }; + + if (VG_(strncmp)(obj->name, "/lib/ld", 7) != 0) return False; +- if (check_code(obj, code, &pat)) return True; +- if (check_code(obj, code_28, &pat_28)) return True; ++ Bool pat_p = check_code(obj, code, &pat); ++ Bool pat_28_p = check_code(obj, code_28, &pat_28); ++ if (pat_p || pat_28_p) return True; + return False; + #endif + +@@ -186,9 +194,98 @@ static Bool search_runtime_resolve(obj_node* obj) + static struct pattern pat = { + "amd64-def", 110, {{ 0,62 }, { 66,44 }, { 110,0 }} }; + ++ static UChar code_xsavec[] = { ++ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xc0, ++ /* 8*/ 0x48, 0x2b, 0x25, 0x00, 0x00, 0x00, 0x00, /* sub (%rip),%rsp */ ++ /*15*/ 0x48, ++ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, ++ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, ++ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, ++ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, ++ /*48*/ 0x30, 0xb8, 0xee, 0x00, 0x00, 0x00, 0x31, 0xd2, ++ /*56*/ 0x48, 0x89, 0x94, 0x24, 0x50, 0x02, 0x00, 0x00, ++ /*64*/ 0x48, 0x89, 0x94, 0x24, 0x58, 0x02, 0x00, 0x00, ++ /*72*/ 0x48, 0x89, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, ++ /*80*/ 0x48, 0x89, 0x94, 0x24, 0x68, 0x02, 0x00, 0x00, ++ /*88*/ 0x48, 0x89, 0x94, 0x24, 0x70, 0x02, 0x00, 0x00, ++ /*96*/ 0x48, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, ++ /*04*/ 0x0f, 0xc7, 0x64, 0x24, 0x40, 0x48, 0x8b, 0x73, ++ /*112*/0x10, 0x48, 0x8b, 0x7b, 0x08, ++ /*117*/0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ ++ /*122*/0x49, 0x89, 0xc3, 0xb8, 0xee, 0x00, ++ /*128*/0x00, 0x00, 0x31, 0xd2, 0x0f, 0xae, 0x6c, 0x24, ++ /*136*/0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, 0x4c, 0x8b, ++ /*144*/0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, 0x24, 0x20, ++ /*152*/0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, 0x8b, 0x54, ++ /*160*/0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, ++ /*168*/0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, 0x48, 0x8b, ++ /*176*/0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, 0xf2, 0x41, ++ /*184*/0xff, 0xe3 }; ++ static struct pattern pat_xsavec = { ++ "amd64-xsavec", 186, {{ 0,11 }, { 15,103 }, {122,64}, { 186,0 }} }; ++ ++ static UChar code_xsave[] = { ++ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xc0, ++ /* 8*/ 0x48, 0x2b, 0x25, 0x00, 0x00, 0x00, 0x00, /* sub (%rip),%rsp */ ++ /*15*/ 0x48, ++ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, ++ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, ++ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, ++ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, ++ /*48*/ 0x30, 0xb8, 0xee, 0x00, 0x00, 0x00, 0x31, 0xd2, ++ /*56*/ 0x48, 0x89, 0x94, 0x24, 0x40, 0x02, 0x00, 0x00, ++ /*64*/ 0x48, 0x89, 0x94, 0x24, 0x48, 0x02, 0x00, 0x00, ++ /*72*/ 0x48, 0x89, 0x94, 0x24, 0x50, 0x02, 0x00, 0x00, ++ /*80*/ 0x48, 0x89, 0x94, 0x24, 0x58, 0x02, 0x00, 0x00, ++ /*88*/ 0x48, 0x89, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, ++ /*96*/ 0x48, 0x89, 0x94, 0x24, 0x68, 0x02, 0x00, 0x00, ++ /*104*/0x48, 0x89, 0x94, 0x24, 0x70, 0x02, 0x00, 0x00, ++ /*112*/0x48, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, ++ /*120*/0x0f, 0xae, 0x64, 0x24, 0x40, 0x48, 0x8b, 0x73, ++ /*128*/0x10, 0x48, 0x8b, 0x7b, 0x08, ++ /*133*/0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ ++ /*138*/0x49, 0x89, 0xc3, 0xb8, 0xee, 0x00, ++ /*144*/0x00, 0x00, 0x31, 0xd2, 0x0f, 0xae, 0x6c, 0x24, ++ /*152*/0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, 0x4c, 0x8b, ++ /*160*/0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, 0x24, 0x20, ++ /*168*/0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, 0x8b, 0x54, ++ /*176*/0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, ++ /*184*/0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, 0x48, 0x8b, ++ /*192*/0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, 0xf2, 0x41, ++ /*200*/0xff, 0xe3 }; ++ static struct pattern pat_xsave = { ++ "amd64-xsave", 202, {{ 0,11 }, { 15,119 }, {138,64}, { 202,0 }} }; ++ ++ static UChar code_fxsave[] = { ++ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xf0, ++ /* 8*/ 0x48, 0x81, 0xec, 0x40, 0x02, 0x00, 0x00, 0x48, ++ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, ++ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, ++ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, ++ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, ++ /*48*/ 0x30, 0x0f, 0xae, 0x44, 0x24, 0x40, 0x48, 0x8b, ++ /*56*/ 0x73, 0x10, 0x48, 0x8b, 0x7b, 0x08, ++ /*62*/ 0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ ++ /*67*/ 0x49, 0x89, 0xc3, 0x0f, 0xae, ++ /*72*/ 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, ++ /*80*/ 0x4c, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, ++ /*88*/ 0x24, 0x20, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, ++ /*96*/ 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, ++ /*104*/0x08, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, ++ /*112*/0x48, 0x8b, 0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, ++ /*120*/0xf2, 0x41, 0xff, 0xe3 }; ++ static struct pattern pat_fxsave = { ++ "amd64-fxsave", 124, {{ 0,63 }, { 67,57 }, { 124,0 }} }; ++ + if ((VG_(strncmp)(obj->name, "/lib/ld", 7) != 0) && +- (VG_(strncmp)(obj->name, "/lib64/ld", 9) != 0)) return False; +- return check_code(obj, code, &pat); ++ (VG_(strncmp)(obj->name, "/lib64/ld", 9) != 0) && ++ (VG_(strncmp)(obj->name, "/usr/lib/ld", 11) != 0) && ++ (VG_(strncmp)(obj->name, "/usr/lib64/ld", 13) != 0)) return False; ++ Bool pat_p = check_code(obj, code, &pat); ++ Bool pat_xsavec_p = check_code(obj, code_xsavec, &pat_xsavec); ++ Bool pat_xsave_p = check_code(obj, code_xsave, &pat_xsave); ++ Bool pat_fxsave_p = check_code(obj, code_fxsave, &pat_fxsave); ++ if (pat_p || pat_xsavec_p || pat_xsave_p || pat_fxsave_p) return True; + #endif + + /* For other platforms, no patterns known */ +@@ -254,7 +351,7 @@ obj_node* new_obj_node(DebugInfo* di, obj_node* next) + i++; + } + +- if (runtime_resolve_addr == 0) search_runtime_resolve(obj); ++ if (runtime_resolve_addrs == 0) search_runtime_resolve(obj); + + return obj; + } +@@ -490,6 +587,7 @@ fn_node* CLG_(get_fn_node)(BB* bb) + DebugInfo* di; + UInt line_num; + fn_node* fn; ++ Int i; + + /* fn from debug info is idempotent for a BB */ + if (bb->fn) return bb->fn; +@@ -538,12 +636,14 @@ fn_node* CLG_(get_fn_node)(BB* bb) + } + if (0 == VG_(strcmp)(fnname, "_exit") && !exit_bb) + exit_bb = bb; +- +- if (runtime_resolve_addr && +- (bb_addr(bb) >= runtime_resolve_addr) && +- (bb_addr(bb) < runtime_resolve_addr + runtime_resolve_length)) { +- /* BB in runtime_resolve found by code check; use this name */ +- fnname = "_dl_runtime_resolve"; ++ ++ for (i = 0; i < runtime_resolve_addrs; i++) { ++ if ((bb_addr(bb) >= runtime_resolve_addr[i]) && ++ (bb_addr(bb) < runtime_resolve_addr[i] + runtime_resolve_length[i])) { ++ /* BB in runtime_resolve found by code check; use this name */ ++ fnname = "_dl_runtime_resolve"; ++ break; ++ } + } + + /* get fn_node struct for this function */ diff --git a/valgrind.spec b/valgrind.spec index a18d502..3ea81e5 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -102,6 +102,9 @@ Patch8: valgrind-3.16.1-epoll.patch # KDE#369029 handle linux syscalls sched_getattr and sched_setattr Patch9: valgrind-3.16.1-sched_getsetattr.patch +# KDE#415293 Incorrect call-graph tracking due to new _dl_runtime_resolve* +Patch10: valgrind-3.16.1-dl_runtime_resolve.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -236,6 +239,7 @@ Valgrind User Manual for details. %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -460,10 +464,11 @@ fi %endif %changelog -* Mon Jul 27 2020 Mark Wielaard +* Mon Jul 27 2020 Mark Wielaard - 3.16.1-4 - Add valgrind-3.16.1-REX-prefix-JMP.patch - Add valgrind-3.16.1-epoll.patch - Add valgrind-3.16.1-sched_getsetattr.patch +- Add valgrind-3.16.1-dl_runtime_resolve.patch * Tue Jul 14 2020 Tom Stellard - 3.16.1-3 - Use make macros From b34c10bac8f0a1548028384210a02d0214727779 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 19 Aug 2020 00:20:54 +0200 Subject: [PATCH 016/196] 3.16.1-5 - Update valgrind-3.16.1-epoll.patch --- valgrind-3.16.1-epoll.patch | 31 +++++++++++++++++++++++++++++++ valgrind.spec | 5 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/valgrind-3.16.1-epoll.patch b/valgrind-3.16.1-epoll.patch index 5bb1808..c6a0411 100644 --- a/valgrind-3.16.1-epoll.patch +++ b/valgrind-3.16.1-epoll.patch @@ -84,3 +84,34 @@ index 5b5b7eee6..929a4d9af 100644 } PRE(sys_eventfd) +commit b74f9f23c8758c77367f18368ea95baa858544cb +Author: Mark Wielaard +Date: Tue Aug 18 23:58:55 2020 +0200 + + Fix epoll_ctl setting of array event and data fields. + + Fix for https://bugs.kde.org/show_bug.cgi?id=422623 in commit ecf5ba119 + epoll_ctl warns for uninitialized padding on non-amd64 64bit arches + contained a bug. A pointer to an array is not a pointer to a pointer to + an array. Found by a Fedora user: + https://bugzilla.redhat.com/show_bug.cgi?id=1844778#c10 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 0850487e9..3f488795a 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -2115,11 +2115,11 @@ static void epoll_post_helper ( ThreadId tid, SyscallArgs* arrghs, + vg_assert(SUCCESS); + if (RES > 0) { + Int i; +- struct vki_epoll_event **events = (struct vki_epoll_event**)(Addr)ARG2; ++ struct vki_epoll_event *events = (struct vki_epoll_event*)(Addr)ARG2; + for (i = 0; i < RES; i++) { + /* Assume both events and data are set (data is user space only). */ +- POST_FIELD_WRITE(events[i]->events); +- POST_FIELD_WRITE(events[i]->data); ++ POST_FIELD_WRITE(events[i].events); ++ POST_FIELD_WRITE(events[i].data); + } + } + } diff --git a/valgrind.spec b/valgrind.spec index 3ea81e5..a40ae9d 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -464,6 +464,9 @@ fi %endif %changelog +* Tue Aug 18 2020 Mark Wielaard - 3.16.1-5 +- Update valgrind-3.16.1-epoll.patch + * Mon Jul 27 2020 Mark Wielaard - 3.16.1-4 - Add valgrind-3.16.1-REX-prefix-JMP.patch - Add valgrind-3.16.1-epoll.patch From 5071958c7d612117efb5d24c6f1642d3dbd06a8b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 16 Oct 2020 22:15:43 +0200 Subject: [PATCH 017/196] 3.16.1-6 - Add valgrind-3.16.1-faccessat2.patch Resolves: #1888170 unhandled amd64-linux syscall: 439 (faccessat2) --- valgrind-3.16.1-faccessat2.patch | 201 +++++++++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-faccessat2.patch diff --git a/valgrind-3.16.1-faccessat2.patch b/valgrind-3.16.1-faccessat2.patch new file mode 100644 index 0000000..9751f45 --- /dev/null +++ b/valgrind-3.16.1-faccessat2.patch @@ -0,0 +1,201 @@ +From fe4b349df3d5edc1c849e9890cbc6b191386a03c Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Fri, 16 Oct 2020 02:55:06 +0200 +Subject: [PATCH] Support new faccessat2 linux syscall (439) + +faccessat2 is a new syscall in linux 5.8 and will be used by glibc 2.33. +faccessat2 is simply faccessat with a new flag argument. It has +a common number across all linux arches. + +https://bugs.kde.org/427787 +--- + NEWS | 1 + + coregrind/m_syswrap/priv_syswrap-linux.h | 1 + + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-linux.c | 9 +++++++++ + coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + + coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + + coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ + include/vki/vki-scnums-shared-linux.h | 2 ++ + 14 files changed, 31 insertions(+) + +diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h +index eb0b320ca..110f7c832 100644 +--- a/coregrind/m_syswrap/priv_syswrap-linux.h ++++ b/coregrind/m_syswrap/priv_syswrap-linux.h +@@ -180,6 +180,7 @@ DECL_TEMPLATE(linux, sys_symlinkat); + DECL_TEMPLATE(linux, sys_readlinkat); + DECL_TEMPLATE(linux, sys_fchmodat); + DECL_TEMPLATE(linux, sys_faccessat); ++DECL_TEMPLATE(linux, sys_faccessat2); + DECL_TEMPLATE(linux, sys_utimensat); + DECL_TEMPLATE(linux, sys_name_to_handle_at); + DECL_TEMPLATE(linux, sys_open_by_handle_at); +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index d6f3eb910..45e1f3d1b 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -873,6 +873,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 70700e53f..978aedbe6 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1046,6 +1046,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_futex_time64, sys_futex_time64), // 422 + LINXY(__NR_sched_rr_get_interval_time64, + sys_sched_rr_get_interval_time64), // 423 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index acca02442..051d84989 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -825,6 +825,8 @@ static SyscallTableEntry syscall_main_table[] = { + // (__NR_pkey_free, sys_ni_syscall), // 290 + + LINXY(__NR_statx, sys_statx), // 397 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 3f488795a..41849873e 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -5988,6 +5988,15 @@ PRE(sys_faccessat) + PRE_MEM_RASCIIZ( "faccessat(pathname)", ARG2 ); + } + ++PRE(sys_faccessat2) ++{ ++ PRINT("sys_faccessat2 ( %ld, %#" FMT_REGWORD "x(%s), %ld, %ld )", ++ SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3, SARG4); ++ PRE_REG_READ4(long, "faccessat2", ++ int, dfd, const char *, pathname, int, mode, int, flags); ++ PRE_MEM_RASCIIZ( "faccessat2(pathname)", ARG2 ); ++} ++ + PRE(sys_name_to_handle_at) + { + PRINT("sys_name_to_handle_at ( %ld, %#" FMT_REGWORD "x(%s), %#" +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index 5face576b..f35fb8bbb 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1131,6 +1131,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_futex_time64, sys_futex_time64), // 422 + LINXY(__NR_sched_rr_get_interval_time64, + sys_sched_rr_get_interval_time64), // 423 ++ ++ LINX_ (__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index c64911a50..bd260679c 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -812,6 +812,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_ (__NR_syncfs, sys_syncfs), + LINXY (__NR_statx, sys_statx), + LINX_ (__NR_setns, sys_setns), ++ LINX_ (__NR_faccessat2, sys_faccessat2), + }; + + SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c +index 7ceecb6da..a904745ab 100644 +--- a/coregrind/m_syswrap/syswrap-nanomips-linux.c ++++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c +@@ -821,6 +821,7 @@ static SyscallTableEntry syscall_main_table[] = { + // (__NR_pkey_mprotect, sys_ni_syscall), + // (__NR_pkey_alloc, sys_ni_syscall), + // (__NR_pkey_free, sys_ni_syscall), ++ LINX_ (__NR_faccessat2, sys_faccessat2), + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index c19cb9e0e..6ddd482d9 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1049,6 +1049,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_futex_time64, sys_futex_time64), // 422 + LINXY(__NR_sched_rr_get_interval_time64, + sys_sched_rr_get_interval_time64), // 423 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index b6422a765..7026e4ac6 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1014,6 +1014,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_pwritev2, sys_pwritev2), // 381 + + LINXY(__NR_statx, sys_statx), // 383 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index 3427fee16..c5e4bb957 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -859,6 +859,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_pwritev2, sys_pwritev2), // 377 + + LINXY(__NR_statx, sys_statx), // 379 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index b59d96f37..67d866497 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1644,6 +1644,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register),// 427 ++ ++ LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h +index 6221d5a81..c8bc31b4b 100644 +--- a/include/vki/vki-scnums-shared-linux.h ++++ b/include/vki/vki-scnums-shared-linux.h +@@ -39,4 +39,6 @@ + #define __NR_fsmount 432 + #define __NR_fspick 433 + ++#define __NR_faccessat2 439 ++ + #endif +-- +2.20.1 + diff --git a/valgrind.spec b/valgrind.spec index a40ae9d..f849b2a 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -105,6 +105,9 @@ Patch9: valgrind-3.16.1-sched_getsetattr.patch # KDE#415293 Incorrect call-graph tracking due to new _dl_runtime_resolve* Patch10: valgrind-3.16.1-dl_runtime_resolve.patch +# KDE#427787 Support new faccessat2 linux syscall (439) +Patch11: valgrind-3.16.1-faccessat2.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -240,6 +243,7 @@ Valgrind User Manual for details. %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -464,6 +468,9 @@ fi %endif %changelog +* Fri Oct 16 2020 Mark Wielaard - 3.16.1-6 +- Add valgrind-3.16.1-faccessat2.patch + * Tue Aug 18 2020 Mark Wielaard - 3.16.1-5 - Update valgrind-3.16.1-epoll.patch From 07435e8fefc4d9e04333b76672cbdab903abd2f0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 18 Oct 2020 17:52:47 +0200 Subject: [PATCH 018/196] Add valgrind-3.16.1-gdbserver_nlcontrolc.patch --- valgrind-3.16.1-gdbserver_nlcontrolc.patch | 13 +++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 18 insertions(+) create mode 100644 valgrind-3.16.1-gdbserver_nlcontrolc.patch diff --git a/valgrind-3.16.1-gdbserver_nlcontrolc.patch b/valgrind-3.16.1-gdbserver_nlcontrolc.patch new file mode 100644 index 0000000..fbc7854 --- /dev/null +++ b/valgrind-3.16.1-gdbserver_nlcontrolc.patch @@ -0,0 +1,13 @@ +diff --git a/gdbserver_tests/nlcontrolc.vgtest b/gdbserver_tests/nlcontrolc.vgtest +index bb5308403..4eb479595 100644 +--- a/gdbserver_tests/nlcontrolc.vgtest ++++ b/gdbserver_tests/nlcontrolc.vgtest +@@ -13,7 +13,7 @@ args: 1000000000 1000000000 1000000000 BSBSBSBS 1 + vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-nlcontrolc + stderr_filter: filter_stderr + # Bug 338633 nlcontrol hangs on arm64 currently. +-prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/os_test solaris ++prereq: false && test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/os_test solaris + progB: gdb + argsB: --quiet -l 60 --nx ./sleepers + stdinB: nlcontrolc.stdinB.gdb diff --git a/valgrind.spec b/valgrind.spec index f849b2a..63e4cea 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -108,6 +108,9 @@ Patch10: valgrind-3.16.1-dl_runtime_resolve.patch # KDE#427787 Support new faccessat2 linux syscall (439) Patch11: valgrind-3.16.1-faccessat2.patch +# KDE#427931 gdbserver_tests/nlcontrolc.vgtest hangs on fedora rawhide +Patch12: valgrind-3.16.1-gdbserver_nlcontrolc.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -244,6 +247,7 @@ Valgrind User Manual for details. %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -470,6 +474,7 @@ fi %changelog * Fri Oct 16 2020 Mark Wielaard - 3.16.1-6 - Add valgrind-3.16.1-faccessat2.patch +- Add valgrind-3.16.1-gdbserver_nlcontrolc.patch * Tue Aug 18 2020 Mark Wielaard - 3.16.1-5 - Update valgrind-3.16.1-epoll.patch From a37c73550f3cda4b379c1269aae78bda01a7619f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 18 Oct 2020 21:28:12 +0200 Subject: [PATCH 019/196] Add valgrind-3.16.1-PPC64BE-lsw.patch --- valgrind-3.16.1-PPC64BE-lsw.patch | 34 +++++++++++++++++++++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 39 insertions(+) create mode 100644 valgrind-3.16.1-PPC64BE-lsw.patch diff --git a/valgrind-3.16.1-PPC64BE-lsw.patch b/valgrind-3.16.1-PPC64BE-lsw.patch new file mode 100644 index 0000000..2a1e9c3 --- /dev/null +++ b/valgrind-3.16.1-PPC64BE-lsw.patch @@ -0,0 +1,34 @@ +diff --git a/none/tests/ppc64/ldst_multiple.vgtest b/none/tests/ppc64/ldst_multiple.vgtest +index 87e668e09..22dd46c99 100644 +--- a/none/tests/ppc64/ldst_multiple.vgtest ++++ b/none/tests/ppc64/ldst_multiple.vgtest +@@ -1 +1,2 @@ ++prereq: ../../../tests/is_ppc64_BE + prog: ldst_multiple +--- valgrind-3.16.1/none/tests/ppc64/Makefile.am.orig 2020-10-18 20:43:34.579699246 +0200 ++++ valgrind-3.16.1/none/tests/ppc64/Makefile.am 2020-10-18 20:44:52.950198040 +0200 +@@ -54,17 +54,22 @@ + + check_PROGRAMS = \ + allexec \ +- lsw jm-insns round \ ++ jm-insns round \ + test_isa_2_06_part1 test_isa_2_06_part2 test_isa_2_06_part3 \ + test_dfp1 test_dfp2 test_dfp3 test_dfp4 test_dfp5 \ + test_isa_2_07_part1 test_isa_2_07_part2 \ + test_isa_3_0 \ + subnormal_test \ +- test_tm test_touch_tm ldst_multiple data-cache-instructions \ ++ test_tm test_touch_tm data-cache-instructions \ + power6_mf_gpr std_reg_imm \ + twi_tdi tw_td power6_bcmp + + ++# lsw and ldst_multiple compile (and run) only on big endian. ++if VGCONF_PLATFORMS_INCLUDE_PPC64BE_LINUX ++check_PROGRAMS += lsw ldst_multiple ++endif ++ + AM_CFLAGS += @FLAG_M64@ + AM_CXXFLAGS += @FLAG_M64@ + AM_CCASFLAGS += @FLAG_M64@ diff --git a/valgrind.spec b/valgrind.spec index 63e4cea..064cd45 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -111,6 +111,9 @@ Patch11: valgrind-3.16.1-faccessat2.patch # KDE#427931 gdbserver_tests/nlcontrolc.vgtest hangs on fedora rawhide Patch12: valgrind-3.16.1-gdbserver_nlcontrolc.patch +# KDE#427870 lmw, lswi and related PowerPC insns aren't allowed on ppc64le +Patch13: valgrind-3.16.1-PPC64BE-lsw.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -248,6 +251,7 @@ Valgrind User Manual for details. %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -475,6 +479,7 @@ fi * Fri Oct 16 2020 Mark Wielaard - 3.16.1-6 - Add valgrind-3.16.1-faccessat2.patch - Add valgrind-3.16.1-gdbserver_nlcontrolc.patch +- Add valgrind-3.16.1-PPC64BE-lsw.patch * Tue Aug 18 2020 Mark Wielaard - 3.16.1-5 - Update valgrind-3.16.1-epoll.patch From 5b527d5d7be2a5d545fdc7b5cea6c0c490fe0735 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 9 Nov 2020 09:18:11 +0100 Subject: [PATCH 020/196] Add BuildRequires which (#1895773) --- valgrind.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/valgrind.spec b/valgrind.spec index 064cd45..5f7a2f6 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -143,6 +143,9 @@ BuildRequires: autoconf # For make check validating the documentation BuildRequires: docbook-dtds +# configure might use which +BuildRequires: which + %{?scl:Requires:%scl_runtime} # We need to fixup selinux file context when doing a scl build. @@ -476,6 +479,9 @@ fi %endif %changelog +* Mon Nov 9 2020 Mark Wielaard +- Add BuildRequires which (#1895773) + * Fri Oct 16 2020 Mark Wielaard - 3.16.1-6 - Add valgrind-3.16.1-faccessat2.patch - Add valgrind-3.16.1-gdbserver_nlcontrolc.patch From ee9019950ae006a845fd27112e4c684825124917 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Dec 2020 12:33:55 +0100 Subject: [PATCH 021/196] Add valgrind-3.16.1-pthread-intercept.patch KDE#428909 helgrind: need to intercept duplicate libc definitions --- valgrind-3.16.1-pthread-intercept.patch | 222 ++++++++++++++++++++++++ valgrind.spec | 7 + 2 files changed, 229 insertions(+) create mode 100644 valgrind-3.16.1-pthread-intercept.patch diff --git a/valgrind-3.16.1-pthread-intercept.patch b/valgrind-3.16.1-pthread-intercept.patch new file mode 100644 index 0000000..8234314 --- /dev/null +++ b/valgrind-3.16.1-pthread-intercept.patch @@ -0,0 +1,222 @@ +commit 15330adf7c2471fbaa6a0818db07078d81dbff97 +Author: Bart Van Assche +Date: Sat Sep 19 08:08:59 2020 -0700 + + drd: Port to Fedora 33 + + Apparently on Fedora 33 the POSIX thread functions exist in both libc and + libpthread. Hence this patch that intercepts the pthread functions in + libc. See also https://bugs.kde.org/show_bug.cgi?id=426144 . + +diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c +index 58c45aaec..c2882e5ab 100644 +--- a/drd/drd_pthread_intercepts.c ++++ b/drd/drd_pthread_intercepts.c +@@ -174,7 +174,16 @@ static int never_true; + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ + { return implf argl; } + #else ++/* ++ * On Linux, intercept both the libc and the libpthread functions. At ++ * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread ++ * functions in both libc and libpthread. Older glibc versions only have an ++ * implementation of the pthread functions in libpthread. ++ */ + #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ ++ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ ++ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ ++ { return implf argl; } \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ + { return implf argl; } + +commit 3073d03e4b6e76797828b3f466863dbdda76cc7a +Author: Bart Van Assche +Date: Tue Oct 20 19:40:19 2020 -0700 + + drd: Unbreak the musl build + + See also https://bugs.kde.org/show_bug.cgi?id=428035. + + Reported-by: Stacy + Fixes: 15330adf7c24 ("drd: Port to Fedora 33") + +diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c +index 62c466f50..585aafe22 100644 +--- a/drd/drd_pthread_intercepts.c ++++ b/drd/drd_pthread_intercepts.c +@@ -174,6 +174,13 @@ static int never_true; + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ + { return implf argl; } + #else ++#ifdef MUSL_LIBC ++/* musl provides a single library that includes pthreads functions. */ ++#define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ ++ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ ++ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ ++ { return implf argl; } ++#else + /* + * On Linux, intercept both the libc and the libpthread functions. At + * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread +@@ -188,6 +195,7 @@ static int never_true; + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ + { return implf argl; } + #endif ++#endif + + /** + * Macro for generating three Valgrind interception functions: one with the +diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c + +index 585aafe22..3d1f90d3b 100644 +--- a/drd/drd_pthread_intercepts.c ++++ b/drd/drd_pthread_intercepts.c +@@ -151,7 +151,7 @@ static drd_rtld_guard_fn DRD_(rtld_bind_clear) = NULL; + * @param[in] arg_decl Argument declaration list enclosed in parentheses. + * @param[in] argl Argument list enclosed in parentheses. + */ +-#ifdef VGO_darwin ++#if defined(VGO_darwin) + static int never_true; + #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ +@@ -164,29 +164,12 @@ static int never_true; + fflush(stdout); \ + return pth_func_result; \ + } +-#elif defined(VGO_solaris) +-/* On Solaris, libpthread is just a filter library on top of libc. +- * Threading and synchronization functions in runtime linker are not +- * intercepted. +- */ ++#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_ONLY) + #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ + { return implf argl; } +-#else +-#ifdef MUSL_LIBC +-/* musl provides a single library that includes pthreads functions. */ +-#define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ +- ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ +- ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ +- { return implf argl; } +-#else +-/* +- * On Linux, intercept both the libc and the libpthread functions. At +- * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread +- * functions in both libc and libpthread. Older glibc versions only have an +- * implementation of the pthread functions in libpthread. +- */ ++#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD) + #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ +@@ -194,7 +177,8 @@ static int never_true; + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ + ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ + { return implf argl; } +-#endif ++#else ++# error "Unknown platform/thread wrapping" + #endif + + /** +diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c +index a10c3a4a3..2bc89f8a0 100644 +--- a/helgrind/hg_intercepts.c ++++ b/helgrind/hg_intercepts.c +@@ -78,26 +78,37 @@ + /*----------------------------------------------------------------*/ + + #if defined(VGO_solaris) +-/* On Solaris, libpthread is just a filter library on top of libc. +- * Threading and synchronization functions in runtime linker are not +- * intercepted. +- */ +-#define PTH_FUNC(ret_ty, f, args...) \ +- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args); \ +- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args) +- + /* pthread_t is typedef'd to 'unsigned int' but in DO_CREQ_* macros + sizeof(Word) is expected. */ + #define CREQ_PTHREAD_T Word + #define SEM_ERROR ret + #else +-#define PTH_FUNC(ret_ty, f, args...) \ +- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ +- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) + #define CREQ_PTHREAD_T pthread_t + #define SEM_ERROR errno + #endif /* VGO_solaris */ + ++#define HG_EXPAND(tok) #tok ++#define HG_STR(tok) HG_EXPAND(tok) ++#define HG_WEAK_ALIAS(name, aliasname) \ ++ extern __typeof (name) aliasname __attribute__ ((weak, alias(HG_STR(name)))) ++ ++#if defined(VG_WRAP_THREAD_FUNCTION_LIBPTHREAD_ONLY) ++#define PTH_FUNC(ret_ty, f, args...) \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) ++#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD) ++#define PTH_FUNC(ret_ty, f, args...) \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ ++ HG_WEAK_ALIAS(I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f), I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)); \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) ++#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_ONLY) ++#define PTH_FUNC(ret_ty, f, args...) \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args); \ ++ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args) ++#else ++# error "Unknown platform/thread wrapping" ++#endif ++ + // Do a client request. These are macros rather than a functions so + // as to avoid having an extra frame in stack traces. + +diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h +index bd65a44b4..d665afd98 100644 +--- a/include/pub_tool_redir.h ++++ b/include/pub_tool_redir.h +@@ -277,11 +277,7 @@ + /* --- Soname of the pthreads library. --- */ + + #if defined(VGO_linux) +-# if defined(MUSL_LIBC) +-# define VG_Z_LIBPTHREAD_SONAME libcZdZa // libc.* +-#else + # define VG_Z_LIBPTHREAD_SONAME libpthreadZdsoZd0 // libpthread.so.0 +-#endif + #elif defined(VGO_darwin) + # define VG_Z_LIBPTHREAD_SONAME libSystemZdZaZddylib // libSystem.*.dylib + #elif defined(VGO_solaris) +@@ -364,6 +360,27 @@ + + Bool VG_(is_soname_ld_so) (const HChar *soname); + ++// Some macros to help decide which libraries (libc or libpthread ++// or some platform-specific variation of these) should be used ++// for wrapping pthread/semaphore functions with DRD and Helgrind ++// The possibilities are a) only in libpthread ++// b) mabye in both libpthread and libc or c) only in libc ++// Linux GNU libc is moving from a) to c) (starting with Fedora 33) ++// Linux MUSL libc is c) ++// Darwin is a) ++// Solaris is c) ++// FreeBSD is b) ++ ++#if defined(VGO_darwin) ++#define VG_WRAP_THREAD_FUNCTION_LIBPTHREAD_ONLY ++#elif defined(VGO_solaris) || (defined(VGO_linux) && defined(MUSL_LIBC)) ++#define VG_WRAP_THREAD_FUNCTION_LIBC_ONLY ++#elif defined(VGO_linux) ++#define VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD ++#else ++# error "Unknown platform" ++#endif ++ + #endif // __PUB_TOOL_REDIR_H + + /*--------------------------------------------------------------------*/ diff --git a/valgrind.spec b/valgrind.spec index 5f7a2f6..6bc15dd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -114,6 +114,9 @@ Patch12: valgrind-3.16.1-gdbserver_nlcontrolc.patch # KDE#427870 lmw, lswi and related PowerPC insns aren't allowed on ppc64le Patch13: valgrind-3.16.1-PPC64BE-lsw.patch +# KDE#428909 helgrind: need to intercept duplicate libc definitions +Patch14: valgrind-3.16.1-pthread-intercept.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -255,6 +258,7 @@ Valgrind User Manual for details. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -479,6 +483,9 @@ fi %endif %changelog +* Thu Dec 3 2020 Mark Wielaard +- Add valgrind-3.16.1-pthread-intercept.patch + * Mon Nov 9 2020 Mark Wielaard - Add BuildRequires which (#1895773) From de58b8982bfec7db4707028f83c5a53ec64abe0b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Dec 2020 14:50:18 +0100 Subject: [PATCH 022/196] 3.16.1-7 Add s390x emit_load_mem and z14-vector patches. --- valgrind-3.16.1-s390_emit_load_mem.patch | 27 + valgrind-3.16.1-s390x-z14-vector.patch | 2930 ++++++++++++++++++++++ valgrind.spec | 14 +- 3 files changed, 2969 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.16.1-s390_emit_load_mem.patch create mode 100644 valgrind-3.16.1-s390x-z14-vector.patch diff --git a/valgrind-3.16.1-s390_emit_load_mem.patch b/valgrind-3.16.1-s390_emit_load_mem.patch new file mode 100644 index 0000000..95da59f --- /dev/null +++ b/valgrind-3.16.1-s390_emit_load_mem.patch @@ -0,0 +1,27 @@ +commit ba73f8d2ebe4b5fe8163ee5ab806f0e50961ebdf +Author: Andreas Arnez +Date: Tue Nov 3 18:17:30 2020 +0100 + + Bug 428648 - s390x: Force 12-bit amode for vector loads in isel + + Similar to Bug 417452, where the instruction selector sometimes attempted + to generate vector stores with a 20-bit displacement, the same problem has + now been reported with vector loads. + + The problem is caused in s390_isel_vec_expr_wrk(), where the addressing + mode is generated with s390_isel_amode() instead of + s390_isel_amode_short(). This is fixed. + +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 2f80dd850..134f3eb6f 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -3741,7 +3741,7 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + /* --------- LOAD --------- */ + case Iex_Load: { + HReg dst = newVRegV(env); +- s390_amode *am = s390_isel_amode(env, expr->Iex.Load.addr); ++ s390_amode *am = s390_isel_amode_short(env, expr->Iex.Load.addr); + + if (expr->Iex.Load.end != Iend_BE) + goto irreducible; diff --git a/valgrind-3.16.1-s390x-z14-vector.patch b/valgrind-3.16.1-s390x-z14-vector.patch new file mode 100644 index 0000000..00a3a83 --- /dev/null +++ b/valgrind-3.16.1-s390x-z14-vector.patch @@ -0,0 +1,2930 @@ +diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h +index 9f93cff19..ea878d8af 100644 +--- a/VEX/priv/guest_s390_defs.h ++++ b/VEX/priv/guest_s390_defs.h +@@ -263,26 +263,27 @@ extern ULong last_execute_target; + before S390_VEC_OP_LAST. */ + typedef enum { + S390_VEC_OP_INVALID = 0, +- S390_VEC_OP_VPKS = 1, +- S390_VEC_OP_VPKLS = 2, +- S390_VEC_OP_VFAE = 3, +- S390_VEC_OP_VFEE = 4, +- S390_VEC_OP_VFENE = 5, +- S390_VEC_OP_VISTR = 6, +- S390_VEC_OP_VSTRC = 7, +- S390_VEC_OP_VCEQ = 8, +- S390_VEC_OP_VTM = 9, +- S390_VEC_OP_VGFM = 10, +- S390_VEC_OP_VGFMA = 11, +- S390_VEC_OP_VMAH = 12, +- S390_VEC_OP_VMALH = 13, +- S390_VEC_OP_VCH = 14, +- S390_VEC_OP_VCHL = 15, +- S390_VEC_OP_VFCE = 16, +- S390_VEC_OP_VFCH = 17, +- S390_VEC_OP_VFCHE = 18, +- S390_VEC_OP_VFTCI = 19, +- S390_VEC_OP_LAST = 20 // supposed to be the last element in enum ++ S390_VEC_OP_VPKS, ++ S390_VEC_OP_VPKLS, ++ S390_VEC_OP_VFAE, ++ S390_VEC_OP_VFEE, ++ S390_VEC_OP_VFENE, ++ S390_VEC_OP_VISTR, ++ S390_VEC_OP_VSTRC, ++ S390_VEC_OP_VCEQ, ++ S390_VEC_OP_VTM, ++ S390_VEC_OP_VGFM, ++ S390_VEC_OP_VGFMA, ++ S390_VEC_OP_VMAH, ++ S390_VEC_OP_VMALH, ++ S390_VEC_OP_VCH, ++ S390_VEC_OP_VCHL, ++ S390_VEC_OP_VFTCI, ++ S390_VEC_OP_VFMIN, ++ S390_VEC_OP_VFMAX, ++ S390_VEC_OP_VBPERM, ++ S390_VEC_OP_VMSL, ++ S390_VEC_OP_LAST // supposed to be the last element in enum + } s390x_vec_op_t; + + /* Arguments of s390x_dirtyhelper_vec_op(...) which are packed into one +diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c +index a470d9f8d..b9c0514ba 100644 +--- a/VEX/priv/guest_s390_helpers.c ++++ b/VEX/priv/guest_s390_helpers.c +@@ -314,20 +314,11 @@ ULong s390x_dirtyhelper_STCKE(ULong *addr) {return 3;} + /*--- Dirty helper for Store Facility instruction ---*/ + /*------------------------------------------------------------*/ + #if defined(VGA_s390x) +-static void +-s390_set_facility_bit(ULong *addr, UInt bitno, UInt value) +-{ +- addr += bitno / 64; +- bitno = bitno % 64; +- +- ULong mask = 1; +- mask <<= (63 - bitno); + +- if (value == 1) { +- *addr |= mask; // set +- } else { +- *addr &= ~mask; // clear +- } ++static ULong ++s390_stfle_range(UInt lo, UInt hi) ++{ ++ return ((1UL << (hi + 1 - lo)) - 1) << (63 - (hi % 64)); + } + + ULong +@@ -336,6 +327,76 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) + ULong hoststfle[S390_NUM_FACILITY_DW], cc, num_dw, i; + register ULong reg0 asm("0") = guest_state->guest_r0 & 0xF; /* r0[56:63] */ + ++ /* Restrict to facilities that we know about and assume to be compatible with ++ Valgrind. Of course, in this way we may reject features that Valgrind is ++ not really involved in (and thus would be compatible), but quering for ++ such features doesn't seem like a typical use case. */ ++ ULong accepted_facility[S390_NUM_FACILITY_DW] = { ++ /* === 0 .. 63 === */ ++ (s390_stfle_range(0, 16) ++ /* 17: message-security-assist, not supported */ ++ | s390_stfle_range(18, 19) ++ /* 20: HFP-multiply-and-add/subtract, not supported */ ++ | s390_stfle_range(21, 22) ++ /* 23: HFP-unnormalized-extension, not supported */ ++ | s390_stfle_range(24, 25) ++ /* 26: parsing-enhancement, not supported */ ++ | s390_stfle_range(27, 28) ++ /* 29: unassigned */ ++ | s390_stfle_range(30, 30) ++ /* 31: extract-CPU-time, not supported */ ++ | s390_stfle_range(32, 41) ++ /* 42-43: DFP, not fully supported */ ++ /* 44: PFPO, not fully supported */ ++ | s390_stfle_range(45, 47) ++ /* 48: DFP zoned-conversion, not supported */ ++ /* 49: includes PPA, not supported */ ++ /* 50: constrained transactional-execution, not supported */ ++ | s390_stfle_range(51, 55) ++ /* 56: unassigned */ ++ /* 57: MSA5, not supported */ ++ | s390_stfle_range(58, 60) ++ /* 61: miscellaneous-instruction 3, not supported */ ++ | s390_stfle_range(62, 63)), ++ ++ /* === 64 .. 127 === */ ++ (s390_stfle_range(64, 72) ++ /* 73: transactional-execution, not supported */ ++ | s390_stfle_range(74, 75) ++ /* 76: MSA3, not supported */ ++ /* 77: MSA4, not supported */ ++ | s390_stfle_range(78, 78) ++ /* 80: DFP packed-conversion, not supported */ ++ /* 81: PPA-in-order, not supported */ ++ | s390_stfle_range(82, 82) ++ /* 83-127: unassigned */ ), ++ ++ /* === 128 .. 191 === */ ++ (s390_stfle_range(128, 131) ++ /* 132: unassigned */ ++ /* 133: guarded-storage, not supported */ ++ /* 134: vector packed decimal, not supported */ ++ | s390_stfle_range(135, 135) ++ /* 136: unassigned */ ++ /* 137: unassigned */ ++ | s390_stfle_range(138, 142) ++ /* 143: unassigned */ ++ | s390_stfle_range(144, 145) ++ /* 146: MSA8, not supported */ ++ | s390_stfle_range(147, 147) ++ /* 148: vector-enhancements 2, not supported */ ++ | s390_stfle_range(149, 149) ++ /* 150: unassigned */ ++ /* 151: DEFLATE-conversion, not supported */ ++ /* 153: unassigned */ ++ /* 154: unassigned */ ++ /* 155: MSA9, not supported */ ++ | s390_stfle_range(156, 156) ++ /* 157-167: unassigned */ ++ | s390_stfle_range(168, 168) ++ /* 168-191: unassigned */ ), ++ }; ++ + /* We cannot store more than S390_NUM_FACILITY_DW + (and it makes not much sense to do so anyhow) */ + if (reg0 > S390_NUM_FACILITY_DW - 1) +@@ -351,35 +412,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) + /* Update guest register 0 with what STFLE set r0 to */ + guest_state->guest_r0 = reg0; + +- /* Set default: VM facilities = host facilities */ ++ /* VM facilities = host facilities, filtered by acceptance */ + for (i = 0; i < num_dw; ++i) +- addr[i] = hoststfle[i]; +- +- /* Now adjust the VM facilities according to what the VM supports */ +- s390_set_facility_bit(addr, S390_FAC_LDISP, 1); +- s390_set_facility_bit(addr, S390_FAC_EIMM, 1); +- s390_set_facility_bit(addr, S390_FAC_ETF2, 1); +- s390_set_facility_bit(addr, S390_FAC_ETF3, 1); +- s390_set_facility_bit(addr, S390_FAC_GIE, 1); +- s390_set_facility_bit(addr, S390_FAC_EXEXT, 1); +- s390_set_facility_bit(addr, S390_FAC_HIGHW, 1); +- s390_set_facility_bit(addr, S390_FAC_LSC2, 1); +- +- s390_set_facility_bit(addr, S390_FAC_HFPMAS, 0); +- s390_set_facility_bit(addr, S390_FAC_HFPUNX, 0); +- s390_set_facility_bit(addr, S390_FAC_XCPUT, 0); +- s390_set_facility_bit(addr, S390_FAC_MSA, 0); +- s390_set_facility_bit(addr, S390_FAC_PENH, 0); +- s390_set_facility_bit(addr, S390_FAC_DFP, 0); +- s390_set_facility_bit(addr, S390_FAC_PFPO, 0); +- s390_set_facility_bit(addr, S390_FAC_DFPZC, 0); +- s390_set_facility_bit(addr, S390_FAC_MISC, 0); +- s390_set_facility_bit(addr, S390_FAC_CTREXE, 0); +- s390_set_facility_bit(addr, S390_FAC_TREXE, 0); +- s390_set_facility_bit(addr, S390_FAC_MSA4, 0); +- s390_set_facility_bit(addr, S390_FAC_VXE, 0); +- s390_set_facility_bit(addr, S390_FAC_VXE2, 0); +- s390_set_facility_bit(addr, S390_FAC_DFLT, 0); ++ addr[i] = hoststfle[i] & accepted_facility[i]; + + return cc; + } +@@ -2500,25 +2535,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + vassert(d->op > S390_VEC_OP_INVALID && d->op < S390_VEC_OP_LAST); + static const UChar opcodes[][2] = { + {0x00, 0x00}, /* invalid */ +- {0xe7, 0x97}, /* VPKS */ +- {0xe7, 0x95}, /* VPKLS */ +- {0xe7, 0x82}, /* VFAE */ +- {0xe7, 0x80}, /* VFEE */ +- {0xe7, 0x81}, /* VFENE */ +- {0xe7, 0x5c}, /* VISTR */ +- {0xe7, 0x8a}, /* VSTRC */ +- {0xe7, 0xf8}, /* VCEQ */ +- {0xe7, 0xd8}, /* VTM */ +- {0xe7, 0xb4}, /* VGFM */ +- {0xe7, 0xbc}, /* VGFMA */ +- {0xe7, 0xab}, /* VMAH */ +- {0xe7, 0xa9}, /* VMALH */ +- {0xe7, 0xfb}, /* VCH */ +- {0xe7, 0xf9}, /* VCHL */ +- {0xe7, 0xe8}, /* VFCE */ +- {0xe7, 0xeb}, /* VFCH */ +- {0xe7, 0xea}, /* VFCHE */ +- {0xe7, 0x4a} /* VFTCI */ ++ [S390_VEC_OP_VPKS] = {0xe7, 0x97}, ++ [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, ++ [S390_VEC_OP_VFAE] = {0xe7, 0x82}, ++ [S390_VEC_OP_VFEE] = {0xe7, 0x80}, ++ [S390_VEC_OP_VFENE] = {0xe7, 0x81}, ++ [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, ++ [S390_VEC_OP_VSTRC] = {0xe7, 0x8a}, ++ [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, ++ [S390_VEC_OP_VTM] = {0xe7, 0xd8}, ++ [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, ++ [S390_VEC_OP_VGFMA] = {0xe7, 0xbc}, ++ [S390_VEC_OP_VMAH] = {0xe7, 0xab}, ++ [S390_VEC_OP_VMALH] = {0xe7, 0xa9}, ++ [S390_VEC_OP_VCH] = {0xe7, 0xfb}, ++ [S390_VEC_OP_VCHL] = {0xe7, 0xf9}, ++ [S390_VEC_OP_VFTCI] = {0xe7, 0x4a}, ++ [S390_VEC_OP_VFMIN] = {0xe7, 0xee}, ++ [S390_VEC_OP_VFMAX] = {0xe7, 0xef}, ++ [S390_VEC_OP_VBPERM]= {0xe7, 0x85}, ++ [S390_VEC_OP_VMSL] = {0xe7, 0xb8}, + }; + + union { +@@ -2612,6 +2648,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + case S390_VEC_OP_VGFMA: + case S390_VEC_OP_VMAH: + case S390_VEC_OP_VMALH: ++ case S390_VEC_OP_VMSL: + the_insn.VRRd.v1 = 1; + the_insn.VRRd.v2 = 2; + the_insn.VRRd.v3 = 3; +@@ -2621,9 +2658,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + the_insn.VRRd.m6 = d->m5; + break; + +- case S390_VEC_OP_VFCE: +- case S390_VEC_OP_VFCH: +- case S390_VEC_OP_VFCHE: ++ case S390_VEC_OP_VFMIN: ++ case S390_VEC_OP_VFMAX: ++ case S390_VEC_OP_VBPERM: + the_insn.VRRc.v1 = 1; + the_insn.VRRc.v2 = 2; + the_insn.VRRc.v3 = 3; +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index c27a8d3fe..d4f428c24 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +@@ -248,6 +248,13 @@ typedef enum { + #define VRS_d2(insn) (((insn) >> 32) & 0xfff) + #define VRS_m4(insn) (((insn) >> 28) & 0xf) + #define VRS_rxb(insn) (((insn) >> 24) & 0xf) ++#define VRSd_v1(insn) (((insn) >> 28) & 0xf) ++#define VRSd_r3(insn) (((insn) >> 48) & 0xf) ++#define VSI_i3(insn) (((insn) >> 48) & 0xff) ++#define VSI_b2(insn) (((insn) >> 44) & 0xf) ++#define VSI_d2(insn) (((insn) >> 32) & 0xfff) ++#define VSI_v1(insn) (((insn) >> 28) & 0xf) ++#define VSI_rxb(insn) (((insn) >> 24) & 0xf) + + + /*------------------------------------------------------------*/ +@@ -1934,6 +1941,26 @@ s390_vr_get_type(const UChar m) + return results[m]; + } + ++/* Determine IRType from instruction's floating-point format field */ ++static IRType ++s390_vr_get_ftype(const UChar m) ++{ ++ static const IRType results[] = {Ity_F32, Ity_F64, Ity_F128}; ++ if (m >= 2 && m <= 4) ++ return results[m - 2]; ++ return Ity_INVALID; ++} ++ ++/* Determine number of elements from instruction's floating-point format ++ field */ ++static UChar ++s390_vr_get_n_elem(const UChar m) ++{ ++ if (m >= 2 && m <= 4) ++ return 1 << (4 - m); ++ return 0; ++} ++ + /* Determine if Condition Code Set (CS) flag is set in m field */ + #define s390_vr_is_cs_set(m) (((m) & 0x1) != 0) + +@@ -2188,12 +2215,15 @@ s390_vr_offset_by_index(UInt archreg,IRType type, UChar index) + goto invalidIndex; + } + return vr_offset(archreg) + sizeof(ULong) * index; ++ + case Ity_V128: ++ case Ity_F128: + if(index == 0) { + return vr_qw_offset(archreg); + } else { + goto invalidIndex; + } ++ + default: + vpanic("s390_vr_offset_by_index: unknown type"); + } +@@ -2211,7 +2241,14 @@ put_vr(UInt archreg, IRType type, UChar index, IRExpr *expr) + UInt offset = s390_vr_offset_by_index(archreg, type, index); + vassert(typeOfIRExpr(irsb->tyenv, expr) == type); + +- stmt(IRStmt_Put(offset, expr)); ++ if (type == Ity_F128) { ++ IRTemp val = newTemp(Ity_F128); ++ assign(val, expr); ++ stmt(IRStmt_Put(offset, unop(Iop_F128HItoF64, mkexpr(val)))); ++ stmt(IRStmt_Put(offset + 8, unop(Iop_F128LOtoF64, mkexpr(val)))); ++ } else { ++ stmt(IRStmt_Put(offset, expr)); ++ } + } + + /* Read type sized part specified by index of a vr register. */ +@@ -2219,6 +2256,11 @@ static IRExpr * + get_vr(UInt archreg, IRType type, UChar index) + { + UInt offset = s390_vr_offset_by_index(archreg, type, index); ++ if (type == Ity_F128) { ++ return binop(Iop_F64HLtoF128, ++ IRExpr_Get(offset, Ity_F64), ++ IRExpr_Get(offset + 8, Ity_F64)); ++ } + return IRExpr_Get(offset, type); + } + +@@ -2294,11 +2336,11 @@ s390_getCountToBlockBoundary(IRTemp op2addr, UChar m) + return mkexpr(output); + } + +-/* Load bytes into v1. +- maxIndex specifies max index to load and must be Ity_I32. +- If maxIndex >= 15, all 16 bytes are loaded. +- All bytes after maxIndex are zeroed. */ +-static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) ++/* Starting from addr, load at most maxIndex + 1 bytes into v1. Fill the ++ leftmost or rightmost bytes of v1, depending on whether `rightmost' is set. ++ If maxIndex >= 15, load all 16 bytes; otherwise clear the remaining bytes. */ ++static void ++s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex, Bool rightmost) + { + IRTemp maxIdx = newTemp(Ity_I32); + IRTemp cappedMax = newTemp(Ity_I64); +@@ -2311,8 +2353,8 @@ static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) + crossed if and only if the real insn would have crossed it as well. + Thus, if the bytes to load are fully contained in an aligned 16-byte + chunk, load the whole 16-byte aligned chunk, and otherwise load 16 bytes +- from the unaligned address. Then shift the loaded data left-aligned +- into the target vector register. */ ++ from the unaligned address. Then shift the loaded data left- or ++ right-aligned into the target vector register. */ + + assign(maxIdx, maxIndex); + assign(cappedMax, mkite(binop(Iop_CmpLT32U, mkexpr(maxIdx), mkU32(15)), +@@ -2325,20 +2367,60 @@ static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) + assign(back, mkite(binop(Iop_CmpLE64U, mkexpr(offset), mkexpr(zeroed)), + mkexpr(offset), mkU64(0))); + +- /* How much to shift the loaded 16-byte vector to the right, and then to +- the left. Since both 'zeroed' and 'back' range from 0 to 15, the shift +- amounts range from 0 to 120. */ +- IRExpr *shrAmount = binop(Iop_Shl64, +- binop(Iop_Sub64, mkexpr(zeroed), mkexpr(back)), +- mkU8(3)); +- IRExpr *shlAmount = binop(Iop_Shl64, mkexpr(zeroed), mkU8(3)); ++ IRExpr* chunk = load(Ity_V128, binop(Iop_Sub64, mkexpr(addr), mkexpr(back))); ++ ++ /* Shift the loaded 16-byte vector to the right, then to the left, or vice ++ versa, where each shift amount ranges from 0 to 120. */ ++ IRExpr* shift1; ++ IRExpr* shift2 = unop(Iop_64to8, binop(Iop_Shl64, mkexpr(zeroed), mkU8(3))); ++ ++ if (rightmost) { ++ shift1 = unop(Iop_64to8, binop(Iop_Shl64, mkexpr(back), mkU8(3))); ++ put_vr_qw(v1, binop(Iop_ShrV128, ++ binop(Iop_ShlV128, chunk, shift1), ++ shift2)); ++ } else { ++ shift1 = unop(Iop_64to8, ++ binop(Iop_Shl64, ++ binop(Iop_Sub64, mkexpr(zeroed), mkexpr(back)), ++ mkU8(3))); ++ put_vr_qw(v1, binop(Iop_ShlV128, ++ binop(Iop_ShrV128, chunk, shift1), ++ shift2)); ++ } ++} ++ ++/* Store at most maxIndex + 1 bytes from v1 to addr. Store the leftmost or ++ rightmost bytes of v1, depending on whether `rightmost' is set. If maxIndex ++ >= 15, store all 16 bytes. */ ++static void ++s390_vr_storeWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex, Bool rightmost) ++{ ++ IRTemp maxIdx = newTemp(Ity_I32); ++ IRTemp cappedMax = newTemp(Ity_I64); ++ IRTemp counter = newTemp(Ity_I64); ++ IRExpr* offset; ++ ++ assign(maxIdx, maxIndex); ++ assign(cappedMax, mkite(binop(Iop_CmpLT32U, mkexpr(maxIdx), mkU32(15)), ++ unop(Iop_32Uto64, mkexpr(maxIdx)), mkU64(15))); ++ ++ assign(counter, get_counter_dw0()); ++ ++ if (rightmost) ++ offset = binop(Iop_Add64, ++ binop(Iop_Sub64, mkU64(15), mkexpr(cappedMax)), ++ mkexpr(counter)); ++ else ++ offset = mkexpr(counter); ++ ++ store(binop(Iop_Add64, mkexpr(addr), mkexpr(counter)), ++ binop(Iop_GetElem8x16, get_vr_qw(v1), unop(Iop_64to8, offset))); + +- put_vr_qw(v1, binop(Iop_ShlV128, +- binop(Iop_ShrV128, +- load(Ity_V128, +- binop(Iop_Sub64, mkexpr(addr), mkexpr(back))), +- unop(Iop_64to8, shrAmount)), +- unop(Iop_64to8, shlAmount))); ++ /* Check for end of field */ ++ put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); ++ iterate_if(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(cappedMax))); ++ put_counter_dw0(mkU64(0)); + } + + /* Bitwise vCond ? v1 : v2 +@@ -3749,6 +3831,28 @@ s390_format_VRS_RRDVM(const HChar *(*irgen)(UChar r1, IRTemp op2addr, UChar v3, + s390_disasm(ENC5(MNM, GPR, UDXB, VR, UINT), mnm, r1, d2, 0, b2, v3, m4); + } + ++static void ++s390_format_VRS_RRDV(const HChar *(*irgen)(UChar v1, UChar r3, IRTemp op2addr), ++ UChar v1, UChar r3, UChar b2, UShort d2, UChar rxb) ++{ ++ const HChar *mnm; ++ IRTemp op2addr = newTemp(Ity_I64); ++ ++ if (! s390_host_has_vx) { ++ emulation_failure(EmFail_S390X_vx); ++ return; ++ } ++ ++ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : ++ mkU64(0))); ++ ++ v1 = s390_vr_getVRindex(v1, 4, rxb); ++ mnm = irgen(v1, r3, op2addr); ++ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) ++ s390_disasm(ENC4(MNM, VR, GPR, UDXB), mnm, v1, r3, d2, 0, b2); ++} ++ + + static void + s390_format_VRS_VRDVM(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar v3, +@@ -4081,6 +4185,29 @@ s390_format_VRRa_VVVMMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, + mnm, v1, v2, v3, m4, m5, m6); + } + ++static void ++s390_format_VSI_URDV(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar i3), ++ UChar v1, UChar b2, UChar d2, UChar i3, UChar rxb) ++{ ++ const HChar *mnm; ++ IRTemp op2addr = newTemp(Ity_I64); ++ ++ if (!s390_host_has_vx) { ++ emulation_failure(EmFail_S390X_vx); ++ return; ++ } ++ ++ v1 = s390_vr_getVRindex(v1, 4, rxb); ++ ++ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : ++ mkU64(0))); ++ ++ mnm = irgen(v1, op2addr, i3); ++ ++ if (vex_traceflags & VEX_TRACE_FE) ++ s390_disasm(ENC4(MNM, VR, UDXB, UINT), mnm, v1, d2, 0, b2, i3); ++} ++ + /*------------------------------------------------------------*/ + /*--- Build IR for opcodes ---*/ + /*------------------------------------------------------------*/ +@@ -16186,7 +16313,9 @@ s390_irgen_VGM(UChar v1, UShort i2, UChar m3) + static const HChar * + s390_irgen_VLLEZ(UChar v1, IRTemp op2addr, UChar m3) + { +- IRType type = s390_vr_get_type(m3); ++ s390_insn_assert("vllez", m3 <= 3 || m3 == 6); ++ ++ IRType type = s390_vr_get_type(m3 & 3); + IRExpr* op2 = load(type, mkexpr(op2addr)); + IRExpr* op2as64bit; + switch (type) { +@@ -16206,7 +16335,13 @@ s390_irgen_VLLEZ(UChar v1, IRTemp op2addr, UChar m3) + vpanic("s390_irgen_VLLEZ: unknown type"); + } + +- put_vr_dw0(v1, op2as64bit); ++ if (m3 == 6) { ++ /* left-aligned */ ++ put_vr_dw0(v1, binop(Iop_Shl64, op2as64bit, mkU8(32))); ++ } else { ++ /* right-aligned */ ++ put_vr_dw0(v1, op2as64bit); ++ } + put_vr_dw1(v1, mkU64(0)); + return "vllez"; + } +@@ -16615,7 +16750,7 @@ s390_irgen_VLBB(UChar v1, IRTemp addr, UChar m3) + s390_getCountToBlockBoundary(addr, m3), + mkU32(1)); + +- s390_vr_loadWithLength(v1, addr, maxIndex); ++ s390_vr_loadWithLength(v1, addr, maxIndex, False); + + return "vlbb"; + } +@@ -16623,41 +16758,50 @@ s390_irgen_VLBB(UChar v1, IRTemp addr, UChar m3) + static const HChar * + s390_irgen_VLL(UChar v1, IRTemp addr, UChar r3) + { +- s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3)); ++ s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3), False); + + return "vll"; + } + + static const HChar * +-s390_irgen_VSTL(UChar v1, IRTemp addr, UChar r3) ++s390_irgen_VLRL(UChar v1, IRTemp addr, UChar i3) + { +- IRTemp counter = newTemp(Ity_I64); +- IRTemp maxIndexToStore = newTemp(Ity_I64); +- IRTemp gpr3 = newTemp(Ity_I64); +- +- assign(gpr3, unop(Iop_32Uto64, get_gpr_w1(r3))); +- assign(maxIndexToStore, mkite(binop(Iop_CmpLE64U, +- mkexpr(gpr3), +- mkU64(16) +- ), +- mkexpr(gpr3), +- mkU64(16) +- ) +- ); ++ s390_insn_assert("vlrl", (i3 & 0xf0) == 0); ++ s390_vr_loadWithLength(v1, addr, mkU32((UInt) i3), True); + +- assign(counter, get_counter_dw0()); ++ return "vlrl"; ++} + +- store(binop(Iop_Add64, mkexpr(addr), mkexpr(counter)), +- binop(Iop_GetElem8x16, get_vr_qw(v1), unop(Iop_64to8, mkexpr(counter)))); ++static const HChar * ++s390_irgen_VLRLR(UChar v1, UChar r3, IRTemp addr) ++{ ++ s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3), True); + +- /* Check for end of field */ +- put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); +- iterate_if(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(maxIndexToStore))); +- put_counter_dw0(mkU64(0)); ++ return "vlrlr"; ++} + ++static const HChar * ++s390_irgen_VSTL(UChar v1, IRTemp addr, UChar r3) ++{ ++ s390_vr_storeWithLength(v1, addr, get_gpr_w1(r3), False); + return "vstl"; + } + ++static const HChar * ++s390_irgen_VSTRL(UChar v1, IRTemp addr, UChar i3) ++{ ++ s390_insn_assert("vstrl", (i3 & 0xf0) == 0); ++ s390_vr_storeWithLength(v1, addr, mkU32((UInt) i3), True); ++ return "vstrl"; ++} ++ ++static const HChar * ++s390_irgen_VSTRLR(UChar v1, UChar r3, IRTemp addr) ++{ ++ s390_vr_storeWithLength(v1, addr, get_gpr_w1(r3), True); ++ return "vstrlr"; ++} ++ + static const HChar * + s390_irgen_VX(UChar v1, UChar v2, UChar v3) + { +@@ -16682,6 +16826,24 @@ s390_irgen_VO(UChar v1, UChar v2, UChar v3) + return "vo"; + } + ++static const HChar * ++s390_irgen_VOC(UChar v1, UChar v2, UChar v3) ++{ ++ put_vr_qw(v1, binop(Iop_OrV128, get_vr_qw(v2), ++ unop(Iop_NotV128, get_vr_qw(v3)))); ++ ++ return "voc"; ++} ++ ++static const HChar * ++s390_irgen_VNN(UChar v1, UChar v2, UChar v3) ++{ ++ put_vr_qw(v1, unop(Iop_NotV128, ++ binop(Iop_AndV128, get_vr_qw(v2), get_vr_qw(v3)))); ++ ++ return "vnn"; ++} ++ + static const HChar * + s390_irgen_VNO(UChar v1, UChar v2, UChar v3) + { +@@ -16691,6 +16853,15 @@ s390_irgen_VNO(UChar v1, UChar v2, UChar v3) + return "vno"; + } + ++static const HChar * ++s390_irgen_VNX(UChar v1, UChar v2, UChar v3) ++{ ++ put_vr_qw(v1, unop(Iop_NotV128, ++ binop(Iop_XorV128, get_vr_qw(v2), get_vr_qw(v3)))); ++ ++ return "vnx"; ++} ++ + static const HChar * + s390_irgen_LZRF(UChar r1, IRTemp op2addr) + { +@@ -17499,9 +17670,19 @@ s390_irgen_VCTZ(UChar v1, UChar v2, UChar m3) + static const HChar * + s390_irgen_VPOPCT(UChar v1, UChar v2, UChar m3) + { +- vassert(m3 == 0); ++ s390_insn_assert("vpopct", m3 <= 3); ++ ++ IRExpr* cnt = unop(Iop_Cnt8x16, get_vr_qw(v2)); + +- put_vr_qw(v1, unop(Iop_Cnt8x16, get_vr_qw(v2))); ++ if (m3 >= 1) { ++ cnt = unop(Iop_PwAddL8Ux16, cnt); ++ if (m3 >= 2) { ++ cnt = unop(Iop_PwAddL16Ux8, cnt); ++ if (m3 == 3) ++ cnt = unop(Iop_PwAddL32Ux4, cnt); ++ } ++ } ++ put_vr_qw(v1, cnt); + + return "vpopct"; + } +@@ -18335,12 +18516,52 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5) + return "vmalh"; + } + ++static const HChar * ++s390_irgen_VMSL(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) ++{ ++ s390_insn_assert("vmsl", m5 == 3 && (m6 & 3) == 0); ++ ++ IRDirty* d; ++ IRTemp cc = newTemp(Ity_I64); ++ ++ s390x_vec_op_details_t details = { .serialized = 0ULL }; ++ details.op = S390_VEC_OP_VMALH; ++ details.v1 = v1; ++ details.v2 = v2; ++ details.v3 = v3; ++ details.v4 = v4; ++ details.m4 = m5; ++ ++ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", ++ &s390x_dirtyhelper_vec_op, ++ mkIRExprVec_2(IRExpr_GSPTR(), ++ mkU64(details.serialized))); ++ ++ d->nFxState = 4; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; ++ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); ++ d->fxState[0].size = sizeof(V128); ++ d->fxState[1].fx = Ifx_Read; ++ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); ++ d->fxState[1].size = sizeof(V128); ++ d->fxState[2].fx = Ifx_Read; ++ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v4 * sizeof(V128); ++ d->fxState[2].size = sizeof(V128); ++ d->fxState[3].fx = Ifx_Write; ++ d->fxState[3].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); ++ d->fxState[3].size = sizeof(V128); ++ ++ stmt(IRStmt_Dirty(d)); ++ ++ return "vmsl"; ++} ++ + static void +-s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, ++s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, Bool rounding, + UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { + Bool isSingleElementOp = s390_vr_is_single_element_control_set(m4); +- UChar maxIndex = isSingleElementOp ? 0 : 1; + + /* For Iop_F32toF64 we do this: + f32[0] -> f64[0] +@@ -18353,14 +18574,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, + The magic below with scaling factors is used to achieve the logic + described above. + */ +- const UChar sourceIndexScaleFactor = (op == Iop_F32toF64) ? 2 : 1; +- const UChar destinationIndexScaleFactor = (op == Iop_F64toF32) ? 2 : 1; +- +- const Bool isUnary = (op == Iop_F32toF64); +- for (UChar i = 0; i <= maxIndex; i++) { ++ Int size_diff = sizeofIRType(toType) - sizeofIRType(fromType); ++ const UChar sourceIndexScaleFactor = size_diff > 0 ? 2 : 1; ++ const UChar destinationIndexScaleFactor = size_diff < 0 ? 2 : 1; ++ UChar n_elem = (isSingleElementOp ? 1 : ++ 16 / (size_diff > 0 ? ++ sizeofIRType(toType) : sizeofIRType(fromType))); ++ ++ for (UChar i = 0; i < n_elem; i++) { + IRExpr* argument = get_vr(v2, fromType, i * sourceIndexScaleFactor); + IRExpr* result; +- if (!isUnary) { ++ if (rounding) { ++ if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { ++ emulation_warning(EmWarn_S390X_fpext_rounding); ++ m5 = S390_BFP_ROUND_PER_FPC; ++ } + result = binop(op, + mkexpr(encode_bfp_rounding_mode(m5)), + argument); +@@ -18369,10 +18597,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, + } + put_vr(v1, toType, i * destinationIndexScaleFactor, result); + } +- +- if (isSingleElementOp) { +- put_vr_dw1(v1, mkU64(0)); +- } + } + + static const HChar * +@@ -18380,12 +18604,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { + s390_insn_assert("vcdg", m3 == 3); + +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- emulation_warning(EmWarn_S390X_fpext_rounding); +- m5 = S390_BFP_ROUND_PER_FPC; +- } +- +- s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, v1, v2, m3, m4, m5); ++ s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, True, ++ v1, v2, m3, m4, m5); + + return "vcdg"; + } +@@ -18395,12 +18615,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { + s390_insn_assert("vcdlg", m3 == 3); + +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- emulation_warning(EmWarn_S390X_fpext_rounding); +- m5 = S390_BFP_ROUND_PER_FPC; +- } +- +- s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, v1, v2, m3, m4, m5); ++ s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, True, ++ v1, v2, m3, m4, m5); + + return "vcdlg"; + } +@@ -18410,12 +18626,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { + s390_insn_assert("vcgd", m3 == 3); + +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- emulation_warning(EmWarn_S390X_fpext_rounding); +- m5 = S390_BFP_ROUND_PER_FPC; +- } +- +- s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, v1, v2, m3, m4, m5); ++ s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, True, ++ v1, v2, m3, m4, m5); + + return "vcgd"; + } +@@ -18425,12 +18637,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { + s390_insn_assert("vclgd", m3 == 3); + +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- emulation_warning(EmWarn_S390X_fpext_rounding); +- m5 = S390_BFP_ROUND_PER_FPC; +- } +- +- s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, v1, v2, m3, m4, m5); ++ s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, True, ++ v1, v2, m3, m4, m5); + + return "vclgd"; + } +@@ -18438,246 +18646,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + static const HChar * + s390_irgen_VFI(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vfi", m3 == 3); ++ s390_insn_assert("vfi", ++ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); + +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- emulation_warning(EmWarn_S390X_fpext_rounding); +- m5 = S390_BFP_ROUND_PER_FPC; ++ switch (m3) { ++ case 2: s390_vector_fp_convert(Iop_RoundF32toInt, Ity_F32, Ity_F32, True, ++ v1, v2, m3, m4, m5); break; ++ case 3: s390_vector_fp_convert(Iop_RoundF64toInt, Ity_F64, Ity_F64, True, ++ v1, v2, m3, m4, m5); break; ++ case 4: s390_vector_fp_convert(Iop_RoundF128toInt, Ity_F128, Ity_F128, True, ++ v1, v2, m3, m4, m5); break; + } + +- s390_vector_fp_convert(Iop_RoundF64toInt, Ity_F64, Ity_F64, +- v1, v2, m3, m4, m5); +- +- return "vcgld"; ++ return "vfi"; + } + + static const HChar * +-s390_irgen_VLDE(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) ++s390_irgen_VFLL(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vlde", m3 == 2); ++ s390_insn_assert("vfll", m3 == 2 || (s390_host_has_vxe && m3 == 3)); + +- s390_vector_fp_convert(Iop_F32toF64, Ity_F32, Ity_F64, v1, v2, m3, m4, m5); ++ if (m3 == 2) ++ s390_vector_fp_convert(Iop_F32toF64, Ity_F32, Ity_F64, False, ++ v1, v2, m3, m4, m5); ++ else ++ s390_vector_fp_convert(Iop_F64toF128, Ity_F64, Ity_F128, False, ++ v1, v2, m3, m4, m5); + +- return "vlde"; ++ return "vfll"; + } + + static const HChar * +-s390_irgen_VLED(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) ++s390_irgen_VFLR(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vled", m3 == 3); +- +- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { +- m5 = S390_BFP_ROUND_PER_FPC; +- } ++ s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 2)); + +- s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, v1, v2, m3, m4, m5); ++ if (m3 == 3) ++ s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, True, ++ v1, v2, m3, m4, m5); ++ else ++ s390_vector_fp_convert(Iop_F128toF64, Ity_F128, Ity_F64, True, ++ v1, v2, m3, m4, m5); + +- return "vled"; ++ return "vflr"; + } + + static const HChar * + s390_irgen_VFPSO(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vfpso", m3 == 3); +- +- IRExpr* result; +- switch (m5) { +- case 0: { +- /* Invert sign */ +- if (!s390_vr_is_single_element_control_set(m4)) { +- result = unop(Iop_Neg64Fx2, get_vr_qw(v2)); +- } +- else { +- result = binop(Iop_64HLtoV128, +- unop(Iop_ReinterpF64asI64, +- unop(Iop_NegF64, get_vr(v2, Ity_F64, 0))), +- mkU64(0)); +- } +- break; +- } ++ s390_insn_assert("vfpso", m5 <= 2 && ++ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); + +- case 1: { +- /* Set sign to negative */ +- IRExpr* highHalf = mkU64(0x8000000000000000ULL); +- if (!s390_vr_is_single_element_control_set(m4)) { +- IRExpr* lowHalf = highHalf; +- IRExpr* mask = binop(Iop_64HLtoV128, highHalf, lowHalf); +- result = binop(Iop_OrV128, get_vr_qw(v2), mask); +- } +- else { +- result = binop(Iop_64HLtoV128, +- binop(Iop_Or64, get_vr_dw0(v2), highHalf), +- mkU64(0ULL)); +- } ++ Bool single = s390_vr_is_single_element_control_set(m4) || m3 == 4; ++ IRType type = single ? s390_vr_get_ftype(m3) : Ity_V128; ++ int idx = 2 * (m3 - 2) + (single ? 0 : 1); + +- break; +- } +- +- case 2: { +- /* Set sign to positive */ +- if (!s390_vr_is_single_element_control_set(m4)) { +- result = unop(Iop_Abs64Fx2, get_vr_qw(v2)); +- } +- else { +- result = binop(Iop_64HLtoV128, +- unop(Iop_ReinterpF64asI64, +- unop(Iop_AbsF64, get_vr(v2, Ity_F64, 0))), +- mkU64(0)); +- } +- +- break; +- } +- +- default: +- vpanic("s390_irgen_VFPSO: Invalid m5 value"); +- } ++ static const IROp negate_ops[] = { ++ Iop_NegF32, Iop_Neg32Fx4, ++ Iop_NegF64, Iop_Neg64Fx2, ++ Iop_NegF128 ++ }; ++ static const IROp abs_ops[] = { ++ Iop_AbsF32, Iop_Abs32Fx4, ++ Iop_AbsF64, Iop_Abs64Fx2, ++ Iop_AbsF128 ++ }; + +- put_vr_qw(v1, result); +- if (s390_vr_is_single_element_control_set(m4)) { +- put_vr_dw1(v1, mkU64(0ULL)); ++ if (m5 == 1) { ++ /* Set sign to negative */ ++ put_vr(v1, type, 0, ++ unop(negate_ops[idx], ++ unop(abs_ops[idx], get_vr(v2, type, 0)))); ++ } else { ++ /* m5 == 0: invert sign; m5 == 2: set sign to positive */ ++ const IROp *ops = m5 == 2 ? abs_ops : negate_ops; ++ put_vr(v1, type, 0, unop(ops[idx], get_vr(v2, type, 0))); + } + + return "vfpso"; + } + +-static void s390x_vec_fp_binary_op(IROp generalOp, IROp singleElementOp, +- UChar v1, UChar v2, UChar v3, UChar m4, +- UChar m5) ++static const HChar * ++s390x_vec_fp_binary_op(const HChar* mnm, const IROp ops[], ++ UChar v1, UChar v2, UChar v3, ++ UChar m4, UChar m5) + { +- IRExpr* result; +- if (!s390_vr_is_single_element_control_set(m5)) { +- result = triop(generalOp, get_bfp_rounding_mode_from_fpc(), +- get_vr_qw(v2), get_vr_qw(v3)); ++ s390_insn_assert(mnm, (m5 & 7) == 0 && ++ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); ++ ++ int idx = 2 * (m4 - 2); ++ ++ if (m4 == 4 || s390_vr_is_single_element_control_set(m5)) { ++ IRType type = s390_vr_get_ftype(m4); ++ put_vr(v1, type, 0, ++ triop(ops[idx], get_bfp_rounding_mode_from_fpc(), ++ get_vr(v2, type, 0), get_vr(v3, type, 0))); + } else { +- IRExpr* highHalf = triop(singleElementOp, +- get_bfp_rounding_mode_from_fpc(), +- get_vr(v2, Ity_F64, 0), +- get_vr(v3, Ity_F64, 0)); +- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), +- mkU64(0ULL)); ++ put_vr_qw(v1, triop(ops[idx + 1], get_bfp_rounding_mode_from_fpc(), ++ get_vr_qw(v2), get_vr_qw(v3))); + } + +- put_vr_qw(v1, result); ++ return mnm; + } + +-static void s390x_vec_fp_unary_op(IROp generalOp, IROp singleElementOp, +- UChar v1, UChar v2, UChar m3, UChar m4) ++static const HChar * ++s390x_vec_fp_unary_op(const HChar* mnm, const IROp ops[], ++ UChar v1, UChar v2, UChar m3, UChar m4) + { +- IRExpr* result; +- if (!s390_vr_is_single_element_control_set(m4)) { +- result = binop(generalOp, get_bfp_rounding_mode_from_fpc(), +- get_vr_qw(v2)); ++ s390_insn_assert(mnm, (m4 & 7) == 0 && ++ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); ++ ++ int idx = 2 * (m3 - 2); ++ ++ if (m3 == 4 || s390_vr_is_single_element_control_set(m4)) { ++ IRType type = s390_vr_get_ftype(m3); ++ put_vr(v1, type, 0, ++ binop(ops[idx], get_bfp_rounding_mode_from_fpc(), ++ get_vr(v2, type, 0))); + } + else { +- IRExpr* highHalf = binop(singleElementOp, +- get_bfp_rounding_mode_from_fpc(), +- get_vr(v2, Ity_F64, 0)); +- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), +- mkU64(0ULL)); ++ put_vr_qw(v1, binop(ops[idx + 1], get_bfp_rounding_mode_from_fpc(), ++ get_vr_qw(v2))); + } + +- put_vr_qw(v1, result); ++ return mnm; + } + + +-static void +-s390_vector_fp_mulAddOrSub(IROp singleElementOp, +- UChar v1, UChar v2, UChar v3, UChar v4, +- UChar m5, UChar m6) ++static const HChar * ++s390_vector_fp_mulAddOrSub(UChar v1, UChar v2, UChar v3, UChar v4, ++ UChar m5, UChar m6, ++ const HChar* mnm, const IROp single_ops[], ++ Bool negate) + { +- Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); ++ s390_insn_assert(mnm, m6 == 3 || (s390_host_has_vxe && m6 >= 2 && m6 <= 4)); ++ ++ static const IROp negate_ops[] = { Iop_NegF32, Iop_NegF64, Iop_NegF128 }; ++ IRType type = s390_vr_get_ftype(m6); ++ Bool single = s390_vr_is_single_element_control_set(m5) || m6 == 4; ++ UChar n_elem = single ? 1 : s390_vr_get_n_elem(m6); + IRTemp irrm_temp = newTemp(Ity_I32); + assign(irrm_temp, get_bfp_rounding_mode_from_fpc()); + IRExpr* irrm = mkexpr(irrm_temp); +- IRExpr* result; +- IRExpr* highHalf = qop(singleElementOp, +- irrm, +- get_vr(v2, Ity_F64, 0), +- get_vr(v3, Ity_F64, 0), +- get_vr(v4, Ity_F64, 0)); +- +- if (isSingleElementOp) { +- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), +- mkU64(0ULL)); +- } else { +- IRExpr* lowHalf = qop(singleElementOp, +- irrm, +- get_vr(v2, Ity_F64, 1), +- get_vr(v3, Ity_F64, 1), +- get_vr(v4, Ity_F64, 1)); +- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), +- unop(Iop_ReinterpF64asI64, lowHalf)); +- } + +- put_vr_qw(v1, result); ++ for (UChar idx = 0; idx < n_elem; idx++) { ++ IRExpr* result = qop(single_ops[m6 - 2], ++ irrm, ++ get_vr(v2, type, idx), ++ get_vr(v3, type, idx), ++ get_vr(v4, type, idx)); ++ put_vr(v1, type, idx, negate ? unop(negate_ops[m6 - 2], result) : result); ++ } ++ return mnm; + } + + static const HChar * + s390_irgen_VFA(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + { +- s390_insn_assert("vfa", m4 == 3); +- s390x_vec_fp_binary_op(Iop_Add64Fx2, Iop_AddF64, v1, v2, v3, m4, m5); +- return "vfa"; ++ static const IROp vfa_ops[] = { ++ Iop_AddF32, Iop_Add32Fx4, ++ Iop_AddF64, Iop_Add64Fx2, ++ Iop_AddF128, ++ }; ++ return s390x_vec_fp_binary_op("vfa", vfa_ops, v1, v2, v3, m4, m5); + } + + static const HChar * + s390_irgen_VFS(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + { +- s390_insn_assert("vfs", m4 == 3); +- s390x_vec_fp_binary_op(Iop_Sub64Fx2, Iop_SubF64, v1, v2, v3, m4, m5); +- return "vfs"; ++ static const IROp vfs_ops[] = { ++ Iop_SubF32, Iop_Sub32Fx4, ++ Iop_SubF64, Iop_Sub64Fx2, ++ Iop_SubF128, ++ }; ++ return s390x_vec_fp_binary_op("vfs", vfs_ops, v1, v2, v3, m4, m5); + } + + static const HChar * + s390_irgen_VFM(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + { +- s390_insn_assert("vfm", m4 == 3); +- s390x_vec_fp_binary_op(Iop_Mul64Fx2, Iop_MulF64, v1, v2, v3, m4, m5); +- return "vfm"; ++ static const IROp vfm_ops[] = { ++ Iop_MulF32, Iop_Mul32Fx4, ++ Iop_MulF64, Iop_Mul64Fx2, ++ Iop_MulF128, ++ }; ++ return s390x_vec_fp_binary_op("vfm", vfm_ops, v1, v2, v3, m4, m5); + } + + static const HChar * + s390_irgen_VFD(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + { +- s390_insn_assert("vfd", m4 == 3); +- s390x_vec_fp_binary_op(Iop_Div64Fx2, Iop_DivF64, v1, v2, v3, m4, m5); +- return "vfd"; ++ static const IROp vfd_ops[] = { ++ Iop_DivF32, Iop_Div32Fx4, ++ Iop_DivF64, Iop_Div64Fx2, ++ Iop_DivF128, ++ }; ++ return s390x_vec_fp_binary_op("vfd", vfd_ops, v1, v2, v3, m4, m5); + } + + static const HChar * + s390_irgen_VFSQ(UChar v1, UChar v2, UChar m3, UChar m4) + { +- s390_insn_assert("vfsq", m3 == 3); +- s390x_vec_fp_unary_op(Iop_Sqrt64Fx2, Iop_SqrtF64, v1, v2, m3, m4); +- +- return "vfsq"; ++ static const IROp vfsq_ops[] = { ++ Iop_SqrtF32, Iop_Sqrt32Fx4, ++ Iop_SqrtF64, Iop_Sqrt64Fx2, ++ Iop_SqrtF128 ++ }; ++ return s390x_vec_fp_unary_op("vfsq", vfsq_ops, v1, v2, m3, m4); + } + ++static const IROp FMA_single_ops[] = { ++ Iop_MAddF32, Iop_MAddF64, Iop_MAddF128 ++}; ++ + static const HChar * + s390_irgen_VFMA(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) + { +- s390_insn_assert("vfma", m6 == 3); +- s390_vector_fp_mulAddOrSub(Iop_MAddF64, v1, v2, v3, v4, m5, m6); +- return "vfma"; ++ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, ++ "vfma", FMA_single_ops, False); + } + ++static const HChar * ++s390_irgen_VFNMA(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) ++{ ++ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, ++ "vfnma", FMA_single_ops, True); ++} ++ ++static const IROp FMS_single_ops[] = { ++ Iop_MSubF32, Iop_MSubF64, Iop_MSubF128 ++}; ++ + static const HChar * + s390_irgen_VFMS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) + { +- s390_insn_assert("vfms", m6 == 3); +- s390_vector_fp_mulAddOrSub(Iop_MSubF64, v1, v2, v3, v4, m5, m6); +- return "vfms"; ++ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, ++ "vfms", FMS_single_ops, False); ++} ++ ++static const HChar * ++s390_irgen_VFNMS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) ++{ ++ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, ++ "vfnms", FMS_single_ops, True); + } + + static const HChar * + s390_irgen_WFC(UChar v1, UChar v2, UChar m3, UChar m4) + { +- s390_insn_assert("wfc", m3 == 3); +- s390_insn_assert("wfc", m4 == 0); ++ s390_insn_assert("wfc", m4 == 0 && ++ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); ++ ++ static const IROp ops[] = { Iop_CmpF32, Iop_CmpF64, Iop_CmpF128 }; ++ IRType type = s390_vr_get_ftype(m3); + + IRTemp cc_vex = newTemp(Ity_I32); +- assign(cc_vex, binop(Iop_CmpF64, +- get_vr(v1, Ity_F64, 0), get_vr(v2, Ity_F64, 0))); ++ assign(cc_vex, binop(ops[m3 - 2], get_vr(v1, type, 0), get_vr(v2, type, 0))); + + IRTemp cc_s390 = newTemp(Ity_I32); + assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); +@@ -18695,213 +18919,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4) + } + + static const HChar * +-s390_irgen_VFCE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++s390_irgen_VFCx(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6, ++ const HChar *mnem, IRCmpFResult cmp, Bool equal_ok, ++ IROp cmp32, IROp cmp64) + { +- s390_insn_assert("vfce", m4 == 3); ++ s390_insn_assert(mnem, (m5 & 3) == 0 && (m6 & 14) == 0 && ++ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); + +- Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); +- if (!s390_vr_is_cs_set(m6)) { +- if (!isSingleElementOp) { +- put_vr_qw(v1, binop(Iop_CmpEQ64Fx2, get_vr_qw(v2), get_vr_qw(v3))); ++ Bool single = s390_vr_is_single_element_control_set(m5) || m4 == 4; ++ ++ if (single) { ++ static const IROp ops[] = { Iop_CmpF32, Iop_CmpF64, Iop_CmpF128 }; ++ IRType type = s390_vr_get_ftype(m4); ++ IRTemp result = newTemp(Ity_I32); ++ IRTemp cond = newTemp(Ity_I1); ++ ++ assign(result, binop(ops[m4 - 2], ++ get_vr(v2, type, 0), get_vr(v3, type, 0))); ++ if (equal_ok) { ++ assign(cond, ++ binop(Iop_Or1, ++ binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp)), ++ binop(Iop_CmpEQ32, mkexpr(result), mkU32(Ircr_EQ)))); + } else { +- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v2, Ity_F64, 0), +- get_vr(v3, Ity_F64, 0)); +- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, +- mkU32(Ircr_EQ)), +- mkU64(0xffffffffffffffffULL), +- mkU64(0ULL)); +- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); ++ assign(cond, binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp))); ++ } ++ put_vr_qw(v1, mkite(mkexpr(cond), ++ IRExpr_Const(IRConst_V128(0xffff)), ++ IRExpr_Const(IRConst_V128(0)))); ++ if (s390_vr_is_cs_set(m6)) { ++ IRTemp cc = newTemp(Ity_I64); ++ assign(cc, mkite(mkexpr(cond), mkU64(0), mkU64(3))); ++ s390_cc_set(cc); + } + } else { +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); +- +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFCE; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.m4 = m4; +- details.m5 = m5; +- details.m6 = m6; ++ IRTemp result = newTemp(Ity_V128); ++ ++ assign(result, binop(m4 == 2 ? cmp32 : cmp64, ++ get_vr_qw(v2), get_vr_qw(v3))); ++ put_vr_qw(v1, mkexpr(result)); ++ if (s390_vr_is_cs_set(m6)) { ++ IRTemp cc = newTemp(Ity_I64); ++ assign(cc, ++ mkite(binop(Iop_CmpEQ64, ++ binop(Iop_And64, ++ unop(Iop_V128to64, mkexpr(result)), ++ unop(Iop_V128HIto64, mkexpr(result))), ++ mkU64(-1ULL)), ++ mkU64(0), /* all comparison results are true */ ++ mkite(binop(Iop_CmpEQ64, ++ binop(Iop_Or64, ++ unop(Iop_V128to64, mkexpr(result)), ++ unop(Iop_V128HIto64, mkexpr(result))), ++ mkU64(0)), ++ mkU64(3), /* all false */ ++ mkU64(1)))); /* mixed true/false */ ++ s390_cc_set(cc); ++ } ++ } + +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++ return mnem; ++} + +- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); +- d->nFxState = 3; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = elementSize; +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = elementSize; +- d->fxState[2].fx = Ifx_Write; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); ++static const HChar * ++s390_irgen_VFCE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++{ ++ return s390_irgen_VFCx(v1, v2, v3, m4, m5, m6, "vfce", Ircr_EQ, ++ False, Iop_CmpEQ32Fx4, Iop_CmpEQ64Fx2); ++} + +- stmt(IRStmt_Dirty(d)); +- s390_cc_set(cc); +- } ++static const HChar * ++s390_irgen_VFCH(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++{ ++ /* Swap arguments and compare "low" instead. */ ++ return s390_irgen_VFCx(v1, v3, v2, m4, m5, m6, "vfch", Ircr_LT, ++ False, Iop_CmpLT32Fx4, Iop_CmpLT64Fx2); ++} + +- return "vfce"; ++static const HChar * ++s390_irgen_VFCHE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++{ ++ /* Swap arguments and compare "low or equal" instead. */ ++ return s390_irgen_VFCx(v1, v3, v2, m4, m5, m6, "vfche", Ircr_LT, ++ True, Iop_CmpLE32Fx4, Iop_CmpLE64Fx2); + } + + static const HChar * +-s390_irgen_VFCH(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++s390_irgen_VFTCI(UChar v1, UChar v2, UShort i3, UChar m4, UChar m5) + { +- vassert(m4 == 3); ++ s390_insn_assert("vftci", ++ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); + + Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); +- if (!s390_vr_is_cs_set(m6)) { +- if (!isSingleElementOp) { +- put_vr_qw(v1, binop(Iop_CmpLE64Fx2, get_vr_qw(v3), get_vr_qw(v2))); +- } else { +- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v2, Ity_F64, 0), +- get_vr(v3, Ity_F64, 0)); +- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, +- mkU32(Ircr_GT)), +- mkU64(0xffffffffffffffffULL), +- mkU64(0ULL)); +- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); +- } +- } +- else { +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); + +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFCH; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.m4 = m4; +- details.m5 = m5; +- details.m6 = m6; ++ IRDirty* d; ++ IRTemp cc = newTemp(Ity_I64); + +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++ s390x_vec_op_details_t details = { .serialized = 0ULL }; ++ details.op = S390_VEC_OP_VFTCI; ++ details.v1 = v1; ++ details.v2 = v2; ++ details.i3 = i3; ++ details.m4 = m4; ++ details.m5 = m5; + +- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); +- d->nFxState = 3; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = elementSize; +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = elementSize; +- d->fxState[2].fx = Ifx_Write; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); ++ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", ++ &s390x_dirtyhelper_vec_op, ++ mkIRExprVec_2(IRExpr_GSPTR(), ++ mkU64(details.serialized))); + +- stmt(IRStmt_Dirty(d)); +- s390_cc_set(cc); +- } ++ const UChar elementSize = isSingleElementOp ? ++ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); ++ d->nFxState = 2; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; ++ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); ++ d->fxState[0].size = elementSize; ++ d->fxState[1].fx = Ifx_Write; ++ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); ++ d->fxState[1].size = sizeof(V128); ++ ++ stmt(IRStmt_Dirty(d)); ++ s390_cc_set(cc); + +- return "vfch"; ++ return "vftci"; + } + + static const HChar * +-s390_irgen_VFCHE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) ++s390_irgen_VFMIN(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) + { +- s390_insn_assert("vfche", m4 == 3); ++ s390_insn_assert("vfmin", ++ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); + + Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); +- if (!s390_vr_is_cs_set(m6)) { +- if (!isSingleElementOp) { +- put_vr_qw(v1, binop(Iop_CmpLT64Fx2, get_vr_qw(v3), get_vr_qw(v2))); +- } +- else { +- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v3, Ity_F64, 0), +- get_vr(v2, Ity_F64, 0)); +- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, +- mkU32(Ircr_LT)), +- mkU64(0xffffffffffffffffULL), +- mkU64(0ULL)); +- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); +- } +- } +- else { +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); +- +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFCHE; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.m4 = m4; +- details.m5 = m5; +- details.m6 = m6; ++ IRDirty* d; ++ IRTemp cc = newTemp(Ity_I64); + +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++ s390x_vec_op_details_t details = { .serialized = 0ULL }; ++ details.op = S390_VEC_OP_VFMIN; ++ details.v1 = v1; ++ details.v2 = v2; ++ details.v3 = v3; ++ details.m4 = m4; ++ details.m5 = m5; ++ details.m6 = m6; + +- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); +- d->nFxState = 3; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = elementSize; +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = elementSize; +- d->fxState[2].fx = Ifx_Write; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); ++ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", ++ &s390x_dirtyhelper_vec_op, ++ mkIRExprVec_2(IRExpr_GSPTR(), ++ mkU64(details.serialized))); + +- stmt(IRStmt_Dirty(d)); +- s390_cc_set(cc); +- } ++ const UChar elementSize = isSingleElementOp ? ++ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); ++ d->nFxState = 3; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; ++ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); ++ d->fxState[0].size = elementSize; ++ d->fxState[1].fx = Ifx_Read; ++ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); ++ d->fxState[1].size = elementSize; ++ d->fxState[2].fx = Ifx_Write; ++ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); ++ d->fxState[2].size = sizeof(V128); + +- return "vfche"; ++ stmt(IRStmt_Dirty(d)); ++ s390_cc_set(cc); ++ return "vfmin"; + } + + static const HChar * +-s390_irgen_VFTCI(UChar v1, UChar v2, UShort i3, UChar m4, UChar m5) ++s390_irgen_VFMAX(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) + { +- s390_insn_assert("vftci", m4 == 3); ++ s390_insn_assert("vfmax", ++ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); + + Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); +- + IRDirty* d; + IRTemp cc = newTemp(Ity_I64); + + s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFTCI; ++ details.op = S390_VEC_OP_VFMAX; + details.v1 = v1; + details.v2 = v2; +- details.i3 = i3; ++ details.v3 = v3; + details.m4 = m4; + details.m5 = m5; ++ details.m6 = m6; + + d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", + &s390x_dirtyhelper_vec_op, + mkIRExprVec_2(IRExpr_GSPTR(), + mkU64(details.serialized))); + +- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); +- d->nFxState = 2; ++ const UChar elementSize = isSingleElementOp ? ++ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); ++ d->nFxState = 3; + vex_bzero(&d->fxState, sizeof(d->fxState)); + d->fxState[0].fx = Ifx_Read; + d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); + d->fxState[0].size = elementSize; +- d->fxState[1].fx = Ifx_Write; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[1].size = sizeof(V128); ++ d->fxState[1].fx = Ifx_Read; ++ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); ++ d->fxState[1].size = elementSize; ++ d->fxState[2].fx = Ifx_Write; ++ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); ++ d->fxState[2].size = sizeof(V128); + + stmt(IRStmt_Dirty(d)); + s390_cc_set(cc); ++ return "vfmax"; ++} + +- return "vftci"; ++static const HChar * ++s390_irgen_VBPERM(UChar v1, UChar v2, UChar v3) ++{ ++ IRDirty* d; ++ IRTemp cc = newTemp(Ity_I64); ++ ++ s390x_vec_op_details_t details = { .serialized = 0ULL }; ++ details.op = S390_VEC_OP_VBPERM; ++ details.v1 = v1; ++ details.v2 = v2; ++ details.v3 = v3; ++ details.m4 = 0; ++ details.m5 = 0; ++ details.m6 = 0; ++ ++ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", ++ &s390x_dirtyhelper_vec_op, ++ mkIRExprVec_2(IRExpr_GSPTR(), ++ mkU64(details.serialized))); ++ ++ d->nFxState = 3; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; ++ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); ++ d->fxState[0].size = sizeof(V128); ++ d->fxState[1].fx = Ifx_Read; ++ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); ++ d->fxState[1].size = sizeof(V128); ++ d->fxState[2].fx = Ifx_Write; ++ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); ++ d->fxState[2].size = sizeof(V128); ++ ++ stmt(IRStmt_Dirty(d)); ++ s390_cc_set(cc); ++ return "vbperm"; + } + + /* New insns are added here. +@@ -20489,11 +20753,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + RXY_dl2(ovl), + RXY_dh2(ovl)); goto ok; + case 0xe60000000034ULL: /* VPKZ */ goto unimplemented; +- case 0xe60000000035ULL: /* VLRL */ goto unimplemented; +- case 0xe60000000037ULL: /* VLRLR */ goto unimplemented; ++ case 0xe60000000035ULL: s390_format_VSI_URDV(s390_irgen_VLRL, VSI_v1(ovl), ++ VSI_b2(ovl), VSI_d2(ovl), ++ VSI_i3(ovl), ++ VSI_rxb(ovl)); goto ok; ++ case 0xe60000000037ULL: s390_format_VRS_RRDV(s390_irgen_VLRLR, VRSd_v1(ovl), ++ VRSd_r3(ovl), VRS_b2(ovl), ++ VRS_d2(ovl), ++ VRS_rxb(ovl)); goto ok; + case 0xe6000000003cULL: /* VUPKZ */ goto unimplemented; +- case 0xe6000000003dULL: /* VSTRL */ goto unimplemented; +- case 0xe6000000003fULL: /* VSTRLR */ goto unimplemented; ++ case 0xe6000000003dULL: s390_format_VSI_URDV(s390_irgen_VSTRL, VSI_v1(ovl), ++ VSI_b2(ovl), VSI_d2(ovl), ++ VSI_i3(ovl), ++ VSI_rxb(ovl)); goto ok; ++ case 0xe6000000003fULL: s390_format_VRS_RRDV(s390_irgen_VSTRLR, VRSd_v1(ovl), ++ VRSd_r3(ovl), VRS_b2(ovl), ++ VRS_d2(ovl), ++ VRS_rxb(ovl)); goto ok; + case 0xe60000000049ULL: /* VLIP */ goto unimplemented; + case 0xe60000000050ULL: /* VCVB */ goto unimplemented; + case 0xe60000000052ULL: /* VCVBG */ goto unimplemented; +@@ -20691,12 +20967,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe7000000006bULL: s390_format_VRR_VVV(s390_irgen_VNO, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_rxb(ovl)); goto ok; +- case 0xe7000000006cULL: /* VNX */ goto unimplemented; ++ case 0xe7000000006cULL: s390_format_VRR_VVV(s390_irgen_VNX, VRR_v1(ovl), ++ VRR_v2(ovl), VRR_r3(ovl), ++ VRR_rxb(ovl)); goto ok; + case 0xe7000000006dULL: s390_format_VRR_VVV(s390_irgen_VX, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_rxb(ovl)); goto ok; +- case 0xe7000000006eULL: /* VNN */ goto unimplemented; +- case 0xe7000000006fULL: /* VOC */ goto unimplemented; ++ case 0xe7000000006eULL: s390_format_VRR_VVV(s390_irgen_VNN, VRR_v1(ovl), ++ VRR_v2(ovl), VRR_r3(ovl), ++ VRR_rxb(ovl)); goto ok; ++ case 0xe7000000006fULL: s390_format_VRR_VVV(s390_irgen_VOC, VRR_v1(ovl), ++ VRR_v2(ovl), VRR_r3(ovl), ++ VRR_rxb(ovl)); goto ok; + case 0xe70000000070ULL: s390_format_VRR_VVVM(s390_irgen_VESLV, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +@@ -20749,7 +21031,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe70000000084ULL: s390_format_VRR_VVVM(s390_irgen_VPDI, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +- case 0xe70000000085ULL: /* VBPERM */ goto unimplemented; ++ case 0xe70000000085ULL: s390_format_VRR_VVV(s390_irgen_VBPERM, VRR_v1(ovl), ++ VRR_v2(ovl), VRR_r3(ovl), ++ VRR_rxb(ovl)); goto ok; + case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl), + VRRd_v2(ovl), VRRd_v3(ovl), + VRRd_v4(ovl), VRRd_m5(ovl), +@@ -20780,8 +21064,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe70000000097ULL: s390_format_VRR_VVVMM(s390_irgen_VPKS, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_m5(ovl), VRR_rxb(ovl)); goto ok; +- case 0xe7000000009eULL: /* VFNMS */ goto unimplemented; +- case 0xe7000000009fULL: /* VFNMA */ goto unimplemented; ++ case 0xe7000000009eULL: s390_format_VRR_VVVVMM(s390_irgen_VFNMS, VRRe_v1(ovl), ++ VRRe_v2(ovl), VRRe_v3(ovl), ++ VRRe_v4(ovl), VRRe_m5(ovl), ++ VRRe_m6(ovl), ++ VRRe_rxb(ovl)); goto ok; ++ case 0xe7000000009fULL: s390_format_VRR_VVVVMM(s390_irgen_VFNMA, VRRe_v1(ovl), ++ VRRe_v2(ovl), VRRe_v3(ovl), ++ VRRe_v4(ovl), VRRe_m5(ovl), ++ VRRe_m6(ovl), ++ VRRe_rxb(ovl)); goto ok; + case 0xe700000000a1ULL: s390_format_VRR_VVVM(s390_irgen_VMLH, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +@@ -20834,7 +21126,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe700000000b4ULL: s390_format_VRR_VVVM(s390_irgen_VGFM, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +- case 0xe700000000b8ULL: /* VMSL */ goto unimplemented; ++ case 0xe700000000b8ULL: s390_format_VRR_VVVVMM(s390_irgen_VMSL, VRRd_v1(ovl), ++ VRRd_v2(ovl), VRRd_v3(ovl), ++ VRRd_v4(ovl), VRRd_m5(ovl), ++ VRRd_m6(ovl), ++ VRRd_rxb(ovl)); goto ok; + case 0xe700000000b9ULL: s390_format_VRRd_VVVVM(s390_irgen_VACCC, VRRd_v1(ovl), + VRRd_v2(ovl), VRRd_v3(ovl), + VRRd_v4(ovl), VRRd_m5(ovl), +@@ -20871,11 +21167,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + VRRa_v2(ovl), VRRa_m3(ovl), + VRRa_m4(ovl), VRRa_m5(ovl), + VRRa_rxb(ovl)); goto ok; +- case 0xe700000000c4ULL: s390_format_VRRa_VVMMM(s390_irgen_VLDE, VRRa_v1(ovl), ++ case 0xe700000000c4ULL: s390_format_VRRa_VVMMM(s390_irgen_VFLL, VRRa_v1(ovl), + VRRa_v2(ovl), VRRa_m3(ovl), + VRRa_m4(ovl), VRRa_m5(ovl), + VRRa_rxb(ovl)); goto ok; +- case 0xe700000000c5ULL: s390_format_VRRa_VVMMM(s390_irgen_VLED, VRRa_v1(ovl), ++ case 0xe700000000c5ULL: s390_format_VRRa_VVMMM(s390_irgen_VFLR, VRRa_v1(ovl), + VRRa_v2(ovl), VRRa_m3(ovl), + VRRa_m4(ovl), VRRa_m5(ovl), + VRRa_rxb(ovl)); goto ok; +@@ -20956,8 +21252,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + VRRa_m3(ovl), VRRa_m4(ovl), + VRRa_m5(ovl), + VRRa_rxb(ovl)); goto ok; +- case 0xe700000000eeULL: /* VFMIN */ goto unimplemented; +- case 0xe700000000efULL: /* VFMAX */ goto unimplemented; ++ case 0xe700000000eeULL: s390_format_VRRa_VVVMMM(s390_irgen_VFMIN, VRRa_v1(ovl), ++ VRRa_v2(ovl), VRRa_v3(ovl), ++ VRRa_m3(ovl), VRRa_m4(ovl), ++ VRRa_m5(ovl), ++ VRRa_rxb(ovl)); goto ok; ++ case 0xe700000000efULL: s390_format_VRRa_VVVMMM(s390_irgen_VFMAX, VRRa_v1(ovl), ++ VRRa_v2(ovl), VRRa_v3(ovl), ++ VRRa_m3(ovl), VRRa_m4(ovl), ++ VRRa_m5(ovl), ++ VRRa_rxb(ovl)); goto ok; + case 0xe700000000f0ULL: s390_format_VRR_VVVM(s390_irgen_VAVGL, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index 3b6121fec..a59db6578 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -684,6 +684,8 @@ s390_insn* genMove_S390(HReg from, HReg to, Bool mode64) + switch (hregClass(from)) { + case HRcInt64: + return s390_insn_move(sizeofIRType(Ity_I64), to, from); ++ case HRcFlt64: ++ return s390_insn_move(sizeofIRType(Ity_F64), to, from); + case HRcVec128: + return s390_insn_move(sizeofIRType(Ity_V128), to, from); + default: +@@ -7870,6 +7872,10 @@ s390_insn_as_string(const s390_insn *insn) + op = "v-vfloatabs"; + break; + ++ case S390_VEC_FLOAT_NABS: ++ op = "v-vfloatnabs"; ++ break; ++ + default: + goto fail; + } +@@ -9439,21 +9445,28 @@ s390_insn_unop_emit(UChar *buf, const s390_insn *insn) + + case S390_VEC_FLOAT_NEG: { + vassert(insn->variant.unop.src.tag == S390_OPND_REG); +- vassert(insn->size == 8); ++ vassert(insn->size >= 4); + UChar v1 = hregNumber(insn->variant.unop.dst); + UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); + return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 0); + } + case S390_VEC_FLOAT_ABS: { + vassert(insn->variant.unop.src.tag == S390_OPND_REG); +- vassert(insn->size == 8); ++ vassert(insn->size >= 4); + UChar v1 = hregNumber(insn->variant.unop.dst); + UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); + return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 2); + } ++ case S390_VEC_FLOAT_NABS: { ++ vassert(insn->variant.unop.src.tag == S390_OPND_REG); ++ vassert(insn->size >= 4); ++ UChar v1 = hregNumber(insn->variant.unop.dst); ++ UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); ++ return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 1); ++ } + case S390_VEC_FLOAT_SQRT: { + vassert(insn->variant.unop.src.tag == S390_OPND_REG); +- vassert(insn->size == 8); ++ vassert(insn->size >= 4); + UChar v1 = hregNumber(insn->variant.unop.dst); + UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); + return s390_emit_VFSQ(buf, v1, v2, s390_getM_from_size(insn->size), 0); +diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h +index 3f6473e10..46d8e1f12 100644 +--- a/VEX/priv/host_s390_defs.h ++++ b/VEX/priv/host_s390_defs.h +@@ -205,6 +205,7 @@ typedef enum { + S390_VEC_COUNT_ONES, + S390_VEC_FLOAT_NEG, + S390_VEC_FLOAT_ABS, ++ S390_VEC_FLOAT_NABS, + S390_VEC_FLOAT_SQRT, + S390_UNOP_T_INVALID + } s390_unop_t; +@@ -931,6 +932,8 @@ extern UInt s390_host_hwcaps; + (s390_host_hwcaps & (VEX_HWCAPS_S390X_MSA5)) + #define s390_host_has_lsc2 \ + (s390_host_hwcaps & (VEX_HWCAPS_S390X_LSC2)) ++#define s390_host_has_vxe \ ++ (s390_host_hwcaps & (VEX_HWCAPS_S390X_VXE)) + #endif /* ndef __VEX_HOST_S390_DEFS_H */ + + /*---------------------------------------------------------------*/ +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 134f3eb6f..58f70ff4e 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -2362,9 +2362,10 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env, + case Iop_NegF128: + if (left->tag == Iex_Unop && + (left->Iex.Unop.op == Iop_AbsF32 || +- left->Iex.Unop.op == Iop_AbsF64)) ++ left->Iex.Unop.op == Iop_AbsF64)) { + bfpop = S390_BFP_NABS; +- else ++ left = left->Iex.Unop.arg; ++ } else + bfpop = S390_BFP_NEG; + goto float128_opnd; + case Iop_AbsF128: bfpop = S390_BFP_ABS; goto float128_opnd; +@@ -2726,9 +2727,10 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr) + case Iop_NegF64: + if (left->tag == Iex_Unop && + (left->Iex.Unop.op == Iop_AbsF32 || +- left->Iex.Unop.op == Iop_AbsF64)) ++ left->Iex.Unop.op == Iop_AbsF64)) { + bfpop = S390_BFP_NABS; +- else ++ left = left->Iex.Unop.arg; ++ } else + bfpop = S390_BFP_NEG; + break; + +@@ -3944,11 +3946,27 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + vec_unop = S390_VEC_COUNT_ONES; + goto Iop_V_wrk; + ++ case Iop_Neg32Fx4: ++ size = 4; ++ vec_unop = S390_VEC_FLOAT_NEG; ++ if (arg->tag == Iex_Unop && arg->Iex.Unop.op == Iop_Abs32Fx4) { ++ vec_unop = S390_VEC_FLOAT_NABS; ++ arg = arg->Iex.Unop.arg; ++ } ++ goto Iop_V_wrk; + case Iop_Neg64Fx2: + size = 8; + vec_unop = S390_VEC_FLOAT_NEG; ++ if (arg->tag == Iex_Unop && arg->Iex.Unop.op == Iop_Abs64Fx2) { ++ vec_unop = S390_VEC_FLOAT_NABS; ++ arg = arg->Iex.Unop.arg; ++ } + goto Iop_V_wrk; + ++ case Iop_Abs32Fx4: ++ size = 4; ++ vec_unop = S390_VEC_FLOAT_ABS; ++ goto Iop_V_wrk; + case Iop_Abs64Fx2: + size = 8; + vec_unop = S390_VEC_FLOAT_ABS; +@@ -4474,17 +4492,29 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + vec_binop = S390_VEC_ELEM_ROLL_V; + goto Iop_VV_wrk; + ++ case Iop_CmpEQ32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_COMPARE_EQUAL; ++ goto Iop_VV_wrk; + case Iop_CmpEQ64Fx2: + size = 8; + vec_binop = S390_VEC_FLOAT_COMPARE_EQUAL; + goto Iop_VV_wrk; + ++ case Iop_CmpLE32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_COMPARE_LESS_OR_EQUAL; ++ goto Iop_VV_wrk; + case Iop_CmpLE64Fx2: { + size = 8; + vec_binop = S390_VEC_FLOAT_COMPARE_LESS_OR_EQUAL; + goto Iop_VV_wrk; + } + ++ case Iop_CmpLT32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_COMPARE_LESS; ++ goto Iop_VV_wrk; + case Iop_CmpLT64Fx2: { + size = 8; + vec_binop = S390_VEC_FLOAT_COMPARE_LESS; +@@ -4671,20 +4701,41 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + dst, reg1, reg2, reg3)); + return dst; + ++ case Iop_Add32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_ADD; ++ goto Iop_irrm_VV_wrk; ++ + case Iop_Add64Fx2: + size = 8; + vec_binop = S390_VEC_FLOAT_ADD; + goto Iop_irrm_VV_wrk; + ++ case Iop_Sub32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_SUB; ++ goto Iop_irrm_VV_wrk; ++ + case Iop_Sub64Fx2: + size = 8; + vec_binop = S390_VEC_FLOAT_SUB; + goto Iop_irrm_VV_wrk; + ++ case Iop_Mul32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_MUL; ++ goto Iop_irrm_VV_wrk; ++ + case Iop_Mul64Fx2: + size = 8; + vec_binop = S390_VEC_FLOAT_MUL; + goto Iop_irrm_VV_wrk; ++ ++ case Iop_Div32Fx4: ++ size = 4; ++ vec_binop = S390_VEC_FLOAT_DIV; ++ goto Iop_irrm_VV_wrk; ++ + case Iop_Div64Fx2: + size = 8; + vec_binop = S390_VEC_FLOAT_DIV; +diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c +index 72f419988..12f521d8c 100644 +--- a/VEX/priv/main_main.c ++++ b/VEX/priv/main_main.c +@@ -1795,6 +1795,7 @@ static const HChar* show_hwcaps_s390x ( UInt hwcaps ) + { VEX_HWCAPS_S390X_MSA5, "msa5" }, + { VEX_HWCAPS_S390X_MI2, "mi2" }, + { VEX_HWCAPS_S390X_LSC2, "lsc2" }, ++ { VEX_HWCAPS_S390X_LSC2, "vxe" }, + }; + /* Allocate a large enough buffer */ + static HChar buf[sizeof prefix + +diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h +index 53e3705da..2ffed0ad0 100644 +--- a/VEX/pub/libvex.h ++++ b/VEX/pub/libvex.h +@@ -171,7 +171,7 @@ typedef + #define VEX_HWCAPS_S390X_MSA5 (1<<19) /* message security assistance facility */ + #define VEX_HWCAPS_S390X_MI2 (1<<20) /* miscellaneous-instruction-extensions facility 2 */ + #define VEX_HWCAPS_S390X_LSC2 (1<<21) /* Conditional load/store facility2 */ +- ++#define VEX_HWCAPS_S390X_VXE (1<<22) /* Vector-enhancements facility */ + + /* Special value representing all available s390x hwcaps */ + #define VEX_HWCAPS_S390X_ALL (VEX_HWCAPS_S390X_LDISP | \ +@@ -189,7 +189,8 @@ typedef + VEX_HWCAPS_S390X_VX | \ + VEX_HWCAPS_S390X_MSA5 | \ + VEX_HWCAPS_S390X_MI2 | \ +- VEX_HWCAPS_S390X_LSC2) ++ VEX_HWCAPS_S390X_LSC2 | \ ++ VEX_HWCAPS_S390X_VXE) + + #define VEX_HWCAPS_S390X(x) ((x) & ~VEX_S390X_MODEL_MASK) + #define VEX_S390X_MODEL(x) ((x) & VEX_S390X_MODEL_MASK) +diff --git a/VEX/pub/libvex_emnote.h b/VEX/pub/libvex_emnote.h +index be033b4da..77880a270 100644 +--- a/VEX/pub/libvex_emnote.h ++++ b/VEX/pub/libvex_emnote.h +@@ -124,6 +124,10 @@ typedef + /* ppno insn is not supported on this host */ + EmFail_S390X_ppno, + ++ /* insn needs vector-enhancements facility which is not available on this ++ host */ ++ EmFail_S390X_vxe, ++ + EmNote_NUMBER + } + VexEmNote; +diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c +index 365942c4f..ba84fa6e9 100644 +--- a/coregrind/m_initimg/initimg-linux.c ++++ b/coregrind/m_initimg/initimg-linux.c +@@ -697,9 +697,13 @@ Addr setup_client_stack( void* init_sp, + } + # elif defined(VGP_s390x_linux) + { +- /* Advertise hardware features "below" TE and VXRS. TE itself +- and anything above VXRS is not supported by Valgrind. */ +- auxv->u.a_val &= (VKI_HWCAP_S390_TE - 1) | VKI_HWCAP_S390_VXRS; ++ /* Out of the hardware features available on the platform, ++ advertise those "below" TE, as well as the ones explicitly ++ ORed in the expression below. Anything else, such as TE ++ itself, is not supported by Valgrind. */ ++ auxv->u.a_val &= ((VKI_HWCAP_S390_TE - 1) ++ | VKI_HWCAP_S390_VXRS ++ | VKI_HWCAP_S390_VXRS_EXT); + } + # elif defined(VGP_arm64_linux) + { +diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c +index e7877e636..228ae2554 100644 +--- a/coregrind/m_machine.c ++++ b/coregrind/m_machine.c +@@ -1555,6 +1555,7 @@ Bool VG_(machine_get_hwcaps)( void ) + { False, S390_FAC_MSA5, VEX_HWCAPS_S390X_MSA5, "MSA5" }, + { False, S390_FAC_MI2, VEX_HWCAPS_S390X_MI2, "MI2" }, + { False, S390_FAC_LSC2, VEX_HWCAPS_S390X_LSC2, "LSC2" }, ++ { False, S390_FAC_VXE, VEX_HWCAPS_S390X_VXE, "VXE" }, + }; + + /* Set hwcaps according to the detected facilities */ +diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h +index 7b863a324..4ab2d3334 100644 +--- a/include/vki/vki-s390x-linux.h ++++ b/include/vki/vki-s390x-linux.h +@@ -806,6 +806,7 @@ typedef vki_s390_regs vki_elf_gregset_t; + + #define VKI_HWCAP_S390_TE 1024 + #define VKI_HWCAP_S390_VXRS 2048 ++#define VKI_HWCAP_S390_VXRS_EXT 8192 + + + //---------------------------------------------------------------------- +diff --git a/none/tests/s390x/vector.h b/none/tests/s390x/vector.h +index de2391480..632c2cb9c 100644 +--- a/none/tests/s390x/vector.h ++++ b/none/tests/s390x/vector.h +@@ -86,6 +86,13 @@ void print_hex(const V128 value) { + printf("%016lx | %016lx\n", value.u64[0], value.u64[1]); + } + ++void print_hex64(const V128 value, int zero_only) { ++ if (zero_only) ++ printf("%016lx | --\n", value.u64[0]); ++ else ++ printf("%016lx | %016lx\n", value.u64[0], value.u64[1]); ++} ++ + void print_f32(const V128 value, int even_only, int zero_only) { + if (zero_only) + printf("%a | -- | -- | --\n", value.f32[0]); +@@ -222,8 +229,10 @@ static void test_##insn##_selective(const s390x_test_usageInfo info) \ + {printf(" v_arg2 = "); print_hex(v_arg2);} \ + if (info & V128_V_ARG3_AS_INT) \ + {printf(" v_arg3 = "); print_hex(v_arg3);} \ +- if (info & V128_V_RES_AS_INT) \ +- {printf(" v_result = "); print_hex(v_result);} \ ++ if (info & V128_V_RES_AS_INT) { \ ++ printf(" v_result = "); \ ++ print_hex64(v_result, info & V128_V_RES_ZERO_ONLY); \ ++ } \ + \ + if (info & V128_V_ARG1_AS_FLOAT64) \ + {printf(" v_arg1 = "); print_f64(v_arg1, 0);} \ +diff --git a/none/tests/s390x/vector_float.c b/none/tests/s390x/vector_float.c +index 52f3a296f..20853f381 100644 +--- a/none/tests/s390x/vector_float.c ++++ b/none/tests/s390x/vector_float.c +@@ -114,50 +114,59 @@ int main() + test_with_selective_printing(vldeb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64)); + test_with_selective_printing(wldeb, (V128_V_RES_AS_FLOAT64 | +- V128_V_ARG1_AS_FLOAT64)); ++ V128_V_ARG1_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vflcdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64)); + test_with_selective_printing(wflcdb, (V128_V_RES_AS_FLOAT64 | +- V128_V_ARG1_AS_FLOAT64)); ++ V128_V_ARG1_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vflndb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64)); + test_with_selective_printing(wflndb, (V128_V_RES_AS_FLOAT64 | +- V128_V_ARG1_AS_FLOAT64)); ++ V128_V_ARG1_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vflpdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64)); + test_with_selective_printing(wflpdb, (V128_V_RES_AS_FLOAT64 | +- V128_V_ARG1_AS_FLOAT64)); ++ V128_V_ARG1_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfadb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfadb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfsdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfsdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfmdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfmdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfddb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfddb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfsqdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64)); + test_with_selective_printing(wfsqdb, (V128_V_RES_AS_FLOAT64 | +- V128_V_ARG1_AS_FLOAT64)); ++ V128_V_ARG1_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfmadb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | +@@ -166,7 +175,8 @@ int main() + test_with_selective_printing(wfmadb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_V_ARG3_AS_FLOAT64)); ++ V128_V_ARG3_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfmsdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +@@ -174,21 +184,25 @@ int main() + test_with_selective_printing(wfmsdb, (V128_V_RES_AS_FLOAT64 | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_V_ARG3_AS_FLOAT64)); ++ V128_V_ARG3_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(wfcdb, (V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_R_RES)); ++ V128_R_RES | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(wfkdb, (V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_R_RES)); ++ V128_R_RES | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfcedb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfcedb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfcedbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +@@ -196,14 +210,16 @@ int main() + test_with_selective_printing(wfcedbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_R_RES)); ++ V128_R_RES | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfchdb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfchdb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfchdbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +@@ -211,14 +227,16 @@ int main() + test_with_selective_printing(wfchdbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_R_RES)); ++ V128_R_RES | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vfchedb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64)); + test_with_selective_printing(wfchedb, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | +- V128_V_ARG2_AS_FLOAT64)); ++ V128_V_ARG2_AS_FLOAT64 | ++ V128_V_RES_ZERO_ONLY)); + test_with_selective_printing(vfchedbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +@@ -226,7 +244,8 @@ int main() + test_with_selective_printing(wfchedbs, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | + V128_V_ARG2_AS_FLOAT64 | +- V128_R_RES)); ++ V128_R_RES | ++ V128_V_RES_ZERO_ONLY)); + + test_with_selective_printing(vftcidb0, (V128_V_RES_AS_INT | + V128_V_ARG1_AS_FLOAT64 | +diff --git a/none/tests/s390x/vector_float.stdout.exp b/none/tests/s390x/vector_float.stdout.exp +index eac525041..a330ac832 100644 +--- a/none/tests/s390x/vector_float.stdout.exp ++++ b/none/tests/s390x/vector_float.stdout.exp +@@ -419,88 +419,88 @@ insn vcgdb07: + v_result = 7fffffffffffffff | 7fffffffffffffff + v_arg1 = 0x1.fed2f087c21p+341 | 0x1.180e4c1d87fc4p+682 + insn wcgdb00: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.d7fd9222e8b86p+670 | 0x1.c272612672a3p+798 + insn wcgdb00: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.745cd360987e5p-496 | -0x1.f3b404919f358p-321 + insn wcgdb00: +- v_result = 8000000000000000 | 0000000000000000 ++ v_result = 8000000000000000 | -- + v_arg1 = -0x1.9523565cd92d5p+643 | 0x1.253677d6d3be2p-556 + insn wcgdb00: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.b6eb576ec3e6ap+845 | -0x1.c7e102c503d91p+266 + insn wcgdb01: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.3d4319841f4d6p-1011 | -0x1.2feabf7dfc506p-680 + insn wcgdb01: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.6fb8d1cd8b32cp-843 | -0x1.50f6a6922f97ep+33 + insn wcgdb01: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.64a673daccf1ap-566 | -0x1.69ef9b1d01499p+824 + insn wcgdb01: +- v_result = 8000000000000000 | 0000000000000000 ++ v_result = 8000000000000000 | -- + v_arg1 = -0x1.3e2ddd862b4adp+1005 | -0x1.312466410271p+184 + insn wcgdb03: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.d594c3412a11p-953 | -0x1.a07393d34d77cp-224 + insn wcgdb03: +- v_result = 8000000000000000 | 0000000000000000 ++ v_result = 8000000000000000 | -- + v_arg1 = -0x1.f7a0dbcfd6e4cp+104 | -0x1.40f7cde7f2214p-702 + insn wcgdb03: +- v_result = 8000000000000000 | 0000000000000000 ++ v_result = 8000000000000000 | -- + v_arg1 = -0x1.40739c1574808p+560 | -0x1.970328ddf1b6ep-374 + insn wcgdb03: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.477653afd7048p-38 | 0x1.1eac2f8b2a93cp-384 + insn wcgdb04: +- v_result = ffffffffe9479a7d | 0000000000000000 ++ v_result = ffffffffe9479a7d | -- + v_arg1 = -0x1.6b865833eff3p+28 | 0x1.06e8cf1834d0ep-722 + insn wcgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.eef0b2294a5cp-544 | -0x1.8e8b133ccda15p+752 + insn wcgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.f34e77e6b6698p-894 | -0x1.9f7ce1cb53bddp-896 + insn wcgdb04: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.95707a6d75db5p+1018 | -0x1.3b0c072d23011p-224 + insn wcgdb05: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.a9fb71160793p-968 | 0x1.05f601fe8123ap-986 + insn wcgdb05: +- v_result = 8000000000000000 | 0000000000000000 ++ v_result = 8000000000000000 | -- + v_arg1 = -0x1.0864159b94305p+451 | -0x1.d4647f5a78b7ep-599 + insn wcgdb05: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.37eadff8397c8p+432 | -0x1.15d896b6f6063p+464 + insn wcgdb05: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.eb0812b0d677p-781 | 0x1.3117c5e0e288cp-202 + insn wcgdb06: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.6b88069167c0fp-662 | -0x1.70571d27e1279p+254 + insn wcgdb06: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.f6a6d6e883596p+260 | 0x1.0d578afaaa34ap+604 + insn wcgdb06: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.d91c7d13c4694p-475 | -0x1.ecf1f8529767bp+830 + insn wcgdb06: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.fac8dd3bb7af6p-101 | 0x1.fb8324a00fba8p+959 + insn wcgdb07: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.4b0fa18fa73c7p+111 | -0x1.08e7b17633a49p+61 + insn wcgdb07: +- v_result = e636b693e39a1100 | 0000000000000000 ++ v_result = e636b693e39a1100 | -- + v_arg1 = -0x1.9c9496c1c65efp+60 | 0x1.c4182ee728d76p-572 + insn wcgdb07: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = -0x1.819718032dff7p-303 | 0x1.a784c77ff6aa2p-622 + insn wcgdb07: +- v_result = 7fffffffffffffff | 0000000000000000 ++ v_result = 7fffffffffffffff | -- + v_arg1 = 0x1.978e8abfd83c2p+152 | 0x1.2531ebf451762p+315 + insn vclgdb00: + v_result = 0000000000000000 | 0000000000000000 +@@ -587,88 +587,88 @@ insn vclgdb07: + v_result = 0000000000000000 | 0000000000000000 + v_arg1 = -0x1.137bbb51f08bdp+306 | 0x1.18d2a1063356p-795 + insn wclgdb00: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.e66f55dcc2639p-1013 | -0x1.733ee56929f3bp-304 + insn wclgdb00: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.8802fd9ab740cp-986 | -0x1.64d4d2c7c145fp-1015 + insn wclgdb00: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.a67209b8c407bp-645 | -0x1.6410ff9b1c801p+487 + insn wclgdb00: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.cb2febaefeb2dp+49 | 0x1.dee368b2ec375p-502 + insn wclgdb01: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.5703db3c1b0e2p-728 | 0x1.068c4d51ea4ebp+617 + insn wclgdb01: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.ae350291e5b3ep+291 | 0x1.1b87bb09b6032p+376 + insn wclgdb01: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.c4666a710127ep+424 | -0x1.19e969b6c0076p+491 + insn wclgdb01: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.c892c5a4d103fp+105 | -0x1.d4f937cc76704p+749 + insn wclgdb03: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.81090d8fc663dp-111 | 0x1.337ec5e0f0904p+1 + insn wclgdb03: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.e787adc70b91p-593 | 0x1.db8d83196b53cp-762 + insn wclgdb03: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.6529307e907efp+389 | -0x1.3ea0d8d5b4dd2p+589 + insn wclgdb03: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.be701a158637p-385 | 0x1.c5a7f70cb8a09p+107 + insn wclgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.2f328571ab445p+21 | -0x1.dcc21fc82ba01p-930 + insn wclgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.06b69fcbb7bffp-415 | 0x1.6f9a13a0a827ap+915 + insn wclgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.738e549b38bcdp+479 | 0x1.a522edb999c9p-45 + insn wclgdb04: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.7f9399d2bcf3bp-215 | -0x1.7bc35f2d69a7fp+818 + insn wclgdb05: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.fc542bdb707f6p+880 | -0x1.8521ebc93a25fp-969 + insn wclgdb05: +- v_result = 1ce8d9951b8c8600 | 0000000000000000 ++ v_result = 1ce8d9951b8c8600 | -- + v_arg1 = 0x1.ce8d9951b8c86p+60 | 0x1.92712589230e7p+475 + insn wclgdb05: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.8a297f60a0811p-156 | 0x1.102b79043d82cp-204 + insn wclgdb05: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.beb9057e1401dp-196 | -0x1.820f18f830262p+15 + insn wclgdb06: +- v_result = 0000000000000001 | 0000000000000000 ++ v_result = 0000000000000001 | -- + v_arg1 = 0x1.c321a966ecb4dp-430 | -0x1.2f6a1a95ead99p-943 + insn wclgdb06: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.f1a86b4aed821p-56 | -0x1.1ee6717cc2d7fp-899 + insn wclgdb06: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.73ce49d89ecb9p-302 | 0x1.52663b975ed23p-716 + insn wclgdb06: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.3e9c2de97a292p+879 | 0x1.d34eed36f2eafp+960 + insn wclgdb07: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.4e6ec6ddc6a45p-632 | -0x1.6e564d0fec72bp+369 + insn wclgdb07: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.42e2c658e4c4dp+459 | -0x1.9f9dc0252e44p+85 + insn wclgdb07: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.fb40ac8cda3c1p-762 | 0x1.0e9ed614bc8f1p-342 + insn wclgdb07: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.c1f8b3c68e214p+118 | -0x1.1a26a49368b61p+756 + insn vfidb00: + v_arg1 = -0x1.38df4cf9d52dbp-545 | -0x1.049253d90dd92p+94 +@@ -1020,16 +1020,16 @@ insn vldeb: + v_result = -0x1.6f5fb2p+70 | -0x1.0d2df6p-107 + insn wldeb: + v_arg1 = -0x1.d26169729db2ap-435 | 0x1.d6fd080793e8cp+767 +- v_result = -0x1.9a4c2cp-54 | 0x0p+0 ++ v_result = -0x1.9a4c2cp-54 | -- + insn wldeb: + v_arg1 = -0x1.f4b59107fce61p-930 | 0x1.cdf2816e253f4p-168 +- v_result = -0x1.be96b2p-116 | 0x0p+0 ++ v_result = -0x1.be96b2p-116 | -- + insn wldeb: + v_arg1 = -0x1.9603a2997928cp-441 | -0x1.aada85e355a11p-767 +- v_result = -0x1.d2c074p-55 | 0x0p+0 ++ v_result = -0x1.d2c074p-55 | -- + insn wldeb: + v_arg1 = 0x1.25ccf5bd0e83p+620 | 0x1.e1635864ebb17p-88 +- v_result = 0x1.64b99ep+78 | 0x0p+0 ++ v_result = 0x1.64b99ep+78 | -- + insn vflcdb: + v_arg1 = 0x1.0ae6d82f76afp-166 | -0x1.e8fb1e03a7415p-191 + v_result = -0x1.0ae6d82f76afp-166 | 0x1.e8fb1e03a7415p-191 +@@ -1044,16 +1044,16 @@ insn vflcdb: + v_result = -0x1.19520153d35b4p-301 | -0x1.ac5325cd23253p+396 + insn wflcdb: + v_arg1 = 0x1.ffd3eecfd54d7p-831 | -0x1.97854fa523a77p+146 +- v_result = -0x1.ffd3eecfd54d7p-831 | 0x0p+0 ++ v_result = -0x1.ffd3eecfd54d7p-831 | -- + insn wflcdb: + v_arg1 = -0x1.508ea45606447p-442 | 0x1.ae7f0e6cf9d2bp+583 +- v_result = 0x1.508ea45606447p-442 | 0x0p+0 ++ v_result = 0x1.508ea45606447p-442 | -- + insn wflcdb: + v_arg1 = 0x1.da8ab2188c21ap+94 | 0x1.78a9c152aa074p-808 +- v_result = -0x1.da8ab2188c21ap+94 | 0x0p+0 ++ v_result = -0x1.da8ab2188c21ap+94 | -- + insn wflcdb: + v_arg1 = -0x1.086882645e0c5p-1001 | -0x1.54e2de5af5a74p-262 +- v_result = 0x1.086882645e0c5p-1001 | 0x0p+0 ++ v_result = 0x1.086882645e0c5p-1001 | -- + insn vflndb: + v_arg1 = -0x1.5bec561d407dcp+819 | -0x1.a5773dadb7a2dp+935 + v_result = -0x1.5bec561d407dcp+819 | -0x1.a5773dadb7a2dp+935 +@@ -1068,16 +1068,16 @@ insn vflndb: + v_result = -0x1.c5bc39a06d4e2p-259 | -0x1.c5e61ad849e77p-833 + insn wflndb: + v_arg1 = -0x1.e9f3e6d1beffap-117 | -0x1.d58cc8bf123b3p-714 +- v_result = -0x1.e9f3e6d1beffap-117 | 0x0p+0 ++ v_result = -0x1.e9f3e6d1beffap-117 | -- + insn wflndb: + v_arg1 = -0x1.3fc4ef2e7485ep-691 | 0x1.eb328986081efp-775 +- v_result = -0x1.3fc4ef2e7485ep-691 | 0x0p+0 ++ v_result = -0x1.3fc4ef2e7485ep-691 | -- + insn wflndb: + v_arg1 = -0x1.7146c5afdec16p+23 | -0x1.597fcfa1fab2p-708 +- v_result = -0x1.7146c5afdec16p+23 | 0x0p+0 ++ v_result = -0x1.7146c5afdec16p+23 | -- + insn wflndb: + v_arg1 = 0x1.03f8d7e9afe84p-947 | 0x1.9a10c3feb6b57p-118 +- v_result = -0x1.03f8d7e9afe84p-947 | 0x0p+0 ++ v_result = -0x1.03f8d7e9afe84p-947 | -- + insn vflpdb: + v_arg1 = 0x1.64ae59b6c762ep-407 | -0x1.fa7191ab21e86p+533 + v_result = 0x1.64ae59b6c762ep-407 | 0x1.fa7191ab21e86p+533 +@@ -1092,16 +1092,16 @@ insn vflpdb: + v_result = 0x1.85fa2de1d492ap+170 | 0x1.ac36828822c11p-968 + insn wflpdb: + v_arg1 = 0x1.a6cf677640a73p-871 | 0x1.b6f1792385922p-278 +- v_result = 0x1.a6cf677640a73p-871 | 0x0p+0 ++ v_result = 0x1.a6cf677640a73p-871 | -- + insn wflpdb: + v_arg1 = -0x1.b886774f6d888p-191 | -0x1.6a2b08d735d22p-643 +- v_result = 0x1.b886774f6d888p-191 | 0x0p+0 ++ v_result = 0x1.b886774f6d888p-191 | -- + insn wflpdb: + v_arg1 = 0x1.5045d37d46f5fp+943 | -0x1.333a86ef2dcf6p-1013 +- v_result = 0x1.5045d37d46f5fp+943 | 0x0p+0 ++ v_result = 0x1.5045d37d46f5fp+943 | -- + insn wflpdb: + v_arg1 = 0x1.1e7bec6ada14dp+252 | 0x1.a70b3f3e24dap-153 +- v_result = 0x1.1e7bec6ada14dp+252 | 0x0p+0 ++ v_result = 0x1.1e7bec6ada14dp+252 | -- + insn vfadb: + v_arg1 = 0x1.5b1ad8e9f17c6p-294 | -0x1.ddd8300a0bf02p+122 + v_arg2 = -0x1.9b49c31ca8ac6p+926 | 0x1.fdbc992926268p+677 +@@ -1121,19 +1121,19 @@ insn vfadb: + insn wfadb: + v_arg1 = 0x1.3c5466cb80722p+489 | -0x1.11e1770053ca2p+924 + v_arg2 = 0x1.d876cd721a726p-946 | 0x1.5c04ceb79c9bcp+1001 +- v_result = 0x1.3c5466cb80722p+489 | 0x0p+0 ++ v_result = 0x1.3c5466cb80722p+489 | -- + insn wfadb: + v_arg1 = 0x1.b0b142d6b76a3p+577 | 0x1.3146824e993a2p+432 + v_arg2 = -0x1.f7f3b7582925fp-684 | -0x1.9700143c2b935p-837 +- v_result = 0x1.b0b142d6b76a2p+577 | 0x0p+0 ++ v_result = 0x1.b0b142d6b76a2p+577 | -- + insn wfadb: + v_arg1 = -0x1.8d65e15edabd6p+244 | 0x1.3be7fd08492d6p-141 + v_arg2 = -0x1.5eef86490fb0ap+481 | 0x1.7b26c897cb6dfp+810 +- v_result = -0x1.5eef86490fb0ap+481 | 0x0p+0 ++ v_result = -0x1.5eef86490fb0ap+481 | -- + insn wfadb: + v_arg1 = -0x1.2dffa5b5f29p+34 | 0x1.71a026274602fp-881 + v_arg2 = 0x1.4dad707287289p+756 | -0x1.1500d55807247p-616 +- v_result = 0x1.4dad707287288p+756 | 0x0p+0 ++ v_result = 0x1.4dad707287288p+756 | -- + insn vfsdb: + v_arg1 = 0x1.054fd9c4d4883p+644 | 0x1.45c90ed85bd7fp-780 + v_arg2 = 0x1.f3bc7a611dadap+494 | -0x1.7c9e1e858ba5bp-301 +@@ -1153,19 +1153,19 @@ insn vfsdb: + insn wfsdb: + v_arg1 = 0x1.9090dabf846e7p-648 | 0x1.1c4ab843a2d15p+329 + v_arg2 = -0x1.a7ceb293690dep+316 | 0x1.22245954a20cp+42 +- v_result = 0x1.a7ceb293690dep+316 | 0x0p+0 ++ v_result = 0x1.a7ceb293690dep+316 | -- + insn wfsdb: + v_arg1 = 0x1.4e5347c27819p-933 | -0x1.56a30bda28351p-64 + v_arg2 = -0x1.dedb9f3935b56p-155 | 0x1.8c5b6ed76816cp-522 +- v_result = 0x1.dedb9f3935b56p-155 | 0x0p+0 ++ v_result = 0x1.dedb9f3935b56p-155 | -- + insn wfsdb: + v_arg1 = 0x1.0ec4e562a015bp-491 | 0x1.3996381b52d9fp-686 + v_arg2 = 0x1.1dcce4e81819p+960 | -0x1.32fa425e8fc08p-263 +- v_result = -0x1.1dcce4e81818fp+960 | 0x0p+0 ++ v_result = -0x1.1dcce4e81818fp+960 | -- + insn wfsdb: + v_arg1 = -0x1.587229f90f77dp-19 | 0x1.100d8eb8105e4p-784 + v_arg2 = -0x1.afb4cce4c43ddp+530 | -0x1.6da7f05e7f512p-869 +- v_result = 0x1.afb4cce4c43dcp+530 | 0x0p+0 ++ v_result = 0x1.afb4cce4c43dcp+530 | -- + insn vfmdb: + v_arg1 = 0x1.892b425556c47p-124 | 0x1.38222404079dfp-656 + v_arg2 = 0x1.af612ed2c342dp-267 | -0x1.1f735fd6ce768p-877 +@@ -1185,19 +1185,19 @@ insn vfmdb: + insn wfmdb: + v_arg1 = -0x1.b992d950126a1p-683 | -0x1.9c1b22eb58c59p-497 + v_arg2 = 0x1.b557a7d8e32c3p-25 | -0x1.f746b2ddafccep+227 +- v_result = -0x1.792f6fb13894ap-707 | 0x0p+0 ++ v_result = -0x1.792f6fb13894ap-707 | -- + insn wfmdb: + v_arg1 = -0x1.677a8c20a5a2fp+876 | 0x1.c03e7b97e8c0dp-645 + v_arg2 = 0x1.dab44be430937p-1011 | -0x1.3f51352c67be9p-916 +- v_result = -0x1.4d4b0a1827064p-134 | 0x0p+0 ++ v_result = -0x1.4d4b0a1827064p-134 | -- + insn wfmdb: + v_arg1 = -0x1.da60f596ad0cep+254 | 0x1.52332e0650e33p+966 + v_arg2 = 0x1.a042c52ed993cp+215 | 0x1.8f380c84aa133p+204 +- v_result = -0x1.81aca4bbcbd24p+470 | 0x0p+0 ++ v_result = -0x1.81aca4bbcbd24p+470 | -- + insn wfmdb: + v_arg1 = -0x1.83d17f11f6aa3p-469 | -0x1.98117efe89b9ep-361 + v_arg2 = 0x1.8c445fd46d214p-701 | -0x1.f98118821821cp+596 +- v_result = -0x0p+0 | 0x0p+0 ++ v_result = -0x0p+0 | -- + insn vfddb: + v_arg1 = -0x1.ecbb48899e0f1p+969 | 0x1.caf175ab352p-20 + v_arg2 = -0x1.9455d67f9f79dp+208 | 0x1.bc4a431b04a6fp+482 +@@ -1217,19 +1217,19 @@ insn vfddb: + insn wfddb: + v_arg1 = 0x1.bd48489b60731p-114 | 0x1.a760dcf57b74fp-51 + v_arg2 = -0x1.171f83409eeb6p-402 | -0x1.e159d1409bdc6p-972 +- v_result = -0x1.9864f1511f8cp+288 | 0x0p+0 ++ v_result = -0x1.9864f1511f8cp+288 | -- + insn wfddb: + v_arg1 = -0x1.120505ef4606p-637 | -0x1.83f6f775c0eb7p+272 + v_arg2 = -0x1.d18ba3872fde1p+298 | 0x1.c60f8d191068cp-454 +- v_result = 0x1.2d5cdb15a686cp-936 | 0x0p+0 ++ v_result = 0x1.2d5cdb15a686cp-936 | -- + insn wfddb: + v_arg1 = 0x1.f637f7f8c790fp-97 | -0x1.7bdce4d74947p+189 + v_arg2 = -0x1.1c8f2d1b3a2edp-218 | -0x1.55fdfd1840241p-350 +- v_result = -0x1.c3d0799c1420fp+121 | 0x0p+0 ++ v_result = -0x1.c3d0799c1420fp+121 | -- + insn wfddb: + v_arg1 = -0x1.c63b7b2eee253p+250 | 0x1.dfd9dcd8b823fp-125 + v_arg2 = 0x1.094a1f1f87e0cp+629 | 0x1.eeaa23c0d7843p-814 +- v_result = -0x1.b653a10ebdeccp-379 | 0x0p+0 ++ v_result = -0x1.b653a10ebdeccp-379 | -- + insn vfsqdb: + v_arg1 = 0x1.f60db25f7066p-703 | -0x1.d43509abca8c3p+631 + v_result = 0x1.fb009ab25ec11p-352 | nan +@@ -1244,16 +1244,16 @@ insn vfsqdb: + v_result = 0x1.833dba0954bccp+249 | nan + insn wfsqdb: + v_arg1 = 0x1.71af4e7f64978p+481 | -0x1.3429dc60011d7p-879 +- v_result = 0x1.b30fc65551133p+240 | 0x0p+0 ++ v_result = 0x1.b30fc65551133p+240 | -- + insn wfsqdb: + v_arg1 = 0x1.5410db1c5f403p+173 | 0x1.97fa6581e692fp+108 +- v_result = 0x1.a144f43a592c1p+86 | 0x0p+0 ++ v_result = 0x1.a144f43a592c1p+86 | -- + insn wfsqdb: + v_arg1 = -0x1.5838027725afep+6 | 0x1.ac61529c11f38p+565 +- v_result = nan | 0x0p+0 ++ v_result = nan | -- + insn wfsqdb: + v_arg1 = -0x1.159e341dcc06ep-439 | 0x1.ed54ce5481ba5p-574 +- v_result = nan | 0x0p+0 ++ v_result = nan | -- + insn vfmadb: + v_arg1 = -0x1.eb00a5c503d75p+538 | 0x1.89fae603ddc07p+767 + v_arg2 = -0x1.71c72712c3957p+715 | 0x1.1bd5773442feap+762 +@@ -1278,22 +1278,22 @@ insn wfmadb: + v_arg1 = 0x1.1cc5b10a14d54p+668 | -0x1.686407390f7d1p+616 + v_arg2 = -0x1.bf34549e73246p+676 | -0x1.dc5a34cc470f3p+595 + v_arg3 = -0x1.95e0fdcf13974p-811 | -0x1.79c7cc1a8ec83p-558 +- v_result = -0x1.fffffffffffffp+1023 | 0x0p+0 ++ v_result = -0x1.fffffffffffffp+1023 | -- + insn wfmadb: + v_arg1 = 0x1.138bc1a5d75f8p+713 | -0x1.e226ebba2fe54p+381 + v_arg2 = -0x1.081ebb7cc3414p-772 | 0x1.369d99e174fc3p+922 + v_arg3 = -0x1.0671c682a5d0cp-1016 | 0x1.03c9530dd0377p+378 +- v_result = -0x1.1c4933e117d95p-59 | 0x0p+0 ++ v_result = -0x1.1c4933e117d95p-59 | -- + insn wfmadb: + v_arg1 = -0x1.166f0b1fad67bp+64 | -0x1.e9ee8d32e1069p-452 + v_arg2 = -0x1.4a235bdd109e2p-65 | 0x1.bacaa96fc7e81p-403 + v_arg3 = -0x1.d2e19acf7c4bdp+99 | 0x1.f901130f685adp-963 +- v_result = -0x1.d2e19acf7c4bcp+99 | 0x0p+0 ++ v_result = -0x1.d2e19acf7c4bcp+99 | -- + insn wfmadb: + v_arg1 = -0x1.77d7bfec863d2p-988 | -0x1.b68029700c6b1p-206 + v_arg2 = -0x1.aca05ad00aec1p+737 | 0x1.ac746bd7e216bp+51 + v_arg3 = 0x1.17342292078b4p+188 | -0x1.49efaf9392301p+555 +- v_result = 0x1.17342292078b4p+188 | 0x0p+0 ++ v_result = 0x1.17342292078b4p+188 | -- + insn vfmsdb: + v_arg1 = -0x1.a1b218e84e61p+34 | 0x1.b220f0d144daep-111 + v_arg2 = 0x1.564fcc2527961p-265 | 0x1.ea85a4154721ep+733 +@@ -1318,22 +1318,22 @@ insn wfmsdb: + v_arg1 = -0x1.7499a639673a6p-100 | -0x1.2a0d737e6cb1cp-207 + v_arg2 = -0x1.01ad4670a7aa3p-911 | 0x1.f94385e1021e8p+317 + v_arg3 = 0x1.aa42b2bb17af9p+982 | 0x1.c550e471711p+786 +- v_result = -0x1.aa42b2bb17af8p+982 | 0x0p+0 ++ v_result = -0x1.aa42b2bb17af8p+982 | -- + insn wfmsdb: + v_arg1 = 0x1.76840f99b431ep+500 | -0x1.989a500c92c08p+594 + v_arg2 = 0x1.33c657cb8385cp-84 | -0x1.2c795ad92ce17p+807 + v_arg3 = -0x1.ee58a39f02d54p-351 | -0x1.18695ed9a280ap+48 +- v_result = 0x1.c242894a0068p+416 | 0x0p+0 ++ v_result = 0x1.c242894a0068p+416 | -- + insn wfmsdb: + v_arg1 = -0x1.16db07e054a65p-469 | -0x1.3a627ab99c6e4p+689 + v_arg2 = 0x1.17872eae826e5p-538 | 0x1.44ed513fb5873p-929 + v_arg3 = 0x1.5ca912008e077p-217 | -0x1.982a6f7359876p-23 +- v_result = -0x1.5ca912008e077p-217 | 0x0p+0 ++ v_result = -0x1.5ca912008e077p-217 | -- + insn wfmsdb: + v_arg1 = -0x1.d315f4a932c6p+122 | 0x1.616a04493e143p+513 + v_arg2 = -0x1.cf1cd3516f23fp+552 | 0x1.7121749c3932cp-750 + v_arg3 = 0x1.dc26d92304d7fp-192 | -0x1.1fc3cca9ec20ep+371 +- v_result = 0x1.a67ca6ba395bcp+675 | 0x0p+0 ++ v_result = 0x1.a67ca6ba395bcp+675 | -- + insn wfcdb: + v_arg1 = 0x1.302001b736011p-633 | -0x1.72d5300225c97p-468 + v_arg2 = -0x1.8c007c5aba108p-17 | -0x1.bb3f9ae136acdp+569 +@@ -1383,19 +1383,19 @@ insn vfcedb: + v_arg1 = 0x1.d8e5c9930c19dp+623 | -0x1.cf1facff4e194p-605 + v_arg2 = -0x1.ed6ba02646d0dp+441 | -0x1.2d677e710620bp+810 + insn wfcedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.a252009e1a12cp-442 | 0x1.4dc608268bb29p-513 + v_arg2 = -0x1.81020aa1a36e6p-687 | -0x1.300e64ce414f1p-899 + insn wfcedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.cec439a8d4781p-175 | -0x1.d20e3b281d599p+893 + v_arg2 = 0x1.ca17cf16cf0aap-879 | 0x1.61506f8596092p+545 + insn wfcedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.0659f5f24a004p+877 | 0x1.fc46867ed0338p-680 + v_arg2 = -0x1.1d6849587155ep-1010 | -0x1.f68171edc235fp+575 + insn wfcedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.dc88a0d46ad79p-816 | 0x1.245140dcaed79p+851 + v_arg2 = 0x1.b33e977c7b3ep-818 | -0x1.04319d7c69367p+787 + insn vfcedbs: +@@ -1419,22 +1419,22 @@ insn vfcedbs: + v_arg2 = 0x1.ae2c06ea88ff4p+332 | -0x1.f668ce4f8ef9ap+821 + r_result = 0000000000000003 + insn wfcedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.645261bf86b1fp-996 | 0x1.abd13c95397aap+992 + v_arg2 = -0x1.ba09e8fc66a8cp+113 | 0x1.75dbfe92c16c4p-786 + r_result = 0000000000000003 + insn wfcedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.d02831d003e7dp+415 | -0x1.611a9dfd10f36p-80 + v_arg2 = -0x1.10bda62f4647p+723 | 0x1.cc47af6653378p-614 + r_result = 0000000000000003 + insn wfcedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = 0x1.f168f32f84178p-321 | -0x1.79a2a0b9549d1p-136 + v_arg2 = 0x1.41e19d1cfa692p+11 | -0x1.2a0ed6e7fd517p-453 + r_result = 0000000000000003 + insn wfcedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.76a9144ee26c5p+188 | -0x1.386aaea2d9cddp-542 + v_arg2 = 0x1.810fcf222efc4p-999 | -0x1.ce90a9a43e2a1p+80 + r_result = 0000000000000003 +@@ -1455,19 +1455,19 @@ insn vfchdb: + v_arg1 = 0x1.82be31fb88a2dp+946 | -0x1.7ca9e9ff31953p-931 + v_arg2 = 0x1.fe75a1052beccp+490 | 0x1.179d18543d678p-255 + insn wfchdb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.0af85d8d8d609p-464 | -0x1.9f639a686e0fep+203 + v_arg2 = -0x1.3142b77b55761p-673 | 0x1.ca9c474339da1p+472 + insn wfchdb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = -0x1.6cf16959a022bp+213 | 0x1.445606e4363e1p+942 + v_arg2 = -0x1.8c343201bbd2p+939 | -0x1.e5095ad0c37a4p-434 + insn wfchdb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.36b4fc9cf5bdap-52 | -0x1.f1fd95cbcd533p+540 + v_arg2 = 0x1.5a2362891c9edp-175 | -0x1.e1f68c319e5d2p+58 + insn wfchdb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.11c6489f544bbp+811 | 0x1.262a740ec3d47p+456 + v_arg2 = -0x1.d9394d354e989p-154 | 0x1.cc21b3094391ap-972 + insn vfchdbs: +@@ -1491,22 +1491,22 @@ insn vfchdbs: + v_arg2 = 0x1.e426748435a76p+370 | 0x1.8702527d17783p-871 + r_result = 0000000000000003 + insn wfchdbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.6c51b9f6442c8p+639 | 0x1.1e6b37adff703p+702 + v_arg2 = 0x1.0cba9c1c75e43p+520 | -0x1.145d44ed90967p+346 + r_result = 0000000000000000 + insn wfchdbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.7b3dd643bf36bp+816 | -0x1.61ce7bfb9307ap-683 + v_arg2 = -0x1.f2c998dc15c9ap-776 | 0x1.e16397f2dcdf5p+571 + r_result = 0000000000000000 + insn wfchdbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.cc3be81884e0ap-865 | -0x1.8b353bd41064p+820 + v_arg2 = -0x1.2c1bafaafdd4ep-34 | -0x1.24666808ab16ep-435 + r_result = 0000000000000000 + insn wfchdbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.c3de33d3b673ap+554 | 0x1.d39ed71e53096p-798 + v_arg2 = -0x1.c1e8f7b3c001p-828 | 0x1.22e2cf797fabp-787 + r_result = 0000000000000000 +@@ -1527,19 +1527,19 @@ insn vfchedb: + v_arg1 = -0x1.6c5599e7ba923p+829 | -0x1.5d1a1191ed6eap-994 + v_arg2 = -0x1.555c8775bc4d2p-478 | -0x1.4aa6a2c82319cp+493 + insn wfchedb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.ae6cad07b0f3ep-232 | -0x1.2ed61a43f3b99p-74 + v_arg2 = -0x1.226f7cddbde13p-902 | -0x1.790d1d6febbf8p+336 + insn wfchedb: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.20eb8eac3711dp-385 | 0x1.ef71d3312d7e1p+739 + v_arg2 = 0x1.7a3ba08c5a0bdp-823 | -0x1.a7845ccaa544dp-129 + insn wfchedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.97ebdbc057be8p+824 | 0x1.2b7798b063cd6p+237 + v_arg2 = 0x1.cdb87a6074294p-81 | -0x1.074c902b19bccp-416 + insn wfchedb: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.82deebf9ff023p+937 | 0x1.56c5adcf9d4abp-672 + v_arg2 = -0x1.311ce49bc9439p+561 | 0x1.c8e1c512d8544p+103 + insn vfchedbs: +@@ -1563,22 +1563,22 @@ insn vfchedbs: + v_arg2 = -0x1.47f5dfc7a5bcp-569 | 0x1.5877ef33664a3p-758 + r_result = 0000000000000003 + insn wfchedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.a7370ccfd9e49p+505 | 0x1.c6b2385850ca2p-591 + v_arg2 = 0x1.984f4fcd338b1p+675 | -0x1.feb996c821232p-39 + r_result = 0000000000000003 + insn wfchedbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.641878612dd2p+207 | 0x1.b35e3292db7f6p+567 + v_arg2 = -0x1.18a87f209e96bp+299 | -0x1.3d598f3612d8ap+1016 + r_result = 0000000000000000 + insn wfchedbs: +- v_result = ffffffffffffffff | 0000000000000000 ++ v_result = ffffffffffffffff | -- + v_arg1 = 0x1.cfc2cda244153p+404 | 0x1.d8b2b28e9d8d7p+276 + v_arg2 = 0x1.3517b8c7a59a1p-828 | 0x1.6096fab7003ccp-415 + r_result = 0000000000000000 + insn wfchedbs: +- v_result = 0000000000000000 | 0000000000000000 ++ v_result = 0000000000000000 | -- + v_arg1 = -0x1.54d656f033e56p-603 | -0x1.95ad0e2088967p+254 + v_arg2 = 0x1.4cb319db206e4p-614 | 0x1.b41cd9e3739b6p-862 + r_result = 0000000000000003 diff --git a/valgrind.spec b/valgrind.spec index 6bc15dd..f88615f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -117,6 +117,12 @@ Patch13: valgrind-3.16.1-PPC64BE-lsw.patch # KDE#428909 helgrind: need to intercept duplicate libc definitions Patch14: valgrind-3.16.1-pthread-intercept.patch +# KDE#428648 s390_emit_load_mem panics due to 20-bit offset for vector load +Patch15: valgrind-3.16.1-s390_emit_load_mem.patch + +# KDE#133812 s390x: z14 vector instructions not implemented +Patch16: valgrind-3.16.1-s390x-z14-vector.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -259,6 +265,8 @@ Valgrind User Manual for details. %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 +%patch16 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -483,8 +491,10 @@ fi %endif %changelog -* Thu Dec 3 2020 Mark Wielaard +* Thu Dec 3 2020 Mark Wielaard - 3.16.1-7 - Add valgrind-3.16.1-pthread-intercept.patch +- Add valgrind-3.16.1-s390_emit_load_mem.patch +- Add valgrind-3.16.1-s390x-z14-vector.patch * Mon Nov 9 2020 Mark Wielaard - Add BuildRequires which (#1895773) From 3e351e4f337233e9698984c34aa8a8cdb503c32e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Dec 2020 18:14:35 +0100 Subject: [PATCH 023/196] 3.16.1-8 - Update valgrind-3.16.1-s390x-z14-vector.patch --- valgrind-3.16.1-s390x-z14-vector.patch | 111 ++++++++++++++++++------- valgrind.spec | 5 +- 2 files changed, 83 insertions(+), 33 deletions(-) diff --git a/valgrind-3.16.1-s390x-z14-vector.patch b/valgrind-3.16.1-s390x-z14-vector.patch index 00a3a83..747c8a8 100644 --- a/valgrind-3.16.1-s390x-z14-vector.patch +++ b/valgrind-3.16.1-s390x-z14-vector.patch @@ -1,7 +1,16 @@ diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index 9f93cff19..ea878d8af 100644 +index 9f93cff19..905429015 100644 --- a/VEX/priv/guest_s390_defs.h +++ b/VEX/priv/guest_s390_defs.h +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as @@ -263,26 +263,27 @@ extern ULong last_execute_target; before S390_VEC_OP_LAST. */ typedef enum { @@ -51,9 +60,18 @@ index 9f93cff19..ea878d8af 100644 /* Arguments of s390x_dirtyhelper_vec_op(...) which are packed into one diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index a470d9f8d..b9c0514ba 100644 +index a470d9f8d..b71b621ae 100644 --- a/VEX/priv/guest_s390_helpers.c +++ b/VEX/priv/guest_s390_helpers.c +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as @@ -314,20 +314,11 @@ ULong s390x_dirtyhelper_STCKE(ULong *addr) {return 3;} /*--- Dirty helper for Store Facility instruction ---*/ /*------------------------------------------------------------*/ @@ -79,14 +97,15 @@ index a470d9f8d..b9c0514ba 100644 } ULong -@@ -336,6 +327,76 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) +@@ -336,6 +327,77 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) ULong hoststfle[S390_NUM_FACILITY_DW], cc, num_dw, i; register ULong reg0 asm("0") = guest_state->guest_r0 & 0xF; /* r0[56:63] */ -+ /* Restrict to facilities that we know about and assume to be compatible with -+ Valgrind. Of course, in this way we may reject features that Valgrind is -+ not really involved in (and thus would be compatible), but quering for -+ such features doesn't seem like a typical use case. */ ++ /* Restrict to facilities that we know about and that we assume to be ++ compatible with Valgrind. Of course, in this way we may reject features ++ that Valgrind is not really involved in (and thus would be compatible ++ with), but quering for such features doesn't seem like a typical use ++ case. */ + ULong accepted_facility[S390_NUM_FACILITY_DW] = { + /* === 0 .. 63 === */ + (s390_stfle_range(0, 16) @@ -156,7 +175,7 @@ index a470d9f8d..b9c0514ba 100644 /* We cannot store more than S390_NUM_FACILITY_DW (and it makes not much sense to do so anyhow) */ if (reg0 > S390_NUM_FACILITY_DW - 1) -@@ -351,35 +412,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) +@@ -351,35 +413,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) /* Update guest register 0 with what STFLE set r0 to */ guest_state->guest_r0 = reg0; @@ -194,7 +213,7 @@ index a470d9f8d..b9c0514ba 100644 return cc; } -@@ -2500,25 +2535,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, +@@ -2500,25 +2536,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, vassert(d->op > S390_VEC_OP_INVALID && d->op < S390_VEC_OP_LAST); static const UChar opcodes[][2] = { {0x00, 0x00}, /* invalid */ @@ -240,7 +259,7 @@ index a470d9f8d..b9c0514ba 100644 }; union { -@@ -2612,6 +2648,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, +@@ -2612,6 +2649,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, case S390_VEC_OP_VGFMA: case S390_VEC_OP_VMAH: case S390_VEC_OP_VMALH: @@ -248,7 +267,7 @@ index a470d9f8d..b9c0514ba 100644 the_insn.VRRd.v1 = 1; the_insn.VRRd.v2 = 2; the_insn.VRRd.v3 = 3; -@@ -2621,9 +2658,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, +@@ -2621,9 +2659,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, the_insn.VRRd.m6 = d->m5; break; @@ -262,7 +281,7 @@ index a470d9f8d..b9c0514ba 100644 the_insn.VRRc.v2 = 2; the_insn.VRRc.v3 = 3; diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index c27a8d3fe..d4f428c24 100644 +index c27a8d3fe..5f2c5ce98 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -8,7 +8,7 @@ @@ -691,7 +710,7 @@ index c27a8d3fe..d4f428c24 100644 return "vpopct"; } -@@ -18335,12 +18516,52 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5) +@@ -18335,12 +18516,53 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5) return "vmalh"; } @@ -704,12 +723,13 @@ index c27a8d3fe..d4f428c24 100644 + IRTemp cc = newTemp(Ity_I64); + + s390x_vec_op_details_t details = { .serialized = 0ULL }; -+ details.op = S390_VEC_OP_VMALH; ++ details.op = S390_VEC_OP_VMSL; + details.v1 = v1; + details.v2 = v2; + details.v3 = v3; + details.v4 = v4; + details.m4 = m5; ++ details.m5 = m6; + + d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", + &s390x_dirtyhelper_vec_op, @@ -746,7 +766,7 @@ index c27a8d3fe..d4f428c24 100644 /* For Iop_F32toF64 we do this: f32[0] -> f64[0] -@@ -18353,14 +18574,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, +@@ -18353,14 +18575,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, The magic below with scaling factors is used to achieve the logic described above. */ @@ -774,7 +794,7 @@ index c27a8d3fe..d4f428c24 100644 result = binop(op, mkexpr(encode_bfp_rounding_mode(m5)), argument); -@@ -18369,10 +18597,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, +@@ -18369,10 +18598,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, } put_vr(v1, toType, i * destinationIndexScaleFactor, result); } @@ -785,7 +805,7 @@ index c27a8d3fe..d4f428c24 100644 } static const HChar * -@@ -18380,12 +18604,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) +@@ -18380,12 +18605,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) { s390_insn_assert("vcdg", m3 == 3); @@ -800,7 +820,7 @@ index c27a8d3fe..d4f428c24 100644 return "vcdg"; } -@@ -18395,12 +18615,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) +@@ -18395,12 +18616,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) { s390_insn_assert("vcdlg", m3 == 3); @@ -815,7 +835,7 @@ index c27a8d3fe..d4f428c24 100644 return "vcdlg"; } -@@ -18410,12 +18626,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) +@@ -18410,12 +18627,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) { s390_insn_assert("vcgd", m3 == 3); @@ -830,7 +850,7 @@ index c27a8d3fe..d4f428c24 100644 return "vcgd"; } -@@ -18425,12 +18637,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) +@@ -18425,12 +18638,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) { s390_insn_assert("vclgd", m3 == 3); @@ -845,7 +865,7 @@ index c27a8d3fe..d4f428c24 100644 return "vclgd"; } -@@ -18438,246 +18646,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) +@@ -18438,246 +18647,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) static const HChar * s390_irgen_VFI(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) { @@ -1259,7 +1279,7 @@ index c27a8d3fe..d4f428c24 100644 IRTemp cc_s390 = newTemp(Ity_I32); assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); -@@ -18695,213 +18919,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4) +@@ -18695,213 +18920,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4) } static const HChar * @@ -1662,7 +1682,7 @@ index c27a8d3fe..d4f428c24 100644 } /* New insns are added here. -@@ -20489,11 +20753,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20489,11 +20754,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes) RXY_dl2(ovl), RXY_dh2(ovl)); goto ok; case 0xe60000000034ULL: /* VPKZ */ goto unimplemented; @@ -1690,7 +1710,7 @@ index c27a8d3fe..d4f428c24 100644 case 0xe60000000049ULL: /* VLIP */ goto unimplemented; case 0xe60000000050ULL: /* VCVB */ goto unimplemented; case 0xe60000000052ULL: /* VCVBG */ goto unimplemented; -@@ -20691,12 +20967,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20691,12 +20968,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes) case 0xe7000000006bULL: s390_format_VRR_VVV(s390_irgen_VNO, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_rxb(ovl)); goto ok; @@ -1712,7 +1732,7 @@ index c27a8d3fe..d4f428c24 100644 case 0xe70000000070ULL: s390_format_VRR_VVVM(s390_irgen_VESLV, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -@@ -20749,7 +21031,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20749,7 +21032,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) case 0xe70000000084ULL: s390_format_VRR_VVVM(s390_irgen_VPDI, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_rxb(ovl)); goto ok; @@ -1723,7 +1743,7 @@ index c27a8d3fe..d4f428c24 100644 case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl), VRRd_v2(ovl), VRRd_v3(ovl), VRRd_v4(ovl), VRRd_m5(ovl), -@@ -20780,8 +21064,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20780,8 +21065,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) case 0xe70000000097ULL: s390_format_VRR_VVVMM(s390_irgen_VPKS, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_m5(ovl), VRR_rxb(ovl)); goto ok; @@ -1742,7 +1762,7 @@ index c27a8d3fe..d4f428c24 100644 case 0xe700000000a1ULL: s390_format_VRR_VVVM(s390_irgen_VMLH, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -@@ -20834,7 +21126,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20834,7 +21127,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) case 0xe700000000b4ULL: s390_format_VRR_VVVM(s390_irgen_VGFM, VRR_v1(ovl), VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_rxb(ovl)); goto ok; @@ -1755,7 +1775,7 @@ index c27a8d3fe..d4f428c24 100644 case 0xe700000000b9ULL: s390_format_VRRd_VVVVM(s390_irgen_VACCC, VRRd_v1(ovl), VRRd_v2(ovl), VRRd_v3(ovl), VRRd_v4(ovl), VRRd_m5(ovl), -@@ -20871,11 +21167,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20871,11 +21168,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) VRRa_v2(ovl), VRRa_m3(ovl), VRRa_m4(ovl), VRRa_m5(ovl), VRRa_rxb(ovl)); goto ok; @@ -1769,7 +1789,7 @@ index c27a8d3fe..d4f428c24 100644 VRRa_v2(ovl), VRRa_m3(ovl), VRRa_m4(ovl), VRRa_m5(ovl), VRRa_rxb(ovl)); goto ok; -@@ -20956,8 +21252,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) +@@ -20956,8 +21253,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) VRRa_m3(ovl), VRRa_m4(ovl), VRRa_m5(ovl), VRRa_rxb(ovl)); goto ok; @@ -1789,9 +1809,18 @@ index c27a8d3fe..d4f428c24 100644 VRR_v2(ovl), VRR_r3(ovl), VRR_m4(ovl), VRR_rxb(ovl)); goto ok; diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 3b6121fec..a59db6578 100644 +index 3b6121fec..8762975b2 100644 --- a/VEX/priv/host_s390_defs.c +++ b/VEX/priv/host_s390_defs.c +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org) + + This program is free software; you can redistribute it and/or @@ -684,6 +684,8 @@ s390_insn* genMove_S390(HReg from, HReg to, Bool mode64) switch (hregClass(from)) { case HRcInt64: @@ -1845,9 +1874,18 @@ index 3b6121fec..a59db6578 100644 UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); return s390_emit_VFSQ(buf, v1, v2, s390_getM_from_size(insn->size), 0); diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h -index 3f6473e10..46d8e1f12 100644 +index 3f6473e10..9b69f4d38 100644 --- a/VEX/priv/host_s390_defs.h +++ b/VEX/priv/host_s390_defs.h +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as @@ -205,6 +205,7 @@ typedef enum { S390_VEC_COUNT_ONES, S390_VEC_FLOAT_NEG, @@ -1866,9 +1904,18 @@ index 3f6473e10..46d8e1f12 100644 /*---------------------------------------------------------------*/ diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 134f3eb6f..58f70ff4e 100644 +index 134f3eb6f..2f9854038 100644 --- a/VEX/priv/host_s390_isel.c +++ b/VEX/priv/host_s390_isel.c +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2017 ++ Copyright IBM Corp. 2010-2020 + Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org) + + This program is free software; you can redistribute it and/or @@ -2362,9 +2362,10 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env, case Iop_NegF128: if (left->tag == Iex_Unop && diff --git a/valgrind.spec b/valgrind.spec index f88615f..a9bdf32 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -491,6 +491,9 @@ fi %endif %changelog +* Thu Dec 3 2020 Mark Wielaard - 3.16.1-8 +- Update valgrind-3.16.1-s390x-z14-vector.patch + * Thu Dec 3 2020 Mark Wielaard - 3.16.1-7 - Add valgrind-3.16.1-pthread-intercept.patch - Add valgrind-3.16.1-s390_emit_load_mem.patch From de7a086ef34c1316e53d4565406be8a818b47751 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 13 Dec 2020 23:11:18 +0100 Subject: [PATCH 024/196] 3.16.1-9 - Add valgrind-3.16.1-stxsibx-stxsihx.patch --- valgrind-3.16.1-stxsibx-stxsihx.patch | 63 +++++++++++++++++++++++++++ valgrind.spec | 9 +++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-stxsibx-stxsihx.patch diff --git a/valgrind-3.16.1-stxsibx-stxsihx.patch b/valgrind-3.16.1-stxsibx-stxsihx.patch new file mode 100644 index 0000000..c94ad91 --- /dev/null +++ b/valgrind-3.16.1-stxsibx-stxsihx.patch @@ -0,0 +1,63 @@ +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index c9c058a7a..d726d63de 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -25671,49 +25671,29 @@ dis_vx_store ( UInt prefix, UInt theInstr ) + + case 0x38D: // stxsibx + { +- IRExpr *stored_word; +- IRTemp byte_to_store = newTemp( Ity_I64 ); ++ IRTemp byte_to_store = newTemp( Ity_I8 ); + + DIP("stxsibx %u,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr); + +- /* Can't store just a byte, need to fetch the word at EA merge data +- * and store. +- */ +- stored_word = load( Ity_I64, mkexpr( EA ) ); +- assign( byte_to_store, binop( Iop_And64, ++ assign( byte_to_store, unop( Iop_64to8, + unop( Iop_V128HIto64, +- mkexpr( vS ) ), +- mkU64( 0xFF ) ) ); ++ mkexpr( vS ) ) ) ); + +- store( mkexpr( EA ), binop( Iop_Or64, +- binop( Iop_And64, +- stored_word, +- mkU64( 0xFFFFFFFFFFFFFF00 ) ), +- mkexpr( byte_to_store ) ) ); ++ store( mkexpr( EA ), mkexpr( byte_to_store ) ); + break; + } + + case 0x3AD: // stxsihx + { +- IRExpr *stored_word; +- IRTemp byte_to_store = newTemp( Ity_I64 ); ++ IRTemp hword_to_store = newTemp( Ity_I16 ); + + DIP("stxsihx %u,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr); + +- /* Can't store just a halfword, need to fetch the word at EA merge data +- * and store. +- */ +- stored_word = load( Ity_I64, mkexpr( EA ) ); +- assign( byte_to_store, binop( Iop_And64, +- unop( Iop_V128HIto64, +- mkexpr( vS ) ), +- mkU64( 0xFFFF ) ) ); ++ assign( hword_to_store, unop( Iop_64to16, ++ unop( Iop_V128HIto64, ++ mkexpr( vS ) ) ) ); + +- store( mkexpr( EA ), binop( Iop_Or64, +- binop( Iop_And64, +- stored_word, +- mkU64( 0xFFFFFFFFFFFF0000 ) ), +- mkexpr( byte_to_store ) ) ); ++ store( mkexpr( EA ), mkexpr( hword_to_store ) ); + break; + } + diff --git a/valgrind.spec b/valgrind.spec index a9bdf32..151f270 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 8%{?dist} +Release: 9%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -123,6 +123,9 @@ Patch15: valgrind-3.16.1-s390_emit_load_mem.patch # KDE#133812 s390x: z14 vector instructions not implemented Patch16: valgrind-3.16.1-s390x-z14-vector.patch +# KDE#430354 ppc stxsibx and stxsihx instructions write too much data +Patch17: valgrind-3.16.1-stxsibx-stxsihx.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -267,6 +270,7 @@ Valgrind User Manual for details. %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -491,6 +495,9 @@ fi %endif %changelog +* Sun Dec 13 2020 Mark Wielaard - 3.16.1-9 +- Add valgrind-3.16.1-stxsibx-stxsihx.patch + * Thu Dec 3 2020 Mark Wielaard - 3.16.1-8 - Update valgrind-3.16.1-s390x-z14-vector.patch From c858e5c9f7ba7d56e28605d066a2577d536654b0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 15 Dec 2020 16:42:31 +0100 Subject: [PATCH 025/196] 3.16.1-10 - Add valgrind-3.16.1-arm64-fma.patch --- valgrind-3.16.1-arm64-fma.patch | 716 ++++++++++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 724 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-arm64-fma.patch diff --git a/valgrind-3.16.1-arm64-fma.patch b/valgrind-3.16.1-arm64-fma.patch new file mode 100644 index 0000000..e00292f --- /dev/null +++ b/valgrind-3.16.1-arm64-fma.patch @@ -0,0 +1,716 @@ +From 04cdc29b007594a0e58ffef0c9dd87df3ea595ea Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Wed, 14 Oct 2020 06:11:34 -0400 +Subject: [PATCH] arm64 VEX frontend and backend support for + Iop_M{Add,Sub}F{32,64} + +The arm64 frontend used to implement the scalar fmadd, fmsub, fnmadd +and fnmsub iinstructions into separate addition/substraction and +multiplication instructions, which caused rounding issues. + +This patch turns them into Iop_M{Add,Sub}F{32,64} instructions +(with some arguments negated). And the backend now emits fmadd or fmsub +instructions. + +Alexandra Hajkova added tests and fixed up the +implementation to make sure rounding (and sign) are correct now. + +https://bugs.kde.org/show_bug.cgi?id=426014 +--- + VEX/priv/guest_arm64_toIR.c | 58 ++++++++--- + VEX/priv/host_arm64_defs.c | 136 +++++++++++++++++++++++++- + VEX/priv/host_arm64_defs.h | 30 ++++++ + VEX/priv/host_arm64_isel.c | 39 ++++++++ + none/tests/arm64/Makefile.am | 6 +- + none/tests/arm64/fmadd_sub.c | 98 +++++++++++++++++++ + none/tests/arm64/fmadd_sub.stderr.exp | 0 + none/tests/arm64/fmadd_sub.stdout.exp | 125 +++++++++++++++++++++++ + none/tests/arm64/fmadd_sub.vgtest | 3 + + 9 files changed, 479 insertions(+), 16 deletions(-) + create mode 100644 none/tests/arm64/fmadd_sub.c + create mode 100644 none/tests/arm64/fmadd_sub.stderr.exp + create mode 100644 none/tests/arm64/fmadd_sub.stdout.exp + create mode 100644 none/tests/arm64/fmadd_sub.vgtest + +diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c +index 556b85a6a..d242d43c0 100644 +--- a/VEX/priv/guest_arm64_toIR.c ++++ b/VEX/priv/guest_arm64_toIR.c +@@ -286,6 +286,12 @@ static IRExpr* triop ( IROp op, IRExpr* a1, IRExpr* a2, IRExpr* a3 ) + return IRExpr_Triop(op, a1, a2, a3); + } + ++static IRExpr* qop ( IROp op, IRExpr* a1, IRExpr* a2, ++ IRExpr* a3, IRExpr* a4 ) ++{ ++ return IRExpr_Qop(op, a1, a2, a3, a4); ++} ++ + static IRExpr* loadLE ( IRType ty, IRExpr* addr ) + { + return IRExpr_Load(Iend_LE, ty, addr); +@@ -532,6 +538,22 @@ static IROp mkADDF ( IRType ty ) { + } + } + ++static IROp mkFMADDF ( IRType ty ) { ++ switch (ty) { ++ case Ity_F32: return Iop_MAddF32; ++ case Ity_F64: return Iop_MAddF64; ++ default: vpanic("mkFMADDF"); ++ } ++} ++ ++static IROp mkFMSUBF ( IRType ty ) { ++ switch (ty) { ++ case Ity_F32: return Iop_MSubF32; ++ case Ity_F64: return Iop_MSubF64; ++ default: vpanic("mkFMSUBF"); ++ } ++} ++ + static IROp mkSUBF ( IRType ty ) { + switch (ty) { + case Ity_F32: return Iop_SubF32; +@@ -14368,30 +14390,40 @@ Bool dis_AdvSIMD_fp_data_proc_3_source(/*MB_OUT*/DisResult* dres, UInt insn) + where Fx=Dx when sz=1, Fx=Sx when sz=0 + + -----SPEC------ ----IMPL---- +- fmadd a + n * m a + n * m +- fmsub a + (-n) * m a - n * m +- fnmadd (-a) + (-n) * m -(a + n * m) +- fnmsub (-a) + n * m -(a - n * m) ++ fmadd a + n * m fmadd (a, n, m) ++ fmsub a + (-n) * m fmsub (a, n, m) ++ fnmadd (-a) + (-n) * m fmadd (-a, -n, m) ++ fnmsub (-a) + n * m fmadd (-a, n, m) ++ ++ Note Iop_MAdd/SubF32/64 take arguments in the order: rm, N, M, A + */ + Bool isD = (ty & 1) == 1; + UInt ix = (bitO1 << 1) | bitO0; + IRType ity = isD ? Ity_F64 : Ity_F32; +- IROp opADD = mkADDF(ity); +- IROp opSUB = mkSUBF(ity); +- IROp opMUL = mkMULF(ity); ++ IROp opFMADD = mkFMADDF(ity); ++ IROp opFMSUB = mkFMSUBF(ity); + IROp opNEG = mkNEGF(ity); + IRTemp res = newTemp(ity); + IRExpr* eA = getQRegLO(aa, ity); + IRExpr* eN = getQRegLO(nn, ity); + IRExpr* eM = getQRegLO(mm, ity); + IRExpr* rm = mkexpr(mk_get_IR_rounding_mode()); +- IRExpr* eNxM = triop(opMUL, rm, eN, eM); + switch (ix) { +- case 0: assign(res, triop(opADD, rm, eA, eNxM)); break; +- case 1: assign(res, triop(opSUB, rm, eA, eNxM)); break; +- case 2: assign(res, unop(opNEG, triop(opADD, rm, eA, eNxM))); break; +- case 3: assign(res, unop(opNEG, triop(opSUB, rm, eA, eNxM))); break; +- default: vassert(0); ++ case 0: /* FMADD */ ++ assign(res, qop(opFMADD, rm, eN, eM, eA)); ++ break; ++ case 1: /* FMSUB */ ++ assign(res, qop(opFMSUB, rm, eN, eM, eA)); ++ break; ++ case 2: /* FNMADD */ ++ assign(res, qop(opFMADD, rm, unop(opNEG, eN), eM, ++ unop(opNEG,eA))); ++ break; ++ case 3: /* FNMSUB */ ++ assign(res, qop(opFMADD, rm, eN, eM, unop(opNEG, eA))); ++ break; ++ default: ++ vassert(0); + } + putQReg128(dd, mkV128(0x0000)); + putQRegLO(dd, mkexpr(res)); +diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c +index e4ef56986..13b497f60 100644 +--- a/VEX/priv/host_arm64_defs.c ++++ b/VEX/priv/host_arm64_defs.c +@@ -546,6 +546,14 @@ static const HChar* showARM64FpBinOp ( ARM64FpBinOp op ) { + } + } + ++static const HChar* showARM64FpTriOp ( ARM64FpTriOp op ) { ++ switch (op) { ++ case ARM64fpt_FMADD: return "fmadd"; ++ case ARM64fpt_FMSUB: return "fmsub"; ++ default: vpanic("showARM64FpTriOp"); ++ } ++} ++ + static const HChar* showARM64FpUnaryOp ( ARM64FpUnaryOp op ) { + switch (op) { + case ARM64fpu_NEG: return "neg "; +@@ -1154,6 +1162,28 @@ ARM64Instr* ARM64Instr_VBinS ( ARM64FpBinOp op, + i->ARM64in.VBinS.argR = argR; + return i; + } ++ARM64Instr* ARM64Instr_VTriD ( ARM64FpTriOp op, ++ HReg dst, HReg arg1, HReg arg2, HReg arg3 ) { ++ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); ++ i->tag = ARM64in_VTriD; ++ i->ARM64in.VTriD.op = op; ++ i->ARM64in.VTriD.dst = dst; ++ i->ARM64in.VTriD.arg1 = arg1; ++ i->ARM64in.VTriD.arg2 = arg2; ++ i->ARM64in.VTriD.arg3 = arg3; ++ return i; ++} ++ARM64Instr* ARM64Instr_VTriS ( ARM64FpTriOp op, ++ HReg dst, HReg arg1, HReg arg2, HReg arg3 ) { ++ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); ++ i->tag = ARM64in_VTriS; ++ i->ARM64in.VTriS.op = op; ++ i->ARM64in.VTriS.dst = dst; ++ i->ARM64in.VTriS.arg1 = arg1; ++ i->ARM64in.VTriS.arg2 = arg2; ++ i->ARM64in.VTriS.arg3 = arg3; ++ return i; ++} + ARM64Instr* ARM64Instr_VCmpD ( HReg argL, HReg argR ) { + ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); + i->tag = ARM64in_VCmpD; +@@ -1756,6 +1786,26 @@ void ppARM64Instr ( const ARM64Instr* i ) { + vex_printf(", "); + ppHRegARM64asSreg(i->ARM64in.VBinS.argR); + return; ++ case ARM64in_VTriD: ++ vex_printf("f%s ", showARM64FpTriOp(i->ARM64in.VTriD.op)); ++ ppHRegARM64(i->ARM64in.VTriD.dst); ++ vex_printf(", "); ++ ppHRegARM64(i->ARM64in.VTriD.arg1); ++ vex_printf(", "); ++ ppHRegARM64(i->ARM64in.VTriD.arg2); ++ vex_printf(", "); ++ ppHRegARM64(i->ARM64in.VTriD.arg3); ++ return; ++ case ARM64in_VTriS: ++ vex_printf("f%s ", showARM64FpTriOp(i->ARM64in.VTriS.op)); ++ ppHRegARM64asSreg(i->ARM64in.VTriS.dst); ++ vex_printf(", "); ++ ppHRegARM64asSreg(i->ARM64in.VTriS.arg1); ++ vex_printf(", "); ++ ppHRegARM64asSreg(i->ARM64in.VTriS.arg2); ++ vex_printf(", "); ++ ppHRegARM64asSreg(i->ARM64in.VTriS.arg3); ++ return; + case ARM64in_VCmpD: + vex_printf("fcmp "); + ppHRegARM64(i->ARM64in.VCmpD.argL); +@@ -2197,6 +2247,18 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) + addHRegUse(u, HRmRead, i->ARM64in.VBinS.argL); + addHRegUse(u, HRmRead, i->ARM64in.VBinS.argR); + return; ++ case ARM64in_VTriD: ++ addHRegUse(u, HRmWrite, i->ARM64in.VTriD.dst); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg1); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg2); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg3); ++ return; ++ case ARM64in_VTriS: ++ addHRegUse(u, HRmWrite, i->ARM64in.VTriS.dst); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg1); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg2); ++ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg3); ++ return; + case ARM64in_VCmpD: + addHRegUse(u, HRmRead, i->ARM64in.VCmpD.argL); + addHRegUse(u, HRmRead, i->ARM64in.VCmpD.argR); +@@ -2454,6 +2516,18 @@ void mapRegs_ARM64Instr ( HRegRemap* m, ARM64Instr* i, Bool mode64 ) + i->ARM64in.VBinS.argL = lookupHRegRemap(m, i->ARM64in.VBinS.argL); + i->ARM64in.VBinS.argR = lookupHRegRemap(m, i->ARM64in.VBinS.argR); + return; ++ case ARM64in_VTriD: ++ i->ARM64in.VTriD.dst = lookupHRegRemap(m, i->ARM64in.VTriD.dst); ++ i->ARM64in.VTriD.arg1 = lookupHRegRemap(m, i->ARM64in.VTriD.arg1); ++ i->ARM64in.VTriD.arg2 = lookupHRegRemap(m, i->ARM64in.VTriD.arg2); ++ i->ARM64in.VTriD.arg3 = lookupHRegRemap(m, i->ARM64in.VTriD.arg3); ++ return; ++ case ARM64in_VTriS: ++ i->ARM64in.VTriS.dst = lookupHRegRemap(m, i->ARM64in.VTriS.dst); ++ i->ARM64in.VTriS.arg1 = lookupHRegRemap(m, i->ARM64in.VTriS.arg1); ++ i->ARM64in.VTriS.arg2 = lookupHRegRemap(m, i->ARM64in.VTriS.arg2); ++ i->ARM64in.VTriS.arg3 = lookupHRegRemap(m, i->ARM64in.VTriS.arg3); ++ return; + case ARM64in_VCmpD: + i->ARM64in.VCmpD.argL = lookupHRegRemap(m, i->ARM64in.VCmpD.argL); + i->ARM64in.VCmpD.argR = lookupHRegRemap(m, i->ARM64in.VCmpD.argR); +@@ -2812,7 +2886,8 @@ static inline UInt qregEnc ( HReg r ) + #define X11110011 BITS8(1,1,1,1,0,0,1,1) + #define X11110101 BITS8(1,1,1,1,0,1,0,1) + #define X11110111 BITS8(1,1,1,1,0,1,1,1) +- ++#define X11111000 BITS8(1,1,1,1,1,0,0,0) ++#define X11111010 BITS8(1,1,1,1,1,0,1,0) + + /* --- 4 fields --- */ + +@@ -2972,6 +3047,27 @@ static inline UInt X_3_6_1_6_6_5_5 ( UInt f1, UInt f2, UInt f3, + } + + ++static inline UInt X_3_8_5_1_5_5_5 ( UInt f1, UInt f2, UInt f3, UInt f4, ++ UInt f5, UInt f6, UInt f7 ) { ++ vassert(3+8+5+1+5+5+5 == 32); ++ vassert(f1 < (1<<3)); ++ vassert(f2 < (1<<8)); ++ vassert(f3 < (1<<5)); ++ vassert(f4 < (1<<1)); ++ vassert(f5 < (1<<5)); ++ vassert(f6 < (1<<5)); ++ vassert(f7 < (1<<5)); ++ UInt w = 0; ++ w = (w << 3) | f1; ++ w = (w << 8) | f2; ++ w = (w << 5) | f3; ++ w = (w << 1) | f4; ++ w = (w << 5) | f5; ++ w = (w << 5) | f6; ++ w = (w << 5) | f7; ++ return w; ++} ++ + //ZZ #define X0000 BITS4(0,0,0,0) + //ZZ #define X0001 BITS4(0,0,0,1) + //ZZ #define X0010 BITS4(0,0,1,0) +@@ -4339,6 +4435,44 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, + = X_3_8_5_6_5_5(X000, X11110001, sM, (b1512 << 2) | X10, sN, sD); + goto done; + } ++ case ARM64in_VTriD: { ++ /* 31 20 15 14 9 4 ++ 000 11111 010 m 0 a n d FMADD Dd,Dn,Dm,Da ++ ---------------- 1 ------ FMSUB ----------- ++ */ ++ UInt dD = dregEnc(i->ARM64in.VTriD.dst); ++ UInt dN = dregEnc(i->ARM64in.VTriD.arg1); ++ UInt dM = dregEnc(i->ARM64in.VTriD.arg2); ++ UInt dA = dregEnc(i->ARM64in.VTriD.arg3); ++ UInt b15 = 2; /* impossible */ ++ switch (i->ARM64in.VTriD.op) { ++ case ARM64fpt_FMADD: b15 = 0; break; ++ case ARM64fpt_FMSUB: b15 = 1; break; ++ default: goto bad; ++ } ++ vassert(b15 < 2); ++ *p++ = X_3_8_5_1_5_5_5(X000, X11111010, dM, b15, dA, dN, dD); ++ goto done; ++ } ++ case ARM64in_VTriS: { ++ /* 31 20 15 14 9 4 ++ 000 11111 000 m 0 a n d FMADD Dd,Dn,Dm,Da ++ ---------------- 1 ------ FMSUB ----------- ++ */ ++ UInt dD = dregEnc(i->ARM64in.VTriD.dst); ++ UInt dN = dregEnc(i->ARM64in.VTriD.arg1); ++ UInt dM = dregEnc(i->ARM64in.VTriD.arg2); ++ UInt dA = dregEnc(i->ARM64in.VTriD.arg3); ++ UInt b15 = 2; /* impossible */ ++ switch (i->ARM64in.VTriD.op) { ++ case ARM64fpt_FMADD: b15 = 0; break; ++ case ARM64fpt_FMSUB: b15 = 1; break; ++ default: goto bad; ++ } ++ vassert(b15 < 2); ++ *p++ = X_3_8_5_1_5_5_5(X000, X11111000, dM, b15, dA, dN, dD); ++ goto done; ++ } + case ARM64in_VCmpD: { + /* 000 11110 01 1 m 00 1000 n 00 000 FCMP Dn, Dm */ + UInt dN = dregEnc(i->ARM64in.VCmpD.argL); +diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h +index 05dba7ab8..5a82564ce 100644 +--- a/VEX/priv/host_arm64_defs.h ++++ b/VEX/priv/host_arm64_defs.h +@@ -289,6 +289,14 @@ typedef + } + ARM64FpBinOp; + ++typedef ++ enum { ++ ARM64fpt_FMADD=105, ++ ARM64fpt_FMSUB, ++ ARM64fpt_INVALID ++ } ++ ARM64FpTriOp; ++ + typedef + enum { + ARM64fpu_NEG=110, +@@ -498,6 +506,8 @@ typedef + ARM64in_VUnaryS, + ARM64in_VBinD, + ARM64in_VBinS, ++ ARM64in_VTriD, ++ ARM64in_VTriS, + ARM64in_VCmpD, + ARM64in_VCmpS, + ARM64in_VFCSel, +@@ -799,6 +809,22 @@ typedef + HReg argL; + HReg argR; + } VBinS; ++ /* 64-bit FP ternary arithmetic */ ++ struct { ++ ARM64FpTriOp op; ++ HReg dst; ++ HReg arg1; ++ HReg arg2; ++ HReg arg3; ++ } VTriD; ++ /* 32-bit FP ternary arithmetic */ ++ struct { ++ ARM64FpTriOp op; ++ HReg dst; ++ HReg arg1; ++ HReg arg2; ++ HReg arg3; ++ } VTriS; + /* 64-bit FP compare */ + struct { + HReg argL; +@@ -970,6 +996,10 @@ extern ARM64Instr* ARM64Instr_VUnaryD ( ARM64FpUnaryOp op, HReg dst, HReg src ); + extern ARM64Instr* ARM64Instr_VUnaryS ( ARM64FpUnaryOp op, HReg dst, HReg src ); + extern ARM64Instr* ARM64Instr_VBinD ( ARM64FpBinOp op, HReg, HReg, HReg ); + extern ARM64Instr* ARM64Instr_VBinS ( ARM64FpBinOp op, HReg, HReg, HReg ); ++extern ARM64Instr* ARM64Instr_VTriD ( ARM64FpTriOp op, HReg dst, ++ HReg, HReg, HReg ); ++extern ARM64Instr* ARM64Instr_VTriS ( ARM64FpTriOp op, HReg dst, ++ HReg, HReg, HReg ); + extern ARM64Instr* ARM64Instr_VCmpD ( HReg argL, HReg argR ); + extern ARM64Instr* ARM64Instr_VCmpS ( HReg argL, HReg argR ); + extern ARM64Instr* ARM64Instr_VFCSel ( HReg dst, HReg argL, HReg argR, +diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c +index 2f19eab81..da1218715 100644 +--- a/VEX/priv/host_arm64_isel.c ++++ b/VEX/priv/host_arm64_isel.c +@@ -3255,6 +3255,25 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e ) + } + } + ++ if (e->tag == Iex_Qop) { ++ IRQop* qop = e->Iex.Qop.details; ++ ARM64FpTriOp triop = ARM64fpt_INVALID; ++ switch (qop->op) { ++ case Iop_MAddF64: triop = ARM64fpt_FMADD; break; ++ case Iop_MSubF64: triop = ARM64fpt_FMSUB; break; ++ default: break; ++ } ++ if (triop != ARM64fpt_INVALID) { ++ HReg N = iselDblExpr(env, qop->arg2); ++ HReg M = iselDblExpr(env, qop->arg3); ++ HReg A = iselDblExpr(env, qop->arg4); ++ HReg dst = newVRegD(env); ++ set_FPCR_rounding_mode(env, qop->arg1); ++ addInstr(env, ARM64Instr_VTriD(triop, dst, N, M, A)); ++ return dst; ++ } ++ } ++ + if (e->tag == Iex_ITE) { + /* ITE(ccexpr, iftrue, iffalse) */ + ARM64CondCode cc; +@@ -3450,6 +3469,26 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e ) + return dst; + } + ++ if (e->tag == Iex_Qop) { ++ IRQop* qop = e->Iex.Qop.details; ++ ARM64FpTriOp triop = ARM64fpt_INVALID; ++ switch (qop->op) { ++ case Iop_MAddF32: triop = ARM64fpt_FMADD; break; ++ case Iop_MSubF32: triop = ARM64fpt_FMSUB; break; ++ default: break; ++ } ++ ++ if (triop != ARM64fpt_INVALID) { ++ HReg N = iselFltExpr(env, qop->arg2); ++ HReg M = iselFltExpr(env, qop->arg3); ++ HReg A = iselFltExpr(env, qop->arg4); ++ HReg dst = newVRegD(env); ++ set_FPCR_rounding_mode(env, qop->arg1); ++ addInstr(env, ARM64Instr_VTriS(triop, dst, N, M, A)); ++ return dst; ++ } ++ } ++ + ppIRExpr(e); + vpanic("iselFltExpr_wrk"); + } +diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am +index 7b3ebbdca..4ecab36ad 100644 +--- a/none/tests/arm64/Makefile.am ++++ b/none/tests/arm64/Makefile.am +@@ -10,14 +10,16 @@ EXTRA_DIST = \ + integer.stdout.exp integer.stderr.exp integer.vgtest \ + memory.stdout.exp memory.stderr.exp memory.vgtest \ + atomics_v81.stdout.exp atomics_v81.stderr.exp atomics_v81.vgtest \ +- simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest ++ simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest \ ++ fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest + + check_PROGRAMS = \ + allexec \ + cvtf_imm \ + fp_and_simd \ + integer \ +- memory ++ memory \ ++ fmadd_sub + + if BUILD_ARMV8_CRC_TESTS + check_PROGRAMS += crc32 +diff --git a/none/tests/arm64/fmadd_sub.c b/none/tests/arm64/fmadd_sub.c +new file mode 100644 +index 000000000..dcab22d1b +--- /dev/null ++++ b/none/tests/arm64/fmadd_sub.c +@@ -0,0 +1,98 @@ ++#include ++#include ++#include ++#include ++ ++#define COUNT 5 ++ ++static void ++print_float(const char *ident, float x) ++{ ++ union ++ { ++ float f; ++ uint32_t i; ++ } u; ++ ++ u.f = x; ++ printf("%s = %08x = %.17g\n", ident, u.i, x); ++} ++ ++static void ++print_double(const char *ident, double x) ++{ ++ union ++ { ++ double f; ++ uint64_t i; ++ } u; ++ ++ u.f = x; ++ printf("%s = %016lx = %.17g\n", ident, u.i, x); ++} ++ ++int ++main(int argc, char **argv) ++{ ++ float x[] = { 55, 0.98076171874999996, 0, 1, 0xFFFFFFFF } ; ++ float y[] = { 0.69314718055994529, 1.015625, 0, 1, 0xFFFFFFFF }; ++ float z[] = { 38.123094930796988, 1, 0, 1, 0xFFFFFFFF }; ++ float dst = -5; ++ ++ double dx[] = { 55, 0.98076171874999996, 0, 1, 0xFFFFFFFF } ; ++ double dy[] = { 0.69314718055994529, 1.015625, 0, 1, 0xFFFFFFFF }; ++ double dz[] = { 38.123094930796988, 1, 0, 1, 0xFFFFFFFF }; ++ double ddst= -5; ++ ++ int i; ++ ++ for (i = 0; i < COUNT; i++) { ++ //32bit variant ++ asm("fmadd %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); ++ printf("FMADD 32bit: dst = z + x * y\n"); ++ printf("%f = %f + %f * %f\n", dst, z[i], x[i], y[i]); ++ print_float("dst", dst); ++ ++ // Floating-point negated fused multiply-add ++ asm("fnmadd %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); ++ printf("FNMADD 32bit: dst = -z + (-x) * y\n"); ++ printf("%f = -%f + (-%f) * %f\n", dst, z[i], x[i], y[i]); ++ print_float("dst", dst); ++ ++ asm("fmsub %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); ++ printf("FMSUB 32bit: dst = z + (-x) * y\n"); ++ printf("%f = %f + (-%f) * %f\n", dst, z[i], x[i], y[i]); ++ print_float("dst", dst); ++ ++ asm("fnmsub %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); ++ printf("FNMSUB 32bit: dst = -z + x * y\n"); ++ printf("%f = -%f + %f * %f\n", dst, z[i], x[i], y[i]); ++ print_float("dst", dst); ++ ++ //64bit variant ++ asm("fmadd %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); ++ printf("FMADD 64bit: dst = z + x * y\n"); ++ printf("%f = %f + %f * %f\n", ddst, dz[i], dx[i], dy[i]); ++ print_double("dst", ddst); ++ ++ asm("fnmadd %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); ++ printf("FNMADD 64bit: dst = -z + (-x) * y\n"); ++ printf("%f = -%f - %f * %f\n", ddst, dz[i], dx[i], dy[i]); ++ print_double("dst", ddst); ++ ++ asm("fmsub %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); ++ printf("FMSUB 64bit: dst = z + (-x) * y\n"); ++ printf("%f = %f + (-%f) * %f\n", ddst, dz[i], dx[i], dy[i]); ++ print_double("dst", ddst); ++ ++ asm("fnmsub %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); ++ printf("FNMSUB 64bit: dst = -z + x * y\n"); ++ printf("%f = -%f + %f * %f\n", ddst, dz[i], dx[i], dy[i]); ++ print_double("dst", ddst); ++ ++ printf("\n"); ++ } ++ ++ return 0; ++} ++ +diff --git a/none/tests/arm64/fmadd_sub.stderr.exp b/none/tests/arm64/fmadd_sub.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/arm64/fmadd_sub.stdout.exp b/none/tests/arm64/fmadd_sub.stdout.exp +new file mode 100644 +index 000000000..f1824b12b +--- /dev/null ++++ b/none/tests/arm64/fmadd_sub.stdout.exp +@@ -0,0 +1,125 @@ ++FMADD 32bit: dst = z + x * y ++76.246193 = 38.123096 + 55.000000 * 0.693147 ++dst = 42987e0d = 76.246192932128906 ++FNMADD 32bit: dst = -z + (-x) * y ++-76.246193 = -38.123096 + (-55.000000) * 0.693147 ++dst = c2987e0d = -76.246192932128906 ++FMSUB 32bit: dst = z + (-x) * y ++0.000001 = 38.123096 + (-55.000000) * 0.693147 ++dst = 35c00000 = 1.430511474609375e-06 ++FNMSUB 32bit: dst = -z + x * y ++-0.000001 = -38.123096 + 55.000000 * 0.693147 ++dst = b5c00000 = -1.430511474609375e-06 ++FMADD 64bit: dst = z + x * y ++76.246190 = 38.123095 + 55.000000 * 0.693147 ++dst = 40530fc1931f09c9 = 76.246189861593976 ++FNMADD 64bit: dst = -z + (-x) * y ++-76.246190 = -38.123095 - 55.000000 * 0.693147 ++dst = c0530fc1931f09c9 = -76.246189861593976 ++FMSUB 64bit: dst = z + (-x) * y ++-0.000000 = 38.123095 + (-55.000000) * 0.693147 ++dst = bce9000000000000 = -2.7755575615628914e-15 ++FNMSUB 64bit: dst = -z + x * y ++0.000000 = -38.123095 + 55.000000 * 0.693147 ++dst = 3ce9000000000000 = 2.7755575615628914e-15 ++ ++FMADD 32bit: dst = z + x * y ++1.996086 = 1.000000 + 0.980762 * 1.015625 ++dst = 3fff7fc0 = 1.9960861206054688 ++FNMADD 32bit: dst = -z + (-x) * y ++-1.996086 = -1.000000 + (-0.980762) * 1.015625 ++dst = bfff7fc0 = -1.9960861206054688 ++FMSUB 32bit: dst = z + (-x) * y ++0.003914 = 1.000000 + (-0.980762) * 1.015625 ++dst = 3b80401a = 0.00391389150172472 ++FNMSUB 32bit: dst = -z + x * y ++-0.003914 = -1.000000 + 0.980762 * 1.015625 ++dst = bb80401a = -0.00391389150172472 ++FMADD 64bit: dst = z + x * y ++1.996086 = 1.000000 + 0.980762 * 1.015625 ++dst = 3fffeff800000000 = 1.9960861206054688 ++FNMADD 64bit: dst = -z + (-x) * y ++-1.996086 = -1.000000 - 0.980762 * 1.015625 ++dst = bfffeff800000000 = -1.9960861206054688 ++FMSUB 64bit: dst = z + (-x) * y ++0.003914 = 1.000000 + (-0.980762) * 1.015625 ++dst = 3f70080000000034 = 0.0039138793945312951 ++FNMSUB 64bit: dst = -z + x * y ++-0.003914 = -1.000000 + 0.980762 * 1.015625 ++dst = bf70080000000034 = -0.0039138793945312951 ++ ++FMADD 32bit: dst = z + x * y ++0.000000 = 0.000000 + 0.000000 * 0.000000 ++dst = 00000000 = 0 ++FNMADD 32bit: dst = -z + (-x) * y ++-0.000000 = -0.000000 + (-0.000000) * 0.000000 ++dst = 80000000 = -0 ++FMSUB 32bit: dst = z + (-x) * y ++0.000000 = 0.000000 + (-0.000000) * 0.000000 ++dst = 00000000 = 0 ++FNMSUB 32bit: dst = -z + x * y ++0.000000 = -0.000000 + 0.000000 * 0.000000 ++dst = 00000000 = 0 ++FMADD 64bit: dst = z + x * y ++0.000000 = 0.000000 + 0.000000 * 0.000000 ++dst = 0000000000000000 = 0 ++FNMADD 64bit: dst = -z + (-x) * y ++-0.000000 = -0.000000 - 0.000000 * 0.000000 ++dst = 8000000000000000 = -0 ++FMSUB 64bit: dst = z + (-x) * y ++0.000000 = 0.000000 + (-0.000000) * 0.000000 ++dst = 0000000000000000 = 0 ++FNMSUB 64bit: dst = -z + x * y ++0.000000 = -0.000000 + 0.000000 * 0.000000 ++dst = 0000000000000000 = 0 ++ ++FMADD 32bit: dst = z + x * y ++2.000000 = 1.000000 + 1.000000 * 1.000000 ++dst = 40000000 = 2 ++FNMADD 32bit: dst = -z + (-x) * y ++-2.000000 = -1.000000 + (-1.000000) * 1.000000 ++dst = c0000000 = -2 ++FMSUB 32bit: dst = z + (-x) * y ++0.000000 = 1.000000 + (-1.000000) * 1.000000 ++dst = 00000000 = 0 ++FNMSUB 32bit: dst = -z + x * y ++0.000000 = -1.000000 + 1.000000 * 1.000000 ++dst = 00000000 = 0 ++FMADD 64bit: dst = z + x * y ++2.000000 = 1.000000 + 1.000000 * 1.000000 ++dst = 4000000000000000 = 2 ++FNMADD 64bit: dst = -z + (-x) * y ++-2.000000 = -1.000000 - 1.000000 * 1.000000 ++dst = c000000000000000 = -2 ++FMSUB 64bit: dst = z + (-x) * y ++0.000000 = 1.000000 + (-1.000000) * 1.000000 ++dst = 0000000000000000 = 0 ++FNMSUB 64bit: dst = -z + x * y ++0.000000 = -1.000000 + 1.000000 * 1.000000 ++dst = 0000000000000000 = 0 ++ ++FMADD 32bit: dst = z + x * y ++18446744073709551616.000000 = 4294967296.000000 + 4294967296.000000 * 4294967296.000000 ++dst = 5f800000 = 1.8446744073709552e+19 ++FNMADD 32bit: dst = -z + (-x) * y ++-18446744073709551616.000000 = -4294967296.000000 + (-4294967296.000000) * 4294967296.000000 ++dst = df800000 = -1.8446744073709552e+19 ++FMSUB 32bit: dst = z + (-x) * y ++-18446744073709551616.000000 = 4294967296.000000 + (-4294967296.000000) * 4294967296.000000 ++dst = df800000 = -1.8446744073709552e+19 ++FNMSUB 32bit: dst = -z + x * y ++18446744073709551616.000000 = -4294967296.000000 + 4294967296.000000 * 4294967296.000000 ++dst = 5f800000 = 1.8446744073709552e+19 ++FMADD 64bit: dst = z + x * y ++18446744069414584320.000000 = 4294967295.000000 + 4294967295.000000 * 4294967295.000000 ++dst = 43efffffffe00000 = 1.8446744069414584e+19 ++FNMADD 64bit: dst = -z + (-x) * y ++-18446744069414584320.000000 = -4294967295.000000 - 4294967295.000000 * 4294967295.000000 ++dst = c3efffffffe00000 = -1.8446744069414584e+19 ++FMSUB 64bit: dst = z + (-x) * y ++-18446744060824649728.000000 = 4294967295.000000 + (-4294967295.000000) * 4294967295.000000 ++dst = c3efffffffa00000 = -1.844674406082465e+19 ++FNMSUB 64bit: dst = -z + x * y ++18446744060824649728.000000 = -4294967295.000000 + 4294967295.000000 * 4294967295.000000 ++dst = 43efffffffa00000 = 1.844674406082465e+19 ++ +diff --git a/none/tests/arm64/fmadd_sub.vgtest b/none/tests/arm64/fmadd_sub.vgtest +new file mode 100644 +index 000000000..b4c53eea4 +--- /dev/null ++++ b/none/tests/arm64/fmadd_sub.vgtest +@@ -0,0 +1,3 @@ ++prog: fmadd_sub ++prereq: test -x fmadd_sub ++vgopts: -q +-- +2.18.4 + diff --git a/valgrind.spec b/valgrind.spec index 151f270..93634cd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 9%{?dist} +Release: 10%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -126,6 +126,9 @@ Patch16: valgrind-3.16.1-s390x-z14-vector.patch # KDE#430354 ppc stxsibx and stxsihx instructions write too much data Patch17: valgrind-3.16.1-stxsibx-stxsihx.patch +# KDE#426014 arm64: implement fmadd and fmsub as Iop_MAdd/Sub +Patch18: valgrind-3.16.1-arm64-fma.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -271,6 +274,7 @@ Valgrind User Manual for details. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -495,6 +499,9 @@ fi %endif %changelog +* Tue Dec 15 2020 Mark Wielaard - 3.16.1-10 +- Add valgrind-3.16.1-arm64-fma.patch + * Sun Dec 13 2020 Mark Wielaard - 3.16.1-9 - Add valgrind-3.16.1-stxsibx-stxsihx.patch From 14c0a54d5fc9ccf3441bec9f6c8e8c837603c40a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 17 Dec 2020 12:57:21 +0100 Subject: [PATCH 026/196] 3.16.1-11 - Update valgrind-3.16.1-arm64-fma.patch --- valgrind-3.16.1-arm64-fma.patch | 13 +++++++++++++ valgrind.spec | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/valgrind-3.16.1-arm64-fma.patch b/valgrind-3.16.1-arm64-fma.patch index e00292f..c8ef17a 100644 --- a/valgrind-3.16.1-arm64-fma.patch +++ b/valgrind-3.16.1-arm64-fma.patch @@ -714,3 +714,16 @@ index 000000000..b4c53eea4 -- 2.18.4 +diff --git a/VEX/priv/guest_generic_bb_to_IR.c b/VEX/priv/guest_generic_bb_to_IR.c +index 0cee970e4..1e72ddacd 100644 +--- a/VEX/priv/guest_generic_bb_to_IR.c ++++ b/VEX/priv/guest_generic_bb_to_IR.c +@@ -422,6 +422,8 @@ static Bool expr_is_guardable ( const IRExpr* e ) + return !primopMightTrap(e->Iex.Binop.op); + case Iex_Triop: + return !primopMightTrap(e->Iex.Triop.details->op); ++ case Iex_Qop: ++ return !primopMightTrap(e->Iex.Qop.details->op); + case Iex_ITE: + case Iex_CCall: + case Iex_Get: diff --git a/valgrind.spec b/valgrind.spec index 93634cd..33673b3 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 10%{?dist} +Release: 11%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -127,6 +127,7 @@ Patch16: valgrind-3.16.1-s390x-z14-vector.patch Patch17: valgrind-3.16.1-stxsibx-stxsihx.patch # KDE#426014 arm64: implement fmadd and fmsub as Iop_MAdd/Sub +# KDE#430485 expr_is_guardable doesn't handle Iex_Qop Patch18: valgrind-3.16.1-arm64-fma.patch BuildRequires: glibc-devel @@ -499,6 +500,9 @@ fi %endif %changelog +* Thu Dec 17 2020 Mark Wielaard - 3.16.1-11 +- Update valgrind-3.16.1-arm64-fma.patch + * Tue Dec 15 2020 Mark Wielaard - 3.16.1-10 - Add valgrind-3.16.1-arm64-fma.patch From 099bdc8e64b0bf0b4a9005538151b9c359a61f48 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 20 Dec 2020 20:43:42 +0100 Subject: [PATCH 027/196] Add valgrind-3.16.1-ficlone.patch --- valgrind-3.16.1-ficlone.patch | 43 +++++++++++++++++++++++++++++++++++ valgrind.spec | 7 ++++++ 2 files changed, 50 insertions(+) create mode 100644 valgrind-3.16.1-ficlone.patch diff --git a/valgrind-3.16.1-ficlone.patch b/valgrind-3.16.1-ficlone.patch new file mode 100644 index 0000000..83b00a3 --- /dev/null +++ b/valgrind-3.16.1-ficlone.patch @@ -0,0 +1,43 @@ +commit 1c49351424f04ee29a5efc054cb08ab3ad22b978 +Author: Laurent Bonnans +Date: Fri Nov 16 15:22:18 2018 +0100 + + Fix 397605 - Add support for Linux FICLONE ioctl + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 41849873e..328e02a98 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -7961,6 +7961,11 @@ PRE(sys_ioctl) + case VKI_FIBMAP: + PRE_MEM_READ( "ioctl(FIBMAP)", ARG3, sizeof(int)); + break; ++ case VKI_FICLONE: ++ /* The direction of FICLONE (W) is incorrectly specified ++ * as it expects a file descriptor and not a pointer to ++ * user data */ ++ break; + + case VKI_FBIOGET_VSCREENINFO: /* 0x4600 */ + PRE_MEM_WRITE( "ioctl(FBIOGET_VSCREENINFO)", ARG3, +@@ -10898,6 +10903,8 @@ POST(sys_ioctl) + case VKI_FIBMAP: + POST_MEM_WRITE(ARG3, sizeof(int)); + break; ++ case VKI_FICLONE: ++ break; + + case VKI_FBIOGET_VSCREENINFO: //0x4600 + POST_MEM_WRITE(ARG3, sizeof(struct vki_fb_var_screeninfo)); +diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h +index ef93b9258..3b9dc3779 100644 +--- a/include/vki/vki-linux.h ++++ b/include/vki/vki-linux.h +@@ -1888,6 +1888,7 @@ struct vki_ppdev_frob_struct { + + #define VKI_FIBMAP _VKI_IO(0x00,1) /* bmap access */ + #define VKI_FIGETBSZ _VKI_IO(0x00,2) /* get the block size used for bmap */ ++#define VKI_FICLONE _VKI_IOW(0x94, 9, int) + + //---------------------------------------------------------------------- + // From linux-2.6.8.1/include/scsi/sg.h diff --git a/valgrind.spec b/valgrind.spec index 33673b3..db14efe 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -130,6 +130,9 @@ Patch17: valgrind-3.16.1-stxsibx-stxsihx.patch # KDE#430485 expr_is_guardable doesn't handle Iex_Qop Patch18: valgrind-3.16.1-arm64-fma.patch +# KDE#397605 Add support for Linux FICLONE ioctl +Patch19: valgrind-3.16.1-ficlone.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -276,6 +279,7 @@ Valgrind User Manual for details. %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -500,6 +504,9 @@ fi %endif %changelog +* Sun Dec 20 2020 Mark Wielaard +- Add valgrind-3.16.1-ficlone.patch + * Thu Dec 17 2020 Mark Wielaard - 3.16.1-11 - Update valgrind-3.16.1-arm64-fma.patch From d4756990d702dbd2ff1d68f1dfab82ccd114673c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 20 Dec 2020 21:41:07 +0100 Subject: [PATCH 028/196] 3.16.1-12 - Add valgrind-3.16.1-arm64-expensive-cmp.patch --- valgrind-3.16.1-arm64-expensive-cmp.patch | 19 +++++++++++++++++++ valgrind.spec | 10 ++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.16.1-arm64-expensive-cmp.patch diff --git a/valgrind-3.16.1-arm64-expensive-cmp.patch b/valgrind-3.16.1-arm64-expensive-cmp.patch new file mode 100644 index 0000000..b2f8b50 --- /dev/null +++ b/valgrind-3.16.1-arm64-expensive-cmp.patch @@ -0,0 +1,19 @@ +commit 359b98828ced9cfff8c1badfed75c7ef999cfee5 +Author: Julian Seward +Date: Sun Nov 15 18:28:09 2020 +0100 + + memcheck: on arm64, use expensive instrumentation for Cmp{EQ,NE}64 by default. + +diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c +index b32c9c9c5..e91d51094 100644 +--- a/memcheck/mc_translate.c ++++ b/memcheck/mc_translate.c +@@ -8485,6 +8485,8 @@ IRSB* MC_(instrument) ( VgCallbackClosure* closure, + # elif defined(VGA_ppc64le) + // Needed by (at least) set_AV_CR6() in the front end. + mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; ++# elif defined(VGA_arm64) ++ mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; + # endif + + /* preInstrumentationAnalysis() will allocate &mce.tmpHowUsed and then diff --git a/valgrind.spec b/valgrind.spec index db14efe..50ffe12 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 11%{?dist} +Release: 12%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -133,6 +133,10 @@ Patch18: valgrind-3.16.1-arm64-fma.patch # KDE#397605 Add support for Linux FICLONE ioctl Patch19: valgrind-3.16.1-ficlone.patch +# rhbz#1909415 valgrind makes false complaint about strcmp() on aarch64 +# upstream git commit 359b98828 +Patch20: valgrind-3.16.1-arm64-expensive-cmp.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -280,6 +284,7 @@ Valgrind User Manual for details. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -504,8 +509,9 @@ fi %endif %changelog -* Sun Dec 20 2020 Mark Wielaard +* Sun Dec 20 2020 Mark Wielaard - 3.16.1-12 - Add valgrind-3.16.1-ficlone.patch +- Add valgrind-3.16.1-arm64-expensive-cmp.patch * Thu Dec 17 2020 Mark Wielaard - 3.16.1-11 - Update valgrind-3.16.1-arm64-fma.patch From 66d2557fe5079f591d6a0d16de66acab6a152662 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 8 Jan 2021 16:45:50 +0100 Subject: [PATCH 029/196] 3.16.1-13 - Add valgrind-3.16.1-ppc64-scv-hwcap.patch --- valgrind-3.16.1-ppc64-scv-hwcap.patch | 57 +++++++++++++++++++++++++++ valgrind.spec | 9 ++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-ppc64-scv-hwcap.patch diff --git a/valgrind-3.16.1-ppc64-scv-hwcap.patch b/valgrind-3.16.1-ppc64-scv-hwcap.patch new file mode 100644 index 0000000..ef88bef --- /dev/null +++ b/valgrind-3.16.1-ppc64-scv-hwcap.patch @@ -0,0 +1,57 @@ +From a88c168b4dd607bca47d3a1ec08573d3e5fa889b Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Fri, 8 Jan 2021 15:08:50 +0100 +Subject: [PATCH] ppc64: Mask unrecognized AT_HWCAP2 values + +Also suppress printing a log message for scv instructions in the +instruction stream. + +These changes are required for running glibc 2.33 on kernels with scv +support under valgrind. +--- + VEX/priv/guest_ppc_toIR.c | 5 +++-- + coregrind/m_initimg/initimg-linux.c | 6 ++++++ + 2 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index e7b576fa2..99e96a577 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -8739,8 +8739,9 @@ + { + IRType ty = mode64 ? Ity_I64 : Ity_I32; + +- if (theInstr != 0x44000002) { +- vex_printf("dis_syslink(ppc)(theInstr)\n"); ++ if (theInstr != 0x44000002) { // sc ++ if (theInstr != 0x44000001) // scv ++ vex_printf("dis_syslink(ppc)(theInstr)\n"); + return False; + } + +diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c +index ba84fa6e9..fb68ae00b 100644 +--- a/coregrind/m_initimg/initimg-linux.c ++++ b/coregrind/m_initimg/initimg-linux.c +@@ -750,6 +750,7 @@ Addr setup_client_stack( void* init_sp, + PPC_FEATURE2_HAS_ISEL 0x08000000 + PPC_FEATURE2_HAS_TAR 0x04000000 + PPC_FEATURE2_HAS_VCRYPTO 0x02000000 ++ PPC_FEATURE2_HAS_IEEE128 0x00400000 + */ + auxv_2_07 = (auxv->u.a_val & 0x80000000ULL) == 0x80000000ULL; + hw_caps_2_07 = (vex_archinfo->hwcaps & VEX_HWCAPS_PPC64_ISA2_07) +@@ -757,6 +757,11 @@ + * matches the setting in VEX HWCAPS. + */ + vg_assert(auxv_2_07 == hw_caps_2_07); ++ ++ /* Mask unrecognized HWCAP bits. Only keep the bits that have ++ * been mentioned above. ++ */ ++ auxv->u.a_val &= 0xfec00000ULL; + } + + break; +--- valgrind-3.16.1/VEX/priv/guest_ppc_toIR.c 2021-01-08 16:43:45.947122866 +0100 ++++ guest_ppc_toIR.c.new 2021-01-08 16:43:40.238166866 +0100 diff --git a/valgrind.spec b/valgrind.spec index 50ffe12..20ed94f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 12%{?dist} +Release: 13%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -137,6 +137,9 @@ Patch19: valgrind-3.16.1-ficlone.patch # upstream git commit 359b98828 Patch20: valgrind-3.16.1-arm64-expensive-cmp.patch +# KDE#431157 PPC_FEATURE2_SCV needs to be masked in AT_HWCAP2 +Patch21: valgrind-3.16.1-ppc64-scv-hwcap.patch + BuildRequires: glibc-devel %if %{build_openmpi} @@ -285,6 +288,7 @@ Valgrind User Manual for details. %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -509,6 +513,9 @@ fi %endif %changelog +* Fri Jan 8 2021 Mark Wielaard - 3.16.1-13 +- Add valgrind-3.16.1-ppc64-scv-hwcap.patch + * Sun Dec 20 2020 Mark Wielaard - 3.16.1-12 - Add valgrind-3.16.1-ficlone.patch - Add valgrind-3.16.1-arm64-expensive-cmp.patch From 7a148b9ea32a6a6bca1483d2e155f637ab86cd50 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 12 Jan 2021 01:34:30 +0000 Subject: [PATCH 030/196] Add BuildRequires: make https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot --- valgrind.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/valgrind.spec b/valgrind.spec index 20ed94f..e850430 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -140,6 +140,7 @@ Patch20: valgrind-3.16.1-arm64-expensive-cmp.patch # KDE#431157 PPC_FEATURE2_SCV needs to be masked in AT_HWCAP2 Patch21: valgrind-3.16.1-ppc64-scv-hwcap.patch +BuildRequires: make BuildRequires: glibc-devel %if %{build_openmpi} From d18b4e034833d7f421b96dca5c41513e983a2f61 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 25 Jan 2021 17:04:41 +0100 Subject: [PATCH 031/196] 3.16.1-14 - Add valgrind-3.16.1-dwarf5.patch --- valgrind-3.16.1-dwarf5.patch | 2410 ++++++++++++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 2418 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-dwarf5.patch diff --git a/valgrind-3.16.1-dwarf5.patch b/valgrind-3.16.1-dwarf5.patch new file mode 100644 index 0000000..24388cb --- /dev/null +++ b/valgrind-3.16.1-dwarf5.patch @@ -0,0 +1,2410 @@ +From 256a67e6a5a07e37997d3a5ef64204a99b8e5a50 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Mon, 25 Jan 2021 15:33:34 +0100 +Subject: [PATCH] DWARF5 + +--- + coregrind/m_debuginfo/d3basics.c | 99 ++++ + coregrind/m_debuginfo/priv_d3basics.h | 195 +++++- + coregrind/m_debuginfo/priv_readdwarf.h | 3 +- + coregrind/m_debuginfo/priv_readdwarf3.h | 3 +- + coregrind/m_debuginfo/readdwarf.c | 465 ++++++++++++--- + coregrind/m_debuginfo/readdwarf3.c | 748 +++++++++++++++++++----- + coregrind/m_debuginfo/readelf.c | 33 +- + coregrind/m_debuginfo/readmacho.c | 14 +- + 8 files changed, 1304 insertions(+), 256 deletions(-) + +diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c +index b6d13c118..e1127ffe2 100644 +--- a/coregrind/m_debuginfo/d3basics.c ++++ b/coregrind/m_debuginfo/d3basics.c +@@ -128,6 +128,16 @@ const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ) + case DW_TAG_type_unit: return "DW_TAG_type_unit"; + case DW_TAG_rvalue_reference_type: return "DW_TAG_rvalue_reference_type"; + case DW_TAG_template_alias: return "DW_TAG_template_alias"; ++ /* DWARF 5. */ ++ case DW_TAG_coarray_type: return "DW_TAG_coarray_type"; ++ case DW_TAG_generic_subrange: return "DW_TAG_generic_subrange"; ++ case DW_TAG_dynamic_type: return "DW_TAG_dynamic_type"; ++ case DW_TAG_atomic_type: return "DW_TAG_atomic_type"; ++ case DW_TAG_call_site: return "DW_TAG_call_site"; ++ case DW_TAG_call_site_parameter: ++ return "DW_TAG_call_site_parameter"; ++ case DW_TAG_skeleton_unit: return "DW_TAG_skeleton_unit"; ++ case DW_TAG_immutable_type: return "DW_TAG_immutable_type"; + /* SGI/MIPS Extensions. */ + case DW_TAG_MIPS_loop: return "DW_TAG_MIPS_loop"; + /* HP extensions. See: +@@ -140,6 +150,16 @@ const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ) + case DW_TAG_class_template: return "DW_TAG_class_template"; + case DW_TAG_GNU_BINCL: return "DW_TAG_GNU_BINCL"; + case DW_TAG_GNU_EINCL: return "DW_TAG_GNU_EINCL"; ++ case DW_TAG_GNU_template_template_param: ++ return "DW_TAG_GNU_template_template_param"; ++ case DW_TAG_GNU_template_parameter_pack: ++ return"DW_TAG_GNU_template_parameter_pack"; ++ case DW_TAG_GNU_formal_parameter_pack: ++ return "DW_TAG_GNU_formal_parameter_pack"; ++ case DW_TAG_GNU_call_site: ++ return "DW_TAG_GNU_call_site"; ++ case DW_TAG_GNU_call_site_parameter: ++ return "DW_TAG_GNU_call_site_parameter"; + /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ + case DW_TAG_upc_shared_type: return "DW_TAG_upc_shared_type"; + case DW_TAG_upc_strict_type: return "DW_TAG_upc_strict_type"; +@@ -180,6 +200,27 @@ const HChar* ML_(pp_DW_FORM) ( DW_FORM form ) + case DW_FORM_exprloc: return "DW_FORM_exprloc"; + case DW_FORM_flag_present:return "DW_FORM_flag_present"; + case DW_FORM_ref_sig8: return "DW_FORM_ref_sig8"; ++ case DW_FORM_strx: return "DW_FORM_strx"; ++ case DW_FORM_addrx: return "DW_FORM_addrx"; ++ case DW_FORM_ref_sup4: return "DW_FORM_ref_sup4"; ++ case DW_FORM_strp_sup: return "DW_FORM_strp_sup"; ++ case DW_FORM_data16: return "DW_FORM_data16"; ++ case DW_FORM_line_strp: return "DW_FORM_line_strp"; ++ case DW_FORM_implicit_const:return "DW_FORM_implicit_const"; ++ case DW_FORM_loclistx: return "DW_FORM_loclistx"; ++ case DW_FORM_rnglistx: return "DW_FORM_rnglistx"; ++ case DW_FORM_ref_sup8: return "DW_FORM_ref_sup8"; ++ case DW_FORM_strx1: return "DW_FORM_strx1"; ++ case DW_FORM_strx2: return "DW_FORM_strx2"; ++ case DW_FORM_strx3: return "DW_FORM_strx3"; ++ case DW_FORM_strx4: return "DW_FORM_strx4"; ++ case DW_FORM_addrx1: return "DW_FORM_addrx1"; ++ case DW_FORM_addrx2: return "DW_FORM_addrx2"; ++ case DW_FORM_addrx3: return "DW_FORM_addrx3"; ++ case DW_FORM_addrx4: return "DW_FORM_addrx4"; ++ /* GNU Debug Fission extensions. */ ++ case DW_FORM_GNU_addr_index:return "DW_FORM_GNU_addr_index"; ++ case DW_FORM_GNU_str_index:return "DW_FORM_GNU_str_index"; + case DW_FORM_GNU_ref_alt:return "DW_FORM_GNU_ref_alt"; + case DW_FORM_GNU_strp_alt:return "DW_FORM_GNU_strp_alt"; + } +@@ -286,6 +327,36 @@ const HChar* ML_(pp_DW_AT) ( DW_AT attr ) + case DW_AT_const_expr: return "DW_AT_const_expr"; + case DW_AT_enum_class: return "DW_AT_enum_class"; + case DW_AT_linkage_name: return "DW_AT_linkage_name"; ++ /* DWARF 5 values. */ ++ case DW_AT_string_length_bit_size: return "DW_AT_string_length_bit_size"; ++ case DW_AT_string_length_byte_size: return "DW_AT_string_length_byte_size"; ++ case DW_AT_rank: return "DW_AT_rank"; ++ case DW_AT_str_offsets_base: return "DW_AT_str_offsets_base"; ++ case DW_AT_addr_base: return "DW_AT_addr_base"; ++ case DW_AT_rnglists_base: return "DW_AT_rnglists_base"; ++ case DW_AT_dwo_name: return "DW_AT_dwo_name"; ++ case DW_AT_reference: return "DW_AT_reference"; ++ case DW_AT_rvalue_reference: return "DW_AT_rvalue_reference"; ++ case DW_AT_macros: return "DW_AT_macros"; ++ case DW_AT_call_all_calls: return "DW_AT_call_all_calls"; ++ case DW_AT_call_all_source_calls: return "DW_AT_call_all_source_calls"; ++ case DW_AT_call_all_tail_calls: return "DW_AT_call_all_tail_calls"; ++ case DW_AT_call_return_pc: return "DW_AT_call_return_pc"; ++ case DW_AT_call_value: return "DW_AT_call_value"; ++ case DW_AT_call_origin: return "DW_AT_call_origin"; ++ case DW_AT_call_parameter: return "DW_AT_call_parameter"; ++ case DW_AT_call_pc: return "DW_AT_call_pc"; ++ case DW_AT_call_tail_call: return "DW_AT_call_tail_call"; ++ case DW_AT_call_target: return "DW_AT_call_target"; ++ case DW_AT_call_target_clobbered: return "DW_AT_call_target_clobbered"; ++ case DW_AT_call_data_location: return "DW_AT_call_data_location"; ++ case DW_AT_call_data_value: return "DW_AT_call_data_value"; ++ case DW_AT_noreturn: return "DW_AT_noreturn"; ++ case DW_AT_alignment: return "DW_AT_alignment"; ++ case DW_AT_export_symbols: return "DW_AT_export_symbols"; ++ case DW_AT_deleted: return "DW_AT_deleted"; ++ case DW_AT_defaulted: return "DW_AT_defaulted"; ++ case DW_AT_loclists_base: return "DW_AT_loclists_base"; + /* SGI/MIPS extensions. */ + /* case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; */ + /* DW_AT_MIPS_fde == DW_AT_HP_unmodifiable */ +@@ -322,8 +393,36 @@ const HChar* ML_(pp_DW_AT) ( DW_AT attr ) + case DW_AT_body_begin: return "DW_AT_body_begin"; + case DW_AT_body_end: return "DW_AT_body_end"; + case DW_AT_GNU_vector: return "DW_AT_GNU_vector"; ++ case DW_AT_GNU_guarded_by: return "DW_AT_GNU_guarded_by"; ++ case DW_AT_GNU_pt_guarded_by: return "DW_AT_GNU_pt_guarded_by"; ++ case DW_AT_GNU_guarded: return "DW_AT_GNU_guarded"; ++ case DW_AT_GNU_pt_guarded: return "DW_AT_GNU_pt_guarded"; ++ case DW_AT_GNU_locks_excluded: return "DW_AT_GNU_locks_excluded"; ++ case DW_AT_GNU_exclusive_locks_required: return "DW_AT_GNU_exclusive_locks_required"; ++ case DW_AT_GNU_shared_locks_required: return "DW_AT_GNU_shared_locks_required"; ++ case DW_AT_GNU_odr_signature: return "DW_AT_GNU_odr_signature"; ++ case DW_AT_GNU_template_name: return "DW_AT_GNU_template_name"; ++ case DW_AT_GNU_call_site_value: return "DW_AT_GNU_call_site_value"; ++ case DW_AT_GNU_call_site_data_value: return "DW_AT_GNU_call_site_data_value"; ++ case DW_AT_GNU_call_site_target: return "DW_AT_GNU_call_site_target"; ++ case DW_AT_GNU_call_site_target_clobbered: return "DW_AT_GNU_call_site_target_clobbered"; ++ case DW_AT_GNU_tail_call: return "DW_AT_GNU_tail_call"; + case DW_AT_GNU_all_tail_call_sites: return "DW_AT_GNU_all_tail_call_sites"; + case DW_AT_GNU_all_call_sites: return "DW_AT_GNU_all_call_sites"; ++ case DW_AT_GNU_all_source_call_sites: return "DW_AT_GNU_all_source_call_sites"; ++ case DW_AT_GNU_locviews: return "DW_AT_GNU_locviews"; ++ case DW_AT_GNU_entry_view: return "DW_AT_GNU_entry_view"; ++ case DW_AT_GNU_macros: return "DW_AT_GNU_macros"; ++ case DW_AT_GNU_deleted: return "DW_AT_GNU_deleted"; ++ case DW_AT_GNU_dwo_name: return "DW_AT_GNU_dwo_name"; ++ case DW_AT_GNU_dwo_id: return "DW_AT_GNU_dwo_id"; ++ case DW_AT_GNU_ranges_base: return "DW_AT_GNU_ranges_base"; ++ case DW_AT_GNU_addr_base: return "DW_AT_GNU_addr_base"; ++ case DW_AT_GNU_pubnames: return "DW_AT_GNU_pubnames"; ++ case DW_AT_GNU_pubtypes: return "DW_AT_GNU_pubtypes"; ++ case DW_AT_GNU_numerator: return "DW_AT_GNU_numerator"; ++ case DW_AT_GNU_denominator: return "DW_AT_GNU_denominator"; ++ case DW_AT_GNU_bias: return "DW_AT_GNU_bias"; + /* VMS extensions. */ + case DW_AT_VMS_rtnbeg_pd_address: return "DW_AT_VMS_rtnbeg_pd_address"; + /* UPC extension. */ +diff --git a/coregrind/m_debuginfo/priv_d3basics.h b/coregrind/m_debuginfo/priv_d3basics.h +index b60e3e8eb..9d825e39e 100644 +--- a/coregrind/m_debuginfo/priv_d3basics.h ++++ b/coregrind/m_debuginfo/priv_d3basics.h +@@ -108,6 +108,15 @@ typedef enum + DW_TAG_type_unit = 0x41, + DW_TAG_rvalue_reference_type = 0x42, + DW_TAG_template_alias = 0x43, ++ /* DWARF 5. */ ++ DW_TAG_coarray_type = 0x44, ++ DW_TAG_generic_subrange = 0x45, ++ DW_TAG_dynamic_type = 0x46, ++ DW_TAG_atomic_type = 0x47, ++ DW_TAG_call_site = 0x48, ++ DW_TAG_call_site_parameter = 0x49, ++ DW_TAG_skeleton_unit = 0x4a, ++ DW_TAG_immutable_type = 0x4b, + /* SGI/MIPS Extensions. */ + DW_TAG_MIPS_loop = 0x4081, + /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */ +@@ -118,6 +127,11 @@ typedef enum + DW_TAG_class_template = 0x4103, /* For C++. */ + DW_TAG_GNU_BINCL = 0x4104, + DW_TAG_GNU_EINCL = 0x4105, ++ DW_TAG_GNU_template_template_param = 0x4106, ++ DW_TAG_GNU_template_parameter_pack = 0x4107, ++ DW_TAG_GNU_formal_parameter_pack = 0x4108, ++ DW_TAG_GNU_call_site = 0x4109, ++ DW_TAG_GNU_call_site_parameter = 0x410a, + /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ + DW_TAG_upc_shared_type = 0x8765, + DW_TAG_upc_strict_type = 0x8766, +@@ -164,13 +178,23 @@ typedef enum dwarf_source_language + DW_LANG_D = 0x0013, + /* DWARF 4. */ + DW_LANG_Python = 0x0014, +- /* DWARF 5-pre. Only what GCC already outputs. */ ++ /* DWARF 5. */ + DW_LANG_Go = 0x0016, ++ DW_LANG_Modula3 = 0x0017, ++ DW_LANG_Haskell = 0x0018, ++ DW_LANG_C_plus_plus_03 = 0x0019, + DW_LANG_C_plus_plus_11 = 0x001a, ++ DW_LANG_OCaml = 0x001b, ++ DW_LANG_Rust = 0x001c, + DW_LANG_C11 = 0x001d, ++ DW_LANG_Swift = 0x001e, ++ DW_LANG_Julia = 0x001f, ++ DW_LANG_Dylan = 0x0020, + DW_LANG_C_plus_plus_14 = 0x0021, + DW_LANG_Fortran03 = 0x0022, + DW_LANG_Fortran08 = 0x0023, ++ DW_LANG_RenderScript = 0x0024, ++ DW_LANG_BLISS = 0x0025, + /* MIPS. */ + DW_LANG_Mips_Assembler = 0x8001, + /* UPC. */ +@@ -207,6 +231,28 @@ typedef enum + DW_FORM_exprloc = 0x18, + DW_FORM_flag_present = 0x19, + DW_FORM_ref_sig8 = 0x20, ++ /* DWARF 5 values. */ ++ DW_FORM_strx = 0x1a, ++ DW_FORM_addrx = 0x1b, ++ DW_FORM_ref_sup4 = 0x1c, ++ DW_FORM_strp_sup = 0x1d, ++ DW_FORM_data16 = 0x1e, ++ DW_FORM_line_strp = 0x1f, ++ DW_FORM_implicit_const = 0x21, ++ DW_FORM_loclistx = 0x22, ++ DW_FORM_rnglistx = 0x23, ++ DW_FORM_ref_sup8 = 0x24, ++ DW_FORM_strx1 = 0x25, ++ DW_FORM_strx2 = 0x26, ++ DW_FORM_strx3 = 0x27, ++ DW_FORM_strx4 = 0x28, ++ DW_FORM_addrx1 = 0x29, ++ DW_FORM_addrx2 = 0x2a, ++ DW_FORM_addrx3 = 0x2b, ++ DW_FORM_addrx4 = 0x2c, ++ /* GNU Debug Fission extensions. */ ++ DW_FORM_GNU_addr_index = 0x1f01, ++ DW_FORM_GNU_str_index = 0x1f02, + /* Extensions for DWZ multifile. + See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */ + DW_FORM_GNU_ref_alt = 0x1f20, +@@ -314,6 +360,36 @@ typedef enum + DW_AT_const_expr = 0x6c, + DW_AT_enum_class = 0x6d, + DW_AT_linkage_name = 0x6e, ++ DW_AT_string_length_bit_size = 0x6f, ++ DW_AT_string_length_byte_size = 0x70, ++ DW_AT_rank = 0x71, ++ DW_AT_str_offsets_base = 0x72, ++ DW_AT_addr_base = 0x73, ++ DW_AT_rnglists_base = 0x74, ++ /* 0x75 reserved. */ ++ DW_AT_dwo_name = 0x76, ++ DW_AT_reference = 0x77, ++ DW_AT_rvalue_reference = 0x78, ++ DW_AT_macros = 0x79, ++ DW_AT_call_all_calls = 0x7a, ++ DW_AT_call_all_source_calls = 0x7b, ++ DW_AT_call_all_tail_calls = 0x7c, ++ DW_AT_call_return_pc = 0x7d, ++ DW_AT_call_value = 0x7e, ++ DW_AT_call_origin = 0x7f, ++ DW_AT_call_parameter = 0x80, ++ DW_AT_call_pc = 0x81, ++ DW_AT_call_tail_call = 0x82, ++ DW_AT_call_target = 0x83, ++ DW_AT_call_target_clobbered = 0x84, ++ DW_AT_call_data_location = 0x85, ++ DW_AT_call_data_value = 0x86, ++ DW_AT_noreturn = 0x87, ++ DW_AT_alignment = 0x88, ++ DW_AT_export_symbols = 0x89, ++ DW_AT_deleted = 0x8a, ++ DW_AT_defaulted = 0x8b, ++ DW_AT_loclists_base = 0x8c, + /* SGI/MIPS extensions. */ + DW_AT_MIPS_fde = 0x2001, + DW_AT_MIPS_loop_begin = 0x2002, +@@ -349,8 +425,39 @@ typedef enum + DW_AT_body_begin = 0x2105, + DW_AT_body_end = 0x2106, + DW_AT_GNU_vector = 0x2107, ++ DW_AT_GNU_guarded_by = 0x2108, ++ DW_AT_GNU_pt_guarded_by = 0x2109, ++ DW_AT_GNU_guarded = 0x210a, ++ DW_AT_GNU_pt_guarded = 0x210b, ++ DW_AT_GNU_locks_excluded = 0x210c, ++ DW_AT_GNU_exclusive_locks_required = 0x210d, ++ DW_AT_GNU_shared_locks_required = 0x210e, ++ DW_AT_GNU_odr_signature = 0x210f, ++ DW_AT_GNU_template_name = 0x2110, ++ DW_AT_GNU_call_site_value = 0x2111, ++ DW_AT_GNU_call_site_data_value = 0x2112, ++ DW_AT_GNU_call_site_target = 0x2113, ++ DW_AT_GNU_call_site_target_clobbered = 0x2114, ++ DW_AT_GNU_tail_call = 0x2115, + DW_AT_GNU_all_tail_call_sites = 0x2116, + DW_AT_GNU_all_call_sites = 0x2117, ++ DW_AT_GNU_all_source_call_sites = 0x2118, ++ DW_AT_GNU_locviews = 0x2137, ++ DW_AT_GNU_entry_view = 0x2138, ++ DW_AT_GNU_macros = 0x2119, ++ DW_AT_GNU_deleted = 0x211a, ++ /* GNU Debug Fission extensions. */ ++ DW_AT_GNU_dwo_name = 0x2130, ++ DW_AT_GNU_dwo_id = 0x2131, ++ DW_AT_GNU_ranges_base = 0x2132, ++ DW_AT_GNU_addr_base = 0x2133, ++ DW_AT_GNU_pubnames = 0x2134, ++ DW_AT_GNU_pubtypes = 0x2135, ++ /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator */ ++ DW_AT_GNU_numerator = 0x2303, ++ DW_AT_GNU_denominator = 0x2304, ++ /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias */ ++ DW_AT_GNU_bias = 0x2305, + /* VMS extensions. */ + DW_AT_VMS_rtnbeg_pd_address = 0x2201, + /* UPC extension. */ +@@ -387,6 +494,9 @@ typedef enum + DW_ATE_decimal_float = 0xf, + /* DWARF 4. */ + DW_ATE_UTF = 0x10, ++ /* DWARF 5. */ ++ DW_ATE_UCS = 0x11, ++ DW_ATE_ASCII = 0x12, + /* HP extensions. */ + DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */ + DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */ +@@ -558,8 +668,35 @@ typedef enum + /* DWARF 4 extensions. */ + DW_OP_implicit_value = 0x9e, + DW_OP_stack_value = 0x9f, ++ /* DWARF 5 extensions. */ ++ DW_OP_implicit_pointer = 0xa0, ++ DW_OP_addrx = 0xa1, ++ DW_OP_constx = 0xa2, ++ DW_OP_entry_value = 0xa3, ++ DW_OP_const_type = 0xa4, ++ DW_OP_regval_type = 0xa5, ++ DW_OP_deref_type = 0xa6, ++ DW_OP_xderef_type = 0xa7, ++ DW_OP_convert = 0xa8, ++ DW_OP_reinterpret = 0xa9, + /* GNU extensions. */ + DW_OP_GNU_push_tls_address = 0xe0, ++ DW_OP_GNU_uninit = 0xf0, ++ DW_OP_GNU_encoded_addr = 0xf1, ++ DW_OP_GNU_implicit_pointer = 0xf2, ++ DW_OP_GNU_entry_value = 0xf3, ++ DW_OP_GNU_const_type = 0xf4, ++ DW_OP_GNU_regval_type = 0xf5, ++ DW_OP_GNU_deref_type = 0xf6, ++ DW_OP_GNU_convert = 0xf7, ++ DW_OP_GNU_reinterpret = 0xf9, ++ DW_OP_GNU_parameter_ref = 0xfa, ++ /* GNU Debug Fission extensions. */ ++ DW_OP_GNU_addr_index = 0xfb, ++ DW_OP_GNU_const_index = 0xfc, ++ /* The GNU variable value extension. ++ See http://dwarfstd.org/ShowIssue.php?issue=161109.2 . */ ++ DW_OP_GNU_variable_value = 0xfd, + /* HP extensions. */ + DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */ + DW_OP_HP_is_value = 0xe1, +@@ -571,6 +708,62 @@ typedef enum + } + DW_OP; + ++typedef enum ++ { ++ DW_UT_compile = 0x01, ++ DW_UT_type = 0x02, ++ DW_UT_partial = 0x03, ++ DW_UT_skeleton = 0x04, ++ DW_UT_split_compile = 0x05, ++ DW_UT_split_type = 0x06, ++ ++ DW_UT_lo_user = 0x80, ++ DW_UT_hi_user = 0xff ++ } ++ DW_UT; ++ ++typedef enum ++ { ++ DW_LNCT_path = 0x1, ++ DW_LNCT_directory_index = 0x2, ++ DW_LNCT_timestamp = 0x3, ++ DW_LNCT_size = 0x4, ++ DW_LNCT_MD5 = 0x5, ++ ++ DW_LNCT_lo_user = 0x2000, ++ DW_LNCT_hi_user = 0x3fff ++ } ++ DW_LNCT; ++ ++typedef enum ++ { ++ DW_RLE_end_of_list = 0x00, ++ DW_RLE_base_addressx = 0x01, ++ DW_RLE_startx_endx = 0x02, ++ DW_RLE_startx_length = 0x03, ++ DW_RLE_offset_pair = 0x04, ++ DW_RLE_base_address = 0x05, ++ DW_RLE_start_end = 0x06, ++ DW_RLE_start_length = 0x07 ++ } ++ DW_RLE; ++ ++typedef enum ++ { ++ DW_LLE_end_of_list = 0x00, ++ DW_LLE_base_addressx = 0x01, ++ DW_LLE_startx_endx = 0x02, ++ DW_LLE_startx_length = 0x03, ++ DW_LLE_offset_pair = 0x04, ++ DW_LLE_default_location = 0x05, ++ DW_LLE_base_address = 0x06, ++ DW_LLE_start_end = 0x07, ++ DW_LLE_start_length = 0x08, ++ ++ DW_LLE_GNU_view_pair = 0x09 ++ } ++ DW_LLE; ++ + const HChar* ML_(pp_DW_children) ( DW_children hashch ); + const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ); + const HChar* ML_(pp_DW_FORM) ( DW_FORM form ); +diff --git a/coregrind/m_debuginfo/priv_readdwarf.h b/coregrind/m_debuginfo/priv_readdwarf.h +index 1e3f24c2a..302266924 100644 +--- a/coregrind/m_debuginfo/priv_readdwarf.h ++++ b/coregrind/m_debuginfo/priv_readdwarf.h +@@ -50,7 +50,8 @@ void ML_(read_debuginfo_dwarf3) + DiSlice escn_debug_abbv, /* .debug_abbrev */ + DiSlice escn_debug_line, /* .debug_line */ + DiSlice escn_debug_str, /* .debug_str */ +- DiSlice escn_debug_str_alt ); /* .debug_str */ ++ DiSlice escn_debug_str_alt, /* .debug_str */ ++ DiSlice escn_debug_line_str );/* .debug_line_str */ + + /* -------------------- + DWARF1 reader +diff --git a/coregrind/m_debuginfo/priv_readdwarf3.h b/coregrind/m_debuginfo/priv_readdwarf3.h +index 1a5bd61c3..f6d1dd1ee 100644 +--- a/coregrind/m_debuginfo/priv_readdwarf3.h ++++ b/coregrind/m_debuginfo/priv_readdwarf3.h +@@ -45,9 +45,10 @@ ML_(new_dwarf3_reader) ( + DiSlice escn_debug_info, DiSlice escn_debug_types, + DiSlice escn_debug_abbv, DiSlice escn_debug_line, + DiSlice escn_debug_str, DiSlice escn_debug_ranges, ++ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, + DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, + DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, +- DiSlice escn_debug_str_alt ++ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str + ); + + #endif /* ndef __PRIV_READDWARF3_H */ +diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c +index 5701c504b..88d5d99f1 100644 +--- a/coregrind/m_debuginfo/readdwarf.c ++++ b/coregrind/m_debuginfo/readdwarf.c +@@ -322,6 +322,123 @@ void process_extended_line_op( struct _DebugInfo* di, + //////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////// + ++static ++HChar * get_line_str (struct _DebugInfo* di, const UnitInfo* ui, ++ DiCursor *data, const UInt form, ++ DiCursor debugstr_img, DiCursor debuglinestr_img) ++{ ++ HChar *str = NULL; ++ switch (form) { ++ case DW_FORM_string: ++ str = ML_(cur_step_strdup)(data, "di.gls.string"); ++ break; ++ case DW_FORM_strp: ++ if (!ui->dw64) ++ str = ML_(cur_read_strdup)(ML_(cur_plus)(debugstr_img, ++ ML_(cur_step_UInt)(data)), ++ "di.gls.strp.dw32"); ++ else ++ str = ML_(cur_read_strdup)(ML_(cur_plus)(debugstr_img, ++ ML_(cur_step_ULong)(data)), ++ "di.gls.strp.dw64"); ++ break; ++ case DW_FORM_line_strp: ++ if (!ui->dw64) ++ str = ML_(cur_read_strdup)(ML_(cur_plus)(debuglinestr_img, ++ ML_(cur_step_UInt)(data)), ++ "di.gls.line_strp.dw32"); ++ else ++ str = ML_(cur_read_strdup)(ML_(cur_plus)(debuglinestr_img, ++ ML_(cur_step_ULong)(data)), ++ "di.gls.line_strp.dw64"); ++ break; ++ default: ++ ML_(symerr)(di, True, ++ "Unknown path string FORM in .debug_line"); ++ break; ++ } ++ return str; ++} ++ ++static ++Int get_line_ndx (struct _DebugInfo* di, ++ DiCursor *data, const UInt form) ++{ ++ Int res = 0; ++ switch (form) { ++ case DW_FORM_data1: ++ res = ML_(cur_step_UChar)(data); ++ break; ++ case DW_FORM_data2: ++ res = ML_(cur_step_UShort)(data); ++ break; ++ case DW_FORM_udata: ++ res = step_leb128U(data); ++ break; ++ default: ++ ML_(symerr)(di, True, ++ "Unknown directory_index value FORM in .debug_line"); ++ break; ++ } ++ return res; ++} ++ ++static ++DiCursor skip_line_form (struct _DebugInfo* di, const UnitInfo* ui, ++ DiCursor d, const UInt form) ++{ ++ switch (form) { ++ case DW_FORM_block: { ++ ULong len = step_leb128U(&d); ++ d = ML_(cur_plus)(d, len); ++ break; ++ } ++ case DW_FORM_block1: ++ d = ML_(cur_plus)(d, ML_(cur_read_UChar)(d) + 1); ++ break; ++ case DW_FORM_block2: ++ d = ML_(cur_plus)(d, ML_(cur_read_UShort)(d) + 2); ++ break; ++ case DW_FORM_block4: ++ d = ML_(cur_plus)(d, ML_(cur_read_UInt)(d) + 4); ++ break; ++ case DW_FORM_flag: ++ case DW_FORM_data1: ++ d = ML_(cur_plus)(d, 1); ++ break; ++ case DW_FORM_data2: ++ d = ML_(cur_plus)(d, 2); ++ break; ++ case DW_FORM_data4: ++ d = ML_(cur_plus)(d, 4); ++ break; ++ case DW_FORM_data8: ++ d = ML_(cur_plus)(d, 8); ++ break; ++ case DW_FORM_data16: ++ d = ML_(cur_plus)(d, 16); ++ break; ++ case DW_FORM_string: ++ d = ML_(cur_plus)(d, ML_(cur_strlen)(d) + 1); ++ break; ++ case DW_FORM_strp: ++ case DW_FORM_line_strp: ++ case DW_FORM_sec_offset: ++ d = ML_(cur_plus)(d, ui->dw64 ? 8 : 4); ++ break; ++ case DW_FORM_udata: ++ (void)step_leb128U(&d); ++ break; ++ case DW_FORM_sdata: ++ (void)step_leb128S(&d); ++ break; ++ default: ++ ML_(symerr)(di, True, "Unknown FORM in .debug_line"); ++ break; ++ } ++ return d; ++} ++ + /* read a .debug_line section block for a compilation unit + * + * Input: - theBlock must point to the start of the block +@@ -335,7 +452,9 @@ static + void read_dwarf2_lineblock ( struct _DebugInfo* di, + const UnitInfo* ui, + DiCursor theBlock, /* IMAGE */ +- Int noLargerThan ) ++ Int noLargerThan, ++ DiCursor debugstr_img, ++ DiCursor debuglinestr_img) + { + Int i; + DebugLineInfo info; +@@ -348,6 +467,9 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + DiCursor external = theBlock; + DiCursor data = theBlock; + ++ UChar p_ndx = 0, d_ndx = 0; /* DWARF5 path and dir index. */ ++ UInt forms[256]; /* DWARF5 forms. */ ++ + /* fndn_ix_xa is an xarray of fndn_ix (indexes in di->fndnpool) which + are build from file names harvested from the DWARF2 + info. Entry [0] is the "null" pool index and is never referred to +@@ -372,17 +494,6 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + fndn_ix_xa = VG_(newXA) (ML_(dinfo_zalloc), "di.rd2l.2", ML_(dinfo_free), + sizeof(UInt) ); + +- /* DWARF2 starts numbering filename entries at 1, so we need to +- add a dummy zeroth entry to the table. */ +- fndn_ix = 0; // 0 is the "null" index in a fixed pool. +- VG_(addToXA) (fndn_ix_xa, &fndn_ix); +- +- if (ML_(cur_is_valid)(ui->compdir)) +- dirname = ML_(addStrFromCursor)(di, ui->compdir); +- else +- dirname = ML_(addStr)(di, ".", -1); +- VG_(addToXA) (dirname_xa, &dirname); +- + info.li_length = step_initial_length_field( &external, &is64 ); + if (di->ddump_line) + VG_(printf)(" Length: %llu\n", +@@ -402,13 +513,19 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + VG_(printf)(" DWARF Version: %d\n", + (Int)info.li_version); + +- if (info.li_version != 2 && info.li_version != 3 && info.li_version != 4) { ++ if (info.li_version != 2 && info.li_version != 3 && info.li_version != 4 ++ && info.li_version != 5) { + ML_(symerr)(di, True, +- "Only DWARF version 2, 3 and 4 line info " ++ "Only DWARF version 2, 3, 4 and 5 line info " + "is currently supported."); + goto out; + } + ++ if (info.li_version >= 5) { ++ /* UChar addr_size = */ ML_(cur_step_UChar)(&external); ++ /* UChar seg_size = */ ML_(cur_step_UChar)(&external); ++ } ++ + info.li_header_length = is64 ? ML_(cur_step_ULong)(&external) + : (ULong)(ML_(cur_step_UInt)(&external)); + if (di->ddump_line) +@@ -485,60 +602,141 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + /* skip over "standard_opcode_lengths" */ + data = ML_(cur_plus)(standard_opcodes, info.li_opcode_base - 1); + +- /* Read the contents of the Directory table. */ +- if (di->ddump_line) +- VG_(printf)(" The Directory Table%s\n", +- ML_(cur_read_UChar)(data) == 0 ? " is empty." : ":" ); +- +- while (ML_(cur_read_UChar)(data) != 0) { ++ if (ML_(cur_is_valid)(ui->compdir)) ++ dirname = ML_(addStrFromCursor)(di, ui->compdir); ++ else ++ dirname = ML_(addStr)(di, ".", -1); + +- HChar* data_str = ML_(cur_read_strdup)(data, "di.rd2l.1"); ++ if (info.li_version < 5) { ++ /* Read the contents of the Directory table. */ + if (di->ddump_line) +- VG_(printf)(" %s\n", data_str); +- +- /* If data[0] is '/', then 'data' is an absolute path and we +- don't mess with it. Otherwise, construct the +- path 'ui->compdir' ++ "/" ++ 'data'. */ +- +- if (data_str[0] != '/' +- /* not an absolute path */ +- && ML_(cur_is_valid)(ui->compdir) +- /* actually got something sensible for compdir */ +- && ML_(cur_strlen)(ui->compdir)) +- { +- HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, "di.rd2l.1b"); +- SizeT len = VG_(strlen)(compdir_str) + 1 + VG_(strlen)(data_str); +- HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); +- +- VG_(strcpy)(buf, compdir_str); +- VG_(strcat)(buf, "/"); +- VG_(strcat)(buf, data_str); +- +- dirname = ML_(addStr)(di, buf, len); +- VG_(addToXA) (dirname_xa, &dirname); +- if (0) VG_(printf)("rel path %s\n", buf); +- ML_(dinfo_free)(compdir_str); +- ML_(dinfo_free)(buf); +- } else { +- /* just use 'data'. */ +- dirname = ML_(addStr)(di,data_str,-1); +- VG_(addToXA) (dirname_xa, &dirname); +- if (0) VG_(printf)("abs path %s\n", data_str); ++ VG_(printf)("The Directory Table%s\n", ++ ML_(cur_read_UChar)(data) == 0 ? " is empty." : ":" ); ++ ++ /* DWARF2 starts numbering filename entries at 1, so we need to ++ add a dummy zeroth entry to the table. */ ++ fndn_ix = 0; // 0 is the "null" index in a fixed pool. ++ VG_(addToXA) (fndn_ix_xa, &fndn_ix); ++ VG_(addToXA) (dirname_xa, &dirname); ++ ++ while (ML_(cur_read_UChar)(data) != 0) { ++ ++ HChar* data_str = ML_(cur_read_strdup)(data, "di.rd2l.1"); ++ if (di->ddump_line) ++ VG_(printf)(" %s\n", data_str); ++ ++ /* If data[0] is '/', then 'data' is an absolute path and we ++ don't mess with it. Otherwise, construct the ++ path 'ui->compdir' ++ "/" ++ 'data'. */ ++ ++ if (data_str[0] != '/' ++ /* not an absolute path */ ++ && ML_(cur_is_valid)(ui->compdir) ++ /* actually got something sensible for compdir */ ++ && ML_(cur_strlen)(ui->compdir)) ++ { ++ HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, ++ "di.rd2l.1b"); ++ SizeT len = VG_(strlen)(compdir_str) + 1 + VG_(strlen)(data_str); ++ HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); ++ ++ VG_(strcpy)(buf, compdir_str); ++ VG_(strcat)(buf, "/"); ++ VG_(strcat)(buf, data_str); ++ ++ dirname = ML_(addStr)(di, buf, len); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("rel path %s\n", buf); ++ ML_(dinfo_free)(compdir_str); ++ ML_(dinfo_free)(buf); ++ } else { ++ /* just use 'data'. */ ++ dirname = ML_(addStr)(di,data_str,-1); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("abs path %s\n", data_str); ++ } ++ ++ data = ML_(cur_plus)(data, VG_(strlen)(data_str) + 1); ++ ML_(dinfo_free)(data_str); + } + +- data = ML_(cur_plus)(data, VG_(strlen)(data_str) + 1); +- ML_(dinfo_free)(data_str); +- } ++ if (di->ddump_line) ++ VG_(printf)("\n"); + +- if (di->ddump_line) +- VG_(printf)("\n"); ++ if (ML_(cur_read_UChar)(data) != 0) { ++ ML_(symerr)(di, True, ++ "can't find NUL at end of DWARF2 directory table"); ++ goto out; ++ } ++ data = ML_(cur_plus)(data, 1); ++ } else { ++ UInt directories_count; ++ UChar directory_entry_format_count = ML_(cur_step_UChar)(&data); ++ UInt n; ++ for (n = 0; n < directory_entry_format_count; n++) { ++ UInt lnct = step_leb128U(&data); ++ UInt form = step_leb128U(&data); ++ if (lnct == DW_LNCT_path) ++ p_ndx = n; ++ forms[n] = form; ++ } ++ directories_count = step_leb128U(&data); ++ /* Read the contents of the Directory table. */ ++ if (di->ddump_line) ++ VG_(printf)(" dwarf The Directory Table%s\n", ++ directories_count == 0 ? " is empty." : ":" ); ++ ++ for (n = 0; n < directories_count; n++) { ++ UInt f; ++ for (f = 0; f < directory_entry_format_count; f++) { ++ UInt form = forms[f]; ++ if (f == p_ndx) { ++ HChar *data_str = get_line_str (di, ui, &data, form, ++ debugstr_img, ++ debuglinestr_img); ++ if (di->ddump_line) ++ VG_(printf)(" %s\n", data_str); ++ ++ /* If data[0] is '/', then 'data' is an absolute path and we ++ don't mess with it. Otherwise, construct the ++ path 'ui->compdir' ++ "/" ++ 'data'. */ ++ ++ if (data_str[0] != '/' ++ /* not an absolute path */ ++ && ML_(cur_is_valid)(ui->compdir) ++ /* actually got something sensible for compdir */ ++ && ML_(cur_strlen)(ui->compdir)) ++ { ++ HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, ++ "di.rd2l.1b"); ++ SizeT len = VG_(strlen)(compdir_str) + 1 ++ + VG_(strlen)(data_str); ++ HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); ++ ++ VG_(strcpy)(buf, compdir_str); ++ VG_(strcat)(buf, "/"); ++ VG_(strcat)(buf, data_str); ++ ++ dirname = ML_(addStr)(di, buf, len); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("rel path %s\n", buf); ++ ML_(dinfo_free)(compdir_str); ++ ML_(dinfo_free)(buf); ++ } else { ++ /* just use 'data'. */ ++ dirname = ML_(addStr)(di,data_str,-1); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("abs path %s\n", data_str); ++ } + +- if (ML_(cur_read_UChar)(data) != 0) { +- ML_(symerr)(di, True, +- "can't find NUL at end of DWARF2 directory table"); +- goto out; ++ ML_(dinfo_free)(data_str); ++ ++ } else { ++ data = skip_line_form (di, ui, data, form); ++ } ++ } ++ } + } +- data = ML_(cur_plus)(data, 1); + + /* Read the contents of the File Name table. This produces a bunch + of fndn_ix in fndn_ix_xa. */ +@@ -547,33 +745,76 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + VG_(printf)(" Entry Dir Time Size Name\n"); + } + +- i = 1; +- while (ML_(cur_read_UChar)(data) != 0) { +- HChar* name = ML_(cur_step_strdup)(&data, "di.rd2l.2"); +- Int diridx = step_leb128U(&data); +- Int uu_time = step_leb128U(&data); /* unused */ +- Int uu_size = step_leb128U(&data); /* unused */ ++ if (info.li_version < 5) { ++ i = 1; ++ while (ML_(cur_read_UChar)(data) != 0) { ++ HChar* name = ML_(cur_step_strdup)(&data, "di.rd2l.2"); ++ Int diridx = step_leb128U(&data); ++ Int uu_time = step_leb128U(&data); /* unused */ ++ Int uu_size = step_leb128U(&data); /* unused */ ++ ++ dirname = safe_dirname_ix( dirname_xa, diridx ); ++ fndn_ix = ML_(addFnDn) (di, name, dirname); ++ VG_(addToXA) (fndn_ix_xa, &fndn_ix); ++ if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); ++ if (di->ddump_line) ++ VG_(printf)(" %d\t%d\t%d\t%d\t%s\n", ++ i, diridx, uu_time, uu_size, name); ++ i++; ++ ML_(dinfo_free)(name); ++ } + +- dirname = safe_dirname_ix( dirname_xa, diridx ); +- fndn_ix = ML_(addFnDn) (di, name, dirname); +- VG_(addToXA) (fndn_ix_xa, &fndn_ix); +- if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); + if (di->ddump_line) +- VG_(printf)(" %d\t%d\t%d\t%d\t%s\n", +- i, diridx, uu_time, uu_size, name); +- i++; +- ML_(dinfo_free)(name); +- } ++ VG_(printf)("\n"); + +- if (di->ddump_line) +- VG_(printf)("\n"); ++ if (ML_(cur_read_UChar)(data) != 0) { ++ ML_(symerr)(di, True, ++ "can't find NUL at end of DWARF2 file name table"); ++ goto out; ++ } ++ data = ML_(cur_plus)(data, 1); ++ } else { ++ UInt file_names_count; ++ UChar file_names_entry_format_count = ML_(cur_step_UChar)(&data); ++ UInt n; ++ for (n = 0; n < file_names_entry_format_count; n++) { ++ UInt lnct = step_leb128U(&data); ++ UInt form = step_leb128U(&data); ++ if (lnct == DW_LNCT_path) ++ p_ndx = n; ++ if (lnct == DW_LNCT_directory_index) ++ d_ndx = n; ++ forms[n] = form; ++ } ++ file_names_count = step_leb128U(&data); ++ for (n = 0; n < file_names_count; n++) { ++ UInt f; ++ HChar* name = NULL; ++ Int diridx = 0; ++ for (f = 0; f < file_names_entry_format_count; f++) { ++ UInt form = forms[f]; ++ if (f == p_ndx) ++ name = get_line_str (di, ui, &data, form, ++ debugstr_img, debuglinestr_img); ++ else if (n == d_ndx) ++ diridx = get_line_ndx (di, &data, form); ++ else ++ data = skip_line_form (di, ui, data, form); ++ } + +- if (ML_(cur_read_UChar)(data) != 0) { +- ML_(symerr)(di, True, +- "can't find NUL at end of DWARF2 file name table"); +- goto out; ++ dirname = safe_dirname_ix( dirname_xa, diridx ); ++ fndn_ix = ML_(addFnDn) (di, name, dirname); ++ VG_(addToXA) (fndn_ix_xa, &fndn_ix); ++ if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); ++ if (di->ddump_line) ++ VG_(printf)(" %u\t%d\t%d\t%d\t%s\n", ++ n, diridx, 0, 0, name); ++ ML_(dinfo_free)(name); ++ } ++ ++ if (di->ddump_line) ++ VG_(printf)("\n"); + } +- data = ML_(cur_plus)(data, 1); + + if (di->ddump_line) + VG_(printf)(" Line Number Statements:\n"); +@@ -772,9 +1013,12 @@ static DiCursor lookup_abbrev( DiCursor p, ULong acode ) + (void)step_leb128U(&p); /* skip tag */ + p = ML_(cur_plus)(p,1); /* skip has_children flag */ + ULong name; ++ ULong form; + do { + name = step_leb128U(&p); /* name */ +- (void)step_leb128U(&p); /* form */ ++ form = step_leb128U(&p); /* form */ ++ if (form == 0x21) /* DW_FORM_implicit_const */ ++ step_leb128S(&p); + } + while (name != 0); /* until name == form == 0 */ + } +@@ -804,13 +1048,14 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, + DiCursor unitblock_img, + DiCursor debugabbrev_img, + DiCursor debugstr_img, +- DiCursor debugstr_alt_img ) ++ DiCursor debugstr_alt_img, ++ DiCursor debuglinestr_img) + { + UInt acode, abcode; + ULong atoffs, blklen; + UShort ver; + +- UChar addr_size; ++ UChar addr_size = 0; + DiCursor p = unitblock_img; + DiCursor end_img; + DiCursor abbrev_img; +@@ -823,16 +1068,25 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, + /* This block length */ + blklen = step_initial_length_field( &p, &ui->dw64 ); + +- /* version should be 2, 3 or 4 */ ++ /* version should be 2, 3, 4 or 5 */ + ver = ML_(cur_step_UShort)(&p); + +- /* get offset in abbrev */ +- atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) +- : (ULong)(ML_(cur_step_UInt)(&p)); ++ if (ver >= 5) ++ /* unit_type for DWARF5 */ ++ /* unit_type = */ ML_(cur_step_UChar)(&p); ++ else ++ /* get offset in abbrev */ ++ atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) ++ : (ULong)(ML_(cur_step_UInt)(&p)); + + /* Address size */ + addr_size = ML_(cur_step_UChar)(&p); + ++ if (ver >= 5) ++ /* get offset in abbrev */ ++ atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) ++ : (ULong)(ML_(cur_step_UInt)(&p)); ++ + /* End of this block */ + end_img = ML_(cur_plus)(unitblock_img, blklen + (ui->dw64 ? 12 : 4)); + +@@ -909,6 +1163,17 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, + sval = ML_(cur_plus)(debugstr_img, ML_(cur_read_ULong)(p)); + p = ML_(cur_plus)(p, ui->dw64 ? 8 : 4); + break; ++ case 0x1f: /* FORM_line_strp */ /* pointer in .debug_line_str */ ++ /* 2006-01-01: only generate a value if a debug_str ++ section was found) */ ++ if (ML_(cur_is_valid)(debuglinestr_img) && !ui->dw64) ++ sval = ML_(cur_plus)(debuglinestr_img, ++ ML_(cur_read_UInt)(p)); ++ if (ML_(cur_is_valid)(debuglinestr_img) && ui->dw64) ++ sval = ML_(cur_plus)(debuglinestr_img, ++ ML_(cur_read_ULong)(p)); ++ p = ML_(cur_plus)(p, ui->dw64 ? 8 : 4); ++ break; + case 0x08: /* FORM_string */ + sval = p; + p = ML_(cur_plus)(p, ML_(cur_strlen)(p) + 1); +@@ -928,7 +1193,13 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, + p = ML_(cur_plus)(p, 8); + /* perhaps should assign unconditionally to cval? */ + break; ++ case 0x21: /* FORM_implicit_const */ ++ cval = step_leb128S (&abbrev_img); ++ break; + /* TODO : Following ones just skip data - implement if you need */ ++ case 0x1e: /* FORM_data16 */ ++ p = ML_(cur_plus)(p, 16); ++ break; + case 0x01: /* FORM_addr */ + p = ML_(cur_plus)(p, addr_size); + break; +@@ -1028,7 +1299,8 @@ void ML_(read_debuginfo_dwarf3) + DiSlice escn_debug_abbv, /* .debug_abbrev */ + DiSlice escn_debug_line, /* .debug_line */ + DiSlice escn_debug_str, /* .debug_str */ +- DiSlice escn_debug_str_alt ) /* .debug_str */ ++ DiSlice escn_debug_str_alt, /* .debug_str */ ++ DiSlice escn_debug_line_str) /* .debug_line_str */ + { + UnitInfo ui; + UShort ver; +@@ -1067,9 +1339,9 @@ void ML_(read_debuginfo_dwarf3) + + /* version should be 2 */ + ver = ML_(cur_read_UShort)( ML_(cur_plus)(block_img, blklen_len) ); +- if ( ver != 2 && ver != 3 && ver != 4 ) { ++ if ( ver != 2 && ver != 3 && ver != 4 && ver != 5) { + ML_(symerr)( di, True, +- "Ignoring non-Dwarf2/3/4 block in .debug_info" ); ++ "Ignoring non-Dwarf2/3/4/5 block in .debug_info" ); + continue; + } + +@@ -1082,7 +1354,8 @@ void ML_(read_debuginfo_dwarf3) + read_unitinfo_dwarf2( &ui, block_img, + ML_(cur_from_sli)(escn_debug_abbv), + ML_(cur_from_sli)(escn_debug_str), +- ML_(cur_from_sli)(escn_debug_str_alt) ); ++ ML_(cur_from_sli)(escn_debug_str_alt), ++ ML_(cur_from_sli)(escn_debug_line_str)); + if (0) { + HChar* str_name = ML_(cur_read_strdup)(ui.name, "di.rdd3.1"); + HChar* str_compdir = ML_(cur_read_strdup)(ui.compdir, "di.rdd3.2"); +@@ -1107,7 +1380,9 @@ void ML_(read_debuginfo_dwarf3) + read_dwarf2_lineblock( + di, &ui, + ML_(cur_plus)(ML_(cur_from_sli)(escn_debug_line), ui.stmt_list), +- escn_debug_line.szB - ui.stmt_list ++ escn_debug_line.szB - ui.stmt_list, ++ ML_(cur_from_sli)(escn_debug_str), ++ ML_(cur_from_sli)(escn_debug_line_str) + ); + } + } +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index c4d529bc6..82bc8f241 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -384,6 +384,7 @@ typedef + struct _name_form { + ULong at_name; // Dwarf Attribute name + ULong at_form; // Dwarf Attribute form ++ Long at_val; // Dwarf Attribute value (for implicit_const) + UInt skip_szB; // Nr of bytes skippable from here ... + UInt next_nf; // ... to reach this attr/form index in the g_abbv.nf + } name_form; +@@ -423,7 +424,7 @@ typedef + void (*barf)( const HChar* ) __attribute__((noreturn)); + /* Is this 64-bit DWARF ? */ + Bool is_dw64; +- /* Which DWARF version ? (2, 3 or 4) */ ++ /* Which DWARF version ? (2, 3, 4 or 5) */ + UShort version; + /* Length of this Compilation Unit, as stated in the + .unit_length :: InitialLength field of the CU Header. +@@ -452,12 +453,15 @@ typedef + /* Image information for various sections. */ + DiSlice escn_debug_str; + DiSlice escn_debug_ranges; ++ DiSlice escn_debug_rnglists; ++ DiSlice escn_debug_loclists; + DiSlice escn_debug_loc; + DiSlice escn_debug_line; + DiSlice escn_debug_info; + DiSlice escn_debug_types; + DiSlice escn_debug_info_alt; + DiSlice escn_debug_str_alt; ++ DiSlice escn_debug_line_str; + /* How much to add to .debug_types resp. alternate .debug_info offsets + in cook_die*. */ + UWord types_cuOff_bias; +@@ -651,25 +655,35 @@ static GExpr* make_singleton_GX ( DiCursor block, ULong nbytes ) + __attribute__((noinline)) + static GExpr* make_general_GX ( const CUConst* cc, + Bool td3, +- ULong debug_loc_offset, ++ ULong offset, + Addr svma_of_referencing_CU ) + { ++ Bool done; + Addr base; + Cursor loc; + XArray* xa; /* XArray of UChar */ + GExpr* gx; + Word nbytes; ++ Bool addBase = cc->version < 5; + + vg_assert(sizeof(UWord) == sizeof(Addr)); +- if (!ML_(sli_is_valid)(cc->escn_debug_loc) || cc->escn_debug_loc.szB == 0) ++ if (cc->version < 5 && (!ML_(sli_is_valid)(cc->escn_debug_loc) ++ || cc->escn_debug_loc.szB == 0)) + cc->barf("make_general_GX: .debug_loc is empty/missing"); ++ if (cc->version >= 5 && (!ML_(sli_is_valid)(cc->escn_debug_loclists) ++ || cc->escn_debug_loclists.szB == 0)) ++ cc->barf("make_general_GX: .debug_loclists is empty/missing"); + +- init_Cursor( &loc, cc->escn_debug_loc, 0, cc->barf, +- "Overrun whilst reading .debug_loc section(2)" ); +- set_position_of_Cursor( &loc, debug_loc_offset ); ++ if (cc->version < 5) ++ init_Cursor( &loc, cc->escn_debug_loc, 0, cc->barf, ++ "Overrun whilst reading .debug_loc section(2)" ); ++ else ++ init_Cursor( &loc, cc->escn_debug_loclists, 0, cc->barf, ++ "Overrun whilst reading .debug_loclists section(2)" ); ++ set_position_of_Cursor( &loc, offset ); + +- TRACE_D3("make_general_GX (.debug_loc_offset = %llu, ioff = %llu) {\n", +- debug_loc_offset, get_DiCursor_from_Cursor(&loc).ioff ); ++ TRACE_D3("make_general_GX (offset = %llu, ioff = %llu) {\n", ++ offset, get_DiCursor_from_Cursor(&loc).ioff ); + + /* Who frees this xa? It is freed before this fn exits. */ + xa = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.mgGX.1", +@@ -679,40 +693,86 @@ static GExpr* make_general_GX ( const CUConst* cc, + { UChar c = 1; /*biasMe*/ VG_(addBytesToXA)( xa, &c, sizeof(c) ); } + + base = 0; +- while (True) { ++ done = False; ++ while (!done) { + Bool acquire; + UWord len; +- /* Read a (host-)word pair. This is something of a hack since +- the word size to read is really dictated by the ELF file; +- however, we assume we're reading a file with the same +- word-sizeness as the host. Reasonably enough. */ +- UWord w1 = get_UWord( &loc ); +- UWord w2 = get_UWord( &loc ); +- +- TRACE_D3(" %08lx %08lx\n", w1, w2); +- if (w1 == 0 && w2 == 0) +- break; /* end of list */ +- +- if (w1 == -1UL) { +- /* new value for 'base' */ +- base = w2; +- continue; ++ UWord w1; ++ UWord w2; ++ if (cc->version < 5) { ++ /* Read a (host-)word pair. This is something of a hack since ++ the word size to read is really dictated by the ELF file; ++ however, we assume we're reading a file with the same ++ word-sizeness as the host. Reasonably enough. */ ++ w1 = get_UWord( &loc ); ++ w2 = get_UWord( &loc ); ++ ++ TRACE_D3(" %08lx %08lx\n", w1, w2); ++ if (w1 == 0 && w2 == 0) { ++ done = True; ++ break; /* end of list */ ++ } ++ ++ if (w1 == -1UL) { ++ /* new value for 'base' */ ++ base = w2; ++ continue; ++ } ++ /* else a location expression follows */ ++ len = (UWord)get_UShort( &loc ); ++ } else { ++ w1 = 0; ++ w2 = 0; ++ len = 0; ++ DW_LLE r = get_UChar( &loc ); ++ switch (r) { ++ case DW_LLE_end_of_list: ++ done = True; ++ break; ++ case DW_LLE_base_address: ++ base = get_UWord( &loc ); ++ break; ++ case DW_LLE_start_length: ++ w1 = get_UWord( &loc ); ++ w2 = w1 + get_ULEB128( &loc ); ++ len = get_ULEB128( &loc ); ++ break; ++ case DW_LLE_offset_pair: ++ w1 = base + get_ULEB128( &loc ); ++ w2 = base + get_ULEB128( &loc ); ++ len = get_ULEB128( &loc ); ++ break; ++ case DW_LLE_start_end: ++ w1 = get_UWord ( &loc ); ++ w2 = get_UWord ( &loc ); ++ len = get_ULEB128( &loc ); ++ break; ++ case DW_LLE_GNU_view_pair: ++ get_ULEB128( &loc ); ++ get_ULEB128( &loc ); ++ break; ++ case DW_LLE_base_addressx: ++ case DW_LLE_startx_endx: ++ case DW_LLE_startx_length: ++ case DW_LLE_default_location: ++ default: ++ cc->barf( "Unhandled or unknown loclists entry" ); ++ done = True; ++ } + } + +- /* else a location expression follows */ + /* else enumerate [w1+base, w2+base) */ + /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" + (sec 2.17.2) */ + if (w1 > w2) { + TRACE_D3("negative range is for .debug_loc expr at " + "file offset %llu\n", +- debug_loc_offset); ++ offset); + cc->barf( "negative range in .debug_loc section" ); + } + + /* ignore zero length ranges */ + acquire = w1 < w2; +- len = (UWord)get_UShort( &loc ); + + if (acquire) { + UWord w; +@@ -720,9 +780,9 @@ static GExpr* make_general_GX ( const CUConst* cc, + UChar c; + c = 0; /* !isEnd*/ + VG_(addBytesToXA)( xa, &c, sizeof(c) ); +- w = w1 + base + svma_of_referencing_CU; ++ w = w1 + (addBase ? base : 0) + svma_of_referencing_CU; + VG_(addBytesToXA)( xa, &w, sizeof(w) ); +- w = w2 -1 + base + svma_of_referencing_CU; ++ w = w2 -1 + (addBase ? base : 0) + svma_of_referencing_CU; + VG_(addBytesToXA)( xa, &w, sizeof(w) ); + s = (UShort)len; + VG_(addBytesToXA)( xa, &s, sizeof(s) ); +@@ -839,45 +899,96 @@ get_range_list ( const CUConst* cc, + XArray* xa; /* XArray of AddrRange */ + AddrRange pair; + +- if (!ML_(sli_is_valid)(cc->escn_debug_ranges) +- || cc->escn_debug_ranges.szB == 0) ++ if (cc->version < 5 && (!ML_(sli_is_valid)(cc->escn_debug_ranges) ++ || cc->escn_debug_ranges.szB == 0)) + cc->barf("get_range_list: .debug_ranges is empty/missing"); ++ if (cc->version >= 5 && (!ML_(sli_is_valid)(cc->escn_debug_rnglists) ++ || cc->escn_debug_rnglists.szB == 0)) ++ cc->barf("get_range_list: .debug_rnglists is empty/missing"); ++ ++ if (cc->version < 5) ++ init_Cursor( &ranges, cc->escn_debug_ranges, 0, cc->barf, ++ "Overrun whilst reading .debug_ranges section(2)" ); ++ else ++ init_Cursor( &ranges, cc->escn_debug_rnglists, 0, cc->barf, ++ "Overrun whilst reading .debug_rnglists section(2)" ); + +- init_Cursor( &ranges, cc->escn_debug_ranges, 0, cc->barf, +- "Overrun whilst reading .debug_ranges section(2)" ); + set_position_of_Cursor( &ranges, debug_ranges_offset ); + + /* Who frees this xa? varstack_preen() does. */ + xa = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.grl.1", ML_(dinfo_free), + sizeof(AddrRange) ); + base = 0; +- while (True) { +- /* Read a (host-)word pair. This is something of a hack since +- the word size to read is really dictated by the ELF file; +- however, we assume we're reading a file with the same +- word-sizeness as the host. Reasonably enough. */ +- UWord w1 = get_UWord( &ranges ); +- UWord w2 = get_UWord( &ranges ); +- +- if (w1 == 0 && w2 == 0) +- break; /* end of list. */ +- +- if (w1 == -1UL) { +- /* new value for 'base' */ +- base = w2; +- continue; +- } ++ if (cc->version < 5) { ++ while (True) { ++ /* Read a (host-)word pair. This is something of a hack since ++ the word size to read is really dictated by the ELF file; ++ however, we assume we're reading a file with the same ++ word-sizeness as the host. Reasonably enough. */ ++ UWord w1 = get_UWord( &ranges ); ++ UWord w2 = get_UWord( &ranges ); + +- /* else enumerate [w1+base, w2+base) */ +- /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" +- (sec 2.17.2) */ +- if (w1 > w2) +- cc->barf( "negative range in .debug_ranges section" ); +- if (w1 < w2) { +- pair.aMin = w1 + base + svma_of_referencing_CU; +- pair.aMax = w2 - 1 + base + svma_of_referencing_CU; +- vg_assert(pair.aMin <= pair.aMax); +- VG_(addToXA)( xa, &pair ); ++ if (w1 == 0 && w2 == 0) ++ break; /* end of list. */ ++ ++ if (w1 == -1UL) { ++ /* new value for 'base' */ ++ base = w2; ++ continue; ++ } ++ ++ /* else enumerate [w1+base, w2+base) */ ++ /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" ++ (sec 2.17.2) */ ++ if (w1 > w2) ++ cc->barf( "negative range in .debug_ranges section" ); ++ if (w1 < w2) { ++ pair.aMin = w1 + base + svma_of_referencing_CU; ++ pair.aMax = w2 - 1 + base + svma_of_referencing_CU; ++ vg_assert(pair.aMin <= pair.aMax); ++ VG_(addToXA)( xa, &pair ); ++ } ++ } ++ } else { ++ Bool done = False; ++ while (!done) { ++ UWord w1 = 0; ++ UWord w2 = 0; ++ DW_RLE r = get_UChar( &ranges ); ++ switch (r) { ++ case DW_RLE_end_of_list: ++ done = True; ++ break; ++ case DW_RLE_base_address: ++ base = get_UWord( &ranges ); ++ break; ++ case DW_RLE_start_length: ++ w1 = get_UWord( &ranges ); ++ w2 = w1 + get_ULEB128( &ranges ); ++ break; ++ case DW_RLE_offset_pair: ++ w1 = base + get_ULEB128( &ranges ); ++ w2 = base + get_ULEB128( &ranges ); ++ break; ++ case DW_RLE_start_end: ++ w1 = get_UWord ( &ranges ); ++ w2 = get_UWord ( &ranges ); ++ break; ++ case DW_RLE_base_addressx: ++ case DW_RLE_startx_endx: ++ case DW_RLE_startx_length: ++ default: ++ cc->barf( "Unhandled or unknown range list entry" ); ++ done = True; ++ } ++ if (w1 > w2) ++ cc->barf( "negative range in .debug_rnglists section" ); ++ if (w1 < w2) { ++ pair.aMin = w1 + svma_of_referencing_CU; ++ pair.aMax = w2 - 1 + svma_of_referencing_CU; ++ vg_assert(pair.aMin <= pair.aMax); ++ VG_(addToXA)( xa, &pair ); ++ } + } + } + return xa; +@@ -930,6 +1041,8 @@ static void init_ht_abbvs (CUConst* cc, + } + ta->nf[ta_nf_n].at_name = get_ULEB128( &c ); + ta->nf[ta_nf_n].at_form = get_ULEB128( &c ); ++ if (ta->nf[ta_nf_n].at_form == DW_FORM_implicit_const) ++ ta->nf[ta_nf_n].at_val = get_SLEB128( &c ); + if (ta->nf[ta_nf_n].at_name == 0 && ta->nf[ta_nf_n].at_form == 0) { + ta_nf_n++; + break; +@@ -1005,7 +1118,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + Bool type_unit, + Bool alt_info ) + { +- UChar address_size; ++ UChar address_size, unit_type; + ULong debug_abbrev_offset; + + VG_(memset)(cc, 0, sizeof(*cc)); +@@ -1021,10 +1134,21 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + + /* version */ + cc->version = get_UShort( c ); +- if (cc->version != 2 && cc->version != 3 && cc->version != 4) +- cc->barf( "parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4" ); ++ if (cc->version != 2 && cc->version != 3 && cc->version != 4 ++ && cc->version != 5) ++ cc->barf( "parse_CU_Header: " ++ "is neither DWARF2 nor DWARF3 nor DWARF4 nor DWARF5" ); + TRACE_D3(" Version: %d\n", (Int)cc->version ); + ++ /* unit type */ ++ if (cc->version >= 5) { ++ unit_type = get_UChar( c ); ++ address_size = get_UChar( c ); ++ } else { ++ unit_type = type_unit ? DW_UT_type : DW_UT_compile; ++ address_size = 0; /* Will be read later. */ ++ } ++ + /* debug_abbrev_offset */ + debug_abbrev_offset = get_Dwarfish_UWord( c, cc->is_dw64 ); + if (debug_abbrev_offset >= escn_debug_abbv.szB) +@@ -1035,7 +1159,9 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + give up. This makes it safe to assume elsewhere that + DW_FORM_addr and DW_FORM_ref_addr can be treated as a host + word. */ +- address_size = get_UChar( c ); ++ if (cc->version < 5) ++ address_size = get_UChar( c ); ++ + if (address_size != sizeof(void*)) + cc->barf( "parse_CU_Header: invalid address_size" ); + TRACE_D3(" Pointer Size: %d\n", (Int)address_size ); +@@ -1043,7 +1169,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + cc->is_type_unit = type_unit; + cc->is_alt_info = alt_info; + +- if (type_unit) { ++ if (type_unit || (cc->version >= 5 && unit_type == DW_UT_type)) { + cc->type_signature = get_ULong( c ); + cc->type_offset = get_Dwarfish_UWord( c, cc->is_dw64 ); + } +@@ -1130,8 +1256,9 @@ typedef + static + void get_Form_contents ( /*OUT*/FormContents* cts, + const CUConst* cc, Cursor* c, +- Bool td3, DW_FORM form ) ++ Bool td3, const name_form *abbv ) + { ++ DW_FORM form = abbv->at_form; + VG_(bzero_inline)(cts, sizeof(*cts)); + // !!! keep switch in sync with get_Form_szB. The nr of characters read below + // must be computed similarly in get_Form_szB. +@@ -1157,6 +1284,19 @@ void get_Form_contents ( /*OUT*/FormContents* cts, + cts->szB = 8; + TRACE_D3("%llu", cts->u.val); + break; ++ case DW_FORM_data16: { ++ /* This is more like a block than an integral value. */ ++ ULong u64b; ++ DiCursor data16 = get_DiCursor_from_Cursor(c); ++ TRACE_D3("data16: "); ++ for (u64b = 16; u64b > 0; u64b--) { ++ UChar u8 = get_UChar(c); ++ TRACE_D3("%x ", (UInt)u8); ++ } ++ cts->u.cur = data16; ++ cts->szB = - (Long)16; ++ break; ++ } + case DW_FORM_sec_offset: + cts->u.val = (ULong)get_Dwarfish_UWord( c, cc->is_dw64 ); + cts->szB = cc->is_dw64 ? 8 : 4; +@@ -1242,6 +1382,26 @@ void get_Form_contents ( /*OUT*/FormContents* cts, + cts->szB = - (Long)(1 + (ULong)ML_(cur_strlen)(str)); + break; + } ++ case DW_FORM_line_strp: { ++ /* this is an offset into .debug_line_str */ ++ UWord uw = (UWord)get_Dwarfish_UWord( c, cc->is_dw64 ); ++ if (!ML_(sli_is_valid)(cc->escn_debug_line_str) ++ || uw >= cc->escn_debug_line_str.szB) ++ cc->barf("get_Form_contents: DW_FORM_line_strp " ++ "points outside .debug_line_str"); ++ /* FIXME: check the entire string lies inside debug_line_str, ++ not just the first byte of it. */ ++ DiCursor line_str ++ = ML_(cur_plus)( ML_(cur_from_sli)(cc->escn_debug_line_str), uw ); ++ if (TD3) { ++ HChar* tmp = ML_(cur_read_strdup)(line_str, "di.getFC.1.5"); ++ TRACE_D3("(indirect line string, offset: 0x%lx): %s", uw, tmp); ++ ML_(dinfo_free)(tmp); ++ } ++ cts->u.cur = line_str; ++ cts->szB = - (Long)(1 + (ULong)ML_(cur_strlen)(line_str)); ++ break; ++ } + case DW_FORM_string: { + DiCursor str = get_AsciiZ(c); + if (TD3) { +@@ -1307,6 +1467,11 @@ void get_Form_contents ( /*OUT*/FormContents* cts, + cts->u.val = 1; + cts->szB = 1; + break; ++ case DW_FORM_implicit_const: ++ cts->u.val = (ULong)abbv->at_val; ++ cts->szB = 8; ++ TRACE_D3("%llu", cts->u.val); ++ break; + case DW_FORM_block1: { + ULong u64b; + ULong u64 = (ULong)get_UChar(c); +@@ -1396,9 +1561,14 @@ void get_Form_contents ( /*OUT*/FormContents* cts, + cts->szB = sizeof(UWord); + break; + } +- case DW_FORM_indirect: +- get_Form_contents (cts, cc, c, td3, (DW_FORM)get_ULEB128(c)); ++ case DW_FORM_indirect: { ++ /* Urgh, this is ugly and somewhat unclear how it works ++ with DW_FORM_implicit_const. HACK. */ ++ name_form nfi = *abbv; ++ nfi.at_form = (DW_FORM)get_ULEB128(c); ++ get_Form_contents (cts, cc, c, td3, &nfi); + return; ++ } + + case DW_FORM_GNU_ref_alt: + cts->u.val = get_Dwarfish_UWord(c, cc->is_dw64); +@@ -1471,6 +1641,7 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) + case DW_FORM_data2: return 2; + case DW_FORM_data4: return 4; + case DW_FORM_data8: return 8; ++ case DW_FORM_data16: return 16; + case DW_FORM_sec_offset: + if (cc->is_dw64) + return 8; +@@ -1488,6 +1659,7 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) + else + return sizeof_Dwarfish_UWord (cc->is_dw64); + case DW_FORM_strp: ++ case DW_FORM_line_strp: + return sizeof_Dwarfish_UWord (cc->is_dw64); + case DW_FORM_string: + return VARSZ_FORM; +@@ -1522,6 +1694,8 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) + return sizeof_Dwarfish_UWord(cc->is_dw64); + case DW_FORM_GNU_strp_alt: + return sizeof_Dwarfish_UWord(cc->is_dw64); ++ case DW_FORM_implicit_const: ++ return 0; /* Value inside abbrev. */ + default: + VG_(printf)( + "get_Form_szB: unhandled %u (%s)\n", +@@ -1544,13 +1718,13 @@ void skip_DIE (UWord *sibling, + while (True) { + if (abbv->nf[nf_i].at_name == DW_AT_sibling) { + get_Form_contents( &cts, cc, c_die, False /*td3*/, +- (DW_FORM)abbv->nf[nf_i].at_form ); ++ &abbv->nf[nf_i] ); + if ( cts.szB > 0 ) + *sibling = cts.u.val; + nf_i++; + } else if (abbv->nf[nf_i].skip_szB == VARSZ_FORM) { + get_Form_contents( &cts, cc, c_die, False /*td3*/, +- (DW_FORM)abbv->nf[nf_i].at_form ); ++ &abbv->nf[nf_i] ); + nf_i++; + } else { + advance_position_of_Cursor (c_die, (ULong)abbv->nf[nf_i].skip_szB); +@@ -1778,6 +1952,124 @@ static GExpr* get_GX ( const CUConst* cc, Bool td3, const FormContents* cts ) + return gexpr; + } + ++static ++HChar * get_line_str (struct _DebugInfo* di, Bool is_dw64, ++ Cursor *data, const UInt form, ++ DiSlice debugstr_img, DiSlice debuglinestr_img) ++{ ++ HChar *str = NULL; ++ switch (form) { ++ case DW_FORM_string: { ++ DiCursor distr = get_AsciiZ(data); ++ str = ML_(cur_step_strdup)(&distr, "di.gls.string"); ++ break; ++ } ++ case DW_FORM_strp: { ++ UWord uw = (UWord)get_Dwarfish_UWord( data, is_dw64 ); ++ DiCursor distr ++ = ML_(cur_plus)( ML_(cur_from_sli)(debugstr_img), uw ); ++ str = ML_(cur_read_strdup)(distr, "di.gls.strp"); ++ break; ++ } ++ case DW_FORM_line_strp: { ++ UWord uw = (UWord)get_Dwarfish_UWord( data, is_dw64 ); ++ DiCursor distr ++ = ML_(cur_plus)( ML_(cur_from_sli)(debuglinestr_img), uw ); ++ str = ML_(cur_read_strdup)(distr, "di.gls.line_strp"); ++ break; ++ } ++ default: ++ ML_(symerr)(di, True, ++ "Unknown path string FORM in .debug_line"); ++ break; ++ } ++ return str; ++} ++ ++static ++Int get_line_ndx (struct _DebugInfo* di, ++ Cursor *data, const UInt form) ++{ ++ Int res = 0; ++ switch (form) { ++ case DW_FORM_data1: ++ res = get_UChar(data); ++ break; ++ case DW_FORM_data2: ++ res = get_UShort(data); ++ break; ++ case DW_FORM_udata: ++ res = get_ULEB128(data); ++ break; ++ default: ++ ML_(symerr)(di, True, ++ "Unknown directory_index value FORM in .debug_line"); ++ break; ++ } ++ return res; ++} ++ ++static ++void skip_line_form (struct _DebugInfo* di, Bool is_dw64, ++ Cursor *d, const UInt form) ++{ ++ switch (form) { ++ case DW_FORM_block: { ++ ULong len = get_ULEB128(d); ++ advance_position_of_Cursor (d, len); ++ break; ++ } ++ case DW_FORM_block1: { ++ UChar len = get_UChar(d); ++ advance_position_of_Cursor (d, len); ++ break; ++ } ++ case DW_FORM_block2: { ++ UShort len = get_UShort(d); ++ advance_position_of_Cursor (d, len); ++ break; ++ } ++ case DW_FORM_block4: { ++ UInt len = get_UInt(d); ++ advance_position_of_Cursor (d, len); ++ break; ++ } ++ case DW_FORM_flag: ++ case DW_FORM_data1: ++ advance_position_of_Cursor (d, 1); ++ break; ++ case DW_FORM_data2: ++ advance_position_of_Cursor (d, 2); ++ break; ++ case DW_FORM_data4: ++ advance_position_of_Cursor (d, 4); ++ break; ++ case DW_FORM_data8: ++ advance_position_of_Cursor (d, 8); ++ break; ++ case DW_FORM_data16: ++ advance_position_of_Cursor (d, 16); ++ break; ++ case DW_FORM_string: ++ (void)get_AsciiZ (d); ++ break; ++ case DW_FORM_strp: ++ case DW_FORM_line_strp: ++ case DW_FORM_sec_offset: ++ advance_position_of_Cursor (d, is_dw64 ? 8 : 4); ++ break; ++ case DW_FORM_udata: ++ (void)get_ULEB128(d); ++ break; ++ case DW_FORM_sdata: ++ (void)get_SLEB128(d); ++ break; ++ default: ++ ML_(symerr)(di, True, "Unknown FORM in .debug_line"); ++ break; ++ } ++} ++ + /* Returns an xarray* of directory names (indexed by the dwarf dirname + integer). + If 'compdir' is NULL, entry [0] will be set to "." +@@ -1786,8 +2078,8 @@ static GExpr* get_GX ( const CUConst* cc, Bool td3, const FormContents* cts ) + whatever that means, according to the DWARF3 spec. + FIXME??? readdwarf3.c/readdwarf.c have a lot of duplicated code */ + static +-XArray* read_dirname_xa (DebugInfo* di, const HChar *compdir, +- Cursor *c, ++XArray* read_dirname_xa (DebugInfo* di, UShort version, const HChar *compdir, ++ Cursor *c, const CUConst *cc, + Bool td3 ) + { + XArray* dirname_xa; /* xarray of HChar* dirname */ +@@ -1804,51 +2096,121 @@ XArray* read_dirname_xa (DebugInfo* di, const HChar *compdir, + dirname = compdir; + compdir_len = VG_(strlen)(compdir); + } +- VG_(addToXA) (dirname_xa, &dirname); +- +- TRACE_D3(" The Directory Table%s\n", +- peek_UChar(c) == 0 ? " is empty." : ":" ); +- +- while (peek_UChar(c) != 0) { +- +- DiCursor cur = get_AsciiZ(c); +- HChar* data_str = ML_(cur_read_strdup)( cur, "dirname_xa.1" ); +- TRACE_D3(" %s\n", data_str); +- +- /* If data_str[0] is '/', then 'data' is an absolute path and we +- don't mess with it. Otherwise, construct the +- path 'compdir' ++ "/" ++ 'data'. */ +- +- if (data_str[0] != '/' +- /* not an absolute path */ +- && compdir +- /* actually got something sensible for compdir */ +- && compdir_len) +- { +- SizeT len = compdir_len + 1 + VG_(strlen)(data_str); +- HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); +- +- VG_(strcpy)(buf, compdir); +- VG_(strcat)(buf, "/"); +- VG_(strcat)(buf, data_str); +- +- dirname = ML_(addStr)(di, buf, len); +- VG_(addToXA) (dirname_xa, &dirname); +- if (0) VG_(printf)("rel path %s\n", buf); +- ML_(dinfo_free)(buf); +- } else { +- /* just use 'data'. */ +- dirname = ML_(addStr)(di,data_str,-1); +- VG_(addToXA) (dirname_xa, &dirname); +- if (0) VG_(printf)("abs path %s\n", data_str); ++ ++ /* For version 5, the compdir is the first (zero) entry. */ ++ if (version < 5) ++ VG_(addToXA) (dirname_xa, &dirname); ++ ++ if (version < 5) { ++ TRACE_D3("The Directory Table%s\n", ++ peek_UChar(c) == 0 ? " is empty." : ":" ); ++ ++ while (peek_UChar(c) != 0) { ++ ++ DiCursor cur = get_AsciiZ(c); ++ HChar* data_str = ML_(cur_read_strdup)( cur, "dirname_xa.1" ); ++ TRACE_D3(" %s\n", data_str); ++ ++ /* If data_str[0] is '/', then 'data' is an absolute path and we ++ don't mess with it. Otherwise, construct the ++ path 'compdir' ++ "/" ++ 'data'. */ ++ ++ if (data_str[0] != '/' ++ /* not an absolute path */ ++ && compdir ++ /* actually got something sensible for compdir */ ++ && compdir_len) ++ { ++ SizeT len = compdir_len + 1 + VG_(strlen)(data_str); ++ HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); ++ ++ VG_(strcpy)(buf, compdir); ++ VG_(strcat)(buf, "/"); ++ VG_(strcat)(buf, data_str); ++ ++ dirname = ML_(addStr)(di, buf, len); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("rel path %s\n", buf); ++ ML_(dinfo_free)(buf); ++ } else { ++ /* just use 'data'. */ ++ dirname = ML_(addStr)(di,data_str,-1); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("abs path %s\n", data_str); ++ } ++ ++ ML_(dinfo_free)(data_str); ++ } ++ } else { ++ UChar forms[256]; ++ UChar p_ndx = 0; ++ UInt directories_count; ++ UChar directory_entry_format_count; ++ UInt n; ++ DiSlice debugstr_img = cc->escn_debug_str; ++ DiSlice debuglinestr_img = cc->escn_debug_line_str; ++ ++ directory_entry_format_count = get_UChar(c); ++ for (n = 0; n < directory_entry_format_count; n++) { ++ UInt lnct = get_ULEB128(c); ++ UInt form = get_ULEB128(c); ++ if (lnct == DW_LNCT_path) ++ p_ndx = n; ++ forms[n] = form; + } ++ directories_count = get_ULEB128(c); ++ TRACE_D3("The Directory Table%s\n", ++ directories_count == 0 ? " is empty." : ":" ); ++ ++ for (n = 0; n < directories_count; n++) { ++ UInt f; ++ for (f = 0; f < directory_entry_format_count; f++) { ++ UInt form = forms[f]; ++ if (f == p_ndx) { ++ HChar *data_str = get_line_str (di, cc->is_dw64, c, form, ++ debugstr_img, ++ debuglinestr_img); ++ TRACE_D3(" %s\n", data_str); ++ ++ /* If data_str[0] is '/', then 'data' is an absolute path and we ++ don't mess with it. Otherwise, construct the ++ path 'compdir' ++ "/" ++ 'data'. */ ++ ++ if (data_str[0] != '/' ++ /* not an absolute path */ ++ && compdir ++ /* actually got something sensible for compdir */ ++ && compdir_len) ++ { ++ SizeT len = compdir_len + 1 + VG_(strlen)(data_str); ++ HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); ++ ++ VG_(strcpy)(buf, compdir); ++ VG_(strcat)(buf, "/"); ++ VG_(strcat)(buf, data_str); ++ ++ dirname = ML_(addStr)(di, buf, len); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("rel path %s\n", buf); ++ ML_(dinfo_free)(buf); ++ } else { ++ /* just use 'data'. */ ++ dirname = ML_(addStr)(di,data_str,-1); ++ VG_(addToXA) (dirname_xa, &dirname); ++ if (0) VG_(printf)("abs path %s\n", data_str); ++ } + +- ML_(dinfo_free)(data_str); ++ ML_(dinfo_free)(data_str); ++ } else { ++ skip_line_form (di, cc->is_dw64, c, form); ++ } ++ } ++ } + } + + TRACE_D3 ("\n"); + +- if (get_UChar (c) != 0) { ++ if (version < 5 && get_UChar (c) != 0) { + ML_(symerr)(NULL, True, + "could not get NUL at end of DWARF directory table"); + VG_(deleteXA)(dirname_xa); +@@ -1888,9 +2250,13 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, + get_Initial_Length( &is_dw64, &c, + "read_filename_table: invalid initial-length field" ); + version = get_UShort( &c ); +- if (version != 2 && version != 3 && version != 4) +- cc->barf("read_filename_table: Only DWARF version 2, 3 and 4 line info " +- "is currently supported."); ++ if (version != 2 && version != 3 && version != 4 && version != 5) ++ cc->barf("read_filename_table: Only DWARF version 2, 3, 4 and 5 " ++ "line info is currently supported."); ++ if (version >= 5) { ++ /* addrs_size = */ get_UChar( &c ); ++ /* seg_size = */ get_UChar( &c ); ++ } + /*header_length = (ULong)*/ get_Dwarfish_UWord( &c, is_dw64 ); + /*minimum_instruction_length = */ get_UChar( &c ); + if (version >= 4) +@@ -1903,30 +2269,77 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, + for (i = 1; i < (Word)opcode_base; i++) + (void)get_UChar( &c ); + +- dirname_xa = read_dirname_xa(cc->di, compdir, &c, td3); ++ dirname_xa = read_dirname_xa(cc->di, version, compdir, &c, cc, td3); + + /* Read and record the file names table */ + vg_assert( VG_(sizeXA)( fndn_ix_Table ) == 0 ); +- /* Add a dummy index-zero entry. DWARF3 numbers its files +- from 1, for some reason. */ +- fndn_ix = ML_(addFnDn) ( cc->di, "", NULL ); +- VG_(addToXA)( fndn_ix_Table, &fndn_ix ); +- while (peek_UChar(&c) != 0) { +- DiCursor cur = get_AsciiZ(&c); +- str = ML_(addStrFromCursor)( cc->di, cur ); +- dir_xa_ix = get_ULEB128( &c ); +- if (dirname_xa != NULL +- && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) +- dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); +- else +- dirname = NULL; +- fndn_ix = ML_(addFnDn)( cc->di, str, dirname); +- TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", +- VG_(sizeXA)(fndn_ix_Table), fndn_ix, +- dirname, str); ++ if (version < 5) { ++ /* Add a dummy index-zero entry. DWARF3 numbers its files ++ from 1, for some reason. */ ++ fndn_ix = ML_(addFnDn) ( cc->di, "", NULL ); + VG_(addToXA)( fndn_ix_Table, &fndn_ix ); +- (void)get_ULEB128( &c ); /* skip last mod time */ +- (void)get_ULEB128( &c ); /* file size */ ++ while (peek_UChar(&c) != 0) { ++ DiCursor cur = get_AsciiZ(&c); ++ str = ML_(addStrFromCursor)( cc->di, cur ); ++ dir_xa_ix = get_ULEB128( &c ); ++ if (dirname_xa != NULL ++ && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) ++ dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); ++ else ++ dirname = NULL; ++ fndn_ix = ML_(addFnDn)( cc->di, str, dirname); ++ TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", ++ VG_(sizeXA)(fndn_ix_Table), fndn_ix, ++ dirname, str); ++ VG_(addToXA)( fndn_ix_Table, &fndn_ix ); ++ (void)get_ULEB128( &c ); /* skip last mod time */ ++ (void)get_ULEB128( &c ); /* file size */ ++ } ++ } else { ++ UChar forms[256]; ++ UChar p_ndx = 0, d_ndx = 0; ++ UInt file_names_count; ++ UChar file_names_entry_format_count; ++ UInt n; ++ DiSlice debugstr_img = cc->escn_debug_str; ++ DiSlice debuglinestr_img = cc->escn_debug_line_str; ++ file_names_entry_format_count = get_UChar( &c ); ++ for (n = 0; n < file_names_entry_format_count; n++) { ++ UInt lnct = get_ULEB128( &c ); ++ UInt form = get_ULEB128( &c ); ++ if (lnct == DW_LNCT_path) ++ p_ndx = n; ++ if (lnct == DW_LNCT_directory_index) ++ d_ndx = n; ++ forms[n] = form; ++ } ++ file_names_count = get_ULEB128( &c ); ++ for (n = 0; n < file_names_count; n++) { ++ UInt f; ++ dir_xa_ix = 0; ++ str = NULL; ++ for (f = 0; f < file_names_entry_format_count; f++) { ++ UInt form = forms[f]; ++ if (f == p_ndx) ++ str = get_line_str (cc->di, cc->is_dw64, &c, form, ++ debugstr_img, debuglinestr_img); ++ else if (n == d_ndx) ++ dir_xa_ix = get_line_ndx (cc->di, &c, form); ++ else ++ skip_line_form (cc->di, cc->is_dw64, &c, form); ++ } ++ ++ if (dirname_xa != NULL ++ && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) ++ dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); ++ else ++ dirname = NULL; ++ fndn_ix = ML_(addFnDn)( cc->di, str, dirname); ++ TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", ++ VG_(sizeXA)(fndn_ix_Table), fndn_ix, ++ dirname, str); ++ VG_(addToXA)( fndn_ix_Table, &fndn_ix ); ++ } + } + /* We're done! The rest of it is not interesting. */ + if (dirname_xa != NULL) +@@ -2011,11 +2424,12 @@ static void trace_DIE( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; + VG_(printf)(" %-18s: ", ML_(pp_DW_AT)(attr)); + /* Get the form contents, so as to print them */ +- get_Form_contents( &cts, cc, &c, True, form ); ++ get_Form_contents( &cts, cc, &c, True, nf ); + if (attr == DW_AT_sibling && cts.szB > 0) { + sibling = cts.u.val; + } +@@ -2094,9 +2508,10 @@ static void parse_var_DIE ( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_low_pc && cts.szB > 0) { + ip_lo = cts.u.val; + have_lo = True; +@@ -2196,9 +2611,10 @@ static void parse_var_DIE ( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_low_pc && cts.szB > 0) { + ip_lo = cts.u.val; + have_lo = True; +@@ -2282,9 +2698,10 @@ static void parse_var_DIE ( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + n_attrs++; + if (attr == DW_AT_name && cts.szB < 0) { + name = ML_(addStrFromCursor)( cc->di, cts.u.cur ); +@@ -2646,9 +3063,10 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, &c, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, &c, False/*td3*/, nf ); + if (attr == DW_AT_name) { + HChar *fnname; + if (cts.szB >= 0) +@@ -2720,9 +3138,10 @@ static Bool parse_inl_DIE ( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_low_pc && cts.szB > 0) { + ip_lo = cts.u.val; + have_lo = True; +@@ -2764,9 +3183,10 @@ static Bool parse_inl_DIE ( + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_call_file && cts.szB > 0) { + Int ftabIx = (Int)cts.u.val; + if (ftabIx >= 1 +@@ -3090,9 +3510,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr != DW_AT_language) + continue; + if (cts.szB <= 0) +@@ -3132,9 +3553,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + typeE.Te.TyBase.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3243,9 +3665,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_byte_size && cts.szB > 0) { + typeE.Te.TyPorR.szB = cts.u.val; + } +@@ -3275,9 +3698,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + typeE.Te.TyEnum.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3356,9 +3780,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + atomE.Te.Atom.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3411,9 +3836,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + typeE.Te.TyStOrUn.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3498,9 +3924,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + fieldE.Te.Field.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3585,9 +4012,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_type && cts.szB > 0) { + typeE.Te.TyArray.typeR + = cook_die_using_form( cc, (UWord)cts.u.val, form ); +@@ -3626,9 +4054,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_lower_bound && cts.szB > 0 + && form_expected_for_bound (form)) { + lower = (Long)cts.u.val; +@@ -3714,9 +4143,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_name && cts.szB < 0) { + typeE.Te.TyTyDef.name + = ML_(cur_read_strdup)( cts.u.cur, +@@ -3764,9 +4194,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + while (True) { + DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; + DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; ++ const name_form *nf = &abbv->nf[nf_i]; + nf_i++; + if (attr == 0 && form == 0) break; +- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); ++ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); + if (attr == DW_AT_type && cts.szB > 0) { + typeE.Te.TyQual.typeR + = cook_die_using_form( cc, (UWord)cts.u.val, form ); +@@ -4486,6 +4917,9 @@ static void trace_debug_abbrev (const DebugInfo* di, + while (True) { + ULong at_name = get_ULEB128( &abbv ); + ULong at_form = get_ULEB128( &abbv ); ++ if (at_form == DW_FORM_implicit_const) { ++ /* Long at_val = */ get_SLEB128 ( &abbv ); ++ } + if (at_name == 0 && at_form == 0) break; + TRACE_D3(" %-18s %s\n", + ML_(pp_DW_AT)(at_name), ML_(pp_DW_FORM)(at_form)); +@@ -4502,9 +4936,10 @@ void new_dwarf3_reader_wrk ( + DiSlice escn_debug_info, DiSlice escn_debug_types, + DiSlice escn_debug_abbv, DiSlice escn_debug_line, + DiSlice escn_debug_str, DiSlice escn_debug_ranges, ++ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, + DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, + DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, +- DiSlice escn_debug_str_alt ++ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str + ) + { + XArray* /* of TyEnt */ tyents = NULL; +@@ -4738,6 +5173,8 @@ void new_dwarf3_reader_wrk ( + cc.escn_debug_str = pass == 0 ? escn_debug_str_alt + : escn_debug_str; + cc.escn_debug_ranges = escn_debug_ranges; ++ cc.escn_debug_rnglists = escn_debug_rnglists; ++ cc.escn_debug_loclists = escn_debug_loclists; + cc.escn_debug_loc = escn_debug_loc; + cc.escn_debug_line = pass == 0 ? escn_debug_line_alt + : escn_debug_line; +@@ -4746,6 +5183,7 @@ void new_dwarf3_reader_wrk ( + cc.escn_debug_types = escn_debug_types; + cc.escn_debug_info_alt = escn_debug_info_alt; + cc.escn_debug_str_alt = escn_debug_str_alt; ++ cc.escn_debug_line_str = escn_debug_line_str; + cc.types_cuOff_bias = escn_debug_info.szB; + cc.alt_cuOff_bias = escn_debug_info.szB + escn_debug_types.szB; + cc.cu_start_offset = cu_start_offset; +@@ -5216,9 +5654,10 @@ ML_(new_dwarf3_reader) ( + DiSlice escn_debug_info, DiSlice escn_debug_types, + DiSlice escn_debug_abbv, DiSlice escn_debug_line, + DiSlice escn_debug_str, DiSlice escn_debug_ranges, ++ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, + DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, + DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, +- DiSlice escn_debug_str_alt ++ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str + ) + { + volatile Int jumped; +@@ -5239,9 +5678,10 @@ ML_(new_dwarf3_reader) ( + escn_debug_info, escn_debug_types, + escn_debug_abbv, escn_debug_line, + escn_debug_str, escn_debug_ranges, ++ escn_debug_rnglists, escn_debug_loclists, + escn_debug_loc, escn_debug_info_alt, + escn_debug_abbv_alt, escn_debug_line_alt, +- escn_debug_str_alt ); ++ escn_debug_str_alt, escn_debug_line_str ); + d3rd_jmpbuf_valid = False; + TRACE_D3("\n------ .debug_info reading was successful ------\n"); + } else { +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index bc5a732d7..404034df0 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -2577,7 +2577,10 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) + DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) + DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) ++ DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) + DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) ++ DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) ++ DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) + DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) + DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) + DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) +@@ -2683,10 +2686,22 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + if (!ML_(sli_is_valid)(debug_str_escn)) + FIND(".zdebug_str", debug_str_escn) + ++ FIND( ".debug_line_str", debug_line_str_escn) ++ if (!ML_(sli_is_valid)(debug_line_str_escn)) ++ FIND(".zdebug_str", debug_line_str_escn) ++ + FIND( ".debug_ranges", debug_ranges_escn) + if (!ML_(sli_is_valid)(debug_ranges_escn)) + FIND(".zdebug_ranges", debug_ranges_escn) + ++ FIND( ".debug_rnglists", debug_rnglists_escn) ++ if (!ML_(sli_is_valid)(debug_rnglists_escn)) ++ FIND(".zdebug_rnglists", debug_rnglists_escn) ++ ++ FIND( ".debug_loclists", debug_loclists_escn) ++ if (!ML_(sli_is_valid)(debug_loclists_escn)) ++ FIND(".zdebug_loclists", debug_loclists_escn) ++ + FIND( ".debug_loc", debug_loc_escn) + if (!ML_(sli_is_valid)(debug_loc_escn)) + FIND(".zdebug_loc", debug_loc_escn) +@@ -2994,10 +3009,22 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + if (!ML_(sli_is_valid)(debug_str_escn)) + FIND(need_dwarf2, ".zdebug_str", debug_str_escn) + ++ FIND( need_dwarf2, ".debug_line_str", debug_line_str_escn) ++ if (!ML_(sli_is_valid)(debug_line_str_escn)) ++ FIND(need_dwarf2, ".zdebug_line_str", debug_line_str_escn) ++ + FIND( need_dwarf2, ".debug_ranges", debug_ranges_escn) + if (!ML_(sli_is_valid)(debug_ranges_escn)) + FIND(need_dwarf2, ".zdebug_ranges", debug_ranges_escn) + ++ FIND( need_dwarf2, ".debug_rnglists", debug_rnglists_escn) ++ if (!ML_(sli_is_valid)(debug_rnglists_escn)) ++ FIND(need_dwarf2, ".zdebug_rnglists", debug_rnglists_escn) ++ ++ FIND( need_dwarf2, ".debug_loclists", debug_loclists_escn) ++ if (!ML_(sli_is_valid)(debug_loclists_escn)) ++ FIND(need_dwarf2, ".zdebug_loclists", debug_loclists_escn) ++ + FIND( need_dwarf2, ".debug_loc", debug_loc_escn) + if (!ML_(sli_is_valid)(debug_loc_escn)) + FIND(need_dwarf2, ".zdebug_loc", debug_loc_escn) +@@ -3231,7 +3258,8 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + debug_abbv_escn, + debug_line_escn, + debug_str_escn, +- debug_str_alt_escn ); ++ debug_str_alt_escn, ++ debug_line_str_escn); + /* The new reader: read the DIEs in .debug_info to acquire + information on variable types and locations or inline info. + But only if the tool asks for it, or the user requests it on +@@ -3242,9 +3270,10 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + di, debug_info_escn, debug_types_escn, + debug_abbv_escn, debug_line_escn, + debug_str_escn, debug_ranges_escn, ++ debug_rnglists_escn, debug_loclists_escn, + debug_loc_escn, debug_info_alt_escn, + debug_abbv_alt_escn, debug_line_alt_escn, +- debug_str_alt_escn ++ debug_str_alt_escn, debug_line_str_escn + ); + } + } +diff --git a/coregrind/m_debuginfo/readmacho.c b/coregrind/m_debuginfo/readmacho.c +index f39ee006f..9153a74ca 100644 +--- a/coregrind/m_debuginfo/readmacho.c ++++ b/coregrind/m_debuginfo/readmacho.c +@@ -1103,8 +1103,14 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) + = getsectdata(dsli, "__DWARF", "__debug_line", NULL); + DiSlice debug_str_mscn + = getsectdata(dsli, "__DWARF", "__debug_str", NULL); ++ DiSlice debug_line_str_mscn ++ = getsectdata(dsli, "__DWARF", "__debug_line_str", NULL); + DiSlice debug_ranges_mscn + = getsectdata(dsli, "__DWARF", "__debug_ranges", NULL); ++ DiSlice debug_rnglists_mscn ++ = getsectdata(dsli, "__DWARF", "__debug_rnglists", NULL); ++ DiSlice debug_loclists_mscn ++ = getsectdata(dsli, "__DWARF", "__debug_loclists", NULL); + DiSlice debug_loc_mscn + = getsectdata(dsli, "__DWARF", "__debug_loc", NULL); + +@@ -1145,7 +1151,8 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) + debug_abbv_mscn, + debug_line_mscn, + debug_str_mscn, +- DiSlice_INVALID /* ALT .debug_str */ ); ++ DiSlice_INVALID, /* ALT .debug_str */ ++ debug_line_str ); + + /* The new reader: read the DIEs in .debug_info to acquire + information on variable types and locations or inline info. +@@ -1160,11 +1167,14 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) + debug_line_mscn, + debug_str_mscn, + debug_ranges_mscn, ++ debug_rnglists_mscn, ++ debug_loclists_mscn, + debug_loc_mscn, + DiSlice_INVALID, /* ALT .debug_info */ + DiSlice_INVALID, /* ALT .debug_abbv */ + DiSlice_INVALID, /* ALT .debug_line */ +- DiSlice_INVALID /* ALT .debug_str */ ++ DiSlice_INVALID, /* ALT .debug_str */ ++ debug_line_str_mscn /* .debug_line_str */ + ); + } + } +-- +2.18.4 + diff --git a/valgrind.spec b/valgrind.spec index e850430..dbe9f97 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 13%{?dist} +Release: 14%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -140,6 +140,9 @@ Patch20: valgrind-3.16.1-arm64-expensive-cmp.patch # KDE#431157 PPC_FEATURE2_SCV needs to be masked in AT_HWCAP2 Patch21: valgrind-3.16.1-ppc64-scv-hwcap.patch +# KDE#432102 Support DWARF5 +Patch22: valgrind-3.16.1-dwarf5.patch + BuildRequires: make BuildRequires: glibc-devel @@ -290,6 +293,7 @@ Valgrind User Manual for details. %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -514,6 +518,9 @@ fi %endif %changelog +* Mon Jan 25 2021 Mark Wielaard - 3.16.1-14 +- Add valgrind-3.16.1-dwarf5.patch + * Fri Jan 8 2021 Mark Wielaard - 3.16.1-13 - Add valgrind-3.16.1-ppc64-scv-hwcap.patch From 45cbad6c992f42a59f30f5545b7b8f1a12e999b8 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 27 Jan 2021 22:53:43 +0000 Subject: [PATCH 032/196] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index dbe9f97..7264d47 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 14%{?dist} +Release: 15%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -518,6 +518,9 @@ fi %endif %changelog +* Wed Jan 27 2021 Fedora Release Engineering - 1:3.16.1-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Mon Jan 25 2021 Mark Wielaard - 3.16.1-14 - Add valgrind-3.16.1-dwarf5.patch From 511be3b3d22046805b09fd521d60cb91e4ab54c7 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 3 Feb 2021 19:53:09 +0100 Subject: [PATCH 033/196] 3.16.1-16 - Add valgrind-3.16.0-shmctl.patch --- valgrind-3.16.0-shmctl.patch | 111 +++++++++++++++++++++++++++++++++++ valgrind.spec | 10 +++- 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.0-shmctl.patch diff --git a/valgrind-3.16.0-shmctl.patch b/valgrind-3.16.0-shmctl.patch new file mode 100644 index 0000000..16d9d7c --- /dev/null +++ b/valgrind-3.16.0-shmctl.patch @@ -0,0 +1,111 @@ +commit 232893d9b3c7d79d018db7f303aee219161a86d0 +Author: Anssi Hannula +Date: Thu Jul 2 14:49:17 2020 +0300 + + Fix shmat() on Linux nanomips and x86 + + On Linux, there are two variants of the direct shmctl syscall: + - sys_shmctl: always uses shmid64_ds, does not accept IPC_64 + - sys_old_shmctl: uses shmid_ds or shmid64_ds depending on IPC_64 + + The following Linux ABIs have the sys_old_shmctl variant: + alpha, arm, microblaze, mips n32/n64, xtensa + + Other ABIs (and future ABIs) have the sys_shmctl variant, including ABIs + that only got sys_shmctl in Linux 5.1 (such as x86, mips o32, ppc, + s390x). + + We incorrectly assume the sys_old_shmctl variant on nanomips and x86, + causing shmat() calls under valgrind to fail with EINVAL. + + On x86, the issue was previously masked by the non-existence of + __NR_shmctl until a9fc7bceeb0b0 ("Update Linux x86 system call number + definitions") in 2019. + + On mips o32, ppc, and s390x this issue is not visible as our headers do + not have __NR_shmctl for those ABIs (396 since Linux 5.1). + + Fix the issue by correcting the preprocessor check in get_shm_size() to + only assume the old Linux sys_old_shmctl behavior on the specific + affected platforms. + + Also, exclude the use of direct shmctl entirely on Linux x86, ppc, + mips o32, s390x in order to keep compatibility with pre-5.1 kernel + versions that did not yet have direct shmctl for those ABIs. + This currently only has actual effect on x86 as only it has __NR_shmctl + in our headers. + + Fixes tests mremap4, mremap5, mremap6. + + https://bugs.kde.org/show_bug.cgi?id=410743 + +diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c +index badb8c778..7d4b385a3 100644 +--- a/coregrind/m_syswrap/syswrap-generic.c ++++ b/coregrind/m_syswrap/syswrap-generic.c +@@ -1960,11 +1960,27 @@ ML_(generic_POST_sys_semctl) ( ThreadId tid, + static + SizeT get_shm_size ( Int shmid ) + { +-#if defined(__NR_shmctl) ++ /* ++ * The excluded platforms below gained direct shmctl in Linux 5.1. Keep ++ * using ipc-multiplexed shmctl to keep compatibility with older kernel ++ * versions. ++ */ ++#if defined(__NR_shmctl) && \ ++ !defined(VGP_x86_linux) && !defined(VGP_mips32_linux) && \ ++ !defined(VGP_ppc32_linux) && !defined(VGP_ppc64be_linux) && \ ++ !defined(VGP_ppc64le_linux) && !defined(VGP_s390x_linux) + # ifdef VKI_IPC_64 + struct vki_shmid64_ds buf; +-# if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) +- /* See bug 222545 comment 7 */ ++ /* ++ * On Linux, the following ABIs use old shmid_ds by default with direct ++ * shmctl and require IPC_64 for shmid64_ds (i.e. the direct syscall is ++ * mapped to sys_old_shmctl): ++ * alpha, arm, microblaze, mips n32/n64, xtensa ++ * Other Linux ABIs use shmid64_ds by default and do not recognize IPC_64 ++ * with the direct shmctl syscall (but still recognize it for the ++ * ipc-multiplexed version if that exists for the ABI). ++ */ ++# if defined(VGO_linux) && !defined(VGP_arm_linux) && !defined(VGP_mips64_linux) + SysRes __res = VG_(do_syscall3)(__NR_shmctl, shmid, + VKI_IPC_STAT, (UWord)&buf); + # else +commit 620dba22be67dea2ada9fa825b2ed4d61774af82 +Author: Mark Wielaard +Date: Wed Feb 3 16:56:14 2021 +0100 + + syswrap-linux.c: Pass implicit VKI_IPC_64 for shmctl also on arm64. + + The shmctl syscall on amd64, arm64 and riscv (but we don't have a port + for that last one) always use IPC_64. Explicitly pass it to the generic + PRE/POST handlers so they select the correct (64bit) data structures on + those architectures. + + https://bugzilla.redhat.com/show_bug.cgi?id=1909548 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 328e02a98..52074149d 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -5127,7 +5127,7 @@ PRE(sys_shmctl) + PRINT("sys_shmctl ( %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3); + PRE_REG_READ3(long, "shmctl", + int, shmid, int, cmd, struct shmid_ds *, buf); +-#ifdef VGP_amd64_linux ++#if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) + ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2|VKI_IPC_64,ARG3); + #else + ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2,ARG3); +@@ -5136,7 +5136,7 @@ PRE(sys_shmctl) + + POST(sys_shmctl) + { +-#ifdef VGP_amd64_linux ++#if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) + ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2|VKI_IPC_64,ARG3); + #else + ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2,ARG3); diff --git a/valgrind.spec b/valgrind.spec index 7264d47..5a33e04 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 15%{?dist} +Release: 16%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -143,6 +143,10 @@ Patch21: valgrind-3.16.1-ppc64-scv-hwcap.patch # KDE#432102 Support DWARF5 Patch22: valgrind-3.16.1-dwarf5.patch +# KDE#410743 shmat() calls for 32-bit programs fail when running in 64-bit +# RHBZ#1909548 shmctl(IPC_STAT) doesn't set shm_nattch on aarch64 +Patch23: valgrind-3.16.0-shmctl.patch + BuildRequires: make BuildRequires: glibc-devel @@ -294,6 +298,7 @@ Valgrind User Manual for details. %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -518,6 +523,9 @@ fi %endif %changelog +* Wed Feb 3 2021 Mark Wielaard - 3.16.1-16 +- Add valgrind-3.16.0-shmctl.patch + * Wed Jan 27 2021 Fedora Release Engineering - 1:3.16.1-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 4d61a8797443b47dcda7d1383cedfd511979438c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 6 Feb 2021 22:17:36 +0100 Subject: [PATCH 034/196] 3.16.1-17 - Add valgrind-3.16.1-open-proc-self-exe.patch --- valgrind-3.16.1-open-proc-self-exe.patch | 71 ++++++++++++++++++++++++ valgrind.spec | 10 +++- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-open-proc-self-exe.patch diff --git a/valgrind-3.16.1-open-proc-self-exe.patch b/valgrind-3.16.1-open-proc-self-exe.patch new file mode 100644 index 0000000..7525f8a --- /dev/null +++ b/valgrind-3.16.1-open-proc-self-exe.patch @@ -0,0 +1,71 @@ +diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h +index 4717abac6..c50b31399 100644 +--- a/coregrind/m_syswrap/priv_syswrap-generic.h ++++ b/coregrind/m_syswrap/priv_syswrap-generic.h +@@ -106,6 +106,10 @@ extern Bool + ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, + int flags); + ++extern Bool ++ML_(handle_self_exe_open)(SyscallStatus *status, const HChar *filename, ++ int flags); ++ + /* Helper function for generic mprotect and linux pkey_mprotect. */ + extern void handle_sys_mprotect (ThreadId tid, SyscallStatus *status, + Addr *addr, SizeT *len, Int *prot); +diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c +index 7d4b385a3..3810f7474 100644 +--- a/coregrind/m_syswrap/syswrap-generic.c ++++ b/coregrind/m_syswrap/syswrap-generic.c +@@ -4078,6 +4078,38 @@ Bool ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, + } + #endif // defined(VGO_linux) || defined(VGO_solaris) + ++#if defined(VGO_linux) ++Bool ML_(handle_self_exe_open)(SyscallStatus *status, const HChar *filename, ++ int flags) ++{ ++ HChar name[30]; // large enough for /proc//exe ++ ++ if (!ML_(safe_to_deref)((const void *) filename, 1)) ++ return False; ++ ++ /* Opening /proc//exe or /proc/self/exe? */ ++ VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)()); ++ if (!VG_STREQ(filename, name) && !VG_STREQ(filename, "/proc/self/exe")) ++ return False; ++ ++ /* Allow to open the file only for reading. */ ++ if (flags & (VKI_O_WRONLY | VKI_O_RDWR)) { ++ SET_STATUS_Failure(VKI_EACCES); ++ return True; ++ } ++ ++ SysRes sres = VG_(dup)(VG_(cl_exec_fd)); ++ SET_STATUS_from_SysRes(sres); ++ if (!sr_isError(sres)) { ++ OffT off = VG_(lseek)(sr_Res(sres), 0, VKI_SEEK_SET); ++ if (off < 0) ++ SET_STATUS_Failure(VKI_EMFILE); ++ } ++ ++ return True; ++} ++#endif // defined(VGO_linux) ++ + PRE(sys_open) + { + if (ARG2 & VKI_O_CREAT) { +@@ -4119,8 +4151,10 @@ PRE(sys_open) + } + } + +- /* Handle also the case of /proc/self/auxv or /proc//auxv. */ +- if (ML_(handle_auxv_open)(status, (const HChar *)(Addr)ARG1, ARG2)) ++ /* Handle also the case of /proc/self/auxv or /proc//auxv ++ or /proc/self/exe or /proc//exe. */ ++ if (ML_(handle_auxv_open)(status, (const HChar *)(Addr)ARG1, ARG2) ++ || ML_(handle_self_exe_open)(status, (const HChar *)(Addr)ARG1, ARG2)) + return; + #endif // defined(VGO_linux) + diff --git a/valgrind.spec b/valgrind.spec index 5a33e04..957665f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 16%{?dist} +Release: 17%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -147,6 +147,10 @@ Patch22: valgrind-3.16.1-dwarf5.patch # RHBZ#1909548 shmctl(IPC_STAT) doesn't set shm_nattch on aarch64 Patch23: valgrind-3.16.0-shmctl.patch +# KDE#140178 open("/proc/self/exe", ...); doesn't quite work +# RHBZ#1925786 valgrind appears to only interject readlink on /proc/self/exe +Patch24: valgrind-3.16.1-open-proc-self-exe.patch + BuildRequires: make BuildRequires: glibc-devel @@ -299,6 +303,7 @@ Valgrind User Manual for details. %patch21 -p1 %patch22 -p1 %patch23 -p1 +%patch24 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -523,6 +528,9 @@ fi %endif %changelog +* Sat Feb 6 2021 Mark Wielaard - 3.16.1-17 +- Add valgrind-3.16.1-open-proc-self-exe.patch + * Wed Feb 3 2021 Mark Wielaard - 3.16.1-16 - Add valgrind-3.16.0-shmctl.patch From 694bfef4aa9f24859dcf6c1c4a6b68c9a242ddf0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 7 Feb 2021 02:45:19 +0100 Subject: [PATCH 035/196] 3.16.1-18 - Update valgrind-3.16.1-open-proc-self-exe.patch to handle openat --- valgrind-3.16.1-open-proc-self-exe.patch | 27 ++++++++++++++++++++++++ valgrind.spec | 5 ++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/valgrind-3.16.1-open-proc-self-exe.patch b/valgrind-3.16.1-open-proc-self-exe.patch index 7525f8a..343f759 100644 --- a/valgrind-3.16.1-open-proc-self-exe.patch +++ b/valgrind-3.16.1-open-proc-self-exe.patch @@ -69,3 +69,30 @@ index 7d4b385a3..3810f7474 100644 return; #endif // defined(VGO_linux) +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 52074149d..fcc534454 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -5745,6 +5745,22 @@ PRE(sys_openat) + return; + } + ++ /* And for /proc/self/exe or /proc//exe case. */ ++ ++ VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)()); ++ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 ) ++ && (VG_(strcmp)((HChar *)(Addr)ARG2, name) == 0 ++ || VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/exe") == 0)) { ++ sres = VG_(dup)( VG_(cl_exec_fd) ); ++ SET_STATUS_from_SysRes( sres ); ++ if (!sr_isError(sres)) { ++ OffT off = VG_(lseek)( sr_Res(sres), 0, VKI_SEEK_SET ); ++ if (off < 0) ++ SET_STATUS_Failure( VKI_EMFILE ); ++ } ++ return; ++ } ++ + /* Otherwise handle normally */ + *flags |= SfMayBlock; + } diff --git a/valgrind.spec b/valgrind.spec index 957665f..8afdc29 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 17%{?dist} +Release: 18%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -528,6 +528,9 @@ fi %endif %changelog +* Sat Feb 6 2021 Mark Wielaard - 3.16.1-18 +- Update valgrind-3.16.1-open-proc-self-exe.patch to handle openat + * Sat Feb 6 2021 Mark Wielaard - 3.16.1-17 - Add valgrind-3.16.1-open-proc-self-exe.patch From 800b3249fc47696998aaecdbd53df492ef67d75b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 21 Feb 2021 23:10:08 +0100 Subject: [PATCH 036/196] 3.16.1-19 - Add valgrind-3.16.1-readdwarf-line.patch --- valgrind-3.16.1-readdwarf-line.patch | 53 ++++++++++++++++++++++++++++ valgrind.spec | 9 ++++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-readdwarf-line.patch diff --git a/valgrind-3.16.1-readdwarf-line.patch b/valgrind-3.16.1-readdwarf-line.patch new file mode 100644 index 0000000..cfe34a8 --- /dev/null +++ b/valgrind-3.16.1-readdwarf-line.patch @@ -0,0 +1,53 @@ +commit 67363912e9cdba83869a72ff8c4084e7a7e4ab85 +Author: Mark Wielaard +Date: Sun Feb 21 22:45:51 2021 +0100 + + Fix typo in DWARF 5 line table readers + + This typo meant the directory entry was most often zero, which + happened to be sometimes correct anyway (since zero is the compdir). + So for simple testcases it looked correct. But it would be wrong for + compilation units not in the current compdir. Like files compiled with + a relative of absolute path. + + The same typo was in both readdwarf.c (read_dwarf2_lineblock) and + readdwarf3.c (read_filename_table). read_dwarf2_lineblock also had + an extra "dwarf" string in the debug-line output. + + https://bugzilla.redhat.com/show_bug.cgi?id=1927153 + +diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c +index 88d5d99f1..3996623ed 100644 +--- a/coregrind/m_debuginfo/readdwarf.c ++++ b/coregrind/m_debuginfo/readdwarf.c +@@ -683,7 +683,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + directories_count = step_leb128U(&data); + /* Read the contents of the Directory table. */ + if (di->ddump_line) +- VG_(printf)(" dwarf The Directory Table%s\n", ++ VG_(printf)(" The Directory Table%s\n", + directories_count == 0 ? " is empty." : ":" ); + + for (n = 0; n < directories_count; n++) { +@@ -796,7 +796,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, + if (f == p_ndx) + name = get_line_str (di, ui, &data, form, + debugstr_img, debuglinestr_img); +- else if (n == d_ndx) ++ else if (f == d_ndx) + diridx = get_line_ndx (di, &data, form); + else + data = skip_line_form (di, ui, data, form); +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 82bc8f241..60fc40244 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -2323,7 +2323,7 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, + if (f == p_ndx) + str = get_line_str (cc->di, cc->is_dw64, &c, form, + debugstr_img, debuglinestr_img); +- else if (n == d_ndx) ++ else if (f == d_ndx) + dir_xa_ix = get_line_ndx (cc->di, &c, form); + else + skip_line_form (cc->di, cc->is_dw64, &c, form); diff --git a/valgrind.spec b/valgrind.spec index 8afdc29..f1e0dff 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 18%{?dist} +Release: 19%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -151,6 +151,9 @@ Patch23: valgrind-3.16.0-shmctl.patch # RHBZ#1925786 valgrind appears to only interject readlink on /proc/self/exe Patch24: valgrind-3.16.1-open-proc-self-exe.patch +# RHBZ#1927153 -flto makes valgrind report non-existing paths to source files +Patch25: valgrind-3.16.1-readdwarf-line.patch + BuildRequires: make BuildRequires: glibc-devel @@ -304,6 +307,7 @@ Valgrind User Manual for details. %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -528,6 +532,9 @@ fi %endif %changelog +* Sun Feb 21 2021 Mark Wielaard - 3.16.1-19 +- Add valgrind-3.16.1-readdwarf-line.patch + * Sat Feb 6 2021 Mark Wielaard - 3.16.1-18 - Update valgrind-3.16.1-open-proc-self-exe.patch to handle openat From aa2330f4901673e106de2a73f337ff9a4fdc430d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 3 Mar 2021 10:59:34 +0100 Subject: [PATCH 037/196] 3.16.1-20 - Add valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch --- valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch | 72 ++++++++++++++++++++++ valgrind.spec | 10 ++- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch diff --git a/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch b/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch new file mode 100644 index 0000000..14b45d4 --- /dev/null +++ b/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch @@ -0,0 +1,72 @@ +diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c +index e1127ffe2..1bc5f8f05 100644 +--- a/coregrind/m_debuginfo/d3basics.c ++++ b/coregrind/m_debuginfo/d3basics.c +@@ -523,6 +523,7 @@ static Bool get_Dwarf_Reg( /*OUT*/Addr* a, Word regno, const RegSummary* regs ) + if (regno == 30) { *a = regs->fp; return True; } + # elif defined(VGP_arm64_linux) + if (regno == 31) { *a = regs->sp; return True; } ++ if (regno == 29) { *a = regs->fp; return True; } + # else + # error "Unknown platform" + # endif +diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c +index c4a5ea593..bc2578b37 100644 +--- a/coregrind/m_debuginfo/debuginfo.c ++++ b/coregrind/m_debuginfo/debuginfo.c +@@ -2874,7 +2874,9 @@ UWord evalCfiExpr ( const XArray* exprs, Int ix, + # elif defined(VGA_ppc32) || defined(VGA_ppc64be) \ + || defined(VGA_ppc64le) + # elif defined(VGP_arm64_linux) ++ case Creg_ARM64_SP: return eec->uregs->sp; + case Creg_ARM64_X30: return eec->uregs->x30; ++ case Creg_ARM64_X29: return eec->uregs->x29; + # else + # error "Unsupported arch" + # endif +diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h +index 39456eccb..ae44ca34e 100644 +--- a/coregrind/m_debuginfo/priv_storage.h ++++ b/coregrind/m_debuginfo/priv_storage.h +@@ -415,7 +415,9 @@ typedef + Creg_ARM_R15, + Creg_ARM_R14, + Creg_ARM_R7, ++ Creg_ARM64_SP, + Creg_ARM64_X30, ++ Creg_ARM64_X29, + Creg_S390_IA, + Creg_S390_SP, + Creg_S390_FP, +diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c +index 3996623ed..bcacca4cb 100644 +--- a/coregrind/m_debuginfo/readdwarf.c ++++ b/coregrind/m_debuginfo/readdwarf.c +@@ -2816,7 +2816,12 @@ static Int copy_convert_CfiExpr_tree ( XArray* dstxa, + if (dwreg == srcuc->ra_reg) + return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_IP ); + # elif defined(VGA_arm64) +- I_die_here; ++ if (dwreg == SP_REG) ++ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_SP ); ++ if (dwreg == FP_REG) ++ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_X29 ); ++ if (dwreg == srcuc->ra_reg) ++ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_X30 ); + # elif defined(VGA_ppc32) || defined(VGA_ppc64be) \ + || defined(VGA_ppc64le) + # else +diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c +index 8667d123f..48a92b402 100644 +--- a/coregrind/m_debuginfo/storage.c ++++ b/coregrind/m_debuginfo/storage.c +@@ -1002,7 +1002,9 @@ static void ppCfiReg ( CfiReg reg ) + case Creg_ARM_R15: VG_(printf)("R15"); break; + case Creg_ARM_R14: VG_(printf)("R14"); break; + case Creg_ARM_R7: VG_(printf)("R7"); break; ++ case Creg_ARM64_SP: VG_(printf)("SP"); break; + case Creg_ARM64_X30: VG_(printf)("X30"); break; ++ case Creg_ARM64_X29: VG_(printf)("X29"); break; + case Creg_MIPS_RA: VG_(printf)("RA"); break; + case Creg_S390_IA: VG_(printf)("IA"); break; + case Creg_S390_SP: VG_(printf)("SP"); break; diff --git a/valgrind.spec b/valgrind.spec index f1e0dff..b53b7ac 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.16.1 -Release: 19%{?dist} +Release: 20%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -154,6 +154,10 @@ Patch24: valgrind-3.16.1-open-proc-self-exe.patch # RHBZ#1927153 -flto makes valgrind report non-existing paths to source files Patch25: valgrind-3.16.1-readdwarf-line.patch +# RHBZ#433898 netresolve: FTBFS in Fedora rawhide/f34 because arm64 valgrind +# KDE#433898 arm64: Handle sp, lr, fp as DwReg in CfiExpr +Patch26: valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch + BuildRequires: make BuildRequires: glibc-devel @@ -308,6 +312,7 @@ Valgrind User Manual for details. %patch23 -p1 %patch24 -p1 %patch25 -p1 +%patch26 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -532,6 +537,9 @@ fi %endif %changelog +* Wed Mar 3 2021 Mark Wielaard - 3.16.1-20 +- Add valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch + * Sun Feb 21 2021 Mark Wielaard - 3.16.1-19 - Add valgrind-3.16.1-readdwarf-line.patch From 3828df5e3f56423bb5d3eba3424ae560d5fe0be7 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 15 Mar 2021 16:02:09 +0100 Subject: [PATCH 038/196] 3.17.0-0.1.RC1 --- .gitignore | 1 + sources | 2 +- valgrind-3.16.0-pkglibexecdir.patch | 117 - valgrind-3.16.0-shmctl.patch | 111 - valgrind-3.16.0-some-stack-protector.patch | 4 +- valgrind-3.16.1-PPC64BE-lsw.patch | 34 - valgrind-3.16.1-REX-prefix-JMP.patch | 38 - valgrind-3.16.1-arm64-expensive-cmp.patch | 19 - valgrind-3.16.1-arm64-fma.patch | 729 ----- valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch | 72 - valgrind-3.16.1-dl_runtime_resolve.patch | 206 -- valgrind-3.16.1-dwarf5.patch | 2410 ---------------- valgrind-3.16.1-epoll.patch | 117 - valgrind-3.16.1-faccessat2.patch | 201 -- valgrind-3.16.1-ficlone.patch | 43 - valgrind-3.16.1-gdbserver_nlcontrolc.patch | 13 - valgrind-3.16.1-open-proc-self-exe.patch | 98 - valgrind-3.16.1-ppc64-scv-hwcap.patch | 57 - valgrind-3.16.1-pthread-intercept.patch | 222 -- valgrind-3.16.1-readdwarf-line.patch | 53 - valgrind-3.16.1-s390_emit_load_mem.patch | 27 - valgrind-3.16.1-s390x-z14-vector.patch | 2977 -------------------- valgrind-3.16.1-sched_getsetattr.patch | 201 -- valgrind-3.16.1-stxsibx-stxsihx.patch | 63 - valgrind.spec | 116 +- 25 files changed, 21 insertions(+), 7910 deletions(-) delete mode 100644 valgrind-3.16.0-pkglibexecdir.patch delete mode 100644 valgrind-3.16.0-shmctl.patch delete mode 100644 valgrind-3.16.1-PPC64BE-lsw.patch delete mode 100644 valgrind-3.16.1-REX-prefix-JMP.patch delete mode 100644 valgrind-3.16.1-arm64-expensive-cmp.patch delete mode 100644 valgrind-3.16.1-arm64-fma.patch delete mode 100644 valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch delete mode 100644 valgrind-3.16.1-dl_runtime_resolve.patch delete mode 100644 valgrind-3.16.1-dwarf5.patch delete mode 100644 valgrind-3.16.1-epoll.patch delete mode 100644 valgrind-3.16.1-faccessat2.patch delete mode 100644 valgrind-3.16.1-ficlone.patch delete mode 100644 valgrind-3.16.1-gdbserver_nlcontrolc.patch delete mode 100644 valgrind-3.16.1-open-proc-self-exe.patch delete mode 100644 valgrind-3.16.1-ppc64-scv-hwcap.patch delete mode 100644 valgrind-3.16.1-pthread-intercept.patch delete mode 100644 valgrind-3.16.1-readdwarf-line.patch delete mode 100644 valgrind-3.16.1-s390_emit_load_mem.patch delete mode 100644 valgrind-3.16.1-s390x-z14-vector.patch delete mode 100644 valgrind-3.16.1-sched_getsetattr.patch delete mode 100644 valgrind-3.16.1-stxsibx-stxsihx.patch diff --git a/.gitignore b/.gitignore index 3a77629..0d362c8 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ /valgrind-3.16.0.RC2.tar.bz2 /valgrind-3.16.0.tar.bz2 /valgrind-3.16.1.tar.bz2 +/valgrind-3.17.0.RC1.tar.bz2 diff --git a/sources b/sources index 0d18846..eec672d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.16.1.tar.bz2) = 2a4173efe1b6facdd2f5c5ee8ed006704168eba1813736fccc8191d60363afd96197512cf42037e65f18d4ddd49adc74a54c47210df216fba3c46bf68ef0f950 +SHA512 (valgrind-3.17.0.RC1.tar.bz2) = ef71f3fca24466e78bd8a137666722f06cc5744cda5ae608b96d69390a72839e4d7499293872eb797e1c9edbe13ca6cf6147b6eb2491bb455d6696180f9864b7 diff --git a/valgrind-3.16.0-pkglibexecdir.patch b/valgrind-3.16.0-pkglibexecdir.patch deleted file mode 100644 index cd52729..0000000 --- a/valgrind-3.16.0-pkglibexecdir.patch +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/Makefile.all.am b/Makefile.all.am -index 3786e34..1befef5 100644 ---- a/Makefile.all.am -+++ b/Makefile.all.am -@@ -50,20 +50,20 @@ inplace-noinst_DSYMS: build-noinst_DSYMS - done - - # This is used by coregrind/Makefile.am and by /Makefile.am for doing --# "make install". It copies $(noinst_PROGRAMS) into $prefix/lib/valgrind/. -+# "make install". It copies $(noinst_PROGRAMS) into $prefix/libexec/valgrind/. - # It needs to be depended on by an 'install-exec-local' rule. - install-noinst_PROGRAMS: $(noinst_PROGRAMS) -- $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ -+ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ - for f in $(noinst_PROGRAMS); do \ -- $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibdir); \ -+ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibexecdir); \ - done - - # This is used by coregrind/Makefile.am and by /Makefile.am for doing --# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/lib/valgrind/. -+# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/libexec/valgrind/. - # It needs to be depended on by an 'uninstall-local' rule. - uninstall-noinst_PROGRAMS: - for f in $(noinst_PROGRAMS); do \ -- rm -f $(DESTDIR)$(pkglibdir)/$$f; \ -+ rm -f $(DESTDIR)$(pkglibexecdir)/$$f; \ - done - - # Similar to install-noinst_PROGRAMS. -@@ -71,15 +71,15 @@ uninstall-noinst_PROGRAMS: - # directories. XXX: not sure whether the resulting permissions will be - # correct when using 'cp -R'... - install-noinst_DSYMS: build-noinst_DSYMS -- $(mkinstalldirs) $(DESTDIR)$(pkglibdir); \ -+ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ - for f in $(noinst_DSYMS); do \ -- cp -R $$f.dSYM $(DESTDIR)$(pkglibdir); \ -+ cp -R $$f.dSYM $(DESTDIR)$(pkglibexecdir); \ - done - - # Similar to uninstall-noinst_PROGRAMS. - uninstall-noinst_DSYMS: - for f in $(noinst_DSYMS); do \ -- rm -f $(DESTDIR)$(pkglibdir)/$$f.dSYM; \ -+ rm -f $(DESTDIR)$(pkglibexecdir)/$$f.dSYM; \ - done - - # This needs to be depended on by a 'clean-local' rule. -diff --git a/Makefile.am b/Makefile.am -index 242b38a..3b7c806 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -58,7 +58,7 @@ DEFAULT_SUPP_FILES = @DEFAULT_SUPP@ - # default.supp, as it is built from the base .supp files at compile-time. - dist_noinst_DATA = $(SUPP_FILES) - --vglibdir = $(pkglibdir) -+vglibdir = $(pkglibexecdir) - vglib_DATA = default.supp - - pkgconfigdir = $(libdir)/pkgconfig -diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am -index 94030fd..f09763a 100644 ---- a/coregrind/Makefile.am -+++ b/coregrind/Makefile.am -@@ -11,12 +11,12 @@ include $(top_srcdir)/Makefile.all.am - - AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ += \ - -I$(top_srcdir)/coregrind \ -- -DVG_LIBDIR="\"$(pkglibdir)"\" \ -+ -DVG_LIBDIR="\"$(pkglibexecdir)"\" \ - -DVG_PLATFORM="\"@VGCONF_ARCH_PRI@-@VGCONF_OS@\"" - if VGCONF_HAVE_PLATFORM_SEC - AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ += \ - -I$(top_srcdir)/coregrind \ -- -DVG_LIBDIR="\"$(pkglibdir)"\" \ -+ -DVG_LIBDIR="\"$(pkglibexecdir)"\" \ - -DVG_PLATFORM="\"@VGCONF_ARCH_SEC@-@VGCONF_OS@\"" - endif - -@@ -714,7 +714,7 @@ GDBSERVER_XML_FILES = \ - m_gdbserver/mips64-fpu.xml - - # so as to make sure these get copied into the install tree --vglibdir = $(pkglibdir) -+vglibdir = $(pkglibexecdir) - vglib_DATA = $(GDBSERVER_XML_FILES) - - # so as to make sure these get copied into the tarball -diff --git a/mpi/Makefile.am b/mpi/Makefile.am -index 7ad9a25..471fee0 100644 ---- a/mpi/Makefile.am -+++ b/mpi/Makefile.am -@@ -18,16 +18,18 @@ EXTRA_DIST = \ - # libmpiwrap-.so - #---------------------------------------------------------------------------- - --noinst_PROGRAMS = -+# These are really real libraries, so they should go to libdir, not libexec. -+mpidir = $(pkglibdir) -+mpi_PROGRAMS = - if BUILD_MPIWRAP_PRI --noinst_PROGRAMS += libmpiwrap-@VGCONF_ARCH_PRI@-@VGCONF_OS@.so -+mpi_PROGRAMS += libmpiwrap-@VGCONF_ARCH_PRI@-@VGCONF_OS@.so - endif - if BUILD_MPIWRAP_SEC --noinst_PROGRAMS += libmpiwrap-@VGCONF_ARCH_SEC@-@VGCONF_OS@.so -+mpi_PROGRAMS += libmpiwrap-@VGCONF_ARCH_SEC@-@VGCONF_OS@.so - endif - - if VGCONF_OS_IS_DARWIN --noinst_DSYMS = $(noinst_PROGRAMS) -+mpi_DSYMS = $(mpi_PROGRAMS) - endif - - diff --git a/valgrind-3.16.0-shmctl.patch b/valgrind-3.16.0-shmctl.patch deleted file mode 100644 index 16d9d7c..0000000 --- a/valgrind-3.16.0-shmctl.patch +++ /dev/null @@ -1,111 +0,0 @@ -commit 232893d9b3c7d79d018db7f303aee219161a86d0 -Author: Anssi Hannula -Date: Thu Jul 2 14:49:17 2020 +0300 - - Fix shmat() on Linux nanomips and x86 - - On Linux, there are two variants of the direct shmctl syscall: - - sys_shmctl: always uses shmid64_ds, does not accept IPC_64 - - sys_old_shmctl: uses shmid_ds or shmid64_ds depending on IPC_64 - - The following Linux ABIs have the sys_old_shmctl variant: - alpha, arm, microblaze, mips n32/n64, xtensa - - Other ABIs (and future ABIs) have the sys_shmctl variant, including ABIs - that only got sys_shmctl in Linux 5.1 (such as x86, mips o32, ppc, - s390x). - - We incorrectly assume the sys_old_shmctl variant on nanomips and x86, - causing shmat() calls under valgrind to fail with EINVAL. - - On x86, the issue was previously masked by the non-existence of - __NR_shmctl until a9fc7bceeb0b0 ("Update Linux x86 system call number - definitions") in 2019. - - On mips o32, ppc, and s390x this issue is not visible as our headers do - not have __NR_shmctl for those ABIs (396 since Linux 5.1). - - Fix the issue by correcting the preprocessor check in get_shm_size() to - only assume the old Linux sys_old_shmctl behavior on the specific - affected platforms. - - Also, exclude the use of direct shmctl entirely on Linux x86, ppc, - mips o32, s390x in order to keep compatibility with pre-5.1 kernel - versions that did not yet have direct shmctl for those ABIs. - This currently only has actual effect on x86 as only it has __NR_shmctl - in our headers. - - Fixes tests mremap4, mremap5, mremap6. - - https://bugs.kde.org/show_bug.cgi?id=410743 - -diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c -index badb8c778..7d4b385a3 100644 ---- a/coregrind/m_syswrap/syswrap-generic.c -+++ b/coregrind/m_syswrap/syswrap-generic.c -@@ -1960,11 +1960,27 @@ ML_(generic_POST_sys_semctl) ( ThreadId tid, - static - SizeT get_shm_size ( Int shmid ) - { --#if defined(__NR_shmctl) -+ /* -+ * The excluded platforms below gained direct shmctl in Linux 5.1. Keep -+ * using ipc-multiplexed shmctl to keep compatibility with older kernel -+ * versions. -+ */ -+#if defined(__NR_shmctl) && \ -+ !defined(VGP_x86_linux) && !defined(VGP_mips32_linux) && \ -+ !defined(VGP_ppc32_linux) && !defined(VGP_ppc64be_linux) && \ -+ !defined(VGP_ppc64le_linux) && !defined(VGP_s390x_linux) - # ifdef VKI_IPC_64 - struct vki_shmid64_ds buf; --# if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) -- /* See bug 222545 comment 7 */ -+ /* -+ * On Linux, the following ABIs use old shmid_ds by default with direct -+ * shmctl and require IPC_64 for shmid64_ds (i.e. the direct syscall is -+ * mapped to sys_old_shmctl): -+ * alpha, arm, microblaze, mips n32/n64, xtensa -+ * Other Linux ABIs use shmid64_ds by default and do not recognize IPC_64 -+ * with the direct shmctl syscall (but still recognize it for the -+ * ipc-multiplexed version if that exists for the ABI). -+ */ -+# if defined(VGO_linux) && !defined(VGP_arm_linux) && !defined(VGP_mips64_linux) - SysRes __res = VG_(do_syscall3)(__NR_shmctl, shmid, - VKI_IPC_STAT, (UWord)&buf); - # else -commit 620dba22be67dea2ada9fa825b2ed4d61774af82 -Author: Mark Wielaard -Date: Wed Feb 3 16:56:14 2021 +0100 - - syswrap-linux.c: Pass implicit VKI_IPC_64 for shmctl also on arm64. - - The shmctl syscall on amd64, arm64 and riscv (but we don't have a port - for that last one) always use IPC_64. Explicitly pass it to the generic - PRE/POST handlers so they select the correct (64bit) data structures on - those architectures. - - https://bugzilla.redhat.com/show_bug.cgi?id=1909548 - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 328e02a98..52074149d 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -5127,7 +5127,7 @@ PRE(sys_shmctl) - PRINT("sys_shmctl ( %ld, %ld, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3); - PRE_REG_READ3(long, "shmctl", - int, shmid, int, cmd, struct shmid_ds *, buf); --#ifdef VGP_amd64_linux -+#if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) - ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2|VKI_IPC_64,ARG3); - #else - ML_(generic_PRE_sys_shmctl)(tid, ARG1,ARG2,ARG3); -@@ -5136,7 +5136,7 @@ PRE(sys_shmctl) - - POST(sys_shmctl) - { --#ifdef VGP_amd64_linux -+#if defined(VGP_amd64_linux) || defined(VGP_arm64_linux) - ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2|VKI_IPC_64,ARG3); - #else - ML_(generic_POST_sys_shmctl)(tid, RES,ARG1,ARG2,ARG3); diff --git a/valgrind-3.16.0-some-stack-protector.patch b/valgrind-3.16.0-some-stack-protector.patch index bde2aa5..324c7d3 100644 --- a/valgrind-3.16.0-some-stack-protector.patch +++ b/valgrind-3.16.0-some-stack-protector.patch @@ -52,8 +52,8 @@ diff --git a/configure.ac b/configure.ac index f8c798b..ccc8f52 100755 --- a/configure.ac +++ b/configure.ac -@@ -2188,24 +2188,24 @@ AC_LANG(C) - AC_SUBST(FLAG_FALIGNED_NEW) +@@ -2352,24 +2352,24 @@ + AM_CONDITIONAL([HAVE_ALIGNED_CXX_ALLOC], [test x$ac_have_aligned_cxx_alloc = xyes]) # does this compiler support -fno-stack-protector ? -AC_MSG_CHECKING([if gcc accepts -fno-stack-protector]) diff --git a/valgrind-3.16.1-PPC64BE-lsw.patch b/valgrind-3.16.1-PPC64BE-lsw.patch deleted file mode 100644 index 2a1e9c3..0000000 --- a/valgrind-3.16.1-PPC64BE-lsw.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/none/tests/ppc64/ldst_multiple.vgtest b/none/tests/ppc64/ldst_multiple.vgtest -index 87e668e09..22dd46c99 100644 ---- a/none/tests/ppc64/ldst_multiple.vgtest -+++ b/none/tests/ppc64/ldst_multiple.vgtest -@@ -1 +1,2 @@ -+prereq: ../../../tests/is_ppc64_BE - prog: ldst_multiple ---- valgrind-3.16.1/none/tests/ppc64/Makefile.am.orig 2020-10-18 20:43:34.579699246 +0200 -+++ valgrind-3.16.1/none/tests/ppc64/Makefile.am 2020-10-18 20:44:52.950198040 +0200 -@@ -54,17 +54,22 @@ - - check_PROGRAMS = \ - allexec \ -- lsw jm-insns round \ -+ jm-insns round \ - test_isa_2_06_part1 test_isa_2_06_part2 test_isa_2_06_part3 \ - test_dfp1 test_dfp2 test_dfp3 test_dfp4 test_dfp5 \ - test_isa_2_07_part1 test_isa_2_07_part2 \ - test_isa_3_0 \ - subnormal_test \ -- test_tm test_touch_tm ldst_multiple data-cache-instructions \ -+ test_tm test_touch_tm data-cache-instructions \ - power6_mf_gpr std_reg_imm \ - twi_tdi tw_td power6_bcmp - - -+# lsw and ldst_multiple compile (and run) only on big endian. -+if VGCONF_PLATFORMS_INCLUDE_PPC64BE_LINUX -+check_PROGRAMS += lsw ldst_multiple -+endif -+ - AM_CFLAGS += @FLAG_M64@ - AM_CXXFLAGS += @FLAG_M64@ - AM_CCASFLAGS += @FLAG_M64@ diff --git a/valgrind-3.16.1-REX-prefix-JMP.patch b/valgrind-3.16.1-REX-prefix-JMP.patch deleted file mode 100644 index f780fb1..0000000 --- a/valgrind-3.16.1-REX-prefix-JMP.patch +++ /dev/null @@ -1,38 +0,0 @@ -commit e2dec0ff9b1e071779bee2c4e6fc82f8194b1c1d -Author: Mark Wielaard -Date: Sun Jul 26 21:17:23 2020 +0200 - - Handle REX prefixed JMP instruction. - - The NET Core runtime might generate a JMP with a REX prefix. - For Jv (32bit offset) and Jb (8bit offset) this is valid. - Prefixes that change operand size are ignored for such JMPs. - So remove the check for sz == 4 and force sz = 4 for Jv. - - https://bugs.kde.org/show_bug.cgi?id=422174 - -diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c -index fadf47d41..7888132eb 100644 ---- a/VEX/priv/guest_amd64_toIR.c -+++ b/VEX/priv/guest_amd64_toIR.c -@@ -21392,8 +21392,8 @@ Long dis_ESC_NONE ( - - case 0xE9: /* Jv (jump, 16/32 offset) */ - if (haveF3(pfx)) goto decode_failure; -- if (sz != 4) -- goto decode_failure; /* JRS added 2004 July 11 */ -+ sz = 4; /* Prefixes that change operand size are ignored for this -+ instruction. Operand size is forced to 32bit. */ - if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */ - d64 = (guest_RIP_bbstart+delta+sz) + getSDisp(sz,delta); - delta += sz; -@@ -21404,8 +21404,7 @@ Long dis_ESC_NONE ( - - case 0xEB: /* Jb (jump, byte offset) */ - if (haveF3(pfx)) goto decode_failure; -- if (sz != 4) -- goto decode_failure; /* JRS added 2004 July 11 */ -+ /* Prefixes that change operand size are ignored for this instruction. */ - if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */ - d64 = (guest_RIP_bbstart+delta+1) + getSDisp8(delta); - delta++; diff --git a/valgrind-3.16.1-arm64-expensive-cmp.patch b/valgrind-3.16.1-arm64-expensive-cmp.patch deleted file mode 100644 index b2f8b50..0000000 --- a/valgrind-3.16.1-arm64-expensive-cmp.patch +++ /dev/null @@ -1,19 +0,0 @@ -commit 359b98828ced9cfff8c1badfed75c7ef999cfee5 -Author: Julian Seward -Date: Sun Nov 15 18:28:09 2020 +0100 - - memcheck: on arm64, use expensive instrumentation for Cmp{EQ,NE}64 by default. - -diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c -index b32c9c9c5..e91d51094 100644 ---- a/memcheck/mc_translate.c -+++ b/memcheck/mc_translate.c -@@ -8485,6 +8485,8 @@ IRSB* MC_(instrument) ( VgCallbackClosure* closure, - # elif defined(VGA_ppc64le) - // Needed by (at least) set_AV_CR6() in the front end. - mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; -+# elif defined(VGA_arm64) -+ mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; - # endif - - /* preInstrumentationAnalysis() will allocate &mce.tmpHowUsed and then diff --git a/valgrind-3.16.1-arm64-fma.patch b/valgrind-3.16.1-arm64-fma.patch deleted file mode 100644 index c8ef17a..0000000 --- a/valgrind-3.16.1-arm64-fma.patch +++ /dev/null @@ -1,729 +0,0 @@ -From 04cdc29b007594a0e58ffef0c9dd87df3ea595ea Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Wed, 14 Oct 2020 06:11:34 -0400 -Subject: [PATCH] arm64 VEX frontend and backend support for - Iop_M{Add,Sub}F{32,64} - -The arm64 frontend used to implement the scalar fmadd, fmsub, fnmadd -and fnmsub iinstructions into separate addition/substraction and -multiplication instructions, which caused rounding issues. - -This patch turns them into Iop_M{Add,Sub}F{32,64} instructions -(with some arguments negated). And the backend now emits fmadd or fmsub -instructions. - -Alexandra Hajkova added tests and fixed up the -implementation to make sure rounding (and sign) are correct now. - -https://bugs.kde.org/show_bug.cgi?id=426014 ---- - VEX/priv/guest_arm64_toIR.c | 58 ++++++++--- - VEX/priv/host_arm64_defs.c | 136 +++++++++++++++++++++++++- - VEX/priv/host_arm64_defs.h | 30 ++++++ - VEX/priv/host_arm64_isel.c | 39 ++++++++ - none/tests/arm64/Makefile.am | 6 +- - none/tests/arm64/fmadd_sub.c | 98 +++++++++++++++++++ - none/tests/arm64/fmadd_sub.stderr.exp | 0 - none/tests/arm64/fmadd_sub.stdout.exp | 125 +++++++++++++++++++++++ - none/tests/arm64/fmadd_sub.vgtest | 3 + - 9 files changed, 479 insertions(+), 16 deletions(-) - create mode 100644 none/tests/arm64/fmadd_sub.c - create mode 100644 none/tests/arm64/fmadd_sub.stderr.exp - create mode 100644 none/tests/arm64/fmadd_sub.stdout.exp - create mode 100644 none/tests/arm64/fmadd_sub.vgtest - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 556b85a6a..d242d43c0 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -286,6 +286,12 @@ static IRExpr* triop ( IROp op, IRExpr* a1, IRExpr* a2, IRExpr* a3 ) - return IRExpr_Triop(op, a1, a2, a3); - } - -+static IRExpr* qop ( IROp op, IRExpr* a1, IRExpr* a2, -+ IRExpr* a3, IRExpr* a4 ) -+{ -+ return IRExpr_Qop(op, a1, a2, a3, a4); -+} -+ - static IRExpr* loadLE ( IRType ty, IRExpr* addr ) - { - return IRExpr_Load(Iend_LE, ty, addr); -@@ -532,6 +538,22 @@ static IROp mkADDF ( IRType ty ) { - } - } - -+static IROp mkFMADDF ( IRType ty ) { -+ switch (ty) { -+ case Ity_F32: return Iop_MAddF32; -+ case Ity_F64: return Iop_MAddF64; -+ default: vpanic("mkFMADDF"); -+ } -+} -+ -+static IROp mkFMSUBF ( IRType ty ) { -+ switch (ty) { -+ case Ity_F32: return Iop_MSubF32; -+ case Ity_F64: return Iop_MSubF64; -+ default: vpanic("mkFMSUBF"); -+ } -+} -+ - static IROp mkSUBF ( IRType ty ) { - switch (ty) { - case Ity_F32: return Iop_SubF32; -@@ -14368,30 +14390,40 @@ Bool dis_AdvSIMD_fp_data_proc_3_source(/*MB_OUT*/DisResult* dres, UInt insn) - where Fx=Dx when sz=1, Fx=Sx when sz=0 - - -----SPEC------ ----IMPL---- -- fmadd a + n * m a + n * m -- fmsub a + (-n) * m a - n * m -- fnmadd (-a) + (-n) * m -(a + n * m) -- fnmsub (-a) + n * m -(a - n * m) -+ fmadd a + n * m fmadd (a, n, m) -+ fmsub a + (-n) * m fmsub (a, n, m) -+ fnmadd (-a) + (-n) * m fmadd (-a, -n, m) -+ fnmsub (-a) + n * m fmadd (-a, n, m) -+ -+ Note Iop_MAdd/SubF32/64 take arguments in the order: rm, N, M, A - */ - Bool isD = (ty & 1) == 1; - UInt ix = (bitO1 << 1) | bitO0; - IRType ity = isD ? Ity_F64 : Ity_F32; -- IROp opADD = mkADDF(ity); -- IROp opSUB = mkSUBF(ity); -- IROp opMUL = mkMULF(ity); -+ IROp opFMADD = mkFMADDF(ity); -+ IROp opFMSUB = mkFMSUBF(ity); - IROp opNEG = mkNEGF(ity); - IRTemp res = newTemp(ity); - IRExpr* eA = getQRegLO(aa, ity); - IRExpr* eN = getQRegLO(nn, ity); - IRExpr* eM = getQRegLO(mm, ity); - IRExpr* rm = mkexpr(mk_get_IR_rounding_mode()); -- IRExpr* eNxM = triop(opMUL, rm, eN, eM); - switch (ix) { -- case 0: assign(res, triop(opADD, rm, eA, eNxM)); break; -- case 1: assign(res, triop(opSUB, rm, eA, eNxM)); break; -- case 2: assign(res, unop(opNEG, triop(opADD, rm, eA, eNxM))); break; -- case 3: assign(res, unop(opNEG, triop(opSUB, rm, eA, eNxM))); break; -- default: vassert(0); -+ case 0: /* FMADD */ -+ assign(res, qop(opFMADD, rm, eN, eM, eA)); -+ break; -+ case 1: /* FMSUB */ -+ assign(res, qop(opFMSUB, rm, eN, eM, eA)); -+ break; -+ case 2: /* FNMADD */ -+ assign(res, qop(opFMADD, rm, unop(opNEG, eN), eM, -+ unop(opNEG,eA))); -+ break; -+ case 3: /* FNMSUB */ -+ assign(res, qop(opFMADD, rm, eN, eM, unop(opNEG, eA))); -+ break; -+ default: -+ vassert(0); - } - putQReg128(dd, mkV128(0x0000)); - putQRegLO(dd, mkexpr(res)); -diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c -index e4ef56986..13b497f60 100644 ---- a/VEX/priv/host_arm64_defs.c -+++ b/VEX/priv/host_arm64_defs.c -@@ -546,6 +546,14 @@ static const HChar* showARM64FpBinOp ( ARM64FpBinOp op ) { - } - } - -+static const HChar* showARM64FpTriOp ( ARM64FpTriOp op ) { -+ switch (op) { -+ case ARM64fpt_FMADD: return "fmadd"; -+ case ARM64fpt_FMSUB: return "fmsub"; -+ default: vpanic("showARM64FpTriOp"); -+ } -+} -+ - static const HChar* showARM64FpUnaryOp ( ARM64FpUnaryOp op ) { - switch (op) { - case ARM64fpu_NEG: return "neg "; -@@ -1154,6 +1162,28 @@ ARM64Instr* ARM64Instr_VBinS ( ARM64FpBinOp op, - i->ARM64in.VBinS.argR = argR; - return i; - } -+ARM64Instr* ARM64Instr_VTriD ( ARM64FpTriOp op, -+ HReg dst, HReg arg1, HReg arg2, HReg arg3 ) { -+ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); -+ i->tag = ARM64in_VTriD; -+ i->ARM64in.VTriD.op = op; -+ i->ARM64in.VTriD.dst = dst; -+ i->ARM64in.VTriD.arg1 = arg1; -+ i->ARM64in.VTriD.arg2 = arg2; -+ i->ARM64in.VTriD.arg3 = arg3; -+ return i; -+} -+ARM64Instr* ARM64Instr_VTriS ( ARM64FpTriOp op, -+ HReg dst, HReg arg1, HReg arg2, HReg arg3 ) { -+ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); -+ i->tag = ARM64in_VTriS; -+ i->ARM64in.VTriS.op = op; -+ i->ARM64in.VTriS.dst = dst; -+ i->ARM64in.VTriS.arg1 = arg1; -+ i->ARM64in.VTriS.arg2 = arg2; -+ i->ARM64in.VTriS.arg3 = arg3; -+ return i; -+} - ARM64Instr* ARM64Instr_VCmpD ( HReg argL, HReg argR ) { - ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); - i->tag = ARM64in_VCmpD; -@@ -1756,6 +1786,26 @@ void ppARM64Instr ( const ARM64Instr* i ) { - vex_printf(", "); - ppHRegARM64asSreg(i->ARM64in.VBinS.argR); - return; -+ case ARM64in_VTriD: -+ vex_printf("f%s ", showARM64FpTriOp(i->ARM64in.VTriD.op)); -+ ppHRegARM64(i->ARM64in.VTriD.dst); -+ vex_printf(", "); -+ ppHRegARM64(i->ARM64in.VTriD.arg1); -+ vex_printf(", "); -+ ppHRegARM64(i->ARM64in.VTriD.arg2); -+ vex_printf(", "); -+ ppHRegARM64(i->ARM64in.VTriD.arg3); -+ return; -+ case ARM64in_VTriS: -+ vex_printf("f%s ", showARM64FpTriOp(i->ARM64in.VTriS.op)); -+ ppHRegARM64asSreg(i->ARM64in.VTriS.dst); -+ vex_printf(", "); -+ ppHRegARM64asSreg(i->ARM64in.VTriS.arg1); -+ vex_printf(", "); -+ ppHRegARM64asSreg(i->ARM64in.VTriS.arg2); -+ vex_printf(", "); -+ ppHRegARM64asSreg(i->ARM64in.VTriS.arg3); -+ return; - case ARM64in_VCmpD: - vex_printf("fcmp "); - ppHRegARM64(i->ARM64in.VCmpD.argL); -@@ -2197,6 +2247,18 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) - addHRegUse(u, HRmRead, i->ARM64in.VBinS.argL); - addHRegUse(u, HRmRead, i->ARM64in.VBinS.argR); - return; -+ case ARM64in_VTriD: -+ addHRegUse(u, HRmWrite, i->ARM64in.VTriD.dst); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg1); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg2); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriD.arg3); -+ return; -+ case ARM64in_VTriS: -+ addHRegUse(u, HRmWrite, i->ARM64in.VTriS.dst); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg1); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg2); -+ addHRegUse(u, HRmRead, i->ARM64in.VTriS.arg3); -+ return; - case ARM64in_VCmpD: - addHRegUse(u, HRmRead, i->ARM64in.VCmpD.argL); - addHRegUse(u, HRmRead, i->ARM64in.VCmpD.argR); -@@ -2454,6 +2516,18 @@ void mapRegs_ARM64Instr ( HRegRemap* m, ARM64Instr* i, Bool mode64 ) - i->ARM64in.VBinS.argL = lookupHRegRemap(m, i->ARM64in.VBinS.argL); - i->ARM64in.VBinS.argR = lookupHRegRemap(m, i->ARM64in.VBinS.argR); - return; -+ case ARM64in_VTriD: -+ i->ARM64in.VTriD.dst = lookupHRegRemap(m, i->ARM64in.VTriD.dst); -+ i->ARM64in.VTriD.arg1 = lookupHRegRemap(m, i->ARM64in.VTriD.arg1); -+ i->ARM64in.VTriD.arg2 = lookupHRegRemap(m, i->ARM64in.VTriD.arg2); -+ i->ARM64in.VTriD.arg3 = lookupHRegRemap(m, i->ARM64in.VTriD.arg3); -+ return; -+ case ARM64in_VTriS: -+ i->ARM64in.VTriS.dst = lookupHRegRemap(m, i->ARM64in.VTriS.dst); -+ i->ARM64in.VTriS.arg1 = lookupHRegRemap(m, i->ARM64in.VTriS.arg1); -+ i->ARM64in.VTriS.arg2 = lookupHRegRemap(m, i->ARM64in.VTriS.arg2); -+ i->ARM64in.VTriS.arg3 = lookupHRegRemap(m, i->ARM64in.VTriS.arg3); -+ return; - case ARM64in_VCmpD: - i->ARM64in.VCmpD.argL = lookupHRegRemap(m, i->ARM64in.VCmpD.argL); - i->ARM64in.VCmpD.argR = lookupHRegRemap(m, i->ARM64in.VCmpD.argR); -@@ -2812,7 +2886,8 @@ static inline UInt qregEnc ( HReg r ) - #define X11110011 BITS8(1,1,1,1,0,0,1,1) - #define X11110101 BITS8(1,1,1,1,0,1,0,1) - #define X11110111 BITS8(1,1,1,1,0,1,1,1) -- -+#define X11111000 BITS8(1,1,1,1,1,0,0,0) -+#define X11111010 BITS8(1,1,1,1,1,0,1,0) - - /* --- 4 fields --- */ - -@@ -2972,6 +3047,27 @@ static inline UInt X_3_6_1_6_6_5_5 ( UInt f1, UInt f2, UInt f3, - } - - -+static inline UInt X_3_8_5_1_5_5_5 ( UInt f1, UInt f2, UInt f3, UInt f4, -+ UInt f5, UInt f6, UInt f7 ) { -+ vassert(3+8+5+1+5+5+5 == 32); -+ vassert(f1 < (1<<3)); -+ vassert(f2 < (1<<8)); -+ vassert(f3 < (1<<5)); -+ vassert(f4 < (1<<1)); -+ vassert(f5 < (1<<5)); -+ vassert(f6 < (1<<5)); -+ vassert(f7 < (1<<5)); -+ UInt w = 0; -+ w = (w << 3) | f1; -+ w = (w << 8) | f2; -+ w = (w << 5) | f3; -+ w = (w << 1) | f4; -+ w = (w << 5) | f5; -+ w = (w << 5) | f6; -+ w = (w << 5) | f7; -+ return w; -+} -+ - //ZZ #define X0000 BITS4(0,0,0,0) - //ZZ #define X0001 BITS4(0,0,0,1) - //ZZ #define X0010 BITS4(0,0,1,0) -@@ -4339,6 +4435,44 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, - = X_3_8_5_6_5_5(X000, X11110001, sM, (b1512 << 2) | X10, sN, sD); - goto done; - } -+ case ARM64in_VTriD: { -+ /* 31 20 15 14 9 4 -+ 000 11111 010 m 0 a n d FMADD Dd,Dn,Dm,Da -+ ---------------- 1 ------ FMSUB ----------- -+ */ -+ UInt dD = dregEnc(i->ARM64in.VTriD.dst); -+ UInt dN = dregEnc(i->ARM64in.VTriD.arg1); -+ UInt dM = dregEnc(i->ARM64in.VTriD.arg2); -+ UInt dA = dregEnc(i->ARM64in.VTriD.arg3); -+ UInt b15 = 2; /* impossible */ -+ switch (i->ARM64in.VTriD.op) { -+ case ARM64fpt_FMADD: b15 = 0; break; -+ case ARM64fpt_FMSUB: b15 = 1; break; -+ default: goto bad; -+ } -+ vassert(b15 < 2); -+ *p++ = X_3_8_5_1_5_5_5(X000, X11111010, dM, b15, dA, dN, dD); -+ goto done; -+ } -+ case ARM64in_VTriS: { -+ /* 31 20 15 14 9 4 -+ 000 11111 000 m 0 a n d FMADD Dd,Dn,Dm,Da -+ ---------------- 1 ------ FMSUB ----------- -+ */ -+ UInt dD = dregEnc(i->ARM64in.VTriD.dst); -+ UInt dN = dregEnc(i->ARM64in.VTriD.arg1); -+ UInt dM = dregEnc(i->ARM64in.VTriD.arg2); -+ UInt dA = dregEnc(i->ARM64in.VTriD.arg3); -+ UInt b15 = 2; /* impossible */ -+ switch (i->ARM64in.VTriD.op) { -+ case ARM64fpt_FMADD: b15 = 0; break; -+ case ARM64fpt_FMSUB: b15 = 1; break; -+ default: goto bad; -+ } -+ vassert(b15 < 2); -+ *p++ = X_3_8_5_1_5_5_5(X000, X11111000, dM, b15, dA, dN, dD); -+ goto done; -+ } - case ARM64in_VCmpD: { - /* 000 11110 01 1 m 00 1000 n 00 000 FCMP Dn, Dm */ - UInt dN = dregEnc(i->ARM64in.VCmpD.argL); -diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h -index 05dba7ab8..5a82564ce 100644 ---- a/VEX/priv/host_arm64_defs.h -+++ b/VEX/priv/host_arm64_defs.h -@@ -289,6 +289,14 @@ typedef - } - ARM64FpBinOp; - -+typedef -+ enum { -+ ARM64fpt_FMADD=105, -+ ARM64fpt_FMSUB, -+ ARM64fpt_INVALID -+ } -+ ARM64FpTriOp; -+ - typedef - enum { - ARM64fpu_NEG=110, -@@ -498,6 +506,8 @@ typedef - ARM64in_VUnaryS, - ARM64in_VBinD, - ARM64in_VBinS, -+ ARM64in_VTriD, -+ ARM64in_VTriS, - ARM64in_VCmpD, - ARM64in_VCmpS, - ARM64in_VFCSel, -@@ -799,6 +809,22 @@ typedef - HReg argL; - HReg argR; - } VBinS; -+ /* 64-bit FP ternary arithmetic */ -+ struct { -+ ARM64FpTriOp op; -+ HReg dst; -+ HReg arg1; -+ HReg arg2; -+ HReg arg3; -+ } VTriD; -+ /* 32-bit FP ternary arithmetic */ -+ struct { -+ ARM64FpTriOp op; -+ HReg dst; -+ HReg arg1; -+ HReg arg2; -+ HReg arg3; -+ } VTriS; - /* 64-bit FP compare */ - struct { - HReg argL; -@@ -970,6 +996,10 @@ extern ARM64Instr* ARM64Instr_VUnaryD ( ARM64FpUnaryOp op, HReg dst, HReg src ); - extern ARM64Instr* ARM64Instr_VUnaryS ( ARM64FpUnaryOp op, HReg dst, HReg src ); - extern ARM64Instr* ARM64Instr_VBinD ( ARM64FpBinOp op, HReg, HReg, HReg ); - extern ARM64Instr* ARM64Instr_VBinS ( ARM64FpBinOp op, HReg, HReg, HReg ); -+extern ARM64Instr* ARM64Instr_VTriD ( ARM64FpTriOp op, HReg dst, -+ HReg, HReg, HReg ); -+extern ARM64Instr* ARM64Instr_VTriS ( ARM64FpTriOp op, HReg dst, -+ HReg, HReg, HReg ); - extern ARM64Instr* ARM64Instr_VCmpD ( HReg argL, HReg argR ); - extern ARM64Instr* ARM64Instr_VCmpS ( HReg argL, HReg argR ); - extern ARM64Instr* ARM64Instr_VFCSel ( HReg dst, HReg argL, HReg argR, -diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c -index 2f19eab81..da1218715 100644 ---- a/VEX/priv/host_arm64_isel.c -+++ b/VEX/priv/host_arm64_isel.c -@@ -3255,6 +3255,25 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e ) - } - } - -+ if (e->tag == Iex_Qop) { -+ IRQop* qop = e->Iex.Qop.details; -+ ARM64FpTriOp triop = ARM64fpt_INVALID; -+ switch (qop->op) { -+ case Iop_MAddF64: triop = ARM64fpt_FMADD; break; -+ case Iop_MSubF64: triop = ARM64fpt_FMSUB; break; -+ default: break; -+ } -+ if (triop != ARM64fpt_INVALID) { -+ HReg N = iselDblExpr(env, qop->arg2); -+ HReg M = iselDblExpr(env, qop->arg3); -+ HReg A = iselDblExpr(env, qop->arg4); -+ HReg dst = newVRegD(env); -+ set_FPCR_rounding_mode(env, qop->arg1); -+ addInstr(env, ARM64Instr_VTriD(triop, dst, N, M, A)); -+ return dst; -+ } -+ } -+ - if (e->tag == Iex_ITE) { - /* ITE(ccexpr, iftrue, iffalse) */ - ARM64CondCode cc; -@@ -3450,6 +3469,26 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e ) - return dst; - } - -+ if (e->tag == Iex_Qop) { -+ IRQop* qop = e->Iex.Qop.details; -+ ARM64FpTriOp triop = ARM64fpt_INVALID; -+ switch (qop->op) { -+ case Iop_MAddF32: triop = ARM64fpt_FMADD; break; -+ case Iop_MSubF32: triop = ARM64fpt_FMSUB; break; -+ default: break; -+ } -+ -+ if (triop != ARM64fpt_INVALID) { -+ HReg N = iselFltExpr(env, qop->arg2); -+ HReg M = iselFltExpr(env, qop->arg3); -+ HReg A = iselFltExpr(env, qop->arg4); -+ HReg dst = newVRegD(env); -+ set_FPCR_rounding_mode(env, qop->arg1); -+ addInstr(env, ARM64Instr_VTriS(triop, dst, N, M, A)); -+ return dst; -+ } -+ } -+ - ppIRExpr(e); - vpanic("iselFltExpr_wrk"); - } -diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am -index 7b3ebbdca..4ecab36ad 100644 ---- a/none/tests/arm64/Makefile.am -+++ b/none/tests/arm64/Makefile.am -@@ -10,14 +10,16 @@ EXTRA_DIST = \ - integer.stdout.exp integer.stderr.exp integer.vgtest \ - memory.stdout.exp memory.stderr.exp memory.vgtest \ - atomics_v81.stdout.exp atomics_v81.stderr.exp atomics_v81.vgtest \ -- simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest -+ simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest \ -+ fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest - - check_PROGRAMS = \ - allexec \ - cvtf_imm \ - fp_and_simd \ - integer \ -- memory -+ memory \ -+ fmadd_sub - - if BUILD_ARMV8_CRC_TESTS - check_PROGRAMS += crc32 -diff --git a/none/tests/arm64/fmadd_sub.c b/none/tests/arm64/fmadd_sub.c -new file mode 100644 -index 000000000..dcab22d1b ---- /dev/null -+++ b/none/tests/arm64/fmadd_sub.c -@@ -0,0 +1,98 @@ -+#include -+#include -+#include -+#include -+ -+#define COUNT 5 -+ -+static void -+print_float(const char *ident, float x) -+{ -+ union -+ { -+ float f; -+ uint32_t i; -+ } u; -+ -+ u.f = x; -+ printf("%s = %08x = %.17g\n", ident, u.i, x); -+} -+ -+static void -+print_double(const char *ident, double x) -+{ -+ union -+ { -+ double f; -+ uint64_t i; -+ } u; -+ -+ u.f = x; -+ printf("%s = %016lx = %.17g\n", ident, u.i, x); -+} -+ -+int -+main(int argc, char **argv) -+{ -+ float x[] = { 55, 0.98076171874999996, 0, 1, 0xFFFFFFFF } ; -+ float y[] = { 0.69314718055994529, 1.015625, 0, 1, 0xFFFFFFFF }; -+ float z[] = { 38.123094930796988, 1, 0, 1, 0xFFFFFFFF }; -+ float dst = -5; -+ -+ double dx[] = { 55, 0.98076171874999996, 0, 1, 0xFFFFFFFF } ; -+ double dy[] = { 0.69314718055994529, 1.015625, 0, 1, 0xFFFFFFFF }; -+ double dz[] = { 38.123094930796988, 1, 0, 1, 0xFFFFFFFF }; -+ double ddst= -5; -+ -+ int i; -+ -+ for (i = 0; i < COUNT; i++) { -+ //32bit variant -+ asm("fmadd %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); -+ printf("FMADD 32bit: dst = z + x * y\n"); -+ printf("%f = %f + %f * %f\n", dst, z[i], x[i], y[i]); -+ print_float("dst", dst); -+ -+ // Floating-point negated fused multiply-add -+ asm("fnmadd %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); -+ printf("FNMADD 32bit: dst = -z + (-x) * y\n"); -+ printf("%f = -%f + (-%f) * %f\n", dst, z[i], x[i], y[i]); -+ print_float("dst", dst); -+ -+ asm("fmsub %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); -+ printf("FMSUB 32bit: dst = z + (-x) * y\n"); -+ printf("%f = %f + (-%f) * %f\n", dst, z[i], x[i], y[i]); -+ print_float("dst", dst); -+ -+ asm("fnmsub %s0, %s1, %s2, %s3\n;" : "=w"(dst) : "w"(x[i]), "w"(y[i]), "w"(z[i])); -+ printf("FNMSUB 32bit: dst = -z + x * y\n"); -+ printf("%f = -%f + %f * %f\n", dst, z[i], x[i], y[i]); -+ print_float("dst", dst); -+ -+ //64bit variant -+ asm("fmadd %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); -+ printf("FMADD 64bit: dst = z + x * y\n"); -+ printf("%f = %f + %f * %f\n", ddst, dz[i], dx[i], dy[i]); -+ print_double("dst", ddst); -+ -+ asm("fnmadd %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); -+ printf("FNMADD 64bit: dst = -z + (-x) * y\n"); -+ printf("%f = -%f - %f * %f\n", ddst, dz[i], dx[i], dy[i]); -+ print_double("dst", ddst); -+ -+ asm("fmsub %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); -+ printf("FMSUB 64bit: dst = z + (-x) * y\n"); -+ printf("%f = %f + (-%f) * %f\n", ddst, dz[i], dx[i], dy[i]); -+ print_double("dst", ddst); -+ -+ asm("fnmsub %d0, %d1, %d2, %d3\n;" : "=w"(ddst) : "w"(dx[i]), "w"(dy[i]), "w"(dz[i])); -+ printf("FNMSUB 64bit: dst = -z + x * y\n"); -+ printf("%f = -%f + %f * %f\n", ddst, dz[i], dx[i], dy[i]); -+ print_double("dst", ddst); -+ -+ printf("\n"); -+ } -+ -+ return 0; -+} -+ -diff --git a/none/tests/arm64/fmadd_sub.stderr.exp b/none/tests/arm64/fmadd_sub.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/none/tests/arm64/fmadd_sub.stdout.exp b/none/tests/arm64/fmadd_sub.stdout.exp -new file mode 100644 -index 000000000..f1824b12b ---- /dev/null -+++ b/none/tests/arm64/fmadd_sub.stdout.exp -@@ -0,0 +1,125 @@ -+FMADD 32bit: dst = z + x * y -+76.246193 = 38.123096 + 55.000000 * 0.693147 -+dst = 42987e0d = 76.246192932128906 -+FNMADD 32bit: dst = -z + (-x) * y -+-76.246193 = -38.123096 + (-55.000000) * 0.693147 -+dst = c2987e0d = -76.246192932128906 -+FMSUB 32bit: dst = z + (-x) * y -+0.000001 = 38.123096 + (-55.000000) * 0.693147 -+dst = 35c00000 = 1.430511474609375e-06 -+FNMSUB 32bit: dst = -z + x * y -+-0.000001 = -38.123096 + 55.000000 * 0.693147 -+dst = b5c00000 = -1.430511474609375e-06 -+FMADD 64bit: dst = z + x * y -+76.246190 = 38.123095 + 55.000000 * 0.693147 -+dst = 40530fc1931f09c9 = 76.246189861593976 -+FNMADD 64bit: dst = -z + (-x) * y -+-76.246190 = -38.123095 - 55.000000 * 0.693147 -+dst = c0530fc1931f09c9 = -76.246189861593976 -+FMSUB 64bit: dst = z + (-x) * y -+-0.000000 = 38.123095 + (-55.000000) * 0.693147 -+dst = bce9000000000000 = -2.7755575615628914e-15 -+FNMSUB 64bit: dst = -z + x * y -+0.000000 = -38.123095 + 55.000000 * 0.693147 -+dst = 3ce9000000000000 = 2.7755575615628914e-15 -+ -+FMADD 32bit: dst = z + x * y -+1.996086 = 1.000000 + 0.980762 * 1.015625 -+dst = 3fff7fc0 = 1.9960861206054688 -+FNMADD 32bit: dst = -z + (-x) * y -+-1.996086 = -1.000000 + (-0.980762) * 1.015625 -+dst = bfff7fc0 = -1.9960861206054688 -+FMSUB 32bit: dst = z + (-x) * y -+0.003914 = 1.000000 + (-0.980762) * 1.015625 -+dst = 3b80401a = 0.00391389150172472 -+FNMSUB 32bit: dst = -z + x * y -+-0.003914 = -1.000000 + 0.980762 * 1.015625 -+dst = bb80401a = -0.00391389150172472 -+FMADD 64bit: dst = z + x * y -+1.996086 = 1.000000 + 0.980762 * 1.015625 -+dst = 3fffeff800000000 = 1.9960861206054688 -+FNMADD 64bit: dst = -z + (-x) * y -+-1.996086 = -1.000000 - 0.980762 * 1.015625 -+dst = bfffeff800000000 = -1.9960861206054688 -+FMSUB 64bit: dst = z + (-x) * y -+0.003914 = 1.000000 + (-0.980762) * 1.015625 -+dst = 3f70080000000034 = 0.0039138793945312951 -+FNMSUB 64bit: dst = -z + x * y -+-0.003914 = -1.000000 + 0.980762 * 1.015625 -+dst = bf70080000000034 = -0.0039138793945312951 -+ -+FMADD 32bit: dst = z + x * y -+0.000000 = 0.000000 + 0.000000 * 0.000000 -+dst = 00000000 = 0 -+FNMADD 32bit: dst = -z + (-x) * y -+-0.000000 = -0.000000 + (-0.000000) * 0.000000 -+dst = 80000000 = -0 -+FMSUB 32bit: dst = z + (-x) * y -+0.000000 = 0.000000 + (-0.000000) * 0.000000 -+dst = 00000000 = 0 -+FNMSUB 32bit: dst = -z + x * y -+0.000000 = -0.000000 + 0.000000 * 0.000000 -+dst = 00000000 = 0 -+FMADD 64bit: dst = z + x * y -+0.000000 = 0.000000 + 0.000000 * 0.000000 -+dst = 0000000000000000 = 0 -+FNMADD 64bit: dst = -z + (-x) * y -+-0.000000 = -0.000000 - 0.000000 * 0.000000 -+dst = 8000000000000000 = -0 -+FMSUB 64bit: dst = z + (-x) * y -+0.000000 = 0.000000 + (-0.000000) * 0.000000 -+dst = 0000000000000000 = 0 -+FNMSUB 64bit: dst = -z + x * y -+0.000000 = -0.000000 + 0.000000 * 0.000000 -+dst = 0000000000000000 = 0 -+ -+FMADD 32bit: dst = z + x * y -+2.000000 = 1.000000 + 1.000000 * 1.000000 -+dst = 40000000 = 2 -+FNMADD 32bit: dst = -z + (-x) * y -+-2.000000 = -1.000000 + (-1.000000) * 1.000000 -+dst = c0000000 = -2 -+FMSUB 32bit: dst = z + (-x) * y -+0.000000 = 1.000000 + (-1.000000) * 1.000000 -+dst = 00000000 = 0 -+FNMSUB 32bit: dst = -z + x * y -+0.000000 = -1.000000 + 1.000000 * 1.000000 -+dst = 00000000 = 0 -+FMADD 64bit: dst = z + x * y -+2.000000 = 1.000000 + 1.000000 * 1.000000 -+dst = 4000000000000000 = 2 -+FNMADD 64bit: dst = -z + (-x) * y -+-2.000000 = -1.000000 - 1.000000 * 1.000000 -+dst = c000000000000000 = -2 -+FMSUB 64bit: dst = z + (-x) * y -+0.000000 = 1.000000 + (-1.000000) * 1.000000 -+dst = 0000000000000000 = 0 -+FNMSUB 64bit: dst = -z + x * y -+0.000000 = -1.000000 + 1.000000 * 1.000000 -+dst = 0000000000000000 = 0 -+ -+FMADD 32bit: dst = z + x * y -+18446744073709551616.000000 = 4294967296.000000 + 4294967296.000000 * 4294967296.000000 -+dst = 5f800000 = 1.8446744073709552e+19 -+FNMADD 32bit: dst = -z + (-x) * y -+-18446744073709551616.000000 = -4294967296.000000 + (-4294967296.000000) * 4294967296.000000 -+dst = df800000 = -1.8446744073709552e+19 -+FMSUB 32bit: dst = z + (-x) * y -+-18446744073709551616.000000 = 4294967296.000000 + (-4294967296.000000) * 4294967296.000000 -+dst = df800000 = -1.8446744073709552e+19 -+FNMSUB 32bit: dst = -z + x * y -+18446744073709551616.000000 = -4294967296.000000 + 4294967296.000000 * 4294967296.000000 -+dst = 5f800000 = 1.8446744073709552e+19 -+FMADD 64bit: dst = z + x * y -+18446744069414584320.000000 = 4294967295.000000 + 4294967295.000000 * 4294967295.000000 -+dst = 43efffffffe00000 = 1.8446744069414584e+19 -+FNMADD 64bit: dst = -z + (-x) * y -+-18446744069414584320.000000 = -4294967295.000000 - 4294967295.000000 * 4294967295.000000 -+dst = c3efffffffe00000 = -1.8446744069414584e+19 -+FMSUB 64bit: dst = z + (-x) * y -+-18446744060824649728.000000 = 4294967295.000000 + (-4294967295.000000) * 4294967295.000000 -+dst = c3efffffffa00000 = -1.844674406082465e+19 -+FNMSUB 64bit: dst = -z + x * y -+18446744060824649728.000000 = -4294967295.000000 + 4294967295.000000 * 4294967295.000000 -+dst = 43efffffffa00000 = 1.844674406082465e+19 -+ -diff --git a/none/tests/arm64/fmadd_sub.vgtest b/none/tests/arm64/fmadd_sub.vgtest -new file mode 100644 -index 000000000..b4c53eea4 ---- /dev/null -+++ b/none/tests/arm64/fmadd_sub.vgtest -@@ -0,0 +1,3 @@ -+prog: fmadd_sub -+prereq: test -x fmadd_sub -+vgopts: -q --- -2.18.4 - -diff --git a/VEX/priv/guest_generic_bb_to_IR.c b/VEX/priv/guest_generic_bb_to_IR.c -index 0cee970e4..1e72ddacd 100644 ---- a/VEX/priv/guest_generic_bb_to_IR.c -+++ b/VEX/priv/guest_generic_bb_to_IR.c -@@ -422,6 +422,8 @@ static Bool expr_is_guardable ( const IRExpr* e ) - return !primopMightTrap(e->Iex.Binop.op); - case Iex_Triop: - return !primopMightTrap(e->Iex.Triop.details->op); -+ case Iex_Qop: -+ return !primopMightTrap(e->Iex.Qop.details->op); - case Iex_ITE: - case Iex_CCall: - case Iex_Get: diff --git a/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch b/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch deleted file mode 100644 index 14b45d4..0000000 --- a/valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c -index e1127ffe2..1bc5f8f05 100644 ---- a/coregrind/m_debuginfo/d3basics.c -+++ b/coregrind/m_debuginfo/d3basics.c -@@ -523,6 +523,7 @@ static Bool get_Dwarf_Reg( /*OUT*/Addr* a, Word regno, const RegSummary* regs ) - if (regno == 30) { *a = regs->fp; return True; } - # elif defined(VGP_arm64_linux) - if (regno == 31) { *a = regs->sp; return True; } -+ if (regno == 29) { *a = regs->fp; return True; } - # else - # error "Unknown platform" - # endif -diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c -index c4a5ea593..bc2578b37 100644 ---- a/coregrind/m_debuginfo/debuginfo.c -+++ b/coregrind/m_debuginfo/debuginfo.c -@@ -2874,7 +2874,9 @@ UWord evalCfiExpr ( const XArray* exprs, Int ix, - # elif defined(VGA_ppc32) || defined(VGA_ppc64be) \ - || defined(VGA_ppc64le) - # elif defined(VGP_arm64_linux) -+ case Creg_ARM64_SP: return eec->uregs->sp; - case Creg_ARM64_X30: return eec->uregs->x30; -+ case Creg_ARM64_X29: return eec->uregs->x29; - # else - # error "Unsupported arch" - # endif -diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h -index 39456eccb..ae44ca34e 100644 ---- a/coregrind/m_debuginfo/priv_storage.h -+++ b/coregrind/m_debuginfo/priv_storage.h -@@ -415,7 +415,9 @@ typedef - Creg_ARM_R15, - Creg_ARM_R14, - Creg_ARM_R7, -+ Creg_ARM64_SP, - Creg_ARM64_X30, -+ Creg_ARM64_X29, - Creg_S390_IA, - Creg_S390_SP, - Creg_S390_FP, -diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c -index 3996623ed..bcacca4cb 100644 ---- a/coregrind/m_debuginfo/readdwarf.c -+++ b/coregrind/m_debuginfo/readdwarf.c -@@ -2816,7 +2816,12 @@ static Int copy_convert_CfiExpr_tree ( XArray* dstxa, - if (dwreg == srcuc->ra_reg) - return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_IP ); - # elif defined(VGA_arm64) -- I_die_here; -+ if (dwreg == SP_REG) -+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_SP ); -+ if (dwreg == FP_REG) -+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_X29 ); -+ if (dwreg == srcuc->ra_reg) -+ return ML_(CfiExpr_CfiReg)( dstxa, Creg_ARM64_X30 ); - # elif defined(VGA_ppc32) || defined(VGA_ppc64be) \ - || defined(VGA_ppc64le) - # else -diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c -index 8667d123f..48a92b402 100644 ---- a/coregrind/m_debuginfo/storage.c -+++ b/coregrind/m_debuginfo/storage.c -@@ -1002,7 +1002,9 @@ static void ppCfiReg ( CfiReg reg ) - case Creg_ARM_R15: VG_(printf)("R15"); break; - case Creg_ARM_R14: VG_(printf)("R14"); break; - case Creg_ARM_R7: VG_(printf)("R7"); break; -+ case Creg_ARM64_SP: VG_(printf)("SP"); break; - case Creg_ARM64_X30: VG_(printf)("X30"); break; -+ case Creg_ARM64_X29: VG_(printf)("X29"); break; - case Creg_MIPS_RA: VG_(printf)("RA"); break; - case Creg_S390_IA: VG_(printf)("IA"); break; - case Creg_S390_SP: VG_(printf)("SP"); break; diff --git a/valgrind-3.16.1-dl_runtime_resolve.patch b/valgrind-3.16.1-dl_runtime_resolve.patch deleted file mode 100644 index 0a34759..0000000 --- a/valgrind-3.16.1-dl_runtime_resolve.patch +++ /dev/null @@ -1,206 +0,0 @@ -commit f4abcc05fdba3f25890a9b30b71d511ccc906d46 -Author: Mark Wielaard -Date: Mon Jul 27 22:43:28 2020 +0200 - - Incorrect call-graph tracking due to new _dl_runtime_resolve_xsave* - - Newer glibc have alternate ld.so _ld_runtime_resolve functions. - Namely _dl_runtime_resolve_xsave and _dl_runtime_resolve_xsave'2 - - This patch recognizes the xsave, xsvec and fxsave variants and - changes callgrind so that any variant counts as _dl_runtime_resolve. - - Original patch by paulo.cesar.pereira.de.andrade@gmail.com - https://bugs.kde.org/show_bug.cgi?id=415293 - -diff --git a/callgrind/fn.c b/callgrind/fn.c -index e9d8dd214..7cce1a0c7 100644 ---- a/callgrind/fn.c -+++ b/callgrind/fn.c -@@ -30,8 +30,11 @@ - - static fn_array current_fn_active; - --static Addr runtime_resolve_addr = 0; --static int runtime_resolve_length = 0; -+/* x86_64 defines 4 variants. */ -+#define MAX_RESOLVE_ADDRS 4 -+static int runtime_resolve_addrs = 0; -+static Addr runtime_resolve_addr[MAX_RESOLVE_ADDRS]; -+static int runtime_resolve_length[MAX_RESOLVE_ADDRS]; - - // a code pattern is a list of tuples (start offset, length) - struct chunk_t { int start, len; }; -@@ -56,6 +59,9 @@ static Bool check_code(obj_node* obj, - /* first chunk of pattern should always start at offset 0 and - * have at least 3 bytes */ - CLG_ASSERT((pat->chunk[0].start == 0) && (pat->chunk[0].len >2)); -+ -+ /* and we cannot be called more than MAX_RESOLVE_ADDRS times */ -+ CLG_ASSERT(runtime_resolve_addrs < MAX_RESOLVE_ADDRS); - - CLG_DEBUG(1, "check_code: %s, pattern %s, check %d bytes of [%x %x %x...]\n", - obj->name, pat->name, pat->chunk[0].len, code[0], code[1], code[2]); -@@ -93,8 +99,9 @@ static Bool check_code(obj_node* obj, - pat->name, obj->name + obj->last_slash_pos, - addr - obj->start, addr, pat->len); - -- runtime_resolve_addr = addr; -- runtime_resolve_length = pat->len; -+ runtime_resolve_addr[runtime_resolve_addrs] = addr; -+ runtime_resolve_length[runtime_resolve_addrs] = pat->len; -+ runtime_resolve_addrs++; - return True; - } - } -@@ -138,8 +145,9 @@ static Bool search_runtime_resolve(obj_node* obj) - "x86-glibc2.8", 30, {{ 0,12 }, { 16,14 }, { 30,0}} }; - - if (VG_(strncmp)(obj->name, "/lib/ld", 7) != 0) return False; -- if (check_code(obj, code, &pat)) return True; -- if (check_code(obj, code_28, &pat_28)) return True; -+ Bool pat_p = check_code(obj, code, &pat); -+ Bool pat_28_p = check_code(obj, code_28, &pat_28); -+ if (pat_p || pat_28_p) return True; - return False; - #endif - -@@ -186,9 +194,98 @@ static Bool search_runtime_resolve(obj_node* obj) - static struct pattern pat = { - "amd64-def", 110, {{ 0,62 }, { 66,44 }, { 110,0 }} }; - -+ static UChar code_xsavec[] = { -+ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xc0, -+ /* 8*/ 0x48, 0x2b, 0x25, 0x00, 0x00, 0x00, 0x00, /* sub (%rip),%rsp */ -+ /*15*/ 0x48, -+ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, -+ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, -+ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, -+ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, -+ /*48*/ 0x30, 0xb8, 0xee, 0x00, 0x00, 0x00, 0x31, 0xd2, -+ /*56*/ 0x48, 0x89, 0x94, 0x24, 0x50, 0x02, 0x00, 0x00, -+ /*64*/ 0x48, 0x89, 0x94, 0x24, 0x58, 0x02, 0x00, 0x00, -+ /*72*/ 0x48, 0x89, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, -+ /*80*/ 0x48, 0x89, 0x94, 0x24, 0x68, 0x02, 0x00, 0x00, -+ /*88*/ 0x48, 0x89, 0x94, 0x24, 0x70, 0x02, 0x00, 0x00, -+ /*96*/ 0x48, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, -+ /*04*/ 0x0f, 0xc7, 0x64, 0x24, 0x40, 0x48, 0x8b, 0x73, -+ /*112*/0x10, 0x48, 0x8b, 0x7b, 0x08, -+ /*117*/0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ -+ /*122*/0x49, 0x89, 0xc3, 0xb8, 0xee, 0x00, -+ /*128*/0x00, 0x00, 0x31, 0xd2, 0x0f, 0xae, 0x6c, 0x24, -+ /*136*/0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, 0x4c, 0x8b, -+ /*144*/0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, 0x24, 0x20, -+ /*152*/0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, 0x8b, 0x54, -+ /*160*/0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, -+ /*168*/0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, 0x48, 0x8b, -+ /*176*/0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, 0xf2, 0x41, -+ /*184*/0xff, 0xe3 }; -+ static struct pattern pat_xsavec = { -+ "amd64-xsavec", 186, {{ 0,11 }, { 15,103 }, {122,64}, { 186,0 }} }; -+ -+ static UChar code_xsave[] = { -+ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xc0, -+ /* 8*/ 0x48, 0x2b, 0x25, 0x00, 0x00, 0x00, 0x00, /* sub (%rip),%rsp */ -+ /*15*/ 0x48, -+ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, -+ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, -+ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, -+ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, -+ /*48*/ 0x30, 0xb8, 0xee, 0x00, 0x00, 0x00, 0x31, 0xd2, -+ /*56*/ 0x48, 0x89, 0x94, 0x24, 0x40, 0x02, 0x00, 0x00, -+ /*64*/ 0x48, 0x89, 0x94, 0x24, 0x48, 0x02, 0x00, 0x00, -+ /*72*/ 0x48, 0x89, 0x94, 0x24, 0x50, 0x02, 0x00, 0x00, -+ /*80*/ 0x48, 0x89, 0x94, 0x24, 0x58, 0x02, 0x00, 0x00, -+ /*88*/ 0x48, 0x89, 0x94, 0x24, 0x60, 0x02, 0x00, 0x00, -+ /*96*/ 0x48, 0x89, 0x94, 0x24, 0x68, 0x02, 0x00, 0x00, -+ /*104*/0x48, 0x89, 0x94, 0x24, 0x70, 0x02, 0x00, 0x00, -+ /*112*/0x48, 0x89, 0x94, 0x24, 0x78, 0x02, 0x00, 0x00, -+ /*120*/0x0f, 0xae, 0x64, 0x24, 0x40, 0x48, 0x8b, 0x73, -+ /*128*/0x10, 0x48, 0x8b, 0x7b, 0x08, -+ /*133*/0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ -+ /*138*/0x49, 0x89, 0xc3, 0xb8, 0xee, 0x00, -+ /*144*/0x00, 0x00, 0x31, 0xd2, 0x0f, 0xae, 0x6c, 0x24, -+ /*152*/0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, 0x4c, 0x8b, -+ /*160*/0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, 0x24, 0x20, -+ /*168*/0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, 0x8b, 0x54, -+ /*176*/0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, -+ /*184*/0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, 0x48, 0x8b, -+ /*192*/0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, 0xf2, 0x41, -+ /*200*/0xff, 0xe3 }; -+ static struct pattern pat_xsave = { -+ "amd64-xsave", 202, {{ 0,11 }, { 15,119 }, {138,64}, { 202,0 }} }; -+ -+ static UChar code_fxsave[] = { -+ /* 0*/ 0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xe4, 0xf0, -+ /* 8*/ 0x48, 0x81, 0xec, 0x40, 0x02, 0x00, 0x00, 0x48, -+ /*16*/ 0x89, 0x04, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, -+ /*24*/ 0x48, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x74, -+ /*32*/ 0x24, 0x18, 0x48, 0x89, 0x7c, 0x24, 0x20, 0x4c, -+ /*40*/ 0x89, 0x44, 0x24, 0x28, 0x4c, 0x89, 0x4c, 0x24, -+ /*48*/ 0x30, 0x0f, 0xae, 0x44, 0x24, 0x40, 0x48, 0x8b, -+ /*56*/ 0x73, 0x10, 0x48, 0x8b, 0x7b, 0x08, -+ /*62*/ 0xe8, 0x00, 0x00, 0x00, 0x00, /* callq <_dl_fixup> */ -+ /*67*/ 0x49, 0x89, 0xc3, 0x0f, 0xae, -+ /*72*/ 0x4c, 0x24, 0x40, 0x4c, 0x8b, 0x4c, 0x24, 0x30, -+ /*80*/ 0x4c, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x7c, -+ /*88*/ 0x24, 0x20, 0x48, 0x8b, 0x74, 0x24, 0x18, 0x48, -+ /*96*/ 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, -+ /*104*/0x08, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0xdc, -+ /*112*/0x48, 0x8b, 0x1c, 0x24, 0x48, 0x83, 0xc4, 0x18, -+ /*120*/0xf2, 0x41, 0xff, 0xe3 }; -+ static struct pattern pat_fxsave = { -+ "amd64-fxsave", 124, {{ 0,63 }, { 67,57 }, { 124,0 }} }; -+ - if ((VG_(strncmp)(obj->name, "/lib/ld", 7) != 0) && -- (VG_(strncmp)(obj->name, "/lib64/ld", 9) != 0)) return False; -- return check_code(obj, code, &pat); -+ (VG_(strncmp)(obj->name, "/lib64/ld", 9) != 0) && -+ (VG_(strncmp)(obj->name, "/usr/lib/ld", 11) != 0) && -+ (VG_(strncmp)(obj->name, "/usr/lib64/ld", 13) != 0)) return False; -+ Bool pat_p = check_code(obj, code, &pat); -+ Bool pat_xsavec_p = check_code(obj, code_xsavec, &pat_xsavec); -+ Bool pat_xsave_p = check_code(obj, code_xsave, &pat_xsave); -+ Bool pat_fxsave_p = check_code(obj, code_fxsave, &pat_fxsave); -+ if (pat_p || pat_xsavec_p || pat_xsave_p || pat_fxsave_p) return True; - #endif - - /* For other platforms, no patterns known */ -@@ -254,7 +351,7 @@ obj_node* new_obj_node(DebugInfo* di, obj_node* next) - i++; - } - -- if (runtime_resolve_addr == 0) search_runtime_resolve(obj); -+ if (runtime_resolve_addrs == 0) search_runtime_resolve(obj); - - return obj; - } -@@ -490,6 +587,7 @@ fn_node* CLG_(get_fn_node)(BB* bb) - DebugInfo* di; - UInt line_num; - fn_node* fn; -+ Int i; - - /* fn from debug info is idempotent for a BB */ - if (bb->fn) return bb->fn; -@@ -538,12 +636,14 @@ fn_node* CLG_(get_fn_node)(BB* bb) - } - if (0 == VG_(strcmp)(fnname, "_exit") && !exit_bb) - exit_bb = bb; -- -- if (runtime_resolve_addr && -- (bb_addr(bb) >= runtime_resolve_addr) && -- (bb_addr(bb) < runtime_resolve_addr + runtime_resolve_length)) { -- /* BB in runtime_resolve found by code check; use this name */ -- fnname = "_dl_runtime_resolve"; -+ -+ for (i = 0; i < runtime_resolve_addrs; i++) { -+ if ((bb_addr(bb) >= runtime_resolve_addr[i]) && -+ (bb_addr(bb) < runtime_resolve_addr[i] + runtime_resolve_length[i])) { -+ /* BB in runtime_resolve found by code check; use this name */ -+ fnname = "_dl_runtime_resolve"; -+ break; -+ } - } - - /* get fn_node struct for this function */ diff --git a/valgrind-3.16.1-dwarf5.patch b/valgrind-3.16.1-dwarf5.patch deleted file mode 100644 index 24388cb..0000000 --- a/valgrind-3.16.1-dwarf5.patch +++ /dev/null @@ -1,2410 +0,0 @@ -From 256a67e6a5a07e37997d3a5ef64204a99b8e5a50 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Mon, 25 Jan 2021 15:33:34 +0100 -Subject: [PATCH] DWARF5 - ---- - coregrind/m_debuginfo/d3basics.c | 99 ++++ - coregrind/m_debuginfo/priv_d3basics.h | 195 +++++- - coregrind/m_debuginfo/priv_readdwarf.h | 3 +- - coregrind/m_debuginfo/priv_readdwarf3.h | 3 +- - coregrind/m_debuginfo/readdwarf.c | 465 ++++++++++++--- - coregrind/m_debuginfo/readdwarf3.c | 748 +++++++++++++++++++----- - coregrind/m_debuginfo/readelf.c | 33 +- - coregrind/m_debuginfo/readmacho.c | 14 +- - 8 files changed, 1304 insertions(+), 256 deletions(-) - -diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c -index b6d13c118..e1127ffe2 100644 ---- a/coregrind/m_debuginfo/d3basics.c -+++ b/coregrind/m_debuginfo/d3basics.c -@@ -128,6 +128,16 @@ const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ) - case DW_TAG_type_unit: return "DW_TAG_type_unit"; - case DW_TAG_rvalue_reference_type: return "DW_TAG_rvalue_reference_type"; - case DW_TAG_template_alias: return "DW_TAG_template_alias"; -+ /* DWARF 5. */ -+ case DW_TAG_coarray_type: return "DW_TAG_coarray_type"; -+ case DW_TAG_generic_subrange: return "DW_TAG_generic_subrange"; -+ case DW_TAG_dynamic_type: return "DW_TAG_dynamic_type"; -+ case DW_TAG_atomic_type: return "DW_TAG_atomic_type"; -+ case DW_TAG_call_site: return "DW_TAG_call_site"; -+ case DW_TAG_call_site_parameter: -+ return "DW_TAG_call_site_parameter"; -+ case DW_TAG_skeleton_unit: return "DW_TAG_skeleton_unit"; -+ case DW_TAG_immutable_type: return "DW_TAG_immutable_type"; - /* SGI/MIPS Extensions. */ - case DW_TAG_MIPS_loop: return "DW_TAG_MIPS_loop"; - /* HP extensions. See: -@@ -140,6 +150,16 @@ const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ) - case DW_TAG_class_template: return "DW_TAG_class_template"; - case DW_TAG_GNU_BINCL: return "DW_TAG_GNU_BINCL"; - case DW_TAG_GNU_EINCL: return "DW_TAG_GNU_EINCL"; -+ case DW_TAG_GNU_template_template_param: -+ return "DW_TAG_GNU_template_template_param"; -+ case DW_TAG_GNU_template_parameter_pack: -+ return"DW_TAG_GNU_template_parameter_pack"; -+ case DW_TAG_GNU_formal_parameter_pack: -+ return "DW_TAG_GNU_formal_parameter_pack"; -+ case DW_TAG_GNU_call_site: -+ return "DW_TAG_GNU_call_site"; -+ case DW_TAG_GNU_call_site_parameter: -+ return "DW_TAG_GNU_call_site_parameter"; - /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ - case DW_TAG_upc_shared_type: return "DW_TAG_upc_shared_type"; - case DW_TAG_upc_strict_type: return "DW_TAG_upc_strict_type"; -@@ -180,6 +200,27 @@ const HChar* ML_(pp_DW_FORM) ( DW_FORM form ) - case DW_FORM_exprloc: return "DW_FORM_exprloc"; - case DW_FORM_flag_present:return "DW_FORM_flag_present"; - case DW_FORM_ref_sig8: return "DW_FORM_ref_sig8"; -+ case DW_FORM_strx: return "DW_FORM_strx"; -+ case DW_FORM_addrx: return "DW_FORM_addrx"; -+ case DW_FORM_ref_sup4: return "DW_FORM_ref_sup4"; -+ case DW_FORM_strp_sup: return "DW_FORM_strp_sup"; -+ case DW_FORM_data16: return "DW_FORM_data16"; -+ case DW_FORM_line_strp: return "DW_FORM_line_strp"; -+ case DW_FORM_implicit_const:return "DW_FORM_implicit_const"; -+ case DW_FORM_loclistx: return "DW_FORM_loclistx"; -+ case DW_FORM_rnglistx: return "DW_FORM_rnglistx"; -+ case DW_FORM_ref_sup8: return "DW_FORM_ref_sup8"; -+ case DW_FORM_strx1: return "DW_FORM_strx1"; -+ case DW_FORM_strx2: return "DW_FORM_strx2"; -+ case DW_FORM_strx3: return "DW_FORM_strx3"; -+ case DW_FORM_strx4: return "DW_FORM_strx4"; -+ case DW_FORM_addrx1: return "DW_FORM_addrx1"; -+ case DW_FORM_addrx2: return "DW_FORM_addrx2"; -+ case DW_FORM_addrx3: return "DW_FORM_addrx3"; -+ case DW_FORM_addrx4: return "DW_FORM_addrx4"; -+ /* GNU Debug Fission extensions. */ -+ case DW_FORM_GNU_addr_index:return "DW_FORM_GNU_addr_index"; -+ case DW_FORM_GNU_str_index:return "DW_FORM_GNU_str_index"; - case DW_FORM_GNU_ref_alt:return "DW_FORM_GNU_ref_alt"; - case DW_FORM_GNU_strp_alt:return "DW_FORM_GNU_strp_alt"; - } -@@ -286,6 +327,36 @@ const HChar* ML_(pp_DW_AT) ( DW_AT attr ) - case DW_AT_const_expr: return "DW_AT_const_expr"; - case DW_AT_enum_class: return "DW_AT_enum_class"; - case DW_AT_linkage_name: return "DW_AT_linkage_name"; -+ /* DWARF 5 values. */ -+ case DW_AT_string_length_bit_size: return "DW_AT_string_length_bit_size"; -+ case DW_AT_string_length_byte_size: return "DW_AT_string_length_byte_size"; -+ case DW_AT_rank: return "DW_AT_rank"; -+ case DW_AT_str_offsets_base: return "DW_AT_str_offsets_base"; -+ case DW_AT_addr_base: return "DW_AT_addr_base"; -+ case DW_AT_rnglists_base: return "DW_AT_rnglists_base"; -+ case DW_AT_dwo_name: return "DW_AT_dwo_name"; -+ case DW_AT_reference: return "DW_AT_reference"; -+ case DW_AT_rvalue_reference: return "DW_AT_rvalue_reference"; -+ case DW_AT_macros: return "DW_AT_macros"; -+ case DW_AT_call_all_calls: return "DW_AT_call_all_calls"; -+ case DW_AT_call_all_source_calls: return "DW_AT_call_all_source_calls"; -+ case DW_AT_call_all_tail_calls: return "DW_AT_call_all_tail_calls"; -+ case DW_AT_call_return_pc: return "DW_AT_call_return_pc"; -+ case DW_AT_call_value: return "DW_AT_call_value"; -+ case DW_AT_call_origin: return "DW_AT_call_origin"; -+ case DW_AT_call_parameter: return "DW_AT_call_parameter"; -+ case DW_AT_call_pc: return "DW_AT_call_pc"; -+ case DW_AT_call_tail_call: return "DW_AT_call_tail_call"; -+ case DW_AT_call_target: return "DW_AT_call_target"; -+ case DW_AT_call_target_clobbered: return "DW_AT_call_target_clobbered"; -+ case DW_AT_call_data_location: return "DW_AT_call_data_location"; -+ case DW_AT_call_data_value: return "DW_AT_call_data_value"; -+ case DW_AT_noreturn: return "DW_AT_noreturn"; -+ case DW_AT_alignment: return "DW_AT_alignment"; -+ case DW_AT_export_symbols: return "DW_AT_export_symbols"; -+ case DW_AT_deleted: return "DW_AT_deleted"; -+ case DW_AT_defaulted: return "DW_AT_defaulted"; -+ case DW_AT_loclists_base: return "DW_AT_loclists_base"; - /* SGI/MIPS extensions. */ - /* case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; */ - /* DW_AT_MIPS_fde == DW_AT_HP_unmodifiable */ -@@ -322,8 +393,36 @@ const HChar* ML_(pp_DW_AT) ( DW_AT attr ) - case DW_AT_body_begin: return "DW_AT_body_begin"; - case DW_AT_body_end: return "DW_AT_body_end"; - case DW_AT_GNU_vector: return "DW_AT_GNU_vector"; -+ case DW_AT_GNU_guarded_by: return "DW_AT_GNU_guarded_by"; -+ case DW_AT_GNU_pt_guarded_by: return "DW_AT_GNU_pt_guarded_by"; -+ case DW_AT_GNU_guarded: return "DW_AT_GNU_guarded"; -+ case DW_AT_GNU_pt_guarded: return "DW_AT_GNU_pt_guarded"; -+ case DW_AT_GNU_locks_excluded: return "DW_AT_GNU_locks_excluded"; -+ case DW_AT_GNU_exclusive_locks_required: return "DW_AT_GNU_exclusive_locks_required"; -+ case DW_AT_GNU_shared_locks_required: return "DW_AT_GNU_shared_locks_required"; -+ case DW_AT_GNU_odr_signature: return "DW_AT_GNU_odr_signature"; -+ case DW_AT_GNU_template_name: return "DW_AT_GNU_template_name"; -+ case DW_AT_GNU_call_site_value: return "DW_AT_GNU_call_site_value"; -+ case DW_AT_GNU_call_site_data_value: return "DW_AT_GNU_call_site_data_value"; -+ case DW_AT_GNU_call_site_target: return "DW_AT_GNU_call_site_target"; -+ case DW_AT_GNU_call_site_target_clobbered: return "DW_AT_GNU_call_site_target_clobbered"; -+ case DW_AT_GNU_tail_call: return "DW_AT_GNU_tail_call"; - case DW_AT_GNU_all_tail_call_sites: return "DW_AT_GNU_all_tail_call_sites"; - case DW_AT_GNU_all_call_sites: return "DW_AT_GNU_all_call_sites"; -+ case DW_AT_GNU_all_source_call_sites: return "DW_AT_GNU_all_source_call_sites"; -+ case DW_AT_GNU_locviews: return "DW_AT_GNU_locviews"; -+ case DW_AT_GNU_entry_view: return "DW_AT_GNU_entry_view"; -+ case DW_AT_GNU_macros: return "DW_AT_GNU_macros"; -+ case DW_AT_GNU_deleted: return "DW_AT_GNU_deleted"; -+ case DW_AT_GNU_dwo_name: return "DW_AT_GNU_dwo_name"; -+ case DW_AT_GNU_dwo_id: return "DW_AT_GNU_dwo_id"; -+ case DW_AT_GNU_ranges_base: return "DW_AT_GNU_ranges_base"; -+ case DW_AT_GNU_addr_base: return "DW_AT_GNU_addr_base"; -+ case DW_AT_GNU_pubnames: return "DW_AT_GNU_pubnames"; -+ case DW_AT_GNU_pubtypes: return "DW_AT_GNU_pubtypes"; -+ case DW_AT_GNU_numerator: return "DW_AT_GNU_numerator"; -+ case DW_AT_GNU_denominator: return "DW_AT_GNU_denominator"; -+ case DW_AT_GNU_bias: return "DW_AT_GNU_bias"; - /* VMS extensions. */ - case DW_AT_VMS_rtnbeg_pd_address: return "DW_AT_VMS_rtnbeg_pd_address"; - /* UPC extension. */ -diff --git a/coregrind/m_debuginfo/priv_d3basics.h b/coregrind/m_debuginfo/priv_d3basics.h -index b60e3e8eb..9d825e39e 100644 ---- a/coregrind/m_debuginfo/priv_d3basics.h -+++ b/coregrind/m_debuginfo/priv_d3basics.h -@@ -108,6 +108,15 @@ typedef enum - DW_TAG_type_unit = 0x41, - DW_TAG_rvalue_reference_type = 0x42, - DW_TAG_template_alias = 0x43, -+ /* DWARF 5. */ -+ DW_TAG_coarray_type = 0x44, -+ DW_TAG_generic_subrange = 0x45, -+ DW_TAG_dynamic_type = 0x46, -+ DW_TAG_atomic_type = 0x47, -+ DW_TAG_call_site = 0x48, -+ DW_TAG_call_site_parameter = 0x49, -+ DW_TAG_skeleton_unit = 0x4a, -+ DW_TAG_immutable_type = 0x4b, - /* SGI/MIPS Extensions. */ - DW_TAG_MIPS_loop = 0x4081, - /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */ -@@ -118,6 +127,11 @@ typedef enum - DW_TAG_class_template = 0x4103, /* For C++. */ - DW_TAG_GNU_BINCL = 0x4104, - DW_TAG_GNU_EINCL = 0x4105, -+ DW_TAG_GNU_template_template_param = 0x4106, -+ DW_TAG_GNU_template_parameter_pack = 0x4107, -+ DW_TAG_GNU_formal_parameter_pack = 0x4108, -+ DW_TAG_GNU_call_site = 0x4109, -+ DW_TAG_GNU_call_site_parameter = 0x410a, - /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ - DW_TAG_upc_shared_type = 0x8765, - DW_TAG_upc_strict_type = 0x8766, -@@ -164,13 +178,23 @@ typedef enum dwarf_source_language - DW_LANG_D = 0x0013, - /* DWARF 4. */ - DW_LANG_Python = 0x0014, -- /* DWARF 5-pre. Only what GCC already outputs. */ -+ /* DWARF 5. */ - DW_LANG_Go = 0x0016, -+ DW_LANG_Modula3 = 0x0017, -+ DW_LANG_Haskell = 0x0018, -+ DW_LANG_C_plus_plus_03 = 0x0019, - DW_LANG_C_plus_plus_11 = 0x001a, -+ DW_LANG_OCaml = 0x001b, -+ DW_LANG_Rust = 0x001c, - DW_LANG_C11 = 0x001d, -+ DW_LANG_Swift = 0x001e, -+ DW_LANG_Julia = 0x001f, -+ DW_LANG_Dylan = 0x0020, - DW_LANG_C_plus_plus_14 = 0x0021, - DW_LANG_Fortran03 = 0x0022, - DW_LANG_Fortran08 = 0x0023, -+ DW_LANG_RenderScript = 0x0024, -+ DW_LANG_BLISS = 0x0025, - /* MIPS. */ - DW_LANG_Mips_Assembler = 0x8001, - /* UPC. */ -@@ -207,6 +231,28 @@ typedef enum - DW_FORM_exprloc = 0x18, - DW_FORM_flag_present = 0x19, - DW_FORM_ref_sig8 = 0x20, -+ /* DWARF 5 values. */ -+ DW_FORM_strx = 0x1a, -+ DW_FORM_addrx = 0x1b, -+ DW_FORM_ref_sup4 = 0x1c, -+ DW_FORM_strp_sup = 0x1d, -+ DW_FORM_data16 = 0x1e, -+ DW_FORM_line_strp = 0x1f, -+ DW_FORM_implicit_const = 0x21, -+ DW_FORM_loclistx = 0x22, -+ DW_FORM_rnglistx = 0x23, -+ DW_FORM_ref_sup8 = 0x24, -+ DW_FORM_strx1 = 0x25, -+ DW_FORM_strx2 = 0x26, -+ DW_FORM_strx3 = 0x27, -+ DW_FORM_strx4 = 0x28, -+ DW_FORM_addrx1 = 0x29, -+ DW_FORM_addrx2 = 0x2a, -+ DW_FORM_addrx3 = 0x2b, -+ DW_FORM_addrx4 = 0x2c, -+ /* GNU Debug Fission extensions. */ -+ DW_FORM_GNU_addr_index = 0x1f01, -+ DW_FORM_GNU_str_index = 0x1f02, - /* Extensions for DWZ multifile. - See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open . */ - DW_FORM_GNU_ref_alt = 0x1f20, -@@ -314,6 +360,36 @@ typedef enum - DW_AT_const_expr = 0x6c, - DW_AT_enum_class = 0x6d, - DW_AT_linkage_name = 0x6e, -+ DW_AT_string_length_bit_size = 0x6f, -+ DW_AT_string_length_byte_size = 0x70, -+ DW_AT_rank = 0x71, -+ DW_AT_str_offsets_base = 0x72, -+ DW_AT_addr_base = 0x73, -+ DW_AT_rnglists_base = 0x74, -+ /* 0x75 reserved. */ -+ DW_AT_dwo_name = 0x76, -+ DW_AT_reference = 0x77, -+ DW_AT_rvalue_reference = 0x78, -+ DW_AT_macros = 0x79, -+ DW_AT_call_all_calls = 0x7a, -+ DW_AT_call_all_source_calls = 0x7b, -+ DW_AT_call_all_tail_calls = 0x7c, -+ DW_AT_call_return_pc = 0x7d, -+ DW_AT_call_value = 0x7e, -+ DW_AT_call_origin = 0x7f, -+ DW_AT_call_parameter = 0x80, -+ DW_AT_call_pc = 0x81, -+ DW_AT_call_tail_call = 0x82, -+ DW_AT_call_target = 0x83, -+ DW_AT_call_target_clobbered = 0x84, -+ DW_AT_call_data_location = 0x85, -+ DW_AT_call_data_value = 0x86, -+ DW_AT_noreturn = 0x87, -+ DW_AT_alignment = 0x88, -+ DW_AT_export_symbols = 0x89, -+ DW_AT_deleted = 0x8a, -+ DW_AT_defaulted = 0x8b, -+ DW_AT_loclists_base = 0x8c, - /* SGI/MIPS extensions. */ - DW_AT_MIPS_fde = 0x2001, - DW_AT_MIPS_loop_begin = 0x2002, -@@ -349,8 +425,39 @@ typedef enum - DW_AT_body_begin = 0x2105, - DW_AT_body_end = 0x2106, - DW_AT_GNU_vector = 0x2107, -+ DW_AT_GNU_guarded_by = 0x2108, -+ DW_AT_GNU_pt_guarded_by = 0x2109, -+ DW_AT_GNU_guarded = 0x210a, -+ DW_AT_GNU_pt_guarded = 0x210b, -+ DW_AT_GNU_locks_excluded = 0x210c, -+ DW_AT_GNU_exclusive_locks_required = 0x210d, -+ DW_AT_GNU_shared_locks_required = 0x210e, -+ DW_AT_GNU_odr_signature = 0x210f, -+ DW_AT_GNU_template_name = 0x2110, -+ DW_AT_GNU_call_site_value = 0x2111, -+ DW_AT_GNU_call_site_data_value = 0x2112, -+ DW_AT_GNU_call_site_target = 0x2113, -+ DW_AT_GNU_call_site_target_clobbered = 0x2114, -+ DW_AT_GNU_tail_call = 0x2115, - DW_AT_GNU_all_tail_call_sites = 0x2116, - DW_AT_GNU_all_call_sites = 0x2117, -+ DW_AT_GNU_all_source_call_sites = 0x2118, -+ DW_AT_GNU_locviews = 0x2137, -+ DW_AT_GNU_entry_view = 0x2138, -+ DW_AT_GNU_macros = 0x2119, -+ DW_AT_GNU_deleted = 0x211a, -+ /* GNU Debug Fission extensions. */ -+ DW_AT_GNU_dwo_name = 0x2130, -+ DW_AT_GNU_dwo_id = 0x2131, -+ DW_AT_GNU_ranges_base = 0x2132, -+ DW_AT_GNU_addr_base = 0x2133, -+ DW_AT_GNU_pubnames = 0x2134, -+ DW_AT_GNU_pubtypes = 0x2135, -+ /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator */ -+ DW_AT_GNU_numerator = 0x2303, -+ DW_AT_GNU_denominator = 0x2304, -+ /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias */ -+ DW_AT_GNU_bias = 0x2305, - /* VMS extensions. */ - DW_AT_VMS_rtnbeg_pd_address = 0x2201, - /* UPC extension. */ -@@ -387,6 +494,9 @@ typedef enum - DW_ATE_decimal_float = 0xf, - /* DWARF 4. */ - DW_ATE_UTF = 0x10, -+ /* DWARF 5. */ -+ DW_ATE_UCS = 0x11, -+ DW_ATE_ASCII = 0x12, - /* HP extensions. */ - DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */ - DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */ -@@ -558,8 +668,35 @@ typedef enum - /* DWARF 4 extensions. */ - DW_OP_implicit_value = 0x9e, - DW_OP_stack_value = 0x9f, -+ /* DWARF 5 extensions. */ -+ DW_OP_implicit_pointer = 0xa0, -+ DW_OP_addrx = 0xa1, -+ DW_OP_constx = 0xa2, -+ DW_OP_entry_value = 0xa3, -+ DW_OP_const_type = 0xa4, -+ DW_OP_regval_type = 0xa5, -+ DW_OP_deref_type = 0xa6, -+ DW_OP_xderef_type = 0xa7, -+ DW_OP_convert = 0xa8, -+ DW_OP_reinterpret = 0xa9, - /* GNU extensions. */ - DW_OP_GNU_push_tls_address = 0xe0, -+ DW_OP_GNU_uninit = 0xf0, -+ DW_OP_GNU_encoded_addr = 0xf1, -+ DW_OP_GNU_implicit_pointer = 0xf2, -+ DW_OP_GNU_entry_value = 0xf3, -+ DW_OP_GNU_const_type = 0xf4, -+ DW_OP_GNU_regval_type = 0xf5, -+ DW_OP_GNU_deref_type = 0xf6, -+ DW_OP_GNU_convert = 0xf7, -+ DW_OP_GNU_reinterpret = 0xf9, -+ DW_OP_GNU_parameter_ref = 0xfa, -+ /* GNU Debug Fission extensions. */ -+ DW_OP_GNU_addr_index = 0xfb, -+ DW_OP_GNU_const_index = 0xfc, -+ /* The GNU variable value extension. -+ See http://dwarfstd.org/ShowIssue.php?issue=161109.2 . */ -+ DW_OP_GNU_variable_value = 0xfd, - /* HP extensions. */ - DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */ - DW_OP_HP_is_value = 0xe1, -@@ -571,6 +708,62 @@ typedef enum - } - DW_OP; - -+typedef enum -+ { -+ DW_UT_compile = 0x01, -+ DW_UT_type = 0x02, -+ DW_UT_partial = 0x03, -+ DW_UT_skeleton = 0x04, -+ DW_UT_split_compile = 0x05, -+ DW_UT_split_type = 0x06, -+ -+ DW_UT_lo_user = 0x80, -+ DW_UT_hi_user = 0xff -+ } -+ DW_UT; -+ -+typedef enum -+ { -+ DW_LNCT_path = 0x1, -+ DW_LNCT_directory_index = 0x2, -+ DW_LNCT_timestamp = 0x3, -+ DW_LNCT_size = 0x4, -+ DW_LNCT_MD5 = 0x5, -+ -+ DW_LNCT_lo_user = 0x2000, -+ DW_LNCT_hi_user = 0x3fff -+ } -+ DW_LNCT; -+ -+typedef enum -+ { -+ DW_RLE_end_of_list = 0x00, -+ DW_RLE_base_addressx = 0x01, -+ DW_RLE_startx_endx = 0x02, -+ DW_RLE_startx_length = 0x03, -+ DW_RLE_offset_pair = 0x04, -+ DW_RLE_base_address = 0x05, -+ DW_RLE_start_end = 0x06, -+ DW_RLE_start_length = 0x07 -+ } -+ DW_RLE; -+ -+typedef enum -+ { -+ DW_LLE_end_of_list = 0x00, -+ DW_LLE_base_addressx = 0x01, -+ DW_LLE_startx_endx = 0x02, -+ DW_LLE_startx_length = 0x03, -+ DW_LLE_offset_pair = 0x04, -+ DW_LLE_default_location = 0x05, -+ DW_LLE_base_address = 0x06, -+ DW_LLE_start_end = 0x07, -+ DW_LLE_start_length = 0x08, -+ -+ DW_LLE_GNU_view_pair = 0x09 -+ } -+ DW_LLE; -+ - const HChar* ML_(pp_DW_children) ( DW_children hashch ); - const HChar* ML_(pp_DW_TAG) ( DW_TAG tag ); - const HChar* ML_(pp_DW_FORM) ( DW_FORM form ); -diff --git a/coregrind/m_debuginfo/priv_readdwarf.h b/coregrind/m_debuginfo/priv_readdwarf.h -index 1e3f24c2a..302266924 100644 ---- a/coregrind/m_debuginfo/priv_readdwarf.h -+++ b/coregrind/m_debuginfo/priv_readdwarf.h -@@ -50,7 +50,8 @@ void ML_(read_debuginfo_dwarf3) - DiSlice escn_debug_abbv, /* .debug_abbrev */ - DiSlice escn_debug_line, /* .debug_line */ - DiSlice escn_debug_str, /* .debug_str */ -- DiSlice escn_debug_str_alt ); /* .debug_str */ -+ DiSlice escn_debug_str_alt, /* .debug_str */ -+ DiSlice escn_debug_line_str );/* .debug_line_str */ - - /* -------------------- - DWARF1 reader -diff --git a/coregrind/m_debuginfo/priv_readdwarf3.h b/coregrind/m_debuginfo/priv_readdwarf3.h -index 1a5bd61c3..f6d1dd1ee 100644 ---- a/coregrind/m_debuginfo/priv_readdwarf3.h -+++ b/coregrind/m_debuginfo/priv_readdwarf3.h -@@ -45,9 +45,10 @@ ML_(new_dwarf3_reader) ( - DiSlice escn_debug_info, DiSlice escn_debug_types, - DiSlice escn_debug_abbv, DiSlice escn_debug_line, - DiSlice escn_debug_str, DiSlice escn_debug_ranges, -+ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, - DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, - DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, -- DiSlice escn_debug_str_alt -+ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str - ); - - #endif /* ndef __PRIV_READDWARF3_H */ -diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c -index 5701c504b..88d5d99f1 100644 ---- a/coregrind/m_debuginfo/readdwarf.c -+++ b/coregrind/m_debuginfo/readdwarf.c -@@ -322,6 +322,123 @@ void process_extended_line_op( struct _DebugInfo* di, - //////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////// - -+static -+HChar * get_line_str (struct _DebugInfo* di, const UnitInfo* ui, -+ DiCursor *data, const UInt form, -+ DiCursor debugstr_img, DiCursor debuglinestr_img) -+{ -+ HChar *str = NULL; -+ switch (form) { -+ case DW_FORM_string: -+ str = ML_(cur_step_strdup)(data, "di.gls.string"); -+ break; -+ case DW_FORM_strp: -+ if (!ui->dw64) -+ str = ML_(cur_read_strdup)(ML_(cur_plus)(debugstr_img, -+ ML_(cur_step_UInt)(data)), -+ "di.gls.strp.dw32"); -+ else -+ str = ML_(cur_read_strdup)(ML_(cur_plus)(debugstr_img, -+ ML_(cur_step_ULong)(data)), -+ "di.gls.strp.dw64"); -+ break; -+ case DW_FORM_line_strp: -+ if (!ui->dw64) -+ str = ML_(cur_read_strdup)(ML_(cur_plus)(debuglinestr_img, -+ ML_(cur_step_UInt)(data)), -+ "di.gls.line_strp.dw32"); -+ else -+ str = ML_(cur_read_strdup)(ML_(cur_plus)(debuglinestr_img, -+ ML_(cur_step_ULong)(data)), -+ "di.gls.line_strp.dw64"); -+ break; -+ default: -+ ML_(symerr)(di, True, -+ "Unknown path string FORM in .debug_line"); -+ break; -+ } -+ return str; -+} -+ -+static -+Int get_line_ndx (struct _DebugInfo* di, -+ DiCursor *data, const UInt form) -+{ -+ Int res = 0; -+ switch (form) { -+ case DW_FORM_data1: -+ res = ML_(cur_step_UChar)(data); -+ break; -+ case DW_FORM_data2: -+ res = ML_(cur_step_UShort)(data); -+ break; -+ case DW_FORM_udata: -+ res = step_leb128U(data); -+ break; -+ default: -+ ML_(symerr)(di, True, -+ "Unknown directory_index value FORM in .debug_line"); -+ break; -+ } -+ return res; -+} -+ -+static -+DiCursor skip_line_form (struct _DebugInfo* di, const UnitInfo* ui, -+ DiCursor d, const UInt form) -+{ -+ switch (form) { -+ case DW_FORM_block: { -+ ULong len = step_leb128U(&d); -+ d = ML_(cur_plus)(d, len); -+ break; -+ } -+ case DW_FORM_block1: -+ d = ML_(cur_plus)(d, ML_(cur_read_UChar)(d) + 1); -+ break; -+ case DW_FORM_block2: -+ d = ML_(cur_plus)(d, ML_(cur_read_UShort)(d) + 2); -+ break; -+ case DW_FORM_block4: -+ d = ML_(cur_plus)(d, ML_(cur_read_UInt)(d) + 4); -+ break; -+ case DW_FORM_flag: -+ case DW_FORM_data1: -+ d = ML_(cur_plus)(d, 1); -+ break; -+ case DW_FORM_data2: -+ d = ML_(cur_plus)(d, 2); -+ break; -+ case DW_FORM_data4: -+ d = ML_(cur_plus)(d, 4); -+ break; -+ case DW_FORM_data8: -+ d = ML_(cur_plus)(d, 8); -+ break; -+ case DW_FORM_data16: -+ d = ML_(cur_plus)(d, 16); -+ break; -+ case DW_FORM_string: -+ d = ML_(cur_plus)(d, ML_(cur_strlen)(d) + 1); -+ break; -+ case DW_FORM_strp: -+ case DW_FORM_line_strp: -+ case DW_FORM_sec_offset: -+ d = ML_(cur_plus)(d, ui->dw64 ? 8 : 4); -+ break; -+ case DW_FORM_udata: -+ (void)step_leb128U(&d); -+ break; -+ case DW_FORM_sdata: -+ (void)step_leb128S(&d); -+ break; -+ default: -+ ML_(symerr)(di, True, "Unknown FORM in .debug_line"); -+ break; -+ } -+ return d; -+} -+ - /* read a .debug_line section block for a compilation unit - * - * Input: - theBlock must point to the start of the block -@@ -335,7 +452,9 @@ static - void read_dwarf2_lineblock ( struct _DebugInfo* di, - const UnitInfo* ui, - DiCursor theBlock, /* IMAGE */ -- Int noLargerThan ) -+ Int noLargerThan, -+ DiCursor debugstr_img, -+ DiCursor debuglinestr_img) - { - Int i; - DebugLineInfo info; -@@ -348,6 +467,9 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - DiCursor external = theBlock; - DiCursor data = theBlock; - -+ UChar p_ndx = 0, d_ndx = 0; /* DWARF5 path and dir index. */ -+ UInt forms[256]; /* DWARF5 forms. */ -+ - /* fndn_ix_xa is an xarray of fndn_ix (indexes in di->fndnpool) which - are build from file names harvested from the DWARF2 - info. Entry [0] is the "null" pool index and is never referred to -@@ -372,17 +494,6 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - fndn_ix_xa = VG_(newXA) (ML_(dinfo_zalloc), "di.rd2l.2", ML_(dinfo_free), - sizeof(UInt) ); - -- /* DWARF2 starts numbering filename entries at 1, so we need to -- add a dummy zeroth entry to the table. */ -- fndn_ix = 0; // 0 is the "null" index in a fixed pool. -- VG_(addToXA) (fndn_ix_xa, &fndn_ix); -- -- if (ML_(cur_is_valid)(ui->compdir)) -- dirname = ML_(addStrFromCursor)(di, ui->compdir); -- else -- dirname = ML_(addStr)(di, ".", -1); -- VG_(addToXA) (dirname_xa, &dirname); -- - info.li_length = step_initial_length_field( &external, &is64 ); - if (di->ddump_line) - VG_(printf)(" Length: %llu\n", -@@ -402,13 +513,19 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - VG_(printf)(" DWARF Version: %d\n", - (Int)info.li_version); - -- if (info.li_version != 2 && info.li_version != 3 && info.li_version != 4) { -+ if (info.li_version != 2 && info.li_version != 3 && info.li_version != 4 -+ && info.li_version != 5) { - ML_(symerr)(di, True, -- "Only DWARF version 2, 3 and 4 line info " -+ "Only DWARF version 2, 3, 4 and 5 line info " - "is currently supported."); - goto out; - } - -+ if (info.li_version >= 5) { -+ /* UChar addr_size = */ ML_(cur_step_UChar)(&external); -+ /* UChar seg_size = */ ML_(cur_step_UChar)(&external); -+ } -+ - info.li_header_length = is64 ? ML_(cur_step_ULong)(&external) - : (ULong)(ML_(cur_step_UInt)(&external)); - if (di->ddump_line) -@@ -485,60 +602,141 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - /* skip over "standard_opcode_lengths" */ - data = ML_(cur_plus)(standard_opcodes, info.li_opcode_base - 1); - -- /* Read the contents of the Directory table. */ -- if (di->ddump_line) -- VG_(printf)(" The Directory Table%s\n", -- ML_(cur_read_UChar)(data) == 0 ? " is empty." : ":" ); -- -- while (ML_(cur_read_UChar)(data) != 0) { -+ if (ML_(cur_is_valid)(ui->compdir)) -+ dirname = ML_(addStrFromCursor)(di, ui->compdir); -+ else -+ dirname = ML_(addStr)(di, ".", -1); - -- HChar* data_str = ML_(cur_read_strdup)(data, "di.rd2l.1"); -+ if (info.li_version < 5) { -+ /* Read the contents of the Directory table. */ - if (di->ddump_line) -- VG_(printf)(" %s\n", data_str); -- -- /* If data[0] is '/', then 'data' is an absolute path and we -- don't mess with it. Otherwise, construct the -- path 'ui->compdir' ++ "/" ++ 'data'. */ -- -- if (data_str[0] != '/' -- /* not an absolute path */ -- && ML_(cur_is_valid)(ui->compdir) -- /* actually got something sensible for compdir */ -- && ML_(cur_strlen)(ui->compdir)) -- { -- HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, "di.rd2l.1b"); -- SizeT len = VG_(strlen)(compdir_str) + 1 + VG_(strlen)(data_str); -- HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); -- -- VG_(strcpy)(buf, compdir_str); -- VG_(strcat)(buf, "/"); -- VG_(strcat)(buf, data_str); -- -- dirname = ML_(addStr)(di, buf, len); -- VG_(addToXA) (dirname_xa, &dirname); -- if (0) VG_(printf)("rel path %s\n", buf); -- ML_(dinfo_free)(compdir_str); -- ML_(dinfo_free)(buf); -- } else { -- /* just use 'data'. */ -- dirname = ML_(addStr)(di,data_str,-1); -- VG_(addToXA) (dirname_xa, &dirname); -- if (0) VG_(printf)("abs path %s\n", data_str); -+ VG_(printf)("The Directory Table%s\n", -+ ML_(cur_read_UChar)(data) == 0 ? " is empty." : ":" ); -+ -+ /* DWARF2 starts numbering filename entries at 1, so we need to -+ add a dummy zeroth entry to the table. */ -+ fndn_ix = 0; // 0 is the "null" index in a fixed pool. -+ VG_(addToXA) (fndn_ix_xa, &fndn_ix); -+ VG_(addToXA) (dirname_xa, &dirname); -+ -+ while (ML_(cur_read_UChar)(data) != 0) { -+ -+ HChar* data_str = ML_(cur_read_strdup)(data, "di.rd2l.1"); -+ if (di->ddump_line) -+ VG_(printf)(" %s\n", data_str); -+ -+ /* If data[0] is '/', then 'data' is an absolute path and we -+ don't mess with it. Otherwise, construct the -+ path 'ui->compdir' ++ "/" ++ 'data'. */ -+ -+ if (data_str[0] != '/' -+ /* not an absolute path */ -+ && ML_(cur_is_valid)(ui->compdir) -+ /* actually got something sensible for compdir */ -+ && ML_(cur_strlen)(ui->compdir)) -+ { -+ HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, -+ "di.rd2l.1b"); -+ SizeT len = VG_(strlen)(compdir_str) + 1 + VG_(strlen)(data_str); -+ HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); -+ -+ VG_(strcpy)(buf, compdir_str); -+ VG_(strcat)(buf, "/"); -+ VG_(strcat)(buf, data_str); -+ -+ dirname = ML_(addStr)(di, buf, len); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("rel path %s\n", buf); -+ ML_(dinfo_free)(compdir_str); -+ ML_(dinfo_free)(buf); -+ } else { -+ /* just use 'data'. */ -+ dirname = ML_(addStr)(di,data_str,-1); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("abs path %s\n", data_str); -+ } -+ -+ data = ML_(cur_plus)(data, VG_(strlen)(data_str) + 1); -+ ML_(dinfo_free)(data_str); - } - -- data = ML_(cur_plus)(data, VG_(strlen)(data_str) + 1); -- ML_(dinfo_free)(data_str); -- } -+ if (di->ddump_line) -+ VG_(printf)("\n"); - -- if (di->ddump_line) -- VG_(printf)("\n"); -+ if (ML_(cur_read_UChar)(data) != 0) { -+ ML_(symerr)(di, True, -+ "can't find NUL at end of DWARF2 directory table"); -+ goto out; -+ } -+ data = ML_(cur_plus)(data, 1); -+ } else { -+ UInt directories_count; -+ UChar directory_entry_format_count = ML_(cur_step_UChar)(&data); -+ UInt n; -+ for (n = 0; n < directory_entry_format_count; n++) { -+ UInt lnct = step_leb128U(&data); -+ UInt form = step_leb128U(&data); -+ if (lnct == DW_LNCT_path) -+ p_ndx = n; -+ forms[n] = form; -+ } -+ directories_count = step_leb128U(&data); -+ /* Read the contents of the Directory table. */ -+ if (di->ddump_line) -+ VG_(printf)(" dwarf The Directory Table%s\n", -+ directories_count == 0 ? " is empty." : ":" ); -+ -+ for (n = 0; n < directories_count; n++) { -+ UInt f; -+ for (f = 0; f < directory_entry_format_count; f++) { -+ UInt form = forms[f]; -+ if (f == p_ndx) { -+ HChar *data_str = get_line_str (di, ui, &data, form, -+ debugstr_img, -+ debuglinestr_img); -+ if (di->ddump_line) -+ VG_(printf)(" %s\n", data_str); -+ -+ /* If data[0] is '/', then 'data' is an absolute path and we -+ don't mess with it. Otherwise, construct the -+ path 'ui->compdir' ++ "/" ++ 'data'. */ -+ -+ if (data_str[0] != '/' -+ /* not an absolute path */ -+ && ML_(cur_is_valid)(ui->compdir) -+ /* actually got something sensible for compdir */ -+ && ML_(cur_strlen)(ui->compdir)) -+ { -+ HChar* compdir_str = ML_(cur_read_strdup)(ui->compdir, -+ "di.rd2l.1b"); -+ SizeT len = VG_(strlen)(compdir_str) + 1 -+ + VG_(strlen)(data_str); -+ HChar *buf = ML_(dinfo_zalloc)("di.rd2l.1c", len + 1); -+ -+ VG_(strcpy)(buf, compdir_str); -+ VG_(strcat)(buf, "/"); -+ VG_(strcat)(buf, data_str); -+ -+ dirname = ML_(addStr)(di, buf, len); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("rel path %s\n", buf); -+ ML_(dinfo_free)(compdir_str); -+ ML_(dinfo_free)(buf); -+ } else { -+ /* just use 'data'. */ -+ dirname = ML_(addStr)(di,data_str,-1); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("abs path %s\n", data_str); -+ } - -- if (ML_(cur_read_UChar)(data) != 0) { -- ML_(symerr)(di, True, -- "can't find NUL at end of DWARF2 directory table"); -- goto out; -+ ML_(dinfo_free)(data_str); -+ -+ } else { -+ data = skip_line_form (di, ui, data, form); -+ } -+ } -+ } - } -- data = ML_(cur_plus)(data, 1); - - /* Read the contents of the File Name table. This produces a bunch - of fndn_ix in fndn_ix_xa. */ -@@ -547,33 +745,76 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - VG_(printf)(" Entry Dir Time Size Name\n"); - } - -- i = 1; -- while (ML_(cur_read_UChar)(data) != 0) { -- HChar* name = ML_(cur_step_strdup)(&data, "di.rd2l.2"); -- Int diridx = step_leb128U(&data); -- Int uu_time = step_leb128U(&data); /* unused */ -- Int uu_size = step_leb128U(&data); /* unused */ -+ if (info.li_version < 5) { -+ i = 1; -+ while (ML_(cur_read_UChar)(data) != 0) { -+ HChar* name = ML_(cur_step_strdup)(&data, "di.rd2l.2"); -+ Int diridx = step_leb128U(&data); -+ Int uu_time = step_leb128U(&data); /* unused */ -+ Int uu_size = step_leb128U(&data); /* unused */ -+ -+ dirname = safe_dirname_ix( dirname_xa, diridx ); -+ fndn_ix = ML_(addFnDn) (di, name, dirname); -+ VG_(addToXA) (fndn_ix_xa, &fndn_ix); -+ if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); -+ if (di->ddump_line) -+ VG_(printf)(" %d\t%d\t%d\t%d\t%s\n", -+ i, diridx, uu_time, uu_size, name); -+ i++; -+ ML_(dinfo_free)(name); -+ } - -- dirname = safe_dirname_ix( dirname_xa, diridx ); -- fndn_ix = ML_(addFnDn) (di, name, dirname); -- VG_(addToXA) (fndn_ix_xa, &fndn_ix); -- if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); - if (di->ddump_line) -- VG_(printf)(" %d\t%d\t%d\t%d\t%s\n", -- i, diridx, uu_time, uu_size, name); -- i++; -- ML_(dinfo_free)(name); -- } -+ VG_(printf)("\n"); - -- if (di->ddump_line) -- VG_(printf)("\n"); -+ if (ML_(cur_read_UChar)(data) != 0) { -+ ML_(symerr)(di, True, -+ "can't find NUL at end of DWARF2 file name table"); -+ goto out; -+ } -+ data = ML_(cur_plus)(data, 1); -+ } else { -+ UInt file_names_count; -+ UChar file_names_entry_format_count = ML_(cur_step_UChar)(&data); -+ UInt n; -+ for (n = 0; n < file_names_entry_format_count; n++) { -+ UInt lnct = step_leb128U(&data); -+ UInt form = step_leb128U(&data); -+ if (lnct == DW_LNCT_path) -+ p_ndx = n; -+ if (lnct == DW_LNCT_directory_index) -+ d_ndx = n; -+ forms[n] = form; -+ } -+ file_names_count = step_leb128U(&data); -+ for (n = 0; n < file_names_count; n++) { -+ UInt f; -+ HChar* name = NULL; -+ Int diridx = 0; -+ for (f = 0; f < file_names_entry_format_count; f++) { -+ UInt form = forms[f]; -+ if (f == p_ndx) -+ name = get_line_str (di, ui, &data, form, -+ debugstr_img, debuglinestr_img); -+ else if (n == d_ndx) -+ diridx = get_line_ndx (di, &data, form); -+ else -+ data = skip_line_form (di, ui, data, form); -+ } - -- if (ML_(cur_read_UChar)(data) != 0) { -- ML_(symerr)(di, True, -- "can't find NUL at end of DWARF2 file name table"); -- goto out; -+ dirname = safe_dirname_ix( dirname_xa, diridx ); -+ fndn_ix = ML_(addFnDn) (di, name, dirname); -+ VG_(addToXA) (fndn_ix_xa, &fndn_ix); -+ if (0) VG_(printf)("file %s diridx %d\n", name, diridx ); -+ if (di->ddump_line) -+ VG_(printf)(" %u\t%d\t%d\t%d\t%s\n", -+ n, diridx, 0, 0, name); -+ ML_(dinfo_free)(name); -+ } -+ -+ if (di->ddump_line) -+ VG_(printf)("\n"); - } -- data = ML_(cur_plus)(data, 1); - - if (di->ddump_line) - VG_(printf)(" Line Number Statements:\n"); -@@ -772,9 +1013,12 @@ static DiCursor lookup_abbrev( DiCursor p, ULong acode ) - (void)step_leb128U(&p); /* skip tag */ - p = ML_(cur_plus)(p,1); /* skip has_children flag */ - ULong name; -+ ULong form; - do { - name = step_leb128U(&p); /* name */ -- (void)step_leb128U(&p); /* form */ -+ form = step_leb128U(&p); /* form */ -+ if (form == 0x21) /* DW_FORM_implicit_const */ -+ step_leb128S(&p); - } - while (name != 0); /* until name == form == 0 */ - } -@@ -804,13 +1048,14 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, - DiCursor unitblock_img, - DiCursor debugabbrev_img, - DiCursor debugstr_img, -- DiCursor debugstr_alt_img ) -+ DiCursor debugstr_alt_img, -+ DiCursor debuglinestr_img) - { - UInt acode, abcode; - ULong atoffs, blklen; - UShort ver; - -- UChar addr_size; -+ UChar addr_size = 0; - DiCursor p = unitblock_img; - DiCursor end_img; - DiCursor abbrev_img; -@@ -823,16 +1068,25 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, - /* This block length */ - blklen = step_initial_length_field( &p, &ui->dw64 ); - -- /* version should be 2, 3 or 4 */ -+ /* version should be 2, 3, 4 or 5 */ - ver = ML_(cur_step_UShort)(&p); - -- /* get offset in abbrev */ -- atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) -- : (ULong)(ML_(cur_step_UInt)(&p)); -+ if (ver >= 5) -+ /* unit_type for DWARF5 */ -+ /* unit_type = */ ML_(cur_step_UChar)(&p); -+ else -+ /* get offset in abbrev */ -+ atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) -+ : (ULong)(ML_(cur_step_UInt)(&p)); - - /* Address size */ - addr_size = ML_(cur_step_UChar)(&p); - -+ if (ver >= 5) -+ /* get offset in abbrev */ -+ atoffs = ui->dw64 ? ML_(cur_step_ULong)(&p) -+ : (ULong)(ML_(cur_step_UInt)(&p)); -+ - /* End of this block */ - end_img = ML_(cur_plus)(unitblock_img, blklen + (ui->dw64 ? 12 : 4)); - -@@ -909,6 +1163,17 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, - sval = ML_(cur_plus)(debugstr_img, ML_(cur_read_ULong)(p)); - p = ML_(cur_plus)(p, ui->dw64 ? 8 : 4); - break; -+ case 0x1f: /* FORM_line_strp */ /* pointer in .debug_line_str */ -+ /* 2006-01-01: only generate a value if a debug_str -+ section was found) */ -+ if (ML_(cur_is_valid)(debuglinestr_img) && !ui->dw64) -+ sval = ML_(cur_plus)(debuglinestr_img, -+ ML_(cur_read_UInt)(p)); -+ if (ML_(cur_is_valid)(debuglinestr_img) && ui->dw64) -+ sval = ML_(cur_plus)(debuglinestr_img, -+ ML_(cur_read_ULong)(p)); -+ p = ML_(cur_plus)(p, ui->dw64 ? 8 : 4); -+ break; - case 0x08: /* FORM_string */ - sval = p; - p = ML_(cur_plus)(p, ML_(cur_strlen)(p) + 1); -@@ -928,7 +1193,13 @@ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui, - p = ML_(cur_plus)(p, 8); - /* perhaps should assign unconditionally to cval? */ - break; -+ case 0x21: /* FORM_implicit_const */ -+ cval = step_leb128S (&abbrev_img); -+ break; - /* TODO : Following ones just skip data - implement if you need */ -+ case 0x1e: /* FORM_data16 */ -+ p = ML_(cur_plus)(p, 16); -+ break; - case 0x01: /* FORM_addr */ - p = ML_(cur_plus)(p, addr_size); - break; -@@ -1028,7 +1299,8 @@ void ML_(read_debuginfo_dwarf3) - DiSlice escn_debug_abbv, /* .debug_abbrev */ - DiSlice escn_debug_line, /* .debug_line */ - DiSlice escn_debug_str, /* .debug_str */ -- DiSlice escn_debug_str_alt ) /* .debug_str */ -+ DiSlice escn_debug_str_alt, /* .debug_str */ -+ DiSlice escn_debug_line_str) /* .debug_line_str */ - { - UnitInfo ui; - UShort ver; -@@ -1067,9 +1339,9 @@ void ML_(read_debuginfo_dwarf3) - - /* version should be 2 */ - ver = ML_(cur_read_UShort)( ML_(cur_plus)(block_img, blklen_len) ); -- if ( ver != 2 && ver != 3 && ver != 4 ) { -+ if ( ver != 2 && ver != 3 && ver != 4 && ver != 5) { - ML_(symerr)( di, True, -- "Ignoring non-Dwarf2/3/4 block in .debug_info" ); -+ "Ignoring non-Dwarf2/3/4/5 block in .debug_info" ); - continue; - } - -@@ -1082,7 +1354,8 @@ void ML_(read_debuginfo_dwarf3) - read_unitinfo_dwarf2( &ui, block_img, - ML_(cur_from_sli)(escn_debug_abbv), - ML_(cur_from_sli)(escn_debug_str), -- ML_(cur_from_sli)(escn_debug_str_alt) ); -+ ML_(cur_from_sli)(escn_debug_str_alt), -+ ML_(cur_from_sli)(escn_debug_line_str)); - if (0) { - HChar* str_name = ML_(cur_read_strdup)(ui.name, "di.rdd3.1"); - HChar* str_compdir = ML_(cur_read_strdup)(ui.compdir, "di.rdd3.2"); -@@ -1107,7 +1380,9 @@ void ML_(read_debuginfo_dwarf3) - read_dwarf2_lineblock( - di, &ui, - ML_(cur_plus)(ML_(cur_from_sli)(escn_debug_line), ui.stmt_list), -- escn_debug_line.szB - ui.stmt_list -+ escn_debug_line.szB - ui.stmt_list, -+ ML_(cur_from_sli)(escn_debug_str), -+ ML_(cur_from_sli)(escn_debug_line_str) - ); - } - } -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index c4d529bc6..82bc8f241 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -384,6 +384,7 @@ typedef - struct _name_form { - ULong at_name; // Dwarf Attribute name - ULong at_form; // Dwarf Attribute form -+ Long at_val; // Dwarf Attribute value (for implicit_const) - UInt skip_szB; // Nr of bytes skippable from here ... - UInt next_nf; // ... to reach this attr/form index in the g_abbv.nf - } name_form; -@@ -423,7 +424,7 @@ typedef - void (*barf)( const HChar* ) __attribute__((noreturn)); - /* Is this 64-bit DWARF ? */ - Bool is_dw64; -- /* Which DWARF version ? (2, 3 or 4) */ -+ /* Which DWARF version ? (2, 3, 4 or 5) */ - UShort version; - /* Length of this Compilation Unit, as stated in the - .unit_length :: InitialLength field of the CU Header. -@@ -452,12 +453,15 @@ typedef - /* Image information for various sections. */ - DiSlice escn_debug_str; - DiSlice escn_debug_ranges; -+ DiSlice escn_debug_rnglists; -+ DiSlice escn_debug_loclists; - DiSlice escn_debug_loc; - DiSlice escn_debug_line; - DiSlice escn_debug_info; - DiSlice escn_debug_types; - DiSlice escn_debug_info_alt; - DiSlice escn_debug_str_alt; -+ DiSlice escn_debug_line_str; - /* How much to add to .debug_types resp. alternate .debug_info offsets - in cook_die*. */ - UWord types_cuOff_bias; -@@ -651,25 +655,35 @@ static GExpr* make_singleton_GX ( DiCursor block, ULong nbytes ) - __attribute__((noinline)) - static GExpr* make_general_GX ( const CUConst* cc, - Bool td3, -- ULong debug_loc_offset, -+ ULong offset, - Addr svma_of_referencing_CU ) - { -+ Bool done; - Addr base; - Cursor loc; - XArray* xa; /* XArray of UChar */ - GExpr* gx; - Word nbytes; -+ Bool addBase = cc->version < 5; - - vg_assert(sizeof(UWord) == sizeof(Addr)); -- if (!ML_(sli_is_valid)(cc->escn_debug_loc) || cc->escn_debug_loc.szB == 0) -+ if (cc->version < 5 && (!ML_(sli_is_valid)(cc->escn_debug_loc) -+ || cc->escn_debug_loc.szB == 0)) - cc->barf("make_general_GX: .debug_loc is empty/missing"); -+ if (cc->version >= 5 && (!ML_(sli_is_valid)(cc->escn_debug_loclists) -+ || cc->escn_debug_loclists.szB == 0)) -+ cc->barf("make_general_GX: .debug_loclists is empty/missing"); - -- init_Cursor( &loc, cc->escn_debug_loc, 0, cc->barf, -- "Overrun whilst reading .debug_loc section(2)" ); -- set_position_of_Cursor( &loc, debug_loc_offset ); -+ if (cc->version < 5) -+ init_Cursor( &loc, cc->escn_debug_loc, 0, cc->barf, -+ "Overrun whilst reading .debug_loc section(2)" ); -+ else -+ init_Cursor( &loc, cc->escn_debug_loclists, 0, cc->barf, -+ "Overrun whilst reading .debug_loclists section(2)" ); -+ set_position_of_Cursor( &loc, offset ); - -- TRACE_D3("make_general_GX (.debug_loc_offset = %llu, ioff = %llu) {\n", -- debug_loc_offset, get_DiCursor_from_Cursor(&loc).ioff ); -+ TRACE_D3("make_general_GX (offset = %llu, ioff = %llu) {\n", -+ offset, get_DiCursor_from_Cursor(&loc).ioff ); - - /* Who frees this xa? It is freed before this fn exits. */ - xa = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.mgGX.1", -@@ -679,40 +693,86 @@ static GExpr* make_general_GX ( const CUConst* cc, - { UChar c = 1; /*biasMe*/ VG_(addBytesToXA)( xa, &c, sizeof(c) ); } - - base = 0; -- while (True) { -+ done = False; -+ while (!done) { - Bool acquire; - UWord len; -- /* Read a (host-)word pair. This is something of a hack since -- the word size to read is really dictated by the ELF file; -- however, we assume we're reading a file with the same -- word-sizeness as the host. Reasonably enough. */ -- UWord w1 = get_UWord( &loc ); -- UWord w2 = get_UWord( &loc ); -- -- TRACE_D3(" %08lx %08lx\n", w1, w2); -- if (w1 == 0 && w2 == 0) -- break; /* end of list */ -- -- if (w1 == -1UL) { -- /* new value for 'base' */ -- base = w2; -- continue; -+ UWord w1; -+ UWord w2; -+ if (cc->version < 5) { -+ /* Read a (host-)word pair. This is something of a hack since -+ the word size to read is really dictated by the ELF file; -+ however, we assume we're reading a file with the same -+ word-sizeness as the host. Reasonably enough. */ -+ w1 = get_UWord( &loc ); -+ w2 = get_UWord( &loc ); -+ -+ TRACE_D3(" %08lx %08lx\n", w1, w2); -+ if (w1 == 0 && w2 == 0) { -+ done = True; -+ break; /* end of list */ -+ } -+ -+ if (w1 == -1UL) { -+ /* new value for 'base' */ -+ base = w2; -+ continue; -+ } -+ /* else a location expression follows */ -+ len = (UWord)get_UShort( &loc ); -+ } else { -+ w1 = 0; -+ w2 = 0; -+ len = 0; -+ DW_LLE r = get_UChar( &loc ); -+ switch (r) { -+ case DW_LLE_end_of_list: -+ done = True; -+ break; -+ case DW_LLE_base_address: -+ base = get_UWord( &loc ); -+ break; -+ case DW_LLE_start_length: -+ w1 = get_UWord( &loc ); -+ w2 = w1 + get_ULEB128( &loc ); -+ len = get_ULEB128( &loc ); -+ break; -+ case DW_LLE_offset_pair: -+ w1 = base + get_ULEB128( &loc ); -+ w2 = base + get_ULEB128( &loc ); -+ len = get_ULEB128( &loc ); -+ break; -+ case DW_LLE_start_end: -+ w1 = get_UWord ( &loc ); -+ w2 = get_UWord ( &loc ); -+ len = get_ULEB128( &loc ); -+ break; -+ case DW_LLE_GNU_view_pair: -+ get_ULEB128( &loc ); -+ get_ULEB128( &loc ); -+ break; -+ case DW_LLE_base_addressx: -+ case DW_LLE_startx_endx: -+ case DW_LLE_startx_length: -+ case DW_LLE_default_location: -+ default: -+ cc->barf( "Unhandled or unknown loclists entry" ); -+ done = True; -+ } - } - -- /* else a location expression follows */ - /* else enumerate [w1+base, w2+base) */ - /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" - (sec 2.17.2) */ - if (w1 > w2) { - TRACE_D3("negative range is for .debug_loc expr at " - "file offset %llu\n", -- debug_loc_offset); -+ offset); - cc->barf( "negative range in .debug_loc section" ); - } - - /* ignore zero length ranges */ - acquire = w1 < w2; -- len = (UWord)get_UShort( &loc ); - - if (acquire) { - UWord w; -@@ -720,9 +780,9 @@ static GExpr* make_general_GX ( const CUConst* cc, - UChar c; - c = 0; /* !isEnd*/ - VG_(addBytesToXA)( xa, &c, sizeof(c) ); -- w = w1 + base + svma_of_referencing_CU; -+ w = w1 + (addBase ? base : 0) + svma_of_referencing_CU; - VG_(addBytesToXA)( xa, &w, sizeof(w) ); -- w = w2 -1 + base + svma_of_referencing_CU; -+ w = w2 -1 + (addBase ? base : 0) + svma_of_referencing_CU; - VG_(addBytesToXA)( xa, &w, sizeof(w) ); - s = (UShort)len; - VG_(addBytesToXA)( xa, &s, sizeof(s) ); -@@ -839,45 +899,96 @@ get_range_list ( const CUConst* cc, - XArray* xa; /* XArray of AddrRange */ - AddrRange pair; - -- if (!ML_(sli_is_valid)(cc->escn_debug_ranges) -- || cc->escn_debug_ranges.szB == 0) -+ if (cc->version < 5 && (!ML_(sli_is_valid)(cc->escn_debug_ranges) -+ || cc->escn_debug_ranges.szB == 0)) - cc->barf("get_range_list: .debug_ranges is empty/missing"); -+ if (cc->version >= 5 && (!ML_(sli_is_valid)(cc->escn_debug_rnglists) -+ || cc->escn_debug_rnglists.szB == 0)) -+ cc->barf("get_range_list: .debug_rnglists is empty/missing"); -+ -+ if (cc->version < 5) -+ init_Cursor( &ranges, cc->escn_debug_ranges, 0, cc->barf, -+ "Overrun whilst reading .debug_ranges section(2)" ); -+ else -+ init_Cursor( &ranges, cc->escn_debug_rnglists, 0, cc->barf, -+ "Overrun whilst reading .debug_rnglists section(2)" ); - -- init_Cursor( &ranges, cc->escn_debug_ranges, 0, cc->barf, -- "Overrun whilst reading .debug_ranges section(2)" ); - set_position_of_Cursor( &ranges, debug_ranges_offset ); - - /* Who frees this xa? varstack_preen() does. */ - xa = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.grl.1", ML_(dinfo_free), - sizeof(AddrRange) ); - base = 0; -- while (True) { -- /* Read a (host-)word pair. This is something of a hack since -- the word size to read is really dictated by the ELF file; -- however, we assume we're reading a file with the same -- word-sizeness as the host. Reasonably enough. */ -- UWord w1 = get_UWord( &ranges ); -- UWord w2 = get_UWord( &ranges ); -- -- if (w1 == 0 && w2 == 0) -- break; /* end of list. */ -- -- if (w1 == -1UL) { -- /* new value for 'base' */ -- base = w2; -- continue; -- } -+ if (cc->version < 5) { -+ while (True) { -+ /* Read a (host-)word pair. This is something of a hack since -+ the word size to read is really dictated by the ELF file; -+ however, we assume we're reading a file with the same -+ word-sizeness as the host. Reasonably enough. */ -+ UWord w1 = get_UWord( &ranges ); -+ UWord w2 = get_UWord( &ranges ); - -- /* else enumerate [w1+base, w2+base) */ -- /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" -- (sec 2.17.2) */ -- if (w1 > w2) -- cc->barf( "negative range in .debug_ranges section" ); -- if (w1 < w2) { -- pair.aMin = w1 + base + svma_of_referencing_CU; -- pair.aMax = w2 - 1 + base + svma_of_referencing_CU; -- vg_assert(pair.aMin <= pair.aMax); -- VG_(addToXA)( xa, &pair ); -+ if (w1 == 0 && w2 == 0) -+ break; /* end of list. */ -+ -+ if (w1 == -1UL) { -+ /* new value for 'base' */ -+ base = w2; -+ continue; -+ } -+ -+ /* else enumerate [w1+base, w2+base) */ -+ /* w2 is 1 past end of range, as per D3 defn for "DW_AT_high_pc" -+ (sec 2.17.2) */ -+ if (w1 > w2) -+ cc->barf( "negative range in .debug_ranges section" ); -+ if (w1 < w2) { -+ pair.aMin = w1 + base + svma_of_referencing_CU; -+ pair.aMax = w2 - 1 + base + svma_of_referencing_CU; -+ vg_assert(pair.aMin <= pair.aMax); -+ VG_(addToXA)( xa, &pair ); -+ } -+ } -+ } else { -+ Bool done = False; -+ while (!done) { -+ UWord w1 = 0; -+ UWord w2 = 0; -+ DW_RLE r = get_UChar( &ranges ); -+ switch (r) { -+ case DW_RLE_end_of_list: -+ done = True; -+ break; -+ case DW_RLE_base_address: -+ base = get_UWord( &ranges ); -+ break; -+ case DW_RLE_start_length: -+ w1 = get_UWord( &ranges ); -+ w2 = w1 + get_ULEB128( &ranges ); -+ break; -+ case DW_RLE_offset_pair: -+ w1 = base + get_ULEB128( &ranges ); -+ w2 = base + get_ULEB128( &ranges ); -+ break; -+ case DW_RLE_start_end: -+ w1 = get_UWord ( &ranges ); -+ w2 = get_UWord ( &ranges ); -+ break; -+ case DW_RLE_base_addressx: -+ case DW_RLE_startx_endx: -+ case DW_RLE_startx_length: -+ default: -+ cc->barf( "Unhandled or unknown range list entry" ); -+ done = True; -+ } -+ if (w1 > w2) -+ cc->barf( "negative range in .debug_rnglists section" ); -+ if (w1 < w2) { -+ pair.aMin = w1 + svma_of_referencing_CU; -+ pair.aMax = w2 - 1 + svma_of_referencing_CU; -+ vg_assert(pair.aMin <= pair.aMax); -+ VG_(addToXA)( xa, &pair ); -+ } - } - } - return xa; -@@ -930,6 +1041,8 @@ static void init_ht_abbvs (CUConst* cc, - } - ta->nf[ta_nf_n].at_name = get_ULEB128( &c ); - ta->nf[ta_nf_n].at_form = get_ULEB128( &c ); -+ if (ta->nf[ta_nf_n].at_form == DW_FORM_implicit_const) -+ ta->nf[ta_nf_n].at_val = get_SLEB128( &c ); - if (ta->nf[ta_nf_n].at_name == 0 && ta->nf[ta_nf_n].at_form == 0) { - ta_nf_n++; - break; -@@ -1005,7 +1118,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - Bool type_unit, - Bool alt_info ) - { -- UChar address_size; -+ UChar address_size, unit_type; - ULong debug_abbrev_offset; - - VG_(memset)(cc, 0, sizeof(*cc)); -@@ -1021,10 +1134,21 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - - /* version */ - cc->version = get_UShort( c ); -- if (cc->version != 2 && cc->version != 3 && cc->version != 4) -- cc->barf( "parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4" ); -+ if (cc->version != 2 && cc->version != 3 && cc->version != 4 -+ && cc->version != 5) -+ cc->barf( "parse_CU_Header: " -+ "is neither DWARF2 nor DWARF3 nor DWARF4 nor DWARF5" ); - TRACE_D3(" Version: %d\n", (Int)cc->version ); - -+ /* unit type */ -+ if (cc->version >= 5) { -+ unit_type = get_UChar( c ); -+ address_size = get_UChar( c ); -+ } else { -+ unit_type = type_unit ? DW_UT_type : DW_UT_compile; -+ address_size = 0; /* Will be read later. */ -+ } -+ - /* debug_abbrev_offset */ - debug_abbrev_offset = get_Dwarfish_UWord( c, cc->is_dw64 ); - if (debug_abbrev_offset >= escn_debug_abbv.szB) -@@ -1035,7 +1159,9 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - give up. This makes it safe to assume elsewhere that - DW_FORM_addr and DW_FORM_ref_addr can be treated as a host - word. */ -- address_size = get_UChar( c ); -+ if (cc->version < 5) -+ address_size = get_UChar( c ); -+ - if (address_size != sizeof(void*)) - cc->barf( "parse_CU_Header: invalid address_size" ); - TRACE_D3(" Pointer Size: %d\n", (Int)address_size ); -@@ -1043,7 +1169,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - cc->is_type_unit = type_unit; - cc->is_alt_info = alt_info; - -- if (type_unit) { -+ if (type_unit || (cc->version >= 5 && unit_type == DW_UT_type)) { - cc->type_signature = get_ULong( c ); - cc->type_offset = get_Dwarfish_UWord( c, cc->is_dw64 ); - } -@@ -1130,8 +1256,9 @@ typedef - static - void get_Form_contents ( /*OUT*/FormContents* cts, - const CUConst* cc, Cursor* c, -- Bool td3, DW_FORM form ) -+ Bool td3, const name_form *abbv ) - { -+ DW_FORM form = abbv->at_form; - VG_(bzero_inline)(cts, sizeof(*cts)); - // !!! keep switch in sync with get_Form_szB. The nr of characters read below - // must be computed similarly in get_Form_szB. -@@ -1157,6 +1284,19 @@ void get_Form_contents ( /*OUT*/FormContents* cts, - cts->szB = 8; - TRACE_D3("%llu", cts->u.val); - break; -+ case DW_FORM_data16: { -+ /* This is more like a block than an integral value. */ -+ ULong u64b; -+ DiCursor data16 = get_DiCursor_from_Cursor(c); -+ TRACE_D3("data16: "); -+ for (u64b = 16; u64b > 0; u64b--) { -+ UChar u8 = get_UChar(c); -+ TRACE_D3("%x ", (UInt)u8); -+ } -+ cts->u.cur = data16; -+ cts->szB = - (Long)16; -+ break; -+ } - case DW_FORM_sec_offset: - cts->u.val = (ULong)get_Dwarfish_UWord( c, cc->is_dw64 ); - cts->szB = cc->is_dw64 ? 8 : 4; -@@ -1242,6 +1382,26 @@ void get_Form_contents ( /*OUT*/FormContents* cts, - cts->szB = - (Long)(1 + (ULong)ML_(cur_strlen)(str)); - break; - } -+ case DW_FORM_line_strp: { -+ /* this is an offset into .debug_line_str */ -+ UWord uw = (UWord)get_Dwarfish_UWord( c, cc->is_dw64 ); -+ if (!ML_(sli_is_valid)(cc->escn_debug_line_str) -+ || uw >= cc->escn_debug_line_str.szB) -+ cc->barf("get_Form_contents: DW_FORM_line_strp " -+ "points outside .debug_line_str"); -+ /* FIXME: check the entire string lies inside debug_line_str, -+ not just the first byte of it. */ -+ DiCursor line_str -+ = ML_(cur_plus)( ML_(cur_from_sli)(cc->escn_debug_line_str), uw ); -+ if (TD3) { -+ HChar* tmp = ML_(cur_read_strdup)(line_str, "di.getFC.1.5"); -+ TRACE_D3("(indirect line string, offset: 0x%lx): %s", uw, tmp); -+ ML_(dinfo_free)(tmp); -+ } -+ cts->u.cur = line_str; -+ cts->szB = - (Long)(1 + (ULong)ML_(cur_strlen)(line_str)); -+ break; -+ } - case DW_FORM_string: { - DiCursor str = get_AsciiZ(c); - if (TD3) { -@@ -1307,6 +1467,11 @@ void get_Form_contents ( /*OUT*/FormContents* cts, - cts->u.val = 1; - cts->szB = 1; - break; -+ case DW_FORM_implicit_const: -+ cts->u.val = (ULong)abbv->at_val; -+ cts->szB = 8; -+ TRACE_D3("%llu", cts->u.val); -+ break; - case DW_FORM_block1: { - ULong u64b; - ULong u64 = (ULong)get_UChar(c); -@@ -1396,9 +1561,14 @@ void get_Form_contents ( /*OUT*/FormContents* cts, - cts->szB = sizeof(UWord); - break; - } -- case DW_FORM_indirect: -- get_Form_contents (cts, cc, c, td3, (DW_FORM)get_ULEB128(c)); -+ case DW_FORM_indirect: { -+ /* Urgh, this is ugly and somewhat unclear how it works -+ with DW_FORM_implicit_const. HACK. */ -+ name_form nfi = *abbv; -+ nfi.at_form = (DW_FORM)get_ULEB128(c); -+ get_Form_contents (cts, cc, c, td3, &nfi); - return; -+ } - - case DW_FORM_GNU_ref_alt: - cts->u.val = get_Dwarfish_UWord(c, cc->is_dw64); -@@ -1471,6 +1641,7 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) - case DW_FORM_data2: return 2; - case DW_FORM_data4: return 4; - case DW_FORM_data8: return 8; -+ case DW_FORM_data16: return 16; - case DW_FORM_sec_offset: - if (cc->is_dw64) - return 8; -@@ -1488,6 +1659,7 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) - else - return sizeof_Dwarfish_UWord (cc->is_dw64); - case DW_FORM_strp: -+ case DW_FORM_line_strp: - return sizeof_Dwarfish_UWord (cc->is_dw64); - case DW_FORM_string: - return VARSZ_FORM; -@@ -1522,6 +1694,8 @@ UInt get_Form_szB (const CUConst* cc, DW_FORM form ) - return sizeof_Dwarfish_UWord(cc->is_dw64); - case DW_FORM_GNU_strp_alt: - return sizeof_Dwarfish_UWord(cc->is_dw64); -+ case DW_FORM_implicit_const: -+ return 0; /* Value inside abbrev. */ - default: - VG_(printf)( - "get_Form_szB: unhandled %u (%s)\n", -@@ -1544,13 +1718,13 @@ void skip_DIE (UWord *sibling, - while (True) { - if (abbv->nf[nf_i].at_name == DW_AT_sibling) { - get_Form_contents( &cts, cc, c_die, False /*td3*/, -- (DW_FORM)abbv->nf[nf_i].at_form ); -+ &abbv->nf[nf_i] ); - if ( cts.szB > 0 ) - *sibling = cts.u.val; - nf_i++; - } else if (abbv->nf[nf_i].skip_szB == VARSZ_FORM) { - get_Form_contents( &cts, cc, c_die, False /*td3*/, -- (DW_FORM)abbv->nf[nf_i].at_form ); -+ &abbv->nf[nf_i] ); - nf_i++; - } else { - advance_position_of_Cursor (c_die, (ULong)abbv->nf[nf_i].skip_szB); -@@ -1778,6 +1952,124 @@ static GExpr* get_GX ( const CUConst* cc, Bool td3, const FormContents* cts ) - return gexpr; - } - -+static -+HChar * get_line_str (struct _DebugInfo* di, Bool is_dw64, -+ Cursor *data, const UInt form, -+ DiSlice debugstr_img, DiSlice debuglinestr_img) -+{ -+ HChar *str = NULL; -+ switch (form) { -+ case DW_FORM_string: { -+ DiCursor distr = get_AsciiZ(data); -+ str = ML_(cur_step_strdup)(&distr, "di.gls.string"); -+ break; -+ } -+ case DW_FORM_strp: { -+ UWord uw = (UWord)get_Dwarfish_UWord( data, is_dw64 ); -+ DiCursor distr -+ = ML_(cur_plus)( ML_(cur_from_sli)(debugstr_img), uw ); -+ str = ML_(cur_read_strdup)(distr, "di.gls.strp"); -+ break; -+ } -+ case DW_FORM_line_strp: { -+ UWord uw = (UWord)get_Dwarfish_UWord( data, is_dw64 ); -+ DiCursor distr -+ = ML_(cur_plus)( ML_(cur_from_sli)(debuglinestr_img), uw ); -+ str = ML_(cur_read_strdup)(distr, "di.gls.line_strp"); -+ break; -+ } -+ default: -+ ML_(symerr)(di, True, -+ "Unknown path string FORM in .debug_line"); -+ break; -+ } -+ return str; -+} -+ -+static -+Int get_line_ndx (struct _DebugInfo* di, -+ Cursor *data, const UInt form) -+{ -+ Int res = 0; -+ switch (form) { -+ case DW_FORM_data1: -+ res = get_UChar(data); -+ break; -+ case DW_FORM_data2: -+ res = get_UShort(data); -+ break; -+ case DW_FORM_udata: -+ res = get_ULEB128(data); -+ break; -+ default: -+ ML_(symerr)(di, True, -+ "Unknown directory_index value FORM in .debug_line"); -+ break; -+ } -+ return res; -+} -+ -+static -+void skip_line_form (struct _DebugInfo* di, Bool is_dw64, -+ Cursor *d, const UInt form) -+{ -+ switch (form) { -+ case DW_FORM_block: { -+ ULong len = get_ULEB128(d); -+ advance_position_of_Cursor (d, len); -+ break; -+ } -+ case DW_FORM_block1: { -+ UChar len = get_UChar(d); -+ advance_position_of_Cursor (d, len); -+ break; -+ } -+ case DW_FORM_block2: { -+ UShort len = get_UShort(d); -+ advance_position_of_Cursor (d, len); -+ break; -+ } -+ case DW_FORM_block4: { -+ UInt len = get_UInt(d); -+ advance_position_of_Cursor (d, len); -+ break; -+ } -+ case DW_FORM_flag: -+ case DW_FORM_data1: -+ advance_position_of_Cursor (d, 1); -+ break; -+ case DW_FORM_data2: -+ advance_position_of_Cursor (d, 2); -+ break; -+ case DW_FORM_data4: -+ advance_position_of_Cursor (d, 4); -+ break; -+ case DW_FORM_data8: -+ advance_position_of_Cursor (d, 8); -+ break; -+ case DW_FORM_data16: -+ advance_position_of_Cursor (d, 16); -+ break; -+ case DW_FORM_string: -+ (void)get_AsciiZ (d); -+ break; -+ case DW_FORM_strp: -+ case DW_FORM_line_strp: -+ case DW_FORM_sec_offset: -+ advance_position_of_Cursor (d, is_dw64 ? 8 : 4); -+ break; -+ case DW_FORM_udata: -+ (void)get_ULEB128(d); -+ break; -+ case DW_FORM_sdata: -+ (void)get_SLEB128(d); -+ break; -+ default: -+ ML_(symerr)(di, True, "Unknown FORM in .debug_line"); -+ break; -+ } -+} -+ - /* Returns an xarray* of directory names (indexed by the dwarf dirname - integer). - If 'compdir' is NULL, entry [0] will be set to "." -@@ -1786,8 +2078,8 @@ static GExpr* get_GX ( const CUConst* cc, Bool td3, const FormContents* cts ) - whatever that means, according to the DWARF3 spec. - FIXME??? readdwarf3.c/readdwarf.c have a lot of duplicated code */ - static --XArray* read_dirname_xa (DebugInfo* di, const HChar *compdir, -- Cursor *c, -+XArray* read_dirname_xa (DebugInfo* di, UShort version, const HChar *compdir, -+ Cursor *c, const CUConst *cc, - Bool td3 ) - { - XArray* dirname_xa; /* xarray of HChar* dirname */ -@@ -1804,51 +2096,121 @@ XArray* read_dirname_xa (DebugInfo* di, const HChar *compdir, - dirname = compdir; - compdir_len = VG_(strlen)(compdir); - } -- VG_(addToXA) (dirname_xa, &dirname); -- -- TRACE_D3(" The Directory Table%s\n", -- peek_UChar(c) == 0 ? " is empty." : ":" ); -- -- while (peek_UChar(c) != 0) { -- -- DiCursor cur = get_AsciiZ(c); -- HChar* data_str = ML_(cur_read_strdup)( cur, "dirname_xa.1" ); -- TRACE_D3(" %s\n", data_str); -- -- /* If data_str[0] is '/', then 'data' is an absolute path and we -- don't mess with it. Otherwise, construct the -- path 'compdir' ++ "/" ++ 'data'. */ -- -- if (data_str[0] != '/' -- /* not an absolute path */ -- && compdir -- /* actually got something sensible for compdir */ -- && compdir_len) -- { -- SizeT len = compdir_len + 1 + VG_(strlen)(data_str); -- HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); -- -- VG_(strcpy)(buf, compdir); -- VG_(strcat)(buf, "/"); -- VG_(strcat)(buf, data_str); -- -- dirname = ML_(addStr)(di, buf, len); -- VG_(addToXA) (dirname_xa, &dirname); -- if (0) VG_(printf)("rel path %s\n", buf); -- ML_(dinfo_free)(buf); -- } else { -- /* just use 'data'. */ -- dirname = ML_(addStr)(di,data_str,-1); -- VG_(addToXA) (dirname_xa, &dirname); -- if (0) VG_(printf)("abs path %s\n", data_str); -+ -+ /* For version 5, the compdir is the first (zero) entry. */ -+ if (version < 5) -+ VG_(addToXA) (dirname_xa, &dirname); -+ -+ if (version < 5) { -+ TRACE_D3("The Directory Table%s\n", -+ peek_UChar(c) == 0 ? " is empty." : ":" ); -+ -+ while (peek_UChar(c) != 0) { -+ -+ DiCursor cur = get_AsciiZ(c); -+ HChar* data_str = ML_(cur_read_strdup)( cur, "dirname_xa.1" ); -+ TRACE_D3(" %s\n", data_str); -+ -+ /* If data_str[0] is '/', then 'data' is an absolute path and we -+ don't mess with it. Otherwise, construct the -+ path 'compdir' ++ "/" ++ 'data'. */ -+ -+ if (data_str[0] != '/' -+ /* not an absolute path */ -+ && compdir -+ /* actually got something sensible for compdir */ -+ && compdir_len) -+ { -+ SizeT len = compdir_len + 1 + VG_(strlen)(data_str); -+ HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); -+ -+ VG_(strcpy)(buf, compdir); -+ VG_(strcat)(buf, "/"); -+ VG_(strcat)(buf, data_str); -+ -+ dirname = ML_(addStr)(di, buf, len); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("rel path %s\n", buf); -+ ML_(dinfo_free)(buf); -+ } else { -+ /* just use 'data'. */ -+ dirname = ML_(addStr)(di,data_str,-1); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("abs path %s\n", data_str); -+ } -+ -+ ML_(dinfo_free)(data_str); -+ } -+ } else { -+ UChar forms[256]; -+ UChar p_ndx = 0; -+ UInt directories_count; -+ UChar directory_entry_format_count; -+ UInt n; -+ DiSlice debugstr_img = cc->escn_debug_str; -+ DiSlice debuglinestr_img = cc->escn_debug_line_str; -+ -+ directory_entry_format_count = get_UChar(c); -+ for (n = 0; n < directory_entry_format_count; n++) { -+ UInt lnct = get_ULEB128(c); -+ UInt form = get_ULEB128(c); -+ if (lnct == DW_LNCT_path) -+ p_ndx = n; -+ forms[n] = form; - } -+ directories_count = get_ULEB128(c); -+ TRACE_D3("The Directory Table%s\n", -+ directories_count == 0 ? " is empty." : ":" ); -+ -+ for (n = 0; n < directories_count; n++) { -+ UInt f; -+ for (f = 0; f < directory_entry_format_count; f++) { -+ UInt form = forms[f]; -+ if (f == p_ndx) { -+ HChar *data_str = get_line_str (di, cc->is_dw64, c, form, -+ debugstr_img, -+ debuglinestr_img); -+ TRACE_D3(" %s\n", data_str); -+ -+ /* If data_str[0] is '/', then 'data' is an absolute path and we -+ don't mess with it. Otherwise, construct the -+ path 'compdir' ++ "/" ++ 'data'. */ -+ -+ if (data_str[0] != '/' -+ /* not an absolute path */ -+ && compdir -+ /* actually got something sensible for compdir */ -+ && compdir_len) -+ { -+ SizeT len = compdir_len + 1 + VG_(strlen)(data_str); -+ HChar *buf = ML_(dinfo_zalloc)("dirname_xa.2", len + 1); -+ -+ VG_(strcpy)(buf, compdir); -+ VG_(strcat)(buf, "/"); -+ VG_(strcat)(buf, data_str); -+ -+ dirname = ML_(addStr)(di, buf, len); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("rel path %s\n", buf); -+ ML_(dinfo_free)(buf); -+ } else { -+ /* just use 'data'. */ -+ dirname = ML_(addStr)(di,data_str,-1); -+ VG_(addToXA) (dirname_xa, &dirname); -+ if (0) VG_(printf)("abs path %s\n", data_str); -+ } - -- ML_(dinfo_free)(data_str); -+ ML_(dinfo_free)(data_str); -+ } else { -+ skip_line_form (di, cc->is_dw64, c, form); -+ } -+ } -+ } - } - - TRACE_D3 ("\n"); - -- if (get_UChar (c) != 0) { -+ if (version < 5 && get_UChar (c) != 0) { - ML_(symerr)(NULL, True, - "could not get NUL at end of DWARF directory table"); - VG_(deleteXA)(dirname_xa); -@@ -1888,9 +2250,13 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, - get_Initial_Length( &is_dw64, &c, - "read_filename_table: invalid initial-length field" ); - version = get_UShort( &c ); -- if (version != 2 && version != 3 && version != 4) -- cc->barf("read_filename_table: Only DWARF version 2, 3 and 4 line info " -- "is currently supported."); -+ if (version != 2 && version != 3 && version != 4 && version != 5) -+ cc->barf("read_filename_table: Only DWARF version 2, 3, 4 and 5 " -+ "line info is currently supported."); -+ if (version >= 5) { -+ /* addrs_size = */ get_UChar( &c ); -+ /* seg_size = */ get_UChar( &c ); -+ } - /*header_length = (ULong)*/ get_Dwarfish_UWord( &c, is_dw64 ); - /*minimum_instruction_length = */ get_UChar( &c ); - if (version >= 4) -@@ -1903,30 +2269,77 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, - for (i = 1; i < (Word)opcode_base; i++) - (void)get_UChar( &c ); - -- dirname_xa = read_dirname_xa(cc->di, compdir, &c, td3); -+ dirname_xa = read_dirname_xa(cc->di, version, compdir, &c, cc, td3); - - /* Read and record the file names table */ - vg_assert( VG_(sizeXA)( fndn_ix_Table ) == 0 ); -- /* Add a dummy index-zero entry. DWARF3 numbers its files -- from 1, for some reason. */ -- fndn_ix = ML_(addFnDn) ( cc->di, "", NULL ); -- VG_(addToXA)( fndn_ix_Table, &fndn_ix ); -- while (peek_UChar(&c) != 0) { -- DiCursor cur = get_AsciiZ(&c); -- str = ML_(addStrFromCursor)( cc->di, cur ); -- dir_xa_ix = get_ULEB128( &c ); -- if (dirname_xa != NULL -- && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) -- dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); -- else -- dirname = NULL; -- fndn_ix = ML_(addFnDn)( cc->di, str, dirname); -- TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", -- VG_(sizeXA)(fndn_ix_Table), fndn_ix, -- dirname, str); -+ if (version < 5) { -+ /* Add a dummy index-zero entry. DWARF3 numbers its files -+ from 1, for some reason. */ -+ fndn_ix = ML_(addFnDn) ( cc->di, "", NULL ); - VG_(addToXA)( fndn_ix_Table, &fndn_ix ); -- (void)get_ULEB128( &c ); /* skip last mod time */ -- (void)get_ULEB128( &c ); /* file size */ -+ while (peek_UChar(&c) != 0) { -+ DiCursor cur = get_AsciiZ(&c); -+ str = ML_(addStrFromCursor)( cc->di, cur ); -+ dir_xa_ix = get_ULEB128( &c ); -+ if (dirname_xa != NULL -+ && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) -+ dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); -+ else -+ dirname = NULL; -+ fndn_ix = ML_(addFnDn)( cc->di, str, dirname); -+ TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", -+ VG_(sizeXA)(fndn_ix_Table), fndn_ix, -+ dirname, str); -+ VG_(addToXA)( fndn_ix_Table, &fndn_ix ); -+ (void)get_ULEB128( &c ); /* skip last mod time */ -+ (void)get_ULEB128( &c ); /* file size */ -+ } -+ } else { -+ UChar forms[256]; -+ UChar p_ndx = 0, d_ndx = 0; -+ UInt file_names_count; -+ UChar file_names_entry_format_count; -+ UInt n; -+ DiSlice debugstr_img = cc->escn_debug_str; -+ DiSlice debuglinestr_img = cc->escn_debug_line_str; -+ file_names_entry_format_count = get_UChar( &c ); -+ for (n = 0; n < file_names_entry_format_count; n++) { -+ UInt lnct = get_ULEB128( &c ); -+ UInt form = get_ULEB128( &c ); -+ if (lnct == DW_LNCT_path) -+ p_ndx = n; -+ if (lnct == DW_LNCT_directory_index) -+ d_ndx = n; -+ forms[n] = form; -+ } -+ file_names_count = get_ULEB128( &c ); -+ for (n = 0; n < file_names_count; n++) { -+ UInt f; -+ dir_xa_ix = 0; -+ str = NULL; -+ for (f = 0; f < file_names_entry_format_count; f++) { -+ UInt form = forms[f]; -+ if (f == p_ndx) -+ str = get_line_str (cc->di, cc->is_dw64, &c, form, -+ debugstr_img, debuglinestr_img); -+ else if (n == d_ndx) -+ dir_xa_ix = get_line_ndx (cc->di, &c, form); -+ else -+ skip_line_form (cc->di, cc->is_dw64, &c, form); -+ } -+ -+ if (dirname_xa != NULL -+ && dir_xa_ix >= 0 && dir_xa_ix < VG_(sizeXA) (dirname_xa)) -+ dirname = *(HChar**)VG_(indexXA) ( dirname_xa, dir_xa_ix ); -+ else -+ dirname = NULL; -+ fndn_ix = ML_(addFnDn)( cc->di, str, dirname); -+ TRACE_D3(" read_filename_table: %ld fndn_ix %u %s %s\n", -+ VG_(sizeXA)(fndn_ix_Table), fndn_ix, -+ dirname, str); -+ VG_(addToXA)( fndn_ix_Table, &fndn_ix ); -+ } - } - /* We're done! The rest of it is not interesting. */ - if (dirname_xa != NULL) -@@ -2011,11 +2424,12 @@ static void trace_DIE( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; - VG_(printf)(" %-18s: ", ML_(pp_DW_AT)(attr)); - /* Get the form contents, so as to print them */ -- get_Form_contents( &cts, cc, &c, True, form ); -+ get_Form_contents( &cts, cc, &c, True, nf ); - if (attr == DW_AT_sibling && cts.szB > 0) { - sibling = cts.u.val; - } -@@ -2094,9 +2508,10 @@ static void parse_var_DIE ( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_low_pc && cts.szB > 0) { - ip_lo = cts.u.val; - have_lo = True; -@@ -2196,9 +2611,10 @@ static void parse_var_DIE ( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_low_pc && cts.szB > 0) { - ip_lo = cts.u.val; - have_lo = True; -@@ -2282,9 +2698,10 @@ static void parse_var_DIE ( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - n_attrs++; - if (attr == DW_AT_name && cts.szB < 0) { - name = ML_(addStrFromCursor)( cc->di, cts.u.cur ); -@@ -2646,9 +3063,10 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, &c, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, &c, False/*td3*/, nf ); - if (attr == DW_AT_name) { - HChar *fnname; - if (cts.szB >= 0) -@@ -2720,9 +3138,10 @@ static Bool parse_inl_DIE ( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_low_pc && cts.szB > 0) { - ip_lo = cts.u.val; - have_lo = True; -@@ -2764,9 +3183,10 @@ static Bool parse_inl_DIE ( - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_call_file && cts.szB > 0) { - Int ftabIx = (Int)cts.u.val; - if (ftabIx >= 1 -@@ -3090,9 +3510,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr != DW_AT_language) - continue; - if (cts.szB <= 0) -@@ -3132,9 +3553,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - typeE.Te.TyBase.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3243,9 +3665,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_byte_size && cts.szB > 0) { - typeE.Te.TyPorR.szB = cts.u.val; - } -@@ -3275,9 +3698,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - typeE.Te.TyEnum.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3356,9 +3780,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - atomE.Te.Atom.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3411,9 +3836,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - typeE.Te.TyStOrUn.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3498,9 +3924,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - fieldE.Te.Field.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3585,9 +4012,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_type && cts.szB > 0) { - typeE.Te.TyArray.typeR - = cook_die_using_form( cc, (UWord)cts.u.val, form ); -@@ -3626,9 +4054,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_lower_bound && cts.szB > 0 - && form_expected_for_bound (form)) { - lower = (Long)cts.u.val; -@@ -3714,9 +4143,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_name && cts.szB < 0) { - typeE.Te.TyTyDef.name - = ML_(cur_read_strdup)( cts.u.cur, -@@ -3764,9 +4194,10 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - while (True) { - DW_AT attr = (DW_AT) abbv->nf[nf_i].at_name; - DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form; -+ const name_form *nf = &abbv->nf[nf_i]; - nf_i++; - if (attr == 0 && form == 0) break; -- get_Form_contents( &cts, cc, c_die, False/*td3*/, form ); -+ get_Form_contents( &cts, cc, c_die, False/*td3*/, nf ); - if (attr == DW_AT_type && cts.szB > 0) { - typeE.Te.TyQual.typeR - = cook_die_using_form( cc, (UWord)cts.u.val, form ); -@@ -4486,6 +4917,9 @@ static void trace_debug_abbrev (const DebugInfo* di, - while (True) { - ULong at_name = get_ULEB128( &abbv ); - ULong at_form = get_ULEB128( &abbv ); -+ if (at_form == DW_FORM_implicit_const) { -+ /* Long at_val = */ get_SLEB128 ( &abbv ); -+ } - if (at_name == 0 && at_form == 0) break; - TRACE_D3(" %-18s %s\n", - ML_(pp_DW_AT)(at_name), ML_(pp_DW_FORM)(at_form)); -@@ -4502,9 +4936,10 @@ void new_dwarf3_reader_wrk ( - DiSlice escn_debug_info, DiSlice escn_debug_types, - DiSlice escn_debug_abbv, DiSlice escn_debug_line, - DiSlice escn_debug_str, DiSlice escn_debug_ranges, -+ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, - DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, - DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, -- DiSlice escn_debug_str_alt -+ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str - ) - { - XArray* /* of TyEnt */ tyents = NULL; -@@ -4738,6 +5173,8 @@ void new_dwarf3_reader_wrk ( - cc.escn_debug_str = pass == 0 ? escn_debug_str_alt - : escn_debug_str; - cc.escn_debug_ranges = escn_debug_ranges; -+ cc.escn_debug_rnglists = escn_debug_rnglists; -+ cc.escn_debug_loclists = escn_debug_loclists; - cc.escn_debug_loc = escn_debug_loc; - cc.escn_debug_line = pass == 0 ? escn_debug_line_alt - : escn_debug_line; -@@ -4746,6 +5183,7 @@ void new_dwarf3_reader_wrk ( - cc.escn_debug_types = escn_debug_types; - cc.escn_debug_info_alt = escn_debug_info_alt; - cc.escn_debug_str_alt = escn_debug_str_alt; -+ cc.escn_debug_line_str = escn_debug_line_str; - cc.types_cuOff_bias = escn_debug_info.szB; - cc.alt_cuOff_bias = escn_debug_info.szB + escn_debug_types.szB; - cc.cu_start_offset = cu_start_offset; -@@ -5216,9 +5654,10 @@ ML_(new_dwarf3_reader) ( - DiSlice escn_debug_info, DiSlice escn_debug_types, - DiSlice escn_debug_abbv, DiSlice escn_debug_line, - DiSlice escn_debug_str, DiSlice escn_debug_ranges, -+ DiSlice escn_debug_rnglists, DiSlice escn_debug_loclists, - DiSlice escn_debug_loc, DiSlice escn_debug_info_alt, - DiSlice escn_debug_abbv_alt, DiSlice escn_debug_line_alt, -- DiSlice escn_debug_str_alt -+ DiSlice escn_debug_str_alt, DiSlice escn_debug_line_str - ) - { - volatile Int jumped; -@@ -5239,9 +5678,10 @@ ML_(new_dwarf3_reader) ( - escn_debug_info, escn_debug_types, - escn_debug_abbv, escn_debug_line, - escn_debug_str, escn_debug_ranges, -+ escn_debug_rnglists, escn_debug_loclists, - escn_debug_loc, escn_debug_info_alt, - escn_debug_abbv_alt, escn_debug_line_alt, -- escn_debug_str_alt ); -+ escn_debug_str_alt, escn_debug_line_str ); - d3rd_jmpbuf_valid = False; - TRACE_D3("\n------ .debug_info reading was successful ------\n"); - } else { -diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c -index bc5a732d7..404034df0 100644 ---- a/coregrind/m_debuginfo/readelf.c -+++ b/coregrind/m_debuginfo/readelf.c -@@ -2577,7 +2577,10 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) - DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) - DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) -+ DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) - DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) -+ DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) -+ DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) - DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) - DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) - DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) -@@ -2683,10 +2686,22 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - if (!ML_(sli_is_valid)(debug_str_escn)) - FIND(".zdebug_str", debug_str_escn) - -+ FIND( ".debug_line_str", debug_line_str_escn) -+ if (!ML_(sli_is_valid)(debug_line_str_escn)) -+ FIND(".zdebug_str", debug_line_str_escn) -+ - FIND( ".debug_ranges", debug_ranges_escn) - if (!ML_(sli_is_valid)(debug_ranges_escn)) - FIND(".zdebug_ranges", debug_ranges_escn) - -+ FIND( ".debug_rnglists", debug_rnglists_escn) -+ if (!ML_(sli_is_valid)(debug_rnglists_escn)) -+ FIND(".zdebug_rnglists", debug_rnglists_escn) -+ -+ FIND( ".debug_loclists", debug_loclists_escn) -+ if (!ML_(sli_is_valid)(debug_loclists_escn)) -+ FIND(".zdebug_loclists", debug_loclists_escn) -+ - FIND( ".debug_loc", debug_loc_escn) - if (!ML_(sli_is_valid)(debug_loc_escn)) - FIND(".zdebug_loc", debug_loc_escn) -@@ -2994,10 +3009,22 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - if (!ML_(sli_is_valid)(debug_str_escn)) - FIND(need_dwarf2, ".zdebug_str", debug_str_escn) - -+ FIND( need_dwarf2, ".debug_line_str", debug_line_str_escn) -+ if (!ML_(sli_is_valid)(debug_line_str_escn)) -+ FIND(need_dwarf2, ".zdebug_line_str", debug_line_str_escn) -+ - FIND( need_dwarf2, ".debug_ranges", debug_ranges_escn) - if (!ML_(sli_is_valid)(debug_ranges_escn)) - FIND(need_dwarf2, ".zdebug_ranges", debug_ranges_escn) - -+ FIND( need_dwarf2, ".debug_rnglists", debug_rnglists_escn) -+ if (!ML_(sli_is_valid)(debug_rnglists_escn)) -+ FIND(need_dwarf2, ".zdebug_rnglists", debug_rnglists_escn) -+ -+ FIND( need_dwarf2, ".debug_loclists", debug_loclists_escn) -+ if (!ML_(sli_is_valid)(debug_loclists_escn)) -+ FIND(need_dwarf2, ".zdebug_loclists", debug_loclists_escn) -+ - FIND( need_dwarf2, ".debug_loc", debug_loc_escn) - if (!ML_(sli_is_valid)(debug_loc_escn)) - FIND(need_dwarf2, ".zdebug_loc", debug_loc_escn) -@@ -3231,7 +3258,8 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - debug_abbv_escn, - debug_line_escn, - debug_str_escn, -- debug_str_alt_escn ); -+ debug_str_alt_escn, -+ debug_line_str_escn); - /* The new reader: read the DIEs in .debug_info to acquire - information on variable types and locations or inline info. - But only if the tool asks for it, or the user requests it on -@@ -3242,9 +3270,10 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - di, debug_info_escn, debug_types_escn, - debug_abbv_escn, debug_line_escn, - debug_str_escn, debug_ranges_escn, -+ debug_rnglists_escn, debug_loclists_escn, - debug_loc_escn, debug_info_alt_escn, - debug_abbv_alt_escn, debug_line_alt_escn, -- debug_str_alt_escn -+ debug_str_alt_escn, debug_line_str_escn - ); - } - } -diff --git a/coregrind/m_debuginfo/readmacho.c b/coregrind/m_debuginfo/readmacho.c -index f39ee006f..9153a74ca 100644 ---- a/coregrind/m_debuginfo/readmacho.c -+++ b/coregrind/m_debuginfo/readmacho.c -@@ -1103,8 +1103,14 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) - = getsectdata(dsli, "__DWARF", "__debug_line", NULL); - DiSlice debug_str_mscn - = getsectdata(dsli, "__DWARF", "__debug_str", NULL); -+ DiSlice debug_line_str_mscn -+ = getsectdata(dsli, "__DWARF", "__debug_line_str", NULL); - DiSlice debug_ranges_mscn - = getsectdata(dsli, "__DWARF", "__debug_ranges", NULL); -+ DiSlice debug_rnglists_mscn -+ = getsectdata(dsli, "__DWARF", "__debug_rnglists", NULL); -+ DiSlice debug_loclists_mscn -+ = getsectdata(dsli, "__DWARF", "__debug_loclists", NULL); - DiSlice debug_loc_mscn - = getsectdata(dsli, "__DWARF", "__debug_loc", NULL); - -@@ -1145,7 +1151,8 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) - debug_abbv_mscn, - debug_line_mscn, - debug_str_mscn, -- DiSlice_INVALID /* ALT .debug_str */ ); -+ DiSlice_INVALID, /* ALT .debug_str */ -+ debug_line_str ); - - /* The new reader: read the DIEs in .debug_info to acquire - information on variable types and locations or inline info. -@@ -1160,11 +1167,14 @@ Bool ML_(read_macho_debug_info)( struct _DebugInfo* di ) - debug_line_mscn, - debug_str_mscn, - debug_ranges_mscn, -+ debug_rnglists_mscn, -+ debug_loclists_mscn, - debug_loc_mscn, - DiSlice_INVALID, /* ALT .debug_info */ - DiSlice_INVALID, /* ALT .debug_abbv */ - DiSlice_INVALID, /* ALT .debug_line */ -- DiSlice_INVALID /* ALT .debug_str */ -+ DiSlice_INVALID, /* ALT .debug_str */ -+ debug_line_str_mscn /* .debug_line_str */ - ); - } - } --- -2.18.4 - diff --git a/valgrind-3.16.1-epoll.patch b/valgrind-3.16.1-epoll.patch deleted file mode 100644 index c6a0411..0000000 --- a/valgrind-3.16.1-epoll.patch +++ /dev/null @@ -1,117 +0,0 @@ -commit f326d68d762edf4b0e9604daa446b6f8ca25725a -Author: Mark Wielaard -Date: Sun Jul 26 22:40:22 2020 +0200 - - epoll_ctl warns for uninitialized padding on non-amd64 64bit arches - - struct vki_epoll_event is packed on x86_64, but not on other 64bit - arches. This means that on 64bit arches there can be padding in the - epoll_event struct. Seperately the data field is only used by user - space (which might not set the data field if it doesn't need to). - - Only check the events field on epoll_ctl. But assume both events - and data are both written to by epoll_[p]wait (exclude padding). - - https://bugs.kde.org/show_bug.cgi?id=422623 - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 5b5b7eee6..929a4d9af 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -2099,8 +2099,29 @@ PRE(sys_epoll_ctl) - SARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), SARG3, ARG4); - PRE_REG_READ4(long, "epoll_ctl", - int, epfd, int, op, int, fd, struct vki_epoll_event *, event); -- if (ARG2 != VKI_EPOLL_CTL_DEL) -- PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct vki_epoll_event) ); -+ if (ARG2 != VKI_EPOLL_CTL_DEL) { -+ /* Just check the events field, the data field is for user space and -+ unused by the kernel. */ -+ struct vki_epoll_event *event = (struct vki_epoll_event *) ARG4; -+ PRE_MEM_READ( "epoll_ctl(event)", (Addr) &event->events, -+ sizeof(__vki_u32) ); -+ } -+} -+ -+/* RES event records have been written (exclude padding). */ -+static void epoll_post_helper ( ThreadId tid, SyscallArgs* arrghs, -+ SyscallStatus* status ) -+{ -+ vg_assert(SUCCESS); -+ if (RES > 0) { -+ Int i; -+ struct vki_epoll_event **events = (struct vki_epoll_event**)(Addr)ARG2; -+ for (i = 0; i < RES; i++) { -+ /* Assume both events and data are set (data is user space only). */ -+ POST_FIELD_WRITE(events[i]->events); -+ POST_FIELD_WRITE(events[i]->data); -+ } -+ } - } - - PRE(sys_epoll_wait) -@@ -2111,13 +2132,12 @@ PRE(sys_epoll_wait) - PRE_REG_READ4(long, "epoll_wait", - int, epfd, struct vki_epoll_event *, events, - int, maxevents, int, timeout); -+ /* Assume all (maxevents) events records should be (fully) writable. */ - PRE_MEM_WRITE( "epoll_wait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); - } - POST(sys_epoll_wait) - { -- vg_assert(SUCCESS); -- if (RES > 0) -- POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ; -+ epoll_post_helper (tid, arrghs, status); - } - - PRE(sys_epoll_pwait) -@@ -2130,15 +2150,14 @@ PRE(sys_epoll_pwait) - int, epfd, struct vki_epoll_event *, events, - int, maxevents, int, timeout, vki_sigset_t *, sigmask, - vki_size_t, sigsetsize); -+ /* Assume all (maxevents) events records should be (fully) writable. */ - PRE_MEM_WRITE( "epoll_pwait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); - if (ARG5) - PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) ); - } - POST(sys_epoll_pwait) - { -- vg_assert(SUCCESS); -- if (RES > 0) -- POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ; -+ epoll_post_helper (tid, arrghs, status); - } - - PRE(sys_eventfd) -commit b74f9f23c8758c77367f18368ea95baa858544cb -Author: Mark Wielaard -Date: Tue Aug 18 23:58:55 2020 +0200 - - Fix epoll_ctl setting of array event and data fields. - - Fix for https://bugs.kde.org/show_bug.cgi?id=422623 in commit ecf5ba119 - epoll_ctl warns for uninitialized padding on non-amd64 64bit arches - contained a bug. A pointer to an array is not a pointer to a pointer to - an array. Found by a Fedora user: - https://bugzilla.redhat.com/show_bug.cgi?id=1844778#c10 - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 0850487e9..3f488795a 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -2115,11 +2115,11 @@ static void epoll_post_helper ( ThreadId tid, SyscallArgs* arrghs, - vg_assert(SUCCESS); - if (RES > 0) { - Int i; -- struct vki_epoll_event **events = (struct vki_epoll_event**)(Addr)ARG2; -+ struct vki_epoll_event *events = (struct vki_epoll_event*)(Addr)ARG2; - for (i = 0; i < RES; i++) { - /* Assume both events and data are set (data is user space only). */ -- POST_FIELD_WRITE(events[i]->events); -- POST_FIELD_WRITE(events[i]->data); -+ POST_FIELD_WRITE(events[i].events); -+ POST_FIELD_WRITE(events[i].data); - } - } - } diff --git a/valgrind-3.16.1-faccessat2.patch b/valgrind-3.16.1-faccessat2.patch deleted file mode 100644 index 9751f45..0000000 --- a/valgrind-3.16.1-faccessat2.patch +++ /dev/null @@ -1,201 +0,0 @@ -From fe4b349df3d5edc1c849e9890cbc6b191386a03c Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Fri, 16 Oct 2020 02:55:06 +0200 -Subject: [PATCH] Support new faccessat2 linux syscall (439) - -faccessat2 is a new syscall in linux 5.8 and will be used by glibc 2.33. -faccessat2 is simply faccessat with a new flag argument. It has -a common number across all linux arches. - -https://bugs.kde.org/427787 ---- - NEWS | 1 + - coregrind/m_syswrap/priv_syswrap-linux.h | 1 + - coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-linux.c | 9 +++++++++ - coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + - coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + - coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ - include/vki/vki-scnums-shared-linux.h | 2 ++ - 14 files changed, 31 insertions(+) - -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index eb0b320ca..110f7c832 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -180,6 +180,7 @@ DECL_TEMPLATE(linux, sys_symlinkat); - DECL_TEMPLATE(linux, sys_readlinkat); - DECL_TEMPLATE(linux, sys_fchmodat); - DECL_TEMPLATE(linux, sys_faccessat); -+DECL_TEMPLATE(linux, sys_faccessat2); - DECL_TEMPLATE(linux, sys_utimensat); - DECL_TEMPLATE(linux, sys_name_to_handle_at); - DECL_TEMPLATE(linux, sys_open_by_handle_at); -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index d6f3eb910..45e1f3d1b 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -873,6 +873,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 70700e53f..978aedbe6 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1046,6 +1046,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_futex_time64, sys_futex_time64), // 422 - LINXY(__NR_sched_rr_get_interval_time64, - sys_sched_rr_get_interval_time64), // 423 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index acca02442..051d84989 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -825,6 +825,8 @@ static SyscallTableEntry syscall_main_table[] = { - // (__NR_pkey_free, sys_ni_syscall), // 290 - - LINXY(__NR_statx, sys_statx), // 397 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 3f488795a..41849873e 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -5988,6 +5988,15 @@ PRE(sys_faccessat) - PRE_MEM_RASCIIZ( "faccessat(pathname)", ARG2 ); - } - -+PRE(sys_faccessat2) -+{ -+ PRINT("sys_faccessat2 ( %ld, %#" FMT_REGWORD "x(%s), %ld, %ld )", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3, SARG4); -+ PRE_REG_READ4(long, "faccessat2", -+ int, dfd, const char *, pathname, int, mode, int, flags); -+ PRE_MEM_RASCIIZ( "faccessat2(pathname)", ARG2 ); -+} -+ - PRE(sys_name_to_handle_at) - { - PRINT("sys_name_to_handle_at ( %ld, %#" FMT_REGWORD "x(%s), %#" -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index 5face576b..f35fb8bbb 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1131,6 +1131,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_futex_time64, sys_futex_time64), // 422 - LINXY(__NR_sched_rr_get_interval_time64, - sys_sched_rr_get_interval_time64), // 423 -+ -+ LINX_ (__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index c64911a50..bd260679c 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -812,6 +812,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_ (__NR_syncfs, sys_syncfs), - LINXY (__NR_statx, sys_statx), - LINX_ (__NR_setns, sys_setns), -+ LINX_ (__NR_faccessat2, sys_faccessat2), - }; - - SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index 7ceecb6da..a904745ab 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -821,6 +821,7 @@ static SyscallTableEntry syscall_main_table[] = { - // (__NR_pkey_mprotect, sys_ni_syscall), - // (__NR_pkey_alloc, sys_ni_syscall), - // (__NR_pkey_free, sys_ni_syscall), -+ LINX_ (__NR_faccessat2, sys_faccessat2), - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index c19cb9e0e..6ddd482d9 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1049,6 +1049,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_futex_time64, sys_futex_time64), // 422 - LINXY(__NR_sched_rr_get_interval_time64, - sys_sched_rr_get_interval_time64), // 423 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index b6422a765..7026e4ac6 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1014,6 +1014,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_pwritev2, sys_pwritev2), // 381 - - LINXY(__NR_statx, sys_statx), // 383 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index 3427fee16..c5e4bb957 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -859,6 +859,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_pwritev2, sys_pwritev2), // 377 - - LINXY(__NR_statx, sys_statx), // 379 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index b59d96f37..67d866497 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1644,6 +1644,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register),// 427 -+ -+ LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -index 6221d5a81..c8bc31b4b 100644 ---- a/include/vki/vki-scnums-shared-linux.h -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -39,4 +39,6 @@ - #define __NR_fsmount 432 - #define __NR_fspick 433 - -+#define __NR_faccessat2 439 -+ - #endif --- -2.20.1 - diff --git a/valgrind-3.16.1-ficlone.patch b/valgrind-3.16.1-ficlone.patch deleted file mode 100644 index 83b00a3..0000000 --- a/valgrind-3.16.1-ficlone.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit 1c49351424f04ee29a5efc054cb08ab3ad22b978 -Author: Laurent Bonnans -Date: Fri Nov 16 15:22:18 2018 +0100 - - Fix 397605 - Add support for Linux FICLONE ioctl - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 41849873e..328e02a98 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -7961,6 +7961,11 @@ PRE(sys_ioctl) - case VKI_FIBMAP: - PRE_MEM_READ( "ioctl(FIBMAP)", ARG3, sizeof(int)); - break; -+ case VKI_FICLONE: -+ /* The direction of FICLONE (W) is incorrectly specified -+ * as it expects a file descriptor and not a pointer to -+ * user data */ -+ break; - - case VKI_FBIOGET_VSCREENINFO: /* 0x4600 */ - PRE_MEM_WRITE( "ioctl(FBIOGET_VSCREENINFO)", ARG3, -@@ -10898,6 +10903,8 @@ POST(sys_ioctl) - case VKI_FIBMAP: - POST_MEM_WRITE(ARG3, sizeof(int)); - break; -+ case VKI_FICLONE: -+ break; - - case VKI_FBIOGET_VSCREENINFO: //0x4600 - POST_MEM_WRITE(ARG3, sizeof(struct vki_fb_var_screeninfo)); -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index ef93b9258..3b9dc3779 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -1888,6 +1888,7 @@ struct vki_ppdev_frob_struct { - - #define VKI_FIBMAP _VKI_IO(0x00,1) /* bmap access */ - #define VKI_FIGETBSZ _VKI_IO(0x00,2) /* get the block size used for bmap */ -+#define VKI_FICLONE _VKI_IOW(0x94, 9, int) - - //---------------------------------------------------------------------- - // From linux-2.6.8.1/include/scsi/sg.h diff --git a/valgrind-3.16.1-gdbserver_nlcontrolc.patch b/valgrind-3.16.1-gdbserver_nlcontrolc.patch deleted file mode 100644 index fbc7854..0000000 --- a/valgrind-3.16.1-gdbserver_nlcontrolc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/gdbserver_tests/nlcontrolc.vgtest b/gdbserver_tests/nlcontrolc.vgtest -index bb5308403..4eb479595 100644 ---- a/gdbserver_tests/nlcontrolc.vgtest -+++ b/gdbserver_tests/nlcontrolc.vgtest -@@ -13,7 +13,7 @@ args: 1000000000 1000000000 1000000000 BSBSBSBS 1 - vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-nlcontrolc - stderr_filter: filter_stderr - # Bug 338633 nlcontrol hangs on arm64 currently. --prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/os_test solaris -+prereq: false && test -e gdb -a -f vgdb.invoker && ! ../tests/arch_test arm64 && ! ../tests/os_test solaris - progB: gdb - argsB: --quiet -l 60 --nx ./sleepers - stdinB: nlcontrolc.stdinB.gdb diff --git a/valgrind-3.16.1-open-proc-self-exe.patch b/valgrind-3.16.1-open-proc-self-exe.patch deleted file mode 100644 index 343f759..0000000 --- a/valgrind-3.16.1-open-proc-self-exe.patch +++ /dev/null @@ -1,98 +0,0 @@ -diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h -index 4717abac6..c50b31399 100644 ---- a/coregrind/m_syswrap/priv_syswrap-generic.h -+++ b/coregrind/m_syswrap/priv_syswrap-generic.h -@@ -106,6 +106,10 @@ extern Bool - ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, - int flags); - -+extern Bool -+ML_(handle_self_exe_open)(SyscallStatus *status, const HChar *filename, -+ int flags); -+ - /* Helper function for generic mprotect and linux pkey_mprotect. */ - extern void handle_sys_mprotect (ThreadId tid, SyscallStatus *status, - Addr *addr, SizeT *len, Int *prot); -diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c -index 7d4b385a3..3810f7474 100644 ---- a/coregrind/m_syswrap/syswrap-generic.c -+++ b/coregrind/m_syswrap/syswrap-generic.c -@@ -4078,6 +4078,38 @@ Bool ML_(handle_auxv_open)(SyscallStatus *status, const HChar *filename, - } - #endif // defined(VGO_linux) || defined(VGO_solaris) - -+#if defined(VGO_linux) -+Bool ML_(handle_self_exe_open)(SyscallStatus *status, const HChar *filename, -+ int flags) -+{ -+ HChar name[30]; // large enough for /proc//exe -+ -+ if (!ML_(safe_to_deref)((const void *) filename, 1)) -+ return False; -+ -+ /* Opening /proc//exe or /proc/self/exe? */ -+ VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)()); -+ if (!VG_STREQ(filename, name) && !VG_STREQ(filename, "/proc/self/exe")) -+ return False; -+ -+ /* Allow to open the file only for reading. */ -+ if (flags & (VKI_O_WRONLY | VKI_O_RDWR)) { -+ SET_STATUS_Failure(VKI_EACCES); -+ return True; -+ } -+ -+ SysRes sres = VG_(dup)(VG_(cl_exec_fd)); -+ SET_STATUS_from_SysRes(sres); -+ if (!sr_isError(sres)) { -+ OffT off = VG_(lseek)(sr_Res(sres), 0, VKI_SEEK_SET); -+ if (off < 0) -+ SET_STATUS_Failure(VKI_EMFILE); -+ } -+ -+ return True; -+} -+#endif // defined(VGO_linux) -+ - PRE(sys_open) - { - if (ARG2 & VKI_O_CREAT) { -@@ -4119,8 +4151,10 @@ PRE(sys_open) - } - } - -- /* Handle also the case of /proc/self/auxv or /proc//auxv. */ -- if (ML_(handle_auxv_open)(status, (const HChar *)(Addr)ARG1, ARG2)) -+ /* Handle also the case of /proc/self/auxv or /proc//auxv -+ or /proc/self/exe or /proc//exe. */ -+ if (ML_(handle_auxv_open)(status, (const HChar *)(Addr)ARG1, ARG2) -+ || ML_(handle_self_exe_open)(status, (const HChar *)(Addr)ARG1, ARG2)) - return; - #endif // defined(VGO_linux) - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 52074149d..fcc534454 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -5745,6 +5745,22 @@ PRE(sys_openat) - return; - } - -+ /* And for /proc/self/exe or /proc//exe case. */ -+ -+ VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)()); -+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 ) -+ && (VG_(strcmp)((HChar *)(Addr)ARG2, name) == 0 -+ || VG_(strcmp)((HChar *)(Addr)ARG2, "/proc/self/exe") == 0)) { -+ sres = VG_(dup)( VG_(cl_exec_fd) ); -+ SET_STATUS_from_SysRes( sres ); -+ if (!sr_isError(sres)) { -+ OffT off = VG_(lseek)( sr_Res(sres), 0, VKI_SEEK_SET ); -+ if (off < 0) -+ SET_STATUS_Failure( VKI_EMFILE ); -+ } -+ return; -+ } -+ - /* Otherwise handle normally */ - *flags |= SfMayBlock; - } diff --git a/valgrind-3.16.1-ppc64-scv-hwcap.patch b/valgrind-3.16.1-ppc64-scv-hwcap.patch deleted file mode 100644 index ef88bef..0000000 --- a/valgrind-3.16.1-ppc64-scv-hwcap.patch +++ /dev/null @@ -1,57 +0,0 @@ -From a88c168b4dd607bca47d3a1ec08573d3e5fa889b Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Fri, 8 Jan 2021 15:08:50 +0100 -Subject: [PATCH] ppc64: Mask unrecognized AT_HWCAP2 values - -Also suppress printing a log message for scv instructions in the -instruction stream. - -These changes are required for running glibc 2.33 on kernels with scv -support under valgrind. ---- - VEX/priv/guest_ppc_toIR.c | 5 +++-- - coregrind/m_initimg/initimg-linux.c | 6 ++++++ - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index e7b576fa2..99e96a577 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -8739,8 +8739,9 @@ - { - IRType ty = mode64 ? Ity_I64 : Ity_I32; - -- if (theInstr != 0x44000002) { -- vex_printf("dis_syslink(ppc)(theInstr)\n"); -+ if (theInstr != 0x44000002) { // sc -+ if (theInstr != 0x44000001) // scv -+ vex_printf("dis_syslink(ppc)(theInstr)\n"); - return False; - } - -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index ba84fa6e9..fb68ae00b 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -750,6 +750,7 @@ Addr setup_client_stack( void* init_sp, - PPC_FEATURE2_HAS_ISEL 0x08000000 - PPC_FEATURE2_HAS_TAR 0x04000000 - PPC_FEATURE2_HAS_VCRYPTO 0x02000000 -+ PPC_FEATURE2_HAS_IEEE128 0x00400000 - */ - auxv_2_07 = (auxv->u.a_val & 0x80000000ULL) == 0x80000000ULL; - hw_caps_2_07 = (vex_archinfo->hwcaps & VEX_HWCAPS_PPC64_ISA2_07) -@@ -757,6 +757,11 @@ - * matches the setting in VEX HWCAPS. - */ - vg_assert(auxv_2_07 == hw_caps_2_07); -+ -+ /* Mask unrecognized HWCAP bits. Only keep the bits that have -+ * been mentioned above. -+ */ -+ auxv->u.a_val &= 0xfec00000ULL; - } - - break; ---- valgrind-3.16.1/VEX/priv/guest_ppc_toIR.c 2021-01-08 16:43:45.947122866 +0100 -+++ guest_ppc_toIR.c.new 2021-01-08 16:43:40.238166866 +0100 diff --git a/valgrind-3.16.1-pthread-intercept.patch b/valgrind-3.16.1-pthread-intercept.patch deleted file mode 100644 index 8234314..0000000 --- a/valgrind-3.16.1-pthread-intercept.patch +++ /dev/null @@ -1,222 +0,0 @@ -commit 15330adf7c2471fbaa6a0818db07078d81dbff97 -Author: Bart Van Assche -Date: Sat Sep 19 08:08:59 2020 -0700 - - drd: Port to Fedora 33 - - Apparently on Fedora 33 the POSIX thread functions exist in both libc and - libpthread. Hence this patch that intercepts the pthread functions in - libc. See also https://bugs.kde.org/show_bug.cgi?id=426144 . - -diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c -index 58c45aaec..c2882e5ab 100644 ---- a/drd/drd_pthread_intercepts.c -+++ b/drd/drd_pthread_intercepts.c -@@ -174,7 +174,16 @@ static int never_true; - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ - { return implf argl; } - #else -+/* -+ * On Linux, intercept both the libc and the libpthread functions. At -+ * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread -+ * functions in both libc and libpthread. Older glibc versions only have an -+ * implementation of the pthread functions in libpthread. -+ */ - #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ -+ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ -+ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ -+ { return implf argl; } \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ - { return implf argl; } - -commit 3073d03e4b6e76797828b3f466863dbdda76cc7a -Author: Bart Van Assche -Date: Tue Oct 20 19:40:19 2020 -0700 - - drd: Unbreak the musl build - - See also https://bugs.kde.org/show_bug.cgi?id=428035. - - Reported-by: Stacy - Fixes: 15330adf7c24 ("drd: Port to Fedora 33") - -diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c -index 62c466f50..585aafe22 100644 ---- a/drd/drd_pthread_intercepts.c -+++ b/drd/drd_pthread_intercepts.c -@@ -174,6 +174,13 @@ static int never_true; - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ - { return implf argl; } - #else -+#ifdef MUSL_LIBC -+/* musl provides a single library that includes pthreads functions. */ -+#define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ -+ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ -+ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ -+ { return implf argl; } -+#else - /* - * On Linux, intercept both the libc and the libpthread functions. At - * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread -@@ -188,6 +195,7 @@ static int never_true; - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ - { return implf argl; } - #endif -+#endif - - /** - * Macro for generating three Valgrind interception functions: one with the -diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c - -index 585aafe22..3d1f90d3b 100644 ---- a/drd/drd_pthread_intercepts.c -+++ b/drd/drd_pthread_intercepts.c -@@ -151,7 +151,7 @@ static drd_rtld_guard_fn DRD_(rtld_bind_clear) = NULL; - * @param[in] arg_decl Argument declaration list enclosed in parentheses. - * @param[in] argl Argument list enclosed in parentheses. - */ --#ifdef VGO_darwin -+#if defined(VGO_darwin) - static int never_true; - #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ -@@ -164,29 +164,12 @@ static int never_true; - fflush(stdout); \ - return pth_func_result; \ - } --#elif defined(VGO_solaris) --/* On Solaris, libpthread is just a filter library on top of libc. -- * Threading and synchronization functions in runtime linker are not -- * intercepted. -- */ -+#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_ONLY) - #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ - { return implf argl; } --#else --#ifdef MUSL_LIBC --/* musl provides a single library that includes pthreads functions. */ --#define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ -- ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ -- ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ -- { return implf argl; } --#else --/* -- * On Linux, intercept both the libc and the libpthread functions. At -- * least glibc 2.32.9000 (Fedora 34) has an implementation of all pthread -- * functions in both libc and libpthread. Older glibc versions only have an -- * implementation of the pthread functions in libpthread. -- */ -+#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD) - #define PTH_FUNC(ret_ty, zf, implf, argl_decl, argl) \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl; \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBC_SONAME,zf) argl_decl \ -@@ -194,7 +177,8 @@ static int never_true; - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl; \ - ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl \ - { return implf argl; } --#endif -+#else -+# error "Unknown platform/thread wrapping" - #endif - - /** -diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c -index a10c3a4a3..2bc89f8a0 100644 ---- a/helgrind/hg_intercepts.c -+++ b/helgrind/hg_intercepts.c -@@ -78,26 +78,37 @@ - /*----------------------------------------------------------------*/ - - #if defined(VGO_solaris) --/* On Solaris, libpthread is just a filter library on top of libc. -- * Threading and synchronization functions in runtime linker are not -- * intercepted. -- */ --#define PTH_FUNC(ret_ty, f, args...) \ -- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args); \ -- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args) -- - /* pthread_t is typedef'd to 'unsigned int' but in DO_CREQ_* macros - sizeof(Word) is expected. */ - #define CREQ_PTHREAD_T Word - #define SEM_ERROR ret - #else --#define PTH_FUNC(ret_ty, f, args...) \ -- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ -- ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) - #define CREQ_PTHREAD_T pthread_t - #define SEM_ERROR errno - #endif /* VGO_solaris */ - -+#define HG_EXPAND(tok) #tok -+#define HG_STR(tok) HG_EXPAND(tok) -+#define HG_WEAK_ALIAS(name, aliasname) \ -+ extern __typeof (name) aliasname __attribute__ ((weak, alias(HG_STR(name)))) -+ -+#if defined(VG_WRAP_THREAD_FUNCTION_LIBPTHREAD_ONLY) -+#define PTH_FUNC(ret_ty, f, args...) \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) -+#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD) -+#define PTH_FUNC(ret_ty, f, args...) \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args); \ -+ HG_WEAK_ALIAS(I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f), I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)); \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBPTHREAD_SONAME,f)(args) -+#elif defined(VG_WRAP_THREAD_FUNCTION_LIBC_ONLY) -+#define PTH_FUNC(ret_ty, f, args...) \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args); \ -+ ret_ty I_WRAP_SONAME_FNNAME_ZZ(VG_Z_LIBC_SONAME,f)(args) -+#else -+# error "Unknown platform/thread wrapping" -+#endif -+ - // Do a client request. These are macros rather than a functions so - // as to avoid having an extra frame in stack traces. - -diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h -index bd65a44b4..d665afd98 100644 ---- a/include/pub_tool_redir.h -+++ b/include/pub_tool_redir.h -@@ -277,11 +277,7 @@ - /* --- Soname of the pthreads library. --- */ - - #if defined(VGO_linux) --# if defined(MUSL_LIBC) --# define VG_Z_LIBPTHREAD_SONAME libcZdZa // libc.* --#else - # define VG_Z_LIBPTHREAD_SONAME libpthreadZdsoZd0 // libpthread.so.0 --#endif - #elif defined(VGO_darwin) - # define VG_Z_LIBPTHREAD_SONAME libSystemZdZaZddylib // libSystem.*.dylib - #elif defined(VGO_solaris) -@@ -364,6 +360,27 @@ - - Bool VG_(is_soname_ld_so) (const HChar *soname); - -+// Some macros to help decide which libraries (libc or libpthread -+// or some platform-specific variation of these) should be used -+// for wrapping pthread/semaphore functions with DRD and Helgrind -+// The possibilities are a) only in libpthread -+// b) mabye in both libpthread and libc or c) only in libc -+// Linux GNU libc is moving from a) to c) (starting with Fedora 33) -+// Linux MUSL libc is c) -+// Darwin is a) -+// Solaris is c) -+// FreeBSD is b) -+ -+#if defined(VGO_darwin) -+#define VG_WRAP_THREAD_FUNCTION_LIBPTHREAD_ONLY -+#elif defined(VGO_solaris) || (defined(VGO_linux) && defined(MUSL_LIBC)) -+#define VG_WRAP_THREAD_FUNCTION_LIBC_ONLY -+#elif defined(VGO_linux) -+#define VG_WRAP_THREAD_FUNCTION_LIBC_AND_LIBPTHREAD -+#else -+# error "Unknown platform" -+#endif -+ - #endif // __PUB_TOOL_REDIR_H - - /*--------------------------------------------------------------------*/ diff --git a/valgrind-3.16.1-readdwarf-line.patch b/valgrind-3.16.1-readdwarf-line.patch deleted file mode 100644 index cfe34a8..0000000 --- a/valgrind-3.16.1-readdwarf-line.patch +++ /dev/null @@ -1,53 +0,0 @@ -commit 67363912e9cdba83869a72ff8c4084e7a7e4ab85 -Author: Mark Wielaard -Date: Sun Feb 21 22:45:51 2021 +0100 - - Fix typo in DWARF 5 line table readers - - This typo meant the directory entry was most often zero, which - happened to be sometimes correct anyway (since zero is the compdir). - So for simple testcases it looked correct. But it would be wrong for - compilation units not in the current compdir. Like files compiled with - a relative of absolute path. - - The same typo was in both readdwarf.c (read_dwarf2_lineblock) and - readdwarf3.c (read_filename_table). read_dwarf2_lineblock also had - an extra "dwarf" string in the debug-line output. - - https://bugzilla.redhat.com/show_bug.cgi?id=1927153 - -diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c -index 88d5d99f1..3996623ed 100644 ---- a/coregrind/m_debuginfo/readdwarf.c -+++ b/coregrind/m_debuginfo/readdwarf.c -@@ -683,7 +683,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - directories_count = step_leb128U(&data); - /* Read the contents of the Directory table. */ - if (di->ddump_line) -- VG_(printf)(" dwarf The Directory Table%s\n", -+ VG_(printf)(" The Directory Table%s\n", - directories_count == 0 ? " is empty." : ":" ); - - for (n = 0; n < directories_count; n++) { -@@ -796,7 +796,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di, - if (f == p_ndx) - name = get_line_str (di, ui, &data, form, - debugstr_img, debuglinestr_img); -- else if (n == d_ndx) -+ else if (f == d_ndx) - diridx = get_line_ndx (di, &data, form); - else - data = skip_line_form (di, ui, data, form); -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 82bc8f241..60fc40244 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -2323,7 +2323,7 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table, - if (f == p_ndx) - str = get_line_str (cc->di, cc->is_dw64, &c, form, - debugstr_img, debuglinestr_img); -- else if (n == d_ndx) -+ else if (f == d_ndx) - dir_xa_ix = get_line_ndx (cc->di, &c, form); - else - skip_line_form (cc->di, cc->is_dw64, &c, form); diff --git a/valgrind-3.16.1-s390_emit_load_mem.patch b/valgrind-3.16.1-s390_emit_load_mem.patch deleted file mode 100644 index 95da59f..0000000 --- a/valgrind-3.16.1-s390_emit_load_mem.patch +++ /dev/null @@ -1,27 +0,0 @@ -commit ba73f8d2ebe4b5fe8163ee5ab806f0e50961ebdf -Author: Andreas Arnez -Date: Tue Nov 3 18:17:30 2020 +0100 - - Bug 428648 - s390x: Force 12-bit amode for vector loads in isel - - Similar to Bug 417452, where the instruction selector sometimes attempted - to generate vector stores with a 20-bit displacement, the same problem has - now been reported with vector loads. - - The problem is caused in s390_isel_vec_expr_wrk(), where the addressing - mode is generated with s390_isel_amode() instead of - s390_isel_amode_short(). This is fixed. - -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 2f80dd850..134f3eb6f 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -3741,7 +3741,7 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - /* --------- LOAD --------- */ - case Iex_Load: { - HReg dst = newVRegV(env); -- s390_amode *am = s390_isel_amode(env, expr->Iex.Load.addr); -+ s390_amode *am = s390_isel_amode_short(env, expr->Iex.Load.addr); - - if (expr->Iex.Load.end != Iend_BE) - goto irreducible; diff --git a/valgrind-3.16.1-s390x-z14-vector.patch b/valgrind-3.16.1-s390x-z14-vector.patch deleted file mode 100644 index 747c8a8..0000000 --- a/valgrind-3.16.1-s390x-z14-vector.patch +++ /dev/null @@ -1,2977 +0,0 @@ -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index 9f93cff19..905429015 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as -@@ -263,26 +263,27 @@ extern ULong last_execute_target; - before S390_VEC_OP_LAST. */ - typedef enum { - S390_VEC_OP_INVALID = 0, -- S390_VEC_OP_VPKS = 1, -- S390_VEC_OP_VPKLS = 2, -- S390_VEC_OP_VFAE = 3, -- S390_VEC_OP_VFEE = 4, -- S390_VEC_OP_VFENE = 5, -- S390_VEC_OP_VISTR = 6, -- S390_VEC_OP_VSTRC = 7, -- S390_VEC_OP_VCEQ = 8, -- S390_VEC_OP_VTM = 9, -- S390_VEC_OP_VGFM = 10, -- S390_VEC_OP_VGFMA = 11, -- S390_VEC_OP_VMAH = 12, -- S390_VEC_OP_VMALH = 13, -- S390_VEC_OP_VCH = 14, -- S390_VEC_OP_VCHL = 15, -- S390_VEC_OP_VFCE = 16, -- S390_VEC_OP_VFCH = 17, -- S390_VEC_OP_VFCHE = 18, -- S390_VEC_OP_VFTCI = 19, -- S390_VEC_OP_LAST = 20 // supposed to be the last element in enum -+ S390_VEC_OP_VPKS, -+ S390_VEC_OP_VPKLS, -+ S390_VEC_OP_VFAE, -+ S390_VEC_OP_VFEE, -+ S390_VEC_OP_VFENE, -+ S390_VEC_OP_VISTR, -+ S390_VEC_OP_VSTRC, -+ S390_VEC_OP_VCEQ, -+ S390_VEC_OP_VTM, -+ S390_VEC_OP_VGFM, -+ S390_VEC_OP_VGFMA, -+ S390_VEC_OP_VMAH, -+ S390_VEC_OP_VMALH, -+ S390_VEC_OP_VCH, -+ S390_VEC_OP_VCHL, -+ S390_VEC_OP_VFTCI, -+ S390_VEC_OP_VFMIN, -+ S390_VEC_OP_VFMAX, -+ S390_VEC_OP_VBPERM, -+ S390_VEC_OP_VMSL, -+ S390_VEC_OP_LAST // supposed to be the last element in enum - } s390x_vec_op_t; - - /* Arguments of s390x_dirtyhelper_vec_op(...) which are packed into one -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index a470d9f8d..b71b621ae 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as -@@ -314,20 +314,11 @@ ULong s390x_dirtyhelper_STCKE(ULong *addr) {return 3;} - /*--- Dirty helper for Store Facility instruction ---*/ - /*------------------------------------------------------------*/ - #if defined(VGA_s390x) --static void --s390_set_facility_bit(ULong *addr, UInt bitno, UInt value) --{ -- addr += bitno / 64; -- bitno = bitno % 64; -- -- ULong mask = 1; -- mask <<= (63 - bitno); - -- if (value == 1) { -- *addr |= mask; // set -- } else { -- *addr &= ~mask; // clear -- } -+static ULong -+s390_stfle_range(UInt lo, UInt hi) -+{ -+ return ((1UL << (hi + 1 - lo)) - 1) << (63 - (hi % 64)); - } - - ULong -@@ -336,6 +327,77 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) - ULong hoststfle[S390_NUM_FACILITY_DW], cc, num_dw, i; - register ULong reg0 asm("0") = guest_state->guest_r0 & 0xF; /* r0[56:63] */ - -+ /* Restrict to facilities that we know about and that we assume to be -+ compatible with Valgrind. Of course, in this way we may reject features -+ that Valgrind is not really involved in (and thus would be compatible -+ with), but quering for such features doesn't seem like a typical use -+ case. */ -+ ULong accepted_facility[S390_NUM_FACILITY_DW] = { -+ /* === 0 .. 63 === */ -+ (s390_stfle_range(0, 16) -+ /* 17: message-security-assist, not supported */ -+ | s390_stfle_range(18, 19) -+ /* 20: HFP-multiply-and-add/subtract, not supported */ -+ | s390_stfle_range(21, 22) -+ /* 23: HFP-unnormalized-extension, not supported */ -+ | s390_stfle_range(24, 25) -+ /* 26: parsing-enhancement, not supported */ -+ | s390_stfle_range(27, 28) -+ /* 29: unassigned */ -+ | s390_stfle_range(30, 30) -+ /* 31: extract-CPU-time, not supported */ -+ | s390_stfle_range(32, 41) -+ /* 42-43: DFP, not fully supported */ -+ /* 44: PFPO, not fully supported */ -+ | s390_stfle_range(45, 47) -+ /* 48: DFP zoned-conversion, not supported */ -+ /* 49: includes PPA, not supported */ -+ /* 50: constrained transactional-execution, not supported */ -+ | s390_stfle_range(51, 55) -+ /* 56: unassigned */ -+ /* 57: MSA5, not supported */ -+ | s390_stfle_range(58, 60) -+ /* 61: miscellaneous-instruction 3, not supported */ -+ | s390_stfle_range(62, 63)), -+ -+ /* === 64 .. 127 === */ -+ (s390_stfle_range(64, 72) -+ /* 73: transactional-execution, not supported */ -+ | s390_stfle_range(74, 75) -+ /* 76: MSA3, not supported */ -+ /* 77: MSA4, not supported */ -+ | s390_stfle_range(78, 78) -+ /* 80: DFP packed-conversion, not supported */ -+ /* 81: PPA-in-order, not supported */ -+ | s390_stfle_range(82, 82) -+ /* 83-127: unassigned */ ), -+ -+ /* === 128 .. 191 === */ -+ (s390_stfle_range(128, 131) -+ /* 132: unassigned */ -+ /* 133: guarded-storage, not supported */ -+ /* 134: vector packed decimal, not supported */ -+ | s390_stfle_range(135, 135) -+ /* 136: unassigned */ -+ /* 137: unassigned */ -+ | s390_stfle_range(138, 142) -+ /* 143: unassigned */ -+ | s390_stfle_range(144, 145) -+ /* 146: MSA8, not supported */ -+ | s390_stfle_range(147, 147) -+ /* 148: vector-enhancements 2, not supported */ -+ | s390_stfle_range(149, 149) -+ /* 150: unassigned */ -+ /* 151: DEFLATE-conversion, not supported */ -+ /* 153: unassigned */ -+ /* 154: unassigned */ -+ /* 155: MSA9, not supported */ -+ | s390_stfle_range(156, 156) -+ /* 157-167: unassigned */ -+ | s390_stfle_range(168, 168) -+ /* 168-191: unassigned */ ), -+ }; -+ - /* We cannot store more than S390_NUM_FACILITY_DW - (and it makes not much sense to do so anyhow) */ - if (reg0 > S390_NUM_FACILITY_DW - 1) -@@ -351,35 +413,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) - /* Update guest register 0 with what STFLE set r0 to */ - guest_state->guest_r0 = reg0; - -- /* Set default: VM facilities = host facilities */ -+ /* VM facilities = host facilities, filtered by acceptance */ - for (i = 0; i < num_dw; ++i) -- addr[i] = hoststfle[i]; -- -- /* Now adjust the VM facilities according to what the VM supports */ -- s390_set_facility_bit(addr, S390_FAC_LDISP, 1); -- s390_set_facility_bit(addr, S390_FAC_EIMM, 1); -- s390_set_facility_bit(addr, S390_FAC_ETF2, 1); -- s390_set_facility_bit(addr, S390_FAC_ETF3, 1); -- s390_set_facility_bit(addr, S390_FAC_GIE, 1); -- s390_set_facility_bit(addr, S390_FAC_EXEXT, 1); -- s390_set_facility_bit(addr, S390_FAC_HIGHW, 1); -- s390_set_facility_bit(addr, S390_FAC_LSC2, 1); -- -- s390_set_facility_bit(addr, S390_FAC_HFPMAS, 0); -- s390_set_facility_bit(addr, S390_FAC_HFPUNX, 0); -- s390_set_facility_bit(addr, S390_FAC_XCPUT, 0); -- s390_set_facility_bit(addr, S390_FAC_MSA, 0); -- s390_set_facility_bit(addr, S390_FAC_PENH, 0); -- s390_set_facility_bit(addr, S390_FAC_DFP, 0); -- s390_set_facility_bit(addr, S390_FAC_PFPO, 0); -- s390_set_facility_bit(addr, S390_FAC_DFPZC, 0); -- s390_set_facility_bit(addr, S390_FAC_MISC, 0); -- s390_set_facility_bit(addr, S390_FAC_CTREXE, 0); -- s390_set_facility_bit(addr, S390_FAC_TREXE, 0); -- s390_set_facility_bit(addr, S390_FAC_MSA4, 0); -- s390_set_facility_bit(addr, S390_FAC_VXE, 0); -- s390_set_facility_bit(addr, S390_FAC_VXE2, 0); -- s390_set_facility_bit(addr, S390_FAC_DFLT, 0); -+ addr[i] = hoststfle[i] & accepted_facility[i]; - - return cc; - } -@@ -2500,25 +2536,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - vassert(d->op > S390_VEC_OP_INVALID && d->op < S390_VEC_OP_LAST); - static const UChar opcodes[][2] = { - {0x00, 0x00}, /* invalid */ -- {0xe7, 0x97}, /* VPKS */ -- {0xe7, 0x95}, /* VPKLS */ -- {0xe7, 0x82}, /* VFAE */ -- {0xe7, 0x80}, /* VFEE */ -- {0xe7, 0x81}, /* VFENE */ -- {0xe7, 0x5c}, /* VISTR */ -- {0xe7, 0x8a}, /* VSTRC */ -- {0xe7, 0xf8}, /* VCEQ */ -- {0xe7, 0xd8}, /* VTM */ -- {0xe7, 0xb4}, /* VGFM */ -- {0xe7, 0xbc}, /* VGFMA */ -- {0xe7, 0xab}, /* VMAH */ -- {0xe7, 0xa9}, /* VMALH */ -- {0xe7, 0xfb}, /* VCH */ -- {0xe7, 0xf9}, /* VCHL */ -- {0xe7, 0xe8}, /* VFCE */ -- {0xe7, 0xeb}, /* VFCH */ -- {0xe7, 0xea}, /* VFCHE */ -- {0xe7, 0x4a} /* VFTCI */ -+ [S390_VEC_OP_VPKS] = {0xe7, 0x97}, -+ [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, -+ [S390_VEC_OP_VFAE] = {0xe7, 0x82}, -+ [S390_VEC_OP_VFEE] = {0xe7, 0x80}, -+ [S390_VEC_OP_VFENE] = {0xe7, 0x81}, -+ [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, -+ [S390_VEC_OP_VSTRC] = {0xe7, 0x8a}, -+ [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, -+ [S390_VEC_OP_VTM] = {0xe7, 0xd8}, -+ [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, -+ [S390_VEC_OP_VGFMA] = {0xe7, 0xbc}, -+ [S390_VEC_OP_VMAH] = {0xe7, 0xab}, -+ [S390_VEC_OP_VMALH] = {0xe7, 0xa9}, -+ [S390_VEC_OP_VCH] = {0xe7, 0xfb}, -+ [S390_VEC_OP_VCHL] = {0xe7, 0xf9}, -+ [S390_VEC_OP_VFTCI] = {0xe7, 0x4a}, -+ [S390_VEC_OP_VFMIN] = {0xe7, 0xee}, -+ [S390_VEC_OP_VFMAX] = {0xe7, 0xef}, -+ [S390_VEC_OP_VBPERM]= {0xe7, 0x85}, -+ [S390_VEC_OP_VMSL] = {0xe7, 0xb8}, - }; - - union { -@@ -2612,6 +2649,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - case S390_VEC_OP_VGFMA: - case S390_VEC_OP_VMAH: - case S390_VEC_OP_VMALH: -+ case S390_VEC_OP_VMSL: - the_insn.VRRd.v1 = 1; - the_insn.VRRd.v2 = 2; - the_insn.VRRd.v3 = 3; -@@ -2621,9 +2659,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - the_insn.VRRd.m6 = d->m5; - break; - -- case S390_VEC_OP_VFCE: -- case S390_VEC_OP_VFCH: -- case S390_VEC_OP_VFCHE: -+ case S390_VEC_OP_VFMIN: -+ case S390_VEC_OP_VFMAX: -+ case S390_VEC_OP_VBPERM: - the_insn.VRRc.v1 = 1; - the_insn.VRRc.v2 = 2; - the_insn.VRRc.v3 = 3; -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index c27a8d3fe..5f2c5ce98 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as -@@ -248,6 +248,13 @@ typedef enum { - #define VRS_d2(insn) (((insn) >> 32) & 0xfff) - #define VRS_m4(insn) (((insn) >> 28) & 0xf) - #define VRS_rxb(insn) (((insn) >> 24) & 0xf) -+#define VRSd_v1(insn) (((insn) >> 28) & 0xf) -+#define VRSd_r3(insn) (((insn) >> 48) & 0xf) -+#define VSI_i3(insn) (((insn) >> 48) & 0xff) -+#define VSI_b2(insn) (((insn) >> 44) & 0xf) -+#define VSI_d2(insn) (((insn) >> 32) & 0xfff) -+#define VSI_v1(insn) (((insn) >> 28) & 0xf) -+#define VSI_rxb(insn) (((insn) >> 24) & 0xf) - - - /*------------------------------------------------------------*/ -@@ -1934,6 +1941,26 @@ s390_vr_get_type(const UChar m) - return results[m]; - } - -+/* Determine IRType from instruction's floating-point format field */ -+static IRType -+s390_vr_get_ftype(const UChar m) -+{ -+ static const IRType results[] = {Ity_F32, Ity_F64, Ity_F128}; -+ if (m >= 2 && m <= 4) -+ return results[m - 2]; -+ return Ity_INVALID; -+} -+ -+/* Determine number of elements from instruction's floating-point format -+ field */ -+static UChar -+s390_vr_get_n_elem(const UChar m) -+{ -+ if (m >= 2 && m <= 4) -+ return 1 << (4 - m); -+ return 0; -+} -+ - /* Determine if Condition Code Set (CS) flag is set in m field */ - #define s390_vr_is_cs_set(m) (((m) & 0x1) != 0) - -@@ -2188,12 +2215,15 @@ s390_vr_offset_by_index(UInt archreg,IRType type, UChar index) - goto invalidIndex; - } - return vr_offset(archreg) + sizeof(ULong) * index; -+ - case Ity_V128: -+ case Ity_F128: - if(index == 0) { - return vr_qw_offset(archreg); - } else { - goto invalidIndex; - } -+ - default: - vpanic("s390_vr_offset_by_index: unknown type"); - } -@@ -2211,7 +2241,14 @@ put_vr(UInt archreg, IRType type, UChar index, IRExpr *expr) - UInt offset = s390_vr_offset_by_index(archreg, type, index); - vassert(typeOfIRExpr(irsb->tyenv, expr) == type); - -- stmt(IRStmt_Put(offset, expr)); -+ if (type == Ity_F128) { -+ IRTemp val = newTemp(Ity_F128); -+ assign(val, expr); -+ stmt(IRStmt_Put(offset, unop(Iop_F128HItoF64, mkexpr(val)))); -+ stmt(IRStmt_Put(offset + 8, unop(Iop_F128LOtoF64, mkexpr(val)))); -+ } else { -+ stmt(IRStmt_Put(offset, expr)); -+ } - } - - /* Read type sized part specified by index of a vr register. */ -@@ -2219,6 +2256,11 @@ static IRExpr * - get_vr(UInt archreg, IRType type, UChar index) - { - UInt offset = s390_vr_offset_by_index(archreg, type, index); -+ if (type == Ity_F128) { -+ return binop(Iop_F64HLtoF128, -+ IRExpr_Get(offset, Ity_F64), -+ IRExpr_Get(offset + 8, Ity_F64)); -+ } - return IRExpr_Get(offset, type); - } - -@@ -2294,11 +2336,11 @@ s390_getCountToBlockBoundary(IRTemp op2addr, UChar m) - return mkexpr(output); - } - --/* Load bytes into v1. -- maxIndex specifies max index to load and must be Ity_I32. -- If maxIndex >= 15, all 16 bytes are loaded. -- All bytes after maxIndex are zeroed. */ --static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) -+/* Starting from addr, load at most maxIndex + 1 bytes into v1. Fill the -+ leftmost or rightmost bytes of v1, depending on whether `rightmost' is set. -+ If maxIndex >= 15, load all 16 bytes; otherwise clear the remaining bytes. */ -+static void -+s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex, Bool rightmost) - { - IRTemp maxIdx = newTemp(Ity_I32); - IRTemp cappedMax = newTemp(Ity_I64); -@@ -2311,8 +2353,8 @@ static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) - crossed if and only if the real insn would have crossed it as well. - Thus, if the bytes to load are fully contained in an aligned 16-byte - chunk, load the whole 16-byte aligned chunk, and otherwise load 16 bytes -- from the unaligned address. Then shift the loaded data left-aligned -- into the target vector register. */ -+ from the unaligned address. Then shift the loaded data left- or -+ right-aligned into the target vector register. */ - - assign(maxIdx, maxIndex); - assign(cappedMax, mkite(binop(Iop_CmpLT32U, mkexpr(maxIdx), mkU32(15)), -@@ -2325,20 +2367,60 @@ static void s390_vr_loadWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex) - assign(back, mkite(binop(Iop_CmpLE64U, mkexpr(offset), mkexpr(zeroed)), - mkexpr(offset), mkU64(0))); - -- /* How much to shift the loaded 16-byte vector to the right, and then to -- the left. Since both 'zeroed' and 'back' range from 0 to 15, the shift -- amounts range from 0 to 120. */ -- IRExpr *shrAmount = binop(Iop_Shl64, -- binop(Iop_Sub64, mkexpr(zeroed), mkexpr(back)), -- mkU8(3)); -- IRExpr *shlAmount = binop(Iop_Shl64, mkexpr(zeroed), mkU8(3)); -+ IRExpr* chunk = load(Ity_V128, binop(Iop_Sub64, mkexpr(addr), mkexpr(back))); -+ -+ /* Shift the loaded 16-byte vector to the right, then to the left, or vice -+ versa, where each shift amount ranges from 0 to 120. */ -+ IRExpr* shift1; -+ IRExpr* shift2 = unop(Iop_64to8, binop(Iop_Shl64, mkexpr(zeroed), mkU8(3))); -+ -+ if (rightmost) { -+ shift1 = unop(Iop_64to8, binop(Iop_Shl64, mkexpr(back), mkU8(3))); -+ put_vr_qw(v1, binop(Iop_ShrV128, -+ binop(Iop_ShlV128, chunk, shift1), -+ shift2)); -+ } else { -+ shift1 = unop(Iop_64to8, -+ binop(Iop_Shl64, -+ binop(Iop_Sub64, mkexpr(zeroed), mkexpr(back)), -+ mkU8(3))); -+ put_vr_qw(v1, binop(Iop_ShlV128, -+ binop(Iop_ShrV128, chunk, shift1), -+ shift2)); -+ } -+} -+ -+/* Store at most maxIndex + 1 bytes from v1 to addr. Store the leftmost or -+ rightmost bytes of v1, depending on whether `rightmost' is set. If maxIndex -+ >= 15, store all 16 bytes. */ -+static void -+s390_vr_storeWithLength(UChar v1, IRTemp addr, IRExpr *maxIndex, Bool rightmost) -+{ -+ IRTemp maxIdx = newTemp(Ity_I32); -+ IRTemp cappedMax = newTemp(Ity_I64); -+ IRTemp counter = newTemp(Ity_I64); -+ IRExpr* offset; -+ -+ assign(maxIdx, maxIndex); -+ assign(cappedMax, mkite(binop(Iop_CmpLT32U, mkexpr(maxIdx), mkU32(15)), -+ unop(Iop_32Uto64, mkexpr(maxIdx)), mkU64(15))); -+ -+ assign(counter, get_counter_dw0()); -+ -+ if (rightmost) -+ offset = binop(Iop_Add64, -+ binop(Iop_Sub64, mkU64(15), mkexpr(cappedMax)), -+ mkexpr(counter)); -+ else -+ offset = mkexpr(counter); -+ -+ store(binop(Iop_Add64, mkexpr(addr), mkexpr(counter)), -+ binop(Iop_GetElem8x16, get_vr_qw(v1), unop(Iop_64to8, offset))); - -- put_vr_qw(v1, binop(Iop_ShlV128, -- binop(Iop_ShrV128, -- load(Ity_V128, -- binop(Iop_Sub64, mkexpr(addr), mkexpr(back))), -- unop(Iop_64to8, shrAmount)), -- unop(Iop_64to8, shlAmount))); -+ /* Check for end of field */ -+ put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); -+ iterate_if(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(cappedMax))); -+ put_counter_dw0(mkU64(0)); - } - - /* Bitwise vCond ? v1 : v2 -@@ -3749,6 +3831,28 @@ s390_format_VRS_RRDVM(const HChar *(*irgen)(UChar r1, IRTemp op2addr, UChar v3, - s390_disasm(ENC5(MNM, GPR, UDXB, VR, UINT), mnm, r1, d2, 0, b2, v3, m4); - } - -+static void -+s390_format_VRS_RRDV(const HChar *(*irgen)(UChar v1, UChar r3, IRTemp op2addr), -+ UChar v1, UChar r3, UChar b2, UShort d2, UChar rxb) -+{ -+ const HChar *mnm; -+ IRTemp op2addr = newTemp(Ity_I64); -+ -+ if (! s390_host_has_vx) { -+ emulation_failure(EmFail_S390X_vx); -+ return; -+ } -+ -+ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : -+ mkU64(0))); -+ -+ v1 = s390_vr_getVRindex(v1, 4, rxb); -+ mnm = irgen(v1, r3, op2addr); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) -+ s390_disasm(ENC4(MNM, VR, GPR, UDXB), mnm, v1, r3, d2, 0, b2); -+} -+ - - static void - s390_format_VRS_VRDVM(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar v3, -@@ -4081,6 +4185,29 @@ s390_format_VRRa_VVVMMM(const HChar *(*irgen)(UChar v1, UChar v2, UChar v3, - mnm, v1, v2, v3, m4, m5, m6); - } - -+static void -+s390_format_VSI_URDV(const HChar *(*irgen)(UChar v1, IRTemp op2addr, UChar i3), -+ UChar v1, UChar b2, UChar d2, UChar i3, UChar rxb) -+{ -+ const HChar *mnm; -+ IRTemp op2addr = newTemp(Ity_I64); -+ -+ if (!s390_host_has_vx) { -+ emulation_failure(EmFail_S390X_vx); -+ return; -+ } -+ -+ v1 = s390_vr_getVRindex(v1, 4, rxb); -+ -+ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : -+ mkU64(0))); -+ -+ mnm = irgen(v1, op2addr, i3); -+ -+ if (vex_traceflags & VEX_TRACE_FE) -+ s390_disasm(ENC4(MNM, VR, UDXB, UINT), mnm, v1, d2, 0, b2, i3); -+} -+ - /*------------------------------------------------------------*/ - /*--- Build IR for opcodes ---*/ - /*------------------------------------------------------------*/ -@@ -16186,7 +16313,9 @@ s390_irgen_VGM(UChar v1, UShort i2, UChar m3) - static const HChar * - s390_irgen_VLLEZ(UChar v1, IRTemp op2addr, UChar m3) - { -- IRType type = s390_vr_get_type(m3); -+ s390_insn_assert("vllez", m3 <= 3 || m3 == 6); -+ -+ IRType type = s390_vr_get_type(m3 & 3); - IRExpr* op2 = load(type, mkexpr(op2addr)); - IRExpr* op2as64bit; - switch (type) { -@@ -16206,7 +16335,13 @@ s390_irgen_VLLEZ(UChar v1, IRTemp op2addr, UChar m3) - vpanic("s390_irgen_VLLEZ: unknown type"); - } - -- put_vr_dw0(v1, op2as64bit); -+ if (m3 == 6) { -+ /* left-aligned */ -+ put_vr_dw0(v1, binop(Iop_Shl64, op2as64bit, mkU8(32))); -+ } else { -+ /* right-aligned */ -+ put_vr_dw0(v1, op2as64bit); -+ } - put_vr_dw1(v1, mkU64(0)); - return "vllez"; - } -@@ -16615,7 +16750,7 @@ s390_irgen_VLBB(UChar v1, IRTemp addr, UChar m3) - s390_getCountToBlockBoundary(addr, m3), - mkU32(1)); - -- s390_vr_loadWithLength(v1, addr, maxIndex); -+ s390_vr_loadWithLength(v1, addr, maxIndex, False); - - return "vlbb"; - } -@@ -16623,41 +16758,50 @@ s390_irgen_VLBB(UChar v1, IRTemp addr, UChar m3) - static const HChar * - s390_irgen_VLL(UChar v1, IRTemp addr, UChar r3) - { -- s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3)); -+ s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3), False); - - return "vll"; - } - - static const HChar * --s390_irgen_VSTL(UChar v1, IRTemp addr, UChar r3) -+s390_irgen_VLRL(UChar v1, IRTemp addr, UChar i3) - { -- IRTemp counter = newTemp(Ity_I64); -- IRTemp maxIndexToStore = newTemp(Ity_I64); -- IRTemp gpr3 = newTemp(Ity_I64); -- -- assign(gpr3, unop(Iop_32Uto64, get_gpr_w1(r3))); -- assign(maxIndexToStore, mkite(binop(Iop_CmpLE64U, -- mkexpr(gpr3), -- mkU64(16) -- ), -- mkexpr(gpr3), -- mkU64(16) -- ) -- ); -+ s390_insn_assert("vlrl", (i3 & 0xf0) == 0); -+ s390_vr_loadWithLength(v1, addr, mkU32((UInt) i3), True); - -- assign(counter, get_counter_dw0()); -+ return "vlrl"; -+} - -- store(binop(Iop_Add64, mkexpr(addr), mkexpr(counter)), -- binop(Iop_GetElem8x16, get_vr_qw(v1), unop(Iop_64to8, mkexpr(counter)))); -+static const HChar * -+s390_irgen_VLRLR(UChar v1, UChar r3, IRTemp addr) -+{ -+ s390_vr_loadWithLength(v1, addr, get_gpr_w1(r3), True); - -- /* Check for end of field */ -- put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); -- iterate_if(binop(Iop_CmpNE64, mkexpr(counter), mkexpr(maxIndexToStore))); -- put_counter_dw0(mkU64(0)); -+ return "vlrlr"; -+} - -+static const HChar * -+s390_irgen_VSTL(UChar v1, IRTemp addr, UChar r3) -+{ -+ s390_vr_storeWithLength(v1, addr, get_gpr_w1(r3), False); - return "vstl"; - } - -+static const HChar * -+s390_irgen_VSTRL(UChar v1, IRTemp addr, UChar i3) -+{ -+ s390_insn_assert("vstrl", (i3 & 0xf0) == 0); -+ s390_vr_storeWithLength(v1, addr, mkU32((UInt) i3), True); -+ return "vstrl"; -+} -+ -+static const HChar * -+s390_irgen_VSTRLR(UChar v1, UChar r3, IRTemp addr) -+{ -+ s390_vr_storeWithLength(v1, addr, get_gpr_w1(r3), True); -+ return "vstrlr"; -+} -+ - static const HChar * - s390_irgen_VX(UChar v1, UChar v2, UChar v3) - { -@@ -16682,6 +16826,24 @@ s390_irgen_VO(UChar v1, UChar v2, UChar v3) - return "vo"; - } - -+static const HChar * -+s390_irgen_VOC(UChar v1, UChar v2, UChar v3) -+{ -+ put_vr_qw(v1, binop(Iop_OrV128, get_vr_qw(v2), -+ unop(Iop_NotV128, get_vr_qw(v3)))); -+ -+ return "voc"; -+} -+ -+static const HChar * -+s390_irgen_VNN(UChar v1, UChar v2, UChar v3) -+{ -+ put_vr_qw(v1, unop(Iop_NotV128, -+ binop(Iop_AndV128, get_vr_qw(v2), get_vr_qw(v3)))); -+ -+ return "vnn"; -+} -+ - static const HChar * - s390_irgen_VNO(UChar v1, UChar v2, UChar v3) - { -@@ -16691,6 +16853,15 @@ s390_irgen_VNO(UChar v1, UChar v2, UChar v3) - return "vno"; - } - -+static const HChar * -+s390_irgen_VNX(UChar v1, UChar v2, UChar v3) -+{ -+ put_vr_qw(v1, unop(Iop_NotV128, -+ binop(Iop_XorV128, get_vr_qw(v2), get_vr_qw(v3)))); -+ -+ return "vnx"; -+} -+ - static const HChar * - s390_irgen_LZRF(UChar r1, IRTemp op2addr) - { -@@ -17499,9 +17670,19 @@ s390_irgen_VCTZ(UChar v1, UChar v2, UChar m3) - static const HChar * - s390_irgen_VPOPCT(UChar v1, UChar v2, UChar m3) - { -- vassert(m3 == 0); -+ s390_insn_assert("vpopct", m3 <= 3); -+ -+ IRExpr* cnt = unop(Iop_Cnt8x16, get_vr_qw(v2)); - -- put_vr_qw(v1, unop(Iop_Cnt8x16, get_vr_qw(v2))); -+ if (m3 >= 1) { -+ cnt = unop(Iop_PwAddL8Ux16, cnt); -+ if (m3 >= 2) { -+ cnt = unop(Iop_PwAddL16Ux8, cnt); -+ if (m3 == 3) -+ cnt = unop(Iop_PwAddL32Ux4, cnt); -+ } -+ } -+ put_vr_qw(v1, cnt); - - return "vpopct"; - } -@@ -18335,12 +18516,53 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5) - return "vmalh"; - } - -+static const HChar * -+s390_irgen_VMSL(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) -+{ -+ s390_insn_assert("vmsl", m5 == 3 && (m6 & 3) == 0); -+ -+ IRDirty* d; -+ IRTemp cc = newTemp(Ity_I64); -+ -+ s390x_vec_op_details_t details = { .serialized = 0ULL }; -+ details.op = S390_VEC_OP_VMSL; -+ details.v1 = v1; -+ details.v2 = v2; -+ details.v3 = v3; -+ details.v4 = v4; -+ details.m4 = m5; -+ details.m5 = m6; -+ -+ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -+ &s390x_dirtyhelper_vec_op, -+ mkIRExprVec_2(IRExpr_GSPTR(), -+ mkU64(details.serialized))); -+ -+ d->nFxState = 4; -+ vex_bzero(&d->fxState, sizeof(d->fxState)); -+ d->fxState[0].fx = Ifx_Read; -+ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -+ d->fxState[0].size = sizeof(V128); -+ d->fxState[1].fx = Ifx_Read; -+ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -+ d->fxState[1].size = sizeof(V128); -+ d->fxState[2].fx = Ifx_Read; -+ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v4 * sizeof(V128); -+ d->fxState[2].size = sizeof(V128); -+ d->fxState[3].fx = Ifx_Write; -+ d->fxState[3].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -+ d->fxState[3].size = sizeof(V128); -+ -+ stmt(IRStmt_Dirty(d)); -+ -+ return "vmsl"; -+} -+ - static void --s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, -+s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, Bool rounding, - UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { - Bool isSingleElementOp = s390_vr_is_single_element_control_set(m4); -- UChar maxIndex = isSingleElementOp ? 0 : 1; - - /* For Iop_F32toF64 we do this: - f32[0] -> f64[0] -@@ -18353,14 +18575,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, - The magic below with scaling factors is used to achieve the logic - described above. - */ -- const UChar sourceIndexScaleFactor = (op == Iop_F32toF64) ? 2 : 1; -- const UChar destinationIndexScaleFactor = (op == Iop_F64toF32) ? 2 : 1; -- -- const Bool isUnary = (op == Iop_F32toF64); -- for (UChar i = 0; i <= maxIndex; i++) { -+ Int size_diff = sizeofIRType(toType) - sizeofIRType(fromType); -+ const UChar sourceIndexScaleFactor = size_diff > 0 ? 2 : 1; -+ const UChar destinationIndexScaleFactor = size_diff < 0 ? 2 : 1; -+ UChar n_elem = (isSingleElementOp ? 1 : -+ 16 / (size_diff > 0 ? -+ sizeofIRType(toType) : sizeofIRType(fromType))); -+ -+ for (UChar i = 0; i < n_elem; i++) { - IRExpr* argument = get_vr(v2, fromType, i * sourceIndexScaleFactor); - IRExpr* result; -- if (!isUnary) { -+ if (rounding) { -+ if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -+ emulation_warning(EmWarn_S390X_fpext_rounding); -+ m5 = S390_BFP_ROUND_PER_FPC; -+ } - result = binop(op, - mkexpr(encode_bfp_rounding_mode(m5)), - argument); -@@ -18369,10 +18598,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, - } - put_vr(v1, toType, i * destinationIndexScaleFactor, result); - } -- -- if (isSingleElementOp) { -- put_vr_dw1(v1, mkU64(0)); -- } - } - - static const HChar * -@@ -18380,12 +18605,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { - s390_insn_assert("vcdg", m3 == 3); - -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- emulation_warning(EmWarn_S390X_fpext_rounding); -- m5 = S390_BFP_ROUND_PER_FPC; -- } -- -- s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, v1, v2, m3, m4, m5); -+ s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, True, -+ v1, v2, m3, m4, m5); - - return "vcdg"; - } -@@ -18395,12 +18616,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { - s390_insn_assert("vcdlg", m3 == 3); - -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- emulation_warning(EmWarn_S390X_fpext_rounding); -- m5 = S390_BFP_ROUND_PER_FPC; -- } -- -- s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, v1, v2, m3, m4, m5); -+ s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, True, -+ v1, v2, m3, m4, m5); - - return "vcdlg"; - } -@@ -18410,12 +18627,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { - s390_insn_assert("vcgd", m3 == 3); - -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- emulation_warning(EmWarn_S390X_fpext_rounding); -- m5 = S390_BFP_ROUND_PER_FPC; -- } -- -- s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, v1, v2, m3, m4, m5); -+ s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, True, -+ v1, v2, m3, m4, m5); - - return "vcgd"; - } -@@ -18425,12 +18638,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { - s390_insn_assert("vclgd", m3 == 3); - -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- emulation_warning(EmWarn_S390X_fpext_rounding); -- m5 = S390_BFP_ROUND_PER_FPC; -- } -- -- s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, v1, v2, m3, m4, m5); -+ s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, True, -+ v1, v2, m3, m4, m5); - - return "vclgd"; - } -@@ -18438,246 +18647,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - static const HChar * - s390_irgen_VFI(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vfi", m3 == 3); -+ s390_insn_assert("vfi", -+ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); - -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- emulation_warning(EmWarn_S390X_fpext_rounding); -- m5 = S390_BFP_ROUND_PER_FPC; -+ switch (m3) { -+ case 2: s390_vector_fp_convert(Iop_RoundF32toInt, Ity_F32, Ity_F32, True, -+ v1, v2, m3, m4, m5); break; -+ case 3: s390_vector_fp_convert(Iop_RoundF64toInt, Ity_F64, Ity_F64, True, -+ v1, v2, m3, m4, m5); break; -+ case 4: s390_vector_fp_convert(Iop_RoundF128toInt, Ity_F128, Ity_F128, True, -+ v1, v2, m3, m4, m5); break; - } - -- s390_vector_fp_convert(Iop_RoundF64toInt, Ity_F64, Ity_F64, -- v1, v2, m3, m4, m5); -- -- return "vcgld"; -+ return "vfi"; - } - - static const HChar * --s390_irgen_VLDE(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) -+s390_irgen_VFLL(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vlde", m3 == 2); -+ s390_insn_assert("vfll", m3 == 2 || (s390_host_has_vxe && m3 == 3)); - -- s390_vector_fp_convert(Iop_F32toF64, Ity_F32, Ity_F64, v1, v2, m3, m4, m5); -+ if (m3 == 2) -+ s390_vector_fp_convert(Iop_F32toF64, Ity_F32, Ity_F64, False, -+ v1, v2, m3, m4, m5); -+ else -+ s390_vector_fp_convert(Iop_F64toF128, Ity_F64, Ity_F128, False, -+ v1, v2, m3, m4, m5); - -- return "vlde"; -+ return "vfll"; - } - - static const HChar * --s390_irgen_VLED(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) -+s390_irgen_VFLR(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vled", m3 == 3); -- -- if (!s390_host_has_fpext && m5 != S390_BFP_ROUND_PER_FPC) { -- m5 = S390_BFP_ROUND_PER_FPC; -- } -+ s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 2)); - -- s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, v1, v2, m3, m4, m5); -+ if (m3 == 3) -+ s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, True, -+ v1, v2, m3, m4, m5); -+ else -+ s390_vector_fp_convert(Iop_F128toF64, Ity_F128, Ity_F64, True, -+ v1, v2, m3, m4, m5); - -- return "vled"; -+ return "vflr"; - } - - static const HChar * - s390_irgen_VFPSO(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vfpso", m3 == 3); -- -- IRExpr* result; -- switch (m5) { -- case 0: { -- /* Invert sign */ -- if (!s390_vr_is_single_element_control_set(m4)) { -- result = unop(Iop_Neg64Fx2, get_vr_qw(v2)); -- } -- else { -- result = binop(Iop_64HLtoV128, -- unop(Iop_ReinterpF64asI64, -- unop(Iop_NegF64, get_vr(v2, Ity_F64, 0))), -- mkU64(0)); -- } -- break; -- } -+ s390_insn_assert("vfpso", m5 <= 2 && -+ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); - -- case 1: { -- /* Set sign to negative */ -- IRExpr* highHalf = mkU64(0x8000000000000000ULL); -- if (!s390_vr_is_single_element_control_set(m4)) { -- IRExpr* lowHalf = highHalf; -- IRExpr* mask = binop(Iop_64HLtoV128, highHalf, lowHalf); -- result = binop(Iop_OrV128, get_vr_qw(v2), mask); -- } -- else { -- result = binop(Iop_64HLtoV128, -- binop(Iop_Or64, get_vr_dw0(v2), highHalf), -- mkU64(0ULL)); -- } -+ Bool single = s390_vr_is_single_element_control_set(m4) || m3 == 4; -+ IRType type = single ? s390_vr_get_ftype(m3) : Ity_V128; -+ int idx = 2 * (m3 - 2) + (single ? 0 : 1); - -- break; -- } -- -- case 2: { -- /* Set sign to positive */ -- if (!s390_vr_is_single_element_control_set(m4)) { -- result = unop(Iop_Abs64Fx2, get_vr_qw(v2)); -- } -- else { -- result = binop(Iop_64HLtoV128, -- unop(Iop_ReinterpF64asI64, -- unop(Iop_AbsF64, get_vr(v2, Ity_F64, 0))), -- mkU64(0)); -- } -- -- break; -- } -- -- default: -- vpanic("s390_irgen_VFPSO: Invalid m5 value"); -- } -+ static const IROp negate_ops[] = { -+ Iop_NegF32, Iop_Neg32Fx4, -+ Iop_NegF64, Iop_Neg64Fx2, -+ Iop_NegF128 -+ }; -+ static const IROp abs_ops[] = { -+ Iop_AbsF32, Iop_Abs32Fx4, -+ Iop_AbsF64, Iop_Abs64Fx2, -+ Iop_AbsF128 -+ }; - -- put_vr_qw(v1, result); -- if (s390_vr_is_single_element_control_set(m4)) { -- put_vr_dw1(v1, mkU64(0ULL)); -+ if (m5 == 1) { -+ /* Set sign to negative */ -+ put_vr(v1, type, 0, -+ unop(negate_ops[idx], -+ unop(abs_ops[idx], get_vr(v2, type, 0)))); -+ } else { -+ /* m5 == 0: invert sign; m5 == 2: set sign to positive */ -+ const IROp *ops = m5 == 2 ? abs_ops : negate_ops; -+ put_vr(v1, type, 0, unop(ops[idx], get_vr(v2, type, 0))); - } - - return "vfpso"; - } - --static void s390x_vec_fp_binary_op(IROp generalOp, IROp singleElementOp, -- UChar v1, UChar v2, UChar v3, UChar m4, -- UChar m5) -+static const HChar * -+s390x_vec_fp_binary_op(const HChar* mnm, const IROp ops[], -+ UChar v1, UChar v2, UChar v3, -+ UChar m4, UChar m5) - { -- IRExpr* result; -- if (!s390_vr_is_single_element_control_set(m5)) { -- result = triop(generalOp, get_bfp_rounding_mode_from_fpc(), -- get_vr_qw(v2), get_vr_qw(v3)); -+ s390_insn_assert(mnm, (m5 & 7) == 0 && -+ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); -+ -+ int idx = 2 * (m4 - 2); -+ -+ if (m4 == 4 || s390_vr_is_single_element_control_set(m5)) { -+ IRType type = s390_vr_get_ftype(m4); -+ put_vr(v1, type, 0, -+ triop(ops[idx], get_bfp_rounding_mode_from_fpc(), -+ get_vr(v2, type, 0), get_vr(v3, type, 0))); - } else { -- IRExpr* highHalf = triop(singleElementOp, -- get_bfp_rounding_mode_from_fpc(), -- get_vr(v2, Ity_F64, 0), -- get_vr(v3, Ity_F64, 0)); -- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), -- mkU64(0ULL)); -+ put_vr_qw(v1, triop(ops[idx + 1], get_bfp_rounding_mode_from_fpc(), -+ get_vr_qw(v2), get_vr_qw(v3))); - } - -- put_vr_qw(v1, result); -+ return mnm; - } - --static void s390x_vec_fp_unary_op(IROp generalOp, IROp singleElementOp, -- UChar v1, UChar v2, UChar m3, UChar m4) -+static const HChar * -+s390x_vec_fp_unary_op(const HChar* mnm, const IROp ops[], -+ UChar v1, UChar v2, UChar m3, UChar m4) - { -- IRExpr* result; -- if (!s390_vr_is_single_element_control_set(m4)) { -- result = binop(generalOp, get_bfp_rounding_mode_from_fpc(), -- get_vr_qw(v2)); -+ s390_insn_assert(mnm, (m4 & 7) == 0 && -+ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); -+ -+ int idx = 2 * (m3 - 2); -+ -+ if (m3 == 4 || s390_vr_is_single_element_control_set(m4)) { -+ IRType type = s390_vr_get_ftype(m3); -+ put_vr(v1, type, 0, -+ binop(ops[idx], get_bfp_rounding_mode_from_fpc(), -+ get_vr(v2, type, 0))); - } - else { -- IRExpr* highHalf = binop(singleElementOp, -- get_bfp_rounding_mode_from_fpc(), -- get_vr(v2, Ity_F64, 0)); -- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), -- mkU64(0ULL)); -+ put_vr_qw(v1, binop(ops[idx + 1], get_bfp_rounding_mode_from_fpc(), -+ get_vr_qw(v2))); - } - -- put_vr_qw(v1, result); -+ return mnm; - } - - --static void --s390_vector_fp_mulAddOrSub(IROp singleElementOp, -- UChar v1, UChar v2, UChar v3, UChar v4, -- UChar m5, UChar m6) -+static const HChar * -+s390_vector_fp_mulAddOrSub(UChar v1, UChar v2, UChar v3, UChar v4, -+ UChar m5, UChar m6, -+ const HChar* mnm, const IROp single_ops[], -+ Bool negate) - { -- Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); -+ s390_insn_assert(mnm, m6 == 3 || (s390_host_has_vxe && m6 >= 2 && m6 <= 4)); -+ -+ static const IROp negate_ops[] = { Iop_NegF32, Iop_NegF64, Iop_NegF128 }; -+ IRType type = s390_vr_get_ftype(m6); -+ Bool single = s390_vr_is_single_element_control_set(m5) || m6 == 4; -+ UChar n_elem = single ? 1 : s390_vr_get_n_elem(m6); - IRTemp irrm_temp = newTemp(Ity_I32); - assign(irrm_temp, get_bfp_rounding_mode_from_fpc()); - IRExpr* irrm = mkexpr(irrm_temp); -- IRExpr* result; -- IRExpr* highHalf = qop(singleElementOp, -- irrm, -- get_vr(v2, Ity_F64, 0), -- get_vr(v3, Ity_F64, 0), -- get_vr(v4, Ity_F64, 0)); -- -- if (isSingleElementOp) { -- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), -- mkU64(0ULL)); -- } else { -- IRExpr* lowHalf = qop(singleElementOp, -- irrm, -- get_vr(v2, Ity_F64, 1), -- get_vr(v3, Ity_F64, 1), -- get_vr(v4, Ity_F64, 1)); -- result = binop(Iop_64HLtoV128, unop(Iop_ReinterpF64asI64, highHalf), -- unop(Iop_ReinterpF64asI64, lowHalf)); -- } - -- put_vr_qw(v1, result); -+ for (UChar idx = 0; idx < n_elem; idx++) { -+ IRExpr* result = qop(single_ops[m6 - 2], -+ irrm, -+ get_vr(v2, type, idx), -+ get_vr(v3, type, idx), -+ get_vr(v4, type, idx)); -+ put_vr(v1, type, idx, negate ? unop(negate_ops[m6 - 2], result) : result); -+ } -+ return mnm; - } - - static const HChar * - s390_irgen_VFA(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - { -- s390_insn_assert("vfa", m4 == 3); -- s390x_vec_fp_binary_op(Iop_Add64Fx2, Iop_AddF64, v1, v2, v3, m4, m5); -- return "vfa"; -+ static const IROp vfa_ops[] = { -+ Iop_AddF32, Iop_Add32Fx4, -+ Iop_AddF64, Iop_Add64Fx2, -+ Iop_AddF128, -+ }; -+ return s390x_vec_fp_binary_op("vfa", vfa_ops, v1, v2, v3, m4, m5); - } - - static const HChar * - s390_irgen_VFS(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - { -- s390_insn_assert("vfs", m4 == 3); -- s390x_vec_fp_binary_op(Iop_Sub64Fx2, Iop_SubF64, v1, v2, v3, m4, m5); -- return "vfs"; -+ static const IROp vfs_ops[] = { -+ Iop_SubF32, Iop_Sub32Fx4, -+ Iop_SubF64, Iop_Sub64Fx2, -+ Iop_SubF128, -+ }; -+ return s390x_vec_fp_binary_op("vfs", vfs_ops, v1, v2, v3, m4, m5); - } - - static const HChar * - s390_irgen_VFM(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - { -- s390_insn_assert("vfm", m4 == 3); -- s390x_vec_fp_binary_op(Iop_Mul64Fx2, Iop_MulF64, v1, v2, v3, m4, m5); -- return "vfm"; -+ static const IROp vfm_ops[] = { -+ Iop_MulF32, Iop_Mul32Fx4, -+ Iop_MulF64, Iop_Mul64Fx2, -+ Iop_MulF128, -+ }; -+ return s390x_vec_fp_binary_op("vfm", vfm_ops, v1, v2, v3, m4, m5); - } - - static const HChar * - s390_irgen_VFD(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - { -- s390_insn_assert("vfd", m4 == 3); -- s390x_vec_fp_binary_op(Iop_Div64Fx2, Iop_DivF64, v1, v2, v3, m4, m5); -- return "vfd"; -+ static const IROp vfd_ops[] = { -+ Iop_DivF32, Iop_Div32Fx4, -+ Iop_DivF64, Iop_Div64Fx2, -+ Iop_DivF128, -+ }; -+ return s390x_vec_fp_binary_op("vfd", vfd_ops, v1, v2, v3, m4, m5); - } - - static const HChar * - s390_irgen_VFSQ(UChar v1, UChar v2, UChar m3, UChar m4) - { -- s390_insn_assert("vfsq", m3 == 3); -- s390x_vec_fp_unary_op(Iop_Sqrt64Fx2, Iop_SqrtF64, v1, v2, m3, m4); -- -- return "vfsq"; -+ static const IROp vfsq_ops[] = { -+ Iop_SqrtF32, Iop_Sqrt32Fx4, -+ Iop_SqrtF64, Iop_Sqrt64Fx2, -+ Iop_SqrtF128 -+ }; -+ return s390x_vec_fp_unary_op("vfsq", vfsq_ops, v1, v2, m3, m4); - } - -+static const IROp FMA_single_ops[] = { -+ Iop_MAddF32, Iop_MAddF64, Iop_MAddF128 -+}; -+ - static const HChar * - s390_irgen_VFMA(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) - { -- s390_insn_assert("vfma", m6 == 3); -- s390_vector_fp_mulAddOrSub(Iop_MAddF64, v1, v2, v3, v4, m5, m6); -- return "vfma"; -+ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, -+ "vfma", FMA_single_ops, False); - } - -+static const HChar * -+s390_irgen_VFNMA(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) -+{ -+ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, -+ "vfnma", FMA_single_ops, True); -+} -+ -+static const IROp FMS_single_ops[] = { -+ Iop_MSubF32, Iop_MSubF64, Iop_MSubF128 -+}; -+ - static const HChar * - s390_irgen_VFMS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) - { -- s390_insn_assert("vfms", m6 == 3); -- s390_vector_fp_mulAddOrSub(Iop_MSubF64, v1, v2, v3, v4, m5, m6); -- return "vfms"; -+ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, -+ "vfms", FMS_single_ops, False); -+} -+ -+static const HChar * -+s390_irgen_VFNMS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) -+{ -+ return s390_vector_fp_mulAddOrSub(v1, v2, v3, v4, m5, m6, -+ "vfnms", FMS_single_ops, True); - } - - static const HChar * - s390_irgen_WFC(UChar v1, UChar v2, UChar m3, UChar m4) - { -- s390_insn_assert("wfc", m3 == 3); -- s390_insn_assert("wfc", m4 == 0); -+ s390_insn_assert("wfc", m4 == 0 && -+ (m3 == 3 || (s390_host_has_vxe && m3 >= 2 && m3 <= 4))); -+ -+ static const IROp ops[] = { Iop_CmpF32, Iop_CmpF64, Iop_CmpF128 }; -+ IRType type = s390_vr_get_ftype(m3); - - IRTemp cc_vex = newTemp(Ity_I32); -- assign(cc_vex, binop(Iop_CmpF64, -- get_vr(v1, Ity_F64, 0), get_vr(v2, Ity_F64, 0))); -+ assign(cc_vex, binop(ops[m3 - 2], get_vr(v1, type, 0), get_vr(v2, type, 0))); - - IRTemp cc_s390 = newTemp(Ity_I32); - assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex)); -@@ -18695,213 +18920,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4) - } - - static const HChar * --s390_irgen_VFCE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+s390_irgen_VFCx(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6, -+ const HChar *mnem, IRCmpFResult cmp, Bool equal_ok, -+ IROp cmp32, IROp cmp64) - { -- s390_insn_assert("vfce", m4 == 3); -+ s390_insn_assert(mnem, (m5 & 3) == 0 && (m6 & 14) == 0 && -+ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); - -- Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); -- if (!s390_vr_is_cs_set(m6)) { -- if (!isSingleElementOp) { -- put_vr_qw(v1, binop(Iop_CmpEQ64Fx2, get_vr_qw(v2), get_vr_qw(v3))); -+ Bool single = s390_vr_is_single_element_control_set(m5) || m4 == 4; -+ -+ if (single) { -+ static const IROp ops[] = { Iop_CmpF32, Iop_CmpF64, Iop_CmpF128 }; -+ IRType type = s390_vr_get_ftype(m4); -+ IRTemp result = newTemp(Ity_I32); -+ IRTemp cond = newTemp(Ity_I1); -+ -+ assign(result, binop(ops[m4 - 2], -+ get_vr(v2, type, 0), get_vr(v3, type, 0))); -+ if (equal_ok) { -+ assign(cond, -+ binop(Iop_Or1, -+ binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp)), -+ binop(Iop_CmpEQ32, mkexpr(result), mkU32(Ircr_EQ)))); - } else { -- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v2, Ity_F64, 0), -- get_vr(v3, Ity_F64, 0)); -- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, -- mkU32(Ircr_EQ)), -- mkU64(0xffffffffffffffffULL), -- mkU64(0ULL)); -- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); -+ assign(cond, binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp))); -+ } -+ put_vr_qw(v1, mkite(mkexpr(cond), -+ IRExpr_Const(IRConst_V128(0xffff)), -+ IRExpr_Const(IRConst_V128(0)))); -+ if (s390_vr_is_cs_set(m6)) { -+ IRTemp cc = newTemp(Ity_I64); -+ assign(cc, mkite(mkexpr(cond), mkU64(0), mkU64(3))); -+ s390_cc_set(cc); - } - } else { -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -- -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFCE; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.m4 = m4; -- details.m5 = m5; -- details.m6 = m6; -+ IRTemp result = newTemp(Ity_V128); -+ -+ assign(result, binop(m4 == 2 ? cmp32 : cmp64, -+ get_vr_qw(v2), get_vr_qw(v3))); -+ put_vr_qw(v1, mkexpr(result)); -+ if (s390_vr_is_cs_set(m6)) { -+ IRTemp cc = newTemp(Ity_I64); -+ assign(cc, -+ mkite(binop(Iop_CmpEQ64, -+ binop(Iop_And64, -+ unop(Iop_V128to64, mkexpr(result)), -+ unop(Iop_V128HIto64, mkexpr(result))), -+ mkU64(-1ULL)), -+ mkU64(0), /* all comparison results are true */ -+ mkite(binop(Iop_CmpEQ64, -+ binop(Iop_Or64, -+ unop(Iop_V128to64, mkexpr(result)), -+ unop(Iop_V128HIto64, mkexpr(result))), -+ mkU64(0)), -+ mkU64(3), /* all false */ -+ mkU64(1)))); /* mixed true/false */ -+ s390_cc_set(cc); -+ } -+ } - -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+ return mnem; -+} - -- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); -- d->nFxState = 3; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = elementSize; -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = elementSize; -- d->fxState[2].fx = Ifx_Write; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -+static const HChar * -+s390_irgen_VFCE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+{ -+ return s390_irgen_VFCx(v1, v2, v3, m4, m5, m6, "vfce", Ircr_EQ, -+ False, Iop_CmpEQ32Fx4, Iop_CmpEQ64Fx2); -+} - -- stmt(IRStmt_Dirty(d)); -- s390_cc_set(cc); -- } -+static const HChar * -+s390_irgen_VFCH(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+{ -+ /* Swap arguments and compare "low" instead. */ -+ return s390_irgen_VFCx(v1, v3, v2, m4, m5, m6, "vfch", Ircr_LT, -+ False, Iop_CmpLT32Fx4, Iop_CmpLT64Fx2); -+} - -- return "vfce"; -+static const HChar * -+s390_irgen_VFCHE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+{ -+ /* Swap arguments and compare "low or equal" instead. */ -+ return s390_irgen_VFCx(v1, v3, v2, m4, m5, m6, "vfche", Ircr_LT, -+ True, Iop_CmpLE32Fx4, Iop_CmpLE64Fx2); - } - - static const HChar * --s390_irgen_VFCH(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+s390_irgen_VFTCI(UChar v1, UChar v2, UShort i3, UChar m4, UChar m5) - { -- vassert(m4 == 3); -+ s390_insn_assert("vftci", -+ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); - - Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); -- if (!s390_vr_is_cs_set(m6)) { -- if (!isSingleElementOp) { -- put_vr_qw(v1, binop(Iop_CmpLE64Fx2, get_vr_qw(v3), get_vr_qw(v2))); -- } else { -- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v2, Ity_F64, 0), -- get_vr(v3, Ity_F64, 0)); -- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, -- mkU32(Ircr_GT)), -- mkU64(0xffffffffffffffffULL), -- mkU64(0ULL)); -- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); -- } -- } -- else { -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); - -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFCH; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.m4 = m4; -- details.m5 = m5; -- details.m6 = m6; -+ IRDirty* d; -+ IRTemp cc = newTemp(Ity_I64); - -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+ s390x_vec_op_details_t details = { .serialized = 0ULL }; -+ details.op = S390_VEC_OP_VFTCI; -+ details.v1 = v1; -+ details.v2 = v2; -+ details.i3 = i3; -+ details.m4 = m4; -+ details.m5 = m5; - -- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); -- d->nFxState = 3; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = elementSize; -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = elementSize; -- d->fxState[2].fx = Ifx_Write; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -+ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -+ &s390x_dirtyhelper_vec_op, -+ mkIRExprVec_2(IRExpr_GSPTR(), -+ mkU64(details.serialized))); - -- stmt(IRStmt_Dirty(d)); -- s390_cc_set(cc); -- } -+ const UChar elementSize = isSingleElementOp ? -+ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); -+ d->nFxState = 2; -+ vex_bzero(&d->fxState, sizeof(d->fxState)); -+ d->fxState[0].fx = Ifx_Read; -+ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -+ d->fxState[0].size = elementSize; -+ d->fxState[1].fx = Ifx_Write; -+ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -+ d->fxState[1].size = sizeof(V128); -+ -+ stmt(IRStmt_Dirty(d)); -+ s390_cc_set(cc); - -- return "vfch"; -+ return "vftci"; - } - - static const HChar * --s390_irgen_VFCHE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) -+s390_irgen_VFMIN(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) - { -- s390_insn_assert("vfche", m4 == 3); -+ s390_insn_assert("vfmin", -+ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); - - Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); -- if (!s390_vr_is_cs_set(m6)) { -- if (!isSingleElementOp) { -- put_vr_qw(v1, binop(Iop_CmpLT64Fx2, get_vr_qw(v3), get_vr_qw(v2))); -- } -- else { -- IRExpr* comparisonResult = binop(Iop_CmpF64, get_vr(v3, Ity_F64, 0), -- get_vr(v2, Ity_F64, 0)); -- IRExpr* result = mkite(binop(Iop_CmpEQ32, comparisonResult, -- mkU32(Ircr_LT)), -- mkU64(0xffffffffffffffffULL), -- mkU64(0ULL)); -- put_vr_qw(v1, binop(Iop_64HLtoV128, result, mkU64(0ULL))); -- } -- } -- else { -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -- -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFCHE; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.m4 = m4; -- details.m5 = m5; -- details.m6 = m6; -+ IRDirty* d; -+ IRTemp cc = newTemp(Ity_I64); - -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+ s390x_vec_op_details_t details = { .serialized = 0ULL }; -+ details.op = S390_VEC_OP_VFMIN; -+ details.v1 = v1; -+ details.v2 = v2; -+ details.v3 = v3; -+ details.m4 = m4; -+ details.m5 = m5; -+ details.m6 = m6; - -- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); -- d->nFxState = 3; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = elementSize; -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = elementSize; -- d->fxState[2].fx = Ifx_Write; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -+ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -+ &s390x_dirtyhelper_vec_op, -+ mkIRExprVec_2(IRExpr_GSPTR(), -+ mkU64(details.serialized))); - -- stmt(IRStmt_Dirty(d)); -- s390_cc_set(cc); -- } -+ const UChar elementSize = isSingleElementOp ? -+ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); -+ d->nFxState = 3; -+ vex_bzero(&d->fxState, sizeof(d->fxState)); -+ d->fxState[0].fx = Ifx_Read; -+ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -+ d->fxState[0].size = elementSize; -+ d->fxState[1].fx = Ifx_Read; -+ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -+ d->fxState[1].size = elementSize; -+ d->fxState[2].fx = Ifx_Write; -+ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -+ d->fxState[2].size = sizeof(V128); - -- return "vfche"; -+ stmt(IRStmt_Dirty(d)); -+ s390_cc_set(cc); -+ return "vfmin"; - } - - static const HChar * --s390_irgen_VFTCI(UChar v1, UChar v2, UShort i3, UChar m4, UChar m5) -+s390_irgen_VFMAX(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6) - { -- s390_insn_assert("vftci", m4 == 3); -+ s390_insn_assert("vfmax", -+ (m4 == 3 || (s390_host_has_vxe && m4 >= 2 && m4 <= 4))); - - Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5); -- - IRDirty* d; - IRTemp cc = newTemp(Ity_I64); - - s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFTCI; -+ details.op = S390_VEC_OP_VFMAX; - details.v1 = v1; - details.v2 = v2; -- details.i3 = i3; -+ details.v3 = v3; - details.m4 = m4; - details.m5 = m5; -+ details.m6 = m6; - - d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", - &s390x_dirtyhelper_vec_op, - mkIRExprVec_2(IRExpr_GSPTR(), - mkU64(details.serialized))); - -- const UChar elementSize = isSingleElementOp ? sizeof(ULong) : sizeof(V128); -- d->nFxState = 2; -+ const UChar elementSize = isSingleElementOp ? -+ sizeofIRType(s390_vr_get_ftype(m4)) : sizeof(V128); -+ d->nFxState = 3; - vex_bzero(&d->fxState, sizeof(d->fxState)); - d->fxState[0].fx = Ifx_Read; - d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); - d->fxState[0].size = elementSize; -- d->fxState[1].fx = Ifx_Write; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[1].size = sizeof(V128); -+ d->fxState[1].fx = Ifx_Read; -+ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -+ d->fxState[1].size = elementSize; -+ d->fxState[2].fx = Ifx_Write; -+ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -+ d->fxState[2].size = sizeof(V128); - - stmt(IRStmt_Dirty(d)); - s390_cc_set(cc); -+ return "vfmax"; -+} - -- return "vftci"; -+static const HChar * -+s390_irgen_VBPERM(UChar v1, UChar v2, UChar v3) -+{ -+ IRDirty* d; -+ IRTemp cc = newTemp(Ity_I64); -+ -+ s390x_vec_op_details_t details = { .serialized = 0ULL }; -+ details.op = S390_VEC_OP_VBPERM; -+ details.v1 = v1; -+ details.v2 = v2; -+ details.v3 = v3; -+ details.m4 = 0; -+ details.m5 = 0; -+ details.m6 = 0; -+ -+ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -+ &s390x_dirtyhelper_vec_op, -+ mkIRExprVec_2(IRExpr_GSPTR(), -+ mkU64(details.serialized))); -+ -+ d->nFxState = 3; -+ vex_bzero(&d->fxState, sizeof(d->fxState)); -+ d->fxState[0].fx = Ifx_Read; -+ d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -+ d->fxState[0].size = sizeof(V128); -+ d->fxState[1].fx = Ifx_Read; -+ d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -+ d->fxState[1].size = sizeof(V128); -+ d->fxState[2].fx = Ifx_Write; -+ d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -+ d->fxState[2].size = sizeof(V128); -+ -+ stmt(IRStmt_Dirty(d)); -+ s390_cc_set(cc); -+ return "vbperm"; - } - - /* New insns are added here. -@@ -20489,11 +20754,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; - case 0xe60000000034ULL: /* VPKZ */ goto unimplemented; -- case 0xe60000000035ULL: /* VLRL */ goto unimplemented; -- case 0xe60000000037ULL: /* VLRLR */ goto unimplemented; -+ case 0xe60000000035ULL: s390_format_VSI_URDV(s390_irgen_VLRL, VSI_v1(ovl), -+ VSI_b2(ovl), VSI_d2(ovl), -+ VSI_i3(ovl), -+ VSI_rxb(ovl)); goto ok; -+ case 0xe60000000037ULL: s390_format_VRS_RRDV(s390_irgen_VLRLR, VRSd_v1(ovl), -+ VRSd_r3(ovl), VRS_b2(ovl), -+ VRS_d2(ovl), -+ VRS_rxb(ovl)); goto ok; - case 0xe6000000003cULL: /* VUPKZ */ goto unimplemented; -- case 0xe6000000003dULL: /* VSTRL */ goto unimplemented; -- case 0xe6000000003fULL: /* VSTRLR */ goto unimplemented; -+ case 0xe6000000003dULL: s390_format_VSI_URDV(s390_irgen_VSTRL, VSI_v1(ovl), -+ VSI_b2(ovl), VSI_d2(ovl), -+ VSI_i3(ovl), -+ VSI_rxb(ovl)); goto ok; -+ case 0xe6000000003fULL: s390_format_VRS_RRDV(s390_irgen_VSTRLR, VRSd_v1(ovl), -+ VRSd_r3(ovl), VRS_b2(ovl), -+ VRS_d2(ovl), -+ VRS_rxb(ovl)); goto ok; - case 0xe60000000049ULL: /* VLIP */ goto unimplemented; - case 0xe60000000050ULL: /* VCVB */ goto unimplemented; - case 0xe60000000052ULL: /* VCVBG */ goto unimplemented; -@@ -20691,12 +20968,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe7000000006bULL: s390_format_VRR_VVV(s390_irgen_VNO, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_rxb(ovl)); goto ok; -- case 0xe7000000006cULL: /* VNX */ goto unimplemented; -+ case 0xe7000000006cULL: s390_format_VRR_VVV(s390_irgen_VNX, VRR_v1(ovl), -+ VRR_v2(ovl), VRR_r3(ovl), -+ VRR_rxb(ovl)); goto ok; - case 0xe7000000006dULL: s390_format_VRR_VVV(s390_irgen_VX, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_rxb(ovl)); goto ok; -- case 0xe7000000006eULL: /* VNN */ goto unimplemented; -- case 0xe7000000006fULL: /* VOC */ goto unimplemented; -+ case 0xe7000000006eULL: s390_format_VRR_VVV(s390_irgen_VNN, VRR_v1(ovl), -+ VRR_v2(ovl), VRR_r3(ovl), -+ VRR_rxb(ovl)); goto ok; -+ case 0xe7000000006fULL: s390_format_VRR_VVV(s390_irgen_VOC, VRR_v1(ovl), -+ VRR_v2(ovl), VRR_r3(ovl), -+ VRR_rxb(ovl)); goto ok; - case 0xe70000000070ULL: s390_format_VRR_VVVM(s390_irgen_VESLV, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -@@ -20749,7 +21032,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe70000000084ULL: s390_format_VRR_VVVM(s390_irgen_VPDI, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -- case 0xe70000000085ULL: /* VBPERM */ goto unimplemented; -+ case 0xe70000000085ULL: s390_format_VRR_VVV(s390_irgen_VBPERM, VRR_v1(ovl), -+ VRR_v2(ovl), VRR_r3(ovl), -+ VRR_rxb(ovl)); goto ok; - case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl), - VRRd_v2(ovl), VRRd_v3(ovl), - VRRd_v4(ovl), VRRd_m5(ovl), -@@ -20780,8 +21065,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe70000000097ULL: s390_format_VRR_VVVMM(s390_irgen_VPKS, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_m5(ovl), VRR_rxb(ovl)); goto ok; -- case 0xe7000000009eULL: /* VFNMS */ goto unimplemented; -- case 0xe7000000009fULL: /* VFNMA */ goto unimplemented; -+ case 0xe7000000009eULL: s390_format_VRR_VVVVMM(s390_irgen_VFNMS, VRRe_v1(ovl), -+ VRRe_v2(ovl), VRRe_v3(ovl), -+ VRRe_v4(ovl), VRRe_m5(ovl), -+ VRRe_m6(ovl), -+ VRRe_rxb(ovl)); goto ok; -+ case 0xe7000000009fULL: s390_format_VRR_VVVVMM(s390_irgen_VFNMA, VRRe_v1(ovl), -+ VRRe_v2(ovl), VRRe_v3(ovl), -+ VRRe_v4(ovl), VRRe_m5(ovl), -+ VRRe_m6(ovl), -+ VRRe_rxb(ovl)); goto ok; - case 0xe700000000a1ULL: s390_format_VRR_VVVM(s390_irgen_VMLH, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -@@ -20834,7 +21127,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe700000000b4ULL: s390_format_VRR_VVVM(s390_irgen_VGFM, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -- case 0xe700000000b8ULL: /* VMSL */ goto unimplemented; -+ case 0xe700000000b8ULL: s390_format_VRR_VVVVMM(s390_irgen_VMSL, VRRd_v1(ovl), -+ VRRd_v2(ovl), VRRd_v3(ovl), -+ VRRd_v4(ovl), VRRd_m5(ovl), -+ VRRd_m6(ovl), -+ VRRd_rxb(ovl)); goto ok; - case 0xe700000000b9ULL: s390_format_VRRd_VVVVM(s390_irgen_VACCC, VRRd_v1(ovl), - VRRd_v2(ovl), VRRd_v3(ovl), - VRRd_v4(ovl), VRRd_m5(ovl), -@@ -20871,11 +21168,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - VRRa_v2(ovl), VRRa_m3(ovl), - VRRa_m4(ovl), VRRa_m5(ovl), - VRRa_rxb(ovl)); goto ok; -- case 0xe700000000c4ULL: s390_format_VRRa_VVMMM(s390_irgen_VLDE, VRRa_v1(ovl), -+ case 0xe700000000c4ULL: s390_format_VRRa_VVMMM(s390_irgen_VFLL, VRRa_v1(ovl), - VRRa_v2(ovl), VRRa_m3(ovl), - VRRa_m4(ovl), VRRa_m5(ovl), - VRRa_rxb(ovl)); goto ok; -- case 0xe700000000c5ULL: s390_format_VRRa_VVMMM(s390_irgen_VLED, VRRa_v1(ovl), -+ case 0xe700000000c5ULL: s390_format_VRRa_VVMMM(s390_irgen_VFLR, VRRa_v1(ovl), - VRRa_v2(ovl), VRRa_m3(ovl), - VRRa_m4(ovl), VRRa_m5(ovl), - VRRa_rxb(ovl)); goto ok; -@@ -20956,8 +21253,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - VRRa_m3(ovl), VRRa_m4(ovl), - VRRa_m5(ovl), - VRRa_rxb(ovl)); goto ok; -- case 0xe700000000eeULL: /* VFMIN */ goto unimplemented; -- case 0xe700000000efULL: /* VFMAX */ goto unimplemented; -+ case 0xe700000000eeULL: s390_format_VRRa_VVVMMM(s390_irgen_VFMIN, VRRa_v1(ovl), -+ VRRa_v2(ovl), VRRa_v3(ovl), -+ VRRa_m3(ovl), VRRa_m4(ovl), -+ VRRa_m5(ovl), -+ VRRa_rxb(ovl)); goto ok; -+ case 0xe700000000efULL: s390_format_VRRa_VVVMMM(s390_irgen_VFMAX, VRRa_v1(ovl), -+ VRRa_v2(ovl), VRRa_v3(ovl), -+ VRRa_m3(ovl), VRRa_m4(ovl), -+ VRRa_m5(ovl), -+ VRRa_rxb(ovl)); goto ok; - case 0xe700000000f0ULL: s390_format_VRR_VVVM(s390_irgen_VAVGL, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 3b6121fec..8762975b2 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org) - - This program is free software; you can redistribute it and/or -@@ -684,6 +684,8 @@ s390_insn* genMove_S390(HReg from, HReg to, Bool mode64) - switch (hregClass(from)) { - case HRcInt64: - return s390_insn_move(sizeofIRType(Ity_I64), to, from); -+ case HRcFlt64: -+ return s390_insn_move(sizeofIRType(Ity_F64), to, from); - case HRcVec128: - return s390_insn_move(sizeofIRType(Ity_V128), to, from); - default: -@@ -7870,6 +7872,10 @@ s390_insn_as_string(const s390_insn *insn) - op = "v-vfloatabs"; - break; - -+ case S390_VEC_FLOAT_NABS: -+ op = "v-vfloatnabs"; -+ break; -+ - default: - goto fail; - } -@@ -9439,21 +9445,28 @@ s390_insn_unop_emit(UChar *buf, const s390_insn *insn) - - case S390_VEC_FLOAT_NEG: { - vassert(insn->variant.unop.src.tag == S390_OPND_REG); -- vassert(insn->size == 8); -+ vassert(insn->size >= 4); - UChar v1 = hregNumber(insn->variant.unop.dst); - UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); - return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 0); - } - case S390_VEC_FLOAT_ABS: { - vassert(insn->variant.unop.src.tag == S390_OPND_REG); -- vassert(insn->size == 8); -+ vassert(insn->size >= 4); - UChar v1 = hregNumber(insn->variant.unop.dst); - UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); - return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 2); - } -+ case S390_VEC_FLOAT_NABS: { -+ vassert(insn->variant.unop.src.tag == S390_OPND_REG); -+ vassert(insn->size >= 4); -+ UChar v1 = hregNumber(insn->variant.unop.dst); -+ UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); -+ return s390_emit_VFPSO(buf, v1, v2, s390_getM_from_size(insn->size), 0, 1); -+ } - case S390_VEC_FLOAT_SQRT: { - vassert(insn->variant.unop.src.tag == S390_OPND_REG); -- vassert(insn->size == 8); -+ vassert(insn->size >= 4); - UChar v1 = hregNumber(insn->variant.unop.dst); - UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); - return s390_emit_VFSQ(buf, v1, v2, s390_getM_from_size(insn->size), 0); -diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h -index 3f6473e10..9b69f4d38 100644 ---- a/VEX/priv/host_s390_defs.h -+++ b/VEX/priv/host_s390_defs.h -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as -@@ -205,6 +205,7 @@ typedef enum { - S390_VEC_COUNT_ONES, - S390_VEC_FLOAT_NEG, - S390_VEC_FLOAT_ABS, -+ S390_VEC_FLOAT_NABS, - S390_VEC_FLOAT_SQRT, - S390_UNOP_T_INVALID - } s390_unop_t; -@@ -931,6 +932,8 @@ extern UInt s390_host_hwcaps; - (s390_host_hwcaps & (VEX_HWCAPS_S390X_MSA5)) - #define s390_host_has_lsc2 \ - (s390_host_hwcaps & (VEX_HWCAPS_S390X_LSC2)) -+#define s390_host_has_vxe \ -+ (s390_host_hwcaps & (VEX_HWCAPS_S390X_VXE)) - #endif /* ndef __VEX_HOST_S390_DEFS_H */ - - /*---------------------------------------------------------------*/ -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 134f3eb6f..2f9854038 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2017 -+ Copyright IBM Corp. 2010-2020 - Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org) - - This program is free software; you can redistribute it and/or -@@ -2362,9 +2362,10 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env, - case Iop_NegF128: - if (left->tag == Iex_Unop && - (left->Iex.Unop.op == Iop_AbsF32 || -- left->Iex.Unop.op == Iop_AbsF64)) -+ left->Iex.Unop.op == Iop_AbsF64)) { - bfpop = S390_BFP_NABS; -- else -+ left = left->Iex.Unop.arg; -+ } else - bfpop = S390_BFP_NEG; - goto float128_opnd; - case Iop_AbsF128: bfpop = S390_BFP_ABS; goto float128_opnd; -@@ -2726,9 +2727,10 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr) - case Iop_NegF64: - if (left->tag == Iex_Unop && - (left->Iex.Unop.op == Iop_AbsF32 || -- left->Iex.Unop.op == Iop_AbsF64)) -+ left->Iex.Unop.op == Iop_AbsF64)) { - bfpop = S390_BFP_NABS; -- else -+ left = left->Iex.Unop.arg; -+ } else - bfpop = S390_BFP_NEG; - break; - -@@ -3944,11 +3946,27 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - vec_unop = S390_VEC_COUNT_ONES; - goto Iop_V_wrk; - -+ case Iop_Neg32Fx4: -+ size = 4; -+ vec_unop = S390_VEC_FLOAT_NEG; -+ if (arg->tag == Iex_Unop && arg->Iex.Unop.op == Iop_Abs32Fx4) { -+ vec_unop = S390_VEC_FLOAT_NABS; -+ arg = arg->Iex.Unop.arg; -+ } -+ goto Iop_V_wrk; - case Iop_Neg64Fx2: - size = 8; - vec_unop = S390_VEC_FLOAT_NEG; -+ if (arg->tag == Iex_Unop && arg->Iex.Unop.op == Iop_Abs64Fx2) { -+ vec_unop = S390_VEC_FLOAT_NABS; -+ arg = arg->Iex.Unop.arg; -+ } - goto Iop_V_wrk; - -+ case Iop_Abs32Fx4: -+ size = 4; -+ vec_unop = S390_VEC_FLOAT_ABS; -+ goto Iop_V_wrk; - case Iop_Abs64Fx2: - size = 8; - vec_unop = S390_VEC_FLOAT_ABS; -@@ -4474,17 +4492,29 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - vec_binop = S390_VEC_ELEM_ROLL_V; - goto Iop_VV_wrk; - -+ case Iop_CmpEQ32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_COMPARE_EQUAL; -+ goto Iop_VV_wrk; - case Iop_CmpEQ64Fx2: - size = 8; - vec_binop = S390_VEC_FLOAT_COMPARE_EQUAL; - goto Iop_VV_wrk; - -+ case Iop_CmpLE32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_COMPARE_LESS_OR_EQUAL; -+ goto Iop_VV_wrk; - case Iop_CmpLE64Fx2: { - size = 8; - vec_binop = S390_VEC_FLOAT_COMPARE_LESS_OR_EQUAL; - goto Iop_VV_wrk; - } - -+ case Iop_CmpLT32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_COMPARE_LESS; -+ goto Iop_VV_wrk; - case Iop_CmpLT64Fx2: { - size = 8; - vec_binop = S390_VEC_FLOAT_COMPARE_LESS; -@@ -4671,20 +4701,41 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - dst, reg1, reg2, reg3)); - return dst; - -+ case Iop_Add32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_ADD; -+ goto Iop_irrm_VV_wrk; -+ - case Iop_Add64Fx2: - size = 8; - vec_binop = S390_VEC_FLOAT_ADD; - goto Iop_irrm_VV_wrk; - -+ case Iop_Sub32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_SUB; -+ goto Iop_irrm_VV_wrk; -+ - case Iop_Sub64Fx2: - size = 8; - vec_binop = S390_VEC_FLOAT_SUB; - goto Iop_irrm_VV_wrk; - -+ case Iop_Mul32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_MUL; -+ goto Iop_irrm_VV_wrk; -+ - case Iop_Mul64Fx2: - size = 8; - vec_binop = S390_VEC_FLOAT_MUL; - goto Iop_irrm_VV_wrk; -+ -+ case Iop_Div32Fx4: -+ size = 4; -+ vec_binop = S390_VEC_FLOAT_DIV; -+ goto Iop_irrm_VV_wrk; -+ - case Iop_Div64Fx2: - size = 8; - vec_binop = S390_VEC_FLOAT_DIV; -diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c -index 72f419988..12f521d8c 100644 ---- a/VEX/priv/main_main.c -+++ b/VEX/priv/main_main.c -@@ -1795,6 +1795,7 @@ static const HChar* show_hwcaps_s390x ( UInt hwcaps ) - { VEX_HWCAPS_S390X_MSA5, "msa5" }, - { VEX_HWCAPS_S390X_MI2, "mi2" }, - { VEX_HWCAPS_S390X_LSC2, "lsc2" }, -+ { VEX_HWCAPS_S390X_LSC2, "vxe" }, - }; - /* Allocate a large enough buffer */ - static HChar buf[sizeof prefix + -diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h -index 53e3705da..2ffed0ad0 100644 ---- a/VEX/pub/libvex.h -+++ b/VEX/pub/libvex.h -@@ -171,7 +171,7 @@ typedef - #define VEX_HWCAPS_S390X_MSA5 (1<<19) /* message security assistance facility */ - #define VEX_HWCAPS_S390X_MI2 (1<<20) /* miscellaneous-instruction-extensions facility 2 */ - #define VEX_HWCAPS_S390X_LSC2 (1<<21) /* Conditional load/store facility2 */ -- -+#define VEX_HWCAPS_S390X_VXE (1<<22) /* Vector-enhancements facility */ - - /* Special value representing all available s390x hwcaps */ - #define VEX_HWCAPS_S390X_ALL (VEX_HWCAPS_S390X_LDISP | \ -@@ -189,7 +189,8 @@ typedef - VEX_HWCAPS_S390X_VX | \ - VEX_HWCAPS_S390X_MSA5 | \ - VEX_HWCAPS_S390X_MI2 | \ -- VEX_HWCAPS_S390X_LSC2) -+ VEX_HWCAPS_S390X_LSC2 | \ -+ VEX_HWCAPS_S390X_VXE) - - #define VEX_HWCAPS_S390X(x) ((x) & ~VEX_S390X_MODEL_MASK) - #define VEX_S390X_MODEL(x) ((x) & VEX_S390X_MODEL_MASK) -diff --git a/VEX/pub/libvex_emnote.h b/VEX/pub/libvex_emnote.h -index be033b4da..77880a270 100644 ---- a/VEX/pub/libvex_emnote.h -+++ b/VEX/pub/libvex_emnote.h -@@ -124,6 +124,10 @@ typedef - /* ppno insn is not supported on this host */ - EmFail_S390X_ppno, - -+ /* insn needs vector-enhancements facility which is not available on this -+ host */ -+ EmFail_S390X_vxe, -+ - EmNote_NUMBER - } - VexEmNote; -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index 365942c4f..ba84fa6e9 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -697,9 +697,13 @@ Addr setup_client_stack( void* init_sp, - } - # elif defined(VGP_s390x_linux) - { -- /* Advertise hardware features "below" TE and VXRS. TE itself -- and anything above VXRS is not supported by Valgrind. */ -- auxv->u.a_val &= (VKI_HWCAP_S390_TE - 1) | VKI_HWCAP_S390_VXRS; -+ /* Out of the hardware features available on the platform, -+ advertise those "below" TE, as well as the ones explicitly -+ ORed in the expression below. Anything else, such as TE -+ itself, is not supported by Valgrind. */ -+ auxv->u.a_val &= ((VKI_HWCAP_S390_TE - 1) -+ | VKI_HWCAP_S390_VXRS -+ | VKI_HWCAP_S390_VXRS_EXT); - } - # elif defined(VGP_arm64_linux) - { -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index e7877e636..228ae2554 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -1555,6 +1555,7 @@ Bool VG_(machine_get_hwcaps)( void ) - { False, S390_FAC_MSA5, VEX_HWCAPS_S390X_MSA5, "MSA5" }, - { False, S390_FAC_MI2, VEX_HWCAPS_S390X_MI2, "MI2" }, - { False, S390_FAC_LSC2, VEX_HWCAPS_S390X_LSC2, "LSC2" }, -+ { False, S390_FAC_VXE, VEX_HWCAPS_S390X_VXE, "VXE" }, - }; - - /* Set hwcaps according to the detected facilities */ -diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h -index 7b863a324..4ab2d3334 100644 ---- a/include/vki/vki-s390x-linux.h -+++ b/include/vki/vki-s390x-linux.h -@@ -806,6 +806,7 @@ typedef vki_s390_regs vki_elf_gregset_t; - - #define VKI_HWCAP_S390_TE 1024 - #define VKI_HWCAP_S390_VXRS 2048 -+#define VKI_HWCAP_S390_VXRS_EXT 8192 - - - //---------------------------------------------------------------------- -diff --git a/none/tests/s390x/vector.h b/none/tests/s390x/vector.h -index de2391480..632c2cb9c 100644 ---- a/none/tests/s390x/vector.h -+++ b/none/tests/s390x/vector.h -@@ -86,6 +86,13 @@ void print_hex(const V128 value) { - printf("%016lx | %016lx\n", value.u64[0], value.u64[1]); - } - -+void print_hex64(const V128 value, int zero_only) { -+ if (zero_only) -+ printf("%016lx | --\n", value.u64[0]); -+ else -+ printf("%016lx | %016lx\n", value.u64[0], value.u64[1]); -+} -+ - void print_f32(const V128 value, int even_only, int zero_only) { - if (zero_only) - printf("%a | -- | -- | --\n", value.f32[0]); -@@ -222,8 +229,10 @@ static void test_##insn##_selective(const s390x_test_usageInfo info) \ - {printf(" v_arg2 = "); print_hex(v_arg2);} \ - if (info & V128_V_ARG3_AS_INT) \ - {printf(" v_arg3 = "); print_hex(v_arg3);} \ -- if (info & V128_V_RES_AS_INT) \ -- {printf(" v_result = "); print_hex(v_result);} \ -+ if (info & V128_V_RES_AS_INT) { \ -+ printf(" v_result = "); \ -+ print_hex64(v_result, info & V128_V_RES_ZERO_ONLY); \ -+ } \ - \ - if (info & V128_V_ARG1_AS_FLOAT64) \ - {printf(" v_arg1 = "); print_f64(v_arg1, 0);} \ -diff --git a/none/tests/s390x/vector_float.c b/none/tests/s390x/vector_float.c -index 52f3a296f..20853f381 100644 ---- a/none/tests/s390x/vector_float.c -+++ b/none/tests/s390x/vector_float.c -@@ -114,50 +114,59 @@ int main() - test_with_selective_printing(vldeb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64)); - test_with_selective_printing(wldeb, (V128_V_RES_AS_FLOAT64 | -- V128_V_ARG1_AS_FLOAT64)); -+ V128_V_ARG1_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vflcdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64)); - test_with_selective_printing(wflcdb, (V128_V_RES_AS_FLOAT64 | -- V128_V_ARG1_AS_FLOAT64)); -+ V128_V_ARG1_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vflndb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64)); - test_with_selective_printing(wflndb, (V128_V_RES_AS_FLOAT64 | -- V128_V_ARG1_AS_FLOAT64)); -+ V128_V_ARG1_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vflpdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64)); - test_with_selective_printing(wflpdb, (V128_V_RES_AS_FLOAT64 | -- V128_V_ARG1_AS_FLOAT64)); -+ V128_V_ARG1_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfadb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfadb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfsdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfsdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfmdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfmdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfddb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfddb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfsqdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64)); - test_with_selective_printing(wfsqdb, (V128_V_RES_AS_FLOAT64 | -- V128_V_ARG1_AS_FLOAT64)); -+ V128_V_ARG1_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfmadb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | -@@ -166,7 +175,8 @@ int main() - test_with_selective_printing(wfmadb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_V_ARG3_AS_FLOAT64)); -+ V128_V_ARG3_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfmsdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -@@ -174,21 +184,25 @@ int main() - test_with_selective_printing(wfmsdb, (V128_V_RES_AS_FLOAT64 | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_V_ARG3_AS_FLOAT64)); -+ V128_V_ARG3_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(wfcdb, (V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_R_RES)); -+ V128_R_RES | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(wfkdb, (V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_R_RES)); -+ V128_R_RES | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfcedb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfcedb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfcedbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -@@ -196,14 +210,16 @@ int main() - test_with_selective_printing(wfcedbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_R_RES)); -+ V128_R_RES | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfchdb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfchdb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfchdbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -@@ -211,14 +227,16 @@ int main() - test_with_selective_printing(wfchdbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_R_RES)); -+ V128_R_RES | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vfchedb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64)); - test_with_selective_printing(wfchedb, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | -- V128_V_ARG2_AS_FLOAT64)); -+ V128_V_ARG2_AS_FLOAT64 | -+ V128_V_RES_ZERO_ONLY)); - test_with_selective_printing(vfchedbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -@@ -226,7 +244,8 @@ int main() - test_with_selective_printing(wfchedbs, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | - V128_V_ARG2_AS_FLOAT64 | -- V128_R_RES)); -+ V128_R_RES | -+ V128_V_RES_ZERO_ONLY)); - - test_with_selective_printing(vftcidb0, (V128_V_RES_AS_INT | - V128_V_ARG1_AS_FLOAT64 | -diff --git a/none/tests/s390x/vector_float.stdout.exp b/none/tests/s390x/vector_float.stdout.exp -index eac525041..a330ac832 100644 ---- a/none/tests/s390x/vector_float.stdout.exp -+++ b/none/tests/s390x/vector_float.stdout.exp -@@ -419,88 +419,88 @@ insn vcgdb07: - v_result = 7fffffffffffffff | 7fffffffffffffff - v_arg1 = 0x1.fed2f087c21p+341 | 0x1.180e4c1d87fc4p+682 - insn wcgdb00: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.d7fd9222e8b86p+670 | 0x1.c272612672a3p+798 - insn wcgdb00: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.745cd360987e5p-496 | -0x1.f3b404919f358p-321 - insn wcgdb00: -- v_result = 8000000000000000 | 0000000000000000 -+ v_result = 8000000000000000 | -- - v_arg1 = -0x1.9523565cd92d5p+643 | 0x1.253677d6d3be2p-556 - insn wcgdb00: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.b6eb576ec3e6ap+845 | -0x1.c7e102c503d91p+266 - insn wcgdb01: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.3d4319841f4d6p-1011 | -0x1.2feabf7dfc506p-680 - insn wcgdb01: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.6fb8d1cd8b32cp-843 | -0x1.50f6a6922f97ep+33 - insn wcgdb01: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.64a673daccf1ap-566 | -0x1.69ef9b1d01499p+824 - insn wcgdb01: -- v_result = 8000000000000000 | 0000000000000000 -+ v_result = 8000000000000000 | -- - v_arg1 = -0x1.3e2ddd862b4adp+1005 | -0x1.312466410271p+184 - insn wcgdb03: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.d594c3412a11p-953 | -0x1.a07393d34d77cp-224 - insn wcgdb03: -- v_result = 8000000000000000 | 0000000000000000 -+ v_result = 8000000000000000 | -- - v_arg1 = -0x1.f7a0dbcfd6e4cp+104 | -0x1.40f7cde7f2214p-702 - insn wcgdb03: -- v_result = 8000000000000000 | 0000000000000000 -+ v_result = 8000000000000000 | -- - v_arg1 = -0x1.40739c1574808p+560 | -0x1.970328ddf1b6ep-374 - insn wcgdb03: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.477653afd7048p-38 | 0x1.1eac2f8b2a93cp-384 - insn wcgdb04: -- v_result = ffffffffe9479a7d | 0000000000000000 -+ v_result = ffffffffe9479a7d | -- - v_arg1 = -0x1.6b865833eff3p+28 | 0x1.06e8cf1834d0ep-722 - insn wcgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.eef0b2294a5cp-544 | -0x1.8e8b133ccda15p+752 - insn wcgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.f34e77e6b6698p-894 | -0x1.9f7ce1cb53bddp-896 - insn wcgdb04: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.95707a6d75db5p+1018 | -0x1.3b0c072d23011p-224 - insn wcgdb05: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.a9fb71160793p-968 | 0x1.05f601fe8123ap-986 - insn wcgdb05: -- v_result = 8000000000000000 | 0000000000000000 -+ v_result = 8000000000000000 | -- - v_arg1 = -0x1.0864159b94305p+451 | -0x1.d4647f5a78b7ep-599 - insn wcgdb05: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.37eadff8397c8p+432 | -0x1.15d896b6f6063p+464 - insn wcgdb05: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.eb0812b0d677p-781 | 0x1.3117c5e0e288cp-202 - insn wcgdb06: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.6b88069167c0fp-662 | -0x1.70571d27e1279p+254 - insn wcgdb06: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.f6a6d6e883596p+260 | 0x1.0d578afaaa34ap+604 - insn wcgdb06: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.d91c7d13c4694p-475 | -0x1.ecf1f8529767bp+830 - insn wcgdb06: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.fac8dd3bb7af6p-101 | 0x1.fb8324a00fba8p+959 - insn wcgdb07: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.4b0fa18fa73c7p+111 | -0x1.08e7b17633a49p+61 - insn wcgdb07: -- v_result = e636b693e39a1100 | 0000000000000000 -+ v_result = e636b693e39a1100 | -- - v_arg1 = -0x1.9c9496c1c65efp+60 | 0x1.c4182ee728d76p-572 - insn wcgdb07: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = -0x1.819718032dff7p-303 | 0x1.a784c77ff6aa2p-622 - insn wcgdb07: -- v_result = 7fffffffffffffff | 0000000000000000 -+ v_result = 7fffffffffffffff | -- - v_arg1 = 0x1.978e8abfd83c2p+152 | 0x1.2531ebf451762p+315 - insn vclgdb00: - v_result = 0000000000000000 | 0000000000000000 -@@ -587,88 +587,88 @@ insn vclgdb07: - v_result = 0000000000000000 | 0000000000000000 - v_arg1 = -0x1.137bbb51f08bdp+306 | 0x1.18d2a1063356p-795 - insn wclgdb00: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.e66f55dcc2639p-1013 | -0x1.733ee56929f3bp-304 - insn wclgdb00: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.8802fd9ab740cp-986 | -0x1.64d4d2c7c145fp-1015 - insn wclgdb00: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.a67209b8c407bp-645 | -0x1.6410ff9b1c801p+487 - insn wclgdb00: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.cb2febaefeb2dp+49 | 0x1.dee368b2ec375p-502 - insn wclgdb01: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.5703db3c1b0e2p-728 | 0x1.068c4d51ea4ebp+617 - insn wclgdb01: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.ae350291e5b3ep+291 | 0x1.1b87bb09b6032p+376 - insn wclgdb01: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.c4666a710127ep+424 | -0x1.19e969b6c0076p+491 - insn wclgdb01: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.c892c5a4d103fp+105 | -0x1.d4f937cc76704p+749 - insn wclgdb03: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.81090d8fc663dp-111 | 0x1.337ec5e0f0904p+1 - insn wclgdb03: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.e787adc70b91p-593 | 0x1.db8d83196b53cp-762 - insn wclgdb03: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.6529307e907efp+389 | -0x1.3ea0d8d5b4dd2p+589 - insn wclgdb03: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.be701a158637p-385 | 0x1.c5a7f70cb8a09p+107 - insn wclgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.2f328571ab445p+21 | -0x1.dcc21fc82ba01p-930 - insn wclgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.06b69fcbb7bffp-415 | 0x1.6f9a13a0a827ap+915 - insn wclgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.738e549b38bcdp+479 | 0x1.a522edb999c9p-45 - insn wclgdb04: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.7f9399d2bcf3bp-215 | -0x1.7bc35f2d69a7fp+818 - insn wclgdb05: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.fc542bdb707f6p+880 | -0x1.8521ebc93a25fp-969 - insn wclgdb05: -- v_result = 1ce8d9951b8c8600 | 0000000000000000 -+ v_result = 1ce8d9951b8c8600 | -- - v_arg1 = 0x1.ce8d9951b8c86p+60 | 0x1.92712589230e7p+475 - insn wclgdb05: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.8a297f60a0811p-156 | 0x1.102b79043d82cp-204 - insn wclgdb05: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.beb9057e1401dp-196 | -0x1.820f18f830262p+15 - insn wclgdb06: -- v_result = 0000000000000001 | 0000000000000000 -+ v_result = 0000000000000001 | -- - v_arg1 = 0x1.c321a966ecb4dp-430 | -0x1.2f6a1a95ead99p-943 - insn wclgdb06: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.f1a86b4aed821p-56 | -0x1.1ee6717cc2d7fp-899 - insn wclgdb06: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.73ce49d89ecb9p-302 | 0x1.52663b975ed23p-716 - insn wclgdb06: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.3e9c2de97a292p+879 | 0x1.d34eed36f2eafp+960 - insn wclgdb07: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.4e6ec6ddc6a45p-632 | -0x1.6e564d0fec72bp+369 - insn wclgdb07: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.42e2c658e4c4dp+459 | -0x1.9f9dc0252e44p+85 - insn wclgdb07: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.fb40ac8cda3c1p-762 | 0x1.0e9ed614bc8f1p-342 - insn wclgdb07: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.c1f8b3c68e214p+118 | -0x1.1a26a49368b61p+756 - insn vfidb00: - v_arg1 = -0x1.38df4cf9d52dbp-545 | -0x1.049253d90dd92p+94 -@@ -1020,16 +1020,16 @@ insn vldeb: - v_result = -0x1.6f5fb2p+70 | -0x1.0d2df6p-107 - insn wldeb: - v_arg1 = -0x1.d26169729db2ap-435 | 0x1.d6fd080793e8cp+767 -- v_result = -0x1.9a4c2cp-54 | 0x0p+0 -+ v_result = -0x1.9a4c2cp-54 | -- - insn wldeb: - v_arg1 = -0x1.f4b59107fce61p-930 | 0x1.cdf2816e253f4p-168 -- v_result = -0x1.be96b2p-116 | 0x0p+0 -+ v_result = -0x1.be96b2p-116 | -- - insn wldeb: - v_arg1 = -0x1.9603a2997928cp-441 | -0x1.aada85e355a11p-767 -- v_result = -0x1.d2c074p-55 | 0x0p+0 -+ v_result = -0x1.d2c074p-55 | -- - insn wldeb: - v_arg1 = 0x1.25ccf5bd0e83p+620 | 0x1.e1635864ebb17p-88 -- v_result = 0x1.64b99ep+78 | 0x0p+0 -+ v_result = 0x1.64b99ep+78 | -- - insn vflcdb: - v_arg1 = 0x1.0ae6d82f76afp-166 | -0x1.e8fb1e03a7415p-191 - v_result = -0x1.0ae6d82f76afp-166 | 0x1.e8fb1e03a7415p-191 -@@ -1044,16 +1044,16 @@ insn vflcdb: - v_result = -0x1.19520153d35b4p-301 | -0x1.ac5325cd23253p+396 - insn wflcdb: - v_arg1 = 0x1.ffd3eecfd54d7p-831 | -0x1.97854fa523a77p+146 -- v_result = -0x1.ffd3eecfd54d7p-831 | 0x0p+0 -+ v_result = -0x1.ffd3eecfd54d7p-831 | -- - insn wflcdb: - v_arg1 = -0x1.508ea45606447p-442 | 0x1.ae7f0e6cf9d2bp+583 -- v_result = 0x1.508ea45606447p-442 | 0x0p+0 -+ v_result = 0x1.508ea45606447p-442 | -- - insn wflcdb: - v_arg1 = 0x1.da8ab2188c21ap+94 | 0x1.78a9c152aa074p-808 -- v_result = -0x1.da8ab2188c21ap+94 | 0x0p+0 -+ v_result = -0x1.da8ab2188c21ap+94 | -- - insn wflcdb: - v_arg1 = -0x1.086882645e0c5p-1001 | -0x1.54e2de5af5a74p-262 -- v_result = 0x1.086882645e0c5p-1001 | 0x0p+0 -+ v_result = 0x1.086882645e0c5p-1001 | -- - insn vflndb: - v_arg1 = -0x1.5bec561d407dcp+819 | -0x1.a5773dadb7a2dp+935 - v_result = -0x1.5bec561d407dcp+819 | -0x1.a5773dadb7a2dp+935 -@@ -1068,16 +1068,16 @@ insn vflndb: - v_result = -0x1.c5bc39a06d4e2p-259 | -0x1.c5e61ad849e77p-833 - insn wflndb: - v_arg1 = -0x1.e9f3e6d1beffap-117 | -0x1.d58cc8bf123b3p-714 -- v_result = -0x1.e9f3e6d1beffap-117 | 0x0p+0 -+ v_result = -0x1.e9f3e6d1beffap-117 | -- - insn wflndb: - v_arg1 = -0x1.3fc4ef2e7485ep-691 | 0x1.eb328986081efp-775 -- v_result = -0x1.3fc4ef2e7485ep-691 | 0x0p+0 -+ v_result = -0x1.3fc4ef2e7485ep-691 | -- - insn wflndb: - v_arg1 = -0x1.7146c5afdec16p+23 | -0x1.597fcfa1fab2p-708 -- v_result = -0x1.7146c5afdec16p+23 | 0x0p+0 -+ v_result = -0x1.7146c5afdec16p+23 | -- - insn wflndb: - v_arg1 = 0x1.03f8d7e9afe84p-947 | 0x1.9a10c3feb6b57p-118 -- v_result = -0x1.03f8d7e9afe84p-947 | 0x0p+0 -+ v_result = -0x1.03f8d7e9afe84p-947 | -- - insn vflpdb: - v_arg1 = 0x1.64ae59b6c762ep-407 | -0x1.fa7191ab21e86p+533 - v_result = 0x1.64ae59b6c762ep-407 | 0x1.fa7191ab21e86p+533 -@@ -1092,16 +1092,16 @@ insn vflpdb: - v_result = 0x1.85fa2de1d492ap+170 | 0x1.ac36828822c11p-968 - insn wflpdb: - v_arg1 = 0x1.a6cf677640a73p-871 | 0x1.b6f1792385922p-278 -- v_result = 0x1.a6cf677640a73p-871 | 0x0p+0 -+ v_result = 0x1.a6cf677640a73p-871 | -- - insn wflpdb: - v_arg1 = -0x1.b886774f6d888p-191 | -0x1.6a2b08d735d22p-643 -- v_result = 0x1.b886774f6d888p-191 | 0x0p+0 -+ v_result = 0x1.b886774f6d888p-191 | -- - insn wflpdb: - v_arg1 = 0x1.5045d37d46f5fp+943 | -0x1.333a86ef2dcf6p-1013 -- v_result = 0x1.5045d37d46f5fp+943 | 0x0p+0 -+ v_result = 0x1.5045d37d46f5fp+943 | -- - insn wflpdb: - v_arg1 = 0x1.1e7bec6ada14dp+252 | 0x1.a70b3f3e24dap-153 -- v_result = 0x1.1e7bec6ada14dp+252 | 0x0p+0 -+ v_result = 0x1.1e7bec6ada14dp+252 | -- - insn vfadb: - v_arg1 = 0x1.5b1ad8e9f17c6p-294 | -0x1.ddd8300a0bf02p+122 - v_arg2 = -0x1.9b49c31ca8ac6p+926 | 0x1.fdbc992926268p+677 -@@ -1121,19 +1121,19 @@ insn vfadb: - insn wfadb: - v_arg1 = 0x1.3c5466cb80722p+489 | -0x1.11e1770053ca2p+924 - v_arg2 = 0x1.d876cd721a726p-946 | 0x1.5c04ceb79c9bcp+1001 -- v_result = 0x1.3c5466cb80722p+489 | 0x0p+0 -+ v_result = 0x1.3c5466cb80722p+489 | -- - insn wfadb: - v_arg1 = 0x1.b0b142d6b76a3p+577 | 0x1.3146824e993a2p+432 - v_arg2 = -0x1.f7f3b7582925fp-684 | -0x1.9700143c2b935p-837 -- v_result = 0x1.b0b142d6b76a2p+577 | 0x0p+0 -+ v_result = 0x1.b0b142d6b76a2p+577 | -- - insn wfadb: - v_arg1 = -0x1.8d65e15edabd6p+244 | 0x1.3be7fd08492d6p-141 - v_arg2 = -0x1.5eef86490fb0ap+481 | 0x1.7b26c897cb6dfp+810 -- v_result = -0x1.5eef86490fb0ap+481 | 0x0p+0 -+ v_result = -0x1.5eef86490fb0ap+481 | -- - insn wfadb: - v_arg1 = -0x1.2dffa5b5f29p+34 | 0x1.71a026274602fp-881 - v_arg2 = 0x1.4dad707287289p+756 | -0x1.1500d55807247p-616 -- v_result = 0x1.4dad707287288p+756 | 0x0p+0 -+ v_result = 0x1.4dad707287288p+756 | -- - insn vfsdb: - v_arg1 = 0x1.054fd9c4d4883p+644 | 0x1.45c90ed85bd7fp-780 - v_arg2 = 0x1.f3bc7a611dadap+494 | -0x1.7c9e1e858ba5bp-301 -@@ -1153,19 +1153,19 @@ insn vfsdb: - insn wfsdb: - v_arg1 = 0x1.9090dabf846e7p-648 | 0x1.1c4ab843a2d15p+329 - v_arg2 = -0x1.a7ceb293690dep+316 | 0x1.22245954a20cp+42 -- v_result = 0x1.a7ceb293690dep+316 | 0x0p+0 -+ v_result = 0x1.a7ceb293690dep+316 | -- - insn wfsdb: - v_arg1 = 0x1.4e5347c27819p-933 | -0x1.56a30bda28351p-64 - v_arg2 = -0x1.dedb9f3935b56p-155 | 0x1.8c5b6ed76816cp-522 -- v_result = 0x1.dedb9f3935b56p-155 | 0x0p+0 -+ v_result = 0x1.dedb9f3935b56p-155 | -- - insn wfsdb: - v_arg1 = 0x1.0ec4e562a015bp-491 | 0x1.3996381b52d9fp-686 - v_arg2 = 0x1.1dcce4e81819p+960 | -0x1.32fa425e8fc08p-263 -- v_result = -0x1.1dcce4e81818fp+960 | 0x0p+0 -+ v_result = -0x1.1dcce4e81818fp+960 | -- - insn wfsdb: - v_arg1 = -0x1.587229f90f77dp-19 | 0x1.100d8eb8105e4p-784 - v_arg2 = -0x1.afb4cce4c43ddp+530 | -0x1.6da7f05e7f512p-869 -- v_result = 0x1.afb4cce4c43dcp+530 | 0x0p+0 -+ v_result = 0x1.afb4cce4c43dcp+530 | -- - insn vfmdb: - v_arg1 = 0x1.892b425556c47p-124 | 0x1.38222404079dfp-656 - v_arg2 = 0x1.af612ed2c342dp-267 | -0x1.1f735fd6ce768p-877 -@@ -1185,19 +1185,19 @@ insn vfmdb: - insn wfmdb: - v_arg1 = -0x1.b992d950126a1p-683 | -0x1.9c1b22eb58c59p-497 - v_arg2 = 0x1.b557a7d8e32c3p-25 | -0x1.f746b2ddafccep+227 -- v_result = -0x1.792f6fb13894ap-707 | 0x0p+0 -+ v_result = -0x1.792f6fb13894ap-707 | -- - insn wfmdb: - v_arg1 = -0x1.677a8c20a5a2fp+876 | 0x1.c03e7b97e8c0dp-645 - v_arg2 = 0x1.dab44be430937p-1011 | -0x1.3f51352c67be9p-916 -- v_result = -0x1.4d4b0a1827064p-134 | 0x0p+0 -+ v_result = -0x1.4d4b0a1827064p-134 | -- - insn wfmdb: - v_arg1 = -0x1.da60f596ad0cep+254 | 0x1.52332e0650e33p+966 - v_arg2 = 0x1.a042c52ed993cp+215 | 0x1.8f380c84aa133p+204 -- v_result = -0x1.81aca4bbcbd24p+470 | 0x0p+0 -+ v_result = -0x1.81aca4bbcbd24p+470 | -- - insn wfmdb: - v_arg1 = -0x1.83d17f11f6aa3p-469 | -0x1.98117efe89b9ep-361 - v_arg2 = 0x1.8c445fd46d214p-701 | -0x1.f98118821821cp+596 -- v_result = -0x0p+0 | 0x0p+0 -+ v_result = -0x0p+0 | -- - insn vfddb: - v_arg1 = -0x1.ecbb48899e0f1p+969 | 0x1.caf175ab352p-20 - v_arg2 = -0x1.9455d67f9f79dp+208 | 0x1.bc4a431b04a6fp+482 -@@ -1217,19 +1217,19 @@ insn vfddb: - insn wfddb: - v_arg1 = 0x1.bd48489b60731p-114 | 0x1.a760dcf57b74fp-51 - v_arg2 = -0x1.171f83409eeb6p-402 | -0x1.e159d1409bdc6p-972 -- v_result = -0x1.9864f1511f8cp+288 | 0x0p+0 -+ v_result = -0x1.9864f1511f8cp+288 | -- - insn wfddb: - v_arg1 = -0x1.120505ef4606p-637 | -0x1.83f6f775c0eb7p+272 - v_arg2 = -0x1.d18ba3872fde1p+298 | 0x1.c60f8d191068cp-454 -- v_result = 0x1.2d5cdb15a686cp-936 | 0x0p+0 -+ v_result = 0x1.2d5cdb15a686cp-936 | -- - insn wfddb: - v_arg1 = 0x1.f637f7f8c790fp-97 | -0x1.7bdce4d74947p+189 - v_arg2 = -0x1.1c8f2d1b3a2edp-218 | -0x1.55fdfd1840241p-350 -- v_result = -0x1.c3d0799c1420fp+121 | 0x0p+0 -+ v_result = -0x1.c3d0799c1420fp+121 | -- - insn wfddb: - v_arg1 = -0x1.c63b7b2eee253p+250 | 0x1.dfd9dcd8b823fp-125 - v_arg2 = 0x1.094a1f1f87e0cp+629 | 0x1.eeaa23c0d7843p-814 -- v_result = -0x1.b653a10ebdeccp-379 | 0x0p+0 -+ v_result = -0x1.b653a10ebdeccp-379 | -- - insn vfsqdb: - v_arg1 = 0x1.f60db25f7066p-703 | -0x1.d43509abca8c3p+631 - v_result = 0x1.fb009ab25ec11p-352 | nan -@@ -1244,16 +1244,16 @@ insn vfsqdb: - v_result = 0x1.833dba0954bccp+249 | nan - insn wfsqdb: - v_arg1 = 0x1.71af4e7f64978p+481 | -0x1.3429dc60011d7p-879 -- v_result = 0x1.b30fc65551133p+240 | 0x0p+0 -+ v_result = 0x1.b30fc65551133p+240 | -- - insn wfsqdb: - v_arg1 = 0x1.5410db1c5f403p+173 | 0x1.97fa6581e692fp+108 -- v_result = 0x1.a144f43a592c1p+86 | 0x0p+0 -+ v_result = 0x1.a144f43a592c1p+86 | -- - insn wfsqdb: - v_arg1 = -0x1.5838027725afep+6 | 0x1.ac61529c11f38p+565 -- v_result = nan | 0x0p+0 -+ v_result = nan | -- - insn wfsqdb: - v_arg1 = -0x1.159e341dcc06ep-439 | 0x1.ed54ce5481ba5p-574 -- v_result = nan | 0x0p+0 -+ v_result = nan | -- - insn vfmadb: - v_arg1 = -0x1.eb00a5c503d75p+538 | 0x1.89fae603ddc07p+767 - v_arg2 = -0x1.71c72712c3957p+715 | 0x1.1bd5773442feap+762 -@@ -1278,22 +1278,22 @@ insn wfmadb: - v_arg1 = 0x1.1cc5b10a14d54p+668 | -0x1.686407390f7d1p+616 - v_arg2 = -0x1.bf34549e73246p+676 | -0x1.dc5a34cc470f3p+595 - v_arg3 = -0x1.95e0fdcf13974p-811 | -0x1.79c7cc1a8ec83p-558 -- v_result = -0x1.fffffffffffffp+1023 | 0x0p+0 -+ v_result = -0x1.fffffffffffffp+1023 | -- - insn wfmadb: - v_arg1 = 0x1.138bc1a5d75f8p+713 | -0x1.e226ebba2fe54p+381 - v_arg2 = -0x1.081ebb7cc3414p-772 | 0x1.369d99e174fc3p+922 - v_arg3 = -0x1.0671c682a5d0cp-1016 | 0x1.03c9530dd0377p+378 -- v_result = -0x1.1c4933e117d95p-59 | 0x0p+0 -+ v_result = -0x1.1c4933e117d95p-59 | -- - insn wfmadb: - v_arg1 = -0x1.166f0b1fad67bp+64 | -0x1.e9ee8d32e1069p-452 - v_arg2 = -0x1.4a235bdd109e2p-65 | 0x1.bacaa96fc7e81p-403 - v_arg3 = -0x1.d2e19acf7c4bdp+99 | 0x1.f901130f685adp-963 -- v_result = -0x1.d2e19acf7c4bcp+99 | 0x0p+0 -+ v_result = -0x1.d2e19acf7c4bcp+99 | -- - insn wfmadb: - v_arg1 = -0x1.77d7bfec863d2p-988 | -0x1.b68029700c6b1p-206 - v_arg2 = -0x1.aca05ad00aec1p+737 | 0x1.ac746bd7e216bp+51 - v_arg3 = 0x1.17342292078b4p+188 | -0x1.49efaf9392301p+555 -- v_result = 0x1.17342292078b4p+188 | 0x0p+0 -+ v_result = 0x1.17342292078b4p+188 | -- - insn vfmsdb: - v_arg1 = -0x1.a1b218e84e61p+34 | 0x1.b220f0d144daep-111 - v_arg2 = 0x1.564fcc2527961p-265 | 0x1.ea85a4154721ep+733 -@@ -1318,22 +1318,22 @@ insn wfmsdb: - v_arg1 = -0x1.7499a639673a6p-100 | -0x1.2a0d737e6cb1cp-207 - v_arg2 = -0x1.01ad4670a7aa3p-911 | 0x1.f94385e1021e8p+317 - v_arg3 = 0x1.aa42b2bb17af9p+982 | 0x1.c550e471711p+786 -- v_result = -0x1.aa42b2bb17af8p+982 | 0x0p+0 -+ v_result = -0x1.aa42b2bb17af8p+982 | -- - insn wfmsdb: - v_arg1 = 0x1.76840f99b431ep+500 | -0x1.989a500c92c08p+594 - v_arg2 = 0x1.33c657cb8385cp-84 | -0x1.2c795ad92ce17p+807 - v_arg3 = -0x1.ee58a39f02d54p-351 | -0x1.18695ed9a280ap+48 -- v_result = 0x1.c242894a0068p+416 | 0x0p+0 -+ v_result = 0x1.c242894a0068p+416 | -- - insn wfmsdb: - v_arg1 = -0x1.16db07e054a65p-469 | -0x1.3a627ab99c6e4p+689 - v_arg2 = 0x1.17872eae826e5p-538 | 0x1.44ed513fb5873p-929 - v_arg3 = 0x1.5ca912008e077p-217 | -0x1.982a6f7359876p-23 -- v_result = -0x1.5ca912008e077p-217 | 0x0p+0 -+ v_result = -0x1.5ca912008e077p-217 | -- - insn wfmsdb: - v_arg1 = -0x1.d315f4a932c6p+122 | 0x1.616a04493e143p+513 - v_arg2 = -0x1.cf1cd3516f23fp+552 | 0x1.7121749c3932cp-750 - v_arg3 = 0x1.dc26d92304d7fp-192 | -0x1.1fc3cca9ec20ep+371 -- v_result = 0x1.a67ca6ba395bcp+675 | 0x0p+0 -+ v_result = 0x1.a67ca6ba395bcp+675 | -- - insn wfcdb: - v_arg1 = 0x1.302001b736011p-633 | -0x1.72d5300225c97p-468 - v_arg2 = -0x1.8c007c5aba108p-17 | -0x1.bb3f9ae136acdp+569 -@@ -1383,19 +1383,19 @@ insn vfcedb: - v_arg1 = 0x1.d8e5c9930c19dp+623 | -0x1.cf1facff4e194p-605 - v_arg2 = -0x1.ed6ba02646d0dp+441 | -0x1.2d677e710620bp+810 - insn wfcedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.a252009e1a12cp-442 | 0x1.4dc608268bb29p-513 - v_arg2 = -0x1.81020aa1a36e6p-687 | -0x1.300e64ce414f1p-899 - insn wfcedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.cec439a8d4781p-175 | -0x1.d20e3b281d599p+893 - v_arg2 = 0x1.ca17cf16cf0aap-879 | 0x1.61506f8596092p+545 - insn wfcedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.0659f5f24a004p+877 | 0x1.fc46867ed0338p-680 - v_arg2 = -0x1.1d6849587155ep-1010 | -0x1.f68171edc235fp+575 - insn wfcedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.dc88a0d46ad79p-816 | 0x1.245140dcaed79p+851 - v_arg2 = 0x1.b33e977c7b3ep-818 | -0x1.04319d7c69367p+787 - insn vfcedbs: -@@ -1419,22 +1419,22 @@ insn vfcedbs: - v_arg2 = 0x1.ae2c06ea88ff4p+332 | -0x1.f668ce4f8ef9ap+821 - r_result = 0000000000000003 - insn wfcedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.645261bf86b1fp-996 | 0x1.abd13c95397aap+992 - v_arg2 = -0x1.ba09e8fc66a8cp+113 | 0x1.75dbfe92c16c4p-786 - r_result = 0000000000000003 - insn wfcedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.d02831d003e7dp+415 | -0x1.611a9dfd10f36p-80 - v_arg2 = -0x1.10bda62f4647p+723 | 0x1.cc47af6653378p-614 - r_result = 0000000000000003 - insn wfcedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = 0x1.f168f32f84178p-321 | -0x1.79a2a0b9549d1p-136 - v_arg2 = 0x1.41e19d1cfa692p+11 | -0x1.2a0ed6e7fd517p-453 - r_result = 0000000000000003 - insn wfcedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.76a9144ee26c5p+188 | -0x1.386aaea2d9cddp-542 - v_arg2 = 0x1.810fcf222efc4p-999 | -0x1.ce90a9a43e2a1p+80 - r_result = 0000000000000003 -@@ -1455,19 +1455,19 @@ insn vfchdb: - v_arg1 = 0x1.82be31fb88a2dp+946 | -0x1.7ca9e9ff31953p-931 - v_arg2 = 0x1.fe75a1052beccp+490 | 0x1.179d18543d678p-255 - insn wfchdb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.0af85d8d8d609p-464 | -0x1.9f639a686e0fep+203 - v_arg2 = -0x1.3142b77b55761p-673 | 0x1.ca9c474339da1p+472 - insn wfchdb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = -0x1.6cf16959a022bp+213 | 0x1.445606e4363e1p+942 - v_arg2 = -0x1.8c343201bbd2p+939 | -0x1.e5095ad0c37a4p-434 - insn wfchdb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.36b4fc9cf5bdap-52 | -0x1.f1fd95cbcd533p+540 - v_arg2 = 0x1.5a2362891c9edp-175 | -0x1.e1f68c319e5d2p+58 - insn wfchdb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.11c6489f544bbp+811 | 0x1.262a740ec3d47p+456 - v_arg2 = -0x1.d9394d354e989p-154 | 0x1.cc21b3094391ap-972 - insn vfchdbs: -@@ -1491,22 +1491,22 @@ insn vfchdbs: - v_arg2 = 0x1.e426748435a76p+370 | 0x1.8702527d17783p-871 - r_result = 0000000000000003 - insn wfchdbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.6c51b9f6442c8p+639 | 0x1.1e6b37adff703p+702 - v_arg2 = 0x1.0cba9c1c75e43p+520 | -0x1.145d44ed90967p+346 - r_result = 0000000000000000 - insn wfchdbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.7b3dd643bf36bp+816 | -0x1.61ce7bfb9307ap-683 - v_arg2 = -0x1.f2c998dc15c9ap-776 | 0x1.e16397f2dcdf5p+571 - r_result = 0000000000000000 - insn wfchdbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.cc3be81884e0ap-865 | -0x1.8b353bd41064p+820 - v_arg2 = -0x1.2c1bafaafdd4ep-34 | -0x1.24666808ab16ep-435 - r_result = 0000000000000000 - insn wfchdbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.c3de33d3b673ap+554 | 0x1.d39ed71e53096p-798 - v_arg2 = -0x1.c1e8f7b3c001p-828 | 0x1.22e2cf797fabp-787 - r_result = 0000000000000000 -@@ -1527,19 +1527,19 @@ insn vfchedb: - v_arg1 = -0x1.6c5599e7ba923p+829 | -0x1.5d1a1191ed6eap-994 - v_arg2 = -0x1.555c8775bc4d2p-478 | -0x1.4aa6a2c82319cp+493 - insn wfchedb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.ae6cad07b0f3ep-232 | -0x1.2ed61a43f3b99p-74 - v_arg2 = -0x1.226f7cddbde13p-902 | -0x1.790d1d6febbf8p+336 - insn wfchedb: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.20eb8eac3711dp-385 | 0x1.ef71d3312d7e1p+739 - v_arg2 = 0x1.7a3ba08c5a0bdp-823 | -0x1.a7845ccaa544dp-129 - insn wfchedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.97ebdbc057be8p+824 | 0x1.2b7798b063cd6p+237 - v_arg2 = 0x1.cdb87a6074294p-81 | -0x1.074c902b19bccp-416 - insn wfchedb: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.82deebf9ff023p+937 | 0x1.56c5adcf9d4abp-672 - v_arg2 = -0x1.311ce49bc9439p+561 | 0x1.c8e1c512d8544p+103 - insn vfchedbs: -@@ -1563,22 +1563,22 @@ insn vfchedbs: - v_arg2 = -0x1.47f5dfc7a5bcp-569 | 0x1.5877ef33664a3p-758 - r_result = 0000000000000003 - insn wfchedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.a7370ccfd9e49p+505 | 0x1.c6b2385850ca2p-591 - v_arg2 = 0x1.984f4fcd338b1p+675 | -0x1.feb996c821232p-39 - r_result = 0000000000000003 - insn wfchedbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.641878612dd2p+207 | 0x1.b35e3292db7f6p+567 - v_arg2 = -0x1.18a87f209e96bp+299 | -0x1.3d598f3612d8ap+1016 - r_result = 0000000000000000 - insn wfchedbs: -- v_result = ffffffffffffffff | 0000000000000000 -+ v_result = ffffffffffffffff | -- - v_arg1 = 0x1.cfc2cda244153p+404 | 0x1.d8b2b28e9d8d7p+276 - v_arg2 = 0x1.3517b8c7a59a1p-828 | 0x1.6096fab7003ccp-415 - r_result = 0000000000000000 - insn wfchedbs: -- v_result = 0000000000000000 | 0000000000000000 -+ v_result = 0000000000000000 | -- - v_arg1 = -0x1.54d656f033e56p-603 | -0x1.95ad0e2088967p+254 - v_arg2 = 0x1.4cb319db206e4p-614 | 0x1.b41cd9e3739b6p-862 - r_result = 0000000000000003 diff --git a/valgrind-3.16.1-sched_getsetattr.patch b/valgrind-3.16.1-sched_getsetattr.patch deleted file mode 100644 index b95267d..0000000 --- a/valgrind-3.16.1-sched_getsetattr.patch +++ /dev/null @@ -1,201 +0,0 @@ -commit a53adb79711ccfc76a4ee32b20253045cdab55c7 -Author: Mark Wielaard -Date: Mon Jul 27 16:36:17 2020 +0200 - - Handle linux syscalls sched_getattr and sched_setattr - - The only "special" thing about these syscalls is that the given - struct sched_attr determines its own size for future expansion. - - Original fix by "ISHIKAWA,chiaki" - - https://bugs.kde.org/show_bug.cgi?id=369029 - -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index cdc73c1e6..eb0b320ca 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -227,6 +227,8 @@ DECL_TEMPLATE(linux, sys_fremovexattr); - // syscalls. - DECL_TEMPLATE(linux, sys_sched_setparam); - DECL_TEMPLATE(linux, sys_sched_getparam); -+DECL_TEMPLATE(linux, sys_sched_setattr); -+DECL_TEMPLATE(linux, sys_sched_getattr); - DECL_TEMPLATE(linux, sys_sched_setscheduler); - DECL_TEMPLATE(linux, sys_sched_getscheduler); - DECL_TEMPLATE(linux, sys_sched_yield); -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 28d90135a..d6f3eb910 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -846,9 +846,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 311 - LINX_(__NR_kcmp, sys_kcmp), // 312 - LINX_(__NR_finit_module, sys_finit_module), // 313 --// LIN__(__NR_sched_setattr, sys_ni_syscall), // 314 -- --// LIN__(__NR_sched_getattr, sys_ni_syscall), // 315 -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 314 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 315 - LINX_(__NR_renameat2, sys_renameat2), // 316 - // LIN__(__NR_seccomp, sys_ni_syscall), // 317 - LINXY(__NR_getrandom, sys_getrandom), // 318 -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 579542785..70700e53f 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1009,6 +1009,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 376 - LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 377 - -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 380 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 381 - LINX_(__NR_renameat2, sys_renameat2), // 382 - - LINXY(__NR_getrandom, sys_getrandom), // 384 -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 81e01456f..acca02442 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -806,8 +806,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271 - LINX_(__NR_kcmp, sys_kcmp), // 272 - LINX_(__NR_finit_module, sys_finit_module), // 273 -- // (__NR_sched_setattr, sys_ni_syscall), // 274 -- // (__NR_sched_getattr, sys_ni_syscall), // 275 -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 274 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 275 - LINX_(__NR_renameat2, sys_renameat2), // 276 - // (__NR_seccomp, sys_ni_syscall), // 277 - LINXY(__NR_getrandom, sys_getrandom), // 278 -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 5b5b7eee6..56be3032d 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -3677,6 +3677,41 @@ POST(sys_sched_getparam) - POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) ); - } - -+PRE(sys_sched_setattr) -+{ -+ struct vki_sched_attr *attr; -+ PRINT("sched_setattr ( %ld, %#" FMT_REGWORD "x, %#" -+ FMT_REGWORD "x )", SARG1, ARG2, ARG3 ); -+ PRE_REG_READ3(long, "sched_setattr", -+ vki_pid_t, pid, struct sched_attr *, p, unsigned int, flags); -+ /* We need to be able to read at least the size field. */ -+ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) ); -+ attr = (struct vki_sched_attr *)(Addr)ARG2; -+ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t))) -+ PRE_MEM_READ( "sched_setattr(attr)", (Addr)attr, attr->size); -+} -+ -+PRE(sys_sched_getattr) -+{ -+ struct vki_sched_attr *attr; -+ PRINT("sched_getattr ( %ld, %#" FMT_REGWORD "x, %ld, %#" -+ FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4 ); -+ PRE_REG_READ4(long, "sched_getattr", -+ vki_pid_t, pid, struct sched_attr *, p, -+ unsigned int, size, unsigned int, flags); -+ /* We need to be able to read at least the size field. */ -+ PRE_MEM_READ( "sched_setattr(attr->size)", ARG2, sizeof(vki_uint32_t) ); -+ /* And the kernel needs to be able to write to the whole struct size. */ -+ attr = (struct vki_sched_attr *)(Addr)ARG2; -+ if (ML_(safe_to_deref)(attr,sizeof(vki_uint32_t))) -+ PRE_MEM_WRITE( "sched_setattr(attr)", (Addr)attr, attr->size); -+} -+POST(sys_sched_getattr) -+{ -+ struct vki_sched_attr *attr = (struct vki_sched_attr *)(Addr)ARG2; -+ POST_MEM_WRITE( (Addr)attr, attr->size ); -+} -+ - PRE(sys_sched_getscheduler) - { - PRINT("sys_sched_getscheduler ( %ld )", SARG1); -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index eed12a1bc..c19cb9e0e 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1016,6 +1016,9 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 - -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356 -+ - LINXY(__NR_getrandom, sys_getrandom), // 359 - LINXY(__NR_memfd_create, sys_memfd_create), // 360 - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index d58200b49..b6422a765 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -998,6 +998,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 - -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 355 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 356 - LINX_(__NR_renameat2, sys_renameat2), // 357 - - LINXY(__NR_getrandom, sys_getrandom), // 359 -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index a0a330aa2..3427fee16 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -825,8 +825,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_kcmp, sys_kcmp), // 343 - // ?????(__NR_finit_module, ), // 344 - --// ?????(__NR_sched_setattr, ), // 345 --// ?????(__NR_sched_getattr, ), // 346 -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 345 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 346 - LINX_(__NR_renameat2, sys_renameat2), // 347 - // ?????(__NR_seccomp, ), // 348 - LINXY(__NR_getrandom, sys_getrandom), // 349 -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index 332ed0bf2..b59d96f37 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1580,8 +1580,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_kcmp, sys_kcmp), // 349 - - // LIN__(__NR_finit_module, sys_ni_syscall), // 350 --// LIN__(__NR_sched_setattr, sys_ni_syscall), // 351 --// LIN__(__NR_sched_getattr, sys_ni_syscall), // 352 -+ LINX_(__NR_sched_setattr, sys_sched_setattr), // 351 -+ LINXY(__NR_sched_getattr, sys_sched_getattr), // 352 - LINX_(__NR_renameat2, sys_renameat2), // 353 - // LIN__(__NR_seccomp, sys_ni_syscall), // 354 - -diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h -index 75b583165..ef93b9258 100644 ---- a/include/vki/vki-linux.h -+++ b/include/vki/vki-linux.h -@@ -410,6 +410,23 @@ struct vki_sched_param { - int sched_priority; - }; - -+struct vki_sched_attr { -+ vki_uint32_t size; -+ vki_uint32_t sched_policy; -+ vki_uint64_t sched_flags; -+ -+ /* SCHED_NORMAL, SCHED_BATCH */ -+ vki_int32_t sched_nice; -+ -+ /* SCHED_FIFO, SCHED_RR */ -+ vki_uint32_t sched_priority; -+ -+ /* SCHED_DEADLINE */ -+ vki_uint64_t sched_runtime; -+ vki_uint64_t sched_deadline; -+ vki_uint64_t sched_period; -+}; -+ - #define VKI_TASK_COMM_LEN 16 - - //---------------------------------------------------------------------- diff --git a/valgrind-3.16.1-stxsibx-stxsihx.patch b/valgrind-3.16.1-stxsibx-stxsihx.patch deleted file mode 100644 index c94ad91..0000000 --- a/valgrind-3.16.1-stxsibx-stxsihx.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index c9c058a7a..d726d63de 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -25671,49 +25671,29 @@ dis_vx_store ( UInt prefix, UInt theInstr ) - - case 0x38D: // stxsibx - { -- IRExpr *stored_word; -- IRTemp byte_to_store = newTemp( Ity_I64 ); -+ IRTemp byte_to_store = newTemp( Ity_I8 ); - - DIP("stxsibx %u,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr); - -- /* Can't store just a byte, need to fetch the word at EA merge data -- * and store. -- */ -- stored_word = load( Ity_I64, mkexpr( EA ) ); -- assign( byte_to_store, binop( Iop_And64, -+ assign( byte_to_store, unop( Iop_64to8, - unop( Iop_V128HIto64, -- mkexpr( vS ) ), -- mkU64( 0xFF ) ) ); -+ mkexpr( vS ) ) ) ); - -- store( mkexpr( EA ), binop( Iop_Or64, -- binop( Iop_And64, -- stored_word, -- mkU64( 0xFFFFFFFFFFFFFF00 ) ), -- mkexpr( byte_to_store ) ) ); -+ store( mkexpr( EA ), mkexpr( byte_to_store ) ); - break; - } - - case 0x3AD: // stxsihx - { -- IRExpr *stored_word; -- IRTemp byte_to_store = newTemp( Ity_I64 ); -+ IRTemp hword_to_store = newTemp( Ity_I16 ); - - DIP("stxsihx %u,r%u,r%u\n", (UInt)XS, rA_addr, rB_addr); - -- /* Can't store just a halfword, need to fetch the word at EA merge data -- * and store. -- */ -- stored_word = load( Ity_I64, mkexpr( EA ) ); -- assign( byte_to_store, binop( Iop_And64, -- unop( Iop_V128HIto64, -- mkexpr( vS ) ), -- mkU64( 0xFFFF ) ) ); -+ assign( hword_to_store, unop( Iop_64to16, -+ unop( Iop_V128HIto64, -+ mkexpr( vS ) ) ) ); - -- store( mkexpr( EA ), binop( Iop_Or64, -- binop( Iop_And64, -- stored_word, -- mkU64( 0xFFFFFFFFFFFF0000 ) ), -- mkexpr( byte_to_store ) ) ); -+ store( mkexpr( EA ), mkexpr( hword_to_store ) ); - break; - } - diff --git a/valgrind.spec b/valgrind.spec index b53b7ac..ae44977 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.16.1 -Release: 20%{?dist} +Version: 3.17.0 +Release: 0.1.RC1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -82,81 +82,11 @@ Patch2: valgrind-3.9.0-helgrind-race-supp.patch # Make ld.so supressions slightly less specific. Patch3: valgrind-3.9.0-ldso-supp.patch -# We want all executables and libraries in libexec instead of lib -# so they are only available for valgrind usage itself and so the -# same directory is used independent of arch. -Patch4: valgrind-3.16.0-pkglibexecdir.patch - # Add some stack-protector -Patch5: valgrind-3.16.0-some-stack-protector.patch +Patch4: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. -Patch6: valgrind-3.16.0-some-Wl-z-now.patch - -# KDE#422174 unhandled instruction bytes: 0x48 0xE9 (REX prefix JMP instr) -Patch7: valgrind-3.16.1-REX-prefix-JMP.patch - -# KDE#422623 epoll_ctl warns for uninit padding on non-amd64 64bit arches -Patch8: valgrind-3.16.1-epoll.patch - -# KDE#369029 handle linux syscalls sched_getattr and sched_setattr -Patch9: valgrind-3.16.1-sched_getsetattr.patch - -# KDE#415293 Incorrect call-graph tracking due to new _dl_runtime_resolve* -Patch10: valgrind-3.16.1-dl_runtime_resolve.patch - -# KDE#427787 Support new faccessat2 linux syscall (439) -Patch11: valgrind-3.16.1-faccessat2.patch - -# KDE#427931 gdbserver_tests/nlcontrolc.vgtest hangs on fedora rawhide -Patch12: valgrind-3.16.1-gdbserver_nlcontrolc.patch - -# KDE#427870 lmw, lswi and related PowerPC insns aren't allowed on ppc64le -Patch13: valgrind-3.16.1-PPC64BE-lsw.patch - -# KDE#428909 helgrind: need to intercept duplicate libc definitions -Patch14: valgrind-3.16.1-pthread-intercept.patch - -# KDE#428648 s390_emit_load_mem panics due to 20-bit offset for vector load -Patch15: valgrind-3.16.1-s390_emit_load_mem.patch - -# KDE#133812 s390x: z14 vector instructions not implemented -Patch16: valgrind-3.16.1-s390x-z14-vector.patch - -# KDE#430354 ppc stxsibx and stxsihx instructions write too much data -Patch17: valgrind-3.16.1-stxsibx-stxsihx.patch - -# KDE#426014 arm64: implement fmadd and fmsub as Iop_MAdd/Sub -# KDE#430485 expr_is_guardable doesn't handle Iex_Qop -Patch18: valgrind-3.16.1-arm64-fma.patch - -# KDE#397605 Add support for Linux FICLONE ioctl -Patch19: valgrind-3.16.1-ficlone.patch - -# rhbz#1909415 valgrind makes false complaint about strcmp() on aarch64 -# upstream git commit 359b98828 -Patch20: valgrind-3.16.1-arm64-expensive-cmp.patch - -# KDE#431157 PPC_FEATURE2_SCV needs to be masked in AT_HWCAP2 -Patch21: valgrind-3.16.1-ppc64-scv-hwcap.patch - -# KDE#432102 Support DWARF5 -Patch22: valgrind-3.16.1-dwarf5.patch - -# KDE#410743 shmat() calls for 32-bit programs fail when running in 64-bit -# RHBZ#1909548 shmctl(IPC_STAT) doesn't set shm_nattch on aarch64 -Patch23: valgrind-3.16.0-shmctl.patch - -# KDE#140178 open("/proc/self/exe", ...); doesn't quite work -# RHBZ#1925786 valgrind appears to only interject readlink on /proc/self/exe -Patch24: valgrind-3.16.1-open-proc-self-exe.patch - -# RHBZ#1927153 -flto makes valgrind report non-existing paths to source files -Patch25: valgrind-3.16.1-readdwarf-line.patch - -# RHBZ#433898 netresolve: FTBFS in Fedora rawhide/f34 because arm64 valgrind -# KDE#433898 arm64: Handle sp, lr, fp as DwReg in CfiExpr -Patch26: valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch +Patch5: valgrind-3.16.0-some-Wl-z-now.patch BuildRequires: make BuildRequires: glibc-devel @@ -191,6 +121,11 @@ BuildRequires: docbook-dtds # configure might use which BuildRequires: which +# For testing the debuginfod +%if 0%{?fedora} > 29 || 0%{?rhel} > 7 +BuildRequires: elfutils-debuginfod +%endif + %{?scl:Requires:%scl_runtime} # We need to fixup selinux file context when doing a scl build. @@ -280,40 +215,18 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch4 -p1 # Old rhel gcc doesn't have -fstack-protector-strong. %if 0%{?fedora} || 0%{?rhel} >= 7 +%patch4 -p1 %patch5 -p1 -%patch6 -p1 %endif -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 - %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -505,6 +418,7 @@ echo ===============END TESTING=============== %{_includedir}/valgrind/drd.h %{_includedir}/valgrind/helgrind.h %{_includedir}/valgrind/memcheck.h +%{_includedir}/valgrind/dhat.h %{_libdir}/pkgconfig/valgrind.pc %if %{build_tools_devel} @@ -537,6 +451,10 @@ fi %endif %changelog +* Mon Mar 15 2021 Mark Wielaard - 3.17.0-0.1.RC1 +- Update to upstream 3.17.0-RC1 +- Drop all upstreamed patches + * Wed Mar 3 2021 Mark Wielaard - 3.16.1-20 - Add valgrind-3.16.1-arm64_sp_lr_fp_DwReg.patch From 1aa3bbb396e86e8328b915be3fe899424b5069dc Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Mar 2021 13:27:47 +0100 Subject: [PATCH 039/196] 3.17.0-0.1.RC2 --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 0d362c8..30d69e6 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ /valgrind-3.16.0.tar.bz2 /valgrind-3.16.1.tar.bz2 /valgrind-3.17.0.RC1.tar.bz2 +/valgrind-3.17.0.RC2.tar.bz2 diff --git a/sources b/sources index eec672d..f983d05 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.17.0.RC1.tar.bz2) = ef71f3fca24466e78bd8a137666722f06cc5744cda5ae608b96d69390a72839e4d7499293872eb797e1c9edbe13ca6cf6147b6eb2491bb455d6696180f9864b7 +SHA512 (valgrind-3.17.0.RC2.tar.bz2) = ed055e12eb3629c75fa5999346dfaad0ba80d55b8f14f696c49d7d6ed87aab3713b1cee53d3deeba75d364c59c12e30c42d911cc61771c0d34466e6955a440c7 diff --git a/valgrind.spec b/valgrind.spec index ae44977..a08ec8f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 0.1.RC1%{?dist} +Release: 0.2.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -215,7 +215,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 %patch1 -p1 %patch2 -p1 @@ -451,6 +451,9 @@ fi %endif %changelog +* Wed Mar 17 2021 Mark Wielaard - 3.17.0-0.1.RC2 +- Update to upstream 3.17.0-RC2 + * Mon Mar 15 2021 Mark Wielaard - 3.17.0-0.1.RC1 - Update to upstream 3.17.0-RC1 - Drop all upstreamed patches From 7faf5f9863502666a0a5122dada6f83aac19bd5a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 22 Mar 2021 12:48:45 +0100 Subject: [PATCH 040/196] Update to upstream 3.17.0 final. --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 30d69e6..137c9cc 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ /valgrind-3.16.1.tar.bz2 /valgrind-3.17.0.RC1.tar.bz2 /valgrind-3.17.0.RC2.tar.bz2 +/valgrind-3.17.0.tar.bz2 diff --git a/sources b/sources index f983d05..fa777d5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.17.0.RC2.tar.bz2) = ed055e12eb3629c75fa5999346dfaad0ba80d55b8f14f696c49d7d6ed87aab3713b1cee53d3deeba75d364c59c12e30c42d911cc61771c0d34466e6955a440c7 +SHA512 (valgrind-3.17.0.tar.bz2) = 94de78942a7059e1ab84d1c0c0b8f3efd1c2d15c70b97bc7edc8136812778adb6f8187149d53a60a8c6a7c8b40534f9be5cfed0eb3c0c314545b681f950b108f diff --git a/valgrind.spec b/valgrind.spec index a08ec8f..46178b9 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 0.2.RC2%{?dist} +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 +Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -215,7 +215,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 %patch2 -p1 @@ -451,6 +451,9 @@ fi %endif %changelog +* Mon Mar 22 2021 Mark Wielaard - 3.17.0-1 +- Update to upstream 3.17.0 final. + * Wed Mar 17 2021 Mark Wielaard - 3.17.0-0.1.RC2 - Update to upstream 3.17.0-RC2 From b410fdab0326d845a5ba3807eaf9942a6b9dc00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Fri, 12 Mar 2021 22:49:48 +0100 Subject: [PATCH 041/196] enable CI gating gating.yaml only use tier0.functional, not scratch-build.validation. The scratch-build.validation is for rebuilding the kernel, we don't really need that as gating rule, since valgrind isn't part of the kernel build chain. plans/ci.fmf: Use tmt, not beakerlib, for how. beakerlib is deprecated. tests/quick-valgrind-sanity/main.fmf recommend only valgrind[-devel], gcc and make This test doesn't use c++, fortran or 32bit glibc-devel. --- .fmf/version | 1 + gating.yaml | 19 ++++ plans/ci.fmf | 6 ++ tests/quick-valgrind-sanity/Makefile | 64 +++++++++++++ tests/quick-valgrind-sanity/PURPOSE | 3 + tests/quick-valgrind-sanity/alloc.c | 10 +++ tests/quick-valgrind-sanity/main.fmf | 16 ++++ tests/quick-valgrind-sanity/runtest.sh | 104 ++++++++++++++++++++++ tests/quick-valgrind-sanity/rv.c | 12 +++ tests/quick-valgrind-sanity/unitialized.c | 30 +++++++ 10 files changed, 265 insertions(+) create mode 100644 .fmf/version create mode 100644 gating.yaml create mode 100644 plans/ci.fmf create mode 100644 tests/quick-valgrind-sanity/Makefile create mode 100644 tests/quick-valgrind-sanity/PURPOSE create mode 100644 tests/quick-valgrind-sanity/alloc.c create mode 100644 tests/quick-valgrind-sanity/main.fmf create mode 100755 tests/quick-valgrind-sanity/runtest.sh create mode 100644 tests/quick-valgrind-sanity/rv.c create mode 100644 tests/quick-valgrind-sanity/unitialized.c diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..8daf6e5 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,19 @@ +--- !Policy +product_versions: + - fedora-* +decision_context: bodhi_update_push_stable +subject_type: koji_build +rules: + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} +--- !Policy +product_versions: + - rhel-8 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} diff --git a/plans/ci.fmf b/plans/ci.fmf new file mode 100644 index 0000000..85710d6 --- /dev/null +++ b/plans/ci.fmf @@ -0,0 +1,6 @@ +summary: CI Gating Plan +discover: + how: fmf + directory: tests +execute: + how: tmt diff --git a/tests/quick-valgrind-sanity/Makefile b/tests/quick-valgrind-sanity/Makefile new file mode 100644 index 0000000..e708552 --- /dev/null +++ b/tests/quick-valgrind-sanity/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/valgrind/Sanity/quick-valgrind-sanity +# Description: Very fast check that valgrind is working +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/valgrind/Sanity/quick-valgrind-sanity +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE unitialized.c rv.c alloc.c + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Very fast check that valgrind is working" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: valgrind" >> $(METADATA) + @echo "Requires: gcc valgrind-devel" >> $(METADATA) + @echo "Requires: glibc-devel glibc-devel.ppc glibc-devel.s390 glibc-devel.i686" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/quick-valgrind-sanity/PURPOSE b/tests/quick-valgrind-sanity/PURPOSE new file mode 100644 index 0000000..c87c6e6 --- /dev/null +++ b/tests/quick-valgrind-sanity/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/valgrind/Sanity/quick-valgrind-sanity +Description: Very fast check that valgrind is working +Author: Miroslav Franc diff --git a/tests/quick-valgrind-sanity/alloc.c b/tests/quick-valgrind-sanity/alloc.c new file mode 100644 index 0000000..3c03816 --- /dev/null +++ b/tests/quick-valgrind-sanity/alloc.c @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + void *buffer = malloc(atoi(argv[1])); + VALGRIND_DO_LEAK_CHECK; + free(buffer); + return 0; +} diff --git a/tests/quick-valgrind-sanity/main.fmf b/tests/quick-valgrind-sanity/main.fmf new file mode 100644 index 0000000..c80e992 --- /dev/null +++ b/tests/quick-valgrind-sanity/main.fmf @@ -0,0 +1,16 @@ +summary: Basic smoke test. +description: 'Very fast check that valgrind is working' +contact: +- Alexandra Petlanova Hajkova +component: +- valgrind +test: ./runtest.sh +framework: beakerlib +recommend: +- valgrind +- valgrind-devel +- gcc +- make +duration: 15m +extra-summary: /tools/valgrind/Sanity/quick-valgrind-sanity +extra-task: /tools/valgrind/Sanity/quick-valgrind-sanity diff --git a/tests/quick-valgrind-sanity/runtest.sh b/tests/quick-valgrind-sanity/runtest.sh new file mode 100755 index 0000000..bbbeab1 --- /dev/null +++ b/tests/quick-valgrind-sanity/runtest.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/valgrind/Sanity/quick-valgrind-sanity +# Description: Very fast check that valgrind is working +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +VALGRIND="${VALGRIND:-$(which valgrind)}" +PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" + +rlJournalStart + rlPhaseStartSetup + rlLogInfo "VALGRIND=$VALGRIND" + rlLogInfo "PACKAGES=$PACKAGES" + rlLogInfo "REQUIRES=$REQUIRES" + rlLogInfo "$(type valgrind)" + rlLogInfo "$(type gcc)" + + rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK" + + # We optionally need to skip checking for the presence of the metapackage + # because that would pull in all the dependent toolset subrpms. We do not + # always want that, especially in CI. + _COLLECTIONS="$COLLECTIONS" + if ! test -z $SKIP_COLLECTION_METAPACKAGE_CHECK; then + for c in $SKIP_COLLECTION_METAPACKAGE_CHECK; do + rlLogInfo "ignoring metapackage check for collection $c" + export COLLECTIONS=$(shopt -s extglob && echo ${COLLECTIONS//$c/}) + done + fi + + rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS" + + rlAssertRpm --all + + export COLLECTIONS="$_COLLECTIONS" + + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "cp unitialized.c rv.c alloc.c $TmpDir" + rlRun "pushd $TmpDir" + rlRun "gcc -g unitialized.c -o unitialized" + rlPhaseEnd + + rlPhaseStartTest "good" + rlRun "valgrind --log-file=./log0 ./unitialized 0" 42 + rlAssertNotGrep 'contains uninitialised byte' ./log0 + rlAssertGrep 'ERROR SUMMARY: 0' ./log0 + rlLog "$( with-valgrind" + rlAssertGrep "I'm running on valgrind" with-valgrind + rlLog "$( without-valgrind" + rlAssertGrep "I'm not running on valgrind" without-valgrind + rlLog "$( +#include + +int main() +{ + if(RUNNING_ON_VALGRIND) + puts("I'm running on valgrind \\o/"); + else + puts("I'm not running on valgrind /o\\"); + + return 0; +} diff --git a/tests/quick-valgrind-sanity/unitialized.c b/tests/quick-valgrind-sanity/unitialized.c new file mode 100644 index 0000000..99de47e --- /dev/null +++ b/tests/quick-valgrind-sanity/unitialized.c @@ -0,0 +1,30 @@ +/* valgrind ./a.out 0 ~> no error */ +/* valgrind ./a.out 1 ~> error */ + +#include + +struct something { + char c; + int x; +}; +/* === 8 bytes === + * 42 + * garbage + * garbage + * garbage + * 42 + * 42 + * 42 + * 42 + */ + + +int main(int argc, char *argv[]) +{ + struct something st = { 0x2A, 0x2A2A2A2A }; + + struct something st_copy = st; + + return (int) *(&(st_copy.c)+atoi(argv[1])); +} +/* error generated after main returns */ From 248f3f26ce179c14c9ffbf0bb23ca6b10df03fda Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 17 Apr 2021 01:49:06 +0200 Subject: [PATCH 042/196] 3.17.0-2 - Add CI gating --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 46178b9..236bc77 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -451,6 +451,9 @@ fi %endif %changelog +* Fri Apr 16 2021 Mark Wielaard - 3.17.0-2 +- Add CI gating + * Mon Mar 22 2021 Mark Wielaard - 3.17.0-1 - Update to upstream 3.17.0 final. From c043c49cd3bd9b5b2f3c06c47694a0c80e90cf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Thu, 22 Apr 2021 15:01:48 +0200 Subject: [PATCH 043/196] Add bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through test to Fedora CI --- .../Makefile | 65 ++++++++++ .../PURPOSE | 7 ++ .../error.gdb | 5 + .../main.fmf | 20 +++ .../noerror.gdb | 6 + .../runtest.sh | 116 ++++++++++++++++++ .../something.c | 21 ++++ 7 files changed, 240 insertions(+) create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb create mode 100755 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh create mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/something.c diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile new file mode 100644 index 0000000..6f2afaf --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile @@ -0,0 +1,65 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through +# Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2012 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE something.c error.gdb noerror.gdb + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through)" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 30m" >> $(METADATA) + @echo "RunFor: valgrind" >> $(METADATA) + @echo "Requires: valgrind gcc gdb glibc-debuginfo" >> $(METADATA) + @echo "Requires: glibc-devel" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 672959" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE new file mode 100644 index 0000000..6d2c0bf --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE @@ -0,0 +1,7 @@ +PURPOSE of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through +Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) +Author: Miroslav Franc +Bug summary: [RFE] Integrate valgrind with gdb possibly through gdbserver. +Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=672959 + +This is small sanity test to make sure gdb works with valgrind gdb server. diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb new file mode 100644 index 0000000..199cc5c --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb @@ -0,0 +1,5 @@ +target remote | vgdb +c +p var +c +q diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf new file mode 100644 index 0000000..c7989c5 --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf @@ -0,0 +1,20 @@ +summary: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) +description: | + Bug summary: [RFE] Integrate valgrind with gdb possibly through gdbserver. + Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=672959 + + This is small sanity test to make sure gdb works with valgrind gdb server. +contact: Miroslav Franc +component: +- valgrind +test: ./runtest.sh +framework: beakerlib +recommend: +- valgrind +- gcc +- gdb +- glibc-debuginfo +- glibc-devel +duration: 30m +extra-summary: /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through +extra-task: /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb new file mode 100644 index 0000000..c471593 --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb @@ -0,0 +1,6 @@ +target remote | vgdb +b 10 +c +set (a=5) +c +q diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh new file mode 100755 index 0000000..4e025fa --- /dev/null +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh @@ -0,0 +1,116 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through +# Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2012 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh + +PACKAGE=$(rpm --qf "%{name}\n" -qf $(which valgrind) | head -1) +PACKAGES=(valgrind gcc gdb) + +# Expect 1th argument as a path to binary to test with +_test_routine() +{ + local binary=$1 + + rlPhaseStartTest "$binary error" + rlAssertExists "$binary" + rlLog "valgrind gdb server..." + valgrind --vex-iropt-register-updates=allregs-at-mem-access --vgdb-error=0 ./$binary > vloge 2>&1 & + vpid=$! + sleep 5 + rlRun "gdb -x error.gdb ./$binary > gloge 2>&1" + [[ -d /proc/$vpid ]] && { kill -9 $vpid; rlFail "oops: valgrind still running..."; } + rlRun "wait $vpid" + rlAssertGrep '19.*if(x)' gloge + rlAssertGrep '$1 = 42' gloge + # there should be exactly one error + rlAssertGrep 'ERROR SUMMARY: 1 errors from 1 contexts' vloge + rlLog "> gdb output <" + rlLog "$( valgrind output <" + rlLog "$( vlogn 2>&1 & + vpid=$! + sleep 5 + rlRun "gdb -x noerror.gdb ./$binary > glogn 2>&1" + [[ -d /proc/$vpid ]] && { kill -9 $vpid; rlFail "oops: valgrind still running..."; } + rlRun "wait $vpid" + rlAssertGrep '10.*f(a);' glogn + # this time, no errors + rlAssertGrep 'ERROR SUMMARY: 0 errors from 0 contexts' vlogn + rlAssertGrep 'hello, world' vlogn + rlLog "> gdb output <" + rlLog "$( valgrind output <" + rlLog "$( + +void f (int x); + +int +main (int argc, char *argv[]) +{ + int a; + + f(a); + + return 0; +} + +void +f (int x) +{ + static int var __attribute__ ((used)) = 42; + if(x) + puts("hello, world"); +} From 52876a98ede19401ba7e4f1b71f255ca9aa2ac2c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 4 May 2021 15:26:48 +0200 Subject: [PATCH 044/196] 3.17.0-3 - Add valgrind-3.17.0-ppc64-isa-3.1{,tests}.patch --- valgrind-3.17.0-ppc64-isa-3.1-tests.patch | 1712 ++++++++++++++++++++ valgrind-3.17.0-ppc64-isa-3.1.patch | 1720 +++++++++++++++++++++ valgrind.spec | 27 +- 3 files changed, 3458 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.17.0-ppc64-isa-3.1-tests.patch create mode 100644 valgrind-3.17.0-ppc64-isa-3.1.patch diff --git a/valgrind-3.17.0-ppc64-isa-3.1-tests.patch b/valgrind-3.17.0-ppc64-isa-3.1-tests.patch new file mode 100644 index 0000000..b7f1a6c --- /dev/null +++ b/valgrind-3.17.0-ppc64-isa-3.1-tests.patch @@ -0,0 +1,1712 @@ +commit 4bcc6c8a97c10c4dd41b35bd3b3035ec4037d524 +Author: Carl Love +Date: Mon Nov 16 19:09:47 2020 -0600 + + VSX Permute Control Vector Generate Operation tests. + +diff --git a/NEWS b/NEWS +index aa398cf54..2e42e74b2 100644 +--- a/NEWS ++++ b/NEWS +@@ -154,6 +154,7 @@ where XXXXXX is the bug number as listed below. + 428909 helgrind: need to intercept duplicate libc definitions for Fedora 33 + 429352 PPC ISA 3.1 support is missing, part 7 + 429354 PPC ISA 3.1 support is missing, part 8 ++429375 PPC ISA 3.1 support is missing, part 9 + 429692 unhandled ppc64le-linux syscall: 147 (getsid) + 429864 s390x: C++ atomic test_and_set yields false-positive memcheck + diagnostics +diff --git a/none/tests/ppc64/test_isa_3_1_XT.c b/none/tests/ppc64/test_isa_3_1_XT.c +index c16ddedac..a54e8763a 100644 +--- a/none/tests/ppc64/test_isa_3_1_XT.c ++++ b/none/tests/ppc64/test_isa_3_1_XT.c +@@ -491,6 +491,54 @@ static void test_pstxv_4 (void) { + static void test_pstxv_0 (void) { + __asm__ __volatile__ ("pstxv %x0, 0(%1), 0" :: "wa" (vec_xs), "r" (ra) ); + } ++static void test_xxgenpcvbm_imm0 (void) { ++ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvbm_imm1 (void) { ++ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvbm_imm2 (void) { ++ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvbm_imm3 (void) { ++ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvhm_imm0 (void) { ++ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvhm_imm1 (void) { ++ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvhm_imm2 (void) { ++ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvhm_imm3 (void) { ++ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvwm_imm0 (void) { ++ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvwm_imm1 (void) { ++ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvwm_imm2 (void) { ++ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvwm_imm3 (void) { ++ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvdm_imm0 (void) { ++ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvdm_imm1 (void) { ++ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvdm_imm2 (void) { ++ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); ++} ++static void test_xxgenpcvdm_imm3 (void) { ++ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); ++} + + static test_list_t testgroup_generic[] = { + { &test_lxvkq_imm1, "lxvkq imm1", "XT,UIM"}, /* bcwp */ +@@ -592,6 +640,22 @@ static test_list_t testgroup_generic[] = { + { &test_xxblendvw, "xxblendvw", "XT,XA,XB,XC"}, /* bcs */ + { &test_xxeval_imm0, "xxeval imm0", "XT,XA,XB,XC,IMM"}, /* bcwp */ + { &test_xxeval_imm3, "xxeval imm3", "XT,XA,XB,XC,IMM"}, /* bcwp */ ++ { &test_xxgenpcvbm_imm0, "xxgenpcvbm imm0", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvbm_imm1, "xxgenpcvbm imm1", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvbm_imm2, "xxgenpcvbm imm2", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvbm_imm3, "xxgenpcvbm imm3", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvdm_imm0, "xxgenpcvdm imm0", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvdm_imm1, "xxgenpcvdm imm1", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvdm_imm2, "xxgenpcvdm imm2", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvdm_imm3, "xxgenpcvdm imm3", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvhm_imm0, "xxgenpcvhm imm0", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvhm_imm1, "xxgenpcvhm imm1", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvhm_imm2, "xxgenpcvhm imm2", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvhm_imm3, "xxgenpcvhm imm3", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvwm_imm0, "xxgenpcvwm imm0", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvwm_imm1, "xxgenpcvwm imm1", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvwm_imm2, "xxgenpcvwm imm2", "XT,VRB,IMM"}, /* bcwp */ ++ { &test_xxgenpcvwm_imm3, "xxgenpcvwm imm3", "XT,VRB,IMM"}, /* bcwp */ + { &test_xxpermx_imm0, "xxpermx imm0", "XT,XA,XB,XC,UIM"}, /* bcwp */ + { &test_xxpermx_imm3, "xxpermx imm3", "XT,XA,XB,XC,UIM"}, /* bcwp */ + { &test_xxsplti32dx_ix0_imm0xa5a5a5a5, "xxsplti32dx ix0_imm0xa5a5a5a5", "XT,IX,IMM32"}, /* bcwp */ +diff --git a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp +index efa95884e..8b5f1d1a3 100644 +--- a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp ++++ b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp +@@ -4644,6 +4644,230 @@ xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 + xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => 8000000000000000 7f800000ff800000 + xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => 8000000000000000 7f800000ff800000 + ++xxgenpcvbm imm0 7f800000ff800000,ff8000007f800000 => 18031a1b04051e1f 1121314021617 ++xxgenpcvbm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 5061a1b1c071e1f 11010214150304 ++xxgenpcvbm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 31904051c1d0607 1000121301021617 ++xxgenpcvbm imm0 0080000e8080000e,0180055e0180077e => 18021a1b03041e1f 1000121314011617 ++xxgenpcvbm imm0 0180055e0180077e,0000111e8000222e => 18011a1b1c021e1f 1011121300151617 ++xxgenpcvbm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b011d1e1f 1000121314151617 ++xxgenpcvbm imm0 7ff0000000000000,fff0000000000000 => 18021a1b1c1d1e1f 1121314151617 ++xxgenpcvbm imm0 fff0000000000000,2208400000000000 => 11a1b1c1d1e1f 1011121314151617 ++xxgenpcvbm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvbm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1121302151617 ++xxgenpcvbm imm0 ffff000180000001,0000000000000000 => 11a1b021d1e1f 1011121314151617 ++xxgenpcvbm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 11121314151617 ++xxgenpcvbm imm0 8000000000000000,7f800000ff800000 => 3191a1b1c1d1e1f 1000121301021617 ++ ++xxgenpcvbm imm1 7f800000ff800000,ff8000007f800000 => 0 105090c0d0000 ++xxgenpcvbm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 203060708090d ++xxgenpcvbm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 10405080a0b0e0f ++xxgenpcvbm imm1 0080000e8080000e,0180055e0180077e => 0 105090c0d000000 ++xxgenpcvbm imm1 0180055e0180077e,0000111e8000222e => 0 4090d0000000000 ++xxgenpcvbm imm1 0000111e8000222e,7ff0000000000000 => 0 10c000000000000 ++xxgenpcvbm imm1 7ff0000000000000,fff0000000000000 => 0 1090000000000 ++xxgenpcvbm imm1 fff0000000000000,2208400000000000 => 0 809000000000000 ++xxgenpcvbm imm1 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvbm imm1 0000000000000009,ffff000180000001 => 0 1040000000000 ++xxgenpcvbm imm1 ffff000180000001,0000000000000000 => 0 8090c0000000000 ++xxgenpcvbm imm1 0000000000000000,8000000000000000 => 0 0 ++xxgenpcvbm imm1 8000000000000000,7f800000ff800000 => 0 104050800000000 ++ ++xxgenpcvbm imm2 7f800000ff800000,ff8000007f800000 => 1702151401001110 5041d1c1b031918 ++xxgenpcvbm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 201151413001110 71e06051b1a0403 ++xxgenpcvbm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 416030213120100 1f071d1c06051918 ++xxgenpcvbm imm2 0080000e8080000e,0180055e0180077e => 1702151401001110 1f041d1c1b031918 ++xxgenpcvbm imm2 0180055e0180077e,0000111e8000222e => 1701151413001110 1f1e1d1c021a1918 ++xxgenpcvbm imm2 0000111e8000222e,7ff0000000000000 => 1716151400121110 1f011d1c1b1a1918 ++xxgenpcvbm imm2 7ff0000000000000,fff0000000000000 => 1700151413121110 2011d1c1b1a1918 ++xxgenpcvbm imm2 fff0000000000000,2208400000000000 => 100151413121110 1f1e1d1c1b1a1918 ++xxgenpcvbm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvbm imm2 0000000000000009,ffff000180000001 => 1716151413121110 2011d1c001a1918 ++xxgenpcvbm imm2 ffff000180000001,0000000000000000 => 201151400121110 1f1e1d1c1b1a1918 ++xxgenpcvbm imm2 0000000000000000,8000000000000000 => 1716151413121110 1e1d1c1b1a1918 ++xxgenpcvbm imm2 8000000000000000,7f800000ff800000 => 16151413121110 1f031d1c02011918 ++ ++xxgenpcvbm imm3 7f800000ff800000,ff8000007f800000 => f0e0a060302 0 ++xxgenpcvbm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0d0c0908070602 0 ++xxgenpcvbm imm3 ff7ffffe7f7ffffe,0080000e8080000e => e0b0a0705040100 0 ++xxgenpcvbm imm3 0080000e8080000e,0180055e0180077e => e0a060302 0 ++xxgenpcvbm imm3 0180055e0180077e,0000111e8000222e => b0602 0 ++xxgenpcvbm imm3 0000111e8000222e,7ff0000000000000 => e03 0 ++xxgenpcvbm imm3 7ff0000000000000,fff0000000000000 => f0e06 0 ++xxgenpcvbm imm3 fff0000000000000,2208400000000000 => 706 0 ++xxgenpcvbm imm3 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvbm imm3 0000000000000009,ffff000180000001 => f0e0b 0 ++xxgenpcvbm imm3 ffff000180000001,0000000000000000 => 70603 0 ++xxgenpcvbm imm3 0000000000000000,8000000000000000 => f 0 ++xxgenpcvbm imm3 8000000000000000,7f800000ff800000 => e0b0a07 0 ++ ++xxgenpcvdm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b1c1d1e1f 1020304050607 ++xxgenpcvdm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 8090a0b0c0d0e0f 1020304050607 ++xxgenpcvdm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 1020304050607 1011121314151617 ++xxgenpcvdm imm0 0080000e8080000e,0180055e0180077e => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvdm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvdm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvdm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1020304050607 ++xxgenpcvdm imm0 fff0000000000000,2208400000000000 => 1020304050607 1011121314151617 ++xxgenpcvdm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvdm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1020304050607 ++xxgenpcvdm imm0 ffff000180000001,0000000000000000 => 1020304050607 1011121314151617 ++xxgenpcvdm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1020304050607 ++xxgenpcvdm imm0 8000000000000000,7f800000ff800000 => 1020304050607 1011121314151617 ++ ++xxgenpcvdm imm1 7f800000ff800000,ff8000007f800000 => 0 1020304050607 ++xxgenpcvdm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 8090a0b0c0d0e0f 1020304050607 ++xxgenpcvdm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 8090a0b0c0d0e0f ++xxgenpcvdm imm1 0080000e8080000e,0180055e0180077e => 0 0 ++xxgenpcvdm imm1 0180055e0180077e,0000111e8000222e => 0 0 ++xxgenpcvdm imm1 0000111e8000222e,7ff0000000000000 => 0 0 ++xxgenpcvdm imm1 7ff0000000000000,fff0000000000000 => 0 1020304050607 ++xxgenpcvdm imm1 fff0000000000000,2208400000000000 => 0 8090a0b0c0d0e0f ++xxgenpcvdm imm1 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvdm imm1 0000000000000009,ffff000180000001 => 0 1020304050607 ++xxgenpcvdm imm1 ffff000180000001,0000000000000000 => 0 8090a0b0c0d0e0f ++xxgenpcvdm imm1 0000000000000000,8000000000000000 => 0 1020304050607 ++xxgenpcvdm imm1 8000000000000000,7f800000ff800000 => 0 8090a0b0c0d0e0f ++ ++xxgenpcvdm imm2 7f800000ff800000,ff8000007f800000 => 1716151413121110 706050403020100 ++xxgenpcvdm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 706050403020100 f0e0d0c0b0a0908 ++xxgenpcvdm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 706050403020100 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 0080000e8080000e,0180055e0180077e => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 0000111e8000222e,7ff0000000000000 => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 706050403020100 ++xxgenpcvdm imm2 fff0000000000000,2208400000000000 => 706050403020100 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 0000000000000009,ffff000180000001 => 1716151413121110 706050403020100 ++xxgenpcvdm imm2 ffff000180000001,0000000000000000 => 706050403020100 1f1e1d1c1b1a1918 ++xxgenpcvdm imm2 0000000000000000,8000000000000000 => 1716151413121110 706050403020100 ++xxgenpcvdm imm2 8000000000000000,7f800000ff800000 => 706050403020100 1f1e1d1c1b1a1918 ++ ++xxgenpcvdm imm3 7f800000ff800000,ff8000007f800000 => f0e0d0c0b0a0908 0 ++xxgenpcvdm imm3 ff8000007f800000,ff7ffffe7f7ffffe => 706050403020100 f0e0d0c0b0a0908 ++xxgenpcvdm imm3 ff7ffffe7f7ffffe,0080000e8080000e => 706050403020100 0 ++xxgenpcvdm imm3 0080000e8080000e,0180055e0180077e => 0 0 ++xxgenpcvdm imm3 0180055e0180077e,0000111e8000222e => 0 0 ++xxgenpcvdm imm3 0000111e8000222e,7ff0000000000000 => 0 0 ++xxgenpcvdm imm3 7ff0000000000000,fff0000000000000 => f0e0d0c0b0a0908 0 ++xxgenpcvdm imm3 fff0000000000000,2208400000000000 => 706050403020100 0 ++xxgenpcvdm imm3 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvdm imm3 0000000000000009,ffff000180000001 => f0e0d0c0b0a0908 0 ++xxgenpcvdm imm3 ffff000180000001,0000000000000000 => 706050403020100 0 ++xxgenpcvdm imm3 0000000000000000,8000000000000000 => f0e0d0c0b0a0908 0 ++xxgenpcvdm imm3 8000000000000000,7f800000ff800000 => 706050403020100 0 ++ ++xxgenpcvhm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b02031e1f 1121314151617 ++xxgenpcvhm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 6071a1b1c1d1e1f 1020314150405 ++xxgenpcvhm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 20304051c1d0607 1011121300011617 ++xxgenpcvhm imm0 0080000e8080000e,0180055e0180077e => 18191a1b00011e1f 1011121314151617 ++xxgenpcvhm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121300011617 ++xxgenpcvhm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b00011e1f 1011121314151617 ++xxgenpcvhm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1121314151617 ++xxgenpcvhm imm0 fff0000000000000,2208400000000000 => 11a1b1c1d1e1f 1011121314151617 ++xxgenpcvhm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvhm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1121302031617 ++xxgenpcvhm imm0 ffff000180000001,0000000000000000 => 11a1b02031e1f 1011121314151617 ++xxgenpcvhm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1121314151617 ++xxgenpcvhm imm0 8000000000000000,7f800000ff800000 => 2031a1b1c1d1e1f 1011121300011617 ++ ++xxgenpcvhm imm1 7f800000ff800000,ff8000007f800000 => 0 10c0d00000000 ++xxgenpcvhm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 1020306070809 ++xxgenpcvhm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 40508090a0b0e0f ++xxgenpcvhm imm1 0080000e8080000e,0180055e0180077e => 0 c0d000000000000 ++xxgenpcvhm imm1 0180055e0180077e,0000111e8000222e => 0 405000000000000 ++xxgenpcvhm imm1 0000111e8000222e,7ff0000000000000 => 0 c0d000000000000 ++xxgenpcvhm imm1 7ff0000000000000,fff0000000000000 => 0 1000000000000 ++xxgenpcvhm imm1 fff0000000000000,2208400000000000 => 0 809000000000000 ++xxgenpcvhm imm1 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvhm imm1 0000000000000009,ffff000180000001 => 0 1040500000000 ++xxgenpcvhm imm1 ffff000180000001,0000000000000000 => 0 8090c0d00000000 ++xxgenpcvhm imm1 0000000000000000,8000000000000000 => 0 1000000000000 ++xxgenpcvhm imm1 8000000000000000,7f800000ff800000 => 0 405080900000000 ++ ++xxgenpcvhm imm2 7f800000ff800000,ff8000007f800000 => 1716151401001110 3021d1c1b1a1918 ++xxgenpcvhm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 100151413121110 70605041b1a0302 ++xxgenpcvhm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 504030213120100 1f1e1d1c07061918 ++xxgenpcvhm imm2 0080000e8080000e,0180055e0180077e => 1716151401001110 1f1e1d1c1b1a1918 ++xxgenpcvhm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c01001918 ++xxgenpcvhm imm2 0000111e8000222e,7ff0000000000000 => 1716151401001110 1f1e1d1c1b1a1918 ++xxgenpcvhm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 1001d1c1b1a1918 ++xxgenpcvhm imm2 fff0000000000000,2208400000000000 => 100151413121110 1f1e1d1c1b1a1918 ++xxgenpcvhm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvhm imm2 0000000000000009,ffff000180000001 => 1716151413121110 3021d1c01001918 ++xxgenpcvhm imm2 ffff000180000001,0000000000000000 => 302151401001110 1f1e1d1c1b1a1918 ++xxgenpcvhm imm2 0000000000000000,8000000000000000 => 1716151413121110 1001d1c1b1a1918 ++xxgenpcvhm imm2 8000000000000000,7f800000ff800000 => 100151413121110 1f1e1d1c03021918 ++ ++xxgenpcvhm imm3 7f800000ff800000,ff8000007f800000 => f0e0302 0 ++xxgenpcvhm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0e0d0c09080706 0 ++xxgenpcvhm imm3 ff7ffffe7f7ffffe,0080000e8080000e => b0a070605040100 0 ++xxgenpcvhm imm3 0080000e8080000e,0180055e0180077e => 302 0 ++xxgenpcvhm imm3 0180055e0180077e,0000111e8000222e => b0a 0 ++xxgenpcvhm imm3 0000111e8000222e,7ff0000000000000 => 302 0 ++xxgenpcvhm imm3 7ff0000000000000,fff0000000000000 => f0e 0 ++xxgenpcvhm imm3 fff0000000000000,2208400000000000 => 706 0 ++xxgenpcvhm imm3 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvhm imm3 0000000000000009,ffff000180000001 => f0e0b0a 0 ++xxgenpcvhm imm3 ffff000180000001,0000000000000000 => 7060302 0 ++xxgenpcvhm imm3 0000000000000000,8000000000000000 => f0e 0 ++xxgenpcvhm imm3 8000000000000000,7f800000ff800000 => b0a0706 0 ++ ++xxgenpcvwm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b04050607 1020314151617 ++xxgenpcvwm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 40506071c1d1e1f 1020314151617 ++xxgenpcvwm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 40506071c1d1e1f 1011121300010203 ++xxgenpcvwm imm0 0080000e8080000e,0180055e0180077e => 18191a1b00010203 1011121314151617 ++xxgenpcvwm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121300010203 ++xxgenpcvwm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b00010203 1011121314151617 ++xxgenpcvwm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1020314151617 ++xxgenpcvwm imm0 fff0000000000000,2208400000000000 => 102031c1d1e1f 1011121314151617 ++xxgenpcvwm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 ++xxgenpcvwm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1020304050607 ++xxgenpcvwm imm0 ffff000180000001,0000000000000000 => 1020304050607 1011121314151617 ++xxgenpcvwm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1020314151617 ++xxgenpcvwm imm0 8000000000000000,7f800000ff800000 => 40506071c1d1e1f 1011121300010203 ++ ++xxgenpcvwm imm1 7f800000ff800000,ff8000007f800000 => 0 102030c0d0e0f ++xxgenpcvwm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 1020308090a0b ++xxgenpcvwm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 405060708090a0b ++xxgenpcvwm imm1 0080000e8080000e,0180055e0180077e => 0 c0d0e0f00000000 ++xxgenpcvwm imm1 0180055e0180077e,0000111e8000222e => 0 405060700000000 ++xxgenpcvwm imm1 0000111e8000222e,7ff0000000000000 => 0 c0d0e0f00000000 ++xxgenpcvwm imm1 7ff0000000000000,fff0000000000000 => 0 1020300000000 ++xxgenpcvwm imm1 fff0000000000000,2208400000000000 => 0 8090a0b00000000 ++xxgenpcvwm imm1 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvwm imm1 0000000000000009,ffff000180000001 => 0 1020304050607 ++xxgenpcvwm imm1 ffff000180000001,0000000000000000 => 0 8090a0b0c0d0e0f ++xxgenpcvwm imm1 0000000000000000,8000000000000000 => 0 1020300000000 ++xxgenpcvwm imm1 8000000000000000,7f800000ff800000 => 0 405060708090a0b ++ ++xxgenpcvwm imm2 7f800000ff800000,ff8000007f800000 => 1716151403020100 70605041b1a1918 ++xxgenpcvwm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 302010013121110 70605041b1a1918 ++xxgenpcvwm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 302010013121110 1f1e1d1c07060504 ++xxgenpcvwm imm2 0080000e8080000e,0180055e0180077e => 1716151403020100 1f1e1d1c1b1a1918 ++xxgenpcvwm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c03020100 ++xxgenpcvwm imm2 0000111e8000222e,7ff0000000000000 => 1716151403020100 1f1e1d1c1b1a1918 ++xxgenpcvwm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 30201001b1a1918 ++xxgenpcvwm imm2 fff0000000000000,2208400000000000 => 302010013121110 1f1e1d1c1b1a1918 ++xxgenpcvwm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 ++xxgenpcvwm imm2 0000000000000009,ffff000180000001 => 1716151413121110 706050403020100 ++xxgenpcvwm imm2 ffff000180000001,0000000000000000 => 706050403020100 1f1e1d1c1b1a1918 ++xxgenpcvwm imm2 0000000000000000,8000000000000000 => 1716151413121110 30201001b1a1918 ++xxgenpcvwm imm2 8000000000000000,7f800000ff800000 => 302010013121110 1f1e1d1c07060504 ++ ++xxgenpcvwm imm3 7f800000ff800000,ff8000007f800000 => f0e0d0c03020100 0 ++xxgenpcvwm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0e0d0c07060504 0 ++xxgenpcvwm imm3 ff7ffffe7f7ffffe,0080000e8080000e => b0a090807060504 0 ++xxgenpcvwm imm3 0080000e8080000e,0180055e0180077e => 3020100 0 ++xxgenpcvwm imm3 0180055e0180077e,0000111e8000222e => b0a0908 0 ++xxgenpcvwm imm3 0000111e8000222e,7ff0000000000000 => 3020100 0 ++xxgenpcvwm imm3 7ff0000000000000,fff0000000000000 => f0e0d0c 0 ++xxgenpcvwm imm3 fff0000000000000,2208400000000000 => 7060504 0 ++xxgenpcvwm imm3 2208400000000000,0000000000000009 => 0 0 ++xxgenpcvwm imm3 0000000000000009,ffff000180000001 => f0e0d0c0b0a0908 0 ++xxgenpcvwm imm3 ffff000180000001,0000000000000000 => 706050403020100 0 ++xxgenpcvwm imm3 0000000000000000,8000000000000000 => f0e0d0c 0 ++xxgenpcvwm imm3 8000000000000000,7f800000ff800000 => b0a090807060504 0 ++ + xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff + xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff + xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff +@@ -7094,4 +7318,4 @@ xxspltiw imm3 => 300000003 300000003 + + xxspltiw imm8 => 800000008 800000008 + +-All done. Tested 142 different instruction groups ++All done. Tested 158 different instruction groups + +commit c8fa838be405d7ac43035dcf675bf490800c26ec +Author: root +Date: Fri Feb 12 15:59:32 2021 -0500 + + Reduced Precision bfloat16 outer product tests + +diff --git a/none/tests/ppc64/test_isa_3_1_AT.c b/none/tests/ppc64/test_isa_3_1_AT.c +index 1d6d42c61..fee76f8f4 100644 +--- a/none/tests/ppc64/test_isa_3_1_AT.c ++++ b/none/tests/ppc64/test_isa_3_1_AT.c +@@ -626,8 +626,228 @@ static void test_pmxvf64gernn_XM11_YM0 (void) { + static void test_pmxvf64gernn_XM11_YM1 (void) { + __asm__ __volatile__ ("pmxvf64gernn 4, 22, %x0, 11, 1" :: "wa" (vec_xa) ); + } ++static void test_xvbf16ger2 (void) { ++ __asm__ __volatile__ ("xvbf16ger2 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvbf16ger2nn (void) { ++ __asm__ __volatile__ ("xvbf16ger2nn 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvbf16ger2np (void) { ++ __asm__ __volatile__ ("xvbf16ger2np 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvbf16ger2pn (void) { ++ __asm__ __volatile__ ("xvbf16ger2pn 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvbf16ger2pp (void) { ++ __asm__ __volatile__ ("xvbf16ger2pp 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2nn_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2np_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pn_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvbf16ger2pp_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} + + static test_list_t testgroup_generic[] = { ++ { &test_pmxvbf16ger2nn_XM0_YM0_PM0, "pmxvbf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM0_YM0_PM1, "pmxvbf16ger2nn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM0_YM13_PM0, "pmxvbf16ger2nn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM0_YM13_PM1, "pmxvbf16ger2nn XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM11_YM0_PM0, "pmxvbf16ger2nn XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM11_YM0_PM1, "pmxvbf16ger2nn XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM11_YM13_PM0, "pmxvbf16ger2nn XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2nn_XM11_YM13_PM1, "pmxvbf16ger2nn XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM0_YM0_PM0, "pmxvbf16ger2np XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM0_YM0_PM1, "pmxvbf16ger2np XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM0_YM13_PM0, "pmxvbf16ger2np XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM0_YM13_PM1, "pmxvbf16ger2np XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM11_YM0_PM0, "pmxvbf16ger2np XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM11_YM0_PM1, "pmxvbf16ger2np XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM11_YM13_PM0, "pmxvbf16ger2np XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2np_XM11_YM13_PM1, "pmxvbf16ger2np XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM0_YM0_PM0, "pmxvbf16ger2pn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM0_YM0_PM1, "pmxvbf16ger2pn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM0_YM13_PM0, "pmxvbf16ger2pn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM0_YM13_PM1, "pmxvbf16ger2pn XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM11_YM0_PM0, "pmxvbf16ger2pn XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM11_YM0_PM1, "pmxvbf16ger2pn XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM11_YM13_PM0, "pmxvbf16ger2pn XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pn_XM11_YM13_PM1, "pmxvbf16ger2pn XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM0_YM0_PM0, "pmxvbf16ger2pp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM0_YM0_PM1, "pmxvbf16ger2pp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM0_YM13_PM0, "pmxvbf16ger2pp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM0_YM13_PM1, "pmxvbf16ger2pp XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM11_YM0_PM0, "pmxvbf16ger2pp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM11_YM0_PM1, "pmxvbf16ger2pp XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM11_YM13_PM0, "pmxvbf16ger2pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2pp_XM11_YM13_PM1, "pmxvbf16ger2pp XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM0_YM0_PM0, "pmxvbf16ger2 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM0_YM0_PM1, "pmxvbf16ger2 XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM0_YM13_PM0, "pmxvbf16ger2 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM0_YM13_PM1, "pmxvbf16ger2 XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM11_YM0_PM0, "pmxvbf16ger2 XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM11_YM0_PM1, "pmxvbf16ger2 XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM11_YM13_PM0, "pmxvbf16ger2 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ ++ { &test_pmxvbf16ger2_XM11_YM13_PM1, "pmxvbf16ger2 XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ + { &test_pmxvf16ger2nn_XM0_YM0_PM0, "pmxvf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ + { &test_pmxvf16ger2nn_XM0_YM0_PM1, "pmxvf16ger2nn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ + { &test_pmxvf16ger2nn_XM0_YM13_PM0, "pmxvf16ger2nn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ +@@ -756,6 +976,11 @@ static test_list_t testgroup_generic[] = { + { &test_pmxvi16ger2s_XM11_YM0_PM1, "pmxvi16ger2s XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2s_XM11_YM13_PM0, "pmxvi16ger2s XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2s_XM11_YM13_PM1, "pmxvi16ger2s XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_xvbf16ger2nn, "xvbf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ ++ { &test_xvbf16ger2np, "xvbf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ ++ { &test_xvbf16ger2pn, "xvbf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ ++ { &test_xvbf16ger2pp, "xvbf16ger2pp", "AT,XA,XB", 0b00001111}, /* bcs */ ++ { &test_xvbf16ger2, "xvbf16ger2", "AT,XA,XB", 0b00001111}, /* bcs */ + { &test_xvf16ger2nn, "xvf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ + { &test_xvf16ger2np, "xvf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ + { &test_xvf16ger2pn, "xvf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ +diff --git a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp +index 5ea998563..be3f17ec3 100644 +--- a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp ++++ b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp +@@ -1,3 +1,403 @@ ++pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++ ++pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -3.63717e-28 -1.14437e-28 +Zero -1.14437e-28 -4.71628e-18 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++ ++pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++ ++pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 -1.34843e-28 1.14437e-28 +Zero 1.14437e-28 -4.71628e-18 1.14437e-28) ++pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++ ++pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++ ++pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 1.34843e-28 -1.14437e-28 +Zero -1.14437e-28 4.71628e-18 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) ++ ++pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++ ++pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 3.63717e-28 1.14437e-28 +Zero 1.14437e-28 4.71628e-18 1.14437e-28) ++pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) ++ ++pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ ++pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero 2.49280e-28 +Zero +Zero +Zero 4.71628e-18 +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Den +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Den +Zero) ++pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++ + pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) + pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) + pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) +@@ -1558,6 +1958,91 @@ pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,01 + pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] + pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + ++xvbf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) ++xvbf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) ++xvbf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) ++xvbf16ger2nn 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf NaN NaN -Inf +Inf NaN NaN +Inf -Inf) ++xvbf16ger2nn 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf) ++xvbf16ger2nn 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( -3.63717e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14438e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 -Inf +Inf -1.14437e-28 -1.14437e-28 -Inf +Inf) ++xvbf16ger2nn 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf NaN NaN NaN NaN) ++xvbf16ger2nn 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14438e-28 -3.63717e-28 -4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -4.00000e+00 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 -Inf +Inf -1.14437e-28 -1.14437e-28 NaN NaN) ++xvbf16ger2nn 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf NaN NaN NaN NaN NaN NaN NaN NaN) ++xvbf16ger2nn 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2nn 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN) ++ ++xvbf16ger2np 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) ++xvbf16ger2np 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) ++xvbf16ger2np 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) ++xvbf16ger2np 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf NaN NaN -Inf +Inf NaN NaN +Inf -Inf) ++xvbf16ger2np 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf) ++xvbf16ger2np 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( * * * * * * * * * * * * * * * *) ++xvbf16ger2np 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( -1.34843e-28 1.14437e-28 * * -4.71628e-18 1.14437e-28 * * 1.14437e-28 1.14437e-28 * * 1.14437e-28 1.14437e-28 * *) ++xvbf16ger2np 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * -Inf +Inf * * -Inf +Inf) ++xvbf16ger2np 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf NaN NaN NaN NaN) ++xvbf16ger2np 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( * * * * * * * * 1.14437e-28 1.14437e-28 -1.34843e-28 -4.71628e-18 * * * *) ++xvbf16ger2np 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( * * * * * * * * -4.00000e+00 1.14437e-28 * * * * * *) ++xvbf16ger2np 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * -Inf +Inf * * NaN NaN) ++xvbf16ger2np 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf NaN NaN NaN NaN NaN NaN NaN NaN) ++xvbf16ger2np 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN * * * * * * * *) ++xvbf16ger2np 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN * * * * * * * *) ++xvbf16ger2np 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf * * NaN NaN * * NaN NaN) ++ ++xvbf16ger2pn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) ++xvbf16ger2pn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) ++xvbf16ger2pn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) ++xvbf16ger2pn 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) ++xvbf16ger2pn 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) ++xvbf16ger2pn 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 1.34843e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 +Inf -Inf -1.14437e-28 -1.14437e-28 +Inf -Inf) ++xvbf16ger2pn 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) ++xvbf16ger2pn 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 1.34843e-28 4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 4.00000e+00 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 +Inf -Inf -1.14437e-28 -1.14437e-28 NaN NaN) ++xvbf16ger2pn 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) ++xvbf16ger2pn 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) ++xvbf16ger2pn 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN) ++ ++xvbf16ger2pp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) ++xvbf16ger2pp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) ++xvbf16ger2pp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) ++xvbf16ger2pp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) ++xvbf16ger2pp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) ++xvbf16ger2pp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( * * * * * * * * * * * * * * * *) ++xvbf16ger2pp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 3.63717e-28 1.14437e-28 * * 4.71628e-18 1.14437e-28 * * 1.14437e-28 1.14437e-28 * * 1.14438e-28 1.14437e-28 * *) ++xvbf16ger2pp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * +Inf -Inf * * +Inf -Inf) ++xvbf16ger2pp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) ++xvbf16ger2pp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( * * * * * * * * 1.14437e-28 1.14438e-28 3.63717e-28 4.71628e-18 * * * *) ++xvbf16ger2pp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( * * * * * * * * 4.00000e+00 1.14437e-28 * * * * * *) ++xvbf16ger2pp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * +Inf -Inf * * NaN NaN) ++xvbf16ger2pp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) ++xvbf16ger2pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN * * * * * * * *) ++xvbf16ger2pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN * * * * * * * *) ++xvbf16ger2pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf * * NaN NaN * * NaN NaN) ++ ++xvbf16ger2 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) ++xvbf16ger2 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) ++xvbf16ger2 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) ++xvbf16ger2 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) ++xvbf16ger2 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) ++xvbf16ger2 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero 5.56082e-36 +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++xvbf16ger2 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 2.49280e-28 +Zero +Zero +Zero 4.71628e-18 +Zero +Zero +Zero 2.08768e-35 +Zero +Zero +Zero 3.82177e-34 +Zero +Zero +Zero) ++xvbf16ger2 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( +Zero +Zero NaN NaN +Zero +Zero NaN NaN +Zero +Zero +Inf -Inf +Zero +Zero +Inf -Inf) ++xvbf16ger2 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) ++xvbf16ger2 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero 2.08768e-35 3.82177e-34 2.49280e-28 4.71628e-18 +Zero +Zero +Zero +Zero) ++xvbf16ger2 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( +Zero +Zero +Zero +Zero +Den +Zero +Zero +Zero 4.00000e+00 +Zero +Zero +Den +Zero +Zero +Zero +Zero) ++xvbf16ger2 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( +Zero +Zero NaN NaN +Zero +Zero NaN NaN +Zero +Zero +Inf -Inf +Zero +Zero NaN NaN) ++xvbf16ger2 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) ++xvbf16ger2 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++xvbf16ger2 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) ++xvbf16ger2 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf +Zero +Zero NaN NaN +Zero +Zero NaN NaN) ++ + xvf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) + xvf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) + xvf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) +@@ -1921,4 +2406,4 @@ xxmtacc => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e + + xxsetaccz => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + +-All done. Tested 152 different instruction groups ++All done. Tested 197 different instruction groups +diff --git a/none/tests/ppc64/test_isa_3_1_XT.c b/none/tests/ppc64/test_isa_3_1_XT.c +index a54e8763a..905c17951 100644 +--- a/none/tests/ppc64/test_isa_3_1_XT.c ++++ b/none/tests/ppc64/test_isa_3_1_XT.c +@@ -491,6 +491,16 @@ static void test_pstxv_4 (void) { + static void test_pstxv_0 (void) { + __asm__ __volatile__ ("pstxv %x0, 0(%1), 0" :: "wa" (vec_xs), "r" (ra) ); + } ++static void test_xvcvspbf16 (void) { ++SET_FPSCR_ZERO; ++ __asm__ __volatile__ ("xvcvspbf16 %x0, %x1" ++ : "=wa" (vec_xt) : "wa" (vec_xb) ); ++GET_FPSCR(current_fpscr); ++} ++static void test_xvcvbf16spn (void) { ++ __asm__ __volatile__ ("xvcvbf16spn %x0, %x1" ++ : "=wa" (vec_xt) : "wa" (vec_xb) ); ++} + static void test_xxgenpcvbm_imm0 (void) { + __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); + } +@@ -634,6 +644,8 @@ static test_list_t testgroup_generic[] = { + { &test_stxvrdx, "stxvrdx", "XS,RA,RB"}, /* bcs */ + { &test_stxvrhx, "stxvrhx", "XS,RA,RB"}, /* bcs */ + { &test_stxvrwx, "stxvrwx", "XS,RA,RB"}, /* bcs */ ++ { &test_xvcvbf16spn, "xvcvbf16spn", "XT,XB"}, /* bcs */ ++ { &test_xvcvspbf16, "xvcvspbf16", "XT,XB", 0b0101010100000000}, /* bcs */ + { &test_xxblendvb, "xxblendvb", "XT,XA,XB,XC"}, /* bcs */ + { &test_xxblendvd, "xxblendvd", "XT,XA,XB,XC"}, /* bcs */ + { &test_xxblendvh, "xxblendvh", "XT,XA,XB,XC"}, /* bcs */ +diff --git a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp +index 8b5f1d1a3..b9d6cb7a8 100644 +--- a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp ++++ b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp +@@ -244,6 +244,34 @@ stxvrwx 18 (&buffer) 0000111e8000222e,0180055e0180077e => [ - - - 7f0000008 + stxvrwx 20 (&buffer) 7ff0000000000000,0000111e8000222e => [ - - - - 5a05a05a00000000 - - - ] + stxvrwx 28 (&buffer) fff0000000000000,7ff0000000000000 => [ - - - - - 0102030400000000 - - ] + ++xvcvbf16spn 7f800000ff800000,ff8000007f800000 => 0 0 ++xvcvbf16spn ff8000007f800000,ff7ffffe7f7ffffe => 0 fffe0000fffe0000 ++xvcvbf16spn ff7ffffe7f7ffffe,0080000e8080000e => fffe0000fffe0000 e0000000e0000 ++xvcvbf16spn 0080000e8080000e,0180055e0180077e => e0000000e0000 55e0000077e0000 ++xvcvbf16spn 0180055e0180077e,0000111e8000222e => 55e0000077e0000 111e0000222e0000 ++xvcvbf16spn 0000111e8000222e,7ff0000000000000 => 111e0000222e0000 0 ++xvcvbf16spn 7ff0000000000000,fff0000000000000 => 0 0 ++xvcvbf16spn fff0000000000000,2208400000000000 => 0 4000000000000000 ++xvcvbf16spn 2208400000000000,0000000000000009 => 4000000000000000 90000 ++xvcvbf16spn 0000000000000009,ffff000180000001 => 90000 1000000010000 ++xvcvbf16spn ffff000180000001,0000000000000000 => 1000000010000 0 ++xvcvbf16spn 0000000000000000,8000000000000000 => 0 0 ++xvcvbf16spn 8000000000000000,7f800000ff800000 => 0 0 ++ ++xvcvspbf16 7f800000ff800000,ff8000007f800000 => +Inf -Inf -Inf +Inf ++xvcvspbf16 ff8000007f800000,ff7ffffe7f7ffffe => -Inf +Inf -Inf +Inf ++xvcvspbf16 ff7ffffe7f7ffffe,0080000e8080000e => -Inf +Inf 0x0080 0x8080 ++xvcvspbf16 0080000e8080000e,0180055e0180077e => 0x0080 0x8080 0x0180 0x0180 ++xvcvspbf16 0180055e0180077e,0000111e8000222e => 0x0180 0x0180 +Zero -Zero ++xvcvspbf16 0000111e8000222e,7ff0000000000000 => +Zero -Zero NaN +Zero ++xvcvspbf16 7ff0000000000000,fff0000000000000 => NaN +Zero NaN +Zero ++xvcvspbf16 fff0000000000000,2208400000000000 => NaN +Zero 0x2208 +Zero ++xvcvspbf16 2208400000000000,0000000000000009 => 0x2208 +Zero +Zero +Zero ++xvcvspbf16 0000000000000009,ffff000180000001 => +Zero +Zero NaN -Zero ++xvcvspbf16 ffff000180000001,0000000000000000 => NaN -Zero +Zero +Zero ++xvcvspbf16 0000000000000000,8000000000000000 => +Zero +Zero -Zero +Zero ++xvcvspbf16 8000000000000000,7f800000ff800000 => -Zero +Zero +Inf -Inf ++ + xxblendvb 7f800000ff800000,ff8000007f800000 0000000000000000,00000000ffffffff 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 + xxblendvb 7f800000ff800000,ff8000007f800000 ffffffff55555555,5555aaaaaaaa5555 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 + xxblendvb 7f800000ff800000,ff8000007f800000 aaaa00000000aaaa,0000000000000000 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 +@@ -7318,4 +7346,4 @@ xxspltiw imm3 => 300000003 300000003 + + xxspltiw imm8 => 800000008 800000008 + +-All done. Tested 158 different instruction groups ++All done. Tested 160 different instruction groups + +commit c589b652939655090c005a982a71f50c489fb5ce +Author: root +Date: Fri Feb 12 16:00:53 2021 -0500 + + Reduced precision Missing Integer based outer tests + +diff --git a/NEWS b/NEWS +index 2e42e74b2..52a51fd9e 100644 +--- a/NEWS ++++ b/NEWS +@@ -176,6 +176,7 @@ where XXXXXX is the bug number as listed below. + 433500 DRD regtest faulures when libstdc++ and libgcc debuginfo are installed + 433629 valgrind/README has type "abd" instead of "and" + 433641 Rust std::sys::unix::fs::try_statx Syscall param fstatat(file_name) ++433801 PPC ISA 3.1 support is missing, part 10 (ISA 3.1 support complete) + 433898 arm64: Handle sp, lr, fp as DwReg in CfiExpr + 434193 GCC 9+ inlined strcmp causes "Conditional jump or move [..] value" report + n-i-bz helgrind: If hg_cli__realloc fails, return NULL. +diff --git a/none/tests/ppc64/test_isa_3_1_AT.c b/none/tests/ppc64/test_isa_3_1_AT.c +index fee76f8f4..e9db9cc9a 100644 +--- a/none/tests/ppc64/test_isa_3_1_AT.c ++++ b/none/tests/ppc64/test_isa_3_1_AT.c +@@ -806,6 +806,114 @@ static void test_pmxvbf16ger2pp_XM11_YM13_PM1 (void) { + __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 1" + :: "wa" (vec_xa), "wa" (vec_xb) ); + } ++static void test_xvi8ger4spp (void) { ++ __asm__ __volatile__ ("xvi8ger4spp 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM0_YM0_PM5 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 0, 5" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM0_YM13_PM5 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 13, 5" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM11_YM0_PM5 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 0, 5" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi8ger4spp_XM11_YM13_PM5 (void) { ++ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 13, 5" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvi16ger2 (void) { ++ __asm__ __volatile__ ("xvi16ger2 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_xvi16ger2pp (void) { ++ __asm__ __volatile__ ("xvi16ger2pp 4, %x0, %x1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM0_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM0_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM0_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM0_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM11_YM0_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 0, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM11_YM0_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 0, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM11_YM13_PM0 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 13, 0" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} ++static void test_pmxvi16ger2pp_XM11_YM13_PM1 (void) { ++ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 13, 1" ++ :: "wa" (vec_xa), "wa" (vec_xb) ); ++} + + static test_list_t testgroup_generic[] = { + { &test_pmxvbf16ger2nn_XM0_YM0_PM0, "pmxvbf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ +@@ -952,6 +1060,14 @@ static test_list_t testgroup_generic[] = { + { &test_pmxvi8ger4pp_XM11_YM0_PM5, "pmxvi8ger4pp XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4pp_XM11_YM13_PM0, "pmxvi8ger4pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4pp_XM11_YM13_PM5, "pmxvi8ger4pp XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM0_YM0_PM0, "pmxvi8ger4spp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM0_YM0_PM5, "pmxvi8ger4spp XM0_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM0_YM13_PM0, "pmxvi8ger4spp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM0_YM13_PM5, "pmxvi8ger4spp XM0_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM11_YM0_PM0, "pmxvi8ger4spp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM11_YM0_PM5, "pmxvi8ger4spp XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM11_YM13_PM0, "pmxvi8ger4spp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi8ger4spp_XM11_YM13_PM5, "pmxvi8ger4spp XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4_XM0_YM0_PM0, "pmxvi8ger4 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4_XM0_YM0_PM5, "pmxvi8ger4 XM0_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4_XM0_YM13_PM0, "pmxvi8ger4 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ +@@ -960,6 +1076,14 @@ static test_list_t testgroup_generic[] = { + { &test_pmxvi8ger4_XM11_YM0_PM5, "pmxvi8ger4 XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4_XM11_YM13_PM0, "pmxvi8ger4 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi8ger4_XM11_YM13_PM5, "pmxvi8ger4 XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM0_YM0_PM0, "pmxvi16ger2pp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM0_YM0_PM1, "pmxvi16ger2pp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM0_YM13_PM0, "pmxvi16ger2pp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM0_YM13_PM1, "pmxvi16ger2pp XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM11_YM0_PM0, "pmxvi16ger2pp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM11_YM0_PM1, "pmxvi16ger2pp XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM11_YM13_PM0, "pmxvi16ger2pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2pp_XM11_YM13_PM1, "pmxvi16ger2pp XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2spp_XM0_YM0_PM0, "pmxvi16ger2spp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2spp_XM0_YM0_PM1, "pmxvi16ger2spp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2spp_XM0_YM13_PM0, "pmxvi16ger2spp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ +@@ -976,6 +1100,14 @@ static test_list_t testgroup_generic[] = { + { &test_pmxvi16ger2s_XM11_YM0_PM1, "pmxvi16ger2s XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2s_XM11_YM13_PM0, "pmxvi16ger2s XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_pmxvi16ger2s_XM11_YM13_PM1, "pmxvi16ger2s XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM0_YM0_PM0, "pmxvi16ger2 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM0_YM0_PM1, "pmxvi16ger2 XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM0_YM13_PM0, "pmxvi16ger2 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM0_YM13_PM1, "pmxvi16ger2 XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM11_YM0_PM0, "pmxvi16ger2 XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM11_YM0_PM1, "pmxvi16ger2 XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM11_YM13_PM0, "pmxvi16ger2 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ ++ { &test_pmxvi16ger2_XM11_YM13_PM1, "pmxvi16ger2 XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ + { &test_xvbf16ger2nn, "xvbf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ + { &test_xvbf16ger2np, "xvbf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ + { &test_xvbf16ger2pn, "xvbf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ +@@ -999,9 +1131,12 @@ static test_list_t testgroup_generic[] = { + { &test_xvi4ger8pp, "xvi4ger8pp", "AT,XA,XB"}, /* bcs */ + { &test_xvi4ger8, "xvi4ger8", "AT,XA,XB"}, /* bcs */ + { &test_xvi8ger4pp, "xvi8ger4pp", "AT,XA,XB"}, /* bcs */ ++ { &test_xvi8ger4spp, "xvi8ger4spp", "AT,XA,XB"}, /* bcs */ + { &test_xvi8ger4, "xvi8ger4", "AT,XA,XB"}, /* bcs */ ++ { &test_xvi16ger2pp, "xvi16ger2pp", "AT,XA,XB"}, /* bcs */ + { &test_xvi16ger2spp, "xvi16ger2spp", "AT,XA,XB"}, /* bcs */ + { &test_xvi16ger2s, "xvi16ger2s", "AT,XA,XB"}, /* bcs */ ++ { &test_xvi16ger2, "xvi16ger2", "AT,XA,XB"}, /* bcs */ + { &test_xxmfacc, "xxmfacc", "AS"}, /* bcs */ + { &test_xxmtacc, "xxmtacc", "AT"}, /* bcs */ + { &test_xxsetaccz, "xxsetaccz", "AT"}, /* bcs */ +diff --git a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp +index be3f17ec3..8d1be35b1 100644 +--- a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp ++++ b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp +@@ -1718,6 +1718,86 @@ pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,01 + pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111110911111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] + pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] + ++pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++ ++pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011115075 11114fd511114f95 0000000000000000 0000000000000000 000000001110d111 1110d1111110d111 000000001110d111 1110d1111110d111] ++pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 1111150911111111 0000000000000000 0000000000000000 0000000011111111 11110d1111111111 0000000011111111 11110d1111111111] ++pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011110911 1111091111110911 0000000000000000 0000000000000000 00000000111112b5 11111c1511111fd5 0000000011111395 111121f5111127b5] ++pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 1111109111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000001111109f 111110ef1111110f 0000000000000000 0000000000000000 0000000011111111 * 000000001111118f 1111145f1111157f] ++pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111110911111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++ + pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] +@@ -1798,6 +1878,86 @@ pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180 + pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 fffffff800000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + ++pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++ ++pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 00000000111110f5 1111065511110215 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 1110911111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 00000000111200b5 116cf01511914fd5 000000001112ef95 11c883f5121125b5] ++pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 1558911111111111 0000000011111111 199c911111111111] ++pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000001111111f 1111166f1111188f 0000000000000000 0000000000000000 0000000011111111 * 000000001111118f 1111415f1111547f] ++pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111511111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 1113511111111111] ++pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] ++ + pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] +@@ -1958,6 +2118,86 @@ pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,01 + pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] + pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + ++pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ ++pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 00000000ffffffe4 fffff544fffff104 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 ffff800000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 000000000000efa4 005bdf0400803ec4 000000000001de84 00b772e4010014a4] ++pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0447800000000000 0000000000000000 088b800000000000] ++pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000000000000e 0000055e0000077e 0000000000000000 0000000000000000 0000000000000000 0000000000000000 000000000000007e 0000304e0000436e] ++pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] ++pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] ++ + xvbf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) + xvbf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) + xvbf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) +@@ -2349,6 +2589,23 @@ xvi8ger4pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e = + xvi8ger4pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 11111def11111111 * 11110cef11111111 * 1111001111111111 * * *] + xvi8ger4pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012 1110d11111111111 1110d19111109191 * *] + ++xvi8ger4spp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 1110d0921110d012 1110d0121110d092 1111101211114f92 11114f9211111012 1111101211114f92 11114f9211111012 1110d0921110d012 1110d0121110d092] ++xvi8ger4spp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110d1101110d110 1111111111111091 1110d1901110d190 1111111111115091 1110d1901110d190 1111111111115091 1110d1101110d110 1111111111111091] ++xvi8ger4spp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11110cef11111111 * 11111def11111111 * 11111def11111111 * 11110cef11111111 *] ++xvi8ger4spp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 1111109111111111 1110d0921110d012 1111509111111111 1111101211114f92 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012] ++xvi8ger4spp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ * * 1110d19111109191 111091911110d191 1110d1901110d210 1110d2101110d190 1110d1901110d210 1110d2101110d190] ++xvi8ger4spp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 11111c6a1111204c 111115b6111118b7 1111221f11112823 111118b71110ddd9 1110f3af1110ff79 11111c6a1111231f 1110ff7911110f47 1111204c11112923] ++xvi8ger4spp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 1111155111111111 111111111111121f 1111089111111111 11111111111112af 11110e7311111111 111111111111145f 11110ef311111111 111111111111157f] ++xvi8ger4spp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ * * 1110d11111111111 1110d19111109191 1111119111111111 1110d1901110d210 1111119111111111 1110d1901110d210] ++xvi8ger4spp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ * * * * 111125ef111136ef 111136ef111125ef * *] ++xvi8ger4spp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ * * 1111145f1111157f 1111121f111112af 11111673111116f3 1111155111112a91 * *] ++xvi8ger4spp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ * * * 1111111111111162 111125d511111111 * * *] ++xvi8ger4spp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ * * * * 1111221111111111 111125ef111136ef * *] ++xvi8ger4spp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 1111101211114f92 11114f9211111012 1110d0921110d012 1110d0121110d092 1110d19111109191 111091911110d191 * *] ++xvi8ger4spp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 1110d1901110d190 1111111111115091 1110d1101110d110 1111111111111091 1111109111111091 111111111110d111 * *] ++xvi8ger4spp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 11111def11111111 * 11110cef11111111 * 1111001111111111 * * *] ++xvi8ger4spp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012 1110d11111111111 1110d19111109191 * *] ++ + xvi8ger4 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ ffffbf81ffffbf01 ffffbf01ffffbf81 ffffff0100003e81 00003e81ffffff01 ffffff0100003e81 00003e81ffffff01 ffffbf81ffffbf01 ffffbf01ffffbf81] + xvi8ger4 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ ffffbfffffffbfff 00000000ffffff80 ffffc07fffffc07f 0000000000003f80 ffffc07fffffc07f 0000000000003f80 ffffbfffffffbfff 00000000ffffff80] + xvi8ger4 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ fffffbde00000000 0000000000000000 00000cde00000000 0000000000000000 00000cde00000000 0000000000000000 fffffbde00000000 0000000000000000] +@@ -2366,6 +2623,23 @@ xvi8ger4 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => + xvi8ger4 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 00000cde00000000 0000000000000000 fffffbde00000000 0000000000000000 ffffef0000000000 0000000000000000 0000000000000000 0000000000000000] + xvi8ger4 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 00003f8000000000 ffffff0100003e81 ffffff8000000000 ffffbf81ffffbf01 ffffc00000000000 ffffc080ffff8080 0000000000000000 0000000000000000] + ++xvi16ger2pp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 10d1511111115111 1111511110d15111 5091511110d15111 10d1511150915111 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111] ++xvi16ger2pp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110511111105111 1111111111511111 11d0511111d05111 11111111d1511111 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111] ++xvi16ger2pp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11000d1111111111 * 22040d1111111111 * 22040d1111111111 * 11000d1111111111 *] ++xvi16ger2pp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 1151111111111111 10d1511111115111 d151111111111111 5091511110d15111 d151111111111111 5091511110d15111 1151111111111111 10d1511111115111] ++xvi16ger2pp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ * * d151111111511111 11511111d1511111 11d0511111105111 1110511111d05111 11d0511111105111 1110511111d05111] ++xvi16ger2pp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 116cf01511914fd5 12361095135a2075 110883f5115125b5 135a207555a15155 11301f95113b8755 116cf015110883f5 113b8755114b7315 11914fd5115125b5] ++xvi16ger2pp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 1558911111111111 111111111111ab1f 0898911111111111 11111111111244af 129b9d1111111111 111111111111415f 13239d1111111111 111111111111547f] ++xvi16ger2pp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ * * 5111111111111111 d151111111511111 1051111111111111 11d0511111105111 1051111111111111 11d0511111105111] ++xvi16ger2pp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ * * * * 22040d1111000d11 11000d1122040d11 * *] ++xvi16ger2pp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ * * 1111415f1111547f 1111ab1f111244af 129b9d1113239d11 1558911108989111 * *] ++xvi16ger2pp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ * * 1113511111111111 1111111111111162 2597315111111111 1111111111135111 * *] ++xvi16ger2pp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ * * * * 000d111111111111 22040d1111000d11 * *] ++xvi16ger2pp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111 d151111111511111 11511111d1511111 * *] ++xvi16ger2pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111 1051111110511111 1111111151111111 * *] ++xvi16ger2pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 22040d1111111111 * 11000d1111111111 * 000d111111111111 * * *] ++xvi16ger2pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ d151111111111111 5091511110d15111 1151111111111111 10d1511111115111 5111111111111111 d151111111511111 * *] ++ + xvi16ger2spp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 10d1511111115111 1111511110d15111 5091511110d15111 10d1511150915111 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111] + xvi16ger2spp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110511111105111 1111111111511111 11d0511111d05111 11111111d1511111 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111] + xvi16ger2spp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11000d1111111111 * 22040d1111111111 * 22040d1111111111 * 11000d1111111111 *] +@@ -2400,10 +2674,27 @@ xvi16ger2s 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e = + xvi16ger2s 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000 eefc000000000000 0000000000000000 0000000000000000 0000000000000000] + xvi16ger2s 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000 4000000000000000 c040000000400000 0000000000000000 0000000000000000] + ++xvi16ger2 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ ffc0400000004000 00004000ffc04000 3f804000ffc04000 ffc040003f804000 3f804000ffc04000 ffc040003f804000 ffc0400000004000 00004000ffc04000] ++xvi16ger2 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ ffff4000ffff4000 0000000000400000 00bf400000bf4000 00000000c0400000 00bf400000bf4000 00000000c0400000 ffff4000ffff4000 0000000000400000] ++xvi16ger2 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ ffeefc0000000000 0000000000000000 10f2fc0000000000 0000000000000000 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000] ++xvi16ger2 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 0040000000000000 ffc0400000004000 c040000000000000 3f804000ffc04000 c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000] ++xvi16ger2 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ 0000000000000000 0000000000000000 c040000000400000 00400000c0400000 00bf4000ffff4000 ffff400000bf4000 00bf4000ffff4000 ffff400000bf4000] ++xvi16ger2 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 005bdf0400803ec4 0124ff8402490f64 fff772e4004014a4 02490f6444904044 001f0e84002a7644 005bdf04fff772e4 002a7644003a6204 00803ec4004014a4] ++xvi16ger2 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 0447800000000000 0000000000009a0e f787800000000000 000000000001339e 018a8c0000000000 000000000000304e 02128c0000000000 000000000000436e] ++xvi16ger2 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ 0000000000000000 0000000000000000 4000000000000000 c040000000400000 ff40000000000000 00bf4000ffff4000 ff40000000000000 00bf4000ffff4000] ++xvi16ger2 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 10f2fc00ffeefc00 ffeefc0010f2fc00 0000000000000000 0000000000000000] ++xvi16ger2 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ 0000000000000000 0000000000000000 0000304e0000436e 00009a0e0001339e 018a8c0002128c00 04478000f7878000 0000000000000000 0000000000000000] ++xvi16ger2 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ 0000000000000000 0000000000000000 0002400000000000 0000000000000051 1486204000000000 0000000000024000 0000000000000000 0000000000000000] ++xvi16ger2 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 eefc000000000000 10f2fc00ffeefc00 0000000000000000 0000000000000000] ++xvi16ger2 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 3f804000ffc04000 ffc040003f804000 ffc0400000004000 00004000ffc04000 c040000000400000 00400000c0400000 0000000000000000 0000000000000000] ++xvi16ger2 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 00bf400000bf4000 00000000c0400000 ffff4000ffff4000 0000000000400000 ff400000ff400000 0000000040000000 0000000000000000 0000000000000000] ++xvi16ger2 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000 eefc000000000000 0000000000000000 0000000000000000 0000000000000000] ++xvi16ger2 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000 4000000000000000 c040000000400000 0000000000000000 0000000000000000] ++ + xxmfacc [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] + + xxmtacc => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] + + xxsetaccz => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] + +-All done. Tested 197 different instruction groups ++All done. Tested 224 different instruction groups diff --git a/valgrind-3.17.0-ppc64-isa-3.1.patch b/valgrind-3.17.0-ppc64-isa-3.1.patch new file mode 100644 index 0000000..fb8fa50 --- /dev/null +++ b/valgrind-3.17.0-ppc64-isa-3.1.patch @@ -0,0 +1,1720 @@ +commit 3cc0232c46a5905b4a6c2fbd302b58bf5f90b3d5 +Author: Carl Love +Date: Mon Jan 11 16:00:57 2021 -0600 + + PPC64: ISA 3.1 VSX PCV Generate Operations + + xgenpcvbm VSX Vector Generate PCV from Byte Mask + xxgenpcvdmVSX Vector Generate PCV from Doubleword Mask + xxgenpcvhmVSX Vector Generate PCV from Halfword Mask + xxgenpcvwmVSX Vector Generate PCV from Word Mask + +diff --git a/VEX/priv/guest_ppc_defs.h b/VEX/priv/guest_ppc_defs.h +index deda4dfce..54ce923a9 100644 +--- a/VEX/priv/guest_ppc_defs.h ++++ b/VEX/priv/guest_ppc_defs.h +@@ -169,6 +169,23 @@ void write_ACC_entry (VexGuestPPC64State* gst, UInt offset, UInt acc, + void get_ACC_entry (VexGuestPPC64State* gst, UInt offset, UInt acc, + UInt reg, UInt *result); + ++extern void vector_gen_pvc_byte_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ++ ULong src_lo, ++ UInt rtn_val, UInt IMM ); ++extern void vector_gen_pvc_hword_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ++ ULong src_lo, ++ UInt rtn_val, UInt IMM ); ++extern void vector_gen_pvc_word_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ++ ULong src_lo, ++ UInt rtn_val, UInt IMM ); ++extern void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ++ ULong src_lo, ++ UInt rtn_val, UInt IMM ); ++ + /* 8-bit XO value from instruction description */ + #define XVI4GER8 0b00100011 + #define XVI4GER8PP 0b00100010 +diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c +index c24191ef3..75497abb9 100644 +--- a/VEX/priv/guest_ppc_helpers.c ++++ b/VEX/priv/guest_ppc_helpers.c +@@ -701,6 +701,738 @@ ULong vector_evaluate64_helper( ULong srcA, ULong srcB, ULong srcC, + #undef MAX_IMM_BITS + } + ++/*--------------------------------------------------*/ ++/*---- VSX Vector Generate PCV from Mask helpers ---*/ ++/*--------------------------------------------------*/ ++static void write_VSX_entry (VexGuestPPC64State* gst, UInt reg_offset, ++ ULong *vsx_entry) ++{ ++ U128* pU128_dst; ++ pU128_dst = (U128*) (((UChar*) gst) + reg_offset); ++ ++ /* The U128 type is defined as an array of unsigned intetgers. */ ++ /* Writing in LE order */ ++ (*pU128_dst)[0] = (UInt)(vsx_entry[1] & 0xFFFFFFFF); ++ (*pU128_dst)[1] = (UInt)(vsx_entry[1] >> 32); ++ (*pU128_dst)[2] = (UInt)(vsx_entry[0] & 0xFFFFFFFF); ++ (*pU128_dst)[3] = (UInt)(vsx_entry[0] >> 32); ++ return; ++} ++ ++/* CALLED FROM GENERATED CODE */ ++void vector_gen_pvc_byte_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ULong src_lo, ++ UInt reg_offset, UInt imm ) { ++ /* The function computes the 128-bit result then writes it directly ++ into the guest state VSX register. */ ++ ++ UInt i, shift_by, sel_shift_by, half_sel; ++ ULong index, src, result[2]; ++ ULong j; ++ ++ result[0] = 0; ++ result[1] = 0; ++ j = 0; ++ ++ /* The algorithm in the ISA is written with IBM numbering zero on left and ++ N-1 on right. The loop index is converted to "i" to match the algorithm ++ for claritiy of matching the C code to the algorithm in the ISA. */ ++ ++ if (imm == 0b00) { // big endian expansion ++ for( index = 0; index < 16; index++) { ++ i = 15 - index; ++ ++ shift_by = i*8; ++ ++ if ( i >= 8) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 7; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= j << shift_by; ++ j++; ++ } else { ++ result[half_sel] |= (index + (unsigned long long)0x10) << shift_by; ++ } ++ } ++ ++ ++ } else if (imm == 0b01) { // big endian compression ++ /* If IMM=0b00001, let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement a ++ compression of the sparse byte elements in a source vector specified ++ by the byte-element mask in VSR[VRB+32] into the leftmost byte ++ elements of a result vector. ++ */ ++ for( index = 0; index < 16; index++) { ++ i = 15 - index; ++ shift_by = i*8; ++ ++ if ( i >= 8) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 7; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 8) ++ result[1] |= (index) << (15 - j)*8; ++ else ++ result[0] |= (index) << (7 - j)*8; ++ j++; ++ } ++ } ++ /* The algorithim says set to undefined, leave as 0 ++ for( index = 3 - j; index < 4; index++) { ++ result |= (0 << (index*8)); ++ } ++ */ ++ ++ } else if (imm == 0b10) { //little-endian expansion ++ /* If IMM=0b00010, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement an ++ expansion of the rightmost byte elements of a source vector into the ++ byte elements of a result vector specified by the byte-element mask ++ in VSR[VRB+32]. */ ++ for( index = 0; index < 16; index++) { ++ i = index; ++ ++ shift_by = i*8; ++ ++ if ( i >= 8) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 7; ++ ++ /* mod shift amount by 8 since src is either the upper or lower ++ 64-bits. */ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= j << shift_by; ++ j++; ++ } else { ++ result[half_sel] |= (index + (unsigned long long)0x10) << shift_by; ++ } ++ } ++ ++ } else if (imm == 0b11) { //little-endian compression ++ /* If IMM=0b00011, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement a ++ compression of the sparse byte elements in a source vector specified ++ by the byte-element mask in VSR[VRB+32] into the rightmost byte ++ elements of a result vector. */ ++ ++ for( index = 0; index < 16; index++) { ++ i = index; ++ ++ shift_by = i*8; ++ ++ if ( i >= 8) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 7; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 8) ++ result[0] |= (index) << (j-8)*8; ++ else ++ result[1] |= (index) << j*8; ++ j++; ++ } ++ } ++ ++ /* The algorithim says set to undefined, leave as 0 ++ for( index = 3 - j; index < 4; index++) { ++ result |= (0 << (index*8)); ++ } ++ */ ++ ++ } else { ++ vex_printf("ERROR, vector_gen_pvc_byte_mask_dirty_helper, imm value %u not supported.\n", ++ imm); ++ vassert(0); ++ } ++ write_VSX_entry( gst, reg_offset, result); ++} ++ ++/* CALLED FROM GENERATED CODE */ ++void vector_gen_pvc_hword_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ULong src_lo, ++ UInt reg_offset, ++ UInt imm ) { ++ /* The function computes the 128-bit result then writes it directly ++ into the guest state VSX register. */ ++ UInt i, shift_by, sel_shift_by, half_sel; ++ ULong index, src, result[2]; ++ ULong j; ++ ++ result[0] = 0; ++ result[1] = 0; ++ j = 0; ++ ++ /* The algorithm in the ISA is written with IBM numbering zero on left and ++ N-1 on right. The loop index is converted to "i" to match the algorithm ++ for claritiy of matching the C code to the algorithm in the ISA. */ ++ ++ if (imm == 0b00) { // big endian expansion ++ /* If IMM=0b00000, let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement an ++ expansion of the leftmost halfword elements of a source vector into ++ the halfword elements of a result vector specified by the halfword- ++ element mask in VSR[VRB+32]. ++ */ ++ for( index = 0; index < 8; index++) { ++ i = 7 - index; ++ ++ shift_by = i*16; ++ ++ if ( i >= 4) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 15; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ // half-word i, byte 0 ++ result[half_sel] |= (2*j + 0x0) << (shift_by+8); ++ // half-word i, byte 1 ++ result[half_sel] |= (2*j + 0x1) << shift_by; ++ j++; ++ } else { ++ result[half_sel] |= (2*index + 0x10) << (shift_by+8); ++ result[half_sel] |= (2*index + 0x11) << shift_by; ++ } ++ } ++ ++ } else if (imm == 0b01) { // big endian expansion ++ /* If IMM=0b00001,let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement a ++ compression of the sparse halfword elements in a source vector ++ specified by the halfword-element mask in VSR[VRB+32] into the ++ leftmost halfword elements of a result vector. ++ */ ++ for( index = 0; index < 8; index++) { ++ i = 7 - index; ++ ++ shift_by = i*16; ++ ++ if ( i >= 4) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 15; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 4) { ++ // half-word i, byte 0 ++ result[1] |= (2*index + 0x0) << ((7 - j)*16 + 8); ++ // half-word i, byte 1 ++ result[1] |= (2*index + 0x1) << ((7 - j)*16); ++ } else { ++ // half-word i, byte 0 ++ result[0] |= (2*index + 0x0) << ((3 - j)*16 + 8); ++ // half-word i, byte 1 ++ result[0] |= (2*index + 0x1) << ((3 - j)*16); ++ } ++ j++; ++ } ++ } ++ ++ } else if (imm == 0b10) { //little-endian expansion ++ /* If IMM=0b00010, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement an ++ expansion of the rightmost halfword elements of a source vector into ++ the halfword elements of a result vector specified by the halfword- ++ element mask in VSR[VRB+32]. ++ */ ++ for( index = 0; index < 8; index++) { ++ i = index; ++ shift_by = i*16; ++ ++ if ( i >= 4) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 15; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ // half-word i, byte 0 ++ result[half_sel] |= (2*j + 0x00) << shift_by; ++ // half-word i, byte 1 ++ result[half_sel] |= (2*j + 0x01) << (shift_by+8); ++ j++; ++ ++ } else { ++ // half-word i, byte 0 ++ result[half_sel] |= (2*index + 0x10) << shift_by; ++ // half-word i, byte 1 ++ result[half_sel] |= (2*index + 0x11) << (shift_by+8); ++ } ++ } ++ ++ } else if (imm == 0b11) { //little-endian compression ++ /* If IMM=0b00011, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement a ++ compression of the sparse halfword elements in a source vector ++ specified by the halfword-element mask in VSR[VRB+32] into the ++ rightmost halfword elements of a result vector. */ ++ for( index = 0; index < 8; index++) { ++ i = index; ++ shift_by = i*16; ++ ++ if ( i >= 4) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 15; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 4) { ++ // half-word j, byte 0 ++ result[0] |= (2*index + 0x0) << ((j-4)*16); ++ // half-word j, byte 1 ++ result[0] |= (2*index + 0x1) << ((j-4)*16+8); ++ } else { ++ // half-word j, byte 0 ++ result[1] |= (2*index + 0x0) << (j*16); ++ // half-word j, byte 1 ++ result[1] |= (2*index + 0x1) << ((j*16)+8); ++ } ++ j++; ++ } ++ } ++ ++ } else { ++ vex_printf("ERROR, vector_gen_pvc_hword_dirty_mask_helper, imm value %u not supported.\n", ++ imm); ++ vassert(0); ++ } ++ write_VSX_entry( gst, reg_offset, result); ++} ++ ++/* CALLED FROM GENERATED CODE */ ++void vector_gen_pvc_word_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ULong src_lo, ++ UInt reg_offset, UInt imm ) { ++ /* The function computes the 128-bit result then writes it directly ++ into the guest state VSX register. */ ++ UInt i, shift_by, sel_shift_by, half_sel; ++ ULong index, src, result[2]; ++ ULong j; ++ ++ result[0] = 0; ++ result[1] = 0; ++ j = 0; ++ ++ /* The algorithm in the ISA is written with IBM numbering zero on left and ++ N-1 on right. The loop index is converted to "i" to match the algorithm ++ for claritiy of matching the C code to the algorithm in the ISA. */ ++ ++ if (imm == 0b00) { // big endian expansion ++ /* If IMM=0b00000, let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement an ++ expansion of the leftmost word elements of a source vector into the ++ word elements of a result vector specified by the word-element mask ++ in VSR[VRB+32]. ++ */ ++ for( index = 0; index < 4; index++) { ++ i = 3 - index; ++ ++ shift_by = i*32; ++ ++ if ( i >= 2) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 31; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= (4*j+0) << (shift_by+24); // word i, byte 0 ++ result[half_sel] |= (4*j+1) << (shift_by+16); // word i, byte 1 ++ result[half_sel] |= (4*j+2) << (shift_by+8); // word i, byte 2 ++ result[half_sel] |= (4*j+3) << shift_by; // word i, byte 3 ++ j++; ++ } else { ++ result[half_sel] |= (4*index + 0x10) << (shift_by+24); ++ result[half_sel] |= (4*index + 0x11) << (shift_by+16); ++ result[half_sel] |= (4*index + 0x12) << (shift_by+8); ++ result[half_sel] |= (4*index + 0x13) << shift_by; ++ } ++ } ++ ++ } else if (imm == 0b01) { // big endian compression ++ /* If IMM=0b00001, let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement a ++ compression of the sparse word elements in a source vector specified ++ by the word-element mask in VSR[VRB+32] into the leftmost word ++ elements of a result vector. ++ */ ++ for( index = 0; index < 4; index++) { ++ i = 3 - index; ++ ++ shift_by = i*32; ++ ++ if ( i >= 2) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 31; ++ ++ if (((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 2) { ++ // word j, byte 0 ++ result[1] |= (4*index+0) << ((3 - j)*32 + 24); ++ // word j, byte 1 ++ result[1] |= (4*index+1) << ((3 - j)*32 + 16); ++ // word j, byte 2 ++ result[1] |= (4*index+2) << ((3 - j)*32 + 8); ++ // word j, byte 3 ++ result[1] |= (4*index+3) << ((3 - j)*32 + 0); ++ } else { ++ result[0] |= (4*index+0) << ((1 - j)*32 + 24); ++ result[0] |= (4*index+1) << ((1 - j)*32 + 16); ++ result[0] |= (4*index+2) << ((1 - j)*32 + 8); ++ result[0] |= (4*index+3) << ((1 - j)*32 + 0); ++ } ++ j++; ++ } ++ } ++ ++ } else if (imm == 0b10) { //little-endian expansion ++ /* If IMM=0b00010, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement an ++ expansion of the rightmost word elements of a source vector into the ++ word elements of a result vector specified by the word-element mask ++ in VSR[VRB+32]. ++ */ ++ for( index = 0; index < 4; index++) { ++ i = index; ++ ++ shift_by = i*32; ++ ++ if ( i >= 2) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 31; ++ ++ if (((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= (4*j+0) << (shift_by + 0); // word j, byte 0 ++ result[half_sel] |= (4*j+1) << (shift_by + 8); // word j, byte 1 ++ result[half_sel] |= (4*j+2) << (shift_by + 16); // word j, byte 2 ++ result[half_sel] |= (4*j+3) << (shift_by + 24); // word j, byte 3 ++ j++; ++ } else { ++ result[half_sel] |= (4*index + 0x10) << (shift_by + 0); ++ result[half_sel] |= (4*index + 0x11) << (shift_by + 8); ++ result[half_sel] |= (4*index + 0x12) << (shift_by + 16); ++ result[half_sel] |= (4*index + 0x13) << (shift_by + 24); ++ } ++ } ++ ++ } else if (imm == 0b11) { //little-endian compression ++ /* If IMM=0b00011, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement a ++ compression of the sparse word elements in a source vector specified ++ by the word-element mask in VSR[VRB+32] into the rightmost word ++ elements of a result vector. */ ++ for( index = 0; index < 4; index++) { ++ i =index; ++ ++ shift_by = i*32; ++ ++ if ( i >= 2) { ++ src = src_hi; ++ shift_by = shift_by - 64; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = shift_by + 31; ++ ++ if (((src >> sel_shift_by) & 0x1) == 1) { ++ if (j >= 2){ ++ // word j, byte 0 ++ result[0] |= (4*index + 0x0) << ((j-2)*32+0); ++ // word j, byte 1 ++ result[0] |= (4*index + 0x1) << ((j-2)*32+8); ++ // word j, byte 2 ++ result[0] |= (4*index + 0x2) << ((j-2)*32+16); ++ // word j, byte 3 ++ result[0] |= (4*index + 0x3) << ((j-2)*32+24); ++ } else { ++ result[1] |= (4*index + 0x0) << (j*32+0); ++ result[1] |= (4*index + 0x1) << (j*32+8); ++ result[1] |= (4*index + 0x2) << (j*32+16); ++ result[1] |= (4*index + 0x3) << (j*32+24); ++ } ++ j++; ++ } ++ } ++ } else { ++ vex_printf("ERROR, vector_gen_pvc_word_mask_dirty_helper, imm value %u not supported.\n", ++ imm); ++ vassert(0); ++ } ++ ++ write_VSX_entry( gst, reg_offset, result); ++} ++ ++/* CALLED FROM GENERATED CODE */ ++void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, ++ ULong src_hi, ULong src_lo, ++ UInt reg_offset, UInt imm ) { ++ /* The function computes the 128-bit result then writes it directly ++ into the guest state VSX register. */ ++ UInt sel_shift_by, half_sel; ++ ULong index, src, result[2]; ++ ULong j, i; ++ ++ result[0] = 0; ++ result[1] = 0; ++ j = 0; ++ ++ /* The algorithm in the ISA is written with IBM numbering zero on left and ++ N-1 on right. The loop index is converted to "i" to match the algorithm ++ for claritiy of matching the C code to the algorithm in the ISA. */ ++ ++ if (imm == 0b00) { // big endian expansion ++ /* If IMM=0b00000, let pcv be the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement an ++ expansion of the leftmost doubleword elements of a source vector into ++ the doubleword elements of a result vector specified by the ++ doubleword-element mask in VSR[VRB+32]. ++ */ ++ for( index = 0; index < 2; index++) { ++ i = 1 - index; ++ ++ if ( i == 1) { ++ src = src_hi; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = 63; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= (8*j + 0x0) << 56; // dword i, byte 0 ++ result[half_sel] |= (8*j + 0x1) << 48; // dword i, byte 1 ++ result[half_sel] |= (8*j + 0x2) << 40; // dword i, byte 2 ++ result[half_sel] |= (8*j + 0x3) << 32; // dword i, byte 3 ++ result[half_sel] |= (8*j + 0x4) << 24; // dword i, byte 4 ++ result[half_sel] |= (8*j + 0x5) << 16; // dword i, byte 5 ++ result[half_sel] |= (8*j + 0x6) << 8; // dword i, byte 6 ++ result[half_sel] |= (8*j + 0x7) << 0; // dword i, byte 7 ++ j++; ++ } else { ++ result[half_sel] |= (8*index + 0x10) << 56; ++ result[half_sel] |= (8*index + 0x11) << 48; ++ result[half_sel] |= (8*index + 0x12) << 40; ++ result[half_sel] |= (8*index + 0x13) << 32; ++ result[half_sel] |= (8*index + 0x14) << 24; ++ result[half_sel] |= (8*index + 0x15) << 16; ++ result[half_sel] |= (8*index + 0x16) << 8; ++ result[half_sel] |= (8*index + 0x17) << 0; ++ } ++ } ++ } else if (imm == 0b01) { // big endian compression ++ /* If IMM=0b00001, let pcv be the the permute control vector required to ++ enable a left-indexed permute (vperm or xxperm) to implement a ++ compression of the sparse doubleword elements in a source vector ++ specified by the doubleword-element mask in VSR[VRB+32] into the ++ leftmost doubleword elements of a result vector. ++ */ ++ for( index = 0; index < 2; index++) { ++ i = 1 - index; ++ ++ if ( i == 1) { ++ src = src_hi; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = 63; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ if (j == 1) { ++ result[1] |= (8*index + 0x0) << 56; // double-word j, byte 0 ++ result[1] |= (8*index + 0x1) << 48; // double-word j, byte 1 ++ result[1] |= (8*index + 0x2) << 40; // double-word j, byte 2 ++ result[1] |= (8*index + 0x3) << 32; // double-word j, byte 3 ++ result[1] |= (8*index + 0x4) << 24; // double-word j, byte 4 ++ result[1] |= (8*index + 0x5) << 16; // double-word j, byte 5 ++ result[1] |= (8*index + 0x6) << 8; // double-word j, byte 6 ++ result[1] |= (8*index + 0x7) << 0; // double-word j, byte 7 ++ } else { ++ result[0] |= (8*index + 0x0) << 56; // double-word j, byte 0 ++ result[0] |= (8*index + 0x1) << 48; // double-word j, byte 1 ++ result[0] |= (8*index + 0x2) << 40; // double-word j, byte 2 ++ result[0] |= (8*index + 0x3) << 32; // double-word j, byte 3 ++ result[0] |= (8*index + 0x4) << 24; // double-word j, byte 4 ++ result[0] |= (8*index + 0x5) << 16; // double-word j, byte 5 ++ result[0] |= (8*index + 0x6) << 8; // double-word j, byte 6 ++ result[0] |= (8*index + 0x7) << 0; // double-word j, byte 7 ++ } ++ j++; ++ } ++ } ++ } else if (imm == 0b10) { //little-endian expansion ++ /* If IMM=0b00010, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement an ++ expansion of the rightmost doubleword elements of a source vector ++ into the doubleword elements of a result vector specified by the ++ doubleword-element mask in VSR[VRB+32]. ++ */ ++ ++ for( index = 0; index < 2; index++) { ++ i = index; ++ ++ if ( i == 1) { ++ src = src_hi; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = 63; ++ ++ if ( ((src >> sel_shift_by) & 0x1) == 1) { ++ result[half_sel] |= (8*j+0) << 0; // double-word i, byte 0 ++ result[half_sel] |= (8*j+1) << 8; // double-word i, byte 1 ++ result[half_sel] |= (8*j+2) << 16; // double-word i, byte 2 ++ result[half_sel] |= (8*j+3) << 24; // double-word i, byte 3 ++ result[half_sel] |= (8*j+4) << 32; // double-word i, byte 4 ++ result[half_sel] |= (8*j+5) << 40; // double-word i, byte 5 ++ result[half_sel] |= (8*j+6) << 48; // double-word i, byte 6 ++ result[half_sel] |= (8*j+7) << 56; // double-word i, byte 7 ++ j++; ++ } else { ++ result[half_sel] |= (8*index + 0x10) << 0; ++ result[half_sel] |= (8*index + 0x11) << 8; ++ result[half_sel] |= (8*index + 0x12) << 16; ++ result[half_sel] |= (8*index + 0x13) << 24; ++ result[half_sel] |= (8*index + 0x14) << 32; ++ result[half_sel] |= (8*index + 0x15) << 40; ++ result[half_sel] |= (8*index + 0x16) << 48; ++ result[half_sel] |= (8*index + 0x17) << 56; ++ } ++ } ++ ++ } else if (imm == 0b11) { //little-endian compression ++ /* If IMM=0b00011, let pcv be the permute control vector required to ++ enable a right-indexed permute (vpermr or xxpermr) to implement a ++ compression of the sparse doubleword elements in a source vector ++ specified by the doubleword-element mask in VSR[VRB+32] into the ++ rightmost doubleword elements of a result vector. */ ++ for( index = 0; index < 2; index++) { ++ i = index; ++ ++ if ( i == 1) { ++ src = src_hi; ++ half_sel = 0; ++ } else { ++ src = src_lo; ++ half_sel = 1; ++ } ++ ++ sel_shift_by = 63; ++ ++ if (((src >> sel_shift_by) & 0x1) == 1) { ++ if (j == 1) { ++ result[0] |= (8*index + 0x0) << 0; // double-word j, byte 0 ++ result[0] |= (8*index + 0x1) << 8; // double-word j, byte 1 ++ result[0] |= (8*index + 0x2) << 16; // double-word j, byte 2 ++ result[0] |= (8*index + 0x3) << 24; // double-word j, byte 3 ++ result[0] |= (8*index + 0x4) << 32; // double-word j, byte 4 ++ result[0] |= (8*index + 0x5) << 40; // double-word j, byte 5 ++ result[0] |= (8*index + 0x6) << 48; // double-word j, byte 6 ++ result[0] |= (8*index + 0x7) << 56; // double-word j, byte 7 ++ } else { ++ result[1] |= (8*index + 0x0) << 0; ++ result[1] |= (8*index + 0x1) << 8; ++ result[1] |= (8*index + 0x2) << 16; ++ result[1] |= (8*index + 0x3) << 24; ++ result[1] |= (8*index + 0x4) << 32; ++ result[1] |= (8*index + 0x5) << 40; ++ result[1] |= (8*index + 0x6) << 48; ++ result[1] |= (8*index + 0x7) << 56; ++ } ++ j++; ++ } ++ } ++ } else { ++ vex_printf("ERROR, vector_gen_pvc_dword_mask_helper, imm value %u not supported.\n", ++ imm); ++ vassert(0); ++ } ++ ++ write_VSX_entry( gst, reg_offset, result); ++} + + /*------------------------------------------------*/ + /*---- VSX Matrix signed integer GER functions ---*/ +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index bcabf69dd..354be6b53 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -3322,6 +3322,7 @@ static IRExpr * locate_vector_ele_eq ( IRTemp src, IRExpr *value, + #define DFORM_IMMASK 0xffffffff + #define DSFORM_IMMASK 0xfffffffc + #define DQFORM_IMMASK 0xfffffff0 ++#define DA8LSFORM_IMMASK 0x3fffffff // Algebraic 8LS Dform + + #define ISA_3_1_PREFIX_CHECK if (prefix) {if (!allow_isa_3_1) goto decode_noIsa3_1;} + +@@ -6109,6 +6110,87 @@ static void vsx_matrix_64bit_float_ger ( const VexAbiInfo* vbi, + stmt( IRStmt_Dirty(d) ); + } + ++static void vector_gen_pvc_mask ( const VexAbiInfo* vbi, ++ IRExpr *src, UInt IMM, ++ UInt opc2, UInt VSX_addr ) { ++ /* The function takes a 64-bit source and an immediate value. The function ++ calls a helper to execute the xxgenpcvbm, xxgenpcvhm, xxgenpcvwm, ++ xxgenpcvdm instruction. The instructions are not practical to do with ++ Iops. The instruction is implemented with a dirty helper that ++ calculates the 128-bit result and writes it directly into the guest ++ state VSX register. ++ */ ++ IRTemp src_hi = newTemp( Ity_I64); ++ IRTemp src_lo = newTemp( Ity_I64); ++ ++ IRDirty* d; ++ ++ vassert( (VSX_addr >= 0) && (VSX_addr < 64) ); ++ UInt reg_offset = offsetofPPCGuestState( guest_VSR0 ) ++ + sizeof(U128) * VSX_addr; ++ ++ assign( src_hi, unop( Iop_V128HIto64, src ) ); ++ assign( src_lo, unop( Iop_V128to64, src ) ); ++ ++ IRExpr** args = mkIRExprVec_5( ++ IRExpr_GSPTR(), ++ mkexpr( src_hi ), ++ mkexpr( src_lo ), ++ mkU32( reg_offset ), ++ mkU64( IMM ) ); ++ ++ switch( opc2 ) { ++ case 0x394: // xxgenpcvbm ++ d = unsafeIRDirty_0_N ( ++ 0 /*regparms*/, ++ "vector_gen_pvc_byte_mask_dirty_helper", ++ fnptr_to_fnentry( vbi, ++ &vector_gen_pvc_byte_mask_dirty_helper ), ++ args); ++ break; ++ ++ case 0x395: // xxgenpcvhm ++ d = unsafeIRDirty_0_N ( ++ 0 /*regparms*/, ++ "vector_gen_pvc_hword_mask_dirty_helper", ++ fnptr_to_fnentry( vbi, ++ &vector_gen_pvc_hword_mask_dirty_helper ), ++ args); ++ break; ++ ++ case 0x3B4: // xxgenpcvwm ++ d = unsafeIRDirty_0_N ( ++ 0 /*regparms*/, ++ "vector_gen_pvc_word_mask_dirty_helper", ++ fnptr_to_fnentry( vbi, ++ &vector_gen_pvc_word_mask_dirty_helper ), ++ args); ++ break; ++ ++ case 0x3B5: // xxgenpcvdm ++ d = unsafeIRDirty_0_N ( ++ 0 /*regparms*/, ++ "vector_gen_pvc_dword_mask_dirty_helper", ++ fnptr_to_fnentry( vbi, ++ &vector_gen_pvc_dword_mask_dirty_helper ), ++ args); ++ break; ++ default: ++ vex_printf("ERROR: Unkown instruction = %u in vector_gen_pvc_mask()\n", ++ opc2); ++ return; ++ } ++ ++ d->nFxState = 1; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Modify; ++ d->fxState[0].size = sizeof(U128); ++ d->fxState[0].offset = reg_offset; ++ ++ /* execute the dirty call, side-effecting guest state */ ++ stmt( IRStmt_Dirty(d) ); ++} ++ + static IRExpr * UNSIGNED_CMP_GT_V128 ( IRExpr *vA, IRExpr *vB ) { + /* This function does an unsigned compare of two V128 values. The + * function is for use in 32-bit mode only as it is expensive. The +@@ -35227,6 +35309,54 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + return True; + } + ++static Bool dis_vector_generate_pvc_from_mask ( UInt prefix, ++ UInt theInstr, ++ const VexAbiInfo* vbi ) ++{ ++ UChar XT_addr = ifieldRegXT(theInstr); ++ UChar vB_addr = ifieldRegB(theInstr); ++ IRTemp vB = newTemp( Ity_V128 ); ++ UInt opc2 = ifieldOPClo10(theInstr); ++ UInt IMM = IFIELD(theInstr, (31-15), 5); // bits[11:15] ++ ++ assign( vB, getVReg( vB_addr ) ); ++ ++ switch( opc2 ) { ++ case 0x394: ++ DIP("xxgenpcvbm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); ++ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and ++ write it to the VSX result register. */ ++ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); ++ break; ++ ++ case 0x395: ++ DIP("xxgenpcvhm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); ++ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and ++ write it to the VSX result register. */ ++ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); ++ break; ++ ++ case 0x3B4: ++ DIP("xxgenpcvwm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); ++ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and ++ write it to the VSX result register. */ ++ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); ++ break; ++ ++ case 0x3B5: ++ DIP("xxgenpcvdm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); ++ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and ++ write it to the VSX result register. */ ++ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); ++ break; ++ ++ default: ++ return False; ++ } ++ ++ return True; ++} ++ + static Int dis_nop_prefix ( UInt prefix, UInt theInstr ) + { + Bool is_prefix = prefix_instruction( prefix ); +@@ -35748,14 +35878,9 @@ DisResult disInstr_PPC_WRK ( + } + goto decode_failure; + +- case 0x31: // lfsu, stxv ++ case 0x31: // lfsu + if (!allow_F) goto decode_noF; +- if (prefix_instruction( prefix )) { // stxv +- if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; +- if (dis_fp_pair_prefix( prefix, theInstr )) goto decode_success; +- } else { // lfsu +- if (dis_fp_load( prefix, theInstr )) goto decode_success; +- } ++ if (dis_fp_load( prefix, theInstr )) goto decode_success; + goto decode_failure; + + case 0x32: +@@ -35842,7 +35967,6 @@ DisResult disInstr_PPC_WRK ( + case 0x39: // pld, lxsd, lxssp, lfdp + { + UInt opc2tmp = ifieldOPC0o2(theInstr); +- + if (!allow_F) goto decode_noF; + if (prefix_instruction( prefix )) { // pld + if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; +@@ -36125,12 +36249,6 @@ DisResult disInstr_PPC_WRK ( + goto decode_failure; + } + +- /* The vsxOpc2 returned is the "normalized" value, representing the +- * instructions secondary opcode as taken from the standard secondary +- * opcode field [21:30] (IBM notatition), even if the actual field +- * is non-standard. These normalized values are given in the opcode +- * appendices of the ISA 2.06 document. +- */ + if ( ( opc2 == 0x168 ) && ( IFIELD( theInstr, 19, 2 ) == 0 ) )// xxspltib + { + /* This is a special case of the XX1 form where the RA, RB +@@ -36153,6 +36271,23 @@ DisResult disInstr_PPC_WRK ( + goto decode_failure; + } + ++ if ( ( opc2 == 0x394 ) || // xxgenpcvbm ++ ( opc2 == 0x395 ) || // xxgenpcvwm ++ ( opc2 == 0x3B4 ) || // xxgenpcvhm ++ ( opc2 == 0x3B5 ) ) { // xxgenpcvdm ++ if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; ++ if (dis_vector_generate_pvc_from_mask( prefix, theInstr, ++ abiinfo )) ++ goto decode_success; ++ goto decode_failure; ++ } ++ ++ /* The vsxOpc2 returned is the "normalized" value, representing the ++ * instructions secondary opcode as taken from the standard secondary ++ * opcode field [21:30] (IBM notatition), even if the actual field ++ * is non-standard. These normalized values are given in the opcode ++ * appendices of the ISA 2.06 document. ++ */ + vsxOpc2 = get_VSX60_opc2(opc2, theInstr); + + switch (vsxOpc2) { +commit 078f89e99b6f62e043f6138c6a7ae238befc1f2a +Author: Carl Love +Date: Fri Feb 26 15:46:55 2021 -0600 + + PPC64: Reduced-Precision - bfloat16 Outer Product & Format Conversion Operations + + Add support for: + + pmxvbf16ger2 Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) + pmxvbf16ger2pp Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive + multiply, Positive accumulate + pmxvbf16ger2pn Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive + multiply, Negative accumulate + pmxvbf16ger2np Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative + multiply, Positive accumulate + pmxvbf16ger2nn Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative + multiply, Negative accumulate + xvbf16ger2VSX Vector bfloat16 GER (Rank-2 Update) + xvbf16ger2pp VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Positive + accumulate + xvbf16ger2pn VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Negative + accumulate + xvbf16ger2np VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Positive + accumulate + xvbf16ger2nn VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Negative + accumulate + xvcvbf16sp VSX Vector Convert bfloat16 to Single-Precision format + xvcvspbf16 VSX Vector Convert with round Single-Precision to bfloat16 format + +diff --git a/VEX/priv/guest_ppc_defs.h b/VEX/priv/guest_ppc_defs.h +index 54ce923a9..d36d6c07d 100644 +--- a/VEX/priv/guest_ppc_defs.h ++++ b/VEX/priv/guest_ppc_defs.h +@@ -150,6 +150,8 @@ extern ULong convert_to_zoned_helper( ULong src_hi, ULong src_low, + ULong return_upper ); + extern ULong convert_to_national_helper( ULong src, ULong return_upper ); + extern ULong convert_from_zoned_helper( ULong src_hi, ULong src_low ); ++extern ULong convert_from_floattobf16_helper( ULong src ); ++extern ULong convert_from_bf16tofloat_helper( ULong src ); + extern ULong convert_from_national_helper( ULong src_hi, ULong src_low ); + extern ULong generate_C_FPCC_helper( ULong size, ULong src_hi, ULong src ); + extern ULong extract_bits_under_mask_helper( ULong src, ULong mask, +@@ -201,6 +203,11 @@ extern void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, + #define XVF16GER2PN 0b10010010 + #define XVF16GER2NP 0b01010010 + #define XVF16GER2NN 0b11010010 ++#define XVBF16GER2 0b00110011 ++#define XVBF16GER2PP 0b00110010 ++#define XVBF16GER2PN 0b10110010 ++#define XVBF16GER2NP 0b01110010 ++#define XVBF16GER2NN 0b11110010 + #define XVF32GER 0b00011011 + #define XVF32GERPP 0b00011010 + #define XVF32GERPN 0b10011010 +diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c +index 75497abb9..6bcee966d 100644 +--- a/VEX/priv/guest_ppc_helpers.c ++++ b/VEX/priv/guest_ppc_helpers.c +@@ -1905,6 +1905,125 @@ static Double conv_f16_to_double( ULong input ) + # endif + } + ++#define BF16_SIGN_MASK 0x8000 ++#define BF16_EXP_MASK 0x7F80 ++#define BF16_FRAC_MASK 0x007F ++#define BF16_BIAS 127 ++#define BF16_MAX_UNBIASED_EXP 127 ++#define BF16_MIN_UNBIASED_EXP -126 ++#define FLOAT_SIGN_MASK 0x80000000 ++#define FLOAT_EXP_MASK 0x7F800000 ++#define FLOAT_FRAC_MASK 0x007FFFFF ++#define FLOAT_FRAC_BIT8 0x00008000 ++#define FLOAT_BIAS 127 ++ ++static Float conv_bf16_to_float( UInt input ) ++{ ++ /* input is 16-bit bfloat. ++ bias +127, exponent 8-bits, fraction 7-bits ++ ++ output is 32-bit float. ++ bias +127, exponent 8-bits, fraction 22-bits ++ */ ++ ++ UInt input_exp, input_fraction, unbiased_exp; ++ UInt output_exp, output_fraction; ++ UInt sign; ++ union convert_t conv; ++ ++ sign = (UInt)(input & BF16_SIGN_MASK); ++ input_exp = input & BF16_EXP_MASK; ++ unbiased_exp = (input_exp >> 7) - (UInt)BF16_BIAS; ++ input_fraction = input & BF16_FRAC_MASK; ++ ++ if (((input_exp & BF16_EXP_MASK) == BF16_EXP_MASK) && ++ (input_fraction != 0)) { ++ /* input is NaN or SNaN, exp all 1's, fraction != 0 */ ++ output_exp = FLOAT_EXP_MASK; ++ output_fraction = input_fraction; ++ ++ } else if(((input_exp & BF16_EXP_MASK) == BF16_EXP_MASK) && ++ ( input_fraction == 0)) { ++ /* input is infinity, exp all 1's, fraction = 0 */ ++ output_exp = FLOAT_EXP_MASK; ++ output_fraction = 0; ++ ++ } else if((input_exp == 0) && (input_fraction == 0)) { ++ /* input is zero */ ++ output_exp = 0; ++ output_fraction = 0; ++ ++ } else if((input_exp == 0) && (input_fraction != 0)) { ++ /* input is denormal */ ++ output_fraction = input_fraction; ++ output_exp = (-(Int)BF16_BIAS + (Int)FLOAT_BIAS ) << 23; ++ ++ } else { ++ /* result is normal */ ++ output_exp = (unbiased_exp + FLOAT_BIAS) << 23; ++ output_fraction = input_fraction; ++ } ++ ++ conv.u32 = sign << (31 - 15) | output_exp | (output_fraction << (23-7)); ++ return conv.f; ++} ++ ++static UInt conv_float_to_bf16( UInt input ) ++{ ++ /* input is 32-bit float stored as unsigned 32-bit. ++ bias +127, exponent 8-bits, fraction 23-bits ++ ++ output is 16-bit bfloat. ++ bias +127, exponent 8-bits, fraction 7-bits ++ ++ If the unbiased exponent of the input is greater than the max floating ++ point unbiased exponent value, the result of the floating point 16-bit ++ value is infinity. ++ */ ++ ++ UInt input_exp, input_fraction; ++ UInt output_exp, output_fraction; ++ UInt result, sign; ++ ++ sign = input & FLOAT_SIGN_MASK; ++ input_exp = input & FLOAT_EXP_MASK; ++ input_fraction = input & FLOAT_FRAC_MASK; ++ ++ if (((input_exp & FLOAT_EXP_MASK) == FLOAT_EXP_MASK) && ++ (input_fraction != 0)) { ++ /* input is NaN or SNaN, exp all 1's, fraction != 0 */ ++ output_exp = BF16_EXP_MASK; ++ output_fraction = (ULong)input_fraction >> (23 - 7); ++ } else if (((input_exp & FLOAT_EXP_MASK) == FLOAT_EXP_MASK) && ++ ( input_fraction == 0)) { ++ /* input is infinity, exp all 1's, fraction = 0 */ ++ output_exp = BF16_EXP_MASK; ++ output_fraction = 0; ++ } else if ((input_exp == 0) && (input_fraction == 0)) { ++ /* input is zero */ ++ output_exp = 0; ++ output_fraction = 0; ++ } else if ((input_exp == 0) && (input_fraction != 0)) { ++ /* input is denormal */ ++ output_exp = 0; ++ output_fraction = (ULong)input_fraction >> (23 - 7); ++ } else { ++ /* result is normal */ ++ output_exp = (input_exp - BF16_BIAS + FLOAT_BIAS) >> (23 - 7); ++ output_fraction = (ULong)input_fraction >> (23 - 7); ++ ++ /* Round result. Look at the 8th bit position of the 32-bit floating ++ pointt fraction. The F16 fraction is only 7 bits wide so if the 8th ++ bit of the F32 is a 1 we need to round up by adding 1 to the output ++ fraction. */ ++ if ((input_fraction & FLOAT_FRAC_BIT8) == FLOAT_FRAC_BIT8) ++ /* Round the F16 fraction up by 1 */ ++ output_fraction = output_fraction + 1; ++ } ++ ++ result = sign >> (31 - 15) | output_exp | output_fraction; ++ return result; ++} + + static Float conv_double_to_float( Double src ) + { +@@ -1942,6 +2061,36 @@ static Float negate_float( Float input ) + return -input; + } + ++/* This C-helper takes a vector of two 32-bit floating point values ++ * and returns a vector containing two 16-bit bfloats. ++ input: word0 word1 ++ output 0x0 hword1 0x0 hword3 ++ Called from generated code. ++ */ ++ULong convert_from_floattobf16_helper( ULong src ) { ++ ULong resultHi, resultLo; ++ ++ resultHi = (ULong)conv_float_to_bf16( (UInt)(src >> 32)); ++ resultLo = (ULong)conv_float_to_bf16( (UInt)(src & 0xFFFFFFFF)); ++ return (resultHi << 32) | resultLo; ++ ++} ++ ++/* This C-helper takes a vector of two 16-bit bfloating point values ++ * and returns a vector containing one 32-bit float. ++ input: 0x0 hword1 0x0 hword3 ++ output: word0 word1 ++ */ ++ULong convert_from_bf16tofloat_helper( ULong src ) { ++ ULong result; ++ union convert_t conv; ++ conv.f = conv_bf16_to_float( (UInt)(src >> 32) ); ++ result = (ULong) conv.u32; ++ conv.f = conv_bf16_to_float( (UInt)(src & 0xFFFFFFFF)); ++ result = (result << 32) | (ULong) conv.u32; ++ return result; ++ } ++ + void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, + UInt offset_ACC, + ULong srcA_hi, ULong srcA_lo, +@@ -2002,24 +2151,44 @@ void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, + srcB_word[0][j] = (UInt)((srcB_lo >> (16-16*j)) & mask); + } + ++ /* Note the isa is not consistent in the src naming. Will use the ++ naming src10, src11, src20, src21 used with xvf16ger2 instructions. ++ */ + for( j = 0; j < 4; j++) { + if (((pmsk >> 1) & 0x1) == 0) { + src10 = 0; + src20 = 0; + } else { +- src10 = conv_f16_to_double((ULong)srcA_word[i][0]); +- src20 = conv_f16_to_double((ULong)srcB_word[j][0]); ++ if (( inst == XVF16GER2 ) || ( inst == XVF16GER2PP ) ++ || ( inst == XVF16GER2PN ) || ( inst == XVF16GER2NP ) ++ || ( inst == XVF16GER2NN )) { ++ src10 = conv_f16_to_double((ULong)srcA_word[i][0]); ++ src20 = conv_f16_to_double((ULong)srcB_word[j][0]); ++ } else { ++ /* Input is in bfloat format, result is stored in the ++ "traditional" 64-bit float format. */ ++ src10 = (double)conv_bf16_to_float((ULong)srcA_word[i][0]); ++ src20 = (double)conv_bf16_to_float((ULong)srcB_word[j][0]); ++ } + } + + if ((pmsk & 0x1) == 0) { + src11 = 0; + src21 = 0; + } else { +- src11 = conv_f16_to_double((ULong)srcA_word[i][1]); +- src21 = conv_f16_to_double((ULong)srcB_word[j][1]); ++ if (( inst == XVF16GER2 ) || ( inst == XVF16GER2PP ) ++ || ( inst == XVF16GER2PN ) || ( inst == XVF16GER2NP ) ++ || ( inst == XVF16GER2NN )) { ++ src11 = conv_f16_to_double((ULong)srcA_word[i][1]); ++ src21 = conv_f16_to_double((ULong)srcB_word[j][1]); ++ } else { ++ /* Input is in bfloat format, result is stored in the ++ "traditional" 64-bit float format. */ ++ src11 = (double)conv_bf16_to_float((ULong)srcA_word[i][1]); ++ src21 = (double)conv_bf16_to_float((ULong)srcB_word[j][1]); ++ } + } + +- + prod = src10 * src20; + msum = prod + src11 * src21; + +@@ -2027,26 +2196,26 @@ void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, + /* Note, we do not track the exception handling bits + ox, ux, xx, si, mz, vxsnan and vximz in the FPSCR. */ + +- if ( inst == XVF16GER2 ) ++ if (( inst == XVF16GER2 ) || ( inst == XVBF16GER2 ) ) + result[j] = reinterpret_float_as_int( + conv_double_to_float(msum) ); + +- else if ( inst == XVF16GER2PP ) ++ else if (( inst == XVF16GER2PP ) || (inst == XVBF16GER2PP )) + result[j] = reinterpret_float_as_int( + conv_double_to_float(msum) + + acc_word[j] ); + +- else if ( inst == XVF16GER2PN ) ++ else if (( inst == XVF16GER2PN ) || ( inst == XVBF16GER2PN )) + result[j] = reinterpret_float_as_int( + conv_double_to_float(msum) + + negate_float( acc_word[j] ) ); + +- else if ( inst == XVF16GER2NP ) ++ else if (( inst == XVF16GER2NP ) || ( inst == XVBF16GER2NP )) + result[j] = reinterpret_float_as_int( + conv_double_to_float( negate_double( msum ) ) + + acc_word[j] ); + +- else if ( inst == XVF16GER2NN ) ++ else if (( inst == XVF16GER2NN ) || ( inst == XVBF16GER2NN )) + result[j] = reinterpret_float_as_int( + conv_double_to_float( negate_double( msum ) ) + + negate_float( acc_word[j] ) ); +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 354be6b53..20553a539 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -5688,6 +5688,57 @@ static IRExpr * convert_from_national ( const VexAbiInfo* vbi, IRExpr *src ) { + return mkexpr( result ); + } + ++static IRExpr * vector_convert_floattobf16 ( const VexAbiInfo* vbi, ++ IRExpr *src ) { ++ /* The function takes 128-bit value containing four 32-bit floats and ++ returns a 128-bit value containint four 16-bit bfloats in the lower ++ halfwords. */ ++ ++ IRTemp resultHi = newTemp( Ity_I64); ++ IRTemp resultLo = newTemp( Ity_I64); ++ ++ assign( resultHi, ++ mkIRExprCCall( Ity_I64, 0 /*regparms*/, ++ "vector_convert_floattobf16_helper", ++ fnptr_to_fnentry( vbi, ++ &convert_from_floattobf16_helper ), ++ mkIRExprVec_1( unop( Iop_V128HIto64, src ) ) ) ); ++ ++ assign( resultLo, ++ mkIRExprCCall( Ity_I64, 0 /*regparms*/, ++ "vector_convert_floattobf16_helper", ++ fnptr_to_fnentry( vbi, ++ &convert_from_floattobf16_helper ), ++ mkIRExprVec_1( unop( Iop_V128to64, src ) ) ) ); ++ ++ return binop( Iop_64HLtoV128, mkexpr( resultHi ), mkexpr( resultLo ) ); ++} ++ ++static IRExpr * vector_convert_bf16tofloat ( const VexAbiInfo* vbi, ++ IRExpr *src ) { ++ /* The function takes 128-bit value containing four 16-bit bfloats in ++ the lower halfwords and returns a 128-bit value containint four ++ 32-bit floats. */ ++ IRTemp resultHi = newTemp( Ity_I64); ++ IRTemp resultLo = newTemp( Ity_I64); ++ ++ assign( resultHi, ++ mkIRExprCCall( Ity_I64, 0 /*regparms*/, ++ "vector_convert_bf16tofloat_helper", ++ fnptr_to_fnentry( vbi, ++ &convert_from_bf16tofloat_helper ), ++ mkIRExprVec_1( unop( Iop_V128HIto64, src ) ) ) ); ++ ++ assign( resultLo, ++ mkIRExprCCall( Ity_I64, 0 /*regparms*/, ++ "vector_convert_bf16tofloat_helper", ++ fnptr_to_fnentry( vbi, ++ &convert_from_bf16tofloat_helper ), ++ mkIRExprVec_1( unop( Iop_V128to64, src ) ) ) ); ++ ++ return binop( Iop_64HLtoV128, mkexpr( resultHi ), mkexpr( resultLo ) ); ++} ++ + static IRExpr * popcnt64 ( const VexAbiInfo* vbi, + IRExpr *src ){ + /* The function takes a 64-bit source and counts the number of bits in the +@@ -5936,6 +5987,7 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, + case XVI16GER2: + case XVI16GER2S: + case XVF16GER2: ++ case XVBF16GER2: + case XVF32GER: + AT_fx = Ifx_Write; + break; +@@ -5943,6 +5995,10 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, + case XVI8GER4PP: + case XVI16GER2PP: + case XVI16GER2SPP: ++ case XVBF16GER2PP: ++ case XVBF16GER2PN: ++ case XVBF16GER2NP: ++ case XVBF16GER2NN: + case XVF16GER2PP: + case XVF16GER2PN: + case XVF16GER2NP: +@@ -23899,6 +23955,24 @@ dis_vxs_misc( UInt prefix, UInt theInstr, const VexAbiInfo* vbi, UInt opc2, + mkexpr( sub_element1 ), + mkexpr( sub_element0 ) ) ) ); + ++ } else if ((inst_select == 16) && !prefix) { ++ IRTemp result = newTemp(Ity_V128); ++ UChar xT_addr = ifieldRegXT ( theInstr ); ++ UChar xB_addr = ifieldRegXB ( theInstr ); ++ /* Convert 16-bit bfloat to 32-bit float, not a prefix inst */ ++ DIP("xvcvbf16sp v%u,v%u\n", xT_addr, xB_addr); ++ assign( result, vector_convert_bf16tofloat( vbi, mkexpr( vB ) ) ); ++ putVSReg( XT, mkexpr( result) ); ++ ++ } else if ((inst_select == 17) && !prefix) { ++ IRTemp result = newTemp(Ity_V128); ++ UChar xT_addr = ifieldRegXT ( theInstr ); ++ UChar xB_addr = ifieldRegXB ( theInstr ); ++ /* Convert 32-bit float to 16-bit bfloat, not a prefix inst */ ++ DIP("xvcvspbf16 v%u,v%u\n", xT_addr, xB_addr); ++ assign( result, vector_convert_floattobf16( vbi, mkexpr( vB ) ) ); ++ putVSReg( XT, mkexpr( result) ); ++ + } else if (inst_select == 23) { + DIP("xxbrd v%u, v%u\n", (UInt)XT, (UInt)XB); + +@@ -34956,6 +35030,41 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + getVSReg( rB_addr ), AT, + ( ( inst_prefix << 8 ) | XO ) ); + break; ++ case XVBF16GER2: ++ DIP("xvbf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), AT, ++ ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2PP: ++ DIP("xvbf16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), AT, ++ ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2PN: ++ DIP("xvbf16ger2pn %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), AT, ++ ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2NP: ++ DIP("xvbf16ger2np %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), AT, ++ ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2NN: ++ DIP("xvbf16ger2nn %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), AT, ++ ( ( inst_prefix << 8 ) | XO ) ); ++ break; + case XVF32GER: + DIP("xvf32ger %u,r%u, r%u\n", AT, rA_addr, rB_addr); + vsx_matrix_ger( vbi, MATRIX_32BIT_FLOAT_GER, +@@ -35106,6 +35215,61 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + AT, + ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); + break; ++ case XVBF16GER2: ++ PMSK = IFIELD( prefix, 14, 2); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvbf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), ++ AT, ( (MASKS << 9 ) ++ | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2PP: ++ PMSK = IFIELD( prefix, 14, 2); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvbf16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), ++ AT, ( (MASKS << 9 ) ++ | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2PN: ++ PMSK = IFIELD( prefix, 14, 2); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvbf16ger2pn %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), ++ AT, ( (MASKS << 9 ) ++ | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2NP: ++ PMSK = IFIELD( prefix, 14, 2); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvbf16ger2np %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), ++ AT, ( (MASKS << 9 ) ++ | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVBF16GER2NN: ++ PMSK = IFIELD( prefix, 14, 2); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvbf16ger2nn %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, ++ getVSReg( rA_addr ), ++ getVSReg( rB_addr ), ++ AT, ( (MASKS << 9 ) ++ | ( inst_prefix << 8 ) | XO ) ); ++ break; + case XVF16GER2: + PMSK = IFIELD( prefix, 14, 2); + XMSK = IFIELD( prefix, 4, 4); +@@ -36181,6 +36345,11 @@ DisResult disInstr_PPC_WRK ( + (opc2 == XVI4GER8PP) || // xvi4ger8pp + (opc2 == XVI8GER4) || // xvi8ger4 + (opc2 == XVI8GER4PP) || // xvi8ger4pp ++ (opc2 == XVBF16GER2) || // xvbf16ger2 ++ (opc2 == XVBF16GER2PP) || // xvbf16ger2pp ++ (opc2 == XVBF16GER2PN) || // xvbf16ger2pn ++ (opc2 == XVBF16GER2NP) || // xvbf16ger2np ++ (opc2 == XVBF16GER2NN) || // xvbf16ger2nn + (opc2 == XVF16GER2) || // xvf16ger2 + (opc2 == XVF16GER2PP) || // xvf16ger2pp + (opc2 == XVF16GER2PN) || // xvf16ger2pn +commit e09fdaf569b975717465ed8043820d0198d4d47d +Author: Carl Love +Date: Fri Feb 26 16:05:12 2021 -0600 + + PPC64: Reduced-Precision: Missing Integer-based Outer Product Operations + + Add support for: + + pmxvi16ger2 VSX Vector 16-bit Signed Integer GER (rank-2 update), Prefixed + Masked + pmxvi16ger2pp VSX Vector 16-bit Signed Integer GER (rank-2 update) (Positive + multiply, Positive accumulate), Prefixed Masked + pmxvi8ger4spp VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with + Saturation (Positive multiply, Positive accumulate), Prefixed Masked + xvi16ger2 VSX Vector 16-bit Signed Integer GER (rank-2 update) + xvi16ger2pp VSX Vector 16-bit Signed Integer GER (rank-2 update) (Positive + multiply, Positive accumulate) + xvi8ger4spp VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with + Saturation (Positive multiply, Positive accumulate) + +diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c +index 6bcee966d..d8131eb60 100644 +--- a/VEX/priv/guest_ppc_helpers.c ++++ b/VEX/priv/guest_ppc_helpers.c +@@ -1446,16 +1446,16 @@ static UInt exts4( UInt src) + return src & 0xF; /* make sure high order bits are zero */ + } + +-static UInt exts8( UInt src) ++static ULong exts8( UInt src) + { +- /* Input is an 8-bit value. Extend bit 7 to bits [31:8] */ ++ /* Input is an 8-bit value. Extend bit 7 to bits [63:8] */ + if (( src >> 7 ) & 0x1) +- return src | 0xFFFFFF00; /* sign bit is a 1, extend */ ++ return src | 0xFFFFFFFFFFFFFF00ULL; /* sign bit is a 1, extend */ + else + return src & 0xFF; /* make sure high order bits are zero */ + } + +-static UInt extz8( UInt src) ++static ULong extz8( UInt src) + { + /* Input is an 8-bit value. Extend src on the left with zeros. */ + return src & 0xFF; /* make sure high order bits are zero */ +@@ -1662,12 +1662,12 @@ void vsx_matrix_8bit_ger_dirty_helper( VexGuestPPC64State* gst, + ULong srcB_hi, ULong srcB_lo, + UInt masks_inst ) + { +- UInt i, j, mask, sum, inst, acc_entry, prefix_inst; ++ UInt i, j, mask, inst, acc_entry, prefix_inst; + + UInt srcA_bytes[4][4]; /* word, byte */ + UInt srcB_bytes[4][4]; /* word, byte */ + UInt acc_word[4]; +- UInt prod0, prod1, prod2, prod3; ++ ULong prod0, prod1, prod2, prod3, sum; + UInt result[4]; + UInt pmsk = 0; + UInt xmsk = 0; +@@ -1742,10 +1742,13 @@ void vsx_matrix_8bit_ger_dirty_helper( VexGuestPPC64State* gst, + sum = prod0 + prod1 + prod2 + prod3; + + if ( inst == XVI8GER4 ) +- result[j] = sum; ++ result[j] = chop64to32( sum ); + + else if ( inst == XVI8GER4PP ) +- result[j] = sum + acc_word[j]; ++ result[j] = chop64to32( sum + acc_word[j] ); ++ ++ else if ( inst == XVI8GER4SPP ) ++ result[j] = clampS64toS32(sum + acc_word[j]); + + } else { + result[j] = 0; +@@ -1821,7 +1824,7 @@ void vsx_matrix_16bit_ger_dirty_helper( VexGuestPPC64State* gst, + else + prod1 = exts16to64( srcA_word[i][1] ) + * exts16to64( srcB_word[j][1] ); +- /* sum is UInt so the result is choped to 32-bits */ ++ + sum = prod0 + prod1; + + if ( inst == XVI16GER2 ) +@@ -1830,13 +1833,11 @@ void vsx_matrix_16bit_ger_dirty_helper( VexGuestPPC64State* gst, + else if ( inst == XVI16GER2S ) + result[j] = clampS64toS32( sum ); + +- else if ( inst == XVI16GER2PP ) { ++ else if ( inst == XVI16GER2PP ) + result[j] = chop64to32( sum + acc_word[j] ); +- } + +- else if ( inst == XVI16GER2SPP ) { ++ else if ( inst == XVI16GER2SPP ) + result[j] = clampS64toS32( sum + acc_word[j] ); +- } + + } else { + result[j] = 0; +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 20553a539..e54f0f389 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -5993,6 +5993,7 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, + break; + case XVI4GER8PP: + case XVI8GER4PP: ++ case XVI8GER4SPP: + case XVI16GER2PP: + case XVI16GER2SPP: + case XVBF16GER2PP: +@@ -34983,6 +34984,12 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + getVSReg( rA_addr ), getVSReg( rB_addr ), + AT, ( ( inst_prefix << 8 ) | XO ) ); + break; ++ case XVI8GER4SPP: ++ DIP("xvi8ger4spp %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_8BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ( ( inst_prefix << 8 ) | XO ) ); ++ break; + case XVI16GER2S: + DIP("xvi16ger2s %u,r%u, r%u\n", AT, rA_addr, rB_addr); + vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, +@@ -34995,6 +35002,19 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + getVSReg( rA_addr ), getVSReg( rB_addr ), + AT, ( ( inst_prefix << 8 ) | XO ) ); + break; ++ case XVI16GER2: ++ DIP("xvi16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVI16GER2PP: ++ DIP("xvi16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ( ( inst_prefix << 8 ) | XO ) ); ++ break; ++ + case XVF16GER2: + DIP("xvf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); + vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, +@@ -35193,6 +35213,39 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, + AT, + ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); + break; ++ case XVI8GER4SPP: ++ PMSK = IFIELD( prefix, 12, 4); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvi8ger4spp %u,r%u, r%u,%u,%u,%u\n", ++ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); ++ vsx_matrix_ger( vbi, MATRIX_8BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ++ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVI16GER2: ++ PMSK = IFIELD( prefix, 12, 4); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvi16ger2 %u,r%u, r%u,%u,%u,%u\n", ++ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ++ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); ++ break; ++ case XVI16GER2PP: ++ PMSK = IFIELD( prefix, 12, 4); ++ XMSK = IFIELD( prefix, 4, 4); ++ YMSK = IFIELD( prefix, 0, 4); ++ DIP("pmxvi16ger2pp %u,r%u, r%u,%u,%u,%u\n", ++ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); ++ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, ++ getVSReg( rA_addr ), getVSReg( rB_addr ), ++ AT, ++ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); ++ break; + case XVI16GER2S: + PMSK = IFIELD( prefix, 14, 2); + XMSK = IFIELD( prefix, 4, 4); +@@ -36345,6 +36398,9 @@ DisResult disInstr_PPC_WRK ( + (opc2 == XVI4GER8PP) || // xvi4ger8pp + (opc2 == XVI8GER4) || // xvi8ger4 + (opc2 == XVI8GER4PP) || // xvi8ger4pp ++ (opc2 == XVI8GER4SPP) || // xvi8ger4spp ++ (opc2 == XVI16GER2) || // xvi16ger2 ++ (opc2 == XVI16GER2PP) || // xvi16ger2pp + (opc2 == XVBF16GER2) || // xvbf16ger2 + (opc2 == XVBF16GER2PP) || // xvbf16ger2pp + (opc2 == XVBF16GER2PN) || // xvbf16ger2pn diff --git a/valgrind.spec b/valgrind.spec index 236bc77..5aeaedd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -88,6 +88,24 @@ Patch4: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch5: valgrind-3.16.0-some-Wl-z-now.patch +# Upstream commits that provide additional ppc64le ISA 3.1 support +# commit 3cc0232c46a5905b4a6c2fbd302b58bf5f90b3d5 +# PPC64: ISA 3.1 VSX PCV Generate Operations +# commit 078f89e99b6f62e043f6138c6a7ae238befc1f2a +# PPC64: Reduced-Precision bfloat16 Outer Product & Format Conversion Operations +# commit e09fdaf569b975717465ed8043820d0198d4d47d +# PPC64: Reduced-Precision: Missing Integer-based Outer Product Operations +Patch6: valgrind-3.17.0-ppc64-isa-3.1.patch + +# Upstream commits that provide extra tests for ppc64le ISA 3.1 support +# commit c8fa838be405d7ac43035dcf675bf490800c26ec +# Reduced Precision bfloat16 outer product tests +# commit 4bcc6c8a97c10c4dd41b35bd3b3035ec4037d524 +# VSX Permute Control Vector Generate Operation tests. +# commit c589b652939655090c005a982a71f50c489fb5ce +# Reduced precision Missing Integer based outer tests +Patch7: valgrind-3.17.0-ppc64-isa-3.1-tests.patch + BuildRequires: make BuildRequires: glibc-devel @@ -227,6 +245,10 @@ Valgrind User Manual for details. %patch5 -p1 %endif +%patch6 -p1 +%patch7 -p1 + + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -451,6 +473,9 @@ fi %endif %changelog +* Tue May 4 2021 Mark Wielaard - 3.17.0-3 +- Add valgrind-3.17.0-ppc64-isa-3.1{,tests}.patch + * Fri Apr 16 2021 Mark Wielaard - 3.17.0-2 - Add CI gating From 92d5263b5020fb41e1e5d7a54a661f18cfa3696f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 4 May 2021 21:02:31 +0200 Subject: [PATCH 045/196] Add valgrind-3.17.0-s390_insn_as_string.patch --- valgrind-3.17.0-s390_insn_as_string.patch | 54 +++++++++++++++++++++++ valgrind.spec | 8 ++++ 2 files changed, 62 insertions(+) create mode 100644 valgrind-3.17.0-s390_insn_as_string.patch diff --git a/valgrind-3.17.0-s390_insn_as_string.patch b/valgrind-3.17.0-s390_insn_as_string.patch new file mode 100644 index 0000000..39c956c --- /dev/null +++ b/valgrind-3.17.0-s390_insn_as_string.patch @@ -0,0 +1,54 @@ +commit 45873298ff2d17accc65654d64758360616aade5 +Author: Andreas Arnez +Date: Tue Mar 30 18:10:43 2021 +0200 + + s390x: Add missing UNOP insns to s390_insn_as_string + + Some unary operator insns are not handled by s390_insn_as_string(). If + they are encountered while the appropriate trace flag is set, a vpanic + occurs. Fix this: add handling for the missing insns. + +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index 8762975b2..6e0734ae0 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -7860,12 +7860,24 @@ s390_insn_as_string(const s390_insn *insn) + op = "v-vunpacku"; + break; + +- case S390_VEC_FLOAT_NEG: +- op = "v-vfloatneg"; ++ case S390_VEC_ABS: ++ op = "v-vabs"; + break; + +- case S390_VEC_FLOAT_SQRT: +- op = "v-vfloatsqrt"; ++ case S390_VEC_COUNT_LEADING_ZEROES: ++ op = "v-vclz"; ++ break; ++ ++ case S390_VEC_COUNT_TRAILING_ZEROES: ++ op = "v-vctz"; ++ break; ++ ++ case S390_VEC_COUNT_ONES: ++ op = "v-vpopct"; ++ break; ++ ++ case S390_VEC_FLOAT_NEG: ++ op = "v-vfloatneg"; + break; + + case S390_VEC_FLOAT_ABS: +@@ -7876,6 +7888,10 @@ s390_insn_as_string(const s390_insn *insn) + op = "v-vfloatnabs"; + break; + ++ case S390_VEC_FLOAT_SQRT: ++ op = "v-vfloatsqrt"; ++ break; ++ + default: + goto fail; + } diff --git a/valgrind.spec b/valgrind.spec index 5aeaedd..ecaad4a 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -106,6 +106,10 @@ Patch6: valgrind-3.17.0-ppc64-isa-3.1.patch # Reduced precision Missing Integer based outer tests Patch7: valgrind-3.17.0-ppc64-isa-3.1-tests.patch +# commit 45873298ff2d17accc65654d64758360616aade5 +# s390x: Add missing UNOP insns to s390_insn_as_string +Patch8: valgrind-3.17.0-s390_insn_as_string.patch + BuildRequires: make BuildRequires: glibc-devel @@ -248,6 +252,7 @@ Valgrind User Manual for details. %patch6 -p1 %patch7 -p1 +%patch8 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -473,6 +478,9 @@ fi %endif %changelog +* Tue May 4 2021 Mark Wielaard +- Add valgrind-3.17.0-s390_insn_as_string.patch + * Tue May 4 2021 Mark Wielaard - 3.17.0-3 - Add valgrind-3.17.0-ppc64-isa-3.1{,tests}.patch From f2c4fda6515a7eb455301cfdbab74ee10ffaa210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Mon, 3 May 2021 14:31:02 +0200 Subject: [PATCH 046/196] does-Image-Magick-works-under-valgrind test to Fedora CI The original RHEL test also converts an image to png. This version of the test has the conversion to png disabled as it faills the test. The failure is probably caused by some rounding issue which was impossible to track down so far. The test is currently only run on x86_64. There might be "Conditional jump or move depends on uninitialised value(s)" warnings while running under valgrind, but the test is to show the transformations work with and without valgrind. --- .../Makefile | 69 +++++++++++++ .../PURPOSE | 3 + .../main.fmf | 14 +++ .../munich.jpg | Bin 0 -> 118966 bytes .../runtest.sh | 97 ++++++++++++++++++ 5 files changed, 183 insertions(+) create mode 100644 tests/does-Image-Magick-works-under-valgrind/Makefile create mode 100644 tests/does-Image-Magick-works-under-valgrind/PURPOSE create mode 100644 tests/does-Image-Magick-works-under-valgrind/main.fmf create mode 100644 tests/does-Image-Magick-works-under-valgrind/munich.jpg create mode 100755 tests/does-Image-Magick-works-under-valgrind/runtest.sh diff --git a/tests/does-Image-Magick-works-under-valgrind/Makefile b/tests/does-Image-Magick-works-under-valgrind/Makefile new file mode 100644 index 0000000..67799aa --- /dev/null +++ b/tests/does-Image-Magick-works-under-valgrind/Makefile @@ -0,0 +1,69 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind +# Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2 or later. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# The image munich.jpg used in this test is from: +# https://en.wikipedia.org/wiki/File:Frauenkirche_and_Neues_Rathaus_Munich_March_2013.JPG. +# munich.jpg file is distributed under the Creative Commons +# Attribution-Share Alike 3.0 Unported license +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE munich.jpg + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind." >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 3h" >> $(METADATA) + @echo "RunFor: valgrind" >> $(METADATA) + @echo "Requires: valgrind ImageMagick" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Releases: RHEL6 RHEL7" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/does-Image-Magick-works-under-valgrind/PURPOSE b/tests/does-Image-Magick-works-under-valgrind/PURPOSE new file mode 100644 index 0000000..fd23e2c --- /dev/null +++ b/tests/does-Image-Magick-works-under-valgrind/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind +Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. +Author: Miroslav Franc diff --git a/tests/does-Image-Magick-works-under-valgrind/main.fmf b/tests/does-Image-Magick-works-under-valgrind/main.fmf new file mode 100644 index 0000000..042dd60 --- /dev/null +++ b/tests/does-Image-Magick-works-under-valgrind/main.fmf @@ -0,0 +1,14 @@ +summary: Testing sanity of valgrind by comparing outputs of ImageMagick utilities + with/without valgrind. +description: '' +contact: Alexandra Hajkova +component: +- valgrind +test: ./runtest.sh +framework: beakerlib +recommend: +- valgrind +- ImageMagick +duration: 3h +extra-summary: /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind +extra-task: /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind diff --git a/tests/does-Image-Magick-works-under-valgrind/munich.jpg b/tests/does-Image-Magick-works-under-valgrind/munich.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6250ed603b92955525d5a9559cd6d8624d2beb0d GIT binary patch literal 118966 zcmb@s2T)Yq)-Af5Op~F(CL^(lN|KyuqU0PzXmZY3Bnd*3K~SPJIY^S6L1}_WMnHlf zIZ6(q!YlmF`Op7e-MaPuTX$A(hdlvI@f5C{aa09gRQ z?JA+Zs)E8(ZCx!T)yHrE1Ofm;MFRx|4GdWTaCP(X(p8pcGBz<~!kq%J04(6ISy_8~ zXy_^F-+fV#)6_D3_)zShEC05O831(WPx0Pe|M%?wPb2oy*Hr)j5Dx(05!(MZAMxLO zFJlu^0KgXo003hDkN^12NBrYk-uc!JRyF{D?*jk;kF|%F4*=lj0{|dvC0|4;K-^arT0Ki9gYkh339RPsf?uiL)Y`v}j9ph{5stN!EqyPXCvi9}z z`{$Yd9t;+M4-f+s02H7Hm;nxe2jB-D0TO^L00-0nEkGYI0W1J(zyWXtyZ}ES7zhKR z03?tEyaFtgw=;NiS-@p5bFk;2%8q03tJ3Z1=|?g9@`H) z8ao}k7`qW0jr|3C1N$5Y8;1&q9Y+L51;-f25hn;I4ks6<8mAj)0%r~93>OC%ipzy7 ziK~Tch3kzQjhl&EiQ9!cfxC`-g-3wLfG2KfC=ssh!JQLI1q#p zydkJ17$jIB_(@1c$VDhmXh!Hmm_S%U*hBc0@Pvqvh@D85$dt&3D3Pd)=p)e*(G@WT zF(0uiu?=x3aTakC@dWV!2|fuMi5$rjl0cFSlJ_KIB>SZJr0k>$q?V*1q}imcq%)*v zWaMNI$u!Aa$>PW=$Og%_$Z^Qo$Q8+L$Ro)M$v=>6fG^7lm%%be1T&BXHVxv-_a;8e6dQbI*>gPTBdvf<|@5SD$ zx;J_60!j;&h1x=q&>HA8^qQKH8cyv@okHDAy+nga!$qS_<4==EgQnT1rJ$9dMbIK? z>uA5yf#^8tbm@ZV3h9RF&gkjsmFV5+GwDCj?=w&_$S^oEq%m|cY%@|YN-;VxrZILg z?l4g@$uhYxy=MBzba6XP_pg~bnDv>%nQNFAS->nJEVe9ZEFV~oSQ%I~ zSf8<0uzqF3V-sbwXM4@o&vwDi&Thya&ECwu#R26|M~ugnr+{acmw;E6*O#}FcZH9NPn|EE zubJ=Q0m}o^2gwfx9^5<>e(3VB@Zmf^IlmfzIDaeuu>h9C>SWLA_yR7*5obWjXiOit{%Si9Iy z@kip`;&tMO61)=566F$GlI)VUl0}khQp{3TQu$IV(oE8p()rRWGE6d7GANlf~}&alB_bLN~elYEmu8Md!!bk)~8OOuB)D<{{1oMW6#H}8Ws>PO^Z#>&ERI~W*g?h=27M|PdJ|VKN+&1 zv2eENd`kS(^67g^EK4KHa?9UVT2=*C=Li)maeUCWNyxGeeU$` z{_YbV+#XRL%bwz%uRIUE)VzwlLEh%xEj|=J?mnM=VZJYXzxzr1W&2(E8~E1;kOsH~ zd=BIaj0xNdf(I1^V+JFFd!OBZ7XEA{L^dS zM5IKVMH)r6zMy*%_F^qcDXJoxINB?E=B4<{w=q~T4lyIKg0XL6Z;;l=p|}Te>2bf~ z5%EI_4-;M|+$7p1jwA^u3i;|R-6DM`Log%n zHU4Yg*DG%xziG~7$xO=pmF1B2C0j1LI)^qVHs>POCU-JVHm~|E-P^dgKl2^(XHiP1 zrUJHt^g`@H-@=U|!=nCTk>auv>XNvU-=%J)D`mQ6edUkJ%PZ(A5-Tw(eJi)$nZFya zQmksJ=BY;2P}U%8ZfkvNck7hF}4ZR6wq|k?9jZ@V%##( zs@nRYO`@%#owvQT<9$$D3E?6)eM+ zYgQhubbeR-KD?^8I=_Zk+gq#*K~Jd&wcNDKk9(= zAm<0ikNQKI!{H<2qxECYs0QTbT?I{NU;3fmWpVZsiUj?_fe+mHra}fY~Jbi2f?)n)(!QCU! z%hBG!hY4oQ$t3Xbp&$>Ff|Z-Q81F;J z!GGfanE(JVpa56_Zh$-B1~37tfE!>9@B#m;$o~`jZ}+C~zH2P~`1u6+nP7i^2j{9G~U-OI|y-7D~azORC+ro#Vx)&I^;_5XQN zsiE~0nh2#<=24G--Ffp(&@%|kH!XU#Wzt4{)N5QOP z<%v4Nh6seG)b&oV2+DsyrqsQi2M94i00tQ*86X23`oNCiW{*MIg{a3ED5N+Sf&jv= zEdS=kY8<2jT5?~spjca|M}vxU=$>;eefVk`l7d3sp**0V5nV6Xuvr9M9?HFSM-Um{=MdV(Kh_GW z?BP3}5Z;0en}={F{5=2TkVrB(ogoy{k&q~qd7!d%IP%C#Ob^~JwTmY2w9f703qF?&ItMyd$t;ui=bVsV+i)~m2bfm0P}!Kse={JP9cNN6!4>LJ2KSdI?jHIhfik^{o8h9>-HL?L;wR^uS= zbXId?lwgQ-B($JM^Zzv#TT>wa?t|g^&wd!5^8X2YS>Z(L*d!t%_|VFoI=xVr;DCOR zevEowic26B*`&trPuEIyi0w@h2$B8r~SNOGP%iUEdr z6M?4U)aRVj&VmG>G|}=7x@F~aWn5eal>E3Htc<>p9Nnair!7U};ZaD44`)~wkM4FE zX^xKWwq7j?!f9MkipVdkQ)7;U7?*Kz-5nD0#dsl_P#dH@La3dOk+0QBPsJI-B1@+; zp$GIr-c9nuk@{3(ZL!%~D)|oi)6`C?VkjiERK7NWb#kx(&5vJjmkDF-zh@0CwUXyo zfK>44AW)(O=m!waxiTe~2BOcPe8j;53#{U5s-23~a#FR{oGZuYR&Zq$((j|f21{zAfq%*Zqav{o zNk-XuKKu|l*pbjc?lIhOB=J-ISv|4^tuQlO9T)oj$2Ut4j8tN^x29uXig_rsCSIQ{ z*d+v|hY*!$l=y74bPzW;8@IJ6G41;)J}G2)Bm4Y36j`&=9^e|}ts4DBQdD=8zB1MG z71rg?G(*u!&tfPma`T5qZ5oy#uWFKX}W>TD{Bk-vsijVBF<9__@9@9t!Dg z%g}qMuFH_R2QeYz;{H1gqHrhwh$=j-=d2Hi5C1VQ3@oF?lBzchvBIR ze*m#kEkG*-6riPGh_7Nn|%Gm)#59M5dO1# z7HDA~W3>-a=lbW-;b9HIT8%0M7sYtDfLdZ*8JXWN zB(30l@jhl3EKF7~TscODFs?pF=Za&#NHBk&lih;^BSCkc2GL4;<&D&ChMv;tKJJ?& zXp|9T@laS5edRyG+F-dwH-(k9IDyD|S&1v7C~c1!wVEwRaj3Bx%~@8!=c1F6z?2%| zaI8Sd8?!+E+=tT`h4i~Gic&*U!Rp41??z5zYz2r9tZqC<8_g9BtJBWW*DzIz(|9ug z*5J0XCVpq|bRtm#bU0tKnw9>;aC1_^H>Pm#aa1@5INsyo^PA2}j;CC`EJn(-BjhiS zZl2N>`gHch7RD$)NDmVrzFHchOAPjBNJpXVWk@V8H1p6`FT_AT& zdK!ICUxS-i>pA=-HcH#{f2xy<$LEd-QShk0%%WqRAFgj9Npayp1~1&A?zL9uqeyeC`@rP-rFs56en zAb=PbYu^D0wyk4H1*=mlDEN!sXwJF61OS%>==>p7t7%9c9Yd<|t=O|d@@G5mw9&k< zpf?vkf+y>Bexg!29U1CQ;H)`*LNgjv8Z-*VJE?JfI9VtyHL502bDe-!NNA}_VhPWu z5KeZ(v!c~#&Pk%j*mD!)A=}4rq>XFrKU{MM^MAzRKV8UV0?<)Ej9)=v-eQh{4{fLx#al|K&iCJ{rCf?xiXDASl#IsA_;@-e#WB*Gi;zG*F|%>d0E;KsO1{Q9?2EM~GwJlm?RGf$s5Yf{5H)#6p6E0~E6kF1C zQo}Eu7pxbhmzJKYJQ_4}XZH)K>9<`=@h=MoS*<&1-sEUUV3Z>~fFbEGFWSu<+I}qD z(66U*KAhrbg8wR~_0y_`dP(H=%&d%b2|fDGCO}H@py5$)&gq=}S+!5OWQc7E+Vhye z+28Z~d&^fagiAoC%o{t&kiZeIoAIfnYsReK9`236*tI|`2`Pq|mqh72hXj)umLAMjqT{LyfUKTH!U+_o4mM1wO5 zgxJFiQA+uflvJGh`sd(?J0Sg6x&Ol#6n7o8UY)k_U-qCtLVT=L_lamCRk9#;6mP!^ zNpf5inw~Sf+!m3~J<6ViNb>j#HRd19eF5t{)?U!krOIHAf>jZfB*+!V78D;`7OW=7 z6=~dwH;ju*96IL21LK0!(K4!O$CG^ic%W`d6G?-L2nGiaO5qnQC(c0{uSw*8^x!!7DE(ppbfSAXJS9Hs++el>2Djj3D%?(yT1q#{Vl_DaSLbpDvbO@^7uu zjB^F%fBPD|6R9GkdhbN8@!jhEC(8GzSgVcsclWwL(&_ILcMcmWCyTZ{4tR%faI}zdWQg9K;zyjD5$n<{y;@^W`@F zV2^gTu?>8NWBx8&X{rY+*qU+zt&?8J0Iv`l9jvQ6D~?Gj$4Dr$T`6ZYWnrONs8EvP zm%9?BW}UKq-VkUlyZK_-kBH*~4(_*T7-5z+;Ex(~VirS19%$N-IPtDcK^l{kTfRyA zJd{!?M09hxr08l6HY&7gON<`_C0?+4rB~>3)Ed(mB#k|UvtxXOM%&5u=I#}jGJ50{ zJ2G897x^y*`3nkt_9!l793?(VS^iFnqwbUi;-kN>PYD+1;(^`0TuM-4!;uDHKQ3}O z6{o&&X_>zMx%^gXO~>ahxzx^{!4c0TZk^Qg21_R6ZU@yz{)-e%LR(@B!*AU_ervyH zIB2yqyo14A5%rBYl+%O6y~-PkcptW)>};8mZ5|{4)s3LNOJHfNJ81LVH6Xis`Rn+O z-qFSRO`?Y9vzhCvMNUEln=S-M7Wa^@2$Onoz|QhxNlCK1}YsM{=f7KT|JwVj>jF?M9?}QH->2wpEG<48Ztswuk#G{03|Q;F`5XpL{s zD^KzL5%hMX|I^{g?53!~NWGNfzt&RyOx$UQ*#W)LiW~ptO=yB25n{kt-PNPH{h z9Gd1T9(=fv(Sw_D$#Pz8#g^N@7(ac-{Lx9k)`I%gtojUz2*WD}Ce+-fCRR#q1?TnYdJ~;Aq&kJ$?CH83=l< z{q+YNqwi8kzbY{~zw(qlLnH|3Hg#^q=)2B(oa#tm8DdVON_RQJ{!$1}hml`Z#*_=P zuYnN-hV1KuAut_8zBWoh=v_uKBASSBe1unFGNQL|KBUYpdN=5eqZ}f&7x_?We(rl+ zPDpv+P=D|=ZRIkFdP|#b;m4()?}3l5XCq3w=KTE+UMYML_Zv0KmA>ge2{voxyKh2{ zZ_L6SE$TB$;uU~asr{2)<9Ip#v0ObA%l4os{$tFdYj2Os1__H)EKX%3cR9Rh@B>>c zB0QX=wV8e|=VD(*&;0Pn%y@Z5JWE}wwkd1Iq3_xL3wgj3%DQiUz$3WHA)UT?CMGvL z{$qD?dtlhw%5}Q#?7SM~!_HstYTQfOj}OLQ>OJU}w(oR2)8M*Zdw1qa7WC5a3Hzet zr0M*i<Ce(|~d!hosK}WyF;n^q{s0L<5VH4mybZ%V*mZa5y{)hlpWK z6{QmVGK*&%6?p)U!W0rzbkMOXnj9}IsP@g?=7RWe&Xs9^#ku?-R4| zxS#fhK9X4U%nG*eV!F@N5NNp)rx12w#q5Ln54vFI-(%?f2G7{r?AJ`bPRvZw(PyQ1 zhvt2^@Y|IP?WAet!oM;JAUN=*-j_~)%|oTye)b5F7AN4=omKJQ5Zndzm{aW=xCx=A$xRMRhUzW@s0A zHU{8sdf&9x@SK4N${dI_>6~iqH*Nva#_iC)KYKG->Pp0GrB8vc`*4NwTfj`=L)u`b z341+pVd-wAt4Lzg4yzXiV7|}6lBhg2ZNzU)@gPnnZdD``Y?(-mTS{NyuDEv(TbMvd zg$f`0GqKvnpt?=6_rj?lWA~?Wn(tjyfbnyqA2J=D24@opu%bwz*U>irhD|1s&U0?Ghdp)^83tzG%JKI@h@v z2_iTOjPwy81#W@Fwo#cq%0?IKtOi$yGVM}ZQ+bp!T=PRXTp6y3mMuWjQ&MqJHUu@2 z!1e{tizamIkjshF@Esxj3j#!(j$N93Zj9vk2z#{ST$!OmxsV_{PUYQ%j$O3loFj=) z4S7ly&!kU(6>+9iIok+xoRBVkomo;R;iSVK2_!Gs_P|o;>8oJ2P!7f#U%At0W zTZmJvV1ye?nMGZ+8SPMuGC^f2ISkCi(GwU94l#iRYl(jf#fP63@Lm+VrWQq!!`d$j zMi^s4IKR?#!C$Q9apI&J|C+E%b#dkUP!G@InXt=EL7AXbM+m2CQ6>Y-_2LN|jZNv^ zww%W{B3}K>0$#f{8Ftcfc{ioC>odt&1H*{-r8JrBiL6ovSKnub86EpcfwuUP*A8$LHo-URK-3V&k&}$5+uwXeBFOjkMZ20$s0g zxEqqKndqLUe=SJlRoh8j%A*}tT;jgqrR5WO(6xARVSQ3<#g|!Z;=9ye#aBUwYWI6| zgGpyY*}o!zT;937m~=k*Dp%XxOIz#ljfD@i=sjm?&5(alHTA7*gubV z?X$KstLp5;YGk){?BayE@5`5!-DL)5=wO$YMO`o;w;AmyhWa~UFWnG7KEh28zDwAI zl~M&V+QCSCXZyZXa3an|)JMKHi?mzGU#UamG7?|id1b-}z|Bzltc zYtLNwaL$bRiQ~MFb1!Xz!5fB>FOnfo^#fj!HX{$V2B~pp%1l>Og<@gcEgt%jduY?W zV|9kQ^6dP2>`Ve~&{#>p^%s3XH02s2K8=9)ck9z2d*;Tq-&{zJpiHZ&$!C0>#Y!TF z;<+7B9uEb@)8c8)npcA)d=p=k=T4d}D|YLOQf@4H`2;&YgN@Yl*py41;3(i6-U9QT z+|x#N7QRn4Oct+_SZPdhK23VFNV25uZEJnbs;mfI91M$Or9Lg$HDk9Wbm7+Q_t$%j#KNESxpT2R`jv#;J{#&n;l2% z#3?+BXM98nEjM12rXaKrlN=x65E6tVqwL~@awhEJz?AZ7S=6P7NqRC=7SDuLksw?_ z$fOi835LMx;nB%D+9TjQgbSm*#P4PCObRLp z8Ebcpv!}F0@AAMb9PG01LKHG943SD%H=o!OQmQS!=f25U)btEb6utiP;#l<&mcO2? z7Ii%5)^f^Co!0Ijen(%I<>RcV&i=_U;hX{rZZCpIG9vDc-fdrpgw4Ev(*_y$=N|TE zhiGo%@$@_;Dtra~>Y2LBINn^2=vYg|eo$cJ;H!gOU9`_+SFsuQ5R2%V=y}D?%wWT~+yv6$3Fs!OF8=>b|8WEF>4~bx*IS@`h~>a&&8-)neLA>e^0T5$_p#I&UHrB5OZ45OV-JCeP?{VKg@Kb#QG;=yU2p~cVOmoHpD zx5t>gW(sGz;dzMr)+*lc*$8{KkhMmCO1}(*muc#{z0Ae>H817o$B=SD(v--t9g|M* zSHA0rPfM``Lc8%E-tnjN4V?iKPEvZ6V?Ou#a|`W~Q#}Mq&o=9^5+sZw%p56^WL%Pg z)RJ`mX9sAP4^v3ap`c9LnkSC)vzmMI^Pj%Wn6X~PIik}16Np#htNA}h$Zc&c&sOb{ zKfVQG=%puJup3nT-o%PAkZq+bcT*1ej%fBc+?$yXdC^o;CYri+`O>{aK1tSdVO>he zIUwr=#p2o0;!NU3LmA-^kihJ|)P&Eo7foNQ?77^iQ1K0`Ry?I5xHN+rGRzr@=l=9z zzfOA)-P)A!Cq4z<^i0}UKgZnV>q66g;N2QALvId4lyI~mF%;i(CAW`;-19KMDZQS`yf`??hgmq(tFp%lVgFrRF!B%;h{|$l zq}m0%g+%ns%G~mCz2R-yOYkhfU&y576y6p_$BUHA3DmC}0Q08}xH+*cej_UGYaMt= z(Y;+X*^vFZwW+SXF~Pj%1wGp?<-OhUv}S*P*?^>H}|aiwDEkEALV%7n3+uAsBt zLMNhJMr$Z~sIvj-;k1MC0}EV6j}$=Xgmu8&ndKen;<*c#M64bnk~ z(a|L3qP=H51H$>g1=F7knjNhK$i8`jD>_f3up5X#&*g1Bm%{cgDXjE1Xvn3*G@qs@ zIcta7#5~>A!zS(DSA#7lk&StI%`t54m@#BFXvlw1&#$3lXCzm*7sHcV2vbs_wpy4H z9&PLQPkNW{U}@w#^&&!E>`B>S_)dIHlb0Nn$?(_Fo8eoazB2BOWi)+n0e_SWs55q9 z7oWdwJ@0&WaL2_4S=ap`hPROcxlKJ==uHo=F$Xf)5&tzX-|lM>9xEpKg*St z@EBkGC>gEA=y2jXs^>UFy_V+{Y@I{0(&8H_P-a5INgu{g{PGIXNYl8qdc(AxtT^*w z&aCU`S2O*u@O{tUER3U#)r5y>Puk*yzU?wQrqC_PHi~5NP6L~}wB=RPg0jSJsJ5&n z#Zd$5upzJt!xe-O-?MGkSnYd?!LLhQ6#PKI2TRR{MeJ$>{dQ2v^&p@w{W|eMY1w;(?GSK|cYGAx~{rNo| zfaqTVmj!%MXiMAKAI$eH;1b<1x-8o^4k>zMJmcZZG6ccS&eg4eW7>u&v? zC#Vj4YK+$6#F{|xTSz;Q@M~a*$zJl$*l8(=wnYLuU)r2(RN_QXIqC<^r?-7^KYjQ5 zr>ZTv?X6{EScq{>B#Y{;XQev3O~=&Bmo!$)6?i|qvyF`$#6qRNzvb^NuG1sZ0CX0 zZ>s?u`uA<3lp4%}Q8Bo>f9o zO1$@J#kT9U?O7me#^j`Pr88W;{GcGE#AM78vNn?Ag$vzmIk+@D$7HTK7}4Tg%+5Ht zo{r<|+O1S~e;H}oN|tQIQ!x_1{xgQX{)&ie+M+ll;TwvxEhnxyOV!qT?W%Q{98Yv$ zm~NWDxUjJy`r9LEn!d`{LmUiSGqnfPK@Euv>K}d(drg#|4Kz32J2+4&!&$e6-U1oj z8)k;aMRp;Q+3N?lK=c&Xd2S4w{M&mQNlU^$-PC4g^}T?orowu zY!S0)3gAiS^?gZu&V24%%Uk`}n3yCA%5n>2pg2qRQ+KxXgBH*VDJ`Cg_VNC{jCvO8 zp?#Xwsj?$A=2QUiO!Nw{3?-5vS+zImD@N=}G@7sfWS0ChS=pe~ld=cmqO*D_RTfbG z2X#H0TJ&3f_iL8YYl}9!(IUQD8}#=AOL)5S}4QH=EA1_q?VBK~eS~te=29-})BNFkbLY(&3>sv*^e)UjH#~ z#KO`f-AHZwLf!LBj04T^CiMbuja-#UUn;2+pHI({zeS9iHt_7CMmV%fN-l!9&bPUX zcrjEhNV;uTJM3fi(!T9N&ttNKg_M(un^T6Nj9cJTAoTjF%=Vd$|Ha8ef(IUfk|eX= zUJl6m9i&5LfFDqXpBFWv!!v(0B>E@!jQF%&pM1(8Tu&O-88h6|;|p~h{Qj(Tu)Eah z^*1YX0h!;Qn?L=`OHbX$i&U;p>+xGi$)OQ@z?{%y4>w=QaPi);aIh$!B@=)2@IVrv@3*xVNf71Q)!P~PS&c-DvyQAOF@)llh{5;k8I6d!Z z`FQjV%jx|agRPp&B%||bJL$Z)8*<_=4FV-8r%R6U={$Em^QJ>i84KBNfuZ4BVCUJG z+>Uteiy$>guL4B|^Z1;|)$UO9=~pv6HjHg;FY+XEg4SkQWK_;yr0&*~n!lNs_+ZnJ z5;nvZ<1jSHfOsc&$r^-QRw!R$RcY#Rd=4mZ-S{6+6U3P6nE4xH=!IggI4M5L-PT5_+)4YeB z40?tLp=EzGVRM|>Vr_|NVp1*6o7K?F66;-B_KsuLV}w#XM{bCJsHU?BLje=Eb;d-l zVB=S#v|GUNa5AdDNSZOE-L$ALJk5hKp1~vFg6`L|ou4iV;*YG2YAySoe2hBGK=bjc zjk;VJX-i9CMbzFCab96j2{3R))$vY(XIzcQ8WQCs0{e zB&fQC7yOQ$(>(ria9~+bZkaVjD}Lm~by~Tsh<**0VkS$9k%OOfmavdXq4x1IvJPB)|2aRE`MCgJ^JufKnR4(?8eTGO(*0;^Y_~=U_ z@=9^$Z~3V{Z-kV@9z}cvg=_cRM87^xCWolCO1&(9r=R+m&BWqj@{uh_(P71NZY6Sz zBg?k>kVY}!kjnVuy$1p zp2UsKw@x|TTlHt4o0K3nWtC97K8^q5Nal1&4l^{cp*vtD$Ibr}!WGg?p3s??%E!Xd zNxsNJ$ESK2ZobKD>Z6o|j_1T>If*=B4brvgPKG5a(8E7Gj$jjKFf~z+%o^0s{{eXkJwFXQ_ZaQKlR==u?3pTPe2RkY&;u+ zPBgVX<$Wm3&z@^aOAB92nNRj5ct+7-X(ZM9#lCgZ(Nt+{15R*>rda-j5taPDBJr~T z-Wl|!fjxRB<~-OZE1_;R)Nx88D83Pry@ z0+R$1C8MV}VFAbTC-2*S`AUEyL+tEKs(kNdnIyFob=O<%h^2IUcf4lAZ<5(YW+~m7 zP#*GF^9a9zO;Lu%WSaC%*2Dk>Qm^gfNlz!Muf^Do?H$*S@@q0}Obq#pPT z?q#dx!@2Ur=I;l6>eGzg(@cveP9AEtMlXsTTUkPn#BPBmr|zRIv!>}F7PaP<=uK7L zvrY1V=UwErgG`azTm@#$8o1v-%vbL`>1a8YJ$-JqEuh8GJ(>BNvB7h~-%HCQxqn9B zjZK1=5!x%;EOPJU{HMOaMuPgv>mQ_jUqXUt+i6=|U8@l`>577b_*OZmIhWEa24g0C z!wK{xud<8i|EvXV1)aT_6()1+^7=7H^osk%QjTXHXl=4t%H5~3V*6nvwSO)x)(Jmt z{7orkTDgj^#ZK+8jb}sP9EPl%n!H_t-Jt#qcRD z-5>oX`ll~v7XF(R$$1M9SW=h`dDyh1=*r?y-1vW{Teoj+^zJH({n2(!V4Kb&A|B9e z^c*6g_%ZEdk-PScK50KOazbc0JDP%R@sN3d3NwjlRF*02WBJM-{wL-q>ehTh_T7X_ zJdspVGrmoY7hT>6}y?`U_{UT(w7p{ZJk23ruOlo$6idj zKsAQju`oOYQ|9XpuRn*QBk!-QSU)u3E zstF|TFZQa))*SB(lUUEn{-r5{kP=(_?Mzv*J5qISb3M}e?zmS7k5av|OVKkeFSJYI z^lhGlT-gYQxLK1)qNhMUef#N+&v!25IWB=~cEDkVzBP1+@E&gK2*pz?e^;z6S~==J z+>qv3UhKXxtoXj~#mWYl(%B);zi`b=83arm+-I}ZR+p^HAJy6*?s;2wiI#GBPSsz% zdf5}3Iqgn(&+bTz=~oCRnG=Re%0(E|{uGRsTH2>bZ%Ie^JQH}I+;h4uJLXyb#O7jzEvkY!~B9}CO1yGygK6+u<>j|x&G`YaiPA9p$t8si>e1ozQ40( z@-woM6WplHockZe8n3J*_8bLX|2diemOIUfNiFn8CpP9KIYtk;*SC^d?RlrVB{{Bz zB~ENr7s`1MuB0C&-&{L)fTx*){?TdFIOoLJGbnhTH&sc~9jSW`&(`$`+5=r}^wX%BMCPVS!eRAI+cZttRZFVw#h*0b?SHPeZwC4O*4A6zmi1Uo4-~1s*l&Fku@8~ zej|9eoGPWHg^_sq#QBM^&w1>6?A!k1(!lqeKmRE#?%MreFs^ucldoT*N@K&U%Kp3BgS6H4K*fZ-kJQ&|lzh(WQO#Mj^k!N) z;+zghA+L1ZK&*Vx(E!}K%|t0Jw|Gf23B@v+~}egbfBD%zjwTXT?DNbs<3h z0j?9@IEemu+28wZu1Srq%2Ch72!^EUdxEI+ocqWI2EL{ z)4`e1%V7YCU0#D*n~lsMWtG(%#mmOu7SACUq#x<{8{3lW*k^d&8K3SXFaE(+{Zr^k z@i;7s@DXqVV+$A@KphOeV^OV;Zav=Mcyz-~7)uk)`QbGS#z_y6EY}3F{?{`FKz}ekKzYUAzF7qJ~^29d#B{LuIVW! zfqV0l3A(o<4c5jjY_;>eiued`oqXL$oWXB$Xid`d2j9*bRG8bQ%5e zz-b3R=f!B~_EgHchMwbB7YUN8Sg-(}FQM)ID!F9;0E>|Gf~Wi_+D4FJk}yc_Umws@ z5;DaYU;&kZ8-pBo?geh_W?Ye`%(D~52Lrt*20z*TO#~PMoE1}Mn8Ya6lwbw^bfCU% z+-~>Dr3w_Ro{+}l>L}GVleYss`_NtuDwUE^uweU&3cE%Z0B1CzQXsXGZdGu<+C8c+ zRmnAt$?QhPcsL{4r)k!TMr4eIAD1JFnGKvV43oXbIX<6ik^nsV`--A@?NT-3=_%ZS zu}Iq3DeAbuqJ|jZjbn%^Anc%0w{USsoB~H5TF&I?*0HOx464}-11bI!o_|9^I93>y zA_|DS1s;^Jc%me*#xYA<;BOkc2n>u8Fnf#|L{{k#D+(lPPDmN=?@t18&wpwqVq463 z`BAO#9um7@Z6NmoiaU7Xk>rjvR(u9*u_yJVgWukVAa|v$kHc4Dz-$f|-?^yrEOv`= zc@#*qEN9P>Nhg8d=0!*xe-ZbnI?EGl3;>+mO_TosN)PjI<3YKSQuHsja;cJRU+Gha9sZY5XY~4j8wbD*Dv); z%N+@9uAy9bb3t&q8$bq3llAO9O;h)dr(2CBMzzxPej1aLZI@OvS~e?&CL6jGE|>Yw&oOD9i7do8T?vPX0`E2~c1jt@NZnquwr*FN2b*hpjFI(5}{LrHbsdVDD6k;kthqP6~^Hj_Ptxr)lxW4Vznk|tx@X>U+}PJJszELs$)wzK)`1kO5_9Ff`3X*5`TdWO)tcB9-_2lgW>EZX$iJz{u>&uv?hA)Oe4#$o&h~z$O zH=86Ldvn^f8h=|BSR~Y%<|%>|k~?cinlkJkvkthW7!mf6c>DZsvm1m_}>Qj$~)`ZK$Y=cc>uxB1( z2h%2^d=8l&oD^yiu(&O8kA@;amgMd1AWTG>IZ$R`9pdg z!`7RZURIo3rh{n}>Sq@bU4R+E$aah_*2k#qe$|R;Z<1D(ek3xqgbZL~860D_YgKL2 zI*Qt$mPGNqF(C3t<$)O;l>Y!cRgM^=_@6%F@pDUs@*9To@@e2_o?tf}(FxmV$s8sJ zA24{Ww?tgM{l&~vT-;3YOA4$ro$*Hqla)-8eKCvxE1hbw+1Onpz1#(%ebNZ`7g4** zyRaM#eDh0!+9|Jv-KM!`V{m}TlYa0O1cC_Kxdy4thB+=N*5Ape7J0%J)$jZl+B;ZY zMR>Q7PWOW4A$Bc*ODm9g^ZnK>rk1;vze24vsTbWf zeW}G_^F;Q_R_04+gQIVBT(T}p1Kj4MY1+m0j;F51vs=ky7)c7TV%y}}4$P9fa(KsK znx*Q`gVprO?`$s~I}5AyW{AloGD9MRpW!8&p5PHw(tF=O*=6liWg?qVvWq~whSJhSn^b#uQ!8a{)=0w0R{$2_ z{rJW+&205sTbSjAAtpcC=@pDGzi)!YJF1Lx+6p+fk%yuJ|ksbPv$uo9nNa!HzvP7 z?5?QeT{6ji)ah@j2%{Qw2^)BXVGhB&)N_-xA5Lo%acGwIup5aT-aAEBkd+>D{CM{4 zG54)MT;0WK)EARLTg9H@@uYZBPWFknlr8AMsNnmW&kat^-@=kC@oKx61At;O{)Bpa z*G?D9G0V{%8}R$6Ewuifl-*nE6F@<08MMZ3+3tke?ikU^}m%b;4gUAF&_b)WXZ`q7aLn70&$U_O5e}Y+8nl~ z8=WoZwj>ggOwPY9H&i8&D_2CL9vvKx&rRv+3q^CO-ds$8m7c-{*g}!P{O55bk(_ag ztJJ6I`*}PId!&{*OO zJthM%QQeC%P^0QI>+8i}6Y)MMBxzej(iTIE9jZHa&lx?>ty>7RsTIm;yJi0XOlwwu z?*uktW|m8U_R%Da4~AR6m(YRqKAyF_)o)|e^h?O>gTlLfFw8K*K`27NbH{QIdcx>k ze`~HVN3heZ!tNsOJ7ppkP*@gnJfVmKzD{b>Tk3rh(%$aVLB063lh7N2Q!23zr}GKQ^yxtZA`bX+IFFJ>+(qr^=DI{%mueIr;pn zmTrz|wKcXZB(;&Da_BH}alow|rnP0ISz6o04Z>T&bhkq?iJ6&r0PwtV=rdU_iL$mD zox*AesdFin#EL^_J%Av8jZdZN<%!88>$iUW$CD&xliS?WHSsL+}>i4(cosva5q<8=YQ_e;)jt6X4YI>r!Mi{t0O54k^47W0cVuiQy>+XL_ za&1=9?MQ}Xl2pW>n*fXq=k=@-X^1>-LwpUdl6xV!z&JPk9y2% zhT`W>ie|}JkMA?zb}&!rini#RW|G$CNXr%63j)8Cj^jT=nv`2_NSaAmF5YP`bo*JC z%fcS{;k=AM`kH%F(?#S76})~W_Raedc#H#*T>k(F?m0Q_fl;BhmrT>=v$=GL2@6}O zebRVs&nxIXc|NrwEna9eqhT1^9IVnyAW^fVFsqTAfPQ>pt4ShmP4aGyl#}M#?q3dJ$dE4*sP$5N9@$?{nC7QNrZjLQ2J+;@ zhaxuHfPO<2gt@qu?l7~KbwB`CkmLILR;x(Yt-oiaZk`dhRYxU(TxT1zoZxUzw|dcw z!@ZRm=c>6ZrqONY3*t+3O7`0^PuBve^?fC+rnPHUo>*AAG%`-jmd4;zjzPd~J#kl- z_vt(-B4BS&!;o?B$l%p=rl^|4cec+ScgW~rw^so5>eDk2jm?b!bSm!9FV z{5i-zs(Bn_R!2~`eLDFp?<9gN!dD1O?&OSeR4HGcaal5{$Ct6A9+$@>@Wo>GjI5~5 zE_TSRl7x&X9Q*hARJ}7#-K7}IPTn#Fby$fU9mJ+_-vc~zU2Xb=+c_stmKgWr45$DY z`gZoGpz52ZQWI2T!tUJ?pI&`C{Jkp*&ik6YBaF95UXEh7kg4o^FEKwsnsGW-{?Yt- z?B{6X1h4K{KyO2wbIv#&>!o$Zr*V64r?12_i0=VD3hlruMshuddHL1@sHG80v?k^7 z=00WIK~)5I?rQkt)~u#b(#uYs>AhcE)XtY4>vw3{ZxZEQQ-VD}JoDPR4wcYa6}F!e zYWh4kTAW0So3w8%j;v1Lck#wO27N_xAH$BKy0GhgGG*Mu5&*J(QtGq=lU!Oob%3n*}tx?Go9wx!WJLfhLtjm6Vk$SuSc(X*4D zNgRyhjzJ_2DXl{1q4fJjYg=9MEY4(&S(Z-}Y}^j>+$cO}8T*>&Jym_F={-nBoqHr_ z;ng?zah3yf0u+_t5&<~xOu;U(tLP@{P@K;YmO~RvR2{w>s}M2UAXKr&FB+1QwnrkI zWYbGyuvln4Id=)vwCS#5Tg6w6)<4R2?cAZ1fY{s%a(OsCs>0_+(=Kh`j(u9`+6Y83 zOEloP1Ne#KarY;_DxaW1o1-*_wl|Nu95IhjC<6%?U?}bUy{ggmyA+*}>o?JbcU--| zT$})Ku0c3C0~}<0>m;1DHD&Quu8tkAMwWeLtwk9R95Xl)HVI_~NGIQbD{FQp7chJ` zf+O*WxDJ4pk85x}j_tqBvi)6eJM~t%e38v9oRT?9f>pP60FpR4KGmeVnnby`7U=}B zyya(SJjR<_%((U4w0#Mxv%8~4G^yD^*U%)EHf5Cw@tA&5{fgz<@I=>V3X8{vM;?YW zKjU3%tYDITG7)bR%*i%cVqL@nhtO9h>Rs_`^KXr#DzJhZf(VH-TDm7|^(pF6Sv-73HzU`|)JPKLzi~-Ng&;a{mk6NNr)a{!gjlon%*2y|aJ6w2Vy9{hO01x$=k-4_v z6-xnt3BWXCB%GR81HMjusxp#nag36yBHJwSnT^OmS@NMLe1q0+qfKhe!qHnA2+UjsYDERQTC!F1CzHO zN*hhsqZvh4*X%}!-27~hECx8XVSK=xli!b^sUZ68p@r?==qX!Q2P;IHVF=19x%&7K zXZWv)x7lp|4*au{03Z)eeb4f#`SRlenpH;r4*b%Bpw3hfesvj1Iwcs%HvN9R2)cvZ zj|@X^BS*Y$kYi{a&-BOMn!bJ7!(=&INN_@o`LVe0K4cHIS;UZ*QtCW4^EW5*j!*Ix zOQwS|%W~oO%OQU&5%b6Nt8p~bexJ#oI+moH=YP}x07H&Ti>P&o7Ad|R;W8nSN`=@} zfjR6vtx;^Pl08BO7g22mWLW~7VD@F_Iq#2{=drC0mR)X^-DH$SaN;=>wnKMOoaeVE z?^%0oUr~xE)o#j^7$3V&DfP#fjMkh|ZuIP8&kZ%JbE`lOuczDU@#Y)*KP=~v>QwoN z!TjIEzi>0fXd2&Gn%dzK{_^6|;X{;_d{H1Q24a~ zIR^oAo^lOS+Kp0WVPh4u+Y)>ik;?^8at7W=82xI>^QR@Uo*P%1+U_GRW;QXiOK#h@ z6>vZx;Ep-`*``jLaSrRdI~)6EZK7Wj!(Ia%pG*zChCW=?>&34r5Affb$f32=G6x$!}^Wwz->e_>$o_B7$&84o?S?quQyQ zb4~8I_AHKEP}&@O(GGplU4CmTXyI(6Q#!lKK{zBI;oy&%A8On6-TweeN2FZ-$hgwe zQiP!q+QyMOjm^I;&fhLZGuU=DkJD}=z0%;hXq`mSgms!A8vvXFImf?#GhFjgx{53N zm{KVu@Ge}T2!AliQd>DZk~#O!t}1V)$tgxn@I`0GPBqE7v(Y-9dr5UQjuE9W4DSrf zakeHS%y7dejQUf$eYm>1Sl%hl=Ob#iPJKJ@20QoUj(cY(p>-7T$u*+GGFjYi1wxRc zBO{MN!5AENtIa=1n^c`HbvdmYY7nZ?KjkO#vXT^@***BHT(ZN>GL1N-^rLC2-s)5I z+*$>kTizK|?I;#NyMqD0BR`wB&Z6j=W|o~l73Q;jsGI2BqLK?~V{8SG6*@Z=;B znB1zB2R!%3KJ-E5a7}H0UZZiuogJBV?JD`^lG8>EigL^FF>p%}ft+>?pQ3!QK$6L( zV)`sHE?n$u2yn$2MsgeYhH;-ldsikF{{RSWpx1P$qrG%giA<3yDLzKsmN^6vFi0R$ zH7kuODK0GKj?Nho-Z_XdK2Kw{)xB^&L<*u>;_FSCV~R3O>Pz!AnvR=i@v}u`1hQMJ z5TX+vV+WT{GY&J3ImRk&*GJe~=_`G1n#IiO=+eUogcZujm%GklNbZ-d@ZjR}sjOO&B2HWw0=Do(IpLO1s9% zOJbMP!uh|@lOCO;S2^`S4gy3l%}6G)RHp?@}iXX z(;)I`xpm9bis4sO)=`$*DK*3qv~h*xFO{+m3CZWRUnp|Zzs$~^?Dh`bG_@BFI%ZAbm!wwm2udn*eVqn>Mda~zil2tb>&oMhyT56lm>Q2aKl ztVIpg&FswR781rN-)YG^bF^o^dH1Zy7WcC}jnt8)?hI^HGjJPm1o7>j2c|n!Njbga z$GZN@lhMSN=>GtrtyaP{)F-w}Yw{x@QsGodo->T&k?HmItyY86Z)tBW+@d78o#WZQ zWe>Ci{3{?J1Ifwt?NILYyK7M-TBfP+*KsIkSuB}lVtG>ApRor#0iG&?JBtv`E}Ozo zhYnRjyMGQd&OQFWDueNo@~yrmy6LihC%>&f?!HG+(d||UZe+N)w-VfMjBS*#*^)PM zNe4T)KA5FTVI8kQYPLax+r56Ztbr~R!NxTaZY7&W9V%>`ay~8#KDmWaT58kS7 z{{TX&Xo;)X!upNuNe;z*QrV{_8&Mn+3Gm;`FGuczt=i`DSD@;nn>h**K%rJ zA!gbp1}q!{$nuUjA1cwUCbsn|lwBMnsG*!{ms?+I&8zCI^257&cFqaUxVh z#^Zm6zFZx#+JFfDnE6)YShbFATH-0$9zTn@Y#`cl%*33ZomPI#S9sV)>aOW49^B&u zkGFd2V@`}RdyQ$ZTfME9#2arOG*U~4B>8yfJP-~tDpku}TFDsFwHYjghhvL#Cm^>3 zoac{IO+#w;`sDT+QJ&)Ta4n&>X&CXI3E=QSJn`#Nwa$;~MQd+}()BxVjp7X1vu|ZQ zC@4=SoCDsYsb9m}{)==;FORzZ$Fwb1U6$DvJzr3T7jW~>A_WS2oE`!0E2w@Ii;K~$ zE~kE)ia&(vtt-p3UY!orBnr%vbuYU7*(f_DymYY*BAQ^O?%zq0o&!l~PTGQ+3^g}sz;XfBp^ z@-sY#Pn5z70gggrC+2IL^zOFT7nc4sFAOj^kTjRAI)k6=umBV9T?<6%_SVhaoEP2~ zfg1RROKBrvybuUi0Qw&I`_@zOU!)`Hu9?JF5D1+KRR~5|O7|q5PDNqqx@@iz#~D5N zcK-l9ujTA$o>)Rra!YP@{SAhz(%M$E!b|CI?oj^mRj!+2=bjh0^35}E(mgw++DQKZ z4Fqwrm1(X{;sbH{nDBYy9MU>psdTyYOD~AjY~s4`6g)3D+=reG4zhIB`ci9cGFUFA zcZ7wGR3w1vPjWp6y>VeKv1C~1DJ6B^)ZHbAOOz6SpxSgNP0t!UcBv#qaD`-cTziZ+ z^Q!$rqx9VeP1Nu7_PY%YyUVgi4-1jmSx$00AMvdhNhq@Etv=f1q*Fy6*NvTWrzhB- z>ruMu;xy=9pphM0Wt^miApZbLYpUv@n?lIy>zC>e7AZp9SIFWzOb|(b5u9(hnM}@9 z1w)Ky$T;;Cw`;uzPO?V6(4m+!gxzk7;$;5-)t}@=a&DKux3q%d_IVjm-JnL=NF@?Qsor$ z=^C8Sv_kIIXq=MKtf6!EU@D^K+UrL_46@5-ERVJ@u2(t62*-Zi>rpeLaJ;h|Mu4*u z=m&FL`ttGSzgxKw661J7$W_U}A3=)W)AbX`{M;P=qosx=<>bC1bxU&BEX^k+k0iIL zClwZ1nF#SFm(ArFIM4GH3AK~9ARzw$mUGMZ{#6F{=-q_gp+b^I4tv(iMkNR6TgX>w zGKn^U&i3p+=8g!VmL2F5oD>JM4t;$)cB-jw4+jo!#7vs~bj(CBeCHpzt^(k;eqqmj3`q=*jTUb#H9UahSCXaqdAZ z2WqN)YlO74%OTP!D@_^1)^&)BESjW>#fudu02ANK+voQ*riSi!jQFc{;pLf|W@8|5 z0~~E1-5gQh=shsZTGy)}h!S?BswLa^TpG^a>9(+w;A+}s;9u;CQ2nx){&d$;r?&q9 zG5y)Z-RXMzCYtvbj5kI~s52u-03aL0D_+C{fP63u$hqgttDGNt ztiI# zYi}EQ*;zL`aNH0$#s}+E38-I15J+Y!tHObf2kB2Pr>e&*{2r}%fT&&Nil3hY=kuiu zY7WrlDNR#F=8tot>6Y+bsMQ}^^7s+5g}2LO6Q1N1+lsn9VPSA3KL>qr6z6P_lB>=R zK;-e381<@XHN7!!7Uu54>gG_Yg_=amg;2bcp7_sh^y_PVK3$6R^~%N~5u|B$k*Xcc zON=2To!B|{6&ajYPH~@o;dA+J|(-fk(L}v-j>XO{N)4ve)Eib0z(roPX^?{^g@eZtIUBnWg zh65ZQPg7F#tw!Sd*T=mdzGI&%9Anee)+gccyGxz9-HdwGm8PY4YJ?<#$^P1c2hd`a zlwRn!8k9R4i}~8?_KmAam`XZG8XM)2JUV;&~o5%#d#k6sDmg>b0CN?iqj$S0>Jm$0n^BY*gn1l#4}VHZ3<{rX)7qWX%wo5U$a%+zfd2q9 zRx8o^>xEz0;e&C^(cu38^H#aFWq7F~k~6pxJ7*cE0J4U=Sgski5WZQMi%vzsowpzCuW#0*q=+Z@ zbin~P5Wbw?RotC5)Jib@H>@r{{utClplUYqvyB5$h1&p;X8AwJ)h=4OX2{Ah`~*Rq za68c?o28O9BPgJfK7GH&q_u_k;!QJDUr+x42QU8st5MR&;pBE*I`$psExOuM{Y6HL zUR7#^0muc76ml!cA`a*Var4e8GD@llm1Rtha~V_o>O2o)ZzQG{C?svn8Hqp6mYYL) zH&w^xO;jLuu%+Xx`0L^Tl5>Ui@ z4Ds5MgK5~_N@*?$jB-iI#UTo`th|;3B!92HBjRCi%W)sshZNPk5W_UGCB%|=m>zOF z52xStrl9HArIlJpme~h^_oNq9V1LYCZH*O9Lb_#S<0&Jo@p+A6kloZizgKD%RoZb1Zs9 z?4@%sSXUmqxj+1>e_C$MJUe(sGC&8va(Vu{YA&gkI&Fz{%Bhi$rNUl{3vUZ!U?ERIjIOZj4=lmfEG+$jtQZ*O1ZYKvKjL9FT# z0fkxJlzS^3!}&0&HZjX=n_63UMkgb8^gpd9s8ma-#Vkb_&ut5wF#Nz2KYXY2tFbDZ zNXyhqRy8NFRu61&ed@-__FGBT@)Zohi%6#=I+5pB9g300eKVSlG|T6fG)s4F{fJUQ zTX>KmBG<%!4OM@&?LnH2svkm~k8P0xKJQ~>;%Jw5`b{)9y7Zg$4n%3@GK9agY~|7=zeTe-6^Ccxsa`h$2=+C1l9_%aNVG zGm4|C!8~%*p3H^`$0DyncjA0A*i6l9)DuICnJ2k$?CUP(%yC2)2LNOceSK<^O}2ac zrq!jpy@Dg34%wdz8vM>M+0T4^>JMM6nqHeVt4SD{<&8@~`5)WwfzOmzP5dQ){iAel zrv=`Fr^l;W;@oPF0B9$DyO(@GjJP37af}_@6N*lGBZ)M^P>Yd=xas>jk`;~a;b_pt z8Y#+`1d?|i?cemks_in<{vHu;t?DA)-r>qZRUJmw#&dvha61~$>-zUq+v^t=nuI3L zP_*4<@k3?@h5;n1oD;N?SRC>QH5*FT@75bgXO=t}1T5@AG-?kehCbQ!=B!Z4qs@?7 zb$N@)^h?*jHx~MTC;@$>AGC0D>6qSfOnEh0y5*%fuBG-nx>y#*WDaRVKWBx zOLgOncNwJh6~wo_Cbu#~V`DN%h{FsJk`$j}M?ZS5(sdHaZkmF+c%yW3o;*d)KU|Dv zrv#jJX+$LyrB=sp^^Hi(pB<-83gh!d$QblHeW|<1V$>punoFdOGqGJbO!pWkinm5F zvL@*fw{36%8%}YId)G(Qe+_5TH8r)m>Khp{z(^ww?u+Y{I2raCrt@}4eiB@>jgFa= z0wY-hpLDk{E~r?i~0` zNF*;KA-Lpr2aMK>sI(idpVOqiy1ufO$TA{HZ!2Cwi%pwf)ohk6jDlSyn1ZT695EiXS<`pAPM@Wvk^PmZGz#+XmrI$SZc8ygy$i;B z?HqTmdw+W8sPL161co9&?-XVtE?JyQHb90o~e@)ZHO3y&!$zD^Gn zoaHP8$T|u>hUies69F&o$4*) zt#$8C+TAs#k<$>&RoNt(WRw8;$L`cmf<3zf?OgWrsP(JMi99(3AfF7!ZwH2_Cjb>B z;GWp4tA3lmvROrxHY3FWT+49nfC(cWUOw2Vv-Gvbsd+5-x`vTuEW|vrL@uN9+v1^QXXioE~Z~LUT1!N#xY6Px_75%((NSaxE{{( zX$V;3jRQu=M$*doARl~+z2(G~(_gA6@N-`9YvP&BVb&fuSY-H#E>*DQqw@@QTwvh+ zX}ifSZtv3O=Gtfjg0taR0&&B3@92KUwO6opHk$+L8kOTMtafHuWrB4oH!(pT6!R$< zBh&&p$gM?{)S};g#2bg!P*)!qAz15m=VCpkkjBbu= z4ThVAdwaJSISjKdLHgq$*M0myu!TPbP}K=U&3~XEQ;fR#G&$`;lUv(ci*0A4uh!1$Yllotl($QDF07@LCfpuQaz{0f zKT#RdQnK&6WX7&=aTO5@tLm09ta!B+{{WepoNtH|l26F~rmQU_lGfl%jT+0eqi)YD zoRRss9lt~GQ1r_Sn_KIvi{_F`tBryDWl+khxIo)L1pNMBdQ|@a1{aQNjYn)YC|Wg@ zkM6?`3pc+!DC|i3S1M9^>L!$ujmT~FX=HESO>9bFiBPy*!AL!c1C#o3>rYP7Y8Fc! z!>s7a!0efTeB*=1BZI;DRW;XAn6K=W?5<=GB0ljtsbIk43xWa04hi<~#9 z99Ck>P_?8mzCFspfCzU|WPG1NfsA{a zsJM~?6bWGyLw9b*7Lg=7q-}ys{JGw^{^+ko6;U})lXal#`ln24H%OMYlg)H)>?Huf z7N=tD5kLb7>cElebMI3R;>Na8GH+~Rbp$cDfTF*A5(zjw`X5T-ao>2?GBw!UxaV*f zQTFTwPqaE$#l+f_6U}3v-bZgMN0I%YMgb$+*XvVQFJ{W8nMLl7fpPe^tLYaPdX1!l z?&5TfE}lpelDmSoGB5xja4Q+rKZ^S2Q%h$0wYHlxS}O>5L~yL#-)K8aa5={xb5gax z!)1GQ)H*)$d%Jl?<$^#m$b0ONkQ@G%=hHc^d#LHxnskX3<+PBrx!4?exHuyoj6GMl z{S93nm%>}Grb1mp%ewlbQD^vtsv|O9TIu(8YydXv0>h7(Wf{-cKWdu4iQ1fZNMo_n z(#kWBhuA|E9-F-mIN)NiWh4Zv`B?T--H)IEbDy9%pH^1<-J;aGbylO+AI@~dgT5hvZDK$^!{x7Fmf)vOXLCo8f$T|i3`F#{V}8HpYE2frUGwYStX zdn;YOJ*+Uf+IJ?v$JBB;`Wna8Wya&YHT)I+rp}L~%c|uy502OHEMhl1qby;S3psW} zjAQbuuYN{3KE|4k=t{%36zuxru~Z zGT{#vx?kXMEO*AlFn6E*O)yTxa6**9G$6|Y8xmKSlj-trUb<}r;>eVgnH%SYD zEYc#96*J}iNGI)CYsLoW3PB2pJLl56{+|WEPib@9+`htbCB&$t>4obgk1E{_*+3(Mhj)-%E+gxIF!2FE_edlTd=h;qA@~QCXI^@U| zbmWtpKn2tB#SAADC!u+**ZI(j?C)RNX! z)MQ6ixCAspG+>)qxEU?T=Ca@KRk1o`Hv?-At4x_Asx1i=NPDN>W1>tzUEpR zd%5x8Tg@OR17uFX{(_{PA6Hfi+Fkf#*-f+L{jpm(`liV9WS^)O>Z z)Kv@IM;)q;=Hf*{Kl0?CEqj^XcFSzT?RnVZe|w@Bm$&(n&E zn~w5V@GO)Rw#Mt-nVEE(*SeK7`+J+XkvvV}FbG_7SOP+k?VqM<1QG@r+|{JNz3Hi( zJXZS1kT7hSW7RRJl z>_bfA_uS2&`kVDMtN;Kk-2VW2pVc(sW7HE`T*i>ZiXA-1Y=a%a@6SAX9x5zSMv=+B zGaQ8GG%L;zY-f{FaA32?(0{>i4|rB9?hOd-CYCMf9u>bSEIIv6KLzYUHNzlrfa4hB zJ?c|lAskFFqbD7^R4IyCQ{bkVB(!jsNUFqS9yuRsNs=v$e4UTdTde6OLTMzwGR_Un$FS$S6fo4`?cGEgV#N{Z`4)A z<%YF0CyLgL@kk_2#H#>6Bip&Gm5~A|l?mJ6NO}JN`AzHgu8n>to=aD^xbRgj73LVv zi5?p(_a#r-xtU&uk)|UN7=3RFCwSy!PM-&oU zL=Yli0fM||<_&e8vwUeWIpZ_;|b&~JyfhE1mo67n)f)MkdF_-Ijhx75FLP@jo_ zIE|vz^2FdSpbh{Bj#uycRF?cpUx%JGhgC!08|F=9wWPTdDUFND^t0KOSs<7p7PL z07>_yw_0dM#^njLmhJK3Ji1D#kCW&-{{Rki=ntu`Q#PL@cL_U1c^j&2A>(Xh_c+HM zpQQn~ap%wf0Ly>!q2jIrF~rvGudjjB->AA?XKnugvT#`7Hj=<&&4I>w{{WZzH8^!1 ziI&#z%Latgcx1pn0oR{4GnMc8K3(gP&kkmWLvbP$Ib~%beqG1c^`}L`VE*R_O-}8q=gV76E^EB7!h8oTu0MREtYaiI!Fu7Tq$j;1w}W!H?zi zAY;4#0O=m}$Sy-l(7bmjyI*rJ9FICShf$mI@Bk)X}nVrvsl&*#7{^YnD3hR|<>2 zX~u9eeYyATLc}?OG`mGY24rwJ1Gzt8{V6y~ulX8>n@+!$-?^~revGrz_4|afd#k6$ z(iU|kc7+>8eF!`rIOd}cm?A(5PMPO(Tp%6)0PGLb6^yc#ZXV+Dc%$7rWCjBvM*x5H zuh`Uy-9%@>w~klA17^X4gMxF83D4LH*Se^)BE=@0_3inZk<*9}GbPX@WUs|0M;^TW zzO>BJTxgfE$8R+D=fh?38d!)6yq+0><0RuBKWfZaO5Os;cW)4I04@si$8tV`k*`L# zI(4JOithx?7S$O$U3c~##ZT)}$12E`5zB?k6K+@R%`BZucmPRt*)|5}cBXh9{!{#_ zEWJY;k?D%=urfWwhNc_FI%_VTE2M4h6wgRwJFHH*j&ttE(QHk5GB#zA@=? zG_2nZ12l-LPC!5d5Ic+$>06SNy-sUTk8#Mgt61JEeKI#ChzT4KtSSljcJ1}xRsN^c zomZpia6X~ZI#d>spoCo9+OtX9%Fb2CC)|t@Dn^GUnbI*C>@^wgA~^WVc~b$`lf4PX z7<+bM$9z=#Zl%&R`#XfwW6h=MGyF7w-0fBv+9Mc9(BnH9_|9+#6?AYxuRAE7R-cg^ zqW=I`ztpy^?A|C2T~sImNf^K$gXL4SZDXl)*d?>kbq!v|8IOx3Hj_Ld&H&s%#&`gJ zm1A$y`d+1fad4@t+SrBwTiM!tLzCR${IQ_z##oPfPN8F|s~x5R6kd4lZ>LD*+mbTK ztlat^L;WWh16)tExrRxjf-*N? z?H*!Jt^hoHQd?%u^9Zlvzqi>pWv>Ge{g2k z`ht6}4Gc{7tT|=!fVfeRxaElMG0qKW?7s^C01mX^hCL5Zyp;}oS?83K{J{QIOOu!3 zi)G11KZ;25@zm}=XI|SowARJRP<+_I1O+~yN}ByMe%BWez*6O51eu^4qbfk!!M#TI z2yvVon)SesMS>A;W767WXa*Gw3Zv!NXYby)&Y`9Chf>Kjb~>GJ-L=0_5k~l8#0H01$J={{ZFn`juThd2^@e-wA*4w@M@u1iFI`7y$q{vCpSZ zT{B-(l08#SDWb~zrLN=CD#IQxDGf5E6GDrXr4}R53qIltzES~UPCCOZ? z4470ODNsobxB&k@0Kj(i?OKk5>Bs6T`@4%v+uI4_O}`i*mE(~C9C*8c9D#-P#%oD; z_%Ls-B$n@4ws~YeX$%ZloL~}j@*ckCv`Q{~BO;fE{{RuD>E4{Y(ql7SU5P}tu!6Ao ztmaX_aoR^2S5bg_si>V&wt74_x7vlor+vfQK^j6p-OGYbaz@k1?Vi;qLF#+UtNYzK z?ljxRv1N$K3{t^@6}UV3W91pgrcX7J{6W^G>K#tcr(`y>rdct``xKU)RP)&w0>CvjkPYnZ90gBuNy`KLxvf>idVozj zTL>+$W0_docvp%%0uLA@dGa~q?}JoP{uT8NoS=wfxJ|=%g>x7rdf=Ylp{pUQ#nZk$ zg~p8bGg~N;q49&W!KkUnGcO+`xHHJAnk?{PXF}HDb3{dX43iY4YfW-(f=FzNCcZ)ACtN4P@U0BewwZN7PrA zZKS)JLj)HRESD$4Ih26qjy&Ib^>^W(n|GsFHMQ_`2_@5^TobUYAP_w{1cCl_PF|5< z-u}N(%h$`Pj*5RT=^7aXQd}!EtGVzM8yO&A06FKjDyLYGH&4Bhx|m31WALhgaFkF`rt?b&bf6 z1!iXa!vor=#+u#m%X3qX$Bm_E#=#0X1S=@X;GNNqt7S>i5|xt zjsp$|&l#$VEh^gYSe?^R8u zY8te;(JVCq2m^@$g?ZB$Yt&#U!3l@)52Sew8<;{{TPis^rQ25wF~Iy_?Lc_f{7&GRbc5 z`^9w!%%jtu2<&PnSoM|nQ;6)E!V7pjRAZksxfug3#yxv}wVD_4q-Y_5nb!v_FuY)& z=bEh5AiA`$_$`x1Q1E~KKZ4tN;*^6G)GpWbe9^KwYPY#Gs7`n85O694I}3I5_%H)GkH+ z)5T!3ExGe5%tOf79F{5o`+r)Y$-S((MRJR1HElZ9ckv;b_aBv%s>k+HIs4R=>Pr=y z#EQ~LTR9{Fp2M*Nj>ENMlB~&Vuk!?GsUs{`tCk zSZ^(+m9G37lIX{FGuZxa2chl7U@YyCuOp5*)<@^~2wac9HNEMZsVpsSFE2CTqX^mK zC4v*qNCP7|?~2JNEO4U#025s88g7=cx#}B@TT0aQtGgx|bo+$6WJ1iP7i)Tu+>HBX zyxz&J!eb! zn5^MT$7E@F$~%IgN2$YuQR!rqq=PzcnV!-trqs0yzn@bmV=53EUG0c(pvY=Hf+joNJ*NkSi-8uM! zrCuyhO5(~u0<2d!RRfcSkPWy14p=XKD!#8I?i z3=b|nvD+2Se-}SyS?OtQ61-Z3J3(V%ZcJwknSxj?NnbulkM$UdMs0O)V4_3)#QeqEm;NbCwUB# zT--dHHV0`~uwP(v#YYjK?x6FYdFG{f5qOG*`pYLDk)BWfm8QSpfb(BM4`Mtw;QMy2 z#^)_*^!W{hK*542Vc38&DamD$M`xN@Byw`iBNin5$*UV6y zIXDN9KIGHT9X+($t!5hsx3RUFD`shLU5S!KVxd(O9>_`NhaYixiFPTsWOw3|xe#N@ zqwFf$4NzQ90_pm8jXmsys#=jG(ss#gGhp%a&mF4P*4L|<$+XfetoL_l?Vv(O{$gm- zmn=MQt1^Bn5yPqa8ZdW$T(|urHMYCy{-(LO-F2y3#|Q%kc8OoNBg&+GDvMsS*EDFu zO@3yz7$NO${Hyg)K_6UVl^|J@`u_l;1-6%{-cJ-Z_ID+vV4;jm6lC`&90A;#-tbnnLN|7wT=3T1Q2*R_sONkVlp@8BLo7c893w9 z-kB;u1$&B|)+)%7TTF`_hzT>Ysm=y)J+q(En%s<&k0Wb_MFbuWeB6pX>w-cl`i}Jc zb~eC%_f)b%JwSFp$W(}9(QU(gP1{}M0HQb@Fmf{8#(2o3z$<(jU)vgQ>`8tZEY|2+ z$r_hw1C|l8jyn=-Qx?6dh@p3|wwriF3k;i%;twaD2ORxtA*XbtI<|`s?4xh-2ys2k z*Gwci2ZIR#Q{{qtcd5FDk9ViNsz|cD_Y6`Pp#hpg21yuhz;`EsSSJipdUY!{Mp;tS z;^~@gLr{CmM~hg~CAW-u)so>xSOPf6_9XK~rD|ygrEO_!vWRU^%8xTE5?oJ_fH91U zqp)76i%ZsRQ%uLk>GE4ByKux3R|Rv0M#g!`s?9PTS4_RRd$B6Z6kIREnS4S6;Q>s5 zaQ*vd=}=fA(@CO!ER(jGAMpPDq1IrW%`b^~?2_@F#fk6FxXx=?sOl41U3C@6f8NDv zOiji^ZB@vuo$ik{q*iOwGI&$M-WxQ^W14q3Asq#jGvg#@#_O zq_d-*z!0UjkTbO44*4GSbnz*@YwL2jWN}(qZTM$6w|Om6aU@ei;}r17JIC>7-y9mc z>g`5tKTFpxE!~n~Z2~KfHWqhWip%s|FQ?u@_p(C_X5FJDq!|aEG2hy)`qjQGMATN) zmog=?Cm?PM#}ZlW-K{HL0J418A>wzM8A@YD8YMLVt4}GD#i&WYRwo%SY2%hj2yY4c{O5W~z8&9OtBz@ zHt4%^pW+Ag9M#mCK9Fysg|xc`R!JF%i*7dU=OFyeVSf)UfA{X55o1EoNt_(#$lp5J z>oSoY;Zk>e9nl!{@-0U`Hw?OB=@Y{>C|gE*K%b^H{Zj7M9SSI*Q;TbZD}MZp?(*l3 z*&i>pSn54HqQk1`utTRpvD`UV%efpC?a#9x(y)CGbXN07NaF#G!Xa$;8`S>*TIkxV zxBJhbga)ChD0CQ`ZZArCr^xM?=(cXw7GG*9CuhEO!J)3z3yZIN*`` zdeXY5q_m4|66LL6yM|M>2{$FU+%gCww-ti%k+m&mONfii*G^fBkTae;dl6knt0s2o z(IE}YQIbzSgSn?TOBCTv?hu;E8Cu}y5ovIEDp@AM;0^1Z-%5pdCYNh6Lnn^zPn%-` z6C>A(zjarQT!mr@?eZ0Z4VRUUGFge|{;!p9gjBA~lADUy)(tiW3Q=cZ+=2+f2eAhf z-QJb55DLz*%0}_x1kdC=%21wH9lmv( zMm{uo{?PQTNX+Wdp|^z{CB$%t3y^#zKh}lZ#@_c#flgy9lD?dP2l&!$8_6#NJ8_zg zsy=lsIPeHn=kG!swkBWdcQ*G1-X@GjrDOo0BptzrKUEa&mDO5?nRylMy4(2ChXA~O zj98rW?!?sC^uu|jU))7+ZFhKOjvHi=keHNm?Xt&I;fvny|M$K#Iu>twm^UN>bwsHsrvmvH|8%WX<9JM6ub ze~nT^!Z%%nD=#1p{8HhSqFGiqAj*Xfc{ug@eQIftaKEH!A?n-z05o&zTJW}DRpMLr z8^IXI^Pvx3bzQBUymtES_T(NL2W2X%xBw_1@sFiugSg;3{4Fw2iXa;AAhTsmb`Y)bTXyE#8#oGz^8TvEqD( z&bjQ~GC&B}SRChQ;QpT~-e_GF7O|n}8jhs*5?ss~o*C|Tr-sMK#HX2ZppozL#Y@I~ z*-WsdwH9-JFYD1mXK^*QlXAvFs7RGIH*Lf#;EWSfW&BgsBo>lMqv`hx6PXv`E~be* zxgKu$UtAt5p7qY0y(@hky{~{oNg`PV!prATk{x)#1P(LapeN$DRjygDETr0eqDvGx zA8b}5SC%%^B}j(YpjC-RbJ%6S`HNI=$7b>fL&!L&xyims#t}<&b^ep;d+w@zOzIZ; zOcx*^HxSwFX$eUH-gyTA9A_M4dsO{%@gq&pZtv|adU&Ry(YTKFd>{*MWy>$-z+l;2 z`__N(jg>U3sSKtTxo;83j6ac5MNUr(<_>d%ow)U?9=)-Wez|)%Bv+KiU7kn4T+1sG zN$duDdsibAAfc_rwCzl$he$>vdwgOJ^U;;lL%;yW1bk9S!4tI zY<)*;5PtQmk!_^tJz8iYfuoY@APjL0&Qa8E7#yf9KtB1cnR?k?hP(d&Cq5lKDajnd zdZZKJ}V?HHTkB$6bM5FSNn%4Ck*k?BnS9oybrLDZI-jE@N# z)G(BaLJ+bfizdPk8D+s>amn_q@arcy_>xIA@&3)dM@bBG@Z#G~zQDOt}KUP}ebMsFsL+|24Q z8dm@_W9E4{6#9IgG^y>g9df0b&llJ?p) zMZBGvrYYh{Y_0%Nlb#0$J?lOAq^?ezaHcrXWQ?kMp~DmW>qQQ&bv4DEw~rItS=tHi zNni;q6cM+%!jjE_>Y(E_%96Zs{LM+!nFm+ZH4Pr(+6(KA9xsVFgte@pPjUk?z7*h8 zu`Z~QJIimQj5tI4=|)Kej&Og+y=VUb6(wYwPq&yO-8_kKs0Z+>lw_Cy!5+Q~okJpQaCu46#CxO66njNRCBO z^gbuh@mgQQNhW@l)8d+65n_kIPCIQF{+Ow_{{W3wsTVEXo<^5d7M41snnjQio05{P z=n`)JB0`P`{_j1i6qDc0e`IwV#<-5;G%Xsi5&6aj0OPUkk4lm)BQeV8k}bTl7D)Gg zQdb|~d7*J7t9%OwfGP-z86O*48%G~D&*@$Cb6BbGu4BPTrf?N7AmfcSBa z#N__~)ls~88Z*4(CnOFBtrtiHn^=?TGvXBR@PKaY zbNRawT0I9}T|=lf+aC%|`gEQHO7g3Cilvkdp+?>_-#zOyawd85-Zo`J3gloo+PU@b z`q9n4dF8l}hLTKgY-2oQ?ZtIlX}=GybSU*^>D#M2ceplyLn8(Z6gTj`Hu5Ug^P@T{ z4PGq}$*Wr4U8r=5DcO~WIP)@)50v`)RJDa1R^u~C3%Fg;Mk8Et$E8oR(XKC{z*1u_ z80}%{&MTtX^e;zhx@`J}nbh~oWomZIGlVM<@8&F{9mPtu{6B$G88p7MwPd(c;P{X! z5{%<3hx2pC6s0}398ynn4{oB_%&xIXw5SV=j#w{a^{pO(uf&kuMHR<|9n54jQv&In za7R0rzo8@LS*vLwOQ)9VBXJ0eZ-Pz%CD#l-VxIk%XL?lW7g%sd{597M2OIIUJBwjF2hl?xWOt>}y(;lUz-I5)rY2 zI5DQ#K0|iV$id?S8LWNB#8}w1rQC8PjVFpyQM-`1%AZl&wQ00y>?eI7*xt33(A^rw zz%m21jHhYz$nT!Vii5_T`;v^@X|Bg((JvC=R$V-?@lIL^qw{2MByBts=WLO{6@}}L zkhH(Ew>DM++W1KtvqO!Ji)|cuIsB>&dC$!7Y1?f|O$^5R)uKJI4wF1!yd_RBbHgFy zJp6`EYWMLH-cR>dZBt9vE(8rCph@BJiwAc_0f7X5Ly|`yYQZRE#WbSs__K5}-18wEZgTcDT}_yGd`hql+60QrkOE|Rgyh2L_o}5MUQbkh(g4WdBMl0dMmZo zHS5;Wx<=o|ymBL-QtYNPevxw{j?1*toKUAq|$s$P@R zwNHe#&{p$TBq_6nt$#7Pd7y9=KZ9!nrFb4O~s~WX8fR$<|jEIWAEOVd!=d?NE+(G>J{1IZg|K6 zbBv#Fy)4<^}YW9q&!$~=JU?C?6&^^)?uf(*L2v7gGN=gAUL4G#H~rX>FgO7QG3F@xf$M}f( z0CG>v4&+u-UbMRD%TE&Ts4Xt+o5^o-ZKGS4eoom-`Gy8g?6!Cq6}O@49N(HL7<$f{ z81{sjMEb6a@%Kkhy3@WHt+qh0>GDkJHa|J?asl+sTWk78rzcO{-25J{bgf3l6@aFn zwiG#B$-6ujBeP(P(|Vs#bZS`<{`hqj+>#*$ZGna3KKKJ~Zhdp?D=E}nQKLQO*wJn^ zNuarpYfCgf1i8wQxFhV4aov|Wu7u|JiH0%tD|9}Yxzwk)f@|G3NSZ7Sx}?V3NZ;8E zM$mE3n2$z6_`?>yAR-MbWvw8SqV{d2F4SjKOr?un} zk!1weq9Y{krB|@pz=B6ExIVcUs}8!4r#0!c*!o)D#kFZ(M7oaI*;{yG6cX$d`3HQQ z;<;+-*QyAN#S)+4NWcT>NS5~YNY`}p1oSKAA7TYB56!4rogFGK!wo^BEj`wgZgM!2 zQHnMm`3!vl_wU70>%B5`dmEWsR?+ncEM-znyxAl%{GMEndyFyeYZGTJl*55<8yV0%Yl52RbJo5k)NXeDXF^>DV2hyx@?u4ZHWT-T4 zUhx&}bgSl##`xc83xn8(Vl(xt2zpbfjBcjd7?MIfK_uzs!N}|h9Q%9Ke@*LpzKXYv zr^5HTWK#HYM8L8mw&JC6lB9)W#zDc)y==7W?xCJGj_GY+m2hP@C}C)G*fNvA^#`2i zy;%rCyO5qq-(n24-(5nh;T`JG-XxA#`F8|7la4!ZD)QQ|$+q%<8H?;EECE0;PCMZCtjAf+X<#jemo)b_SDUbA zBr@%65!hsQ?geL-I+NRPb3`*I6>guhCfW79^`!U4MK5lVZimEj%CEC0C%NQ~GAicV zuXO_!jE@Lsxi9e>S-hK66SZ^OB=_dI@`&zcn`8ztV;P!IW+X|@e4zF@^!2IZQi>~k zIpnof_~6ADZES#f-Rs}D^{m-COj7>>KNllI-!mED}XBbsQHp_O?N zsbWcBc_3Aib$*uK6t6y}q+C6@D{mZ(2tg;66|!=tgPusnJ!?PG{aK`1z5VswwV}DR zM+)HpU|W*G2<}NFk>9p3D#u;6)BY0OEP85LHCPF{5fO@7z4`1^Eg z+q6dUycT>WNE@6J#|O1%EbUhM<5RfSr?#@RONBR9(J5He#ra~+INES9PI#-R^sb(@ zzp}f%mN{F(ju=JE!54-kou?Tjx6pC#Rc4MjJ(RE7%{V2Nb*;v|=)+%KHRh$LAiWC= zay!C|?}twifDm>k1RNZ3Rm*zj8EtpWu*w7AJ{5}c2^jC~O4Wi5PVI}Bk4@fm{vc}UZMPCZCC{#DR(hB#}R*%)+Ab9msl`uP{1 zhBHrheW)x^ODh{?1Z~_ixO(G{rfXr;og;O5ZMRxkH0u*{9l)Oo`3n{b@J`-+O*vt# z^rnMqbjv%Kt)qrhn5P7I%%jSMz`+do+}^_#U-*S{67)6XwwLkUTU;f)OC(^gj9J6H zr;K2p03DS;u6DQLER9vy*B_ay!%i<8Ul;HE`s_pLtGyFJ)U`RU*kbt@?KOY3`! zh$50`R7IaBh(XQSC9M%I=%eZS;LznBPY2EDab_A`k4~F`I85ve3TgnLM2Lu8#25SrWqi55x4M$Ya zl33x?tQO%J@*^+5Vc0Q&orjE{Tvlj1$>!zP?rBk%hT7wDlkok3*L2=wE8&oMIOSjG zTg_dMfjQ@Cv%4L!k07pf&@9QVX@!AYjAZ`+(i?Dwwp0DfiluEVLzyIauYApZc)Ve;<3ty$J8$e*(#((ecP9Hp|luCP2v z!52<2P7mfa)cT440R4``kaG+~W1mr6qIV0f>q8_Tij%kfM!J5wNBfN#Amwc$`hN{R zr&#n?>yM^H^29*XB6RL9^1V~%CSKI0L;K2nZL%i<5gyC zosIWPAN|J({J>mXW1sIWFR7nqo}QR>{=KR%Oga6D3V=>-ZZI+PPAgksr=Stbb`jl3 zDyNXG=zg__HfZ6Nr|NI%`gvzsW9iA1x#^8U{{Ty3jc**Xk1TT*R>ud>9DORP{{W&j zYkA=|Vk_A2uFQ-Osr6hj$;ZE~b>z8l*2^kKELOy_#={D7!JBqDJFo#hzzQgCQS}Kg zFC$5rq-kC6VSQZ=`QWM}f0hs%tP4lsTH09w%gC_u1Y>C;A$j}{3c zbFg!U2l^V!>AIGiZFZAtFX~$_T(4AA#GoXXnzyw-8-pXYSxx^)@*LBBv@io zBJ;U|gWrLZ&2Me3^h>L2C}Xn4qzbdf&Q!G7lW~ps2Od$*LBa2uxYHxIgRCUh;kSkh zYg^`9J9dna&;yVdmN+LT2Pcu=iq86&r0l=LovJw&p{HG2Ocq-y;xIEp@3$()cfVs! zM{6*(n&mC!mKaCxWkfhZ-;?RVtzGtutlwR|)z`tTxt>WDFNi3h5>J(g8WTO4iY z2iRh^onxZQH$rr-nKTy>&2MiLppHH6UO?QO^&G}(x{*56T*8=LzJ zDdSPGVQ^Ui?nno*IRdI3Bo|&Sn2Oa)@9?9DZSTPE>HZZi#uvHKZSuPkA#r$~By6oB zVjvuRv7gZQs|L|7S_F97-e{zZIol{01a>*?{{U*1x+0?v=6d5tR*l*j+YCwl=)?EP z&NwINX#W6a{^_DwR|H@m4YEJ2YX?tXMQ%)xKG?vv z6=>s(M5ybG`I|mocwoHZlybR#5>Fgs$+G-6(jWdQZSJLwXNuY+iZyiDs*DC$_sJ}H z#u)vo-&p)E>Rnf=ZuN~G{{Tz0b`J_I!b-ypxSukH{@;9Y?O7g={6mvPp5EH$Pqw*< zN~|y?!SM@cxn@=z@z?=fRu9CBO(`e;0C{?QsdP4310<4LEU;jK$A|#i>UrY1&j(Wu zqFI!7e_p1a8xz4CH}!u3-nuY zURqdwA54%-=7+%XA2}H=9F+&q7h074Wz$;K%r_3RT^m@kmqdaBmkd+{eD?tRaZ3DJ zVW?@HQKVeM1UH@yjl>sD5mh(bA~tXX7Re->;}{tCstTr@x&HvMxl6-v>|yj766!As zMEHqT!t}C7knHO5n83lvRsj8QMQ^nG3;4QsrLMJ)3OniMSCOsYD;NrdnFt^CV0(oG za>lcoFHTu$mK{lRrfGK;mv-N?eBU#`Roq31?Bs1S=ln71P>j7owq-OfmnYW`4w-w^QtO(YiZ9D`3|eWHDcKqY44YksaM))YW3W8dr(CeopH$HF=~7F3G`5Xn zhA9r^SXew`c5{GJ>&0JAv5u`eQMHCEE454ML})ViCC(j>%fepW{c5OWP^TN?`3Xh7 zPZ0GSQpeRgqTHg1CAyG5hsuWBNydJB*QS5jwjU4h^4G-O#J9)E`H0?wisjMtjpUk@ z$538s8hUB>7Wa4M72CyVyfVAOk@vJ|3xXiTcs|`ZqP+O*QG<68@ZsJ2SLoXlnl2^;_Gw)bFh0vw9c=cAeXVm7K zGF-638QX9|2;`|_f({4fCnFWp{{Rqgd~GRhjEy9a-NBjjfZ_cy^aOpY4W>yItHkq3 z98g7bYFW2sMqTn-jt}0j$M8|1^JUlK9+`ir>b*5BlgDdiX>Byui~u`_h8RYpjEu1z z@(BkVRtKUrZFf@DTUr`~mZ{~4M$%#!5p(5{NygoyBp$%==4$EvXQ@XAPIUA$vk^6_ z7?D6Lzi7jg-yWFxgXvuBNDexEgi!c_;aQmu0A}%%*Vpe;UxJADv!L~ssduS#bQYFY zcWrm6Y40piBxQ=YWF8iAg#ZZ%&v3sgw)_}bm!=)=A(|VBT*&JvDhMbxmCwuh)f?Z- zZTLfPsz{^aBZnK+gFpQF7ic-hAd&Yy>t)b4Nqf^alBCj1ejP!LhCDI>2OlmCQ8v_S zyOUJYXN@D)B=||~+9;dGjg@2r&Esb{A2Jw^y+Y6})@^gZyD_p_s8)_d$d?6|A0y^8 ztJ&gx6HAg91UFF6w|a~#XU&p*dt>Zq^jTT@mRZb6wd4VWX8}RaBD?1~lJ9NAnw6x0 z=i!dV1y69q_xfU?%@IKoi4ZVgKl+dO)G6<#T|!5b!<)j9)dY)>pfTWJihkbu#kQ>W zULFYZMI+<+lTvPhM#ZUBVA&qaL_KJAYqm8p;7QD0 zp`P89r-I@z4?ZLgGm2;t7|E4(jsRnVPuymu$r_`quD5rh^v6scI?*n^Dm1pZJ6VKl zg$2B)j2!pkuR43EziMl}M`7@B!TT|uAuu^Jjn9I3AKCf$tOlFa*1C0_gc@X#$B-ku zGN~hPloGf5I;nw!Xa3 zHrP*m*6D1Bjka+b{_}zdVma?x{YvXaPP)^r?$%S(eh_O%0ru?*`2>Tv(ff+XFH-2& znpL#7x#`x6Qwgt;Gm1UB~8CO^=bdHalMrMb8!cL(|$U&C>5{tj5cwjn*Kv zY;KpvEs$~v=ZvVP^u0T#zuc`-(@r-w+6~jE#5)%ZrGjS#fg|{R`_dul%@E!6ys&Dd zHjtoL#O#FJCyd8D;GTHM9+WUS9-AyNU9{Ix8<@;wFk_ZEBLsa7TAN62*_TV3#o+$x zUI@lV=I%Rs)?`RlU9tj4bA#zqV^T(KWM_O6f#s1-7-W0$-(D*6wqEL2*DqwY*MdT0 zl(1QcnMa?o^&P$aDcvDs_}wY==kX*`0g71w-76thP)|6?&(f;ywI{uSA-W<}R$?Rr z5+U3`2jx!bF{-_d-MsB8TgbA?xIQA5@{kk^o^eNTI$ocwydXvdkjgg}wzwE5&NxH!?F@wi6?z?MsE|sV)oYCCHGLHyJ7^J0`>~)jy*iWozj}_8#rz5t<;7r zU&3*aOO^l(dwSH^6V0ExxXy%@LWKstm#Z?!z_-Jjf zRpX6OV_79l$mHbX-y;NbQ7$@e7lbu~ENI+~pS(uN;|I9ooc89bd9lmOHATJ**P17F z=^neZ)R;b*sytF7?OR=Gd`0Aue6$##IJ1wvlCy_0Q#q zI-cbE9lePs0N0tV^vz30v@0}Vp~SJYE+qwA?#bKc1MGckanf+<+O~xp*C}ylaRbPz z7DjB5w{(L8xelYuJ9aqDQ;{ff!E7#E@{1X^EVAF-gc^jvZMU{i(b~tmg&)}jouk#; zE!bBY{8iTf0BZFo!YN;e)0DyhIR;bAhwN~<{_S>5;4wmz~h>`ri5Rb%JWW3V+xj%{4`fn zLo(UQ<}{mW3dDB-yBcYtWh}){h9oE@Anhb`jP}k5IIWJgsA_uU)QPEF#>FBJ;Kv7r z6k|Cgd!9d)PwC#3eR9Sy`i0l*e;CdqJJvGz!DR#toN>FgUy~#;tCQHT9y#QCVz)5% zkvU-@I}>Z|W>beDPD1;hdsjlxe+?$P=&OBh`(277cNj#o5f*s&6OHA&6SQL;f&F$T zq`GyiqO=-tjUfaivC6_gPjkCH&(5p*hft0-v(oHuB!w;4_qUe^Cd^?+G82ZBr~y~_ ze=+A3g>|bds9H8;=%Jo*n$y->ccht{0K%kUxl|_wy<5_9CaE)u7i-na=IB1-Ta@-ul9LnC5Q|;{`xDC(NR)?X;e+ zwtX8=wx3Zk*ha$2<{Pc?z`64Xn>bO(7#{T^4vf?^kvN+ABxwkU4dqhc9xxwn5dQ#m zh(6h?xb>}PMM*U4n;lBm7V|==C0QGDZRBkru=0*DaqeoV#z_;5lVxn32i6w??i=f9 zMEc#xSuSp_qYNZx-0t`%fLvsZocdGu-4wH?kv-n4r#+kyt20`&OPsf(ZT1}G0zIou zt84Pjb!RQC*1~txZr&v^sFAl7Xn_O+jlkm|4|~(s#yyTHM-#~&XnrckBt6quZ1LGuF+LWk>x~V{#6g9 zI;QKYI*H)btS#ofb(&|mNQ%w-y`UTbGm+{Bc&9bZO5dm~{{Us17=9|!_0|D&+f%3 ze=ZIObDq^a^-NMtDS-%496~kRp?7T?$pB}QpI$3m;@-&=c$;!`F1)a|)wS(QsWst^ zGBDGuDLVKuBJGU1Vax7ps^AUSJ3#=NZ%oy?YA6g^Y%t8jYkWP0xSm2kw9AliIOjR8 zRn!{Jp{l@^$jXr!NN8gvgBAR)bK3ymVy-$VXVFAg2@qtRo+72T?%Dw)pFlFCpVKC= z^&KvyskYkTT_bl()U>oxN%yONK1=I+T|Z0CpKiC;7gHd*xSrx43NX1Us>)7r#|zHl zIX&=D>N4ELBvU)d91kQavaogV$t|;Qwn^i+JYtb^c=NkFk~6a$mTos6PoM*UJqO&? zZME8{xs0)AH&_UWS&3jUIOOK6QEz_#09+biqm6m^f0yg-KL(c`pQy!uq{i%G8Cw;7 zxNdn?!xmf<K@Hz=T;{G)PkAlZb0%yWcf|I6hx$XK zthIeYEjC!j=n>WKBX(0I!1Kw-?umgI^dvF$tGlk8o(`I_*YsP-BYS8C#PCZYDhY6> zZyaM8UOU{qcI)g;&%S*J>bz56zvbIzK zBZrpDu|4@9fszW5S(ZuUohRwHw{XddIFeoK=4EZH4czy$+iJ)>Ml#CN+OozNoS!%+ z)cbv_WvyzqY0$AE%w$sn#vU{~a-;%z0ONK*IP^7==%`0j^^TRJ-a1>^O6}wg;h+kI zw&&A0#(6ao{yw1BwNLkBPqb^h-{@Y-Eo9wcIECHnv?&{1`OrTX=2YNi_4Sj~Y45 zNMsGUvOMhA9CkjKru3eJ8ddb~rs;QYaugPGAi5BS&IsGvI6U{`y;nZ2IPE0w<@%Ol z={#y~NiUB70HGH^>BFH~_&Hmb5;HWsVvb_-KWG0 zxhIlCCA{k#ig$3x*z)m?M{H-mH4fuPBVV!9bsL>h;MvU_@vn@hcZOAp?hFAu4ClY= zR=g9bU2op3sdaF;z4lyPBMsM9+P0UZY4`eFjn(|qP2kB1w{WoeNiDo^J9a*psCTlx zmrLAhQ=<5ADQRF<%kXi4*unl)KddfdvC*fxnY9}OZ+8rVbr?mu+&F&|Vz-D?ovMC+ zTI_mXSM)x+)ArVoYg#?w*#r#{nLI(3Rl(0a{b{a~6H3;|gZo1=x_h(ApNJE#r=V!p zp&r>y!yyx?1p_Cq%gf%f43TMijB-mX^4p9PwjI7F8D$&2jyd%l*M0m+=}wutxV+J& z>RUY$V{}>w?%|k)0mxDux%F zv1V`?0%U@C=i7>_YjXo!+PumpjzbfO-y7`Vl7uNc6xTJc_fylXTE{ zv8y(^RHIhZ1)NhrFHjdY=`)4o>>#K;^23aG^sbZCrWOb$xQbM_hB%o)!)L;Aj2?T* z82kLIkaSeGy;rJPEX82g1n{l&ncMN!%Obg#kfvR1xj@4kX z4A}-ew7v2MGtM*A3=`$OM)EB4Vx@C z5xDN|_%bq){gdzVs;xKi0`AjOY5xFaX`ck+!O`w7IoQ9VY(9<&~zlzO@qqM{TW;%l0+7&^p_uzjTQQQFO$B=YEf^ zN?`j(C~ybM`c<9&hoycY%N^dGZ*CzViEnLPW4g6$0;@D9hZ)Go`C!&Jss8{Cb&Uc! zE*fiF%M2ghM<7W(fN0y0Ng#2MGwoBHWmcZVAt<*^67N3{?k^*~v6oM=zKZQxBD}t` ziDv@y34a=-DI$QO!~h6D_rHXIi~s|JUW@!w(yrDntkq=;1*=$ES*u0neakdb z9uFADu5p}-=JkDDHWbgq@;NT3NIj(j-o_U+o*_vmOLXQ0_*xl>x zdwSO5+RD-6xVV=Q#SDe`3daLGLubDS=TwvaBy_}`O$=H}O{(2&ZyM&`^2Z!%&4k_g z&QGTt=R8-LI)kY-o~5}G>$;WI^Dii}zwXoilo(O=6}S8Xh3@|V66`=w@WF3!B*P#L zrZR*1u&q+)d^l>Gx+z(;J&jLNTj^<{TS9FvBh<9ZJFOYnJ4rPgspcBFiSLw zHcPR?E(zz$o_>Ey=2{k`7fxx6x_p6RypBs#D5^>f zy;o+M{mKh_>sDJ=@uIg9#;(!?zzh!~l4`c^@bpV%EG@1)CRK~Y5!(huWNpU>IXV2i z`ewQ7X{o5{7rK<8+H$+Xj5g%q02t@WdGFhwN`lEGhouplNqsNy(@)cN zt0@ksmQ8NfkO3ml zV$z>t6X@Du=iu3LGnAcx`)4&%uIbkH5kWPF#3C0c;pE+dMpS|T_CKX)nfW*w_o!OJ zM<$g#bFf{?N@U~CIUnU#W632YY_53YrP4D{Y8Q~9jvL#QiLgp6r)kG*j^2axtu#8G zpq)Doth(bqrE5B@F~|!Tp~>=sS8jKm*!HYGaC@4)uqIxdk`uV*V*7rTvP$U0njzdW zEMU^3HPR=n*mKgz3Sf$goHRE}jx<=Y}kn_e~^EKm&VlIXSHPmOF^xok3O^#yBIkf2BPY%f}$`KxGU($~nN3xgNi2O$@fV zXfMCv;&)3bAWN~}e=ET)2G%{+}7aDxXwsFfefJD+GZ98^u zCmyH20FPR$>5W~qok~=*o?9!aflmhD5~Q(EI3yl+jAo=Q{e}LUcO(npP2iVgBWWzr zHV3ieJ-w>3S>*9#g@jiyEUk#AUFtu3H*Zz!y@>5n!xYm=Q4Gzdot-mQ{6WxLLey=i zzKt$tC`5Z$Fkx`=F(3>d&PGS}MPO&@+Y7fg_K9&U(q&K>!iGOmY6O~fz2&gGSc;J5 z5~t7n2>c!nJpQ>O9qU=rT{&lIVEUExD~wF0^Q9L!p0U@d^}|C?YN!?9)Ntk>nYZ{R-2~WSxa<(XgWe6v#=Rexo}Gt zknnsY+%wxa`GHuxe0iRkt2OvJaBmk#vb@%f^}UV1PAk5tsKet$tuYcH|(VaV~+e0nhxqSC`bASqN$|eqQJrAcNgO5--)cibyu_Cj& zPvRDfs>=!`*X-lD_a)j5z8bD_UprLiuo>-Io2^dH*48=RRdtm^#IcZCMI#`A?T&JA z0IbNR%&{X$~Vp>U~N14`0%;eOIeq>Gsw(xe|KUQ(Ro8pD=>NVmph}&m%YyL+X3?^*<`K)AX$~MzjfT ziyk=30lAOY*1C8gx_J7@^ZgvIqa*4i=@rNJXLPQeu}gOvqy~AP%+mO*k^}z$P(Rcf zwCTMf!$#Ic^}X%Li^Fs=PJywJ-+JSL^ICG|Qk?1 zmp}4B{?Yy~)6nNin~#~9WgGILT8^aMX{@00Cr{bFV^jYC=42nlN4K!{`qs|USmKN+ z3$%J;kJ6E4qTAU;Zw;EJ?g9Zw&xkg*FU9K zIjoOzQH#c@7AbZRg@#9qjCoJbzB?L;s%!rM4XRqna%XKVBW0B#RSq2E50mZBY-c}e z%k-g_Pl`)>+lj93#70Sg48q;XTt~aHV5cN|@#t$otyx%IPaE3&K(pN%{`{$VCLrZh zE_|Z|=RSn+1y4+Icie@`EA}mH`i9cw+BI2Zh@GLPi~%bD0C;nZ`(yN^Xj&uLSa>kC zgs2(Yc!j5LGZy|Q3&wCfov}^YSw#ThamVXY(RaAO^Jk0>Y74KNUfYxVoLb*vX^Ea0 zA(DB#C&7533vR8B*%7LfkC`;o8g8EfCMz3NVsco-7?bWv$WLgWj?(Gj=fb&B-Qv%;svcM7Ij)u&tcfDQgPsDq%YoS}ow6hDy_Necjty&`VhGk)fRd10QtDJ37N|ie? z{U_8Kg`L&4^m=sX!6SQ{Vn#N3l#)h1pyICWb%}KgyN8-PU^is6R{}-^p3DHi{{Yl# zPPSya(e)TpFD%y5#-luzWFU9?);mJcwc7}v#1qYEi(j z&eyuN?aXC783v!Hn8Pa(I_wy@J9lOYz`F}ZP!gPz^TaamhC`9$)Imu72;4BOc9T=&n`v(Fmdxi(?T zEm3XkXs&O(G$e9ripJ%xF8=^}g$(yd2xV|e`i1M2OvsJc@F?@K?}QS3t4-r*m;{;;c^4j7Zry1+kvsdR6D+Zi%OLO@^5!r{h=~d#?^1Mj*Eg>fnZH z@W%c<4ox#fxsvkhY|>fUxeBVTGF{kbf^)Zmdmnny^jAu1IxAntuj-I%a5+Y_XGh-v z8?wG)NZ^jg(z%*EJg+Rd?eH$1N0B6O)6*IsM&3aroja(SaXBgly!5JhR z2H^cGL8bL<+CsnV>rS8P>4O;-<_M*}xGZ*t+~Vr0BIqpYImA#mAXxH z9lYxzM;v>$?vE|o<_FW#xuxEntW790rLC8UPTz{S0Gte*DCF_Yb@8P*sWS|u;^?sI z{;ZN+J5&>2++WReAh?p|Xk)i_AOKSd+z=FV+XLxaUYpi*&Z7J}dltHm$Es~$S#9r$ z@MMvYmqike{CP^ZeCLx~e^SzIWVQz9RQQ%@Ak+xxx1Hh;QuK9$pT_-u9VoSM?+Rd45m&K_r25og%t?r}Kt|qjK`K=?rkHQT3M^-9wc7|^weJRa9Rg&)8!j>r)#e_`B zbn5OAfx*Ei9ghU_ScmA|roCT?4Q;5wZECjBJ&ciEhD4CEsVd6(!>}E|1Lsh0G&?yi zqHdtJ)NOAq;TFws>m)69rhlK>q~MySP7!h3=yxBBddk5pMMp{L*J*S7lsST!gFa|R8!3`Q5QJdAxgu1egB&~(RC-E{gR*jYr< z0#kgp;nb3IfW(e|N9|5H;}n!t1lzq)kd@L9F7ruyQ7n8>f{TMumNiLx+#m$R8UP#0-#UA|jJCyqN0Q%N))h~{rdv9`%mhP8w z8L_u;5wTeNj{8>!+z*~|xi^uw%Kpj!0L6Qinuo#I!EDl&DRHKlWJwof%lKvPir4a!kF~Cq^f#7lj0mgsns&2lzxLbV==Fal+Z-QiYe?6%I1)5_`K~2td{l{;6-O!t_F@k>3&20a&o#0zs%1BAntqhkwH+qq zuEb{U7%kMu!1!$>nZqX_0#BwnB#!*luB;ZFSE~5-`Xsijv3RX{@hXjWFh6&(LCb%8 zxC7=YE}gF5-6U^0YlvfV=`GrCX%9YS^ij`xytC>EBfndVt2o@CTzEKE3=16R{{S-a z^7&MJNkKTp6L8klnVE*qRMWK|gtkj?&PqfNBq;2o=}d#q1Y)mc(c`rit$33pP^tKrF|vs= zPSU5_81x)t-l`_BX1B62Tma^8_>3RP5yl%Ie}3$v-mcdKsSwj9L}}4vG3U%NpO$N^ z{{XW#*ZfJBcm#gWlwkV#lDP%mlXPR6>f8xhIm7`Ff@M-j4lsT8jy+Gv*JJ+xX2@u$=GUO5H#QTC&mP?!L?pQj6vqGnNdtGMy(d?* zS-LY&xd|tY7K3!Kry%ZofCrb<@qzW?s+XD5Ws74;sP$!y%=)GM`>mT||(ZSU_f)MO9Lq z{{W8|u5Y7SCY$)77LgB#Y^S)mMu|H{7F+@e$pie&OARiM(>)`-D4{!i!Bv>xpX~AmJ#*T)XW|Z* zr?*tJw~lNq?N`Bg%0nyKht9`BhAI3$PtVQ*Isn-+D~m~zqF0FmM;t*^VL)Or{HbB&QOrb~cMJ_; z?X@erYzU@pzu9jv{S8~&bpjKMmU#z7obcIGK{Yk4At;PBpc+QGcRa!D*R@)ds(@MB1evzX8?o4Esw)Fi2U zlY_T?g?Q1C$>&qMqVgi9AW1vwZz3AnkxyedrAO zH|i@yAfv&aSseKzUKWmjDZnElrC8iZwioWmvL}WR5>Jtd$YJy1qhBd8s~$)=&-(k+ zc-V_+Kqm}9Jk`9Sm$N#ii58uxK+;-9u(~JjVLzTT@AF?~{cvj1*3~WNNv%w%=y-K* z)y(6+xfjOfIgEEry_#eLdlIK4vE-BM?^+!u?mO!kt}nGKSP+tr9Fj47jAVt!sN{3a zMoGQ~sd98pPe#ys=HJ1dIP|?`2H569v1C5n@N@l>-_VNZ8oxnx2A6Yj3AU11p&~_i zkdQ#neD>gQ5A&@R?Z%yFEPn{sH*hp>dX;#G18e=k`!sO{cmTCyrgn&{r)?#gpLOQA(9th_@$km|J zuMuFnL=(d%$vmH#a_HD2K-T#(DyycP#cw6^~Mh>GSJZdO>OkC4bCjdFf|T>a}o zJ+sBH+7%}ZMwSnbWtjG2ZTJDYVtcLTk* z6Q6L(Mk^cBT9ley)x3(Kqm?8sgOKAOsd4f@PpxN`Hx+Q~UE;ZIHg38{Op*w6h;J@p zo@;BHo2$K^Xorh#(S%jTNen^%0195Ep+R{qwY9_;Tj{jDKH-&*nOz@pvwmO$qUAvY zlkZY2ptHD!811*gBdkh>+?Q8pR%{hMU^1ti)Tr+7tdc8$67mFZ5iVeGaM;S@w%ifi z{{V$^A5oD@b^IL|boiwdlcsV$r_dt2)pRR+OH^q!Rcra?zydf`%xe;$;SdEQ+~jjn z=dk#w&Acd@HiXPW93L9z2OQ^}ym6nEZ*6sLKUTPsZ8akB?33VQc*b`Omu`JV<|98U z(|#ZLI-0JLb!BUNrrggglL=tow+L{`-@(WOKRj1SWSYlkI#7zqrS5Ztyh~ejw$tMg zz=LYzwKE(>>r##>f8vgp@w&Cmg{9S#wt)%w`OA@$BY*;cyr}Yy{1!RKdX6lylhYMMrxumB zWQ|u+_)CS;dU{wcHH)9!$Kf5{3_p%nZ|!>zKr`RIkEZlUG;KCJTXVae(#U(r{;X>S z(;YKDi+2s~vZ)QT46YqdhzQ8Q2bDY=_QiA!GhEZJX83zc_$0Z;L?Oc;pKSK+$sZv` zWY-&@#U%OUwNcMtDyOLLrCWs2^rD}(E|3S1jEh)D8{6hGa6QgF>TUhx&|9+Dv@3ka z3hp;7Bl~1}x3c^4c<)K4S}vGncwR{^Cn2YvX58|hnf`!qD!9u|{mUF&w(MQ#_K|3| zDQjR}H3~s(+_^p3y~(E)0wO3-s-p@3>?$l*hd;eqyM*cS^ySs<#l&*nPrlyT1zpV( z?IbfVa5&EHzzk<66-_qxENw*<#{wDVVip)9GRoxehzJ=!atF+sjc~GF-5oB~-ZQi{ z+~{y%i1t-K{72*uVV3r;ebJitRBBSg3~aYeaQKbx7rDonar_JUnEeNG1$2ED^GLPv zbn87z3#-`VEpkhb5?N2?WAE*OouC2fTd;JOE0+k%o2jVM?p(yF1Tn*J8pRA~5fKIg zs2BhbY*cMZ#@|!4_W# zoX~X*+*4Uf6jn^hs(E| zsN=VPO2O%IYnl$D;lmxwPJ!fWSpzyU|GQb@oX@xblJYKJl~N!iqR(a0lY9P^I&6&Ae<6un8BKB4e8yY{OG0T>>Ch!On2 zuC1U;gZLa#)P53uE7h1X-59Uxu z8T%UTeqeA(HRVp0nUk(B0<$hJ=OBaYk9zC!>$;O5-FYc0Lj#^c1K<5-vgYYr+Hqx& z%%jPV{{Uz^sjWJTMr4*qpnJ=4Gb1wPcJ^#{QgPqfxki;Dd~Ld@^Cq=@8*%FK5IL@k z_`9sF1 zKAn#q^`{DPf{QAfP1-1Dx@XfY)*+WVZKD9bW0>b*{W56u-3EB|NVRvG6|=UyiRBKg ztQ5*IfsSc%&wYEP+AJbg64}J+kVX*;_{VkvfS~Oiy{gATu)DR>^(ZeTA`7Wvcwt!! zZ3!mwaoIt@8KW*$jyK=__b%zWXP#8kt@rn>zGO`UO4Y4;w@#AcH#S1`6`V-2MybD? zobWlT55V1PUDNvi06^1iwJl1{)_Z`G+W5{Rb=t(`50w6uan{pX-i;39KwD`qAi6S3 z2Ee<(3RRo7MnN18THpQ{N3SnXTIyH*J$7s%+*O9eMBFi)%Y%i>4h~Npt3TeOEN#n| z*uN)3I8LIr{EBXw>t?;zwEJ$LT_Sr|iZ{5sn$cmNIKVz5c(H9D4h~PfTj-yOZ*wG8 zj+)Je=%X?`H@_Kg5Pm$-%#7Ij9Q#xc#Qj4@gF=!$4?)u|E+vH7$$w{bzql^Hm7`4g znRjEb;PaZq>X)~6S{9VI_aFYwYK*rJrdbz(p9%;*EABZM7$-GUVHx{h0I|wD^IZH5 zA58U?u9emOQ#VxW`h>PN=VhYG`B{`XRoaT9ouPXHiqKpBFiQ@WqTi>l<*-IzlFw+& zk>!ri;1l0C;~#p;XnKc7>6-1ftEFoiy!Y2+MA}`=s?Q{jM$nBZ0YL<*+z+R%c14m& z5nse(>6LxhBf8{q!Qj^Q_Iz@yli%3QF0;XtQI5~l;m@h-adrNqa+g**7OJWyOHECR zBf-mowVu<#WG<83PO&aMi9f~2{lc(S6dZoO#T9hUjr<8beg;HZiC3g3~8*+VW zm+-a=SicUVO+(^gfb~2KjTAY5K0mTNavo_Gee5yzZQCd{1PGfEkz@LC!mlX~+7^;@Sdhxc_|Ld zOG?8G-!G8%scJYNdt-{tl6s!Th(ea(#VpYn{2A`y3Hf|Ehzak2c=z=7_MziWP$aVn z)MS;qwn+lHMlkGG7(ONd#_k44;mgwE}R)weO-2txI+}qC-_cpBq-7@4bc>&rx z-~-$5?^z$i-h$CCvg3`h%W`^Iz+vbt~0C-LY2*Fjs`PV)& zmxm{P%eHbvtB#bK#?%c5Rl0z^&9dZbESq6iB;SqL8Q#h=Mot0rK$6j z1dP*Krn5eor}UMMVj9+=DO;)MiI5nh2-0O&7-PQ~=NRqHSFUOBpZykTOm@#v>Z>d3 zF>zs}Vta`YZ;0EzMYPWBRSpN0a0fUI^Q^{~)EZ^2o8Ko!#{>K{GBmbxhLj}z=Y+m)v$4}|ZqQ=tQ4D+=6$dW`2fE$gwNC$8Is-DZK^xbQvwVh5#%z8GT zCe{<%M#APe+!)?57+mG{jk)jN){haTyhBR6MRk^~X>He1YgabRW!5PrWZmDH0bQR%%E4vBGU&^?Z$Y-PKUTk>thYIeQ}^Sa~!PAcxhSLYmj%WC_V|iMdd`Tj?d5=HRTvDG~-;uHD~J+wJLHj+RPMPq~9CX|yWCPq))U-0E{J&ZiOH z=p@Kl2^)7fKE1K}(^ofbbE3>)wM#J5q$ESm?itQG1PtRo`KU0>BgB@aBZe6yClM34 zo)|MXcEQFyxu`ccDI5wFr%S;oP1}!|0-W*abGEeFTGZUHhbN9%$qv8h;i7W?cPG2e7g%X81%;~WrZ{i*n%xS1tbrLv!A0z)t^I8K|C)07LXeFr96o=u$w}xREQmjWA_8#8& zsQXoAMv7q)p#B9VhtE0Ae&VT;_Faw%ZR~h(+XWJ)zPjxBTyGj`P)pqB0Gr3_enT<%}0B4 z6BmwWR`ut&`HsivX%V!sta3xC2)dny0D5;!)UItOUxb~Lb1vlWr#=WgACWx#>e>3Ld&O8fsv)UF{3XNV z#K1VpIT&G)Qd39M^&53X1Z;PbJ+OO*?v(lE>ee$_&`;No10%IVi-?I1}2 zbRo-Qf~bQ(eD~wprS$Jo$#tq)THnAVn2C}(`xMF?_Waq}DvHcT)`+KQbwi!Ltm6Q4 z#yfWRsJQx${SKqkdd;MoGfN>N;>5*p%B(W*sq%n31Lq%O@~T}^sqaO z-)fe6+_GNVuA_RTOj9uq>{~2YC1kgywmMso_CN~$^jBcqIlbp`B-BoDgl)qTzQFBDo`i z0~SD8uzi5Q04Ajvzu=P7DI;w@nQ?29@$X)I$aA0ZsH2gb4AzR_pWyW?i#f|q?yqkb zb_=z$&H(SXjEvNo^wggBRf^&$V>U2}*pr5JE)&XBkb8scpL)fq^U12~W@QdZ^7p8h zw;mA?K%O=1s!AwexKa6>w`4);$B(Jvt$KR<>Ybh1AMVt87@$d4c-Z&Trp`QDi<7r zg9H4WK7 zoo7bZ>|x(&)V9)+c#i7DQP0S2$nD9_G4iVmo~zUBp(ZfND9Oz1BUK~RvB@W#&5!f=bhVzKm)fN=BwXav$rc9 z{LroGBzz^Ko0bRL$}^mM;;ez(sPcI?epO?FNgvGos!t|Fnog{-LJjd`{YvLf)1|l2 z?RDGPHGNHl zY-VX>kl^jAfLU8HAl80Q|;eM|VC ztMvo4mwIl69Ebk^5-UGHZ|!HAx4hAGfoCX7C{UCjGUp@aK6T2VS!V!3k0ax^ah~0eBx8;$&OVdVVb%1@b-1*S8?O;&kXry@AbED+ z0K+-&$gHyKVyz_hFNaQ_GC1E)==!~gXBNY%sxV;-e@{qqTFgag^bs_hr>n@OS~(1!Y5emhoiwwDyq&x;Wai zMDG)F17U{V+lM&E>shqcWa^D#JIkFi=GyMw4+`8_Z!YT1$k;RLMFys| zwVpefA=?~nDqIXH@sEyAjX1BY(?kI$N&*OnSp<^KSS(Z3EY4C3o*OEWV{(XQoE%g!5c&Uw!R6&lm2 z^t(+GYa3pi)8)T=fhWhVQGzHqPzWd2pRdyt)AdHNatv|Kw(E>+i9!Y*!1o5O{{SVB zj4>o@Ep6wv{3E&3FCa@>$uH5Mf@etBp^`pS6YLxL@mKw3G#w_z<<_)I$gUh1BbE)n zy>P$8LyUSHFs?ByzC4X2%*`ttvrCrG)c319jbiTq07r*Syt;XywsP?-gcBY{I6cbX zcJ!>zrSm6!+kcs%XWFZ=ueAJ3*DZ9rYi%CiO0t?LQ6;&G*-X;77%ol#89d+)D?6z5 zCabP)ZFf?_1A+oURKVf3&>k{OQuig7|gE3=cnJ>-06MIH3n|MJ{re zEW5SUZgkBydwn`zhK@^!ZbXrcJTgVQVHR-3wK0m{)pywvl*ONR0>_N~dx^ z-j3H))pYo7S4`EfA&%hUWQyU3iN-R1exCI0t>o5Z`Ibv_`H_ZK?ma%EiczwH@>4FJ zF#iCVt@DGA?)nk_u~Sl_4mZhElQCHqQMshYoT{3v{c2i>=p%$iz}m4&Jx2=P(6P^e-`DdTjr7nr?B!5W*u#KWSNo@lNH* zm~h9~fO`tVOBqO(OcJh7n2Z8_aqso3E}XwQeZ$=n)Oy=#+-b*Vm4vm|bew^!*9Z?>|A2gQTQZY`sbAUQme zFnHr2S2DNM=8Zzz%Pdh2RS~g+?tRU4ezw;{5^9$!=^{xakt+ldJcoA&j>p&ST#7Pl zsfFr^mnFrPjXO&tJdRn|n1-eG_T)AtWj_T{= zgb8&mLR~nK*+FRZ%n;X7K}pha~aB%6wc&Tu&3)dr~w-Tn+~ z*2;2Z>IoEuJgFr}{{RYq@Jc4U=zDvc$MGjNL5#B+|P|=K9{NK92fUp{Cv3O6>Pqgij-88--?#fFPWZLXbOPky^WMrjjf9(@=EZ zCG>MM#zOve7#tjWf$Q3|coT|JOoTd!&t{E1{{T;3-dt!h$u!>ur+DAFbywZLZwx&E z3&G^)7{zaOj-t~v`zWKnCC#L;+9KgvNhFpq$^g#?8SY2rCbIfg$>O(pj@8_(U&F~L zaDOtKXBnkmG*_K{bpReIx4yNzwqu>&{tiMx=aIJ~7(be+i`k~jX17#w-}ZsI({8%b z+TKqI{x-_ppk_>|&PXTQ>s)(Ljw^e+h@p=U3HWjV&m)73cjqjFp7vEYQp;|w98Na?PbVzLC+}U}kybeT4sLJ6%a|bvb9{a; z;o2K@{p5-_kVxQmz`@7fv;9LglWPRpM#&OK8szbo*f%yZdz_!WH8uNUcALbKNh3rI z&6AKpC#65kO$fyA3jH|O23gVE%u~<9oh1O#}!H`#K`T% z06x&MSX4S;dxCMFHhpVYWI33JY#pHPUe%FTd}DE`5!}w7mRBEhNuh@-k*hSWj7j5x z+spnnKcdRPE$IL=csVDwK9vb)mv(o!_2G~7sW#WrLLVc3<=f5%KS4v>W!|wnMW)Ct z$+uvL6_o8G2fjr+_ZU5LAjYc+ztnI*wT)MllRasOJps{1$j!7n~w1$Q;F$9Sjv6%?v zM{lY3r!~0*#Ut?}Sg;wFBo;oNo|RXHzLMpUC8(s5(ntUTK>fdjZ{*rSmfa$$Qh$dX z>EWkb7TPfKWbR1gX*T}==I#0#8iHNv_e~RcF#>Y3MHm464ha6_7{aVk)BOX>#J+Nt8 zOC7C+Z zJkZeMSv3=z?XNO=q)|9IQq{ zR3Gj?arACJbVECc>^9BzY2f3=rB3E6c?NP`BwrXvzm8;t--rKB@s*q!lHqw9TBaS|G9WSst z?lGgex9V*^DWQ@Jg}8NOe2(behwDt)5#dAPN4W&71_%V740`wDirT@{*7qrIZ`K-e zPcU%ndjU~%9ytY+f7qI1Qs|fXNc9Z@?k!VIiTquo$uj4-b>genPNlIm9kw#@%<%|{ zyE*Wc_Ys4=n;pGyeMh}1+80+5jiiQ+cAg2&NpI#Un}kT@NC)oZRY;CT(4-vXgU(J3 zHqW&Yi1eJsz~kl{-@m;uHhmRy6mZWQO5n|ZByq_YIV@vFQS>-H^IBVdMmvb$j&BZe za|<%6k-V>F7#tjSI6rF1bWO~5w)bjO6*o#lVRE^Nc>weJas^+-XKL#NmW%`uMKo%I zEEvi8vQKVFG{~^}iDOMNdz%?p+(NLdR^)IVIRhqC^PVx!rE`0R-=`Z_iQ}G2q?iWs zfENL)S=0$}4v7_%{{WROU`BN%gl;BPIC1V9-<*7_4w{LQ*5!31d43u|i?sQGIRxk5 zf%?>1+>~C$oOv;6&=xXVHLOhW6O>}9J90j%D}SqWy_vk8JwEfmkuv)(08q=2G8?fO zAaXnU*Eqa_-E{fqvYthA7V#4ik-%NR=i4LhYpz^r5nSBOsA+cz<4p;-3pQkpImq(* z4D*ju>q1YI5@^f3n%;o>W{yCfndMvPdwzt~hM(7I3{uB-uM#?hl@uH>&UTgVdE^gz zm1g>eoi>-J&Ky82-YMj`VDPh|fP-kyAe@s`7xublyP&PjwZDNa!?Y1g5^jNxb5^cuq(jGzNaCzpkT2E5zT}!IOv46m6h~cF00cUUs^6xy8^vA6$ ztaWS6X6H+?)@|pESj!}gXM#pjSPYl<17QCEEDmN^YqML%tu35a7V+>UvTUjknvPfQ z1vQSNZCeXX`W-8%Eo|@q02(@T#E#bFPo>ITt%@DQF(I;`fWfoL8RMQSIR{Vw0KFRT zSjBy)TwgAcaz&gM_cAnX7*=4OOk;%u&>Z}!y&GM$dD8CE{H@@|!W(3Yenfix5B={n zTjtX*HJiyT80)pLX&H3>Y5%Zbk_HwN9x+ZVRbM;^vZ zDg*tLQQZ8=!20%osdbgpY?8xI0y&*_CeQpN_a8p^`=3hP8j{$~)f%LcAzuzWft->~ zNj~KInyl*GN^2gQ_?sCFcRv`A@5Vqvj!zx4l@&$OI)1CG-Yu*e-0&zu#qJPJpaJR* z54Sn1&ZOxsss8|VZlIDIJwicy6tVmR67LvU0}~ry@Jjx*Mp?!$N_*^R#f`n%*vj;t zp>=W8$tB&)(=$UROSvO}F~@4xUfpt>{{RrKZDn=)8&_7;QhRodSsf&dtAa=NP7P@y zyOU9Cai?2c+`P^Eps^9ZZ|2%g0mrTn6=!Q@ZCj*`ZRV2{y&HF|!!)96K_j#$1sp35 zGu&`%8D%=drv`G726sL1Gracqt(}A2$l zt+)7+^euX8O$Nc58+dJFMGn_@0VI)ka$}5S@D6;~&Nvk(R_iSy+(&kX>gIcQk~D%C z!36&RXp@X77&-al8LC?yCqmQ1$nlBhI3@1CdEpP37zMw(^yaeNXjOG{C6q!4o(S9| zi?Fw$?Z7-{lomYG*)Yk|O9Xt)S+?o_0K^!zOGUBPUh71^Nl%5TTe7+ZCn~Hq<#F3^ z(OMxmLU;ZOoYAMX0+a^+ z`F&|udVSTD$l8REY0bBAOPK(WfN{)2FQ0BX#Y>LXJBPSBZMDV8jR;%GU*TdoAO;Ef z+k@LY`(RUhZpiChw<=))&^5VM41Xv+{{ZRs`gSz!#AefAnFYK4WJmHpd~m;*9Q$!r zc0D&DG8>DHgpdG_$fxML-Gw>_-4pS0sWH zJCSe+#(sSIcQmgM28>S5oAN>&?{8XxHS5XY_+Pq#*zQmUNWlX%l47x>iZz+x62cxu z#>kM8GDoNV>XPb6%-0*jhA!Ch?qT%L1M5$^$pSLS_$-9*{%jIGy(%lk;$2LCzJIM< z6|qZXX=G^~oy##NIb)Oh)SCn3m}Cs?KcS|lRSA_Kj@bt_Z_xS`$5LwVr&>=Hyq*i( zG_vj?QZ+8zC?uQ?)a25Qu#WDI{{Z-Ni8>RY%!oGr*t;N+$jr^$)mKI7B7VAYcEOY4 zt|C~1kO>eL&PN@`1Kzrq;J$%vchI&Lcl&RbNz`r<30o*tmST7rI2`+)D<{zQk^ca_ zaq4CrPsNeta|ZPARG8TdQ`2x2UyOk6=RDLkPK>AfO{V2 z6#^f_8!bvd7f98mx5>h#{kZ_+znEkC8lR}?qW0FtElbC_6I^($CB()_8JTgGCp_aG zzLkv8b)jP#f$=bmGPlFsOAbct9swh;u9g{8JxsYHay1<}_*btDO=s0K_}fLd@eR$= zOpg+%jfigG<2y&zqDRphjg)~kh;A(#X@3mB>UR1zO5<;Sf0Hpe#T27SGu8aoi*=*8zWlceM7?nK5mPG?RWZ-~4 zg0oMn-S+HX9-aF>{)Ym#uvifyf;3e0$8-1fH1tqOB#8>A?-<|$K*{=^E6|#kQE6J; zoN;wdjU!nA&a&ND8Dn02rDcS$qnOiaof0LJ5T zs{W6Q=joF-U#kIIze)b~Gn-q?N@OQ_h{YZ_j!XLc`b z)>chH8r<7w^95j~NDYyk0&!W6q|mRraKtscb8M4t5X!PFu}QS^hEw!7I5;5UruK9w zyD7c?xXl6eq_nC-_)WhY;CH3#Pw+ad`g|xQxQ+JVpCcFqlE7ehBOc;~yB*ge)c&6_ zTMxq9M84}gdsbY$&`%nB0#Nhz8><|zkUviSt4Gi}iPJjEOSn)AG=>G^IB683oM)UC z2klkQbkQVq?O&&o9+>J_VYRc9OgD#8wrH-mNM$adsZcv$XOo5uA;wdkE(>Hh!`d3vi6c|@_m#RQ=L0L*pH;0{L6INnhi=#8&Vn-y`HS1$_ppAWh!Gg8FgKNFdJB4 zaz;7GtlSqDGJYr9#i$mZAKEcmT*WaMF*#J-yU>6}54wX|ZjtE=%}(D`)NP*D;pJG? zAlMHc#w78{Q^zL>s)SJ+o^k<%b6(kS%muH8`-4JCSoRfq4 z)*}2dm2Hp$*j#h-Z}YCJ_?^>Nmw$?O2H)Y{*6q@3X$0Vxi)P?Ys5Q?zy45th=q>iE zTq^j6W#b@|g~zT4Jl9vI{1INpOy7x_d*x`vX&_+vJA-;-1N!Eo=AOOcd>%*xJo=u0 z#+enQpjy+4DGN>t09uN44rvN0z$pw;idY7SQoy80FezYrP>osLRTQ%mfTOvq18v|i zf;KWnGQw=o4!A$YU580Hk~4BXasHL4ANoo-zPkG>~osi zMguRoN^D__epVmj@}tZCM<*VKKkJH-dv6`HDlOf;&}`twNo4x^bMmHHi7Jv4w`jo} zVvxWW%mk#23@aXg(5o8@>uX2^GTOVjCoX3@K=)Mx{A#vEDddy4aDU2_xQ&O16_D~h zL7)qkiD$&Ql2F3~5(AUzlHQdQ&u?(a6p@J(;exnue&d5oCG?R?xmF<`_7OIz`+L;? z03JK2qmLIJ4(-H85|R(EJQ99c#V{SWxk*5dK&suaPC=>327mEYLGPNRnH6PpB<;_Y zpBu61kT}gb6~wTDtn61D5!`(Z0Y^g9`d-TB%`PIlyuZlhEu!0l>IuQY`5aX1o{0F3 zFiT;l-9s{s!^OH*-aUx)KXF-3nd%>eSyJ-qSZzhD>aPxR(l7;CvHg;x9C4HMtarp} zx}wD#*HVsJa3l~A?0G+6YcYMRke*;#_Jk{Ll_l)j@A{h9<%$vTO0nhZQmiETVLf7!vjyqml1Ow-^Hc#nR*STGy&N$L-unCcy z1!E3JljaUaKAFWk3f)=DGr@N(LM|M5p$T8FVm|r#QxbI@q;Qy{xJ5=ntsRx2WjXFc zKHMMHp=&)?KBuEYrlfM9TaO>&9z_n=7z?#VFgy3oXp&Xx5p3RDYkfJ?5yxxPwszuW zPcETtfwf0DW5V(BKWeMix+>z^P8yDldvB`ga;rwO#_EhS$;c7uX~$;dlXTXk0Q}7@gV3 z#D#_iGJOa>x%Bp~d!uRxPnR1c@ZX%mLb{Rd=ts!$TFo%aw2-d>4ir;+$3`)%ZQVb5EriI?5+qPIj^o^ukD;z_4fVCqoKGi#G|+C2IXe~^ z&JVw8-u}vKn{>Ull*MyBib1@w0Zzr*cpjNK?t4(1VCc}nc=Frsf=KS;lM)P&k`bJC z?0XT;DlN{DrfQcFEPL(dx0qbV86{5ql6<7#`tmXcPAf5E4c(pYiE66RK@<kI zfK!v`GT8qBwN25wk#2PBN$(apt){*BX#8f&vX=^n>x`51qWwtMp$n&(E^jRyDQMe3 zNLae<%M5l0zX0+$p{8ngnlD1>clvG1q>V6&M1MSNz9CbUJZB!YXVRM1kta;(`bM;h zj+Sav&YPoj?YJ=fz3_92v(|b^Z*++4^y|M4%sR-CN#|38oGXq%{{YoPi@OBqtLuKC zlIu;?w2R9@@fNWq$HYY5MorlKr;u~)#dBLpQ^memi^nqCv#Y7vc=jWj-|N~{&Cau^ zzM~YDa9!HRZm07stRx3$bv$P$*zs9=o|KBvm+&PE&zw1R{YO8jq`2IY2>4UsXX9JGo8PBJBqcLjY zD|CkFJ+us36p>WM4lq2VZEpU#t6SYwWVyGvxEEkR_Rk_d0P;vl3F)-sIP|4fJE2DY zO(#b|fByhFFhNpzW;q}aKtG@rk%6VYzI%zAGDvbs9f#7U>pFw$+M``uffPC0982gs z52@f})mz@l50(`Q*~V49znxC|5=*($`a4t8bPFev{ft*r<7qLsl?QBK9Gvs|dm7S1 z)|!0sDkIKF8@!-KGCKfr$B+BxHP8B02B1VU$j>Url7yYSum|bfWBh7jXb@c6!*OXd zTQrCq#{U465;Ncb0JUMw40q;q*|QE-wyQ|k-|J~LqR(^iYYb|J^k!`%!${+D$Mhe>{{ZXjN7uIB5iOs)MCibru=55PKK^2B zR~&N4s^i0kFi4MfHYNs1&+#|8^vzOrylUDtrqar7?l!UKcrK*nkGU(HdVe~PW?vA`g3+yH7^hIl}Y z+?DQ2On;@V3*Eh0o@+BZqC76a$W=z9fR9NcdNug zuqpol3vHfv4a`g9=odWHoLb$Lys`DNy6g8BM%v|aub9&$MK0**Z_nFHM1MFt2f6@szYM{G#skbYvPMQ?9yD@_~`$20P7 zCu1ay^W5LzRXos6xn!#(mGFv-xNO$U$zYnL!)(ctc#_&BIOMKNGjomxJJqeNo}oIf z!3LbI{5DZ-lkY3#^Xb7JwD2A*jVnKjOmMopXE-y*j`XgYcYS74B$7zp0-rMu30R5X zcIA&BI+Bx;x}uqE>AM)ythC5){0Kmj?TKc57CGl6vE-bqeZ@}r`J&WT$`J}c*Bc}_ z-0id>@9F;lF#dv?w}If);<;d14)78(9lt!MJ4bBq9FtR{(9#OMbR8ST1*1c`G6q46%IiE0GP*t^d7(Ky&&EDm1>V~mzfC8TO@8IXV6qz^?03? z+qo^bKA$>ttfzZRxU()dKLfp3Yql{%q(O1JGEE{eJ-oY5818EL@KVZjZ}>ldG3{Mn z@E<|ewC=RA)!xoX?4;AK<&JR3!2bZlxl@dsbB^QIxjoxPB#|LQ9AVDYEu0UnbY6(+ zZlCE(OH0i(-p{DMZSQSmVpWmUERLK60D{10%sqYTyvevUyOM|Ev(XxUrKo93dvjwf zY|=p``EfZUI=X@x6m92rO5h$ob&Ig-JBtYJuI!Q{EH)n)k-HM4GXO?$p3F~gO4Dmv zo`q+iO?#xtBn8o+Fyu0pF#rR0#@(EOl1~}+u2X3inR%x&FH&gcb8KVXEKH1~$G14n zG7mWP9DM7Yg=&j!Y-^s^L z;O>tkmpbL;+)zto_E!-F_=OH+Mob?MA@QEa7~t1yivIviUXj$S?WTe@{fBl^0Nmrj zVnFvJoYy(g?d~*fLh|6~k=tAyKK*_cJeHL2iJ8%)$;a<8!2sanH3LX8Iy{!r`~}AQ zyLi##c4ZHefDj6Y49A0jMg}k{yp@ru_D;#h;GBJob%vm}7ST0?mzJ`4QLg(*%ws+u zbBttt>sir#OKqw3X>!`F&B4=dWdcium89_EIUAh|WPo|xN4PZ=w4&Oy`laj^R~GkC z+Q+u%gBvhAj@U>la>zGh7$%?mFwj=RsO7l6wZBW%x76c{EUO5FLd%V;H=oU&z?}N~ z(`qW%-0n4BTN+=(y<1Sd>KlCuX1KPO;jSc-Yg_k@SXou12+@`*RFXj2sxj$S*8NKs zvu6e5y+Gw>vk36tSVt^uuAGKwz$A>EH-6d8WBPtrbYH~P*W^W&*xXt?WnCFF0UNgw zw2xmep+3g2F-57_oi|Rm@#MHMsa3W8@MZGuAfY^AN$d_Px#GRx>63;+qcfGdalDzz3LrK{>s`niJcjm2Jw)CoMpfO za4-SE;OnA~FWUE?96!1Xh2klJ8FZRMPD~YU%>!^HgOL+sa~4 z7Ja)M56rt%4sv_)Y8diPP*<}hB^5toAkke$T)a#IjIm!q{&i#1Qp+Dz=*c3LAG9r$ zk~?Nq#awl-QEK+ziXBa99-#x-L8vmNmCdS3stT#{lBA51dl6A)>KKE;aQY+?Pib=v z!nLK$kf?Ma^3k2Zu17t%>_th+ae8G;X+}}hlQ+ML_RT$);)66%o$y-5tPTzYk@x%6 zuS>@a9S;-{Lljc9t-E53;6?xhdw#UXU99&VHP@GSHlZwTV6dLvZT|rC0r1KH0MbFv z+uo&Iq-)VuhT1q%?1Ld^f6gZNO@-tBEz79l zwy7ddG|+0HrjjY0N<_llfiZ!|CucwQu65GgS)g3$(Z_dXsAyLRkp+?xvcoB5&QAc0 z<0SFl9FtZ?PI2PWqdM}tTN>VwxwC@F(i?_~8Pa2KCE*JplqW5-kQcBW&Oq;6ukkBK z(zNYoN4j-sQb{K_cBn$`2$fx+o;}`?J zYo7Im)5)q`K{Sy;urBD*ateYyw*Y&BPp=-;E}G?$$#*QxkvPSA9S88$&~;{^aTE%X zypZh+HVPqzBC0do4&A*gsQxJRT6ETpaj07CCeGbcT8LP6aG|_lD*u*tl>q zGN9-A;=27Z{{R|m(HOISCRN=(iFGsQIb(`Iq^Q6YwXG#0)KjW5X$lT0~Iu%(m>{=T2Cx0=>SnAm{8z(fc75LnJBMPY$$CH z!`gu*`;0S=(GO5Qe>%I;tP;{Q{8KmQbL&G(uoh5ZwzQ3(5wlZVuK|kj&uYgx-pJbs zR_sfH4}MR2Pz#OU#oHsj2T}+lKKybhWQF$QwN_ely9rDa#~|AKBt|IY?Q#8<`Blu8 zIyjPBl!|$6q}tZ-w7_f_^C@po4+D&vto_{AZTmjTWq^>(k*RZ$>_|8tB56};>;tpB zQ0I`c%B%i0)Hws!Yo?o4_;T@G2jVd)l{WiijtKgie@fG=?~jExqa;!h>2KvEdqULl~5qJ=R&+ec>>Fz-^n*u$&a|r`lBisYq z!;H8;E-K-T!YD6o;GAUqM5z!T`iMWut7MXSjwQIBKt^!VF(0OJOr!{+GO?&9)CyL> zwrQ;%JX~EtpW;ZjOV7xK#Y9Og;VqWBxLT zm75u3EX0GxKPoDUP}Hu_6^G&A<3GEBf0pdjaHDe%b)_iW!{(F)iI(Q-Kljw4@ew=}3+yO7u$m(Ww7vEk)nf3m>+kALx} zP{$m_ri{pls?WI`lWKcCzXct3hntk*7OhUR3D z4>63Ast3G%*XlP9r4;)UPt1ZRPt?R<_Z%S^hnxwy7AH)cIjJ0*mXm0lEM2ON-3 zJ^uieMK-~tZlbxjyNt4sPbER&hoR&36$<00t*4gFAzg`YaxM`N1RSu);C28U59e78 zGJCs3(Ja~$utO^u=LlHx4iukEoyX^ok*x-o)M~L!cFbDVJFf;dl;Pw|fC%?F^rva^ zEiG_U^wC-8(6*J3L18R206{2Ac|jjM8gEC`uC$Jvp65)uc&CC_-5KUL9w8WIJRUyu zT7IEobX!Xc^;oW8SsL1N`g#PTP#&-g84t=v&JFQOU%URb2tn37L0fG~i z%SeFmeZe(trO0IJWM|4edVH`va(P@faxf2Zf$5x7En`Nuy_Z;;-d_$@*kzD6h&KjS zAgJX}lzJXHrSTd;uCHe~k*}><8B!SLY3;q4V<#)?%%48hP1O)1U0Q6GN#LH`yiy`z zSO+1v9=)=7@5U)wg@x^(?FW)Q_U6JhNfhKU0s-mow2_)#pz^+t(~oVDJ6T--IR60R z4mtT!dvHl}xlanTWED_RMm&SJ+N4B~O(yc8+#F<%K=#1&sjTTO?Uk+FxHC-#{mQ@) zdC24bpL%FpE$nG?Yd?%LfCwRnw>TW*6<)7W^z77hpM&uT0RI4r8`;j$`B|d?XTKYN zpB<{pOp-$u$98l<7S$wqM#kVC;BY^}v)wB1Z>k7pnnYa$9!a_q{)f&!3BX9M58OO0MO3dE$UiU{L_x8=oQ z&xR^GvAwRnxHRF*EmbAGerBS6h>KB2yy^W;8>C^81CItl&*krf`u(bo<3`kU$5J%m>)@E?+C1BE<1EddScBTSg~VMguNGP3pGUl5`InU^80_ER zYagz31f_v~g){H$=a^zO&uEUdzF|}Ox_c-B`%i)l$ zWFQ0IdGsGzztA)eqP3DeO3fQghCIpf7jg(t0pGtQe2B$crm=f#zu>g(4?$Mi(fAR3 zMZy8AS2BM%x>;?T+0|NL*R3P zj@)}wj8LqITf_!g3C0`BLC4G2wMJN*w>NcPz~hpsK~>nOvzUs71Y8u%ZJriQr<2EE zX*R<))@7W7jm4Ss>+VPW=owtGJBs<)!OlqBN$>aeq>Ouyt2g+XPb4F>H{5F+HvAnMib!2%Spy zAk7{P4FXqvY4^Jy_;7K!91skKEuhrk_^52{qYAF)swp2M7XrmU^y8k`e(85U`?i3=44r6WFo zd50b8QX~gk&eGEf_m)seT!rA1z#dW9ed*Fbt&w$vf7+AH;ju)x8GWDum5+>`eLX() z2o&1V+v0HqD)Nn+6>w9G=O^;h+RTd|QAa8ecCr>m83m8{cKs@_u@57hAe@GLH+;JH z^z}3=>`QLrces+$#nD2vlS!0C#@{M{pnU+RE=dMb9Sg~o+H;+_=AquN{5`nbc$xd3 z{{Tk5wJJdrQAplpMqCmXB%fhTqBb(*y7{n3UAtF>U-PKb+(xntW#lJlh2XrqOQ5yYcvj>iMJKJ{uVAecPtPn8Ea&P_cOPb&y*p?M^1 zZA4Pc$K(elkWUBxj^34j&|!bx%NChbppI4nyJSSzKdlddM@753md8*{C0beD?ipG= zq(-R2EwnFSeq`s0#aPT{)rFkV!1pSpo)(9K6?Y#usl{sHW2p6Bg>@uyEPo3ujU-Vs zE=m$qU>|?bR!^s-PyM6B6t31TfIl7Kz|CijD$8{i-7}}@nxvYy`_XYFrj>0tSQ**O zR;Ap4yGC|{w{LDST}!6)8+%(x7pC=fyt0vo63*f|^MEoLbCNxLyH6QD^~WSIJ*QDb zB#R)K2F4{x@iI9*%~sl7LoZL>GulTSmiJc9WwUPzMqRQg8RrL{4nD@H&4O7tk#;<> zk0|YZNvrGjIxW&#YOzAmM9nK)Kx28M+@Qugs-8hCNCy>7(cMNaI#xU1dmFl=*?+5 zfAIe6SDwZ@`7U)Jl3T+uib&&SZ!)$B{J;PXe$}2aejANjzkzdUPVZx592z9?cp7EP zEY2cSVHs<1sud;40JiTa zJm=?Bjn=(4c>>*P34f=lli|y1R*Nu3z-(_{FyP}j;-ubab~@)tYC}h!JG*G@=9LDW zbVOb}YvN&)jP}oyfJypQ3C=BRw28EudPelUHu)Y&ZtN!1NYo;bTy2uxGDKX+rF^?a zcCa1z?}JqnSy&cR3rcTo?C!1Mk`duYCM1x6S#U!E9ykQ>bIn2M3$1!9%~WW*jm3&v z&$(^2C*KZFDx{|>z;ThsZ>4W8Z?2@bxm`~{_{5eY8cA!iNeZ@i;I0@0`kedmR^-W| zZCMCMRBnvYTYM)_U21U8Y|>9Hg3E6#W@(~O`(2-U@;4O0410a5)A0rrezd&1UT3vy zi;GFc!$wt-c6Q)!+z@&8$2DdydV1vD$KcDS5i}-wU0JtB3#^165OM%q3>Y zQH*Hh4dXZ@o;#X;DtwJat`4dAuepB*^$T#nznTBL}l7+t51^_kRJP~AX{h-2|gYvLT0 z$=VKma68s1O0lT>*=99zZ`d7Ui>)Hbfe$2>lCe{O*)YlLfxzVbjd`y?yb03!qg+9~ zrH;}Sc8h?>#06e*PTj|j*zL`F3#s~zb)K@k=#!;G1EWW0Yjm@=S)_+0opFu0bHL|{ z=lULlrdw$@7CQZqo8c}?i@Rn3lsSz|v9|?*Qay3U%C+HZ8fsp~SvH=eM(JCkS6qSXiReTG^+!mfk6!#BHl0?QAaY3CRQuXEl@R{bJScwY@!6VriNQ+DP$$ zQGX*4PER?`>3eTV-5tp1ftpw6GLx+WBz(UVRgqjqIE1xIWUM;^VZ&+$J0 z0OCIe?_eY!_^To|;EryWJ-&5~?VTE-{-ch5KiI)-_@S+U(Sr06^;sD;!*1iknsgvR@~?N%6UZR9udKP=Ha z6F}IWDI)aqp0z7@)Wq8BaLH42#PQOsXA-Hajfa~5_rY$CrCoTo7@7x76Z2#&pv?GN#vCF zHbWd?yAK#R=eM;fPaVc6T*dJB*HD=^q*AnKCVh3Ehqe$Ed2BqSWnJ zWQ^m}`p^oXU@xwC9q9P>BZ>?NQO`cUlmUWx+D1+TLd#+0~c8RR-qWCqW(5&Dn&QaA0{{np3YfE1_x zSw5?_lm7sR8TA=TZKhC22P8H|DYu{V05Ox0NyPvdjP5wV8?lmbIi)J?ZQGa1amH!2 zGE1GHkbkm2$F)g^PP(`w5tEb7NhkSG0$OB2`G!^V$FZaMouPIqJ6N80;MI&BHFY5K zvc-nr;~afE=B%wcPSBQnnPrm)81(H-bY|met}r1P^Bip%{&hc0(q*`0l4+jbAD7kp z{{VF5Yf|?5W|?YcnH6D-fLVcHGH^H*Uw72j*381f*{20m?@|&m^3TgYlm?PqdUS;D zhs9Sa0e4Wj`uaEAR1HGRS!xy%Mq`dr+k(ct5};>~Kt~mGr{2Bhmj%;d8dVHYI}UM- z_o|Mpm0-ECkwFdT0k?fA$Z1x@x4sh_w`?o;r9flmLx4y0BkxkREh^gLHCt>(>nNRK zKo<@Do_z*$>VI0r4-q4X0vJ1z(sFsp_4)kj%EMEfKZqIRjt}D}k?)iKyHqdKm3j(- zXv7gmDO|(jrcWWf#~JqL-kQ^{rqgAf=E$s5rcmzWZ11-p<%+B`7LmM1WSFy^z;`>( zAI_X>ml3daNdtL_@0Rr^{?sr!8g)gb^|RUE*`nO6Z8T1!d}ADp9_mIv?^wI*&;9YL zT-wUvI+j@HpW`AD=D}oXG2H-@lfgh7(t!=fCR68aB171^XUCPiyJha7253sC-Zw!YS7lq(c0YFTwKD4 zuN3|s;zD6NA1+VdwO8Eejx@;Pw2=&HKa8?Rmi`+Y5)r6aLm(=@4ns!69Qn8+ zg^r~)zMBk-DS|OLQiw9AjQv3QRXSSWveV?h(j=e#!N-2h{sy90-;0ask?q88s0y%PNgI@$(dqYbco8GV0GO}>OqFt=pDqs# zP?}F0O%67vvo3A!7F8@!;{dQeCIH~~&umoa-H~?ZE9~5X^s0zsj4sHfj#ih%c14V< zCU)>a@AdVktQ5lxQM_g*R7}Rvl)>BBucy+n=D`@;vA*|#d@M`OtC^Z8WB z-wawd80Lrgn>+Sl8nPsj;x{b6#5*6#c<1X?sW8}z$b>FPWdI+)y-&~<3s|m{T(cPwi4yQZ zIXry1tKmF3rsv;k_4g>8a$pu6=$qmt6p2Q54od7Ia9_%gMxjy=M`NRV}dw?VmOy-{XMhX*11X%=bI~pWh$;H zdifEexQEH+l4ZjT0g~Oo=hmZvBS&`=ENdK+yP;0|TRq2Y^Yf(~M-h?6$iOUFh6Vu1 zKcy46_<5y6pADG~@!Fbl&t-MHk>Wb25tSQ!FhCxsx#!lEItZ<9VQ{e-CUy$R zju`+1sOKMEO%Drp=I*E#WT`<_i)KC(vMEDrDgnC#0rd`d}nb#4Tw zoyUQIJNi_2lsd?YfU8RGJVgUL$vE0L_o?gaNzf!`*B(hEX(VV{EX|Xguh>-5ZEjZUf=pMCzPN}C(#U3!HlowA(lZBT!jcQ0RTnc)c$7w09c`IZz$E)X5kj%W0Rf%EsSUD*a~*xVj7#a z&F$i=liLRXXFbnhPh=L^4_43ZOST1hk}M4Ja5>}dJJc}w4kF4mtXX31&T=~sPDMSe z&9__eAp|@{3vrNG=LG$S@~X*8IWoHfWy>6U_?YkZqjo)zi^-&t($&-lv!aQQRJb5-Nv5mQA?ic6jSowA-B&OEv5ql4*tNxR>nRSaf;+oM( zN5{l|Kn!i2+4*{Q=8nL0Yb#WPqa?VszImsP292PQv?F*JB^$B&`h!&(PM3FSeQAE_ zZ{Vz=M`d`~m}B2L6g16Y^xN$&1T1XtZKg+1z^P(5lLQb*s(mi*N9ri_`AmKuckdAm z+$Q18RZnt5sQ0(`dWFw|v%u>dOdpTSy8wkC_C4uIXJ`99h#OHIQ!$l=e9up4HpG3vMNw@W${e+QcW+uF^wnn{$hG89Z>_ zWBjWdCYP!$i8pq3n#@l>i1D(P+<`#{d}JKwu|2U}GodBZ*P(B%wCfS3xx9Dq9rv;Q z*$hD=I3NL&&lQ)gf8*I2I(Ks2oa3QxudF`~`m49brqPB{bWr($gB^X$NSa5)lK@BcDin(r9}*SeeLL2+j6zg@r;X%f#Qr1xW+g* z$Ef0_*y}pTK+@UUU6-7^^C8}QV})V3k-;H*`egB3f1+;M$EdBXZMDr>#YU?gqg$_< z2?II8FPq8;7$+QNuR4FLdY0zttfh}g)nHq{hd&V_#dd+4ZcYm1@yBv;P@V}Zw|^p0 zl66S*Z&zHgho@i(mzH>?RAG#j+Au-w`LR^D*3-%^V4l&%$PA`8Aom#qzpiUD__fs< z_KDX0KW$|WpDmNk;XrO;W-GVA+(-;PUmpBb)%RCv>oB?2w3wCKY;SjMAydf;xebq8 zcP6UKA1r;y;%!;Y?c%tD@h48#;JJs*sEEjyBWQ{hQ;^(~xv}!&zH0v0W&Vc^+^r*A zFuI;djjKN)u-})_a!DsVX05u~T^m)n(_z&lfZ4p$M)O`dk7*JpRV+CNf(O1vX+2@5 zbl#Px!)z~Q3v)2CvW^Lqu#!w1i8Hl|?aAMq0yErI?t0oy6u8lkywmOGo;H0oWt9q; zUN>R^^uo8Med>#>p3_XaOFb#0ftvV3d4y3c$nkGwaz=5MBOhwV>N=lMX?<6zSzie! zon`SJ-uz|AK4m!s6(lhHryj!TL^0)n3^}%%Vr0C2tx>Sl?=$talz2M;r|L zX0-S(9XUOU)YIV`jXrz3{U@VuKtRyg-9hD#03u2iGCfW>tsbACTI>2Ar>5O_-wI)l zM=DCPylf>ygYL*j8Q`AP$huz-={csNZOvB@|(IoJDHI?K{sGdM(99^y_%fB9?0dCR9n zgHW?zuE7g$z$a+uzst3H1O2LR8tq;xD&Z`wC!Q;mGq6x2 zP0HYIm)j{cafGn$U& zQHztKo7w6&R^W&(t|JTR9OLvk73d9W^4=f8zJb%Fnk&ZFl*Yjo6)+sMx!M5?t+7cT z-p@Rqd8mFFG3&dX6HB?C3kaYxo4e%=hExnx?Dr%9Yi-tAJ;s62Uxiv_(?K=OvuX@{ z5?x#|Rt0zj@Y$^MoMhuq-{e}OB$;iLD$Q)l zPm5!zLwpJK1vqv4jMTn>>D!w=qti88;~pZo@k+RnW%B2cHse0H&0;V77Pqu!(;|jv zj5(Gaz$xCt7|9qo_sw*F_ISCt)Vj*=N^M&CEq)4FQqau)8%m?fan1+?obmVVQJt(# zhgChu8iY5Gb0n{4D-FSSM!uwE0G+_*pgqiX?jxME5B-^j)A}0d+IFR3efV?KJxh0> zo2%PBTHXt3uO)vHOLi$5sF6bQ7u0jkNcV{!R_I!L&3GGK((a|VjLnFnza7{V3o;%T zB$K#gA70f|rqrpT$Ts7*V-lALz!4(0eW_B)v5d1SsP$uk{Oat*(@x1Ai>&n8UyX#v zs@uzF;voToKMaI7mprM*sI0u2b=IpZ!uA$+E^DH%ovb<@w4ymL06DR&-zq`i5g>; zY!RGi=S?t;BSt69o=G$S*xQa;o`G>8$YGJjMIq*mLxJi&1r(PgxFJdM`td*#P~l zXCL{EH+Mho$c;*<_v86cJtk5}Zg=5>ZYT1u%ifl{UDU;VIMvDIoy6n$R)0F_>i_#shL1B?^?R1S=lzfN3`4a;C~Fb>iFb#ZOe7EyCMZY25-@ifMv zsa+ko|gs}*@2M6A+d{SC6SpHyZ0eSxb<8Fs=CV&2;Obv#Geqg_otx2Cnk^GHnNJKH0%^s6qAd|F-(Hu&I@PxnPqX<3g}uwlU$3yyj3iVzyU zw2}V+U|x~sz>65;_=R(Hc6D;ZvuC>;*FoxX8>jACP+aUxobr6b*17u6gNR^2N%q`- zohJ7Kp>+I?bQ={I1HgicyvS-7FcS13MJ9foQ>7y!Wwt?eq!B`N>kK-hF zs?M}`TYDlEMkaO~`ruG9jU**ZYV5#sw>YPEiBmB!QbO*HK^~p{e2o1~S2TgH^cQ1ppl&8^3)ieqnW&;J4nVz#}zJVl4(DB!LYdJ zh5lW=2Q&zlx}4GFPw!(8c5V(a$PM3|RGYiwaJoFop|(80B#+Nv2_$_us*wY;p9O~h z00ozCzXX4cJ31B9tdW$5-*LG}?Umw_8ZT|{Ba+~9tv&}6sV<}Yuj}+Q+_oXC&w64@|OVBfIEC=3s_52Zwrbz*jP z9ou#$5%27^VQC0x%+HrnQa!9V#^e0zyHCAVa~gQjrqVn%0IB1;`ihfjc159up(Ez4qUtdjw{LRLM_%8$-e0giiv&MFm;QOPat>xm|qA=t&+upDFU zQ(dEy+T0|OI3dF*Jg?>8gH_VnLoK4PKqL^WZW#wVdGF8bP@G}Ad|5b3PLkx=TuosG zrG&PZQp}eq?#kIa7_cM`J7v34mNJ*}NYOA1PzNy(4macn_3zmG*Etbg+esO>m6|N% z1{paAp4@tUYjtm^G6siy{u$XLMx?Ufo(?{~)lO*CrzO3jc-_V+_GOi<(>=_oD{fHa zDe$(OVSk8l-OtXhI(FhKrn(9kj}4ThiL~*@(2tm^SR}VTc;a-Kqzxm9OCcD>N}tMj z0wotX+qjzZ-#{661*tr|tL zDC1r2iCAETVgkvI-M9n!WYQd=jiXgb6u#rZRUoJYd!F6txu1HIAYG#^wHFFIlYl<- zrIIPMx8Rg<$)w)H$k?@I&Rs1?Z!l~S>FPK?ZYq7I$nRW77#QB6iOI(7;C#N7SrcxC zcH<3h{D0<)h|3yFM2c+o;fgP-j=$E`W3s;l5(K$`umwhRLrTgd_K0^E-C`0Lm&s?i_F8)47;R=? z(+Pm=RAX_dGD^;JKntD#>?jjpl&k(vDvwj#(Ib!uiz7e9>S|`20Dn7xW69u;&GPzl zO45?mt}X@Kh9!;%bio62kIFgs`DD<+5o5Gz2sr^yb6S|R>#N?Jv5!xIt|o?QOz^-$ z%OqoHQ@6VegV-EZRjUJaG+QvKgS+0XR((6dXm7lGWK+Hw?btJ*BxGX)Jb-(TUwU9_ zKV@IfsOk3_B+*;Ikd%MFFWT-npRV9b91CPBq zadi|O2Nmv{wk!B<6=yC3We6d61CfqMCj%vD?Vz+?h}2j>!)4?|EbI==%z)v&Mga5_ zLr;?9@bcxX;WEu}btGaq$zio5$UJvGnf9vo`I8{oYjUE;cO)hWnqdi>PME+!BRR(^ zf0b-Hf2s9@ZrX$>`n{YCV|Bc@Rdiy6y)^LSY%7+&KYn}s#@ z^Q~|7YuW8mC$_kTF)GOf>?4;92PoOW$IlgKplW)oy?LqX(j6x51$K^U5IV39Gm=*- zxaCj%B>d~1@y{EUy|y)}Mrmm?ItND?b^8nLGpKB?gu1L3rWFjVh^$E)TL;wS;~5oC zYtuTVjSyFDtB4v+FR+Cek#Qa3%J@Z6U({Lyg;DfZZ39YACj}WMm@&9f&)KZG;ow9QMsQsai{?NBC}+DiTX=KI7sLN=6Uni~gU~ddp9PP}LJfk`g4hkzo#(A+iWC;+%nP)G=MR#X&JaNbxXk^*sAn?h^<2~!hkl0*Z>KdKY%EhhXTbGVD46y$B zcPIk`Xdka8y+NY%!ak@=+|Tf?lAX%iA7PB(Zu{0gw;qQCjTj}VNwbFjEz5nYbZ0}u zBvZVw*~v7ivA4(jvi+<9FH!jIo9Hw2c`#z4nFHaRqD38ML`P2vg49K7V$RsPklC=g^FC zkaNKxfHSBZGVn?q9C}wl=q|A89U4{At#yY>OP0)W-lvNiNPfJ4M+A<0QJybNpvBEI zsjiU~nLHP1qZO9^P*oL$y5<}c=8zTj81IkDO=ddI{(Fv<{4u@N9i^U28@VIE z++B=l3vqzBz&@blp82g+hg@snB#!?8PqUT=Qy5qoWc zVAQmiw6(IZCfYlF(X>k_8^KUEjyCq}2+wg?Ft6Vn!du|c z$v1dtq(I=|Sbp$ur_|*7)jq4G=)F^-THjtc(`85;__1lEEzIj8t48jCZ2%F5CmH6h z`ZD9EZ@*<78&_c^nyh{V?4n|*+qSXqjFX+C%rFlXsOg&v-7`WDRdwsWQREfVR4a=XRXEWwSU-@Q(JdA?^Setlv*_3?)8P_Hzwtv7NYmXi8cl# zVYwa72JUru&(=y9-wce5`I^oQ^&=cnx~uWqlN@*AKbP2N#5kUqOmpOz~Fu4{UXb~YB8z@Elg zY{XE>G)5=zkmfg2*yQeA-ngxYK`;@A@pXF~W_yD-P@8*| zwYs%sKsUsU`@AqqXM@i^rmD3IXl-Ug6fwkDEQMpq2uSP+B-c*2=-m?IUAeduCG$PA zO!jdGv-oLD>lq5mfK@>pfw#@gQ}vhO-NYSJXd6Zj1vQ;~qAs8T)q z9%^uDG_SB^lap=wvz++yI6)c~#b5r*xYevgu|T%B$U-t;Mw5CBf^xDS(BqsOX3)G5 zE+U9yw+Y|%rCr@M{0f&6DoP2CIUJ8M;{rzX7~mh*j@=e>(lM`XIdZ;cb--^n04AP? zNV=7P5vft?xo`5Va$6<1!$L%$0LoL9IOjR+epItNczc2l+4CRrr(s0|Jv!w)aB;N>^!KZQI;?~i87H=L=~?Xv zhMx2ue{!e!nz|4B!~?ePLGm<&XEk!eU9}_-L4^6g>a8x~T!wBKoZw=!T|jfLL9jC% zM%YkK0lBRkv3WsNI0W+CQvqrh#BJQ;7~FG;#NV=}p>{}L`OnLL)N5fOVC0qn5!pxh zny(SrLeDXRH=W&yJ9jZT`Szgz$4Nfe?wbvRB9KD&P29=`QRFD=LhINljB31v7?dHM1v#FMNZuX3((rb#yB1!I*X1bm3}qm9X2XTM>Z^j5v2 z=sja#x0;2ZX{Lwb67t-HoCiOI$dcKy^K9RRsv{F|wF4@-uC--^D z$GYaSHQ;ViOSh01OiByfAw$S;;r{{Rr21GjMZ`hS%~ zmdulAEpwN0mubGJBZIGpRH4q9?wZ^C%V*6iDFlWWQy#;w<(WlQ<2Bd>sA)-7W!Dg zMI^?=t9gh!xFg#m(yHwqMsGS5QhdKLinX`7c@d%A8>nzdU<)VEj(dC6GoG1GUvya* zDJbad$yQ{~do#`e{rYWWf62!@cNqk6+lEHXI<)O`EY+Ki;+yHQt~F;Qkisrj1Q zbA?eGo;W1rU<2u#)hu!<+brse9Sfb!oMbC~`--~iJelnRt21G+6+<7)zV%Z%7-W#R zZx&74Bo4q5*de=iBk5WiNjLBP6{hxIUBvii-Wk-EDw8^{QyBo9A9MBfrM6Z%41uE$ zBC>`}xl)P9Uik0do+&RWc6L$W26G|95_c1vJG6&!bnZ)IC(G-K zfY-v+qmh>`vZDoKf=1Ep+t!nDsT+c_x`Zxp2Rsa8?s%(I6mGqW+?=Y(Q@&E*j{g7; zH~#=orP;J!wWe6mpA5*VK)_H~mM8l;>^*zpiW6;&>Ns2L!o&>1gE;>1^{UL7plDG;6b|k4 z1p9jTs|`{lZAB&C2~ZiM11FE<2h7!V{n(6?3}C#uY({uLR`vP}P#h6ux{(VDg;|}B zaKL3x+xk;e-4q)Yd_3^TjCTF%SXfixnm{)hm6+{2LhU&fTP#vfcO-BrZ#L`>*vBTN zTb18oiFbpUKQaDwVP{|&H{B^1!0qyd8S@U+HrhyJ@>`I0fJ%-rnmdPB zLKY5Ku;E5=MGR)f4XD!jibf=9pUNI~iMDv2~tk{wj1lpHW&p5xn!a@p<$+;ORM5pcV6l_wps zMAp%wyA~@V1}X^PkMsVNJ8flh$Q60>a z2~sWS9Fi~&bGIJis;*{u4Dc+Dtj*yP(gIY0gWJ>m>XckbYh@z9g8!3jNsY{mz-dUsBS#bCM`UavK!<-tQ5&J0R~9&$$nk;gQ* zRxzH0y`Ct#l1(%RyK8mu$82TP7Wx2lR$ql3M|+{_&l8d(x`m--e!*XXocit{`<&H> zOeUvksob`q6mIfcNFupd#^O+Ck~kwc?m6R{q5M0zlJ{M|X&O^3T6Xmg#hA9`&wkvK z!0k|)Qclq*y)973;oZ_$bq$@O-Co*WKAsKgIgMu;Nzcst*Zl}D}GJ zeDKRH+adkeATYrVyMQ?dHP3WiI!LvfYlto_Z$X$jSSHI1kaM(vNZ{mwRy`jXUcS(6 z?h%kps;*R_0|r5l>r`gL8Q-aPJdGZh>N|@)XI1Irr?W^Smvg4m<@2TqA8+MXy4}v3 zXK|)lY7)9jb9b9ifRbD*4^Lpn*?ZcVUbIc%HtsZ`8_?VS6kSsbr(uY z6i(7x-^V5yn`lDYc_83^VaLt1z=G=6j6=ia?Em;Fa`tn0dMhllX-TFLNMZjqH{j$*2;Bqc~HtUZ7#a4Qe4 zTU*)4&D7lwVC+c^abzD)VT0ykQ+!7ro>811rF5|7(zG))@!y#kpTlS)_`932;&{yB?Zji}w0*N%KgUfR=%icBRb)#&mZH}o402qvg^)4GB^2b3UNM83g${?(`kllw zX`1Eki8?wjhks~}xn>wo9^CRs{?hh5;g80f;2R^?IA74$xjJ^{ z8@&kuMoH4o46HVv`CK>58u2Eh3rl%-adS1SmlBqmQD{p5<+4US7d!)A(df5^ew?+L zB=Hc~WDoxU)rvaH@+bAdUKFZL9&h|%Is7*0SCS-(M}d`n*%mYa{W&$o;u~$DKH-mV zopry(D|e6Zo+VYuM^xvgCryjyy|+^eZoIvmth1;P$T z92GsP=TE)6)3i%F+beFk;I+21(ulp)BV0i~Fyr~1_?0&SL z$LR|}qQWFC3cQj8AP^gBf_rzyE0G$9R-(SPIui5XwlASNJZqgdr^$Mjw^z3?Gh3FK zW1ng`QU(gK0OJRo99HgqKUcAr#khu2shCnJ|CFPq- zae1cQ$8RmP8}__AW>TcS;mN_s^z=Ec_N#2#m7TBbySq1m^*bw~>Z=)O;7yN~LA8!B zKo|og0mX7|kF~wlI=<6Qx`GD+CRVqS)-_haEwzRR@pGKydK&5WT^$~kzUNQ0z0=l6 zNh=%pkjc+*4;#DS=dm@jshn}o+@lO-DEk@?qtbpSN7cSE)h9%-xsuK(Jnx;XL6OzG z*=@T5k3y_HYcZmDaNFq@MIdXtC@f=+Ic}x5Xv1YfpG*vXQvqQMfLLU9IL{vVsc>IOX=<=vTis6r7j~7@N(L}Pah?d|9A}JTv#h&PWzG)w zIRxaD9{Z{d#EuscfLJ&<#!q566(oSgw;Yh)#A?Suz0>r_=bn8+2qbpK#RZ%%&;ofi z-IJtpkRnNiq!LdYtGPhTfPzjr?@TMGi)nA+#W#7Y!>a1xY~`9uXrabr1#;x&h#X*W zDRHP0fC8urcmp2PARE1xb(O-XJi^|eBkx&7-I&}f6<0!A91cgVYi`86Mf3AaR|chd3ng4gsfi$Wwe92vJ(?Rr2{`<@Y|+{;O`*tgy6e69qX{ zDo;N9PY31Rs@ne6HzlTr9OQ1vIUTSnB$~dQFqXEr5JWie$|{m^$>V|An6GlcoDJQ( z8hRPLDV5c`1IQWlsutEzk|DO>db`stt6Vp&+vUNy9`HS2w zqb1kHYL{_~7%{n~w|Qe`V0Nz1IV1)?-cwjbIc6l}lTSse-q>161*OAB6zs1m?F2DU zLY{rHX>c5u*WEz@nr{Z!j~SVQsZ>=NIN){_23>mPvLlWt&OjLjzsOZ0Tr{p;S1%#X zNu>w#8e%5RsNKw}USpC+ zpq|_e)R--9Zc{e)w-TrsVv#Wb0m&yFs?c=+wivaN7y#oo)`*1v0Olh<&YRRag64a6 zNvFG!SY!9IkU9S7;+2k>R56}0f(9s$D1P*f;E{p|$E6ydDf!b7zfnc%XlIHn^FRt7 zhtPMZY}>Nl=QSom1U&x$5yeK&CqA@<&cXOSuB_T~>6aO1vtxFop7ALBzh*i6*G5H_ zL@~#`t`ap*FL5NTl6dsv{Hx9VEvdeftXtioBt+o4kK;`Fm+mXN+-TZPvodOvTgf%k zTlld}6!J#ndu9+eFz1qfwaMzSC{I^rZ^1Vx*K|ng4xZC`isUY-V+G0?L}@5v4A4Y? zi66utoaY!)F~xIjU-0Wtw23Y{es79}kiWuR#vr=elj?YEfJngvj&WUsQ?P@lHGlU_ zW{ykSdl*8P$#LPk9mSaP9FR^ABw>eqQF$kwU7|-aPn0a6?T$VV&=Ng6=h)S8&65kF zQiO7DdEVz&yS1K3u2%BS_9gJzHV(3=AHqrVW9wCos?B*K!0vn}ak$CmBj@rzI`lrJ zq3N34q!H_J3%C{;Bo8i4#C~k46AT<<_;HRsaf;^px8a7NXCybe2>9KiIZci7s$4|P z*$+Eh=Zs_?+*bU3WF@q=GfStGcaG*heLib=FPTdeK$?N;6GZ?yC=M;y?Q@r}$v@;7HJd;F?Bq!C@iB+#^%5sU%?kt!38 zLV|q2=Yzo=j&qF*Wo?yRx}pRuR{V^Rz8N_Cf1Midj24bY1(=egWn0XD%CDbEyt1)d ziQqbhmcw_&S~!$jk~zWdr_hD~AJEl2h^rKa8IpL_vAqs6$vG-{9r5*}g}8FZp}uYL zrO5D)Cw4rif&O)5uNLK4)f8<~HufhckyQl)Ng9#mEJu8f!}O(F$Kkh$5D41=0P+W~ zAFW1PCQ3V+WqiSEV^G;HKly3st&3c}!jfNTRpaOWLa3s@b1W+~B_$-1!+?CeAJo>r zOGze-Bq_MYyUU@-&M~z68mlu(GH=n7#G7$T)e!9El3SVLAxa|!PB6zlp2yRlooae! zcQ+R?i?YDSNblO6`h6jn;(3* zELZ{`ou|$1j18ySvPs2cdOf~n{%4J9_c^yxIykhEA965q8BRe59^LAh9C$mBd3o$I zduO-Wt@?-o@XDhA2LLJCfyW;zsgwg8f+a(`SwISKz1(9aw#yoKC+++cM8 zIWa}t;AG;gL`!c0cms(dB}2H}P6+28e$?1P*76SS;Xx(&$%%WPLr+Lk!gX+=8JUU6 z0|XCV`QoD4BuS8;0!_t<@GiMylfgLtl(?2#d79=?wiS5@85w=dNWdRn=Ag>UB1w`0 zcoQ%Kfs&;E05i=!e}1vtvfV`)5`~r|*bf^| z+x%-vG`ZnH;av$M!17K%qYi&u(x=p5($Gn%;?Y9z7={mzMaO^8RFXs+GB2d+Rtfw2 zXEBfBLAZT*swi)~JHqkXp$j83ke+54;2iKVj@YZu_l{{E;WWu^qKZbznt6B1f9V~Q z?VqhdTr@K_^70T%vmCKMGwV*mhHdPcHDMzt4BNJ^ApL#mYXdB^zR)~RW61-Gov`Gd zN3BJj>jIq)}jIG@k+@Opapp?&IfN# zwrLtf@io@TFj8dN-TkqT_3uhZ+BMV1j1)#&hf)FVf1hu?K(n{_yQ^5IaSU=XLip@6 z{{VUz7wupkCy)OC7_6Jnkf%MDIrpiWf<}!Lx`n$R8U>8Cv*W@F0M6D0PdWDOP1#${ zEaZ-P%-fa3W<}k%2LxxmXsj$mwpJ0!sFAI*NM!u08jvz~eY;g!kt#EALjvBLn``K% zX3k@pGj83z8zp@|wO1bz2r2Q=vPeHK#3o0}4mdpa4&}hMRdbO6C(S*4(hk8<*j&cs zAUos*cIW%Uk4k(2nYq(0?JWNQ;$!ghI>rG!l2;&)m0TNwle8#_ACVv>Se?KVmd|YW z9je!;roGhcEfRZ2{nVhW@#0AR2Mjacj^?ZGto%EjjtJq7eF0EkH|?PWW%LX`k>fKEX*m(lzyJu=zkMp-vJ*=aW`VNMrd?di$SdWiP% z#ee&jR${=mKfIY?_Bp7yr^wT0+6U?OyoPzAy|VD#Tq5E~&JJ;&<3B37>4AM`u4#7= zYRP}5d}LBii!pPwI48*2Ac6Gsu0vyYG&c&7+{mMNQj9XEG!fsd?;>&WJm)n zf$^2+l6V-$Imf1Jm)&YAx~00aAYT=fI3M5RpVp`Ay3~7WZf}#`Ycx6efwr&k;SJ&G2V_98K@vhFs z=-JxoH?!Hh4bEm%F1f}+kbj@@qx@QuTU}34Snekg$kQas@0_S*0AtX3LH__OS0-%+ z<58JjC(AC-pnGRL)bZhtNXA(`2PwF=pn6|Gu<72gu@{zFeWl!S$oY|5z@FZ3;#LFr z_|G{9xXp6^0L7^0)OEzQzVX)5C=6Dx#1QUS*eG^99F@=WsK0_;K`xQ_fq9om>~5}1 zR|*%*L%suN*J&JkZf|Ew#!kM<8s6 z8yFGC83&Aa6?a_IjjmHg9XfYU+~;46JsmEU(ETuFxl7|{Wm)5ium)mWh58lyjMoIW zmJNuLLhb=1?O>;$V~&3H=^w|GHoYHZ98yfNNq2{d`N$Em1RuYqE6o6H1b4x!x)1dJ zY=>3&%R5_pD}p08J`0nN->wJi+P57qrF9a`YPtlH+{&)Nh&E2Hm>235fz5Mi zCYl#f6ATf^Zbe#YnzLzgTj~*{kzAyiSGSPH;{*}N?ma6+(`#a=?DsuO_;Wq=pHST$ zOG#TzkbZFwfJojzP^;w6VsY>3T)*+{vNT>!NRZ)R6{bP5sQ%TgGLU z#`+S)S3F_I1ZUgmhaJGum!ZCuJ1vbIh}eR&3{>vH&&Bw5qJ!)AHM@Gs%lt={Tb(e4B7 zh@RlK;7Ix6vpPnxtLb<5>!Ni%){xMbWw&ON!rBPu)kl0|6}A5WXUixrwf$Si&TZf~ z2yve>lm2yxn?lwtZZ%o&ba!ZHiNs~lsg&h^FCmJNo_QQsLA3HsKVv%lF@F=MYu$OR zXgxF0w^vrWe!n)WYct#_k7;&EwxNxq0QO&)HF42hXQy?hzM41e9Y;;n%w}iY>gb37 z&v2{jCV3ZFJTg*7y|k@@_{SL$=0@UF{8F*+Z!)MT-_XN3`%uHQCs{Hj}P zm(t*dia+`j{PR@^rJNJ%QdMw%)g*|wY>?MiGi1v=jB(p{AIh5|wstkUXvRGzAF9 z3-+Tq=NxfL#|xj87#VDH+r0op1O@HQCRQ%E1e%m>*A44}X+k9km>isDl0$4}H6t1C zigj1WPu7%1AGf78(y0MrW@i2`DZu?|M0gxNpIQKAxTJzk(tBi4o(U(g8K7fRHs%U3 zS-@7BKUb4c#z^x9PKKba!vqJ>&`GZtod<8Jym6}o2t4tUlnFzH+Ql= zpJy+IyRHzA2?h=y8QYVQ>*-0J^4{H6dzn%wWR<38bAVMiP(AtE{)KX`uj|Nl9a{eY zP}1#~OEiK|ldkatk;-H8g$D-RAxH36MDnXfDNL*z1 z@A9pky`HZu>$WIjZ%_2RtskaJQQ+l4oNsQwM?O9=_ zIch7@`J&0&$8Gxm00%wlc@bLMcnlewZN_uOXYMZ@-zwQ+!LXPe&&z?_)!$XBmA8@5 zy2R2sRqjAj$KIe_TCKdz0xE$Vh9%l@k&Nf$d9JT!VqJ=>t6AgRD>XwKa^mfUtaV# zX@cbo)c{iq5;!9#Ki)N68f=LWcxM3t12`L32cKF)YEo)fN|B+KH6*hr+KKf40KFWu zD%#I9IG@5HN}=GB^Y!~ua&7E}l1p(iNcr%s;oQielZ+~iV1Gb4s5kS)YWr@t+)hSz zX9zRM$@TkFHycz0?t(hX5w#Ba#I*>csD|EHwMc zZ*6V_g-Z}sBR~``Rfa#MS=sc|a^5}0rgJQ=Ss)MT=ntu^jij-xGAy5zk?ER{x0g0^ z?J~!697hV00_u6l$Ef$<)YT9=jkbklG-a7uIU_g^6KpCm?lJu8EVIXAl1uUSve^vb z=Q~*A84AE1$DY{q?^Iv!+>u#29X%HAQ;fTAix}kX?tYoa^sIf<^IqI6)5s-a*!-X< z7#sy051^?x=qmL!Jww&WsiIqH)|uD|6Hm)$9N`BZoz8yMm6h&qCKKH}lglRPiE&d{hh?}EbRzT%)mePNIZT1RU*O!kr|5R!(d>Ja5<c3ymLUZA@LG6e&Zk=*(c;b&X~Wmc2otIbGtE7 z=t%YcRV88FqfH&WEQ;j5<~hj7DggJusah*F&7o_Ua?0B`zwuxJ{Hgm0YAD@p;V76u zgLAnf(xa-2r@4($6+(@ySCgLSinhD7GALA#s*}jcBlM+Au}Z-qjKz$SF^^IJ=bV3q zItvkGWRv1INtok9v46F=oc{nyo3CmzuT0ok`H>0@>UiwD3WH*;6|KWCWc;U}VY?&0 z&YRX^iF8dIBLOs!?vMlDxCGQBl`8t&lpD8yTO&LmXML-Tmd8Iz)O5bA?`!)u;qs#< z)rsX;a#Q}3{EbjsNT%giARiE5{i!xn8&hv0s)EdbDd5I;G*aghZ&#;+Z_5FchAC zx$RF?I%2Ec2(zBiWsz;K=CGND8av1Yv9=HP&}4nquC%>h!f=-sQA$UZWwk>rO@rSn zl0M?8q`uHWXm0ful(x_d!dVcHpXS9%pGk%&BDl1Y<^+E{Q(MR+N9Ve>K?fs|o;|5* zPmws4-A0D{s4hMVBk+u|JSz}8cM<^y+qvVv9jYbSowX>EJ5w4G5@k`l%yY;+!NpkJ z!Kk&wMr4}%a&Kk~*^*Tt9C91VfMlOh>rUHhk#H`qZ!Kp+cAJQV>*&ardo_j;(PFA%j7C z3wL{F@xJ9aar#zoOVNVrtux%Ctd|QQ5QZB-aKthk5!imTt@je5*QCy=HS)(5{P2dj zDJW97;mFS**GrKlnp;>WyYUzXCD8&9Sa3!-H~@X?1)#)X)F(bXh=%3&1v^2^gmQlM zztZJajV@vT0FaDiK-?DrbIA1iRdYnFXQ<_|FzSErd`IBE83Hwog=ITJhkUZ0TXs)y zar$JexA5++oSD|57VtxmtauUhWXc@in3NqiSkA}&`f zaB>IRip$+)S{7<;D)TRc^kc)7yHDV4oYC~P z{H<`(t2rPpK@GQYAa>4A@~=K<8f22+Si~d?dvJUuR>S49*dIbc+n=3!ukhPS{f*OK z4>Vp4!QUj2mK=F-J0D?F>h#7seg!zL+c|IhMaKUC?oOWJ_bOj%?4ALU+BXqD#7QVpzfyZp7M?Ee7u74dv*h{hnvc z2qe>@1H*!7)Ba;Q06rWN%l`mC&*tJ!`#)%UWwp+=jaCgx+fuPuniCU5*vZIbZgG>0 zjy`nN=9yvBmbRDnH@A>I#=N$1+oFxLdC_Eu;AAQ)3>^8rg>ka!mT6ZfOC6{y7x=NS zTy*}S({S|GpKX6-sMr~eo%Oeh({F5po*XvbI6rEv(7K}1_TO5#yU}%B3gbt&OR1j1 z?T+OxvH4?=cgy?pj`dUi(AHnG^*akmq}>ud!>gi_RT@@c31j9tC)9fm)W=N8G@U>A zi4)#QGzp~J?TD7dd7du7@H3A?Q-&zZ99myigyz$g{cQgLqoimbh*9208fg7xq+fx+ zvesiZk~gyMZ!UlHR-O%MZzjL8>Z=(oWLsuuXc$TXBXQfeoL<3Ztd={!3Yv%+KamZCuxSSpaJCRg% z7?fm`Rg;9a-JE;yKG#UH>Z|ga_L||8tai^SStLRmkVpXc=hPq8w^mvgRM_YiP+VMJ zT+Xq0b4e7!>JCGwrFUDIbeiGHLpm?KHOQ=~3AyNo(qskbb zcVr$#W%Lil4xAoas5PAm=tcv*q{8A5c;{&$fakY0DaKi5Q0}7P@DEtmocPLygv>SSKK!87~zh0XC$5~$MD}p&~%=?7k1EG+Fr|M_To3ht0Lif z4xUh|0{RZ%Q`VhXdE!}{O>all*7_Bm-YragG_u8#GNw#tka!2}R~Gu+u8}**f74oy zktDISLVINKVJc2@?cbgaROKZaC8aia<-&k4*({;B^yG|xFXvFCIh=qhSx{9Et}#&) z%^@PaA;u*_qdX5vdmNff0ASLy5 z%|UR?NbSWKI953ICV&z+jGvLEFvijIpg;(tx!_Tg=Un{h07vuvs4wPkY|zeJ{Q#l| z%1_MD0T%)=G0FEd6~nN{xu8(&LafSo92`-i1t1S&Oa)|aIrgILjgHwgf5hKvPyQME z&;pyXgYGEP^PGE8H+A~ZPtJanh8q4;^)zGh$MqCT`A^i){sj9|5Ntntj{H(oU^mFq zjgdFl(g%0?kLf@O{uTRDZZH$L1-R$iy)Pa``%^bZbh}6JkLO4j&v0nIbYz9@e$E$TPThY;ZH)qr+`=a;nzwyt|uffyw*Y|MNX2eWFmHmk!qRKCcDG&eaD~Cbf%W%2fbU%|@g0)u@Rz0y z#e{ZKd~~2&qjHE4c}expbMvO*Hg>`&?PazSMBW)_P&9U&c2xe~&A;tbx}KwPuIO5R zmv?O|+G)C!qF0QV!6jdEw5&NKrb)oSU_GlWrsX)g*%#@kv~&0tTY_!uqR1=*GN~YA z(;lau->qzVd!}9(gqIN!B%Fqkuv;JCKS5WzM7Ea}P`;Nfu!Iv5M;v4XApTRFXXpn# z$*a3tW{P6-9~$JGV2pw654ry6;D0K%SsU3EQbe5|7qW*lg`Q9|`>}ur-?#OtcR##b z+z`x07Cyiar=b34`O;$^9_B0yfLYkE!U5cq+mC+2x$jkV+_yJBv${omOOMLe%DkVH zS?&J-S?Ajw%o1{Yh1Uhi>U}e!Y$Je1ml~|4UG1YklpJ#_cK`#x?s)B-)>gvvspppa zSijWgvzGG7tV3?tL`{q$pzOX;@_mL$sVO!(NTRywfDehK&Eu3KC|hKkyWk(n$Lb3wgXNOVqhB z-E1TNSd{@*0N{e_z{ts|Q}~+dTgu-PajC-o6U@*EwIpHA2#xbRWCAx};Eznx`>rXs zJa2uzL>_F3X`0)AnM2gdWQ|ckV%{o%TWC2`#(gTcQMylvc@fe@@jODuAwa+wC)c-n zv(zTjWw^M9Qn~nV0b`OkbG4YbIU5E~81?6x$6hsp%-gRd)W|1dEM_G7oYdS{lSG;I z39m?w&OaQW+AzCgPxbCu19yW80`Ty$zvCYscwg2hQSD19q@2Z z(w7;Q*H5{(bdov2PcLTY1b(8KXi{6*fej-uED|OMIX$z_@~JN^<>sd)%;>UNF0;?6fQKPk${R%Jdw>_>DCWxZjrm=9N-L$ z{d>~c-8HLwWeOm8OR>jdGwb#rtuQk}(tikoK}7}f_!!6isU{|G09#-%%df8^6}FPn zCsVyfKAEaLVkfq~vo@+TFlfsa66`I;h ziIf7eV2}n0@0@+Cyo@N%^TkTk)V7fX_E|ApKZZ9S&&MMj z#yHItnkf|_gOGANjAQl1LWjmFX=^mdmXXS2jf_~_FnQhI2W~#}a2s|sjEirv zU3}evPcX<8S#c9Bv5Fgr#Eo;}uJ+moJC5&QKi8!}y44yjMs`Bp0~I{+$QU^Ht1Pw5 z1S~4*21l1Af&TzHcVZK5dXp{dq1~5lzME7ptwhuACKpx6?Gf&U=r|q}?-K6d zkUn%Y13Jvex`Ims;gJ!zI2p%3%nC+}xAuqc7$A02jN`i!2Q>~!1h>wUCz-(VvBpPW zbL*Ozx^kS7fD$_%Y6>KrwxSR0=J=@1q=_S`Esx0R!Hxk3>FHWsenxwXls~(SlRT@R z&E-x%Q<|uIM-Z|CNyix*@$}Cl>}u;;k`Su`p=mB`5;kJlSmg4ONIdh5d(>o`dxTp? zD(N>AkSK8ZY-hOsMz1C2Di&`UEy;c1+gr$1^D-JPa?>A&=U)+_5{p;4(gSwfsQU+g#TqXxNw(ghlk) zqX6UF@@lRPH8-kAuN#~Y$av?}gTWPKX&~K~KZpHEELx?$kEysw@3eZAIp?=>Y8qCn9lE0C!fR<|iPth)`Eshbi@mu~jE=0Ox_+_O6@Kn$y`{+RY28xIh~L zc7hK(e@@kxs=?wS>{)a$zYw)c*Xho%d&@<@*A_FD%1MajQ?z&VJpC)qO5-mQG1v}N zu;(8-?VV|Ioj0Dh7KU^}>T?fgI#j-6UFtG8yYu#H(BB zttCGXJg^UCIbYE6{HsS{tVU4{_L-+@3hXxpUj{-wa7O_Bs~0noDgI)dk@FN}lDwQB zYS7VAXQclC3AHYmDRXhALw{p>#chmIe(@DlmjPRrB;@jO+qFsR`)PG;H$qEMY|;MM zv%gk}xY`w!$A-RRAt!Ob_a_y~KL#%(Jx491w+-;KTeC8;<8qO-pXu~9qx?bZ8`!!F zLWT+Bw!cf60az1bTJ4px5ce1$f^*J(b<36sc>8^9Z;n;rt2%Guj5cr7_N#fJrmGy* zZ8UNRbultXSAsme?>)!sSy*7vA42OGp)y!UaRgCGB+-^tRJcISS$nSGv;YA;=(=OC z^$kMS*vGBgMXJdNGFacR0oY^>h5W1zGk|h4O?B5&-P`o+_S&yc!)tA-y2Ez%z@y5l zca5jFetk_*juVWQH?u61lZ&4vE{FJidu=9(CYh;2cB!aCaVy(CM1#qY6?w)Ko=2}Z zuF3eX(U$u6TIg5P$g^8Ck{hTlANPI&f#d*lhIUeM&#$FqI%dPAFD!J6jUQEOU>Em_ z?9nvJSQh6v&jbVMpRI5Dzg1XuPMEy3vzttX)S5tZw^>sYnB*{qcss!b0{MW$NM zbeevHZEZ8E23VMQpPj!bIpYNS)|dUBtz}Qd9-?_HjA694RG0&aNpt{r$ET({RHoCz zv-SPO8&Ykrs%M{H)96h^x9^-(iJJ)LKf{V*+OC_<{{R!{D1YJ)kS2_B?0$lP61~{`=!X$~sYCLgsiBYE51^n0Hv%#J z>L2)@K}su^LGz#xmpJ~<_|q7GId7=`lvw@G)Kc=Je&z!W>S+Pc#sZQ~2LMtKrx|4* zKk%TV&VH0~$+eV}Ba`{aUrK1)sAGvE2LO3;-_n2`RXbbiXu_WkGI$r5o9?hypc z&ihmV6cTtGn%GW^kl0(>329>D?yIC-_Y=&NkX`%Lpyo+~n3j zTD17>K1(Zj#FIMgQ~WWKJx{;LbMmT|TkK8a_c@ilw~b|eGdWKI6@sYmmd7TveLvEd z7nTq4@x7cAy0m1bWsnTyBKPNxP6w@Ox^t#2v{NH9i<`U+?ek@p<&I6n7JMGeFgE&QBL=dw&u?K0O3ou*Rx=vpoOf7M_df1$ z2dVU~h5pW0H#Z$!s|gT6Y-~Sw3Y_!e46!6-+ue>mfX60*P0J4Z}UQ%L?NjDI1KQe|V00Ymt?Y9ls4}4cD zxa#`|)c6Klo0#$y$lDxC*zE_`(>&+gjw@z-ZPt@MDemlr)7nhB4Dm^-NN!k1;al6s z5Lp85EL%AQV3Xg_;N!Jy^$lxG(yboid${6+d04NSMsNNasO)}Re8?5awM|y?`bQz; zPZVNFnDR&VS069*DS*BtFxr6Zh<7Ae?%lF|2m0?vgzno1B>NVfLDZMMQ0;CcT{lHi z4}?xknCxF4nEMU@{$)^JSm}1gEh;w(K=Cdm8)TGwDDJ=O>rt$dbqwKIX9ZpNN+eYwM)g>Fa2y zLc82@;0?S49#!Du*0oxl*3T3JfC&`qaxI-Z@Zw87M#^m)RE9f?JG39We%pZb^#>lK zkU*|;_^tR)b)&qxo{uXvsbW4S9H1oOW&_jEN&5Wjlkjn%@SDrP-^ROXO zr_l0vJ?qn*KdM=E4vA~1*t*YSdmi=5@Kl@?ApG(O`Bix$)U9mELR(Yd@%7%Tpy}N; zYpmNu_A%a-2Fl%V@k|C-tC8kIu#Ye&oO9l}uT^yz*Dum*dsVe`;bc}Nv7C>P*zPOM*ERvr+}lSS1py9$k3X+t@~g1Q z<4lf4y`ujBK*D(*FR#7ct$E%;6NGks&0jD&PanB5s}0W|B*bS?{c) zVtySZD{%~)jsls`c}@uY$&B|kU8O;%-Jn*9jLHC5HwkBskA*M3{l_j$^wnzZd?K11&H+>z#_9+-JYLnQLHr! zSpq)q1Tkkna0>qbI@wt20uS9sD#ZZh#IP;JgAx6xqy!JD_V=nScSeWz+KgIpw}pbq z4BBJ(_Kd^0D#v;Pf4p(q9?x7Q?88Kt8>2O)ytX&+T|)~=;ef-=RQ5UKcB}Yc$S&$K z#FK-b^?#yiS_S>Fnf1s)afgZ}G0U7_f}|3DxW!oAbpD?#CVMSHJ8%X`x^E3g{{YR3 zu|e`z;wz&OstF@YV+m5eGKNxc$Jh_?q`Xi2YE~0M&1y<0!vN9a%yLKfhw1IjPPi8C z@&#xwOkDo}!@l94x6+_m{8_t?$CrGJ&g3d&GGG8cox9Xs*)&SjZr0aNYlvN4_XHb` zM?Rz8tyUtWshO2X!yo_xeg6RMR9BYzq}LoOi!=c3cM1vqxvR8_SxNBOqJ;J>g2(Ah zK$mPsYK$@L6P*3MDyLfu8p9;=Y>;kbiB}=9gN8nXAXT)M@j?_Qh$Zye-eXzLrCFtW zaUoW1vM&RZ#y~#*056>;2$?<1ap|J?#UaFATtAo1jtKoLJeQD-EudpA{rjCxJlu?o z`VJ3oTC~2q52Pdx=^kPcjo|ZuJ-(Gnk)_1)_(;I2v*)<^eJL@Q);4c#X(nY6Tt-U} zR4@TU6(2v%QuI5Ru5|dLx{+m^DJ+NkIpg|@fu~12no93uhgJ=^V1bf5{VFz{6G5yN zQt(8|`$KWLaxgRcb5DRRFXxShqh|<|crorOe8}8q?den(vOmCDz>{Vrk8z1ukVzz* z`(msu<&AoZ>AXmkI_*-&C{6&u_w0W3t7Vq@(%MV!4V6^I2?z`0ByGU&gOm3>(gM5p zGU&v)CS@d!PZ?pwTv_U?;rKyScKJzF?dkp$){}0t*hcq7aHUG{fM?Nx=8gcK&`E#0Y>JVb`sA998Ks)`&PdupZl_~9?;zxQ_rdh0 z>;%sD4+v~q zA2R)k`cfX|Lpe)=66J7roDkl``Vf5>QZH?MMlB!aJdnqdee!*NbsR~RTYJFBM=`lx zSNzAg`-;;S8Agg4lwGn^l94+)Z;C;Ykl8E8Y#&eiQ~G-aJ_nAC4&uRBoRWXFp8o(! zElN9BA=AV%FN-80orJbMyIBD*U{Wu zOT#w6RNxF_XvgbUi5QoXFi$yAilMifSlD<|GUJdBHEVCIY>8gs7n6aryL)5jO2r%c7BMgYLNSnDUzha-4Vh7Y> zp1#wX4Owpz8Fr{tI{;uo$R{26^8Wxjec_(~h_a*G{HiWC36kg2ydI8QQHt60RlS5$-AQ2&hbO{FCUG|Pk$dnD zEXEibR3pS#oT}#louuRCSp75ijRJ?-7_I^1BZ}2JnJuPJ%5fBmdCm^g$JV1ZMI)1> z0y~?DZpra>f|3RdciwYGRbV7 zBS^b^i@Q0_c~S0rpQTene`_?}HLJq1EQ-j519@_H4XioxpPp%U7xCOrEcXGBTDuvd zQb1)n0kQAt_4?F3$r=qZIHuJBc#>S90}65hHL%finJnQjLoD+!V}E?P z651hRNKrg%@B7H|SMCKnPk{;iBJniodV=ChQ{&s)B&f_eQmk8*$C!C}`c<5Fw>SMs zE#|7RJd#}9+DjC0lMoPq~ovhNCnWmn(5?G&zj65d&}KMt{4{1Mgd| zv(PX4+Q&h>vxGqe#Sx9KjiyPD%o(e(``&iXkSAdX}P36MD*%5cLcJg?rnwx0`hj9C$~7JLi<-e8p4LVO}Cp?_{xL@^9FK(m#rK52|aLHJyx8$8|i?AYj5-l&_o| z9#{Ftl-Mrl=JQmRlO+!lXkybIE6;(jO;GTE{<0FjZd)FM&dTM)(GCfOALnXsm z&o#tMn|qI9TGnK_U7F;fL!+PMu2LC-EFIxa~8v z3pN)4UwO9hfiKJx1 zINqQxM;YW2*cm)<2R?n&b;vYcw}Sri*5xK>PR12GhV?n^>vVTejDb(Rd&{BxZiU-WpcDdZ?waXm#jS2p>du7tP{rblwI#tPv zMGUe}BE$$hgURjmsJSJ`(r<#R07y#^IQ2NBtDq;%l24$`U26Rut!YrfE5QWMJcc!j z*fh>Cxyj=g=96jBolSHA_&H!x>okcM^6yPM;7#e|rVLCc5w~N>;8G=>LV>;!$o?#! zOrx+kCPRtB^B+U4!wg0n@s9^%uT_Im|}6rH4&x+L{%x(X|PKslzM`7xg$4;l|>Y z%Y(Z)2z!4*_Kl?}x?B zO90z1Ua5_>dteJ52+{WeJUweA$BzdsWZIqAiBE8?`|gIII-wE3=c&Z1LSLE_*>L= z{V~;%T}vB1z2bZ;+)2a9xq%xO&=)~tAC&edQR1N z<&@3}ZQCvL@DWc0MnA{4f3#{_h{knCU21(mX0hqmXM(^I9%Ki^kZ08Y002JS{{W?D zZM1uq7V%p^cdDtHNnChn$It=Xf$7b3DIm97MS=*L*G`CpL;(1+9AmeC@&5p%Qs&a) zZ7z8lHMW}73&bNlh1yQm!RI*i?epfeOQ^0&19+US-{@|iB4Ll^wnUlFQ&m3#fq zA5%_hHexFTI!&lanf4;cF}x6b-`XwmKKbBQTHB~uFYTo0g8m+M+sH2Jkb zbfV!D*#u`uM(>9W!nV`gWMHxFk$^KrK9h4Ei>7LJ5nj!2sMs~=x}DWrFeEkzILO+= zZqj)K5!$QzPgJ;pmr%1+vvUy&y~~a3zi>PdLBR(Ca91PZ%QoPA_?VfYmxo6?bz81di{{ZmP59wPw+sx+# z;~oD1?@*TVvPn{;SYBIx*wY|^B#6$t!a*S+XHvd&EI%&*5Pb+9_20h%HE_KzYoy$7 ziJ(&PtoRH(=W-vIAO0El z2iMc-=~d1;l?^&Q5of4d*yz^x7q=1H!W={5NZ4J?Aw?Pak^uRd;{O1Se}pjIyq!nV z(8ms>Tle;WVP-haSJ}8cdewhhbwt@kWMd*Ekpm>u@mNLO{=_HJZQtak{eT zn{69Q#pb03!TUz&ZjJz}f(JR3fzAo?_T{RW#%ZKjdHiWrNJ-oQwiG|RkJz#GKhM|-U99&J zUNcxtBi(0fG99p>^$a-;^yK@IQPMPq-Z$gA6P6bhF-8raCrtZ?`_N}%u zC08s**FC?LT}tJ!mjFum1udgKRUYhr#PRG6E;o`pfg&@t>iK|$$}D;Q(e?Y}pFk-s zQT!}!rOA@gCb~oFFe2+5`y6_){{TAA+c7sN>_ZiO=W*|jar~;|LDDaE<-C>~ zY2=m9l0oE*J8{dLD9OOaeQ9&R*99aowB{sv8)ET*2_PPLtKBnBD=W(!Y63>8OpU;C z`MLDLsHvmPXDN#D8XM^4T*CPT0o-FB&$TGQSGd3tZeRXE~R5NyzYp(z>tB*A3W7H%bS^Hk=Pc%0E`X9U}qmnuYyG9 zmT8UJSjxuO9HM8R&zyaECba7nzNcapF0x}~4#|U;P&xUG)X&5F9UAYa<+jyqp_Qb$ z-Y1oeOaP5Z5xDL~Nh_aG-l%jK9^TzAo=bPNorGml;ThsNd@H7R56Vt)j1kW@DixIz z>F#8dTJD{m;KGqc2``-Oz#YzW#dPR@4z&n$OJ|na6L66a8Yrd1q4qiQliMI34n=AI z01gLCByrta-9Y-YAl%YnOhJd`Pj6y-o=0lvWfkBkxY)pfj@6?c1l6*sAY63F=^6hXAPq6vdFV?59yEhVB zMv+ACP*3Q=0_CV=M5N^XOiIt z#R#5NP%^kaxyc=>{%t19P`tc*X__atoJ2zpDZunUT-9BQ8D_hlJ@TTU2*|uC=Nb0w zYMW%JZq{SqB(vpE3;~W@{{WZHo054Xe-W4{11W>s?fmK6h~>MwW+^L2*^UqLKPsCQ zs#@HInkBn29jXwK#yq5gKbOj!Rk{Y~b4*LyOOFmnnjp#lMi$9u&4$CqFU;Sy<^!c{h(b%Nr7QAOp(2gPN6TV;Jfin_H8MFsUS4K$JC&N!HF@j#F; zz#!v*JwWF*pf*t`#9MKm20MK!rpnP|ouxYx;B6^`wC)RooR3=3TiH5*&R85|8qdNf5La#g&T`hc;S2x!#gvH?)rCeZyZ1O&Y54Afsmv4HI$u3)N z9ydoLjt{4P!lT^Sn^>o4OFGDe`8#^1tj&M3ew+$vF1f2d}kro!eRX2Ox^kYTA*S&QK+lmULGt z%y>TEKGmEGT;x+2n!D*)47$`1H~#>b4FezT1{?$T$LUoDHpgSdZ?ry@T_>n?>(=?(|ue97v9D>=r(QwK~ZpXjUvpFxr+_Il0OI*|JCH#dw2O;{j`j)Xj^b4PW5epP1fXVoiwueb3d8wj(daO zAJU-W*94QkO_lz&sOfe(mE>0OTuj!hEMx17 zy1ZRFaUdxL#70C|&O~6kGP>jr{O9jhl3B}RB}AcJTPR zU7nK_)SAR9p9~{bJ}ju{?1(eBDy|90EOI&HoX%BRNfJcS2ok4 zqb@lP>Z}jT2DcH!3N~_2Jeu7Zy4cC3J=y17N*kRsQJTu?+BmMFICUp}2>|yTb~OHn zY}$sir`Sn5M-|NJ3p8p00getT-|;a-U3IG-*)e}Okkxlckb0X)aKM$lhqph*D)fqu zr)~Iep~c0*-d&J;&pF5Fpj8i9=(={3s@g+iV+0EJ`>+>0hhdzYpK9wYrKEkJx0v=H zI>G)R>C;~7mNLU}VFXb?=_B1;ELc181`bK%*i}(m?oNDca=8FH+mJE){ytpSptLj% zq3Mn9YZw0jNUk~iH%5l#q`c~DStc*P!_)1goc%IzD{*bsCeKQ?g2O}AZsUSAg=U>Z z0kAus{{YIRHDZIKMbtOedR%t57xyvSLE<`ZeBhFU1COOpuUTo1;dJOVElu-`S=uvm z^*E}_o~zcb%KrfFO)fC4xeeFvyf(%%0rmOSgjYR9c@q3rP`$D+<|`Xij1RfZP8O9S zxy3hZ*=erLq}j_nFKosT&m7)XjPt{1v8wHNR16x^|IoZ(-BV6|@WC#`pI?H*$FjK4;pd*}~Dm9C=^>>^oCB z+J5E;{Yw@(_8e5)b|D#VR!!7BQ8SiX%Nrm60LO!SFVL~#oi-O*iYsdR_O*6M1*7r& zB+t=lHnzq|0LOER(8p{8fC0v7!46EzYCS)tS}X?M!aos-Eb=jtkKCFoTVP!lG*ktE z@~$fPTVME?(0>en)Y5dwH%gxU>Mxoadk@C}EHX)|y>={L;~Xq%KdouufcT5;^s239 z-D1=xmiBnP<6~R!!*6NgRs4p!#A!NESE}*L<@@+o~A99xN8h7l?>J)iLpgrqD z_?4qvT-ia?+Dvy>8pJYqQb%YTCIGGCA;-vq8`CH4kg<~1P?nael3CoRjcIQbh27&P z0LtCLSxg}fL_gC*1cXZG8lPh^eS zjQ;@YKDeu1XV|S{UCxUwptbxm=%_;pHtF{*(n@~X%*o3kRRw{as3fc{K(mS>-?o&F}qTBjO(^2!t#4EM|Dsv|ah!*E8)^}mF6QL0{_cH0MfL`ba1ojU zVTkhgGIH~AEufs6`SE^XBL?YJMki1#Wt zaKp^JgON@WhOILcqdhkho;Ob3i-~P!WVePP}3dXROD5DH~ ztBn5u54CKy7}i)G-&1Vc_)8>r>nekiPC*`yFb}9X^sYs#&X%{+LUj>&5}z!YVi+Ip zp2yy-$%dah5QbY^ZfF*H9o`WvcX4Bsoac{i-TvJDDzfW9(=`aoKp#%H2OeRV&(!*T z@l+qSj1F4T5E~dJ{{YBTOT9|>QNmqZ$s!H_Ckj5*Ux!c1%REcv6Lgo4L)Vh(ShW2~ zEaWnLJ<>BnJ^|sEjF0PE&ZPWI(&n{<^!}MOu$t4sxU-#uLm!;Bzz3E^2av@>dK};y zxc>mzd>ZfJj*Zqr@I!NQuNBR+xbyg1qYoMMW8sXU$mfh#C)M;ev2+p1;wwaw6Waug zRoN4o>eHn;eGl*G2N#XKsm%A^p^Msc1q{c7h=j@IZx(RhW!GKD7vh~)9>-kG?& zh-#9+6iE4ED10?{&m{5`IN+Xh$R?_~lSaCN&rFWm2~099(nWrt8~{UsGpjw%d{9M#t{S z9mY7$YK|SZw;Ezb#ce=nofU}3Id9Yv{HmCVB$h)OkN_pI=)I~;EiHpa+cP2B;P1-q zBO^FH{{W>y$;sO##{==C(dlwY3pfVk4Y?kjkL!v}mEY{$N!ljzCRBhwIP3|dX~Su^ zNETTC0D2gD<2gA00Oh6*pLHBDTIrk|*q*z0=#08PiH+qCxbw}hlCEW8twfB_xP%hs_snoj*o;yiM# z2GeH8>#%I z2+Lr6`1+73$)~`QYmy&R*%NZ)@~Vp?I}%4Nv;p(LJXMrBt(C>C>@1K*imEM^WOCdB zG8h~K+k;9db-U3m%B)uD`C|kU2hZHpU4G8i&_pf6tGi^35y8;?j=a@ACBjqJvhz>Fq-C6k(F@0iC>-v z6_d5G@F!@aoHS{iNCz1AtyPAc{u&#ytb2xB@;%S5+Jq0(nAu~D%DCxww^rr5}9Mh?Xqxj_4fMKQu9+fh31=i8Zgt~xZ3XAg5)oC z{$0JOB1K&`-@uWFh{h=dXkW7_B!iEo8L&_RYjUHu`2PUPt#2T_GsPviPlXa8XyZ|m zJxM3mJ%IPAiMW6Q5HzOh7p4(5bBhrZ|=~TA_nv;Et?Lt>Km-eG` zB3w4W&609!nCqE+M(v2&Rze8x+lt#=>QesDySNJ3d0oFQG0kB$26w)^GA`C>7?3*x zO<5JN*n@$olQED1Auu0-HnsT{_%0XpTjj#b7z~-8~*6n(C zMAOV;;J^04ixZal9LWelBd*)) z?;I1^>Y^K~dxibsVVLKSf^tXDXX#7p{bx?S)ihU<>QZEv#W4jesH6Z%Vdlm{fsAkm zAlE$T>$t8YZ7%Xp+{!a<;Qs*1a5x`BTFp&v>@_OFa%=<jz_Vd zC!fh7C{I0uuhNRkt@XZ`xwO$bh+QSJ;Ox1F!ImISH-;Rr9sHz&Tb+J4v$lJi2_!|D zIKoSB7saAS8Zb?$!If|v`H$GuSK^o9+I1bGYkCdIOW0!(%L$N}q}m4m04Z7@S8H0cn|(Ctx-t6H zYZvVeb5gwV3Cj4M8jqk~tx^pp!3be$jOX~ICC~GrLWZ{l_BJ*#rL}BbMfc3bI@k$CAD%m7PKLAXbTCQH*w>LWpn^d!iP$KY0Rw2vXmAV!{=9 zP#(n4p-`73PX&~F_2Rc5!%`mdtKG502g3Y^G5Jt{C}LVmS<3XR`t6e&Z2&ytH+ zZ0dId+W>xor)W?KrhUYXvF_vRLWM)QKE%B;V|tAwU|XR$!t%%J$NVu>?Q0Fd)Zt~p zw(%}ve&tT(48KOmKO!^lLWM?L4m^@{7Up7kz#M+HqSJ3Aw3(eiVdV^`vjRXOg$jau z5|Z5C^yZe9`n}DvODBVOZ@XyY!z0Y3e8F6O4RQ~}T?!2s@fTXrblD`e({3$ST}WWU zcv3Mc@q^#PE#|<+Gmg|KRveOkA$$_jWJTi3qzy>Is}vEmi);^+g*YLPu5q7X=qk?d zbT0&sR$GZ>SkahyV%!PJuiM`z-_nH&vP*D7GwzD*E#hJ(nH}EYu+Bn}!1NvX^d8={ zi+IGBGg`(>QKF=hGM_w!hpTrTyZ8Bu6e>N22-R+kumurX!!uimlYrRuZ*kA%?eCh0 z8;hMeZ>C+*sx*lJ;a6^PpL54^!1NR-RDg4NTSUK`63B?J8Xgfh5HJVdzkisdbtU_B z=AH4W8eLvHh*jj_Q#m{V>BnG3eMzB0h;JmAp9Cw5QDg?Ac*g$#Q<I0qi2 z`u#s#(xJrKE9!F%(Z>@?mdnBn5CA^^0MpnG^e9xs_!W9e#MjQvB>RzY$I3SyybnRn zea<`4+(Il&EHN$2(g=K62ML_^9)pg|9Hn4!3kZYluJ1GYY0 zzO+&g2I?DF4%u!MqIfFA1haZ8O-TZwHH z7_FdWMp(`ao0mQP2h)@9LWMAnHC~2%GICq`n$N`h%gY;^PLZ~{ku=>V)oq3k{L(;?+>b)c z=lKdwjs}y{8V;#ytMQkA7PGr$yi|;gD*{L(k?F=LP^?o|6u!7NM{UP%bXzTFM2l07 z6|$dlt1KhSl1FU%bJ*wWSgB*!4&%HGjztO-`dK!beVFs4siCEXJRvFqhtp}t{lAqN zl2H_{t_fZ|>y!MkLWOBFl+wuWCg~WvdzveYsbz`?Wqt8N2#s(C(UM60NuffZ!346% ziyV=*##iHSq2rpDsm9P<-^aWY9J>nz#(6!xxfCc;C3INK-?@l^i7u69cggqQ4`4g} zPsm{rN@s5hZ)FxjP!j9rT!0j2Q zn^l@^3fg_BvP#UYfyM#!6ev;HJBYGWx6^NR84+bRswEK-fXq)BKEv9zLks~Ux(EGe zP^1its9cLlY}KO@3yYZGJnhEp^ZdJ4GSKWq+SQaTBLrz3xb)kT{P9AC0ykq#L~-EC z@wR)fZ_~9Eyu@7mJAg>wIOF+Hp-c(D1z9nlE&%7YMOkYX3wN)`iy4VoBEp9yQzL+& z_E4t)d*u4ip;17^7n&9E0vDi(S##Y*z9(VnG1*A3on&6e%!Vo9!1&heYa&n>d-~gZ5CE zc$nO*#R$lO&|3?x^PVc%c-WQCBsr467qTo+=&a>Nb!;9^YEi z^(EuOJU5C5ikef3J>o%sw^$oe>J~Qkj%CyCt`ZY$>~S9UK4d+? z&)EHWuTE)qa!M{@&KlY{?l)mh^kzT1JbGie=7kF5{iO)UEM%7NlYd7iENwo=|JlPZ BQndg8 literal 0 HcmV?d00001 diff --git a/tests/does-Image-Magick-works-under-valgrind/runtest.sh b/tests/does-Image-Magick-works-under-valgrind/runtest.sh new file mode 100755 index 0000000..be62adf --- /dev/null +++ b/tests/does-Image-Magick-works-under-valgrind/runtest.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind +# Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2 or later. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# The image munich.jpg used in this test is from: +# https://en.wikipedia.org/wiki/File:Frauenkirche_and_Neues_Rathaus_Munich_March_2013.JPG. +# munich.jpg file is distributed under the Creative Commons +# Attribution-Share Alike 3.0 Unported license +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +VALGRIND="${VALGRIND:-$(which valgrind)}" +PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" +REQUIRES="${REQUIRES:-ImageMagick}" + +Picture="munich.jpg" +Formats=(jpg gif) +Options=(-flop + -flip + -resize\ 160x100 + -resize\ 50\\\% + -sharpen\ 5x5 + -equalize + -motion-blur\ 20x5 + -paint\ 3x3 + -radial-blur\ 5 + -posterize\ 10 + ) + + +rlJournalStart + rlPhaseStartSetup + rlLogInfo "VALGRIND=$VALGRIND" + rlLogInfo "PACKAGES=$PACKAGES" + rlLogInfo "REQUIRES=$REQUIRES" + rlLogInfo "COLLECTIONS=$COLLECTIONS" + rlLogInfo "$(type valgrind)" + + rlAssertRpm --all + + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + rlRun "cp $Picture $TmpDir" 0 "Copying $Picture to $TmpDir" + rlRun "pushd $TmpDir" + rlRun "mkdir out" 0 "Creating out directory" + rlPhaseEnd + + for f in "${Formats[@]}"; do + for o in "${Options[@]}"; do + rlPhaseStartTest "convert $o $Picture out/0${Picture%jpg}$f" + rlRun "convert $o $Picture out/0${Picture%jpg}$f" 0 "Converting $Picture to out/0${Picture%jpg}$f with ($o)" + rlLog "convert $o $Picture out/0${Picture%jpg}$f" + rlRun "valgrind convert $o $Picture out/1${Picture%jpg}$f" 0 "Converting $Picture to out/1${Picture%jpg}$f with ($o) [valgrind]" + rlLog "valgrind convert $o $Picture out/1${Picture%jpg}$f" + [[ $(arch) = i686 ]] || rlRun "echo \`md5sum out/[01]${Picture%jpg}$f\` | while read with nic without nic; do test \"\$with\" = \"\$without\";done" 0 "Output is the same with/without valgrind" + md5sum out/[01]${Picture%jpg}$f + rlPhaseEnd + rlPhaseStartCleanup "Cleaning for $f with $o" + rlRun "mkdir -p \"out-$o\"" + rlRun "cp -r out/* \"out-$o/\"" + rlRun "rm -f out/*" 0 "Removing the old pictures" + rlPhaseEnd + done + done + + rlPhaseStartCleanup + rlRun "rm -rf out" + rlRun "tar czf out.tgz $TmpDir/*" + rlFileSubmit "out.tgz" + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From 24ec9a0480f071a7a3b3f0f5013029822f796386 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Jun 2021 10:38:10 +0200 Subject: [PATCH 047/196] BuildRequires and Recommends elfutils-debuginfod-client --- valgrind.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index ecaad4a..b03b7fa 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -143,10 +143,12 @@ BuildRequires: docbook-dtds # configure might use which BuildRequires: which -# For testing the debuginfod +# For testing debuginfod-find %if 0%{?fedora} > 29 || 0%{?rhel} > 7 -BuildRequires: elfutils-debuginfod +BuildRequires: elfutils-debuginfod-client %endif +# For using debuginfod at runtime +Recommends: elfutils-debuginfod-client %{?scl:Requires:%scl_runtime} From f0e9e494f7b940e2c8383dde7f6fd6b85a4164e1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Jun 2021 11:24:45 +0200 Subject: [PATCH 048/196] Add valgrind-3.17.0-debuginfod.patch --- valgrind-3.17.0-debuginfod.patch | 30 ++++++++++++++++++++++++++++++ valgrind.spec | 7 ++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.17.0-debuginfod.patch diff --git a/valgrind-3.17.0-debuginfod.patch b/valgrind-3.17.0-debuginfod.patch new file mode 100644 index 0000000..5109a4b --- /dev/null +++ b/valgrind-3.17.0-debuginfod.patch @@ -0,0 +1,30 @@ +commit 93104368952c37268da724231487058ea3eaf1dc +Author: Tom Hughes +Date: Thu May 20 17:16:06 2021 +0100 + + Don't look for separate debuginfo if the image has a .debug_info section + + Fixes BZ#435908 + +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index b0f062ddc..e424e3e7e 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -2879,13 +2879,15 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + /* Look for a build-id */ + HChar* buildid = find_buildid(mimg, False, False); + +- /* Look for a debug image that matches either the build-id or ++ /* If we don't have a .debug_info section in the main image then ++ look for a debug image that matches either the build-id or + the debuglink-CRC32 in the main image. If the main image + doesn't contain either of those then this won't even bother + to try looking. This looks in all known places, including + the --extra-debuginfo-path if specified and on the + --debuginfo-server if specified. */ +- if (buildid != NULL || debuglink_escn.img != NULL) { ++ if (debug_info_escn.img == NULL && ++ (buildid != NULL || debuglink_escn.img != NULL)) { + /* Do have a debuglink section? */ + if (debuglink_escn.img != NULL) { + UInt crc_offset diff --git a/valgrind.spec b/valgrind.spec index b03b7fa..a351b65 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -110,6 +110,9 @@ Patch7: valgrind-3.17.0-ppc64-isa-3.1-tests.patch # s390x: Add missing UNOP insns to s390_insn_as_string Patch8: valgrind-3.17.0-s390_insn_as_string.patch +# KDE#435908 Don't look for separate debuginfo if image already has .debug_info +Patch9: valgrind-3.17.0-debuginfod.patch + BuildRequires: make BuildRequires: glibc-devel @@ -255,6 +258,7 @@ Valgrind User Manual for details. %patch7 -p1 %patch8 -p1 +%patch9 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -480,8 +484,9 @@ fi %endif %changelog -* Tue May 4 2021 Mark Wielaard +* Thu Jun 3 2021 Mark Wielaard - Add valgrind-3.17.0-s390_insn_as_string.patch +- Add valgrind-3.17.0-debuginfod.patch * Tue May 4 2021 Mark Wielaard - 3.17.0-3 - Add valgrind-3.17.0-ppc64-isa-3.1{,tests}.patch From 4dc277807ebb32975cf9c16f21a65296eb3e1d8b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Jun 2021 11:34:03 +0200 Subject: [PATCH 049/196] Add valgrind-3.17.0-clone-parent-res.patch --- valgrind-3.17.0-clone-parent-res.patch | 21 +++++++++++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 valgrind-3.17.0-clone-parent-res.patch diff --git a/valgrind-3.17.0-clone-parent-res.patch b/valgrind-3.17.0-clone-parent-res.patch new file mode 100644 index 0000000..8d03cea --- /dev/null +++ b/valgrind-3.17.0-clone-parent-res.patch @@ -0,0 +1,21 @@ +commit e08a82991a9b9dc87c13f2b89273f25f97d14baf +Author: Tom Hughes +Date: Tue Apr 6 22:44:36 2021 +0100 + + Only process clone results in the parent thread + + Fixes BZ#423963 + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 5ae4e6613..c59d8ee26 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -940,7 +940,7 @@ PRE(sys_clone) + ("Valgrind does not support general clone()."); + } + +- if (SUCCESS) { ++ if (SUCCESS && RES != 0) { + if (ARG_FLAGS & (VKI_CLONE_PARENT_SETTID | VKI_CLONE_PIDFD)) + POST_MEM_WRITE(ARG3, sizeof(Int)); + if (ARG_FLAGS & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) diff --git a/valgrind.spec b/valgrind.spec index a351b65..57ebbb4 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -113,6 +113,9 @@ Patch8: valgrind-3.17.0-s390_insn_as_string.patch # KDE#435908 Don't look for separate debuginfo if image already has .debug_info Patch9: valgrind-3.17.0-debuginfod.patch +# KDE#423963 Only process clone results in the parent thread +Patch10: valgrind-3.17.0-clone-parent-res.patch + BuildRequires: make BuildRequires: glibc-devel @@ -259,6 +262,7 @@ Valgrind User Manual for details. %patch8 -p1 %patch9 -p1 +%patch10 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -487,6 +491,7 @@ fi * Thu Jun 3 2021 Mark Wielaard - Add valgrind-3.17.0-s390_insn_as_string.patch - Add valgrind-3.17.0-debuginfod.patch +- Add valgrind-3.17.0-clone-parent-res.patch * Tue May 4 2021 Mark Wielaard - 3.17.0-3 - Add valgrind-3.17.0-ppc64-isa-3.1{,tests}.patch From 5a023ad9be9f4572a9d9a471e3b4c172907ea03a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Jun 2021 12:05:18 +0200 Subject: [PATCH 050/196] 3.17.0-4 --- valgrind.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 57ebbb4..df311de 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -488,7 +488,7 @@ fi %endif %changelog -* Thu Jun 3 2021 Mark Wielaard +* Thu Jun 3 2021 Mark Wielaard - 3.17.0-4 - Add valgrind-3.17.0-s390_insn_as_string.patch - Add valgrind-3.17.0-debuginfod.patch - Add valgrind-3.17.0-clone-parent-res.patch From 75fe92cbdd939c57d180e91b3cd68455cba45d32 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 3 Jun 2021 14:58:26 +0200 Subject: [PATCH 051/196] 3.17.0-5 - z15 support Add valgrind-3.17.0-s390-prep.patch Add valgrind-3.17.0-s390-z15.patch Add valgrind-3.17.0-s390-z13-vec-fix.patch --- valgrind-3.17.0-s390-prep.patch | 2283 ++++++++++++++++++++++ valgrind-3.17.0-s390-z13-vec-fix.patch | 46 + valgrind-3.17.0-s390-z15.patch | 2413 ++++++++++++++++++++++++ valgrind.spec | 45 +- 4 files changed, 4786 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.17.0-s390-prep.patch create mode 100644 valgrind-3.17.0-s390-z13-vec-fix.patch create mode 100644 valgrind-3.17.0-s390-z15.patch diff --git a/valgrind-3.17.0-s390-prep.patch b/valgrind-3.17.0-s390-prep.patch new file mode 100644 index 0000000..8f2dbb1 --- /dev/null +++ b/valgrind-3.17.0-s390-prep.patch @@ -0,0 +1,2283 @@ +commit d74a637206ef5532ccd2ccb2e31ee2762f184e60 +Author: Andreas Arnez +Date: Wed Apr 28 18:52:30 2021 +0200 + + Bug 433863 - s390x: Remove memcheck test cases for cs, cds, and csg + + The fix for bug 429864 - "s390x: C++ atomic test_and_set yields + false-positive memcheck diagnostics" changes the memcheck behavior at + various compare-and-swap instructions. The comparison between the old and + expected value now always yields a defined result, even if the input + values are (partially) undefined. However, some existing test cases + explicitly verify that memcheck complains about the use of uninitialised + values here. These test cases are no longer valid. Remove them. + +diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am +index 67ae8c293..e4e69eb38 100644 +--- a/memcheck/tests/s390x/Makefile.am ++++ b/memcheck/tests/s390x/Makefile.am +@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am + + dist_noinst_SCRIPTS = filter_stderr + +-INSN_TESTS = cs csg cds cdsg cu21 cu42 ltgjhe ++INSN_TESTS = cdsg cu21 cu42 ltgjhe + + check_PROGRAMS = $(INSN_TESTS) + +@@ -14,7 +14,3 @@ EXTRA_DIST = \ + AM_CFLAGS += @FLAG_M64@ + AM_CXXFLAGS += @FLAG_M64@ + AM_CCASFLAGS += @FLAG_M64@ +- +-cs_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ +-csg_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ +-cds_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ +diff --git a/memcheck/tests/s390x/cds.c b/memcheck/tests/s390x/cds.c +deleted file mode 100644 +index ec5c533e0..000000000 +--- a/memcheck/tests/s390x/cds.c ++++ /dev/null +@@ -1,82 +0,0 @@ +-#include +-#include +- +-typedef struct { +- uint64_t high; +- uint64_t low; +-} quad_word; +- +-void +-test(quad_word op1_init, uint64_t op2_init, quad_word op3_init) +-{ +- int cc; // unused +- quad_word op1 = op1_init; +- uint64_t op2 = op2_init; +- quad_word op3 = op3_init; +- +- __asm__ volatile ( +- "lmg %%r0,%%r1,%1\n\t" +- "lmg %%r2,%%r3,%3\n\t" +- "cds %%r0,%%r2,%2\n\t" // cds 1st,3rd,2nd +- "stmg %%r0,%%r1,%1\n" // store r0,r1 to op1 +- "stmg %%r2,%%r3,%3\n" // store r2,r3 to op3 +- : "=d" (cc), "+QS" (op1), "+QS" (op2), "+QS" (op3) +- : +- : "r0", "r1", "r2", "r3", "cc"); +- +-} +- +-// Return a quad-word that only bits low[32:63] are undefined +-quad_word +-make_undefined(void) +-{ +- quad_word val; +- +- val.high = 0; +- val.low |= 0xFFFFFFFF00000000ull; +- +- return val; +-} +- +-void op1_undefined(void) +-{ +- quad_word op1, op3; +- uint64_t op2; +- +- // op1 undefined +- op1 = make_undefined(); +- op2 = 42; +- op3.high = op3.low = 0xdeadbeefdeadbabeull; +- test(op1, op2, op3); // complaint +-} +- +-void op2_undefined(void) +-{ +- quad_word op1, op3; +- uint64_t op2; +- +- op1.high = op1.low = 42; +- // op2 undefined +- op3.high = op3.low = 0xdeadbeefdeadbabeull; +- test(op1, op2, op3); // complaint +-} +- +-void op3_undefined(void) +-{ +- quad_word op1, op3; +- uint64_t op2; +- +- op1.high = op1.low = 42; +- op2 = 100; +- op3 = make_undefined(); +- test(op1, op2, op3); // no complaint; op3 is just copied around +-} +- +-int main () +-{ +- op1_undefined(); +- op2_undefined(); +- op3_undefined(); +- +- return 0; +-} +diff --git a/memcheck/tests/s390x/cds.stderr.exp b/memcheck/tests/s390x/cds.stderr.exp +deleted file mode 100644 +index e72de94c8..000000000 +--- a/memcheck/tests/s390x/cds.stderr.exp ++++ /dev/null +@@ -1,10 +0,0 @@ +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (cds.c:17) +- by 0x........: op1_undefined (cds.c:50) +- by 0x........: main (cds.c:77) +- +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (cds.c:17) +- by 0x........: op2_undefined (cds.c:61) +- by 0x........: main (cds.c:78) +- +diff --git a/memcheck/tests/s390x/cds.stdout.exp b/memcheck/tests/s390x/cds.stdout.exp +deleted file mode 100644 +index e69de29bb..000000000 +diff --git a/memcheck/tests/s390x/cds.vgtest b/memcheck/tests/s390x/cds.vgtest +deleted file mode 100644 +index 5195887e2..000000000 +--- a/memcheck/tests/s390x/cds.vgtest ++++ /dev/null +@@ -1,2 +0,0 @@ +-prog: cds +-vgopts: -q +diff --git a/memcheck/tests/s390x/cs.c b/memcheck/tests/s390x/cs.c +deleted file mode 100644 +index 9a298cef9..000000000 +--- a/memcheck/tests/s390x/cs.c ++++ /dev/null +@@ -1,32 +0,0 @@ +-#include +-#include +-#include +- +-void +-test(int32_t op1_init, int32_t op2_init, int32_t op3_init) +-{ +- register int32_t op1 asm("8") = op1_init; +- register int32_t op3 asm("9") = op3_init; +- +- int32_t op2 = op2_init; +- int cc = 1; +- +- __asm__ volatile ( +- "cs 8,9,%1\n\t" +- "ipm %0\n\t" +- "srl %0,28\n\t" +- : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3) +- : +- : "cc"); +-} +- +-int main () +-{ +- int op1, op2, op3; +- +- test(op1, 0x10000000, 0x12345678); // complaint +- test(0x10000000, op2, 0x12345678); // complaint +- test(0x10000000, 0x01000000, op3); // no complaint +- +- return 0; +-} +diff --git a/memcheck/tests/s390x/cs.stderr.exp b/memcheck/tests/s390x/cs.stderr.exp +deleted file mode 100644 +index e45dc99cd..000000000 +--- a/memcheck/tests/s390x/cs.stderr.exp ++++ /dev/null +@@ -1,8 +0,0 @@ +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (cs.c:14) +- by 0x........: main (cs.c:27) +- +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (cs.c:14) +- by 0x........: main (cs.c:28) +- +diff --git a/memcheck/tests/s390x/cs.stdout.exp b/memcheck/tests/s390x/cs.stdout.exp +deleted file mode 100644 +index e69de29bb..000000000 +diff --git a/memcheck/tests/s390x/cs.vgtest b/memcheck/tests/s390x/cs.vgtest +deleted file mode 100644 +index 323cce80c..000000000 +--- a/memcheck/tests/s390x/cs.vgtest ++++ /dev/null +@@ -1,2 +0,0 @@ +-prog: cs +-vgopts: -q +diff --git a/memcheck/tests/s390x/csg.c b/memcheck/tests/s390x/csg.c +deleted file mode 100644 +index 7f9d8c88e..000000000 +--- a/memcheck/tests/s390x/csg.c ++++ /dev/null +@@ -1,32 +0,0 @@ +-#include +-#include +-#include +- +-void +-test(int64_t op1_init, int64_t op2_init, int64_t op3_init) +-{ +- register int64_t op1 asm("8") = op1_init; +- register int64_t op3 asm("9") = op3_init; +- +- int64_t op2 = op2_init; +- int cc = 1; +- +- __asm__ volatile ( +- "csg 8,9,%1\n\t" +- "ipm %0\n\t" +- "srl %0,28\n\t" +- : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3) +- : +- : "cc"); +-} +- +-int main () +-{ +- int64_t op1, op2, op3; +- +- test(op1, 0x1000000000000000ull, 0x1234567887654321ull); // complaint +- test(0x1000000000000000ull, op2, 0x1234567887654321ull); // complaint +- test(0x1000000000000000ull, 0x1000000000000000ull, op3); // no complaint +- +- return 0; +-} +diff --git a/memcheck/tests/s390x/csg.stderr.exp b/memcheck/tests/s390x/csg.stderr.exp +deleted file mode 100644 +index fda2021ce..000000000 +--- a/memcheck/tests/s390x/csg.stderr.exp ++++ /dev/null +@@ -1,8 +0,0 @@ +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (csg.c:14) +- by 0x........: main (csg.c:27) +- +-Conditional jump or move depends on uninitialised value(s) +- at 0x........: test (csg.c:14) +- by 0x........: main (csg.c:28) +- +diff --git a/memcheck/tests/s390x/csg.stdout.exp b/memcheck/tests/s390x/csg.stdout.exp +deleted file mode 100644 +index e69de29bb..000000000 +diff --git a/memcheck/tests/s390x/csg.vgtest b/memcheck/tests/s390x/csg.vgtest +deleted file mode 100644 +index 6de75c1d6..000000000 +--- a/memcheck/tests/s390x/csg.vgtest ++++ /dev/null +@@ -1,2 +0,0 @@ +-prog: csg +-vgopts: -q + +commit 18ddcc47c951427efd3b790ba2481159b9bd1598 +Author: Andreas Arnez +Date: Wed Apr 7 16:48:29 2021 +0200 + + s390x: Support "expensive" comparisons Iop_ExpCmpNE32/64 + + Add support for Iop_ExpCmpNE32 and Iop_ExpCmpNE64 in the s390x instruction + selector. Handle them exactly like the "inexpensive" variants Iop_CmpNE32 + and Iop_CmpNE64. + +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 2000ec224..5f79280c0 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -3611,6 +3611,8 @@ s390_isel_cc(ISelEnv *env, IRExpr *cond) + + case Iop_CmpNE32: + case Iop_CmpNE64: ++ case Iop_ExpCmpNE32: ++ case Iop_ExpCmpNE64: + case Iop_CasCmpNE32: + case Iop_CasCmpNE64: + result = S390_CC_NE; + +commit 5db3f929c43bf46f4707178706cfe90f43acdd19 +Author: Andreas Arnez +Date: Wed Apr 7 12:30:20 2021 +0200 + + s390x: Add convenience function mkV128() + + Provide mkV128() as a short-hand notation for creating a vector constant from + a bit pattern, similar to other such functions like mkU64(). + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 339377007..7d54cb551 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -376,6 +376,13 @@ mkU64(ULong value) + return IRExpr_Const(IRConst_U64(value)); + } + ++/* Create an expression node for a 128-bit vector constant */ ++static __inline__ IRExpr * ++mkV128(UShort value) ++{ ++ return IRExpr_Const(IRConst_V128(value)); ++} ++ + /* Create an expression node for a 32-bit floating point constant + whose value is given by a bit pattern. */ + static __inline__ IRExpr * +@@ -16249,7 +16256,7 @@ s390_irgen_VLGV(UChar r1, IRTemp op2addr, UChar v3, UChar m4) + static const HChar * + s390_irgen_VGBM(UChar v1, UShort i2, UChar m3 __attribute__((unused))) + { +- put_vr_qw(v1, IRExpr_Const(IRConst_V128(i2))); ++ put_vr_qw(v1, mkV128(i2)); + + return "vgbm"; + } +@@ -18160,11 +18167,11 @@ s390_irgen_VSUM(UChar v1, UChar v2, UChar v3, UChar m4) + switch(type) { + case Ity_I8: + sum = unop(Iop_PwAddL16Ux8, unop(Iop_PwAddL8Ux16, get_vr_qw(v2))); +- mask = IRExpr_Const(IRConst_V128(0b0001000100010001)); ++ mask = mkV128(0b0001000100010001); + break; + case Ity_I16: + sum = unop(Iop_PwAddL16Ux8, get_vr_qw(v2)); +- mask = IRExpr_Const(IRConst_V128(0b0011001100110011)); ++ mask = mkV128(0b0011001100110011); + break; + default: + vpanic("s390_irgen_VSUM: invalid type "); +@@ -18185,11 +18192,11 @@ s390_irgen_VSUMG(UChar v1, UChar v2, UChar v3, UChar m4) + switch(type) { + case Ity_I16: + sum = unop(Iop_PwAddL32Ux4, unop(Iop_PwAddL16Ux8, get_vr_qw(v2))); +- mask = IRExpr_Const(IRConst_V128(0b0000001100000011)); ++ mask = mkV128(0b0000001100000011); + break; + case Ity_I32: + sum = unop(Iop_PwAddL32Ux4, get_vr_qw(v2)); +- mask = IRExpr_Const(IRConst_V128(0b0000111100001111)); ++ mask = mkV128(0b0000111100001111); + break; + default: + vpanic("s390_irgen_VSUMG: invalid type "); +@@ -18210,11 +18217,11 @@ s390_irgen_VSUMQ(UChar v1, UChar v2, UChar v3, UChar m4) + switch(type) { + case Ity_I32: + sum = unop(Iop_PwAddL64Ux2, unop(Iop_PwAddL32Ux4, get_vr_qw(v2))); +- mask = IRExpr_Const(IRConst_V128(0b0000000000001111)); ++ mask = mkV128(0b0000000000001111); + break; + case Ity_I64: + sum = unop(Iop_PwAddL64Ux2, get_vr_qw(v2)); +- mask = IRExpr_Const(IRConst_V128(0b0000000011111111)); ++ mask = mkV128(0b0000000011111111); + break; + default: + vpanic("s390_irgen_VSUMQ: invalid type "); +@@ -18943,8 +18950,8 @@ s390_irgen_VFCx(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6, + assign(cond, binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp))); + } + put_vr_qw(v1, mkite(mkexpr(cond), +- IRExpr_Const(IRConst_V128(0xffff)), +- IRExpr_Const(IRConst_V128(0)))); ++ mkV128(0xffff), ++ mkV128(0))); + if (s390_vr_is_cs_set(m6)) { + IRTemp cc = newTemp(Ity_I64); + assign(cc, mkite(mkexpr(cond), mkU64(0), mkU64(3))); + +commit e78bd78d3043729033b426218ab8c6dae9c51e96 +Author: Andreas Arnez +Date: Thu Mar 18 18:01:10 2021 +0100 + + Bug 434296 - s390x: Rework IR conversion of VSTRC, VFAE, and VFEE + + The z/Architecture instructions "vector string range compare" (VSTRC), + "vector find any element equal" (VFAE), and "vector find element + equal" (VFEE) are each implemented with a dirty helper that executes the + instruction. Unfortunately this approach leads to memcheck false + positives, because these instructions may yield a defined result even if + parts of the input vectors are undefined. There are multiple ways this + can happen: Wherever the flags in the fourth operand to VSTRC indicate + "match always" or "match never", the corresponding elements in the third + operand don't affect the result. The same is true for the elements + following the first zero-element in the second operand if the ZS flag is + set, or for the elements following the first matching element, if any. + + Re-implement the instructions without dirty helpers and transform into + lengthy IR instead. + +diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h +index 905429015..49b6cd5dd 100644 +--- a/VEX/priv/guest_s390_defs.h ++++ b/VEX/priv/guest_s390_defs.h +@@ -265,11 +265,8 @@ typedef enum { + S390_VEC_OP_INVALID = 0, + S390_VEC_OP_VPKS, + S390_VEC_OP_VPKLS, +- S390_VEC_OP_VFAE, +- S390_VEC_OP_VFEE, + S390_VEC_OP_VFENE, + S390_VEC_OP_VISTR, +- S390_VEC_OP_VSTRC, + S390_VEC_OP_VCEQ, + S390_VEC_OP_VTM, + S390_VEC_OP_VGFM, +diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c +index b71b621ae..63d2e8ce5 100644 +--- a/VEX/priv/guest_s390_helpers.c ++++ b/VEX/priv/guest_s390_helpers.c +@@ -2538,11 +2538,8 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + {0x00, 0x00}, /* invalid */ + [S390_VEC_OP_VPKS] = {0xe7, 0x97}, + [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, +- [S390_VEC_OP_VFAE] = {0xe7, 0x82}, +- [S390_VEC_OP_VFEE] = {0xe7, 0x80}, + [S390_VEC_OP_VFENE] = {0xe7, 0x81}, + [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, +- [S390_VEC_OP_VSTRC] = {0xe7, 0x8a}, + [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, + [S390_VEC_OP_VTM] = {0xe7, 0xd8}, + [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, +@@ -2630,8 +2627,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + + case S390_VEC_OP_VPKS: + case S390_VEC_OP_VPKLS: +- case S390_VEC_OP_VFAE: +- case S390_VEC_OP_VFEE: + case S390_VEC_OP_VFENE: + case S390_VEC_OP_VCEQ: + case S390_VEC_OP_VGFM: +@@ -2645,7 +2640,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + the_insn.VRR.m5 = d->m5; + break; + +- case S390_VEC_OP_VSTRC: + case S390_VEC_OP_VGFMA: + case S390_VEC_OP_VMAH: + case S390_VEC_OP_VMALH: +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 7d54cb551..26a947813 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -17156,90 +17156,205 @@ s390_irgen_PPNO(UChar r1, UChar r2) + return "ppno"; + } + +-static const HChar * +-s390_irgen_VFAE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) +-{ +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); ++enum s390_VStrX { ++ s390_VStrX_VSTRC, ++ s390_VStrX_VFAE, ++ s390_VStrX_VFEE ++}; + +- /* Check for specification exception */ +- vassert(m4 < 3); ++#define S390_VEC_OP3(m, op0, op1, op2) \ ++ (m) == 0 ? op0 : (m) == 1 ? op1 : (m) == 2 ? op2 : Iop_INVALID; + +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFAE; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.m4 = m4; +- details.m5 = m5; +- +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++/* Helper function for transforming VSTRC, VFAE, or VFEE. These instructions ++ share much of the same logic. */ ++static void ++s390_irgen_VStrX(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, ++ UChar m6, enum s390_VStrX which_insn) ++{ ++ IRTemp op2 = newTemp(Ity_V128); ++ IRTemp op3 = newTemp(Ity_V128); ++ IRExpr* tmp; ++ IRExpr* match = NULL; ++ UChar bitwidth = 8 << m5; ++ UChar n_elem = 16 >> m5; ++ IROp sub_op = S390_VEC_OP3(m5, Iop_Sub8x16, Iop_Sub16x8, Iop_Sub32x4); ++ IROp sar_op = S390_VEC_OP3(m5, Iop_SarN8x16, Iop_SarN16x8, Iop_SarN32x4); ++ IROp shl_op = S390_VEC_OP3(m5, Iop_ShlN8x16, Iop_ShlN16x8, Iop_ShlN32x4); ++ IROp dup_op = S390_VEC_OP3(m5, Iop_Dup8x16, Iop_Dup16x8, Iop_Dup32x4); ++ IROp cmpeq_op = S390_VEC_OP3(m5, Iop_CmpEQ8x16, ++ Iop_CmpEQ16x8, Iop_CmpEQ32x4); ++ IROp cmpgt_op = S390_VEC_OP3(m5, Iop_CmpGT8Ux16, ++ Iop_CmpGT16Ux8, Iop_CmpGT32Ux4); ++ IROp getelem_op = S390_VEC_OP3(m5, Iop_GetElem8x16, ++ Iop_GetElem16x8, Iop_GetElem32x4); ++ ++ assign(op2, get_vr_qw(v2)); ++ assign(op3, get_vr_qw(v3)); ++ ++ switch (which_insn) { ++ ++ case s390_VStrX_VSTRC: { ++ IRTemp op4 = newTemp(Ity_V128); ++ assign(op4, get_vr_qw(v4)); ++ ++ /* Mask off insignificant range boundaries from op3, i.e., all those for ++ which the corresponding field in op4 has all or no bits set ("match ++ always" / "match never"). */ ++ IRTemp bounds = newTemp(Ity_V128); ++ tmp = unop(Iop_NotV128, ++ binop(cmpeq_op, mkV128(0), ++ binop(sar_op, ++ binop(sub_op, ++ binop(sar_op, mkexpr(op4), ++ mkU8(bitwidth - 3)), ++ mkV128(-1)), ++ mkU8(1)))); ++ assign(bounds, binop(Iop_AndV128, mkexpr(op3), tmp)); ++ ++ IRTemp flags_eq = newTemp(Ity_V128); ++ IRTemp flags_lt = newTemp(Ity_V128); ++ IRTemp flags_gt = newTemp(Ity_V128); ++ assign(flags_eq, binop(sar_op, mkexpr(op4), mkU8(bitwidth - 1))); ++ assign(flags_lt, binop(sar_op, binop(shl_op, mkexpr(op4), mkU8(1)), ++ mkU8(bitwidth - 1))); ++ assign(flags_gt, binop(sar_op, binop(shl_op, mkexpr(op4), mkU8(2)), ++ mkU8(bitwidth - 1))); ++ ++ for (UChar idx = 0; idx < n_elem; idx += 2) { ++ /* Match according to the even/odd pairs in op3 and op4 at idx */ ++ IRTemp part[2]; ++ ++ for (UChar j = 0; j < 2; j++) { ++ IRTemp a = newTemp(Ity_V128); ++ assign(a, unop(dup_op, ++ binop(getelem_op, mkexpr(bounds), mkU8(idx + j)))); ++ ++ IRExpr* m[] = { ++ binop(cmpeq_op, mkexpr(op2), mkexpr(a)), ++ binop(cmpgt_op, mkexpr(a), mkexpr(op2)), ++ binop(cmpgt_op, mkexpr(op2), mkexpr(a)) ++ }; ++ IRExpr* f[] = { ++ unop(dup_op, binop(getelem_op, mkexpr(flags_eq), mkU8(idx + j))), ++ unop(dup_op, binop(getelem_op, mkexpr(flags_lt), mkU8(idx + j))), ++ unop(dup_op, binop(getelem_op, mkexpr(flags_gt), mkU8(idx + j))) ++ }; ++ part[j] = newTemp(Ity_V128); ++ assign(part[j], binop(Iop_OrV128, ++ binop(Iop_OrV128, ++ binop(Iop_AndV128, f[0], m[0]), ++ binop(Iop_AndV128, f[1], m[1])), ++ binop(Iop_AndV128, f[2], m[2]))); ++ } ++ tmp = binop(Iop_AndV128, mkexpr(part[0]), mkexpr(part[1])); ++ match = idx == 0 ? tmp : binop(Iop_OrV128, match, tmp); ++ } ++ break; ++ } + +- d->nFxState = 3; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = sizeof(V128); +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = sizeof(V128); +- d->fxState[2].fx = Ifx_Write; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); ++ case s390_VStrX_VFAE: ++ for (UChar idx = 0; idx < n_elem; idx++) { ++ IRTemp a = newTemp(Ity_V128); ++ assign(a, binop(cmpeq_op, mkexpr(op2), ++ unop(dup_op, ++ binop(getelem_op, mkexpr(op3), mkU8(idx))))); ++ match = idx == 0 ? mkexpr(a) : binop(Iop_OrV128, match, mkexpr(a)); ++ } ++ break; + +- stmt(IRStmt_Dirty(d)); ++ case s390_VStrX_VFEE: ++ match = binop(cmpeq_op, mkexpr(op2), mkexpr(op3)); ++ break; + +- if (s390_vr_is_cs_set(m5)) { +- s390_cc_set(cc); ++ default: ++ vpanic("s390_irgen_VStrX: unknown insn"); + } + +- return "vfae"; +-} ++ /* Invert first intermediate result if requested */ ++ if (m6 & 8) ++ match = unop(Iop_NotV128, match); + +-static const HChar * +-s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) +-{ +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); ++ IRTemp inter1 = newTemp(Ity_V128); ++ IRTemp inter2 = newTemp(Ity_V128); ++ IRTemp accu = newTemp(Ity_V128); ++ assign(inter1, match); + +- /* Check for specification exception */ +- vassert(m4 < 3); +- vassert((m5 & 0b1100) == 0); ++ /* Determine second intermediate and accumulated result */ ++ if (s390_vr_is_zs_set(m6)) { ++ assign(inter2, binop(cmpeq_op, mkexpr(op2), mkV128(0))); ++ assign(accu, binop(Iop_OrV128, mkexpr(inter1), mkexpr(inter2))); ++ } else { ++ assign(inter2, mkV128(0)); ++ assign(accu, mkexpr(inter1)); ++ } + +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VFEE; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.m4 = m4; +- details.m5 = m5; ++ IRTemp accu0 = newTemp(Ity_I64); ++ IRTemp is_match0 = newTemp(Ity_I1); ++ IRTemp mismatch_bits = newTemp(Ity_I64); + +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++ assign(accu0, unop(Iop_V128HIto64, mkexpr(accu))); ++ assign(is_match0, binop(Iop_ExpCmpNE64, mkexpr(accu0), mkU64(0))); ++ assign(mismatch_bits, unop(Iop_ClzNat64, ++ mkite(mkexpr(is_match0), mkexpr(accu0), ++ unop(Iop_V128to64, mkexpr(accu))))); + +- d->nFxState = 3; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = sizeof(V128); +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = sizeof(V128); +- d->fxState[2].fx = Ifx_Write; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); ++ if (m6 & 4) { ++ put_vr_qw(v1, mkexpr(inter1)); ++ } else { ++ /* Determine byte position of first match */ ++ tmp = binop(Iop_Add64, ++ binop(Iop_Shr64, mkexpr(mismatch_bits), mkU8(3)), ++ mkite(mkexpr(is_match0), mkU64(0), mkU64(8))); ++ put_vr_qw(v1, binop(Iop_64HLtoV128, tmp, mkU64(0))); ++ } + +- stmt(IRStmt_Dirty(d)); ++ if (s390_vr_is_cs_set(m6)) { ++ /* Set condition code depending on... ++ zero found ++ n y ++ +------ ++ match n | 3 0 ++ found y | 1 2 */ + +- if (s390_vr_is_cs_set(m5)) { ++ IRTemp cc = newTemp(Ity_I64); ++ ++ tmp = binop(Iop_Shr64, ++ mkite(mkexpr(is_match0), ++ unop(Iop_V128HIto64, mkexpr(inter1)), ++ unop(Iop_V128to64, mkexpr(inter1))), ++ unop(Iop_64to8, ++ binop(Iop_Sub64, mkU64(63), mkexpr(mismatch_bits)))); ++ tmp = binop(Iop_Shl64, tmp, mkU8(1)); ++ if (s390_vr_is_zs_set(m6)) { ++ tmp = binop(Iop_Xor64, tmp, ++ mkite(binop(Iop_ExpCmpNE64, mkU64(0), ++ binop(Iop_Or64, ++ unop(Iop_V128HIto64, mkexpr(inter2)), ++ unop(Iop_V128to64, mkexpr(inter2)))), ++ mkU64(0), ++ mkU64(3))); ++ } else { ++ tmp = binop(Iop_Xor64, tmp, mkU64(3)); ++ } ++ assign(cc, tmp); + s390_cc_set(cc); + } ++ dis_res->hint = Dis_HintVerbose; ++} + ++static const HChar * ++s390_irgen_VFAE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) ++{ ++ s390_insn_assert("vfae", m4 <= 2); ++ s390_irgen_VStrX(v1, v2, v3, 255, m4, m5, s390_VStrX_VFAE); ++ return "vfae"; ++} ++ ++static const HChar * ++s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) ++{ ++ s390_insn_assert("vfee", m4 < 3 && m5 == (m5 & 3)); ++ s390_irgen_VStrX(v1, v2, v3, 255, m4, m5, s390_VStrX_VFEE); + return "vfee"; + } + +@@ -17406,47 +17521,8 @@ s390_irgen_VISTR(UChar v1, UChar v2, UChar m3, UChar m5) + static const HChar * + s390_irgen_VSTRC(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) + { +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); +- +- /* Check for specification exception */ +- vassert(m5 < 3); +- +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VSTRC; +- details.v1 = v1; +- details.v2 = v2; +- details.v3 = v3; +- details.v4 = v4; +- details.m4 = m5; +- details.m5 = m6; +- +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); +- +- d->nFxState = 4; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = sizeof(V128); +- d->fxState[1].fx = Ifx_Read; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); +- d->fxState[1].size = sizeof(V128); +- d->fxState[2].fx = Ifx_Read; +- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v4 * sizeof(V128); +- d->fxState[2].size = sizeof(V128); +- d->fxState[3].fx = Ifx_Write; +- d->fxState[3].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[3].size = sizeof(V128); +- +- stmt(IRStmt_Dirty(d)); +- +- if (s390_vr_is_cs_set(m6)) { +- s390_cc_set(cc); +- } +- ++ s390_insn_assert("vstrc", m5 <= 2); ++ s390_irgen_VStrX(v1, v2, v3, v4, m5, m6, s390_VStrX_VSTRC); + return "vstrc"; + } + + +commit 4f17a067c4f8245c05611d6e8aa36e8841bab376 +Author: Andreas Arnez +Date: Tue Mar 2 14:12:29 2021 +0100 + + Bug 434296 - s390x: Rework IR conversion of VFENE + + So far the z/Architecture instruction "vector find element not + equal" (VFENE) is transformed to a loop. This can cause spurious + "conditional jump or move depends on uninitialised value(s)" messages by + memcheck. Re-implement without a loop. + +diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h +index 49b6cd5dd..caec3108e 100644 +--- a/VEX/priv/guest_s390_defs.h ++++ b/VEX/priv/guest_s390_defs.h +@@ -265,7 +265,6 @@ typedef enum { + S390_VEC_OP_INVALID = 0, + S390_VEC_OP_VPKS, + S390_VEC_OP_VPKLS, +- S390_VEC_OP_VFENE, + S390_VEC_OP_VISTR, + S390_VEC_OP_VCEQ, + S390_VEC_OP_VTM, +diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c +index 63d2e8ce5..2188ce5c1 100644 +--- a/VEX/priv/guest_s390_helpers.c ++++ b/VEX/priv/guest_s390_helpers.c +@@ -2538,7 +2538,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + {0x00, 0x00}, /* invalid */ + [S390_VEC_OP_VPKS] = {0xe7, 0x97}, + [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, +- [S390_VEC_OP_VFENE] = {0xe7, 0x81}, + [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, + [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, + [S390_VEC_OP_VTM] = {0xe7, 0xd8}, +@@ -2627,7 +2626,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + + case S390_VEC_OP_VPKS: + case S390_VEC_OP_VPKLS: +- case S390_VEC_OP_VFENE: + case S390_VEC_OP_VCEQ: + case S390_VEC_OP_VGFM: + case S390_VEC_OP_VCH: +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 26a947813..c8dc3ec18 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -17361,120 +17361,86 @@ s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + static const HChar * + s390_irgen_VFENE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + { +- const Bool negateComparison = True; +- const IRType type = s390_vr_get_type(m4); ++ s390_insn_assert("vfene", m4 < 3 && m5 == (m5 & 3)); + +- /* Check for specification exception */ +- vassert(m4 < 3); +- vassert((m5 & 0b1100) == 0); +- +- static const IROp elementGetters[] = { +- Iop_GetElem8x16, Iop_GetElem16x8, Iop_GetElem32x4 ++ static const IROp compare_op[3] = { ++ Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4 + }; +- IROp getter = elementGetters[m4]; +- +- static const IROp elementComparators[] = { +- Iop_CmpEQ8, Iop_CmpEQ16, Iop_CmpEQ32 ++ static const IROp abs_op[3] = { ++ Iop_Abs8x16, Iop_Abs16x8, Iop_Abs32x4 + }; +- IROp comparator = elementComparators[m4]; +- +- static const IROp resultConverter[] = {Iop_64to8, Iop_64to16, Iop_64to32}; +- IROp converter = resultConverter[m4]; +- +- IRTemp isZeroElem; +- +- IRTemp counter = newTemp(Ity_I64); +- assign(counter, get_counter_dw0()); +- +- IRTemp arg1 = newTemp(type); +- assign(arg1, binop(getter, get_vr_qw(v2), unop(Iop_64to8, mkexpr(counter)))); +- IRTemp arg2 = newTemp(type); +- assign(arg2, binop(getter, get_vr_qw(v3), unop(Iop_64to8, mkexpr(counter)))); ++ IRTemp op2 = newTemp(Ity_V128); ++ IRTemp op3 = newTemp(Ity_V128); ++ IRTemp op2zero = newTemp(Ity_V128); ++ IRTemp diff = newTemp(Ity_V128); ++ IRTemp diff0 = newTemp(Ity_I64); ++ IRTemp neq0 = newTemp(Ity_I1); ++ IRTemp samebits = newTemp(Ity_I64); ++ IRExpr* tmp; + +- IRTemp isGoodPair = newTemp(Ity_I1); +- if(negateComparison) { +- assign(isGoodPair, unop(Iop_Not1, binop(comparator, mkexpr(arg1), +- mkexpr(arg2)))); +- } else { +- assign(isGoodPair, binop(comparator, mkexpr(arg1), mkexpr(arg2))); +- } ++ assign(op2, get_vr_qw(v2)); ++ assign(op3, get_vr_qw(v3)); + +- if(s390_vr_is_zs_set(m5)) { +- isZeroElem = newTemp(Ity_I1); +- assign(isZeroElem, binop(comparator, mkexpr(arg1), +- unop(converter, mkU64(0)))); ++ tmp = mkV128(0); ++ if (s390_vr_is_zs_set(m5)) { ++ tmp = binop(compare_op[m4], mkexpr(op2), tmp); ++ if (s390_vr_is_cs_set(m5) && v3 != v2) { ++ /* Count leading equal bits in the terminating element too */ ++ tmp = unop(abs_op[m4], tmp); ++ } ++ assign(op2zero, tmp); ++ tmp = mkexpr(op2zero); + } +- +- static const UChar invalidIndices[] = {16, 8, 4}; +- const UChar invalidIndex = invalidIndices[m4]; +- IRTemp endOfVectorIsReached = newTemp(Ity_I1); +- assign(endOfVectorIsReached, binop(Iop_CmpEQ64, mkexpr(counter), +- mkU64(invalidIndex))); +- +- put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); +- IRExpr* shouldBreak = binop(Iop_Or32, +- unop(Iop_1Uto32, mkexpr(isGoodPair)), +- unop(Iop_1Uto32, mkexpr(endOfVectorIsReached)) +- ); +- if(s390_vr_is_zs_set(m5)) { +- shouldBreak = binop(Iop_Or32, +- shouldBreak, +- unop(Iop_1Uto32, mkexpr(isZeroElem))); +- } +- iterate_if(binop(Iop_CmpEQ32, shouldBreak, mkU32(0))); +- +- IRExpr* foundIndex = binop(Iop_Sub64, get_counter_dw0(), mkU64(1)); +- if(m4 > 0) { +- /* We should return index of byte but we found index of element in +- general case. +- if byte elem (m4 == 0) then indexOfByte = indexOfElement +- if halfword elem (m4 == 1) then indexOfByte = 2 * indexOfElement +- = indexOfElement << 1 +- if word elem (m4 == 2) then indexOfByte = 4 * indexOfElement +- = indexOfElement << 2 +- */ +- foundIndex = binop(Iop_Shl64, foundIndex, mkU8(m4)); ++ if (v3 != v2) { ++ tmp = binop(Iop_XorV128, mkexpr(op2), mkexpr(op3)); ++ if (s390_vr_is_zs_set(m5)) ++ tmp = binop(Iop_OrV128, tmp, mkexpr(op2zero)); + } + +- IRTemp result = newTemp(Ity_I64); +- assign(result, mkite(mkexpr(endOfVectorIsReached), +- mkU64(16), +- foundIndex)); +- put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(result), mkU64(0))); ++ assign(diff, tmp); ++ assign(diff0, unop(Iop_V128HIto64, mkexpr(diff))); ++ assign(neq0, binop(Iop_ExpCmpNE64, mkexpr(diff0), mkU64(0))); ++ assign(samebits, unop(Iop_ClzNat64, ++ mkite(mkexpr(neq0), mkexpr(diff0), ++ unop(Iop_V128to64, mkexpr(diff))))); + ++ /* Determine the byte size of the initial equal-elements sequence */ ++ tmp = binop(Iop_Shr64, mkexpr(samebits), mkU8(m4 + 3)); ++ if (m4 != 0) ++ tmp = binop(Iop_Shl64, tmp, mkU8(m4)); ++ tmp = binop(Iop_Add64, tmp, mkite(mkexpr(neq0), mkU64(0), mkU64(8))); ++ put_vr_qw(v1, binop(Iop_64HLtoV128, tmp, mkU64(0))); + + if (s390_vr_is_cs_set(m5)) { +- static const IROp to64Converters[] = {Iop_8Uto64, Iop_16Uto64, Iop_32Uto64}; +- IROp to64Converter = to64Converters[m4]; +- +- IRExpr* arg1IsLessThanArg2 = binop(Iop_CmpLT64U, +- unop(to64Converter, mkexpr(arg1)), +- unop(to64Converter, mkexpr(arg2))); +- +- IRExpr* ccexp = mkite(binop(Iop_CmpEQ32, +- unop(Iop_1Uto32, mkexpr(isGoodPair)), +- mkU32(1)), +- mkite(arg1IsLessThanArg2, mkU64(1), mkU64(2)), +- mkU64(3)); +- +- if(s390_vr_is_zs_set(m5)) { +- IRExpr* arg2IsZero = binop(comparator, mkexpr(arg2), +- unop(converter, mkU64(0))); +- IRExpr* bothArgsAreZero = binop(Iop_And32, +- unop(Iop_1Uto32, mkexpr(isZeroElem)), +- unop(Iop_1Uto32, arg2IsZero)); +- ccexp = mkite(binop(Iop_CmpEQ32, bothArgsAreZero, mkU32(1)), +- mkU64(0), +- ccexp); +- } ++ /* Set condition code like follows -- ++ 0: operands equal up to and including zero element ++ 1: op2 < op3 2: op2 > op3 3: op2 = op3 */ + IRTemp cc = newTemp(Ity_I64); +- assign(cc, ccexp); +- ++ if (v3 == v2) { ++ tmp = mkU64(0); ++ } else { ++ IRTemp shift = newTemp(Ity_I8); ++ IRExpr* op2half = mkite(mkexpr(neq0), ++ unop(Iop_V128HIto64, mkexpr(op2)), ++ unop(Iop_V128to64, mkexpr(op2))); ++ IRExpr* op3half = mkite(mkexpr(neq0), ++ unop(Iop_V128HIto64, mkexpr(op3)), ++ unop(Iop_V128to64, mkexpr(op3))); ++ assign(shift, unop(Iop_64to8, ++ binop(Iop_Sub64, mkU64(63), mkexpr(samebits)))); ++ tmp = binop(Iop_Or64, ++ binop(Iop_Shl64, ++ binop(Iop_And64, mkU64(1), ++ binop(Iop_Shr64, op2half, mkexpr(shift))), ++ mkU8(1)), ++ binop(Iop_And64, mkU64(1), ++ binop(Iop_Shr64, op3half, mkexpr(shift)))); ++ } ++ assign(cc, mkite(binop(Iop_CmpEQ64, mkexpr(samebits), mkU64(64)), ++ mkU64(3), tmp)); + s390_cc_set(cc); + } +- +- +- put_counter_dw0(mkU64(0)); ++ dis_res->hint = Dis_HintVerbose; + return "vfene"; + } + + +commit 9bd78ebd8bb5cd4ebb3f081ceba46836cc485551 +Author: Andreas Arnez +Date: Tue Apr 27 20:13:26 2021 +0200 + + Bug 434296 - s390x: Rework IR conversion of VISTR + + The z/Architecture instruction VISTR is currently transformed to a dirty + helper that executes the instruction. This can cause false positives with + memcheck if the input string contains undefined characters after the + string terminator. Implement without a dirty helper and emulate the + instruction instead. + +diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h +index caec3108e..24f3798c1 100644 +--- a/VEX/priv/guest_s390_defs.h ++++ b/VEX/priv/guest_s390_defs.h +@@ -265,7 +265,6 @@ typedef enum { + S390_VEC_OP_INVALID = 0, + S390_VEC_OP_VPKS, + S390_VEC_OP_VPKLS, +- S390_VEC_OP_VISTR, + S390_VEC_OP_VCEQ, + S390_VEC_OP_VTM, + S390_VEC_OP_VGFM, +diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c +index 2188ce5c1..1e04f601a 100644 +--- a/VEX/priv/guest_s390_helpers.c ++++ b/VEX/priv/guest_s390_helpers.c +@@ -2538,7 +2538,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + {0x00, 0x00}, /* invalid */ + [S390_VEC_OP_VPKS] = {0xe7, 0x97}, + [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, +- [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, + [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, + [S390_VEC_OP_VTM] = {0xe7, 0xd8}, + [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, +@@ -2610,14 +2609,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, + the_insn.VRR.op2 = opcodes[d->op][1]; + + switch(d->op) { +- case S390_VEC_OP_VISTR: +- the_insn.VRR.v1 = 1; +- the_insn.VRR.v2 = 2; +- the_insn.VRR.rxb = 0b1100; +- the_insn.VRR.m4 = d->m4; +- the_insn.VRR.m5 = d->m5; +- break; +- + case S390_VEC_OP_VTM: + the_insn.VRR.v1 = 2; + the_insn.VRR.v2 = 3; +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index c8dc3ec18..dfea54259 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -17447,40 +17447,34 @@ s390_irgen_VFENE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) + static const HChar * + s390_irgen_VISTR(UChar v1, UChar v2, UChar m3, UChar m5) + { +- IRDirty* d; +- IRTemp cc = newTemp(Ity_I64); +- +- /* Check for specification exception */ +- vassert(m3 < 3); +- vassert((m5 & 0b1110) == 0); ++ s390_insn_assert("vistr", m3 < 3 && m5 == (m5 & 1)); + +- s390x_vec_op_details_t details = { .serialized = 0ULL }; +- details.op = S390_VEC_OP_VISTR; +- details.v1 = v1; +- details.v2 = v2; +- details.m4 = m3; +- details.m5 = m5; +- +- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", +- &s390x_dirtyhelper_vec_op, +- mkIRExprVec_2(IRExpr_GSPTR(), +- mkU64(details.serialized))); ++ static const IROp compare_op[3] = { ++ Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4 ++ }; ++ IRExpr* t; ++ IRTemp op2 = newTemp(Ity_V128); ++ IRTemp op2term = newTemp(Ity_V128); ++ IRTemp mask = newTemp(Ity_V128); + +- d->nFxState = 2; +- vex_bzero(&d->fxState, sizeof(d->fxState)); +- d->fxState[0].fx = Ifx_Read; +- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); +- d->fxState[0].size = sizeof(V128); +- d->fxState[1].fx = Ifx_Write; +- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); +- d->fxState[1].size = sizeof(V128); ++ assign(op2, get_vr_qw(v2)); ++ assign(op2term, binop(compare_op[m3], mkexpr(op2), mkV128(0))); ++ t = mkexpr(op2term); + +- stmt(IRStmt_Dirty(d)); ++ for (UChar i = m3; i < 4; i++) { ++ IRTemp s = newTemp(Ity_V128); ++ assign(s, binop(Iop_OrV128, t, binop(Iop_ShrV128, t, mkU8(8 << i)))); ++ t = mkexpr(s); ++ } ++ assign(mask, unop(Iop_NotV128, t)); ++ put_vr_qw(v1, binop(Iop_AndV128, mkexpr(op2), mkexpr(mask))); + + if (s390_vr_is_cs_set(m5)) { ++ IRTemp cc = newTemp(Ity_I64); ++ assign(cc, binop(Iop_And64, mkU64(3), unop(Iop_V128to64, mkexpr(mask)))); + s390_cc_set(cc); + } +- ++ dis_res->hint = Dis_HintVerbose; + return "vistr"; + } + + +commit 32312d588b77c5b5b5a0145bb0cc6f795b447790 +Author: Andreas Arnez +Date: Fri Apr 16 12:44:44 2021 +0200 + + Bug 434296 - s390x: Add memcheck test cases for vector string insns + + Bug 434296 addresses memcheck false positives with the vector string + instructions VISTR, VSTRC, VFAE, VFEE, and VFENE. Add test cases that + verify the fix for that bug. Without the fix, memcheck yields many + complains with these tests, most of which are false positives. + +diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am +index e4e69eb38..d183841ef 100644 +--- a/memcheck/tests/s390x/Makefile.am ++++ b/memcheck/tests/s390x/Makefile.am +@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am + + dist_noinst_SCRIPTS = filter_stderr + +-INSN_TESTS = cdsg cu21 cu42 ltgjhe ++INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr + + check_PROGRAMS = $(INSN_TESTS) + +@@ -14,3 +14,7 @@ EXTRA_DIST = \ + AM_CFLAGS += @FLAG_M64@ + AM_CXXFLAGS += @FLAG_M64@ + AM_CCASFLAGS += @FLAG_M64@ ++ ++vstrc_CFLAGS = $(AM_CFLAGS) -march=z13 ++vfae_CFLAGS = $(AM_CFLAGS) -march=z13 ++vistr_CFLAGS = $(AM_CFLAGS) -march=z13 +diff --git a/memcheck/tests/s390x/vfae.c b/memcheck/tests/s390x/vfae.c +new file mode 100644 +index 000000000..68781e7fb +--- /dev/null ++++ b/memcheck/tests/s390x/vfae.c +@@ -0,0 +1,72 @@ ++#include ++#include ++ ++#define VECTOR __attribute__ ((vector_size (16))) ++ ++typedef char VECTOR char_v; ++ ++volatile char tmp; ++static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; ++ ++static char_v to_char_vec(const char *str) ++{ ++ char_v v; ++ char buf[17]; ++ int len = strlen(str); ++ ++ memcpy(buf, str, (len && str[len - 1] == '~') ? len - 1 : len + 1); ++ v = *(char_v *) buf; ++ return v; ++} ++ ++#define GENERATE_TEST(mnem) \ ++static void test_ ## mnem ## _char(const char *str, const char *match, \ ++ int expect_res, int expect_cc) \ ++{ \ ++ int cc; \ ++ char_v v1; \ ++ char_v v2 = to_char_vec(str); \ ++ char_v v3 = to_char_vec(match); \ ++ \ ++ __asm__( \ ++ "cr 0,0\n\t" /* Clear CC */ \ ++ #mnem " %[v1],%[v2],%[v3],0,3\n\t" \ ++ "ipm %[cc]\n\t" \ ++ "srl %[cc],28" \ ++ : [v1] "=v" (v1), \ ++ [cc] "=d" (cc) \ ++ : [v2] "v" (v2), \ ++ [v3] "v" (v3) \ ++ : "cc"); \ ++ \ ++ tmp = hex_digit[v1[7] & 0x1f]; \ ++ if (expect_res >= 0 && v1[7] != expect_res) \ ++ printf("result %u != %d\n", v1[7], expect_res); \ ++ \ ++ tmp = hex_digit[cc & 0xf]; \ ++ if (expect_cc >= 0 && cc != expect_cc) \ ++ printf("CC %d != %d\n", cc, expect_cc); \ ++} ++ ++GENERATE_TEST(vfae) ++ ++GENERATE_TEST(vfee) ++ ++GENERATE_TEST(vfene) ++ ++int main() ++{ ++ test_vfae_char("not found", "................", 9, 0); ++ test_vfae_char("xy", "zzzzzzzzyyyyyyyy", 1, 2); ++ test_vfae_char("incomplete~", "xxxxxxxxxxxxxxxx", -1, -1); ++ ++ test_vfee_char("same char here", "..........here", 10, 2); ++ test_vfee_char("and here too ...", "_________t~", 9, 1); ++ test_vfee_char("equality!~", "========!!~", 8, -1); ++ ++ test_vfene_char("strings equal", "strings equal", 13, 0); ++ test_vfene_char(hex_digit, hex_digit, 16, 3); ++ test_vfene_char("undef~", "undefined", -1, -1); ++ test_vfene_char("active~", "actually ok", 3, 1); ++ return 0; ++} +diff --git a/memcheck/tests/s390x/vfae.stderr.exp b/memcheck/tests/s390x/vfae.stderr.exp +new file mode 100644 +index 000000000..8aad3c87f +--- /dev/null ++++ b/memcheck/tests/s390x/vfae.stderr.exp +@@ -0,0 +1,20 @@ ++Use of uninitialised value of size 8 ++ at 0x........: test_vfae_char (vfae.c:51) ++ by 0x........: main (vfae.c:61) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vfae_char (vfae.c:51) ++ by 0x........: main (vfae.c:61) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vfee_char (vfae.c:53) ++ by 0x........: main (vfae.c:65) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vfene_char (vfae.c:55) ++ by 0x........: main (vfae.c:69) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vfene_char (vfae.c:55) ++ by 0x........: main (vfae.c:69) ++ +diff --git a/memcheck/tests/s390x/vfae.stdout.exp b/memcheck/tests/s390x/vfae.stdout.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/s390x/vfae.vgtest b/memcheck/tests/s390x/vfae.vgtest +new file mode 100644 +index 000000000..ae36c22fe +--- /dev/null ++++ b/memcheck/tests/s390x/vfae.vgtest +@@ -0,0 +1,2 @@ ++prog: vfae ++vgopts: -q +diff --git a/memcheck/tests/s390x/vistr.c b/memcheck/tests/s390x/vistr.c +new file mode 100644 +index 000000000..7ed59b94b +--- /dev/null ++++ b/memcheck/tests/s390x/vistr.c +@@ -0,0 +1,76 @@ ++#include ++#include ++ ++#define VECTOR __attribute__ ((vector_size (16))) ++ ++typedef char VECTOR char_v; ++ ++volatile char tmp; ++static const char *hex_digit = "0123456789abcdef"; ++ ++static char_v to_char_vec(const char *str, char_v *maskp) ++{ ++ char buf[17]; ++ char_v v; ++ char_v mask = {0}; ++ ++ for (int i = 0; i < sizeof(buf); i++) { ++ char ch = str[i]; ++ if (ch == '\0') ++ break; ++ else if (ch == '$') { ++ buf[i] = '\0'; ++ mask[i] = -1; ++ } else if (ch != '~') { ++ buf[i] = ch; ++ mask[i] = -1; ++ } ++ } ++ v = *(char_v *) buf; ++ *maskp = mask; ++ return v; ++} ++ ++static void test_vistr_char(const char *str, const char *expect_res, ++ int expect_cc) ++{ ++ int cc, count; ++ char_v v1, mask; ++ char_v v2 = to_char_vec(str, &mask); ++ char_v exp_v1 = to_char_vec(expect_res, &mask); ++ char equal[16]; ++ ++ __asm__( ++ "cr 0,0\n\t" /* Clear CC */ ++ "vistr %[v1],%[v2],0,1\n\t" ++ "ipm %[cc]\n\t" ++ "srl %[cc],28" ++ : [v1] "=v" (v1), ++ [cc] "=d" (cc) ++ : [v2] "v" (v2) ++ : "cc"); ++ ++ *(char_v *) equal = (v1 & mask) == (exp_v1 & mask); ++ if (memchr(equal, 0, sizeof(equal))) ++ printf("Result doesn't match `%s'\n", expect_res); ++ ++ count = 0; ++ for (int i = 0; i < 16; i++) { ++ if (v1[i] == 0) count++; ++ } ++ tmp = hex_digit[count]; ++ ++ tmp = hex_digit[cc & 0xf]; ++ if (expect_cc >= 0 && cc != expect_cc) ++ printf("CC %d != %d\n", cc, expect_cc); ++} ++ ++int main() ++{ ++ test_vistr_char("terminated$====~", "terminated$$$$$$", 0); ++ test_vistr_char("undef~~~~~~~~~~~", "undef", -1); ++ test_vistr_char("undef, 2nd half~", "undef, 2nd half", -1); ++ test_vistr_char("Not. Terminated.", "Not. Terminated.", 3); ++ test_vistr_char("partiallyOK~~$~~", "partiallyOK~~$$$", 0); ++ return 0; ++} +diff --git a/memcheck/tests/s390x/vistr.stderr.exp b/memcheck/tests/s390x/vistr.stderr.exp +new file mode 100644 +index 000000000..e4f35fd74 +--- /dev/null ++++ b/memcheck/tests/s390x/vistr.stderr.exp +@@ -0,0 +1,20 @@ ++Conditional jump or move depends on uninitialised value(s) ++ at 0x........: test_vistr_char (vistr.c:59) ++ by 0x........: main (vistr.c:71) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vistr_char (vistr.c:63) ++ by 0x........: main (vistr.c:71) ++ ++Conditional jump or move depends on uninitialised value(s) ++ at 0x........: test_vistr_char (vistr.c:59) ++ by 0x........: main (vistr.c:72) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vistr_char (vistr.c:63) ++ by 0x........: main (vistr.c:72) ++ ++Conditional jump or move depends on uninitialised value(s) ++ at 0x........: test_vistr_char (vistr.c:59) ++ by 0x........: main (vistr.c:74) ++ +diff --git a/memcheck/tests/s390x/vistr.vgtest b/memcheck/tests/s390x/vistr.vgtest +new file mode 100644 +index 000000000..f99749d85 +--- /dev/null ++++ b/memcheck/tests/s390x/vistr.vgtest +@@ -0,0 +1,2 @@ ++prog: vistr ++vgopts: -q +diff --git a/memcheck/tests/s390x/vstrc.c b/memcheck/tests/s390x/vstrc.c +new file mode 100644 +index 000000000..268e2f858 +--- /dev/null ++++ b/memcheck/tests/s390x/vstrc.c +@@ -0,0 +1,92 @@ ++#include ++#include ++ ++#define VECTOR __attribute__ ((vector_size (16))) ++ ++typedef char VECTOR char_v; ++ ++struct vstrc_char_rng { ++ unsigned char range[16]; ++ unsigned char flags[16]; ++}; ++ ++#define RNG_FLAG_EQ 0x80 ++#define RNG_FLAG_LT 0x40 ++#define RNG_FLAG_GT 0x20 ++#define RNG_FLAG_ANY 0xe0 ++#define RNG_FLAG_NONE 0x00 ++ ++volatile char tmp; ++static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; ++ ++static void test_vstrc_char(const char *str, const struct vstrc_char_rng *rng, ++ int expect_res, int expect_cc) ++{ ++ int cc; ++ char_v v1; ++ char_v v2 = *(const char_v *) str; ++ char_v v3 = *(const char_v *) rng->range; ++ char_v v4 = *(const char_v *) rng->flags; ++ ++ __asm__( ++ "cr 0,0\n\t" /* Clear CC */ ++ "vstrc %[v1],%[v2],%[v3],%[v4],0,3\n\t" ++ "ipm %[cc]\n\t" ++ "srl %[cc],28" ++ : [v1] "=v" (v1), ++ [cc] "=d" (cc) ++ : [v2] "v" (v2), ++ [v3] "v" (v3), ++ [v4] "v" (v4) ++ : "cc"); ++ ++ tmp = hex_digit[v1[7] & 0x1f]; ++ if (expect_res >= 0 && v1[7] != expect_res) ++ printf("result %u != %d\n", v1[7], expect_res); ++ ++ tmp = hex_digit[cc & 0xf]; ++ if (expect_cc >= 0 && cc != expect_cc) ++ printf("CC %d != %d\n", cc, expect_cc); ++} ++ ++int main() ++{ ++ struct vstrc_char_rng rng; ++ char buf[16]; ++ ++ memset(rng.flags, RNG_FLAG_NONE, 16); ++ ++ rng.range[4] = 'z'; ++ rng.flags[4] = RNG_FLAG_GT | RNG_FLAG_EQ; ++ rng.flags[5] = RNG_FLAG_ANY; ++ /* OK: match at the 'z' */ ++ test_vstrc_char("find the z", &rng, 9, 2); ++ ++ rng.flags[12] = RNG_FLAG_GT | RNG_FLAG_EQ; ++ rng.flags[13] = RNG_FLAG_LT | RNG_FLAG_EQ; ++ /* Bad: undefined range */ ++ test_vstrc_char("undefined", &rng, -1, -1); ++ ++ rng.range[12] = 'a'; ++ rng.range[13] = 'c'; ++ /* OK: match at the 'a' */ ++ test_vstrc_char("get the abc", &rng, 8, 2); ++ ++ rng.flags[12] = RNG_FLAG_LT; ++ rng.flags[13] = RNG_FLAG_GT; ++ /* OK: no match up to null terminator */ ++ test_vstrc_char("no match", &rng, 8, 0); ++ ++ /* OK: no match, no null terminator */ ++ test_vstrc_char("0123456789abcdef", &rng, 16, 3); ++ ++ buf[0] = 'x'; ++ /* Bad: undefined string */ ++ test_vstrc_char(buf, &rng, -1, -1); ++ ++ buf[1] = 'z'; ++ /* Bad: valid match, but CC undefined */ ++ test_vstrc_char(buf, &rng, 1, -1); ++ ++ return 0; ++} +diff --git a/memcheck/tests/s390x/vstrc.stderr.exp b/memcheck/tests/s390x/vstrc.stderr.exp +new file mode 100644 +index 000000000..c1125bea1 +--- /dev/null ++++ b/memcheck/tests/s390x/vstrc.stderr.exp +@@ -0,0 +1,20 @@ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrc_char (vstrc.c:43) ++ by 0x........: main (vstrc.c:68) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrc_char (vstrc.c:47) ++ by 0x........: main (vstrc.c:68) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrc_char (vstrc.c:43) ++ by 0x........: main (vstrc.c:85) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrc_char (vstrc.c:47) ++ by 0x........: main (vstrc.c:85) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrc_char (vstrc.c:47) ++ by 0x........: main (vstrc.c:89) ++ +diff --git a/memcheck/tests/s390x/vstrc.stdout.exp b/memcheck/tests/s390x/vstrc.stdout.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/s390x/vstrc.vgtest b/memcheck/tests/s390x/vstrc.vgtest +new file mode 100644 +index 000000000..26f5db99b +--- /dev/null ++++ b/memcheck/tests/s390x/vstrc.vgtest +@@ -0,0 +1,2 @@ ++prog: vstrc ++vgopts: -q + +commit a0bb049ace14ab52d386bb1d49a399f39eec4986 +Author: Andreas Arnez +Date: Tue Mar 23 14:55:09 2021 +0100 + + s390x: Improve handling of amodes without base register + + Addressing modes without a base or index register represent constants. + They can occur in some special cases such as shift operations and when + accessing individual vector elements. Perform some minor improvements to + the handling of such amodes. + +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index 6e0734ae0..2587f81a1 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -360,7 +360,8 @@ s390_amode_is_sane(const s390_amode *am) + { + switch (am->tag) { + case S390_AMODE_B12: +- return is_virtual_gpr(am->b) && fits_unsigned_12bit(am->d); ++ return (is_virtual_gpr(am->b) || sameHReg(am->b, s390_hreg_gpr(0))) && ++ fits_unsigned_12bit(am->d); + + case S390_AMODE_B20: + return is_virtual_gpr(am->b) && fits_signed_20bit(am->d); +@@ -378,47 +379,31 @@ s390_amode_is_sane(const s390_amode *am) + } + } + ++static Bool ++s390_amode_is_constant(const s390_amode *am) ++{ ++ return am->tag == S390_AMODE_B12 && sameHReg(am->b, s390_hreg_gpr(0)); ++} ++ + + /* Record the register use of an amode */ + static void + s390_amode_get_reg_usage(HRegUsage *u, const s390_amode *am) + { +- switch (am->tag) { +- case S390_AMODE_B12: +- case S390_AMODE_B20: +- addHRegUse(u, HRmRead, am->b); +- return; +- +- case S390_AMODE_BX12: +- case S390_AMODE_BX20: ++ if (!sameHReg(am->b, s390_hreg_gpr(0))) + addHRegUse(u, HRmRead, am->b); ++ if (!sameHReg(am->x, s390_hreg_gpr(0))) + addHRegUse(u, HRmRead, am->x); +- return; +- +- default: +- vpanic("s390_amode_get_reg_usage"); +- } + } + + + static void + s390_amode_map_regs(HRegRemap *m, s390_amode *am) + { +- switch (am->tag) { +- case S390_AMODE_B12: +- case S390_AMODE_B20: +- am->b = lookupHRegRemap(m, am->b); +- return; +- +- case S390_AMODE_BX12: +- case S390_AMODE_BX20: ++ if (!sameHReg(am->b, s390_hreg_gpr(0))) + am->b = lookupHRegRemap(m, am->b); ++ if (!sameHReg(am->x, s390_hreg_gpr(0))) + am->x = lookupHRegRemap(m, am->x); +- return; +- +- default: +- vpanic("s390_amode_map_regs"); +- } + } + + +@@ -653,6 +638,16 @@ directReload_S390(HInstr* i, HReg vreg, Short spill_off) + insn->variant.alu.dst, vreg_opnd); + } + ++ /* v-vgetelem , */ ++ if (insn->tag == S390_INSN_VEC_AMODEOP ++ && insn->variant.vec_amodeop.tag == S390_VEC_GET_ELEM ++ && insn->size == 8 ++ && sameHReg(insn->variant.vec_amodeop.op1, vreg) ++ && s390_amode_is_constant(insn->variant.vec_amodeop.op2)) { ++ vreg_am->d += 8 * insn->variant.vec_amodeop.op2->d; ++ return s390_insn_load(insn->size, insn->variant.vec_amodeop.dst, vreg_am); ++ } ++ + /* v- , */ + if (insn->tag == S390_INSN_UNOP + && insn->variant.unop.src.tag == S390_OPND_REG +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 5f79280c0..ceca6836e 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -312,7 +312,18 @@ s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, + Bool no_index __attribute__((unused)), + Bool short_displacement) + { +- if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { ++ if (expr->tag == Iex_Unop && expr->Iex.Unop.op == Iop_8Uto64 && ++ expr->Iex.Unop.arg->tag == Iex_Const) { ++ UChar value = expr->Iex.Unop.arg->Iex.Const.con->Ico.U8; ++ return s390_amode_b12((Int)value, s390_hreg_gpr(0)); ++ ++ } else if (expr->tag == Iex_Const) { ++ ULong value = expr->Iex.Const.con->Ico.U64; ++ if (ulong_fits_unsigned_12bit(value)) { ++ return s390_amode_b12((Int)value, s390_hreg_gpr(0)); ++ } ++ ++ } else if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { + IRExpr *arg1 = expr->Iex.Binop.arg1; + IRExpr *arg2 = expr->Iex.Binop.arg2; + + +commit fd935e238d907d9c523a311ba795077d95ad6912 +Author: Andreas Arnez +Date: Fri Mar 26 19:27:47 2021 +0100 + + s390x: Rework insn "v-vdup" and add "v-vrep" + + So far the only s390x insn for filling a vector with copies of the same + element is "v-vdup" (S390_VEC_DUPLICATE), which replicates the first + element of its vector argument. This is fairly restrictive and can lead + to unnecessarily long code sequences. + + Redefine "v-vdup" to replicate any scalar value instead. And add + "v-vrep" (S390_INSN_VEC_REPLICATE) for replicating any given element of a + vector. Select the latter for suitable expressions like + + Iop_Dup8x16(Iop_GetElem8x16(vector_expr, i)) + + This improves the generated code for some vector string instructions, + where a lot of element replications are performed. + +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index 2587f81a1..c764d6ef9 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -670,6 +670,14 @@ directReload_S390(HInstr* i, HReg vreg, Short spill_off) + insn->variant.unop.dst, vreg_opnd); + } + ++ /* v-vrep ,, */ ++ if (insn->tag == S390_INSN_VEC_REPLICATE ++ && sameHReg(insn->variant.vec_replicate.op1, vreg)) { ++ vreg_am->d += insn->size * insn->variant.vec_replicate.idx; ++ return s390_insn_unop(insn->size, S390_VEC_DUPLICATE, ++ insn->variant.vec_replicate.dst, vreg_opnd); ++ } ++ + no_match: + return NULL; + } +@@ -1050,6 +1058,11 @@ s390_insn_get_reg_usage(HRegUsage *u, const s390_insn *insn) + addHRegUse(u, HRmRead, insn->variant.vec_triop.op3); + break; + ++ case S390_INSN_VEC_REPLICATE: ++ addHRegUse(u, HRmWrite, insn->variant.vec_replicate.dst); ++ addHRegUse(u, HRmRead, insn->variant.vec_replicate.op1); ++ break; ++ + default: + vpanic("s390_insn_get_reg_usage"); + } +@@ -1433,6 +1446,14 @@ s390_insn_map_regs(HRegRemap *m, s390_insn *insn) + insn->variant.vec_triop.op3 = + lookupHRegRemap(m, insn->variant.vec_triop.op3); + break; ++ ++ case S390_INSN_VEC_REPLICATE: ++ insn->variant.vec_replicate.dst = ++ lookupHRegRemap(m, insn->variant.vec_replicate.dst); ++ insn->variant.vec_replicate.op1 = ++ lookupHRegRemap(m, insn->variant.vec_replicate.op1); ++ break; ++ + default: + vpanic("s390_insn_map_regs"); + } +@@ -1767,7 +1788,39 @@ emit_VRI_VI(UChar *p, ULong op, UChar v1, UShort i2) + + + static UChar * +-emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2) ++emit_VRI_VIM(UChar *p, ULong op, UChar v1, UShort i2, UChar m3) ++{ ++ ULong the_insn = op; ++ ULong rxb = s390_update_rxb(0, 1, &v1); ++ ++ the_insn |= ((ULong)v1) << 36; ++ the_insn |= ((ULong)i2) << 16; ++ the_insn |= ((ULong)m3) << 12; ++ the_insn |= ((ULong)rxb)<< 8; ++ ++ return emit_6bytes(p, the_insn); ++} ++ ++ ++static UChar * ++emit_VRI_VVMM(UChar *p, ULong op, UChar v1, UChar v3, UShort i2, UChar m4) ++{ ++ ULong the_insn = op; ++ ULong rxb = s390_update_rxb(0, 1, &v1); ++ rxb = s390_update_rxb(rxb, 2, &v3); ++ ++ the_insn |= ((ULong)v1) << 36; ++ the_insn |= ((ULong)v3) << 32; ++ the_insn |= ((ULong)i2) << 16; ++ the_insn |= ((ULong)m4) << 12; ++ the_insn |= ((ULong)rxb) << 8; ++ ++ return emit_6bytes(p, the_insn); ++} ++ ++ ++static UChar * ++emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2, UChar m3) + { + ULong the_insn = op; + ULong rxb = s390_update_rxb(0, 1, &v1); +@@ -1776,6 +1829,7 @@ emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2) + the_insn |= ((ULong)x2) << 32; + the_insn |= ((ULong)b2) << 28; + the_insn |= ((ULong)d2) << 16; ++ the_insn |= ((ULong)m3) << 12; + the_insn |= ((ULong)rxb)<< 8; + + return emit_6bytes(p, the_insn); +@@ -5782,7 +5836,7 @@ s390_emit_VL(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2) + if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) + s390_disasm(ENC3(MNM, VR, UDXB), "vl", v1, d2, x2, b2); + +- return emit_VRX(p, 0xE70000000006ULL, v1, x2, b2, d2); ++ return emit_VRX(p, 0xE70000000006ULL, v1, x2, b2, d2, 0); + } + + static UChar * +@@ -5795,13 +5849,23 @@ s390_emit_VLR(UChar *p, UChar v1, UChar v2) + } + + ++static UChar * ++s390_emit_VLREP(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2, UShort m3) ++{ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) ++ s390_disasm(ENC4(MNM, VR, UDXB, UINT), "vlrep", v1, d2, x2, b2, m3); ++ ++ return emit_VRX(p, 0xE70000000005ULL, v1, x2, b2, d2, m3); ++} ++ ++ + static UChar * + s390_emit_VST(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2) + { + if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) + s390_disasm(ENC3(MNM, VR, UDXB), "vst", v1, d2, x2, b2); + +- return emit_VRX(p, 0xE7000000000eULL, v1, x2, b2, d2); ++ return emit_VRX(p, 0xE7000000000eULL, v1, x2, b2, d2, 0); + } + + +@@ -5912,15 +5976,24 @@ s390_emit_VPKLS(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4) + + + static UChar * +-s390_emit_VREP(UChar *p, UChar v1, UChar v3, UChar m3) ++s390_emit_VREP(UChar *p, UChar v1, UChar v3, UShort i2, UChar m4) + { + if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) +- s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), "vrep", v1, v3, 0, m3); ++ s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), "vrep", v1, v3, i2, m4); + +- return emit_VRR_VVM(p, 0xE7000000004DULL, v1, v3, m3); ++ return emit_VRI_VVMM(p, 0xE7000000004DULL, v1, v3, i2, m4); + } + + ++static UChar * ++s390_emit_VREPI(UChar *p, UChar v1, UShort i2, UChar m3) ++{ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) ++ s390_disasm(ENC4(MNM, VR, UINT, UINT), "vrepi", v1, i2, m3); ++ ++ return emit_VRI_VIM(p, 0xE70000000045ULL, v1, i2, m3); ++} ++ + + static UChar * + s390_emit_VUPH(UChar *p, UChar v1, UChar v3, UChar m3) +@@ -7560,6 +7633,20 @@ s390_insn *s390_insn_vec_triop(UChar size, s390_vec_triop_t tag, HReg dst, + return insn; + } + ++s390_insn *s390_insn_vec_replicate(UChar size, HReg dst, HReg op1, ++ UChar idx) ++{ ++ s390_insn *insn = LibVEX_Alloc_inline(sizeof(s390_insn)); ++ ++ insn->tag = S390_INSN_VEC_REPLICATE; ++ insn->size = size; ++ insn->variant.vec_replicate.dst = dst; ++ insn->variant.vec_replicate.op1 = op1; ++ insn->variant.vec_replicate.idx = idx; ++ ++ return insn; ++} ++ + /*---------------------------------------------------------------*/ + /*--- Debug print ---*/ + /*---------------------------------------------------------------*/ +@@ -8284,6 +8371,13 @@ s390_insn_as_string(const s390_insn *insn) + insn->variant.vec_triop.op3); + break; + ++ case S390_INSN_VEC_REPLICATE: ++ s390_sprintf(buf, "%M %R, %R, %I", "v-vrep", ++ insn->variant.vec_replicate.dst, ++ insn->variant.vec_replicate.op1, ++ insn->variant.vec_replicate.idx); ++ break; ++ + default: goto fail; + } + +@@ -9386,6 +9480,56 @@ s390_negate_emit(UChar *buf, const s390_insn *insn) + } + + ++static UChar * ++s390_vec_duplicate_emit(UChar *buf, const s390_insn *insn) ++{ ++ UChar v1 = hregNumber(insn->variant.unop.dst); ++ s390_opnd_RMI opnd = insn->variant.unop.src; ++ UChar r2; ++ ++ switch (opnd.tag) { ++ case S390_OPND_AMODE: { ++ s390_amode* am = opnd.variant.am; ++ UInt b = hregNumber(am->b); ++ UInt x = hregNumber(am->x); ++ UInt d = am->d; ++ ++ if (fits_unsigned_12bit(d)) { ++ return s390_emit_VLREP(buf, v1, x, b, d, ++ s390_getM_from_size(insn->size)); ++ } ++ buf = s390_emit_load_mem(buf, insn->size, R0, am); ++ r2 = R0; ++ goto duplicate_from_gpr; ++ } ++ ++ case S390_OPND_IMMEDIATE: { ++ ULong val = opnd.variant.imm; ++ ++ if (ulong_fits_signed_16bit(val)) { ++ return s390_emit_VREPI(buf, v1, val, s390_getM_from_size(insn->size)); ++ } ++ buf = s390_emit_load_64imm(buf, R0, val); ++ r2 = R0; ++ goto duplicate_from_gpr; ++ } ++ ++ case S390_OPND_REG: ++ r2 = hregNumber(opnd.variant.reg); ++ ++ duplicate_from_gpr: ++ buf = s390_emit_VLVGP(buf, v1, r2, r2); ++ if (insn->size != 8) { ++ buf = s390_emit_VREP(buf, v1, v1, 8 / insn->size - 1, ++ s390_getM_from_size(insn->size)); ++ } ++ return buf; ++ } ++ ++ vpanic("s390_vec_duplicate_emit"); ++} ++ ++ + static UChar * + s390_insn_unop_emit(UChar *buf, const s390_insn *insn) + { +@@ -9405,12 +9549,7 @@ s390_insn_unop_emit(UChar *buf, const s390_insn *insn) + UShort i2 = insn->variant.unop.src.variant.imm; + return s390_emit_VGBM(buf, v1, i2); + } +- case S390_VEC_DUPLICATE: { +- vassert(insn->variant.unop.src.tag == S390_OPND_REG); +- UChar v1 = hregNumber(insn->variant.unop.dst); +- UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); +- return s390_emit_VREP(buf, v1, v2, s390_getM_from_size(insn->size)); +- } ++ case S390_VEC_DUPLICATE: return s390_vec_duplicate_emit(buf, insn); + case S390_VEC_UNPACKLOWS: { + vassert(insn->variant.unop.src.tag == S390_OPND_REG); + vassert(insn->size < 8); +@@ -11595,6 +11734,16 @@ s390_insn_vec_triop_emit(UChar *buf, const s390_insn *insn) + } + + ++static UChar * ++s390_insn_vec_replicate_emit(UChar *buf, const s390_insn *insn) ++{ ++ UChar v1 = hregNumber(insn->variant.vec_replicate.dst); ++ UChar v2 = hregNumber(insn->variant.vec_replicate.op1); ++ UShort idx = (UShort) insn->variant.vec_replicate.idx; ++ return s390_emit_VREP(buf, v1, v2, idx, s390_getM_from_size(insn->size)); ++} ++ ++ + Int + emit_S390Instr(Bool *is_profinc, UChar *buf, Int nbuf, const s390_insn *insn, + Bool mode64, VexEndness endness_host, +@@ -11791,6 +11940,11 @@ emit_S390Instr(Bool *is_profinc, UChar *buf, Int nbuf, const s390_insn *insn, + case S390_INSN_VEC_TRIOP: + end = s390_insn_vec_triop_emit(buf, insn); + break; ++ ++ case S390_INSN_VEC_REPLICATE: ++ end = s390_insn_vec_replicate_emit(buf, insn); ++ break; ++ + fail: + default: + vpanic("emit_S390Instr"); +diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h +index 9b69f4d38..063fd3800 100644 +--- a/VEX/priv/host_s390_defs.h ++++ b/VEX/priv/host_s390_defs.h +@@ -166,7 +166,8 @@ typedef enum { + S390_INSN_VEC_AMODEINTOP, + S390_INSN_VEC_UNOP, + S390_INSN_VEC_BINOP, +- S390_INSN_VEC_TRIOP ++ S390_INSN_VEC_TRIOP, ++ S390_INSN_VEC_REPLICATE + } s390_insn_tag; + + +@@ -738,6 +739,11 @@ typedef struct { + HReg op2; /* 128-bit second operand */ + HReg op3; /* 128-bit third operand */ + } vec_triop; ++ struct { ++ HReg dst; /* 128-bit result */ ++ HReg op1; /* 128-bit first operand */ ++ UChar idx; /* index of element to replicate */ ++ } vec_replicate; + } variant; + } s390_insn; + +@@ -853,6 +859,7 @@ s390_insn *s390_insn_vec_binop(UChar size, s390_vec_binop_t, HReg dst, HReg op1, + HReg op2); + s390_insn *s390_insn_vec_triop(UChar size, s390_vec_triop_t, HReg dst, HReg op1, + HReg op2, HReg op3); ++s390_insn *s390_insn_vec_replicate(UChar size, HReg dst, HReg op1, UChar idx); + + const HChar *s390_insn_as_string(const s390_insn *); + +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index ceca6836e..968122596 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -3778,12 +3778,12 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + } + /* --------- UNARY OP --------- */ + case Iex_Unop: { +- UChar size_for_int_arg = 0; + HReg dst = INVALID_HREG; + HReg reg1 = INVALID_HREG; + s390_unop_t vec_unop = S390_UNOP_T_INVALID; + s390_vec_binop_t vec_binop = S390_VEC_BINOP_T_INVALID; + IROp op = expr->Iex.Unop.op; ++ IROp arg_op = Iop_INVALID; + IRExpr* arg = expr->Iex.Unop.arg; + switch(op) { + case Iop_NotV128: +@@ -3839,59 +3839,63 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + } + + case Iop_Dup8x16: +- size = size_for_int_arg = 1; +- vec_unop = S390_VEC_DUPLICATE; +- goto Iop_V_int_wrk; ++ size = 1; ++ arg_op = Iop_GetElem8x16; ++ goto Iop_V_dup_wrk; + case Iop_Dup16x8: +- size = size_for_int_arg = 2; +- vec_unop = S390_VEC_DUPLICATE; +- goto Iop_V_int_wrk; ++ size = 2; ++ arg_op = Iop_GetElem16x8; ++ goto Iop_V_dup_wrk; + case Iop_Dup32x4: +- size = size_for_int_arg = 4; +- vec_unop = S390_VEC_DUPLICATE; +- goto Iop_V_int_wrk; ++ size = 4; ++ arg_op = Iop_GetElem32x4; ++ goto Iop_V_dup_wrk; ++ ++ Iop_V_dup_wrk: { ++ dst = newVRegV(env); ++ if (arg->tag == Iex_Binop && arg->Iex.Binop.op == arg_op && ++ arg->Iex.Binop.arg2->tag == Iex_Const) { ++ ULong idx; ++ idx = get_const_value_as_ulong(arg->Iex.Binop.arg2-> Iex.Const.con); ++ reg1 = s390_isel_vec_expr(env, arg->Iex.Binop.arg1); ++ addInstr(env, s390_insn_vec_replicate(size, dst, reg1, (UChar)idx)); ++ } else { ++ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg); ++ addInstr(env, s390_insn_unop(size, S390_VEC_DUPLICATE, dst, src)); ++ } ++ return dst; ++ } + + case Iop_Widen8Sto16x8: + size = 1; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWS; +- goto Iop_V_int_wrk; ++ goto Iop_V_widen_wrk; + case Iop_Widen16Sto32x4: + size = 2; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWS; +- goto Iop_V_int_wrk; ++ goto Iop_V_widen_wrk; + case Iop_Widen32Sto64x2: + size = 4; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWS; +- goto Iop_V_int_wrk; ++ goto Iop_V_widen_wrk; + case Iop_Widen8Uto16x8: + size = 1; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWU; +- goto Iop_V_int_wrk; ++ goto Iop_V_widen_wrk; + case Iop_Widen16Uto32x4: + size = 2; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWU; +- goto Iop_V_int_wrk; ++ goto Iop_V_widen_wrk; + case Iop_Widen32Uto64x2: + size = 4; +- size_for_int_arg = 8; + vec_unop = S390_VEC_UNPACKLOWU; +- goto Iop_V_int_wrk; +- +- Iop_V_int_wrk: { +- HReg vr1 = vec_generate_zeroes(env); +- s390_amode* amode2 = s390_isel_amode(env, IRExpr_Const(IRConst_U64(0))); +- reg1 = s390_isel_int_expr(env, arg); ++ goto Iop_V_widen_wrk; + ++ Iop_V_widen_wrk: { + vassert(vec_unop != S390_UNOP_T_INVALID); +- addInstr(env, +- s390_insn_vec_amodeintop(size_for_int_arg, S390_VEC_SET_ELEM, +- vr1, amode2, reg1)); +- ++ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg); ++ HReg vr1 = newVRegV(env); ++ addInstr(env, s390_insn_unop(8, S390_VEC_DUPLICATE, vr1, src)); + dst = newVRegV(env); + addInstr(env, s390_insn_unop(size, vec_unop, dst, s390_opnd_reg(vr1))); + return dst; + +commit 6c1cb1a0128b00858b973ef9344e12d6ddbaaf57 +Author: Andreas Arnez +Date: Thu Mar 25 18:48:07 2021 +0100 + + s390x: Add support for emitting "vector or with complement" + + In the instruction selector, look out for IR expressions that fit "vector + or with complement (VOC)". Emit when applicable. + + This slighly reduces the generated code sometimes, such as for certain + vector string instructions, where such expressions occur quite frequently. + +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index c764d6ef9..239d9d299 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -5907,6 +5907,15 @@ s390_emit_VO(UChar *p, UChar v1, UChar v2, UChar v3) + return emit_VRR_VVV(p, 0xE7000000006aULL, v1, v2, v3); + } + ++static UChar * ++s390_emit_VOC(UChar *p, UChar v1, UChar v2, UChar v3) ++{ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) ++ s390_disasm(ENC4(MNM, VR, VR, VR), "voc", v1, v2, v3); ++ ++ return emit_VRR_VVV(p, 0xE7000000006fULL, v1, v2, v3); ++} ++ + static UChar * + s390_emit_VX(UChar *p, UChar v1, UChar v2, UChar v3) + { +@@ -8312,6 +8321,7 @@ s390_insn_as_string(const s390_insn *insn) + case S390_VEC_PACK_SATURU: op = "v-vpacksaturu"; break; + case S390_VEC_COMPARE_EQUAL: op = "v-vcmpeq"; break; + case S390_VEC_OR: op = "v-vor"; break; ++ case S390_VEC_ORC: op = "v-vorc"; break; + case S390_VEC_XOR: op = "v-vxor"; break; + case S390_VEC_AND: op = "v-vand"; break; + case S390_VEC_MERGEL: op = "v-vmergel"; break; +@@ -11609,6 +11619,8 @@ s390_insn_vec_binop_emit(UChar *buf, const s390_insn *insn) + return s390_emit_VCEQ(buf, v1, v2, v3, s390_getM_from_size(size)); + case S390_VEC_OR: + return s390_emit_VO(buf, v1, v2, v3); ++ case S390_VEC_ORC: ++ return s390_emit_VOC(buf, v1, v2, v3); + case S390_VEC_XOR: + return s390_emit_VX(buf, v1, v2, v3); + case S390_VEC_AND: +diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h +index 063fd3800..dc116106e 100644 +--- a/VEX/priv/host_s390_defs.h ++++ b/VEX/priv/host_s390_defs.h +@@ -366,6 +366,7 @@ typedef enum { + S390_VEC_PACK_SATURU, + S390_VEC_COMPARE_EQUAL, + S390_VEC_OR, ++ S390_VEC_ORC, + S390_VEC_XOR, + S390_VEC_AND, + S390_VEC_MERGEL, +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 968122596..53d76fe8a 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -4102,6 +4102,15 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + case Iop_OrV128: + size = 16; + vec_binop = S390_VEC_OR; ++ if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { ++ IRExpr* orig_arg1 = arg1; ++ arg1 = arg2; ++ arg2 = orig_arg1->Iex.Unop.arg; ++ vec_binop = S390_VEC_ORC; ++ } else if (arg2->tag == Iex_Unop && arg2->Iex.Unop.op == Iop_NotV128) { ++ arg2 = arg2->Iex.Unop.arg; ++ vec_binop = S390_VEC_ORC; ++ } + goto Iop_VV_wrk; + + case Iop_XorV128: + +commit 0bd4263326b2d48f782339a9bbe1a069c7de45c7 +Author: Andreas Arnez +Date: Tue Mar 30 17:45:20 2021 +0200 + + s390x: Fix/optimize Iop_64HLtoV128 + + In s390_vr_fill() in guest_s390_toIR.c, filling a vector with two copies + of a 64-bit value is realized with Iop_64HLtoV128, since there is no such + operator as Iop_Dup64x2. But the two args to Iop_64HLtoV128 use the same + expression, referenced twice. Although this hasn't been seen to cause + real trouble yet, it's problematic and potentially inefficient, so change + it: Assign to a temp and pass that twice instead. + + In the instruction selector, if Iop_64HLtoV128 is found to be used for a + duplication as above, select "v-vdup" instead of "v-vinitfromgprs". This + mimicks the behavior we'd get if there actually was an operator + Iop_Dup64x2. + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index dfea54259..a73dcfb14 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -2299,9 +2299,12 @@ s390_vr_fill(UChar v1, IRExpr *o2) + case Ity_I32: + put_vr_qw(v1, unop(Iop_Dup32x4, o2)); + break; +- case Ity_I64: +- put_vr_qw(v1, binop(Iop_64HLtoV128, o2, o2)); ++ case Ity_I64: { ++ IRTemp val = newTemp(Ity_I64); ++ assign(val, o2); ++ put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(val), mkexpr(val))); + break; ++ } + default: + ppIRType(o2type); + vpanic("s390_vr_fill: invalid IRType"); +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index 53d76fe8a..ee20c6711 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -4662,12 +4662,16 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + } + + case Iop_64HLtoV128: +- reg1 = s390_isel_int_expr(env, arg1); +- reg2 = s390_isel_int_expr(env, arg2); +- +- addInstr(env, s390_insn_vec_binop(size, S390_VEC_INIT_FROM_GPRS, +- dst, reg1, reg2)); +- ++ if (arg1->tag == Iex_RdTmp && arg2->tag == Iex_RdTmp && ++ arg1->Iex.RdTmp.tmp == arg2->Iex.RdTmp.tmp) { ++ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg1); ++ addInstr(env, s390_insn_unop(8, S390_VEC_DUPLICATE, dst, src)); ++ } else { ++ reg1 = s390_isel_int_expr(env, arg1); ++ reg2 = s390_isel_int_expr(env, arg2); ++ addInstr(env, s390_insn_vec_binop(size, S390_VEC_INIT_FROM_GPRS, ++ dst, reg1, reg2)); ++ } + return dst; + + default: + +commit cae5062b05b95e0303b1122a0ea9aadc197e4f0a +Author: Andreas Arnez +Date: Fri May 7 18:13:03 2021 +0200 + + s390x: Add missing stdout.exp for vector string memcheck test + + The file vistr.stdout.exp was missing from commit 32312d588. Add it. + +diff --git a/memcheck/tests/s390x/vistr.stdout.exp b/memcheck/tests/s390x/vistr.stdout.exp +new file mode 100644 +index 000000000..e69de29bb diff --git a/valgrind-3.17.0-s390-z13-vec-fix.patch b/valgrind-3.17.0-s390-z13-vec-fix.patch new file mode 100644 index 0000000..959e5f8 --- /dev/null +++ b/valgrind-3.17.0-s390-z13-vec-fix.patch @@ -0,0 +1,46 @@ +commit 124ae6cfa303f0cc71ffd685620cb57c4f8f02bb +Author: Andreas Arnez +Date: Mon Jun 7 14:01:53 2021 +0200 + + s390x: Don't emit "vector or with complement" on z13 + + The z/Architecture instruction "vector or with complement" (VOC) can be + used as an optimization to combine "vector or" with "vector nor". This is + exploited in Valgrind since commit 6c1cb1a0128b00858b973e. However, VOC + requires the vector-enhancements facility 1, which is not installed on a + z13 CPU. Thus Valgrind can now run into SIGILL on z13 when trying to + execute vector string instructions. + + Fix this by suppressing the VOC optimization unless the + vector-enhancements facility 1 is recognized on the host. + +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index ee20c6711..15ca92a6b 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -4102,14 +4102,17 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + case Iop_OrV128: + size = 16; + vec_binop = S390_VEC_OR; +- if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { +- IRExpr* orig_arg1 = arg1; +- arg1 = arg2; +- arg2 = orig_arg1->Iex.Unop.arg; +- vec_binop = S390_VEC_ORC; +- } else if (arg2->tag == Iex_Unop && arg2->Iex.Unop.op == Iop_NotV128) { +- arg2 = arg2->Iex.Unop.arg; +- vec_binop = S390_VEC_ORC; ++ if (s390_host_has_vxe) { ++ if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { ++ IRExpr* orig_arg1 = arg1; ++ arg1 = arg2; ++ arg2 = orig_arg1->Iex.Unop.arg; ++ vec_binop = S390_VEC_ORC; ++ } else if (arg2->tag == Iex_Unop && ++ arg2->Iex.Unop.op == Iop_NotV128) { ++ arg2 = arg2->Iex.Unop.arg; ++ vec_binop = S390_VEC_ORC; ++ } + } + goto Iop_VV_wrk; + diff --git a/valgrind-3.17.0-s390-z15.patch b/valgrind-3.17.0-s390-z15.patch new file mode 100644 index 0000000..2ec3c2f --- /dev/null +++ b/valgrind-3.17.0-s390-z15.patch @@ -0,0 +1,2413 @@ +From 3fbde55a5696c9273084ee2c44daca752e407597 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 26 Jan 2021 15:06:47 +0100 +Subject: [PATCH 01/13] s390x: Misc-insn-3, bitwise logical 3-way instructions + +Add support for the instructions NCRK, NCGRK, NNRK, NNGRK, NORK, NOGRK, +NXRK, NXGRK, OCRK, and OCGRK. Introduce a common helper and use it for +the existing instructions NRK, NGRK, XRK, XGRK, ORK, and OGRK as well. +--- + VEX/priv/guest_s390_toIR.c | 154 ++++++++++++++++++++++++++----------- + 1 file changed, 109 insertions(+), 45 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index a73dcfb14..f8afd5b96 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -5022,8 +5022,12 @@ s390_irgen_NGR(UChar r1, UChar r2) + return "ngr"; + } + ++/* Helper for bitwise logical instructions with two 32-bit input operands and a ++ 32-bit output operand. `inv3' and `inv' indicate whether to invert (build ++ bitwise complement of) operand 3 or the result, respectively. */ + static const HChar * +-s390_irgen_NRK(UChar r3, UChar r1, UChar r2) ++s390_irgen_logicalK32(UChar r3, UChar r1, UChar r2, ++ const HChar *mnem, IROp op, Bool inv3, Bool inv) + { + IRTemp op2 = newTemp(Ity_I32); + IRTemp op3 = newTemp(Ity_I32); +@@ -5031,15 +5035,19 @@ s390_irgen_NRK(UChar r3, UChar r1, UChar r2) + + assign(op2, get_gpr_w1(r2)); + assign(op3, get_gpr_w1(r3)); +- assign(result, binop(Iop_And32, mkexpr(op2), mkexpr(op3))); ++ IRExpr* tmp = binop(op, mkexpr(op2), ++ inv3 ? unop(Iop_Not32, mkexpr(op3)) : mkexpr(op3)); ++ assign(result, inv ? unop(Iop_Not32, tmp) : tmp); + s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); + put_gpr_w1(r1, mkexpr(result)); + +- return "nrk"; ++ return mnem; + } + ++/* Same as s390_irgen_logicalK32, but for 64-bit operands. */ + static const HChar * +-s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) ++s390_irgen_logicalK64(UChar r3, UChar r1, UChar r2, ++ const HChar *mnem, IROp op, Bool inv3, Bool inv) + { + IRTemp op2 = newTemp(Ity_I64); + IRTemp op3 = newTemp(Ity_I64); +@@ -5047,11 +5055,49 @@ s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) + + assign(op2, get_gpr_dw0(r2)); + assign(op3, get_gpr_dw0(r3)); +- assign(result, binop(Iop_And64, mkexpr(op2), mkexpr(op3))); ++ IRExpr* tmp = binop(op, mkexpr(op2), ++ inv3 ? unop(Iop_Not64, mkexpr(op3)) : mkexpr(op3)); ++ assign(result, inv ? unop(Iop_Not64, tmp) : tmp); + s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); + put_gpr_dw0(r1, mkexpr(result)); + +- return "ngrk"; ++ return mnem; ++} ++ ++static const HChar * ++s390_irgen_NRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "nrk", Iop_And32, False, False); ++} ++ ++static const HChar * ++s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "ngrk", Iop_And64, False, False); ++} ++ ++static const HChar * ++s390_irgen_NCRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "ncrk", Iop_And32, True, False); ++} ++ ++static const HChar * ++s390_irgen_NCGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "ncgrk", Iop_And64, True, False); ++} ++ ++static const HChar * ++s390_irgen_NNRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "nnrk", Iop_And32, False, True); ++} ++ ++static const HChar * ++s390_irgen_NNGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "nngrk", Iop_And64, False, True); + } + + static const HChar * +@@ -7071,33 +7117,25 @@ s390_irgen_XGR(UChar r1, UChar r2) + static const HChar * + s390_irgen_XRK(UChar r3, UChar r1, UChar r2) + { +- IRTemp op2 = newTemp(Ity_I32); +- IRTemp op3 = newTemp(Ity_I32); +- IRTemp result = newTemp(Ity_I32); +- +- assign(op2, get_gpr_w1(r2)); +- assign(op3, get_gpr_w1(r3)); +- assign(result, binop(Iop_Xor32, mkexpr(op2), mkexpr(op3))); +- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); +- put_gpr_w1(r1, mkexpr(result)); +- +- return "xrk"; ++ return s390_irgen_logicalK32(r3, r1, r2, "xrk", Iop_Xor32, False, False); + } + + static const HChar * + s390_irgen_XGRK(UChar r3, UChar r1, UChar r2) + { +- IRTemp op2 = newTemp(Ity_I64); +- IRTemp op3 = newTemp(Ity_I64); +- IRTemp result = newTemp(Ity_I64); ++ return s390_irgen_logicalK64(r3, r1, r2, "xgrk", Iop_Xor64, False, False); ++} + +- assign(op2, get_gpr_dw0(r2)); +- assign(op3, get_gpr_dw0(r3)); +- assign(result, binop(Iop_Xor64, mkexpr(op2), mkexpr(op3))); +- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); +- put_gpr_dw0(r1, mkexpr(result)); ++static const HChar * ++s390_irgen_NXRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "nxrk", Iop_Xor32, False, True); ++} + +- return "xgrk"; ++static const HChar * ++s390_irgen_NXGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "nxgrk", Iop_Xor64, False, True); + } + + static const HChar * +@@ -8920,33 +8958,37 @@ s390_irgen_OGR(UChar r1, UChar r2) + static const HChar * + s390_irgen_ORK(UChar r3, UChar r1, UChar r2) + { +- IRTemp op2 = newTemp(Ity_I32); +- IRTemp op3 = newTemp(Ity_I32); +- IRTemp result = newTemp(Ity_I32); ++ return s390_irgen_logicalK32(r3, r1, r2, "ork", Iop_Or32, False, False); ++} + +- assign(op2, get_gpr_w1(r2)); +- assign(op3, get_gpr_w1(r3)); +- assign(result, binop(Iop_Or32, mkexpr(op2), mkexpr(op3))); +- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); +- put_gpr_w1(r1, mkexpr(result)); ++static const HChar * ++s390_irgen_OGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "ogrk", Iop_Or64, False, False); ++} + +- return "ork"; ++static const HChar * ++s390_irgen_OCRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "ocrk", Iop_Or32, True, False); + } + + static const HChar * +-s390_irgen_OGRK(UChar r3, UChar r1, UChar r2) ++s390_irgen_OCGRK(UChar r3, UChar r1, UChar r2) + { +- IRTemp op2 = newTemp(Ity_I64); +- IRTemp op3 = newTemp(Ity_I64); +- IRTemp result = newTemp(Ity_I64); ++ return s390_irgen_logicalK64(r3, r1, r2, "ocgrk", Iop_Or64, True, False); ++} + +- assign(op2, get_gpr_dw0(r2)); +- assign(op3, get_gpr_dw0(r3)); +- assign(result, binop(Iop_Or64, mkexpr(op2), mkexpr(op3))); +- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); +- put_gpr_dw0(r1, mkexpr(result)); ++static const HChar * ++s390_irgen_NORK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK32(r3, r1, r2, "nork", Iop_Or32, False, True); ++} + +- return "ogrk"; ++static const HChar * ++s390_irgen_NOGRK(UChar r3, UChar r1, UChar r2) ++{ ++ return s390_irgen_logicalK64(r3, r1, r2, "nogrk", Iop_Or64, False, True); + } + + static const HChar * +@@ -20031,12 +20073,28 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb961: s390_format_RRF_U0RR(s390_irgen_CLGRT, RRF2_m3(ovl), + RRF2_r1(ovl), RRF2_r2(ovl), + S390_XMNM_CAB); goto ok; ++ case 0xb964: s390_format_RRF_R0RR2(s390_irgen_NNGRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb965: s390_format_RRF_R0RR2(s390_irgen_OCGRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb966: s390_format_RRF_R0RR2(s390_irgen_NOGRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb967: s390_format_RRF_R0RR2(s390_irgen_NXGRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; + case 0xb972: s390_format_RRF_U0RR(s390_irgen_CRT, RRF2_m3(ovl), + RRF2_r1(ovl), RRF2_r2(ovl), + S390_XMNM_CAB); goto ok; + case 0xb973: s390_format_RRF_U0RR(s390_irgen_CLRT, RRF2_m3(ovl), + RRF2_r1(ovl), RRF2_r2(ovl), + S390_XMNM_CAB); goto ok; ++ case 0xb974: s390_format_RRF_R0RR2(s390_irgen_NNRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb975: s390_format_RRF_R0RR2(s390_irgen_OCRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb976: s390_format_RRF_R0RR2(s390_irgen_NORK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; ++ case 0xb977: s390_format_RRF_R0RR2(s390_irgen_NXRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; + case 0xb980: s390_format_RRE_RR(s390_irgen_NGR, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; + case 0xb981: s390_format_RRE_RR(s390_irgen_OGR, RRE_r1(ovl), +@@ -20148,6 +20206,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9e4: s390_format_RRF_R0RR2(s390_irgen_NGRK, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; ++ case 0xb9e5: s390_format_RRF_R0RR2(s390_irgen_NCGRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); ++ goto ok; + case 0xb9e6: s390_format_RRF_R0RR2(s390_irgen_OGRK, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; +@@ -20178,6 +20239,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9f4: s390_format_RRF_R0RR2(s390_irgen_NRK, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; ++ case 0xb9f5: s390_format_RRF_R0RR2(s390_irgen_NCRK, RRF4_r3(ovl), ++ RRF4_r1(ovl), RRF4_r2(ovl)); ++ goto ok; + case 0xb9f6: s390_format_RRF_R0RR2(s390_irgen_ORK, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; +-- +2.23.0 + +From 748421b31ab6b15cc849bd6b9588ad759b807324 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 27 Jan 2021 18:11:06 +0100 +Subject: [PATCH 02/13] s390x: Misc-insn-3, "select" instructions + +Add support for the instructions SELR, SELGR, and SELFHR. +--- + VEX/priv/guest_s390_toIR.c | 43 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index f8afd5b96..41265631b 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -3113,6 +3113,16 @@ s390_format_RRF_FUFF2(const HChar *(*irgen)(UChar, UChar, UChar, UChar), + s390_disasm(ENC5(MNM, FPR, FPR, FPR, UINT), mnm, r1, r2, r3, m4); + } + ++static void ++s390_format_RRF_RURR(const HChar *(*irgen)(UChar, UChar, UChar, UChar), ++ UChar r3, UChar m4, UChar r1, UChar r2) ++{ ++ const HChar *mnm = irgen(r3, m4, r1, r2); ++ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) ++ s390_disasm(ENC5(MNM, GPR, GPR, GPR, UINT), mnm, r1, r3, r2, m4); ++} ++ + static void + s390_format_RRF_R0RR2(const HChar *(*irgen)(UChar r3, UChar r1, UChar r2), + UChar r3, UChar r1, UChar r2) +@@ -19254,6 +19264,30 @@ s390_irgen_VBPERM(UChar v1, UChar v2, UChar v3) + return "vbperm"; + } + ++static const HChar * ++s390_irgen_SELR(UChar r3, UChar m4, UChar r1, UChar r2) ++{ ++ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); ++ put_gpr_w1(r1, mkite(cond, get_gpr_w1(r2), get_gpr_w1(r3))); ++ return "selr"; ++} ++ ++static const HChar * ++s390_irgen_SELGR(UChar r3, UChar m4, UChar r1, UChar r2) ++{ ++ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); ++ put_gpr_dw0(r1, mkite(cond, get_gpr_dw0(r2), get_gpr_dw0(r3))); ++ return "selgr"; ++} ++ ++static const HChar * ++s390_irgen_SELFHR(UChar r3, UChar m4, UChar r1, UChar r2) ++{ ++ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); ++ put_gpr_w0(r1, mkite(cond, get_gpr_w0(r2), get_gpr_w0(r3))); ++ return "selfhr"; ++} ++ + /* New insns are added here. + If an insn is contingent on a facility being installed also + check whether the list of supported facilities in function +@@ -20163,6 +20197,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9bd: /* TRTRE */ goto unimplemented; + case 0xb9be: /* SRSTU */ goto unimplemented; + case 0xb9bf: /* TRTE */ goto unimplemented; ++ case 0xb9c0: s390_format_RRF_RURR(s390_irgen_SELFHR, RRF4_r3(ovl), ++ RRF4_m4(ovl), RRF4_r1(ovl), ++ RRF4_r2(ovl)); goto ok; + case 0xb9c8: s390_format_RRF_R0RR2(s390_irgen_AHHHR, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; +@@ -20203,6 +20240,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, RRF3_r3(ovl), + RRF3_r1(ovl), RRF3_r2(ovl), + S390_XMNM_LOCGR); goto ok; ++ case 0xb9e3: s390_format_RRF_RURR(s390_irgen_SELGR, RRF4_r3(ovl), ++ RRF4_m4(ovl), RRF4_r1(ovl), ++ RRF4_r2(ovl)); goto ok; + case 0xb9e4: s390_format_RRF_R0RR2(s390_irgen_NGRK, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; +@@ -20233,6 +20273,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9ed: s390_format_RRF_R0RR2(s390_irgen_MSGRKC, RRF4_r3(ovl), + RRF4_r1(ovl), RRF4_r2(ovl)); + goto ok; ++ case 0xb9f0: s390_format_RRF_RURR(s390_irgen_SELR, RRF4_r3(ovl), ++ RRF4_m4(ovl), RRF4_r1(ovl), ++ RRF4_r2(ovl)); goto ok; + case 0xb9f2: s390_format_RRF_U0RR(s390_irgen_LOCR, RRF3_r3(ovl), + RRF3_r1(ovl), RRF3_r2(ovl), + S390_XMNM_LOCR); goto ok; +-- +2.23.0 + +From 31cbd583e858f47a86ada087d21a6abc13ba04f2 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Thu, 28 Jan 2021 19:47:00 +0100 +Subject: [PATCH 03/13] s390x: Misc-insn-3, new POPCNT variant + +Add support for the new POPCNT variant that has bit 0 of the M3 field set +and yields the total number of one bits in its 64-bit operand. +--- + VEX/priv/guest_s390_toIR.c | 44 ++++++++++++++++++++++++++------------ + 1 file changed, 30 insertions(+), 14 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 41265631b..ca9e6dc03 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -3073,6 +3073,20 @@ s390_format_RRF_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), + s390_disasm(ENC3(XMNM, GPR, GPR), xmnm_kind, m3, r1, r2); + } + ++static void ++s390_format_RRFa_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), ++ UChar m3, UChar r1, UChar r2) ++{ ++ const HChar *mnm = irgen(m3, r1, r2); ++ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) { ++ if (m3 != 0) ++ s390_disasm(ENC4(MNM, GPR, GPR, UINT), mnm, r1, r2, m3); ++ else ++ s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2); ++ } ++} ++ + static void + s390_format_RRF_F0FF2(const HChar *(*irgen)(UChar, UChar, UChar), + UChar r3, UChar r1, UChar r2) +@@ -15112,30 +15126,32 @@ s390_irgen_FLOGR(UChar r1, UChar r2) + } + + static const HChar * +-s390_irgen_POPCNT(UChar r1, UChar r2) ++s390_irgen_POPCNT(UChar m3, UChar r1, UChar r2) + { +- Int i; ++ s390_insn_assert("popcnt", (m3 & 7) == 0); ++ ++ static const ULong masks[] = { ++ 0x5555555555555555, 0x3333333333333333, 0x0F0F0F0F0F0F0F0F, ++ 0x00FF00FF00FF00FF, 0x0000FFFF0000FFFF, 0x00000000FFFFFFFF, ++ }; ++ Int i, n; + IRTemp val = newTemp(Ity_I64); +- IRTemp mask[3]; + + assign(val, get_gpr_dw0(r2)); +- for (i = 0; i < 3; i++) { +- mask[i] = newTemp(Ity_I64); +- } +- assign(mask[0], mkU64(0x5555555555555555ULL)); +- assign(mask[1], mkU64(0x3333333333333333ULL)); +- assign(mask[2], mkU64(0x0F0F0F0F0F0F0F0FULL)); +- for (i = 0; i < 3; i++) { ++ n = (m3 & 8) ? 6 : 3; ++ for (i = 0; i < n; i++) { ++ IRTemp mask = newTemp(Ity_I64); + IRTemp tmp = newTemp(Ity_I64); + ++ assign (mask, mkU64(masks[i])); + assign(tmp, + binop(Iop_Add64, + binop(Iop_And64, + mkexpr(val), +- mkexpr(mask[i])), ++ mkexpr(mask)), + binop(Iop_And64, + binop(Iop_Shr64, mkexpr(val), mkU8(1 << i)), +- mkexpr(mask[i])))); ++ mkexpr(mask)))); + val = tmp; + } + s390_cc_thunk_putZ(S390_CC_OP_BITWISE, val); +@@ -20235,8 +20251,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + case 0xb9e0: s390_format_RRF_U0RR(s390_irgen_LOCFHR, RRF3_r3(ovl), + RRF3_r1(ovl), RRF3_r2(ovl), + S390_XMNM_LOCFHR); goto ok; +- case 0xb9e1: s390_format_RRE_RR(s390_irgen_POPCNT, RRE_r1(ovl), +- RRE_r2(ovl)); goto ok; ++ case 0xb9e1: s390_format_RRFa_U0RR(s390_irgen_POPCNT, RRF3_r3(ovl), ++ RRF3_r1(ovl), RRF3_r2(ovl)); goto ok; + case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, RRF3_r3(ovl), + RRF3_r1(ovl), RRF3_r2(ovl), + S390_XMNM_LOCGR); goto ok; +-- +2.23.0 + +From 64352d57f93711ce76fd481558dcf6d65e26b19f Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Fri, 29 Jan 2021 20:13:05 +0100 +Subject: [PATCH 04/13] s390x: Misc-insn-3, MVCRL + +Add support for the "move right to left" instruction MVCRL. +--- + VEX/priv/guest_s390_toIR.c | 47 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 47 insertions(+) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index ca9e6dc03..9f7d98f8c 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -3562,6 +3562,25 @@ s390_format_SS_L0RDRD(const HChar *(*irgen)(UChar, IRTemp, IRTemp), + s390_disasm(ENC3(MNM, UDLB, UDXB), mnm, d1, l, b1, d2, 0, b2); + } + ++static void ++s390_format_SSE_RDRD(const HChar *(*irgen)(IRTemp, IRTemp), ++ UChar b1, UShort d1, UChar b2, UShort d2) ++{ ++ const HChar *mnm; ++ IRTemp op1addr = newTemp(Ity_I64); ++ IRTemp op2addr = newTemp(Ity_I64); ++ ++ assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) : ++ mkU64(0))); ++ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : ++ mkU64(0))); ++ ++ mnm = irgen(op1addr, op2addr); ++ ++ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) ++ s390_disasm(ENC2(UDXB, UDXB), mnm, d1, 0, b1, d2, 0, b2); ++} ++ + static void + s390_format_SIL_RDI(const HChar *(*irgen)(UShort i2, IRTemp op1addr), + UChar b1, UShort d1, UShort i2) +@@ -13667,6 +13686,31 @@ s390_irgen_MVCIN(UChar length, IRTemp start1, IRTemp start2) + return "mvcin"; + } + ++static const HChar * ++s390_irgen_MVCRL(IRTemp op1addr, IRTemp op2addr) ++{ ++ IRTemp counter = newTemp(Ity_I64); ++ IRTemp offset = newTemp(Ity_I64); ++ ++ assign(counter, get_counter_dw0()); ++ /* offset = length - 1 - counter, where length-1 is specified in r0 */ ++ assign(offset, ++ binop(Iop_Sub64, ++ unop(Iop_16Uto64, ++ binop(Iop_And16, get_gpr_hw3(0), mkU16(0xfff))), ++ mkexpr(counter))); ++ ++ store(binop(Iop_Add64, mkexpr(op1addr), mkexpr(offset)), ++ load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkexpr(offset)))); ++ ++ /* Check for end of field */ ++ put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); ++ iterate_if(binop(Iop_CmpNE64, mkexpr(offset), mkU64(0))); ++ put_counter_dw0(mkU64(0)); ++ ++ return "mvcrl"; ++} ++ + static const HChar * + s390_irgen_MVCL(UChar r1, UChar r2) + { +@@ -22217,6 +22261,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe500ULL: /* LASP */ goto unimplemented; + case 0xe501ULL: /* TPROT */ goto unimplemented; + case 0xe502ULL: /* STRAG */ goto unimplemented; ++ case 0xe50aULL: s390_format_SSE_RDRD(s390_irgen_MVCRL, ++ SS_b1(ovl), SS_d1(ovl), ++ SS_b2(ovl), SS_d2(ovl)); goto ok; + case 0xe50eULL: /* MVCSK */ goto unimplemented; + case 0xe50fULL: /* MVCDK */ goto unimplemented; + case 0xe544ULL: s390_format_SIL_RDI(s390_irgen_MVHHI, SIL_b1(ovl), +-- +2.23.0 + +From 6cc4d66cc3a999253d9a57e2b5c75aeb67f77918 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 2 Feb 2021 20:15:02 +0100 +Subject: [PATCH 05/13] s390x: Misc-insn-3, test case + +Add a test case for the new instructions in the miscellaneous instruction +extensions facitility 3. +--- + .gitignore | 1 + + none/tests/s390x/Makefile.am | 3 +- + none/tests/s390x/misc3.c | 182 ++++++++++++++++++++++++++++++ + none/tests/s390x/misc3.stderr.exp | 2 + + none/tests/s390x/misc3.stdout.exp | 103 +++++++++++++++++ + none/tests/s390x/misc3.vgtest | 1 + + 6 files changed, 291 insertions(+), 1 deletion(-) + create mode 100644 none/tests/s390x/misc3.c + create mode 100644 none/tests/s390x/misc3.stderr.exp + create mode 100644 none/tests/s390x/misc3.stdout.exp + create mode 100644 none/tests/s390x/misc3.vgtest + +diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am +index a0fb92ef5..2fd45ec1e 100644 +--- a/none/tests/s390x/Makefile.am ++++ b/none/tests/s390x/Makefile.am +@@ -19,7 +19,8 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ + spechelper-ltr spechelper-or \ + spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ + spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ +- vector_float add-z14 sub-z14 mul-z14 bic ++ vector_float add-z14 sub-z14 mul-z14 bic \ ++ misc3 + + if BUILD_DFP_TESTS + INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo +diff --git a/none/tests/s390x/misc3.c b/none/tests/s390x/misc3.c +new file mode 100644 +index 000000000..ae6e8d4c2 +--- /dev/null ++++ b/none/tests/s390x/misc3.c +@@ -0,0 +1,182 @@ ++#include ++ ++/* -- Logical instructions -- */ ++ ++#define TEST_GENERATE(opcode,insn) \ ++ static void test_##insn(unsigned long a, unsigned long b) \ ++ { \ ++ unsigned long out = 0xdecaffee42424242; \ ++ int cc; \ ++ \ ++ __asm__( \ ++ "cr 0,0\n\t" /* Clear CC */ \ ++ ".insn rrf,0x" #opcode "0000,%[out],%[a],%[b],0\n\t" \ ++ "ipm %[cc]\n\t" \ ++ "srl %[cc],28\n" \ ++ : [out] "+d" (out), \ ++ [cc] "=d" (cc) \ ++ : [a] "d" (a), \ ++ [b] "d" (b) \ ++ : "cc"); \ ++ \ ++ printf("\t%016lx %016lx -> %016lx cc=%d\n", \ ++ a, b, out, cc); \ ++ } ++ ++#define TEST_EXEC(opcode,insn) \ ++ do { \ ++ puts(#insn); \ ++ test_##insn(0, 0); \ ++ test_##insn(0, -1); \ ++ test_##insn(-1, 0); \ ++ test_##insn(-1, -1); \ ++ test_##insn(0x012345678abcdef, 0); \ ++ test_##insn(0x012345678abcdef, -1); \ ++ test_##insn(0x55555555aaaaaaaa, 0xaaaaaaaa55555555); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(b9f5,ncrk); \ ++ XTEST(b9e5,ncgrk); \ ++ XTEST(b974,nnrk); \ ++ XTEST(b964,nngrk); \ ++ XTEST(b976,nork); \ ++ XTEST(b966,nogrk); \ ++ XTEST(b977,nxrk); \ ++ XTEST(b967,nxgrk); \ ++ XTEST(b975,ocrk); \ ++ XTEST(b965,ocgrk); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_logical_insns() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++#undef INSNS ++#undef TEST_GENERATE ++#undef TEST_EXEC ++ ++ ++/* -- Full population count -- */ ++ ++static void test_popcnt(unsigned long op2) ++{ ++ unsigned long result; ++ int cc; ++ ++ __asm__(".insn rrf,0xb9e10000,%[result],%[op2],8,0\n\t" ++ "ipm %[cc]\n\t" ++ "srl %[cc],28\n" ++ : [result]"=d" (result), ++ [cc]"=d" (cc) ++ : [op2]"d" (op2) ++ : "cc"); ++ printf("\t%016lx -> %2lu cc=%d\n", op2, result, cc); ++} ++ ++static int test_all_popcnt() ++{ ++ puts("popcnt"); ++ test_popcnt(0); ++ test_popcnt(1); ++ test_popcnt(0x8000000000000000); ++ test_popcnt(-1UL); ++ test_popcnt(0xff427e3800556bcd); ++ return 0; ++} ++ ++/* -- Select -- */ ++ ++#define TEST_GENERATE(opcode,insn) \ ++ static void test_##insn(unsigned long a, unsigned long b) \ ++ { \ ++ unsigned long out0 = 0x0cafebad0badcafe; \ ++ unsigned long out1 = 0x0badcafe0cafebad; \ ++ \ ++ __asm__( \ ++ "cr 0,0\n\t" /* Clear CC */ \ ++ ".insn rrf,0x" #opcode "0000,%[out0],%[a],%[b],8\n\t" \ ++ ".insn rrf,0x" #opcode "0000,%[out1],%[a],%[b],7\n\t" \ ++ : [out0] "+d" (out0), \ ++ [out1] "+d" (out1) \ ++ : [a] "d" (a), \ ++ [b] "d" (b) \ ++ : ); \ ++ \ ++ printf("\t%016lx %016lx -> %016lx %016lx\n", \ ++ a, b, out0, out1); \ ++ } ++ ++#define TEST_EXEC(opcode,insn) \ ++ do { \ ++ puts(#insn); \ ++ test_##insn(-1, 0); \ ++ test_##insn(0, -1); \ ++ test_##insn(0x1234567890abcdef, 0xfedcba9876543210); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(b9f0,selr); \ ++ XTEST(b9e3,selgr); \ ++ XTEST(b9c0,selfhr); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_select() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++#undef INSNS ++#undef TEST_GENERATE ++#undef TEST_EXEC ++ ++ ++/* -- Move right to left -- */ ++ ++static void test_mvcrl(void *to, void *from, size_t len) ++{ ++ len -= 1; ++ __asm__("lgr 0,%[len]\n\t" ++ ".insn sse,0xe50a00000000,%[to],%[from]\n\t" ++ : [to] "+Q" (*(struct { char c[len]; } *) to) ++ : [from] "Q" (*(struct { char c[len]; } *) from), ++ [len] "d" (len) ++ : ); ++} ++ ++static void test_all_mvcrl() ++{ ++ static const char pattern[] = ++ "abcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWXYZ"; ++ char buf[4 * sizeof(pattern) - 2]; ++ ++ test_mvcrl(buf, (char *) pattern, sizeof(pattern)); ++ test_mvcrl(buf + sizeof(pattern) - 1, buf, sizeof(pattern)); ++ test_mvcrl(buf + 2 * sizeof(pattern) - 2, buf, 2 * sizeof(pattern) - 1); ++ test_mvcrl(buf + 32, buf + 10, 63); ++ test_mvcrl(buf + 2, buf + 1, 256); ++ test_mvcrl(buf + 254, buf + 256, 2); ++ puts("mvcrl"); ++ for (int i = 0; i < 256; i += 64) { ++ printf("\t%.64s\n", buf + i); ++ } ++} ++ ++ ++int main() ++{ ++ test_all_logical_insns(); ++ test_all_popcnt(); ++ test_all_select(); ++ test_all_mvcrl(); ++ return 0; ++} +diff --git a/none/tests/s390x/misc3.stderr.exp b/none/tests/s390x/misc3.stderr.exp +new file mode 100644 +index 000000000..139597f9c +--- /dev/null ++++ b/none/tests/s390x/misc3.stderr.exp +@@ -0,0 +1,2 @@ ++ ++ +diff --git a/none/tests/s390x/misc3.stdout.exp b/none/tests/s390x/misc3.stdout.exp +new file mode 100644 +index 000000000..caaba4960 +--- /dev/null ++++ b/none/tests/s390x/misc3.stdout.exp +@@ -0,0 +1,103 @@ ++ncrk ++ 0000000000000000 0000000000000000 -> decaffee00000000 cc=0 ++ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> decaffee78abcdef cc=1 ++ 0012345678abcdef ffffffffffffffff -> decaffee00000000 cc=0 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeaaaaaaaa cc=1 ++ncgrk ++ 0000000000000000 0000000000000000 -> 0000000000000000 cc=0 ++ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> 0012345678abcdef cc=1 ++ 0012345678abcdef ffffffffffffffff -> 0000000000000000 cc=0 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> 55555555aaaaaaaa cc=1 ++nnrk ++ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> decaffeeffffffff cc=1 ++ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> decaffeeffffffff cc=1 ++ 0012345678abcdef ffffffffffffffff -> decaffee87543210 cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeffffffff cc=1 ++nngrk ++ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> ffffffffffffffff cc=1 ++ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> ffffffffffffffff cc=1 ++ 0012345678abcdef ffffffffffffffff -> ffedcba987543210 cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> ffffffffffffffff cc=1 ++nork ++ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> decaffee00000000 cc=0 ++ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> decaffee87543210 cc=1 ++ 0012345678abcdef ffffffffffffffff -> decaffee00000000 cc=0 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffee00000000 cc=0 ++nogrk ++ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> 0000000000000000 cc=0 ++ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 ++ 0012345678abcdef 0000000000000000 -> ffedcba987543210 cc=1 ++ 0012345678abcdef ffffffffffffffff -> 0000000000000000 cc=0 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> 0000000000000000 cc=0 ++nxrk ++ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> decaffee00000000 cc=0 ++ ffffffffffffffff ffffffffffffffff -> decaffeeffffffff cc=1 ++ 0012345678abcdef 0000000000000000 -> decaffee87543210 cc=1 ++ 0012345678abcdef ffffffffffffffff -> decaffee78abcdef cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffee00000000 cc=0 ++nxgrk ++ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> 0000000000000000 cc=0 ++ ffffffffffffffff ffffffffffffffff -> ffffffffffffffff cc=1 ++ 0012345678abcdef 0000000000000000 -> ffedcba987543210 cc=1 ++ 0012345678abcdef ffffffffffffffff -> 0012345678abcdef cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> 0000000000000000 cc=0 ++ocrk ++ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> decaffeeffffffff cc=1 ++ 0012345678abcdef 0000000000000000 -> decaffeeffffffff cc=1 ++ 0012345678abcdef ffffffffffffffff -> decaffee78abcdef cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeaaaaaaaa cc=1 ++ocgrk ++ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 ++ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 ++ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 ++ ffffffffffffffff ffffffffffffffff -> ffffffffffffffff cc=1 ++ 0012345678abcdef 0000000000000000 -> ffffffffffffffff cc=1 ++ 0012345678abcdef ffffffffffffffff -> 0012345678abcdef cc=1 ++ 55555555aaaaaaaa aaaaaaaa55555555 -> 55555555aaaaaaaa cc=1 ++popcnt ++ 0000000000000000 -> 0 cc=0 ++ 0000000000000001 -> 1 cc=1 ++ 8000000000000000 -> 1 cc=1 ++ ffffffffffffffff -> 64 cc=1 ++ ff427e3800556bcd -> 33 cc=1 ++selr ++ ffffffffffffffff 0000000000000000 -> 0cafebadffffffff 0badcafe00000000 ++ 0000000000000000 ffffffffffffffff -> 0cafebad00000000 0badcafeffffffff ++ 1234567890abcdef fedcba9876543210 -> 0cafebad90abcdef 0badcafe76543210 ++selgr ++ ffffffffffffffff 0000000000000000 -> ffffffffffffffff 0000000000000000 ++ 0000000000000000 ffffffffffffffff -> 0000000000000000 ffffffffffffffff ++ 1234567890abcdef fedcba9876543210 -> 1234567890abcdef fedcba9876543210 ++selfhr ++ ffffffffffffffff 0000000000000000 -> ffffffff0badcafe 000000000cafebad ++ 0000000000000000 ffffffffffffffff -> 000000000badcafe ffffffff0cafebad ++ 1234567890abcdef fedcba9876543210 -> 123456780badcafe fedcba980cafebad ++mvcrl ++ abbcdefghijklmnopqrstuvwxyz-01234klmnopqrstuvwxyz-0123456789.ABC ++ DEFGHIJKLMNOPQRSTUVWXYZabcdefghi456789.ABCDEFGHIJKLMNOPQRSTUVWXY ++ Zabcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWXY ++ Zabcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWZ +diff --git a/none/tests/s390x/misc3.vgtest b/none/tests/s390x/misc3.vgtest +new file mode 100644 +index 000000000..d051a06bd +--- /dev/null ++++ b/none/tests/s390x/misc3.vgtest +@@ -0,0 +1 @@ ++prog: misc3 +-- +2.23.0 + +From 401b51d79886362d1962dc487db45ac91462eaa0 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 7 Apr 2021 12:29:32 +0200 +Subject: [PATCH 06/13] s390x: Vec-enh-2, extend VSL, VSRA, and VSRL + +The vector-enhancements facility 2 extends the existing bitwise vector +shift instructions VSL, VSRA, and VSRL. Now they allow the shift +vector (the third operand) to contain different shift amounts for each +byte. Add support for these new forms. +--- + VEX/priv/guest_s390_toIR.c | 58 ++++++++++++++++++++++++++++++-------- + 1 file changed, 47 insertions(+), 11 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 9f7d98f8c..622d5a02e 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -17983,30 +17983,66 @@ s390_irgen_VERLL(UChar v1, IRTemp op2addr, UChar v3, UChar m4) + static const HChar * + s390_irgen_VSL(UChar v1, UChar v2, UChar v3) + { +- IRTemp shift_amount = newTemp(Ity_I8); +- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); +- +- put_vr_qw(v1, binop(Iop_ShlV128, get_vr_qw(v2), mkexpr(shift_amount))); ++ IRTemp a = newTemp(Ity_V128); ++ IRTemp b = newTemp(Ity_V128); ++ ++ assign(a, get_vr_qw(v2)); ++ assign(b, get_vr_qw(v3)); ++ ++ put_vr_qw(v1, ++ binop(Iop_OrV128, ++ binop(Iop_Shl8x16, mkexpr(a), mkexpr(b)), ++ binop(Iop_Shr8x16, ++ binop(Iop_Shr8x16, ++ binop(Iop_ShlV128, mkexpr(a), mkU8(8)), ++ unop(Iop_NotV128, mkexpr(b))), ++ unop(Iop_Dup8x16, mkU8(1))))); + return "vsl"; + } + + static const HChar * + s390_irgen_VSRL(UChar v1, UChar v2, UChar v3) + { +- IRTemp shift_amount = newTemp(Ity_I8); +- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); ++ IRTemp a = newTemp(Ity_V128); ++ IRTemp b = newTemp(Ity_V128); + +- put_vr_qw(v1, binop(Iop_ShrV128, get_vr_qw(v2), mkexpr(shift_amount))); ++ assign(a, get_vr_qw(v2)); ++ assign(b, get_vr_qw(v3)); ++ ++ put_vr_qw(v1, ++ binop(Iop_OrV128, ++ binop(Iop_Shr8x16, mkexpr(a), mkexpr(b)), ++ binop(Iop_Shl8x16, ++ binop(Iop_Shl8x16, ++ binop(Iop_ShrV128, mkexpr(a), mkU8(8)), ++ unop(Iop_NotV128, mkexpr(b))), ++ unop(Iop_Dup8x16, mkU8(1))))); + return "vsrl"; + } + + static const HChar * + s390_irgen_VSRA(UChar v1, UChar v2, UChar v3) + { +- IRTemp shift_amount = newTemp(Ity_I8); +- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); +- +- put_vr_qw(v1, binop(Iop_SarV128, get_vr_qw(v2), mkexpr(shift_amount))); ++ IRTemp a = newTemp(Ity_V128); ++ IRTemp b = newTemp(Ity_V128); ++ ++ assign(a, get_vr_qw(v2)); ++ assign(b, get_vr_qw(v3)); ++ ++ /* Shift-right: first byte arithmetically, all others logically */ ++ IRExpr* elems_shifted = ++ binop(Iop_Sar8x16, ++ binop(Iop_Shr8x16, mkexpr(a), ++ binop(Iop_AndV128, mkexpr(b), mkV128(0x7fff))), ++ binop(Iop_AndV128, mkexpr(b), mkV128(0x8000))); ++ /* Then OR the appropriate bits from the byte to the left */ ++ put_vr_qw(v1, ++ binop(Iop_OrV128, elems_shifted, ++ binop(Iop_Shl8x16, ++ binop(Iop_Shl8x16, ++ binop(Iop_ShrV128, mkexpr(a), mkU8(8)), ++ unop(Iop_NotV128, mkexpr(b))), ++ unop(Iop_Dup8x16, mkU8(1))))); + return "vsra"; + } + +-- +2.23.0 + +From 3fdf065d0bf26a02d6d93a812a6571a287379c36 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Thu, 11 Feb 2021 20:02:03 +0100 +Subject: [PATCH 07/13] s390x: Vec-enh-2, extend VCDG, VCDLG, VCGD, and VCLGD + +The vector-enhancements facility 2 extends the vector floating-point +conversion instructions VCDG, VCDLG, VCGD, and VCLGD. In addition to +64-bit elements, they now also handle 32-bit elements. Add support for +these new forms. +--- + VEX/priv/guest_s390_toIR.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 622d5a02e..11271a1c9 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -18794,44 +18794,48 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, Bool rounding, + static const HChar * + s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vcdg", m3 == 3); +- +- s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, True, +- v1, v2, m3, m4, m5); ++ s390_insn_assert("vcdg", m3 == 2 || m3 == 3); + ++ s390_vector_fp_convert(m3 == 2 ? Iop_I32StoF32 : Iop_I64StoF64, ++ m3 == 2 ? Ity_I32 : Ity_I64, ++ m3 == 2 ? Ity_F32 : Ity_F64, ++ True, v1, v2, m3, m4, m5); + return "vcdg"; + } + + static const HChar * + s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vcdlg", m3 == 3); +- +- s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, True, +- v1, v2, m3, m4, m5); ++ s390_insn_assert("vcdlg", m3 == 2 || m3 == 3); + ++ s390_vector_fp_convert(m3 == 2 ? Iop_I32UtoF32 : Iop_I64UtoF64, ++ m3 == 2 ? Ity_I32 : Ity_I64, ++ m3 == 2 ? Ity_F32 : Ity_F64, ++ True, v1, v2, m3, m4, m5); + return "vcdlg"; + } + + static const HChar * + s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vcgd", m3 == 3); +- +- s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, True, +- v1, v2, m3, m4, m5); ++ s390_insn_assert("vcgd", m3 == 2 || m3 == 3); + ++ s390_vector_fp_convert(m3 == 2 ? Iop_F32toI32S : Iop_F64toI64S, ++ m3 == 2 ? Ity_F32 : Ity_F64, ++ m3 == 2 ? Ity_I32 : Ity_I64, ++ True, v1, v2, m3, m4, m5); + return "vcgd"; + } + + static const HChar * + s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vclgd", m3 == 3); +- +- s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, True, +- v1, v2, m3, m4, m5); ++ s390_insn_assert("vclgd", m3 == 2 || m3 == 3); + ++ s390_vector_fp_convert(m3 == 2 ? Iop_F32toI32U : Iop_F64toI64U, ++ m3 == 2 ? Ity_F32 : Ity_F64, ++ m3 == 2 ? Ity_I32 : Ity_I64, ++ True, v1, v2, m3, m4, m5); + return "vclgd"; + } + +-- +2.23.0 + +From d195bf17388572e85474c7ded4b5bd0e4774637d Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 16 Feb 2021 16:19:31 +0100 +Subject: [PATCH 08/13] s390x: Vec-enh-2, VLBR and friends + +Add support for the new byte- and element-swapping vector load/store +instructions VLEBRH, VLEBRG, VLEBRF, VLLEBRZ, VLBRREP, VLBR, VLER, +VSTEBRH, VSTEBRG, VSTEBRF, VSTBR, and VSTER. +--- + VEX/priv/guest_s390_toIR.c | 256 +++++++++++++++++++++++++++++++++++++ + VEX/priv/host_s390_isel.c | 9 ++ + 2 files changed, 265 insertions(+) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 11271a1c9..f65b42705 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -19388,6 +19388,209 @@ s390_irgen_SELFHR(UChar r3, UChar m4, UChar r1, UChar r2) + return "selfhr"; + } + ++/* Helper function that byte-swaps each element of its V128 input operand */ ++static IRExpr * ++s390_byteswap_elements(IRExpr* v, UChar m) ++{ ++ static const ULong perm[4][2] = { ++ { 0x0100030205040706, 0x09080b0a0d0c0f0e }, /* 2-byte elements */ ++ { 0x0302010007060504, 0x0b0a09080f0e0d0c }, /* 4-byte elements */ ++ { 0x0706050403020100, 0x0f0e0d0c0b0a0908 }, /* 8-byte elements */ ++ { 0x0f0e0d0c0b0a0908, 0x0706050403020100 }, /* whole vector */ ++ }; ++ return binop(Iop_Perm8x16, v, binop(Iop_64HLtoV128, ++ mkU64(perm[m - 1][0]), ++ mkU64(perm[m - 1][1]))); ++} ++ ++/* Helper function that reverses the elements of its V128 input operand */ ++static IRExpr * ++s390_reverse_elements(IRExpr* v, UChar m) ++{ ++ static const ULong perm[3][2] = { ++ { 0x0e0f0c0d0a0b0809, 0x0607040502030001 }, /* 2-byte elements */ ++ { 0x0c0d0e0f08090a0b, 0x0405060700010203 }, /* 4-byte elements */ ++ { 0x08090a0b0c0d0e0f, 0x0001020304050607 }, /* 8-byte elements */ ++ }; ++ return binop(Iop_Perm8x16, v, binop(Iop_64HLtoV128, ++ mkU64(perm[m - 1][0]), ++ mkU64(perm[m - 1][1]))); ++} ++ ++static const HChar * ++s390_irgen_VLBR(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vlbr", m3 >= 1 && m3 <= 4); ++ put_vr_qw(v1, s390_byteswap_elements(load(Ity_V128, mkexpr(op2addr)), m3)); ++ return "vlbr"; ++} ++ ++static const HChar * ++s390_irgen_VSTBR(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vstbr", m3 >= 1 && m3 <= 4); ++ store(mkexpr(op2addr), s390_byteswap_elements(get_vr_qw(v1), m3)); ++ return "vstbr"; ++} ++ ++static const HChar * ++s390_irgen_VLER(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vler", m3 >= 1 && m3 <= 3); ++ put_vr_qw(v1, s390_reverse_elements(load(Ity_V128, mkexpr(op2addr)), m3)); ++ return "vler"; ++} ++ ++static const HChar * ++s390_irgen_VSTER(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vstbr", m3 >= 1 && m3 <= 4); ++ store(mkexpr(op2addr), s390_reverse_elements(get_vr_qw(v1), m3)); ++ return "vstbr"; ++} ++ ++/* Helper function that combines its two V128 operands by replacing element 'to' ++ in 'a' by byte-swapped element 'from' in 'b' */ ++static IRExpr * ++s390_insert_byteswapped(IRExpr* a, IRExpr* b, UChar m, UChar to, UChar from) ++{ ++ UInt elem_size = 1U << m; ++ UInt start = elem_size * to; ++ UInt end = start + elem_size - 1; ++ UInt offs = end + elem_size * from + 16; ++ UInt i; ++ ++ ULong permH = 0; ++ for (i = 0; i < 8; i++) { ++ permH = (permH << 8) | (i >= start && i <= end ? offs - i : i); ++ } ++ ULong permL = 0; ++ for (i = 8; i < 16; i++) { ++ permL = (permL << 8) | (i >= start && i <= end ? offs - i : i); ++ } ++ return triop(Iop_Perm8x16x2, a, b, binop(Iop_64HLtoV128, ++ mkU64(permH), mkU64(permL))); ++} ++ ++static const HChar * ++s390_irgen_VLEBRH(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vlebrh", m3 <= 7); ++ IRTemp op2 = newTemp(Ity_I16); ++ assign(op2, load(Ity_I16, mkexpr(op2addr))); ++ put_vr(v1, Ity_I16, m3, binop(Iop_Or16, ++ binop(Iop_Shl16, mkexpr(op2), mkU8(8)), ++ binop(Iop_Shr16, mkexpr(op2), mkU8(8)))); ++ return "vlebrh"; ++} ++ ++static const HChar * ++s390_irgen_VLEBRF(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vlebrf", m3 <= 3); ++ IRTemp op1 = newTemp(Ity_V128); ++ assign(op1, get_vr_qw(v1)); ++ IRTemp op2 = newTemp(Ity_I64); ++ assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr)))); ++ IRExpr* b = binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)); ++ put_vr_qw(v1, s390_insert_byteswapped(mkexpr(op1), b, 2, m3, 3)); ++ return "vlebrf"; ++} ++ ++static const HChar * ++s390_irgen_VLEBRG(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vlebrg", m3 <= 1); ++ IRTemp op1 = newTemp(Ity_V128); ++ assign(op1, get_vr_qw(v1)); ++ IRTemp op2 = newTemp(Ity_I64); ++ assign(op2, load(Ity_I64, mkexpr(op2addr))); ++ IRExpr* b = binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)); ++ put_vr_qw(v1, s390_insert_byteswapped(mkexpr(op1), b, 3, m3, 1)); ++ return "vlebrg"; ++} ++ ++static const HChar * ++s390_irgen_VLBRREP(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vlbrrep", m3 >= 1 && m3 <= 3); ++ static const ULong perm[3] = { ++ 0x0f0e0f0e0f0e0f0e, /* 2-byte element */ ++ 0x0f0e0d0c0f0e0d0c, /* 4-byte element */ ++ 0x0f0e0d0c0b0a0908 /* 8-byte element */ ++ }; ++ IRExpr* permHL = mkU64(perm[m3 - 1]); ++ IRTemp op2 = newTemp(Ity_I64); ++ if (m3 == 3) ++ assign(op2, load(Ity_I64, mkexpr(op2addr))); ++ else ++ assign(op2, unop(m3 == 2 ? Iop_32Uto64 : Iop_16Uto64, ++ load(s390_vr_get_type(m3), mkexpr(op2addr)))); ++ put_vr_qw(v1, binop(Iop_Perm8x16, ++ binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)), ++ binop(Iop_64HLtoV128, permHL, permHL))); ++ return "vlbrrep"; ++} ++ ++static const HChar * ++s390_irgen_VLLEBRZ(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vllebrz", (m3 >= 1 && m3 <= 3) || m3 == 6); ++ static const ULong perm[6] = { ++ 0x0000000000000f0e, /* 2-byte element */ ++ 0x000000000f0e0d0c, /* 4-byte element */ ++ 0x0f0e0d0c0b0a0908, /* 8-byte element */ ++ 0, /* invalid (4) */ ++ 0, /* invalid (5) */ ++ 0x0f0e0d0c00000000, /* 4-byte element, left-aligned */ ++ }; ++ IRExpr* permH = mkU64(perm[m3 - 1]); ++ IRTemp op2 = newTemp(Ity_I64); ++ if (m3 == 3) ++ assign(op2, load(Ity_I64, mkexpr(op2addr))); ++ else ++ assign(op2, unop((m3 & 3) == 2 ? Iop_32Uto64 : Iop_16Uto64, ++ load(s390_vr_get_type(m3 & 3), mkexpr(op2addr)))); ++ put_vr_qw(v1, binop(Iop_Perm8x16, ++ binop(Iop_64HLtoV128, mkU64(0), mkexpr(op2)), ++ binop(Iop_64HLtoV128, permH, mkU64(0)))); ++ return "vllebrz"; ++} ++ ++static const HChar * ++s390_irgen_VSTEBRH(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vstebrh", m3 <= 7); ++ IRTemp op1 = newTemp(Ity_I16); ++ assign(op1, get_vr(v1, Ity_I16, m3)); ++ store(mkexpr(op2addr), binop(Iop_Or16, ++ binop(Iop_Shl16, mkexpr(op1), mkU8(8)), ++ binop(Iop_Shr16, mkexpr(op1), mkU8(8)))); ++ return "vstebrh"; ++} ++ ++static const HChar * ++s390_irgen_VSTEBRF(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vstebrf", m3 <= 3); ++ IRTemp op1 = newTemp(Ity_V128); ++ assign(op1, get_vr_qw(v1)); ++ IRExpr* b = s390_insert_byteswapped(mkexpr(op1), mkexpr(op1), 2, 3, m3); ++ store(mkexpr(op2addr), unop(Iop_V128to32, b)); ++ return "vstebrf"; ++} ++ ++static const HChar * ++s390_irgen_VSTEBRG(UChar v1, IRTemp op2addr, UChar m3) ++{ ++ s390_insn_assert("vstebrg", m3 <= 1); ++ IRTemp op1 = newTemp(Ity_V128); ++ assign(op1, get_vr_qw(v1)); ++ IRExpr* b = s390_insert_byteswapped(mkexpr(op1), mkexpr(op1), 3, 1, m3); ++ store(mkexpr(op2addr), unop(Iop_V128to64, b)); ++ return "vstebrg"; ++} ++ + /* New insns are added here. + If an insn is contingent on a facility being installed also + check whether the list of supported facilities in function +@@ -21003,6 +21206,59 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + RXY_x2(ovl), RXY_b2(ovl), + RXY_dl2(ovl), + RXY_dh2(ovl)); goto ok; ++ case 0xe60000000001ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRH, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000002ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRG, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000003ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRF, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000004ULL: s390_format_VRX_VRRDM(s390_irgen_VLLEBRZ, ++ VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000005ULL: s390_format_VRX_VRRDM(s390_irgen_VLBRREP, ++ VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000006ULL: s390_format_VRX_VRRDM(s390_irgen_VLBR, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000007ULL: s390_format_VRX_VRRDM(s390_irgen_VLER, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe60000000009ULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRH, ++ VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe6000000000aULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRG, ++ VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe6000000000bULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRF, ++ VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe6000000000eULL: s390_format_VRX_VRRDM(s390_irgen_VSTBR, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; ++ case 0xe6000000000fULL: s390_format_VRX_VRRDM(s390_irgen_VSTER, VRX_v1(ovl), ++ VRX_x2(ovl), VRX_b2(ovl), ++ VRX_d2(ovl), VRX_m3(ovl), ++ VRX_rxb(ovl)); goto ok; + case 0xe60000000034ULL: /* VPKZ */ goto unimplemented; + case 0xe60000000035ULL: s390_format_VSI_URDV(s390_irgen_VLRL, VSI_v1(ovl), + VSI_b2(ovl), VSI_d2(ovl), +diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c +index ee20c6711..06e195957 100644 +--- a/VEX/priv/host_s390_isel.c ++++ b/VEX/priv/host_s390_isel.c +@@ -4189,6 +4189,15 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) + return dst; + } + ++ case Iop_Perm8x16: ++ size = 16; ++ reg1 = s390_isel_vec_expr(env, arg1); ++ reg2 = s390_isel_vec_expr(env, arg2); ++ ++ addInstr(env, s390_insn_vec_triop(size, S390_VEC_PERM, ++ dst, reg1, reg1, reg2)); ++ return dst; ++ + case Iop_CmpEQ8x16: + size = 1; + vec_binop = S390_VEC_COMPARE_EQUAL; +-- +2.23.0 + +From f7447f4c73b2d0fb4eb3827c3709f378f6c9c656 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 23 Feb 2021 19:10:37 +0100 +Subject: [PATCH 09/13] s390x: Vec-enh-2, VSLD and VSRD + +Support the new "vector shift left/right double by bit" instructions VSLD +and VSRD. +--- + VEX/priv/guest_s390_toIR.c | 50 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index f65b42705..aa429d085 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -18228,6 +18228,48 @@ s390_irgen_VSLDB(UChar v1, UChar v2, UChar v3, UChar i4) + return "vsldb"; + } + ++static const HChar * ++s390_irgen_VSLD(UChar v1, UChar v2, UChar v3, UChar i4) ++{ ++ s390_insn_assert("vsld", i4 <= 7); ++ ++ if (i4 == 0) { ++ /* Just copy v2. */ ++ put_vr_qw(v1, get_vr_qw(v2)); ++ } else { ++ /* Concatenate v2's tail with v3's head. */ ++ put_vr_qw(v1, ++ binop(Iop_OrV128, ++ binop(Iop_ShlV128, get_vr_qw(v2), mkU8(i4)), ++ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(128 - i4)) ++ ) ++ ); ++ } ++ ++ return "vsld"; ++} ++ ++static const HChar * ++s390_irgen_VSRD(UChar v1, UChar v2, UChar v3, UChar i4) ++{ ++ s390_insn_assert("vsrd", i4 <= 7); ++ ++ if (i4 == 0) { ++ /* Just copy v3. */ ++ put_vr_qw(v1, get_vr_qw(v3)); ++ } else { ++ /* Concatenate v2's tail with v3's head. */ ++ put_vr_qw(v1, ++ binop(Iop_OrV128, ++ binop(Iop_ShlV128, get_vr_qw(v2), mkU8(128 - i4)), ++ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(i4)) ++ ) ++ ); ++ } ++ ++ return "vsrd"; ++} ++ + static const HChar * + s390_irgen_VMO(UChar v1, UChar v2, UChar v3, UChar m4) + { +@@ -21541,6 +21583,14 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + case 0xe70000000085ULL: s390_format_VRR_VVV(s390_irgen_VBPERM, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_rxb(ovl)); goto ok; ++ case 0xe70000000086ULL: s390_format_VRId_VVVI(s390_irgen_VSLD, VRId_v1(ovl), ++ VRId_v2(ovl), VRId_v3(ovl), ++ VRId_i4(ovl), ++ VRId_rxb(ovl)); goto ok; ++ case 0xe70000000087ULL: s390_format_VRId_VVVI(s390_irgen_VSRD, VRId_v1(ovl), ++ VRId_v2(ovl), VRId_v3(ovl), ++ VRId_i4(ovl), ++ VRId_rxb(ovl)); goto ok; + case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl), + VRRd_v2(ovl), VRRd_v3(ovl), + VRRd_v4(ovl), VRRd_m5(ovl), +-- +2.23.0 + +From 388082bca7146f8a15814798dbfe570af2aab2a9 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 10 Mar 2021 19:22:51 +0100 +Subject: [PATCH 10/13] s390x: Vec-enh-2, VSTRS + +Support the new "vector string search" instruction VSTRS. The +implementation is a full emulation and follows a similar approach as for +the other vector string instructions. +--- + VEX/priv/guest_s390_toIR.c | 104 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 104 insertions(+) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index aa429d085..46a867475 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -17601,6 +17601,105 @@ s390_irgen_VSTRC(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) + return "vstrc"; + } + ++static const HChar * ++s390_irgen_VSTRS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) ++{ ++ s390_insn_assert("vstrs", m5 <= 2 && m6 == (m6 & 2)); ++ ++ IRTemp op2 = newTemp(Ity_V128); ++ IRTemp op3 = newTemp(Ity_V128); ++ IRTemp op4 = newTemp(Ity_I8); ++ IRTemp op2clean = newTemp(Ity_V128); ++ IRTemp op3mask = newTemp(Ity_V128); ++ IRTemp result = newTemp(Ity_V128); ++ IRTemp ccnomatch = newTemp(Ity_I64); ++ IRExpr* tmp; ++ IRExpr* match = NULL; ++ UChar elem_bits = 8 << m5; ++ IROp cmpeq_op = S390_VEC_OP3(m5, Iop_CmpEQ8x16, ++ Iop_CmpEQ16x8, Iop_CmpEQ32x4); ++ ++ assign(op2, get_vr_qw(v2)); ++ assign(op3, get_vr_qw(v3)); ++ assign(op4, get_vr_b7(v4)); ++ ++ tmp = unop(Iop_Dup32x4, ++ unop(Iop_1Sto32, binop(Iop_CmpNE8, mkexpr(op4), mkU8(16)))); ++ tmp = binop(Iop_ShrV128, tmp, binop(Iop_Shl8, mkexpr(op4), mkU8(3))); ++ ++ if (s390_vr_is_zs_set(m6)) { ++ IRTemp op2eos = newTemp(Ity_V128); ++ IRExpr* t; ++ t = binop(cmpeq_op, mkexpr(op2), mkV128(0)); ++ for (UChar i = m5; i < 4; i++) { ++ IRTemp s = newTemp(Ity_V128); ++ assign(s, t); ++ t = binop(Iop_OrV128, mkexpr(s), binop(Iop_ShrV128, mkexpr(s), ++ mkU8(8 << i))); ++ } ++ assign(op2eos, t); ++ assign(op2clean, binop(Iop_AndV128, mkexpr(op2), ++ unop(Iop_NotV128, mkexpr(op2eos)))); ++ assign(ccnomatch, binop(Iop_And64, mkU64(1), ++ unop(Iop_V128to64, mkexpr(op2eos)))); ++ ++ t = binop(cmpeq_op, mkexpr(op3), mkV128(0)); ++ for (UChar i = m5; i < 4; i++) { ++ IRTemp s = newTemp(Ity_V128); ++ assign(s, t); ++ t = binop(Iop_OrV128, mkexpr(s), binop(Iop_ShrV128, mkexpr(s), ++ mkU8(8 << i))); ++ } ++ tmp = binop(Iop_OrV128, tmp, t); ++ } else { ++ assign(op2clean, mkexpr(op2)); ++ } ++ assign(op3mask, unop(Iop_NotV128, tmp)); ++ ++ for (UChar shift = 0; shift < 128; shift += elem_bits) { ++ IRTemp s = newTemp(Ity_V128); ++ tmp = unop(Iop_NotV128, ++ binop(cmpeq_op, mkexpr(op2clean), ++ binop(Iop_ShrV128, mkexpr(op3), mkU8(shift)))); ++ assign(s, binop(Iop_CmpEQ64x2, mkV128(0), ++ binop(Iop_AndV128, mkexpr(op3mask), ++ binop(Iop_ShlV128, tmp, mkU8(shift))))); ++ tmp = mkexpr(s); ++ if (shift < 64) { ++ tmp = binop(Iop_AndV128, tmp, ++ unop(Iop_Dup16x8, binop(Iop_GetElem16x8, tmp, mkU8(4)))); ++ } ++ tmp = binop(Iop_AndV128, tmp, ++ unop(Iop_Dup16x8, mkU16(1 << (15 - shift / 8)))); ++ if (shift) ++ match = binop(Iop_OrV128, mkexpr(mktemp(Ity_V128, match)), tmp); ++ else ++ match = tmp; ++ } ++ assign(result, unop(Iop_ClzNat64, ++ binop(Iop_Or64, ++ unop(Iop_V128HIto64, match), ++ mkU64((1UL << 48) - 1)))); ++ put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(result), mkU64(0))); ++ ++ /* Set condition code. ++ 0: no match, no string terminator in op2 ++ 1: no match, string terminator found ++ 2: full match ++ 3: partial match */ ++ IRTemp cc = newTemp(Ity_I64); ++ tmp = binop(Iop_CmpLE64U, ++ binop(Iop_Add64, mkexpr(result), unop(Iop_8Uto64, mkexpr(op4))), ++ mkU64(16)); ++ assign(cc, mkite(binop(Iop_CmpEQ64, mkexpr(result), mkU64(16)), ++ s390_vr_is_zs_set(m6) ? mkexpr(ccnomatch) : mkU64(0), ++ mkite(tmp, mkU64(2), mkU64(3)))); ++ s390_cc_set(cc); ++ ++ dis_res->hint = Dis_HintVerbose; ++ return "vstrs"; ++} ++ + static const HChar * + s390_irgen_VNC(UChar v1, UChar v2, UChar v3) + { +@@ -21596,6 +21695,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) + VRRd_v4(ovl), VRRd_m5(ovl), + VRRd_m6(ovl), + VRRd_rxb(ovl)); goto ok; ++ case 0xe7000000008bULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRS, VRRd_v1(ovl), ++ VRRd_v2(ovl), VRRd_v3(ovl), ++ VRRd_v4(ovl), VRRd_m5(ovl), ++ VRRd_m6(ovl), ++ VRRd_rxb(ovl)); goto ok; + case 0xe7000000008cULL: s390_format_VRR_VVVV(s390_irgen_VPERM, VRR_v1(ovl), + VRR_v2(ovl), VRR_r3(ovl), + VRR_m4(ovl), VRR_rxb(ovl)); goto ok; +-- +2.23.0 + +From 8a079b405467fa127c6c311d7ae3c649e76106c6 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 16 Feb 2021 17:52:09 +0100 +Subject: [PATCH 11/13] s390x: Mark arch13 features as supported + +Make the STFLE instruction report the miscellaneous-instruction-extensions +facility 3 and the vector-enhancements facility 2 as supported. Indicate +support for the latter in the HWCAP vector as well. +--- + VEX/priv/guest_s390_helpers.c | 9 +++------ + coregrind/m_initimg/initimg-linux.c | 3 ++- + include/vki/vki-s390x-linux.h | 1 + + 3 files changed, 6 insertions(+), 7 deletions(-) + +diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c +index 1e04f601a..804b92a29 100644 +--- a/VEX/priv/guest_s390_helpers.c ++++ b/VEX/priv/guest_s390_helpers.c +@@ -356,9 +356,7 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) + | s390_stfle_range(51, 55) + /* 56: unassigned */ + /* 57: MSA5, not supported */ +- | s390_stfle_range(58, 60) +- /* 61: miscellaneous-instruction 3, not supported */ +- | s390_stfle_range(62, 63)), ++ | s390_stfle_range(58, 63)), + + /* === 64 .. 127 === */ + (s390_stfle_range(64, 72) +@@ -384,11 +382,10 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) + /* 143: unassigned */ + | s390_stfle_range(144, 145) + /* 146: MSA8, not supported */ +- | s390_stfle_range(147, 147) +- /* 148: vector-enhancements 2, not supported */ +- | s390_stfle_range(149, 149) ++ | s390_stfle_range(147, 149) + /* 150: unassigned */ + /* 151: DEFLATE-conversion, not supported */ ++ /* 152: vector packed decimal enhancement, not supported */ + /* 153: unassigned */ + /* 154: unassigned */ + /* 155: MSA9, not supported */ +diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c +index fc1a32ecf..37d005168 100644 +--- a/coregrind/m_initimg/initimg-linux.c ++++ b/coregrind/m_initimg/initimg-linux.c +@@ -703,7 +703,8 @@ Addr setup_client_stack( void* init_sp, + itself, is not supported by Valgrind. */ + auxv->u.a_val &= ((VKI_HWCAP_S390_TE - 1) + | VKI_HWCAP_S390_VXRS +- | VKI_HWCAP_S390_VXRS_EXT); ++ | VKI_HWCAP_S390_VXRS_EXT ++ | VKI_HWCAP_S390_VXRS_EXT2); + } + # elif defined(VGP_arm64_linux) + { +diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h +index 4ab2d3334..71b363029 100644 +--- a/include/vki/vki-s390x-linux.h ++++ b/include/vki/vki-s390x-linux.h +@@ -807,6 +807,7 @@ typedef vki_s390_regs vki_elf_gregset_t; + #define VKI_HWCAP_S390_TE 1024 + #define VKI_HWCAP_S390_VXRS 2048 + #define VKI_HWCAP_S390_VXRS_EXT 8192 ++#define VKI_HWCAP_S390_VXRS_EXT2 32768 + + + //---------------------------------------------------------------------- +-- +2.23.0 + +From 1461d9b8d0b12e55b648fbf50c5dcee30785afa2 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 17 May 2021 15:34:15 +0200 +Subject: [PATCH 12/13] s390x: Vec-enh-2, test cases + +Add test cases for verifying the new/enhanced instructions in the +vector-enhancements facility 2. For "vector string search" VSTRS add a +memcheck test case. +--- + .gitignore | 2 + + memcheck/tests/s390x/Makefile.am | 3 +- + memcheck/tests/s390x/vstrs.c | 68 ++++++ + memcheck/tests/s390x/vstrs.stderr.exp | 16 ++ + memcheck/tests/s390x/vstrs.stdout.exp | 0 + memcheck/tests/s390x/vstrs.vgtest | 2 + + none/tests/s390x/Makefile.am | 3 +- + none/tests/s390x/vec2.c | 314 ++++++++++++++++++++++++++ + none/tests/s390x/vec2.stderr.exp | 2 + + none/tests/s390x/vec2.stdout.exp | 168 ++++++++++++++ + none/tests/s390x/vec2.vgtest | 2 + + tests/s390x_features.c | 4 + + 12 files changed, 582 insertions(+), 2 deletions(-) + create mode 100644 memcheck/tests/s390x/vstrs.c + create mode 100644 memcheck/tests/s390x/vstrs.stderr.exp + create mode 100644 memcheck/tests/s390x/vstrs.stdout.exp + create mode 100644 memcheck/tests/s390x/vstrs.vgtest + create mode 100644 none/tests/s390x/vec2.c + create mode 100644 none/tests/s390x/vec2.stderr.exp + create mode 100644 none/tests/s390x/vec2.stdout.exp + create mode 100644 none/tests/s390x/vec2.vgtest + +diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am +index d183841ef..668fd9933 100644 +--- a/memcheck/tests/s390x/Makefile.am ++++ b/memcheck/tests/s390x/Makefile.am +@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am + + dist_noinst_SCRIPTS = filter_stderr + +-INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr ++INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr vstrs + + check_PROGRAMS = $(INSN_TESTS) + +@@ -18,3 +18,4 @@ AM_CCASFLAGS += @FLAG_M64@ + vstrc_CFLAGS = $(AM_CFLAGS) -march=z13 + vfae_CFLAGS = $(AM_CFLAGS) -march=z13 + vistr_CFLAGS = $(AM_CFLAGS) -march=z13 ++vstrs_CFLAGS = $(AM_CFLAGS) -march=z13 +diff --git a/memcheck/tests/s390x/vstrs.c b/memcheck/tests/s390x/vstrs.c +new file mode 100644 +index 000000000..3354c2e53 +--- /dev/null ++++ b/memcheck/tests/s390x/vstrs.c +@@ -0,0 +1,68 @@ ++#include ++#include ++ ++#define VECTOR __attribute__ ((vector_size (16))) ++ ++typedef char VECTOR char_v; ++ ++volatile char tmp; ++static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; ++ ++static char_v to_char_vec(const char *str) ++{ ++ char buf[17]; ++ char_v v; ++ ++ for (int i = 0; i < sizeof(buf); i++) { ++ char ch = str[i]; ++ if (ch == '\0') ++ break; ++ else if (ch == '$') ++ buf[i] = '\0'; ++ else if (ch != '~') ++ buf[i] = ch; ++ } ++ v = *(char_v *) buf; ++ return v; ++} ++ ++static void test_vstrs_char(const char *haystack, const char *needle, ++ int expect_res, int expect_cc) ++{ ++ int cc; ++ char_v v2val = to_char_vec(haystack); ++ char_v v3val = to_char_vec(needle); ++ ++ register unsigned long VECTOR v4 __asm__("v4") = { strlen(needle), 0 }; ++ register char_v v1 __asm__("v1"); ++ register char_v v2 __asm__("v2") = v2val; ++ register char_v v3 __asm__("v3") = v3val; ++ ++ __asm__( ++ "cr 0,0\n\t" /* Clear CC */ ++ ".short 0xe712,0x3020,0x408b\n\t" /* vstrs %v1,%v2,%v3,%v4,0,2 */ ++ "ipm %[cc]\n\t" ++ "srl %[cc],28" ++ : "=v" (v1), [cc] "=d" (cc) ++ : "v" (v2), "v" (v3), "v" (v4) ++ : "cc"); ++ ++ tmp = hex_digit[v1[7] & 0x1f]; ++ if (expect_res >= 0 && v1[7] != expect_res) ++ printf("result %u != %d\n", v1[7], expect_res); ++ ++ tmp = hex_digit[cc & 0xf]; ++ if (expect_cc >= 0 && cc != expect_cc) ++ printf("CC %d != %d\n", cc, expect_cc); ++} ++ ++int main() ++{ ++ test_vstrs_char("haystack$needle", "needle$haystack", 16, 1); ++ test_vstrs_char("haystack, needle", "needle, haystack", 10, 3); ++ test_vstrs_char("ABCDEFGH", "DEFGHI", -1, -1); ++ test_vstrs_char("match in UNDEF", "UN", 9, 2); ++ test_vstrs_char("after ~ UNDEF", "DEF", -1, -1); ++ test_vstrs_char("", "", 0, 2); ++ return 0; ++} +diff --git a/memcheck/tests/s390x/vstrs.stderr.exp b/memcheck/tests/s390x/vstrs.stderr.exp +new file mode 100644 +index 000000000..c5c3ef705 +--- /dev/null ++++ b/memcheck/tests/s390x/vstrs.stderr.exp +@@ -0,0 +1,16 @@ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrs_char (vstrs.c:50) ++ by 0x........: main (vstrs.c:63) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrs_char (vstrs.c:54) ++ by 0x........: main (vstrs.c:63) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrs_char (vstrs.c:50) ++ by 0x........: main (vstrs.c:65) ++ ++Use of uninitialised value of size 8 ++ at 0x........: test_vstrs_char (vstrs.c:54) ++ by 0x........: main (vstrs.c:65) ++ +diff --git a/memcheck/tests/s390x/vstrs.stdout.exp b/memcheck/tests/s390x/vstrs.stdout.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/s390x/vstrs.vgtest b/memcheck/tests/s390x/vstrs.vgtest +new file mode 100644 +index 000000000..fd2a29873 +--- /dev/null ++++ b/memcheck/tests/s390x/vstrs.vgtest +@@ -0,0 +1,2 @@ ++prog: vstrs ++vgopts: -q +diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am +index 2fd45ec1e..ca38db935 100644 +--- a/none/tests/s390x/Makefile.am ++++ b/none/tests/s390x/Makefile.am +@@ -20,7 +20,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ + spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ + spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ + vector_float add-z14 sub-z14 mul-z14 bic \ +- misc3 ++ misc3 vec2 + + if BUILD_DFP_TESTS + INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo +@@ -74,3 +74,4 @@ lsc2_CFLAGS = -march=z13 -DS390_TESTS_NOCOLOR + vector_string_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=5 + vector_integer_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 + vector_float_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 ++vec2_CFLAGS = $(AM_CFLAGS) -march=z13 +diff --git a/none/tests/s390x/vec2.c b/none/tests/s390x/vec2.c +new file mode 100644 +index 000000000..73b04dee4 +--- /dev/null ++++ b/none/tests/s390x/vec2.c +@@ -0,0 +1,314 @@ ++#include ++ ++#define VECTOR __attribute__ ((vector_size (16))) ++ ++typedef unsigned long VECTOR ulong_v; ++typedef float VECTOR float_v; ++ ++static const ulong_v vec_a = { 0x0123456789abcdef, 0xfedcba9876543210 }; ++static const ulong_v vec_b = { 0xfedcba9876543210, 0x0123456789abcdef }; ++static const ulong_v vec_c = { 0x8040201008040201, 0x7fbfdfeff7fbfdfe }; ++static const ulong_v vec_one = { -1, -1 }; ++static const ulong_v vec_ini = { 0x0112233445566778, 0x899aabbccddeeff0 }; ++ ++static const float_v vec_fa = { 16777215., -16777215., 42.5, 10000. }; ++static const float_v vec_fb = { 4., 3., 2., 1. }; ++ ++/* -- Vector shift -- */ ++ ++#define TEST_GENERATE(insn) \ ++ static void test_##insn(ulong_v a, ulong_v b) \ ++ { \ ++ ulong_v out; \ ++ __asm__( \ ++ #insn " %[out],%[a],%[b]" \ ++ : [out] "=v" (out) \ ++ : [a] "v" (a), \ ++ [b] "v" (b) \ ++ : ); \ ++ printf("\t%016lx %016lx\n", out[0], out[1]); \ ++ } ++ ++#define TEST_EXEC(insn) \ ++ do { \ ++ puts(#insn); \ ++ test_##insn(vec_a, vec_b); \ ++ test_##insn(vec_b, vec_a); \ ++ test_##insn(vec_c, vec_a); \ ++ test_##insn(vec_one, vec_b); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(vsl); \ ++ XTEST(vsrl); \ ++ XTEST(vsra); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_single_bitshifts() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ ++/* -- Vector load element-/byte-swapped -- */ ++ ++#define TEST_EXEC(opc1,opc2,insn,m3) \ ++ do { \ ++ puts(#insn " " #m3); \ ++ test_##insn##_##m3(vec_a); \ ++ test_##insn##_##m3(vec_b); \ ++ } while (0) ++ ++#define TEST_GENERATE(opc1,opc2,insn,m3) \ ++ static void test_##insn##_##m3(ulong_v a) \ ++ { \ ++ ulong_v out = vec_ini; \ ++ __asm__( \ ++ ".insn vrx,0x" #opc1 "00000000" #opc2 ",%[out],%[a]," #m3 \ ++ : [out] "+v" (out) \ ++ : [a] "R" (a) \ ++ : ); \ ++ printf("\t%016lx %016lx\n", out[0], out[1]); \ ++ } ++ ++#define INSNS \ ++ XTEST(e6,01, vlebrh, 0); \ ++ XTEST(e6,01, vlebrh, 7); \ ++ XTEST(e6,01, vlebrh, 2); \ ++ XTEST(e6,03, vlebrf, 0); \ ++ XTEST(e6,03, vlebrf, 3); \ ++ XTEST(e6,03, vlebrf, 1); \ ++ XTEST(e6,02, vlebrg, 0); \ ++ XTEST(e6,02, vlebrg, 1); \ ++ XTEST(e6,04, vllebrz, 1); \ ++ XTEST(e6,04, vllebrz, 2); \ ++ XTEST(e6,04, vllebrz, 3); \ ++ XTEST(e6,04, vllebrz, 6); \ ++ XTEST(e6,05, vlbrrep, 1); \ ++ XTEST(e6,05, vlbrrep, 2); \ ++ XTEST(e6,05, vlbrrep, 3); \ ++ XTEST(e6,06, vlbr, 1); \ ++ XTEST(e6,06, vlbr, 2); \ ++ XTEST(e6,06, vlbr, 3); \ ++ XTEST(e6,06, vlbr, 4); \ ++ XTEST(e6,07, vler, 1); \ ++ XTEST(e6,07, vler, 2); \ ++ XTEST(e6,07, vler, 3); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_swapped_loads() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_GENERATE ++ ++/* -- Vector store element-/byte-swapped -- */ ++ ++#define TEST_GENERATE(opc1,opc2,insn,m3) \ ++ static void test_##insn##_##m3(ulong_v a) \ ++ { \ ++ ulong_v out = vec_ini; \ ++ __asm__( \ ++ ".insn vrx,0x" #opc1 "00000000" #opc2 ",%[a],%[out]," #m3 \ ++ : [out] "+R" (out) \ ++ : [a] "v" (a) \ ++ : ); \ ++ printf("\t%016lx %016lx\n", out[0], out[1]); \ ++ } ++ ++#define INSNS \ ++ XTEST(e6,09, vstebrh, 0); \ ++ XTEST(e6,09, vstebrh, 7); \ ++ XTEST(e6,09, vstebrh, 2); \ ++ XTEST(e6,0b, vstebrf, 0); \ ++ XTEST(e6,0b, vstebrf, 3); \ ++ XTEST(e6,0b, vstebrf, 1); \ ++ XTEST(e6,0a, vstebrg, 0); \ ++ XTEST(e6,0a, vstebrg, 1); \ ++ XTEST(e6,0e, vstbr, 1); \ ++ XTEST(e6,0e, vstbr, 2); \ ++ XTEST(e6,0e, vstbr, 3); \ ++ XTEST(e6,0e, vstbr, 4); \ ++ XTEST(e6,0f, vster, 1); \ ++ XTEST(e6,0f, vster, 2); \ ++ XTEST(e6,0f, vster, 3); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_swapped_stores() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ ++/* -- Vector shift double by bit -- */ ++ ++#define TEST_GENERATE(opc1,opc2,insn,i4) \ ++ static void test_##insn##_##i4(ulong_v a, ulong_v b) \ ++ { \ ++ ulong_v out = vec_ini; \ ++ __asm__( \ ++ ".insn vrr,0x" #opc1 "00000000" #opc2 \ ++ ",%[out],%[a],%[b],0," #i4 ",0" \ ++ : [out] "+v" (out) \ ++ : [a] "v" (a), \ ++ [b] "v" (b) \ ++ : ); \ ++ printf("\t%016lx %016lx\n", out[0], out[1]); \ ++ } ++ ++#define TEST_EXEC(opc1,opc2,insn,i4) \ ++ do { \ ++ puts(#insn " " #i4); \ ++ test_##insn##_##i4(vec_a, vec_one); \ ++ test_##insn##_##i4(vec_b, vec_a); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(e7,86,vsld,0); \ ++ XTEST(e7,86,vsld,7); \ ++ XTEST(e7,86,vsld,4); \ ++ XTEST(e7,87,vsrd,0); \ ++ XTEST(e7,87,vsrd,7); \ ++ XTEST(e7,87,vsrd,4); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_double_bitshifts() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ ++/* -- Vector integer -> FP conversions -- */ ++ ++#define TEST_GENERATE(opc1,opc2,insn,m4) \ ++ static void test_##insn##_##m4(ulong_v a) \ ++ { \ ++ float_v out; \ ++ __asm__( \ ++ ".insn vrr,0x" #opc1 "00000000" #opc2 \ ++ ",%[out],%[a],0,2," #m4 ",0" \ ++ : [out] "=v" (out) \ ++ : [a] "v" (a) \ ++ : ); \ ++ if (m4 & 8) \ ++ printf("\t%a - - -\n", out[0]); \ ++ else \ ++ printf("\t%a %a %a %a\n", out[0], out[1], out[2], out[3]); \ ++ } ++ ++#define TEST_EXEC(opc1,opc2,insn,m4) \ ++ do { \ ++ puts(#insn " " #m4); \ ++ test_##insn##_##m4(vec_a); \ ++ test_##insn##_##m4(vec_c); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(e7,c1,vcfpl,0); \ ++ XTEST(e7,c1,vcfpl,8); \ ++ XTEST(e7,c3,vcfps,0); \ ++ XTEST(e7,c3,vcfps,8); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_int_fp_conversions() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ ++/* -- Vector FP -> integer conversions -- */ ++ ++#define TEST_GENERATE(opc1,opc2,insn,m4) \ ++ static void test_##insn##_##m4(float_v a) \ ++ { \ ++ unsigned int VECTOR out; \ ++ __asm__( \ ++ ".insn vrr,0x" #opc1 "00000000" #opc2 \ ++ ",%[out],%[a],0,2," #m4 ",0" \ ++ : [out] "=v" (out) \ ++ : [a] "v" (a) \ ++ : ); \ ++ if (m4 & 8) \ ++ printf("\t%08x - - -\n", out[0]); \ ++ else \ ++ printf("\t%08x %08x %08x %08x\n", \ ++ out[0], out[1], out[2], out[3]); \ ++ } ++ ++#define TEST_EXEC(opc1,opc2,insn,m4) \ ++ do { \ ++ puts(#insn " " #m4); \ ++ test_##insn##_##m4(vec_fa); \ ++ test_##insn##_##m4(vec_fb); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(e7,c0,vclfp,0); \ ++ XTEST(e7,c0,vclfp,8); \ ++ XTEST(e7,c2,vcsfp,0); \ ++ XTEST(e7,c2,vcsfp,8); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_fp_int_conversions() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ ++ ++int main() ++{ ++ test_all_single_bitshifts(); ++ test_all_swapped_loads(); ++ test_all_swapped_stores(); ++ test_all_double_bitshifts(); ++ test_all_int_fp_conversions(); ++ test_all_fp_int_conversions(); ++ return 0; ++} +diff --git a/none/tests/s390x/vec2.stderr.exp b/none/tests/s390x/vec2.stderr.exp +new file mode 100644 +index 000000000..139597f9c +--- /dev/null ++++ b/none/tests/s390x/vec2.stderr.exp +@@ -0,0 +1,2 @@ ++ ++ +diff --git a/none/tests/s390x/vec2.stdout.exp b/none/tests/s390x/vec2.stdout.exp +new file mode 100644 +index 000000000..b32cbe1bc +--- /dev/null ++++ b/none/tests/s390x/vec2.stdout.exp +@@ -0,0 +1,168 @@ ++vsl ++ 483415676abc37ef fde5533beca14200 ++ fde5533beca14200 483415676abc37ef ++ 00010204102040bf effd7feffebff7fe ++ ffffffffffffffff ffffffffffffff80 ++vsrl ++ 0012d1679e9af3ef ffdbe5753bcaa164 ++ 7fdbe5753bcaa164 4012d1679e9af3ef ++ 4008014004002004 05fbf7efbf7ffffe ++ 03ffffffffffffff ffffffffffffffff ++vsra ++ 0012d1679e9af3ef ffdbe5753bcaa164 ++ ffdbe5753bcaa164 4012d1679e9af3ef ++ c008014004002004 05fbf7efbf7ffffe ++ ffffffffffffffff ffffffffffffffff ++vlebrh 0 ++ 2301233445566778 899aabbccddeeff0 ++ dcfe233445566778 899aabbccddeeff0 ++vlebrh 7 ++ 0112233445566778 899aabbccdde2301 ++ 0112233445566778 899aabbccddedcfe ++vlebrh 2 ++ 0112233423016778 899aabbccddeeff0 ++ 01122334dcfe6778 899aabbccddeeff0 ++vlebrf 0 ++ 6745230145566778 899aabbccddeeff0 ++ 98badcfe45566778 899aabbccddeeff0 ++vlebrf 3 ++ 0112233445566778 899aabbc67452301 ++ 0112233445566778 899aabbc98badcfe ++vlebrf 1 ++ 0112233467452301 899aabbccddeeff0 ++ 0112233498badcfe 899aabbccddeeff0 ++vlebrg 0 ++ efcdab8967452301 899aabbccddeeff0 ++ 1032547698badcfe 899aabbccddeeff0 ++vlebrg 1 ++ 0112233445566778 efcdab8967452301 ++ 0112233445566778 1032547698badcfe ++vllebrz 1 ++ 0000000000002301 0000000000000000 ++ 000000000000dcfe 0000000000000000 ++vllebrz 2 ++ 0000000067452301 0000000000000000 ++ 0000000098badcfe 0000000000000000 ++vllebrz 3 ++ efcdab8967452301 0000000000000000 ++ 1032547698badcfe 0000000000000000 ++vllebrz 6 ++ 6745230100000000 0000000000000000 ++ 98badcfe00000000 0000000000000000 ++vlbrrep 1 ++ 2301230123012301 2301230123012301 ++ dcfedcfedcfedcfe dcfedcfedcfedcfe ++vlbrrep 2 ++ 6745230167452301 6745230167452301 ++ 98badcfe98badcfe 98badcfe98badcfe ++vlbrrep 3 ++ efcdab8967452301 efcdab8967452301 ++ 1032547698badcfe 1032547698badcfe ++vlbr 1 ++ 23016745ab89efcd dcfe98ba54761032 ++ dcfe98ba54761032 23016745ab89efcd ++vlbr 2 ++ 67452301efcdab89 98badcfe10325476 ++ 98badcfe10325476 67452301efcdab89 ++vlbr 3 ++ efcdab8967452301 1032547698badcfe ++ 1032547698badcfe efcdab8967452301 ++vlbr 4 ++ 1032547698badcfe efcdab8967452301 ++ efcdab8967452301 1032547698badcfe ++vler 1 ++ 32107654ba98fedc cdef89ab45670123 ++ cdef89ab45670123 32107654ba98fedc ++vler 2 ++ 76543210fedcba98 89abcdef01234567 ++ 89abcdef01234567 76543210fedcba98 ++vler 3 ++ fedcba9876543210 0123456789abcdef ++ 0123456789abcdef fedcba9876543210 ++vstebrh 0 ++ 2301233445566778 899aabbccddeeff0 ++ dcfe233445566778 899aabbccddeeff0 ++vstebrh 7 ++ 1032233445566778 899aabbccddeeff0 ++ efcd233445566778 899aabbccddeeff0 ++vstebrh 2 ++ ab89233445566778 899aabbccddeeff0 ++ 5476233445566778 899aabbccddeeff0 ++vstebrf 0 ++ 6745230145566778 899aabbccddeeff0 ++ 98badcfe45566778 899aabbccddeeff0 ++vstebrf 3 ++ 1032547645566778 899aabbccddeeff0 ++ efcdab8945566778 899aabbccddeeff0 ++vstebrf 1 ++ efcdab8945566778 899aabbccddeeff0 ++ 1032547645566778 899aabbccddeeff0 ++vstebrg 0 ++ efcdab8967452301 899aabbccddeeff0 ++ 1032547698badcfe 899aabbccddeeff0 ++vstebrg 1 ++ 1032547698badcfe 899aabbccddeeff0 ++ efcdab8967452301 899aabbccddeeff0 ++vstbr 1 ++ 23016745ab89efcd dcfe98ba54761032 ++ dcfe98ba54761032 23016745ab89efcd ++vstbr 2 ++ 67452301efcdab89 98badcfe10325476 ++ 98badcfe10325476 67452301efcdab89 ++vstbr 3 ++ efcdab8967452301 1032547698badcfe ++ 1032547698badcfe efcdab8967452301 ++vstbr 4 ++ 1032547698badcfe efcdab8967452301 ++ efcdab8967452301 1032547698badcfe ++vster 1 ++ 32107654ba98fedc cdef89ab45670123 ++ cdef89ab45670123 32107654ba98fedc ++vster 2 ++ 76543210fedcba98 89abcdef01234567 ++ 89abcdef01234567 76543210fedcba98 ++vster 3 ++ fedcba9876543210 0123456789abcdef ++ 0123456789abcdef fedcba9876543210 ++vsld 0 ++ 0123456789abcdef fedcba9876543210 ++ fedcba9876543210 0123456789abcdef ++vsld 7 ++ 91a2b3c4d5e6f7ff 6e5d4c3b2a19087f ++ 6e5d4c3b2a190800 91a2b3c4d5e6f780 ++vsld 4 ++ 123456789abcdeff edcba9876543210f ++ edcba98765432100 123456789abcdef0 ++vsrd 0 ++ ffffffffffffffff ffffffffffffffff ++ 0123456789abcdef fedcba9876543210 ++vsrd 7 ++ 21ffffffffffffff ffffffffffffffff ++ de02468acf13579b dffdb97530eca864 ++vsrd 4 ++ 0fffffffffffffff ffffffffffffffff ++ f0123456789abcde ffedcba987654321 ++vcfpl 0 ++ 0x1.234568p+24 0x1.13579cp+31 0x1.fdb976p+31 0x1.d950c8p+30 ++ 0x1.00804p+31 0x1.00804p+27 0x1.feff8p+30 0x1.eff7fcp+31 ++vcfpl 8 ++ 0x1.234568p+24 - - - ++ 0x1.00804p+31 - - - ++vcfps 0 ++ 0x1.234568p+24 -0x1.d950c8p+30 -0x1.234568p+24 0x1.d950c8p+30 ++ -0x1.feff8p+30 0x1.00804p+27 0x1.feff8p+30 -0x1.00804p+27 ++vcfps 8 ++ 0x1.234568p+24 - - - ++ -0x1.feff8p+30 - - - ++vclfp 0 ++ 00ffffff 00000000 0000002a 00002710 ++ 00000004 00000003 00000002 00000001 ++vclfp 8 ++ 00ffffff - - - ++ 00000004 - - - ++vcsfp 0 ++ 00ffffff ff000001 0000002a 00002710 ++ 00000004 00000003 00000002 00000001 ++vcsfp 8 ++ 00ffffff - - - ++ 00000004 - - - +diff --git a/none/tests/s390x/vec2.vgtest b/none/tests/s390x/vec2.vgtest +new file mode 100644 +index 000000000..45e942e64 +--- /dev/null ++++ b/none/tests/s390x/vec2.vgtest +@@ -0,0 +1,2 @@ ++prog: vec2 ++prereq: test -e vec2 && ../../../tests/s390x_features s390x-vx +diff --git a/tests/s390x_features.c b/tests/s390x_features.c +index 25b98f3a3..e7939c463 100644 +--- a/tests/s390x_features.c ++++ b/tests/s390x_features.c +@@ -270,6 +270,10 @@ static int go(char *feature, char *cpu) + match = facilities[0] & FAC_BIT(57); /* message security assist 5 facility */ + } else if (strcmp(feature, "s390x-mi2") == 0 ) { + match = facilities[0] & FAC_BIT(58); ++ } else if (strcmp(feature, "s390x-mi3") == 0 ) { ++ match = facilities[0] & FAC_BIT(61); ++ } else if (strcmp(feature, "s390x-vx2") == 0 ) { ++ match = facilities[2] & FAC_BIT(20); + } else { + return 2; // Unrecognised feature. + } +-- +2.23.0 + +From d9364bc90ee894c43ee742840f806571edc08ab3 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Tue, 18 May 2021 19:59:32 +0200 +Subject: [PATCH 13/13] s390x: Wrap up misc-insn-3 and vec-enh-2 support + +Wrap up support for the miscellaneous-instruction-extensions facility 3 +and the vector-enhancements facility 2: Add 'case' statements for the +remaining unhandled arch13 instructions to 'guest_s390_toIR.c', document +the new support in 's390-opcodes.csv', adjust 's390-check-opcodes.pl', and +announce the new feature in 'NEWS'. +--- + NEWS | 5 ++ + VEX/priv/guest_s390_toIR.c | 5 +- + auxprogs/s390-check-opcodes.pl | 22 ++++++++- + docs/internals/s390-opcodes.csv | 81 +++++++++++++++++++++++++++++++-- + 4 files changed, 108 insertions(+), 5 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 46a867475..1bd18f760 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -8,7 +8,7 @@ + This file is part of Valgrind, a dynamic binary instrumentation + framework. + +- Copyright IBM Corp. 2010-2020 ++ Copyright IBM Corp. 2010-2021 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as +@@ -20503,6 +20503,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) + RRE_r2(ovl)); goto ok; + case 0xb931: s390_format_RRE_RR(s390_irgen_CLGFR, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; ++ case 0xb938: /* SORTL */ goto unimplemented; ++ case 0xb939: /* DFLTCC */ goto unimplemented; ++ case 0xb93a: /* KDSA */ goto unimplemented; + case 0xb93c: s390_format_RRE_RR(s390_irgen_PPNO, RRE_r1(ovl), + RRE_r2(ovl)); goto ok; + case 0xb93e: /* KIMD */ goto unimplemented; +-- +2.23.0 + diff --git a/valgrind.spec b/valgrind.spec index df311de..e9a3c40 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -116,6 +116,39 @@ Patch9: valgrind-3.17.0-debuginfod.patch # KDE#423963 Only process clone results in the parent thread Patch10: valgrind-3.17.0-clone-parent-res.patch +# commit d74a637206ef5532ccd2ccb2e31ee2762f184e60 +# Bug 433863 - s390x: Remove memcheck test cases for cs, cds, and csg +# commit 18ddcc47c951427efd3b790ba2481159b9bd1598 +# s390x: Support "expensive" comparisons Iop_ExpCmpNE32/64 +# commit 5db3f929c43bf46f4707178706cfe90f43acdd19 +# s390x: Add convenience function mkV128() +# commit e78bd78d3043729033b426218ab8c6dae9c51e96 +# Bug 434296 - s390x: Rework IR conversion of VSTRC, VFAE, and VFEE +# commit 4f17a067c4f8245c05611d6e8aa36e8841bab376 +# Bug 434296 - s390x: Rework IR conversion of VFENE +# commit 9bd78ebd8bb5cd4ebb3f081ceba46836cc485551 +# Bug 434296 - s390x: Rework IR conversion of VISTR +# commit 32312d588b77c5b5b5a0145bb0cc6f795b447790 +# Bug 434296 - s390x: Add memcheck test cases for vector string insns +# commit a0bb049ace14ab52d386bb1d49a399f39eec4986 +# s390x: Improve handling of amodes without base register +# commit fd935e238d907d9c523a311ba795077d95ad6912 +# s390x: Rework insn "v-vdup" and add "v-vrep" +# commit 6c1cb1a0128b00858b973ef9344e12d6ddbaaf57 +# s390x: Add support for emitting "vector or with complement" +# commit 0bd4263326b2d48f782339a9bbe1a069c7de45c7 +# s390x: Fix/optimize Iop_64HLtoV128 +# commit cae5062b05b95e0303b1122a0ea9aadc197e4f0a +# s390x: Add missing stdout.exp for vector string memcheck test +Patch11: valgrind-3.17.0-s390-prep.patch + +# KDE#432387 - s390x: z15 instructions support +Patch12: valgrind-3.17.0-s390-z15.patch + +# commit 124ae6cfa303f0cc71ffd685620cb57c4f8f02bb +# s390x: Don't emit "vector or with complement" on z13 +Patch13: valgrind-3.17.0-s390-z13-vec-fix.patch + BuildRequires: make BuildRequires: glibc-devel @@ -264,6 +297,11 @@ Valgrind User Manual for details. %patch9 -p1 %patch10 -p1 +%patch11 -p1 +touch memcheck/tests/s390x/vistr.stdout.exp +%patch12 -p1 +%patch13 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -488,6 +526,11 @@ fi %endif %changelog +* Fri Jun 18 2021 Mark Wielaard - 3.17.0-5 +- Add valgrind-3.17.0-s390-prep.patch +- Add valgrind-3.17.0-s390-z15.patch +- Add valgrind-3.17.0-s390-z13-vec-fix.patch + * Thu Jun 3 2021 Mark Wielaard - 3.17.0-4 - Add valgrind-3.17.0-s390_insn_as_string.patch - Add valgrind-3.17.0-debuginfod.patch From 858fa472f5bbf4816ba9e8cf0534a7e55c741ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Mon, 21 Jun 2021 13:03:39 +0200 Subject: [PATCH 052/196] Fedora CI: integrate does-hunspell-works-under-valgrind test --- .../Makefile | 57 +++++++++++ .../main.fmf | 17 ++++ .../runtest.sh | 94 +++++++++++++++++++ 3 files changed, 168 insertions(+) create mode 100644 tests/does-hunspell-works-under-valgrind/Makefile create mode 100644 tests/does-hunspell-works-under-valgrind/main.fmf create mode 100755 tests/does-hunspell-works-under-valgrind/runtest.sh diff --git a/tests/does-hunspell-works-under-valgrind/Makefile b/tests/does-hunspell-works-under-valgrind/Makefile new file mode 100644 index 0000000..4a33045 --- /dev/null +++ b/tests/does-hunspell-works-under-valgrind/Makefile @@ -0,0 +1,57 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2 or later. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Miroslav Franc " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind." >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 20m" >> $(METADATA) + @echo "RunFor: valgrind" >> $(METADATA) + @echo "Requires: valgrind hunspell" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/does-hunspell-works-under-valgrind/main.fmf b/tests/does-hunspell-works-under-valgrind/main.fmf new file mode 100644 index 0000000..11d22f7 --- /dev/null +++ b/tests/does-hunspell-works-under-valgrind/main.fmf @@ -0,0 +1,17 @@ +summary: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind. +description: | + This test is simplified version of the older RHEL does-aspell-works-under-valgrind test. + + The test collects README files and try to run spellchecker on them with and without valgrind. The output should be the same. + +contact: Alexandra Petlanova +component: +- valgrind +test: ./runtest.sh +framework: beakerlib +recommend: +- valgrind +- hunspell +duration: 5m +extra-summary: /tools/valgrind/Sanity/does-hunspell-works-under-valgrind +extra-task: /tools/valgrind/Sanity/does-hunspell-works-under-valgrind diff --git a/tests/does-hunspell-works-under-valgrind/runtest.sh b/tests/does-hunspell-works-under-valgrind/runtest.sh new file mode 100755 index 0000000..bd01256 --- /dev/null +++ b/tests/does-hunspell-works-under-valgrind/runtest.sh @@ -0,0 +1,94 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Description: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind. +# Author: Miroslav Franc +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2 or later. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + + SPELL_CHECKER="${SPELL_CHECKER:-hunspell}" + +VALGRIND="${VALGRIND:-$(which valgrind)}" +PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" +REQUIRES="${REQUIRES:-$SPELL_CHECKER}" + +rlJournalStart + rlPhaseStartSetup + rlLogInfo "VALGRIND=$VALGRIND" + rlLogInfo "PACKAGES=$PACKAGES" + rlLogInfo "REQUIRES=$REQUIRES" + rlLogInfo "SPELL_CHECKER=$SPELL_CHECKER" + rlLogInfo "$(type valgrind)" + + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest + + out="$TmpDir/spell_check.out" + err="$TmpDir/spell_check.err" + vout="$TmpDir/spell_check.valgrind.out" + verr="$TmpDir/spell_check.valgrind.err" + + spell_checker_command="" + spell_checker_command="echo \"hackerx\" | $SPELL_CHECKER -a > $out 2> $err" + + # Remove dictionary to avoid possibility of different results with + # already present dictionary. After this all commands start with + # the clean sheet. + rlRun "rm -f $HOME/.hunspell_en_US" + + rlRun "$spell_checker_command" 0-255 + + if [ "$?" -eq "0" ]; then + spell_checker_command="${spell_checker_command/$out/$vout}" + spell_checker_command="${spell_checker_command/$err/$verr}" + + rlRun "rm -f $HOME/.hunspell_en_US" + rlRun "valgrind $spell_checker_command" 0-255 + if [ "$?" -ne 0 ]; then + rlLogWarning "Valgrind check failed" + rlLogWarning "$(cat $verr)" + else + rlAssertNotDiffer "$out" "$vout" + [ "$?" -ne 0 ] && rlLogWarning "$(diff $out $vout)" + fi + else + ((skipped++)) + + rlLogWarning "Regular check failed" + rlLogWarning "$(cat $err)" + fi + + rlRun "rm -f $out $err $vout $verr" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" # $TmpDir + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From e7800660e65f3f9ace1238261c550d606634d04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Tue, 22 Jun 2021 13:34:13 +0200 Subject: [PATCH 053/196] Fedora CI: fix bz672959 test Specify the file we want to set breakpoint at in noerror gdb script, newer gdb sets the breakpoint inside glibc otherwise. --- .../noerror.gdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb index c471593..147ed30 100644 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb +++ b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb @@ -1,5 +1,5 @@ target remote | vgdb -b 10 +b something.c:10 c set (a=5) c From dc7d3866cc1b7c64936f3aceb0cbe4794d2ce139 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 9 Jul 2021 13:50:59 +0200 Subject: [PATCH 054/196] 3.17.0-6 - Update to include fixed CI gating tests. --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index e9a3c40..e3c696c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -526,6 +526,9 @@ fi %endif %changelog +* Fri Jul 9 2021 Mark Wielaard - 3.17.0-6 +- Update to include fixed CI gating tests. + * Fri Jun 18 2021 Mark Wielaard - 3.17.0-5 - Add valgrind-3.17.0-s390-prep.patch - Add valgrind-3.17.0-s390-z15.patch From 9a0a8de05211dd3a054bb5199a5ba0153e887187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Fri, 16 Jul 2021 11:35:20 +0200 Subject: [PATCH 055/196] does-hunspell-works-under-valgrind: workaround the testcase echo "NEWSX" | hunspell -a with and w/o valgrind differed in lower case. This could be workarounded by running such a command under --tool=none. Jan Kratochvil suggested the better workaround finding out spelling suggestions somehow were based on the processor time used by the process. And so overriding clock to simply always return zero means the process cannot observe the cpu time used. --- .../runtest.sh | 35 +++---------------- 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/tests/does-hunspell-works-under-valgrind/runtest.sh b/tests/does-hunspell-works-under-valgrind/runtest.sh index bd01256..91caef3 100755 --- a/tests/does-hunspell-works-under-valgrind/runtest.sh +++ b/tests/does-hunspell-works-under-valgrind/runtest.sh @@ -28,7 +28,7 @@ # Include rhts environment . /usr/share/beakerlib/beakerlib.sh || exit 1 - SPELL_CHECKER="${SPELL_CHECKER:-hunspell}" +SPELL_CHECKER="${SPELL_CHECKER:-hunspell}" VALGRIND="${VALGRIND:-$(which valgrind)}" PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" @@ -48,42 +48,17 @@ rlJournalStart rlPhaseStartTest - out="$TmpDir/spell_check.out" - err="$TmpDir/spell_check.err" - vout="$TmpDir/spell_check.valgrind.out" - verr="$TmpDir/spell_check.valgrind.err" + rlRun "echo \"NEWSX\"|hunspell -a;echo -e '#include \nclock_t clock(void) { return 0; }'|gcc -o libclock.so -Wall -g -shared -fPIC -x c -;echo "NEWSX"|LD_PRELOAD=./libclock.so hunspell -a > out" - spell_checker_command="" - spell_checker_command="echo \"hackerx\" | $SPELL_CHECKER -a > $out 2> $err" + rlRun "echo \"NEWSX\"|hunspell -a;echo -e '#include \nclock_t clock(void) { return 0; }'|gcc -o libclock.so -Wall -g -shared -fPIC -x c -;echo \"NEWSX\"|LD_PRELOAD=./libclock.so valgrind -q hunspell -a > valgrind_out" # Remove dictionary to avoid possibility of different results with # already present dictionary. After this all commands start with # the clean sheet. rlRun "rm -f $HOME/.hunspell_en_US" - rlRun "$spell_checker_command" 0-255 - - if [ "$?" -eq "0" ]; then - spell_checker_command="${spell_checker_command/$out/$vout}" - spell_checker_command="${spell_checker_command/$err/$verr}" - - rlRun "rm -f $HOME/.hunspell_en_US" - rlRun "valgrind $spell_checker_command" 0-255 - if [ "$?" -ne 0 ]; then - rlLogWarning "Valgrind check failed" - rlLogWarning "$(cat $verr)" - else - rlAssertNotDiffer "$out" "$vout" - [ "$?" -ne 0 ] && rlLogWarning "$(diff $out $vout)" - fi - else - ((skipped++)) - - rlLogWarning "Regular check failed" - rlLogWarning "$(cat $err)" - fi - - rlRun "rm -f $out $err $vout $verr" + rlAssertNotDiffer "out" "valgrind_out" + [ "$?" -ne 0 ] && rlLogWarning "$(diff out valgrind_out)" rlPhaseEnd rlPhaseStartCleanup From 3e84ebda23d2b98bdddd6806b415a0c1cf3c426e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 17 Jul 2021 20:39:57 +0200 Subject: [PATCH 056/196] Add gdbserver_tests-update-filters-for-newer-glibc-gdb.patch --- ...s-update-filters-for-newer-glibc-gdb.patch | 41 +++++++++++++++++++ valgrind.spec | 9 ++++ 2 files changed, 50 insertions(+) create mode 100644 gdbserver_tests-update-filters-for-newer-glibc-gdb.patch diff --git a/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch b/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch new file mode 100644 index 0000000..e09698f --- /dev/null +++ b/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch @@ -0,0 +1,41 @@ +From 6da22a4d246519cd1a638cfc7eff00cdd74413c4 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Fri, 16 Jul 2021 21:37:21 +0200 +Subject: [PATCH] gdbserver_tests: update filters for newer glibc/gdb + +With newer glibc/gdb we might see a __select call without anything +following on the line. Also when gdb cannot find a file it might +now print "Inappropriate ioctl for device" instead of the message +"No such file or directory" +--- + gdbserver_tests/filter_gdb | 1 + + gdbserver_tests/filter_vgdb | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb +index 3bcd26d86..4a5b5d7a5 100755 +--- a/gdbserver_tests/filter_gdb ++++ b/gdbserver_tests/filter_gdb +@@ -111,6 +111,7 @@ s/\(0x........\) in ?? ()$/\1 in syscall .../ + # If select.c sources are present, we can also get a line containing: + # return SYSCALL_CANCEL.... + s/in __select .*/in syscall .../ ++s/in __select$/in syscall .../ + /exceptfds/d + /sysv\/linux\/select\.c/d + /return SYSCALL_CANCEL /d +diff --git a/gdbserver_tests/filter_vgdb b/gdbserver_tests/filter_vgdb +index f8028a39a..679ca4b31 100755 +--- a/gdbserver_tests/filter_vgdb ++++ b/gdbserver_tests/filter_vgdb +@@ -18,6 +18,7 @@ sed -e '/relaying data between gdb and process/d' \ + + # filter some debuginfo problems with ld.so and SLES11 + sed -e '/^1 rtld.c: No such file or directory\./d' | ++sed -e '/rtld.c: Inappropriate ioctl for device\./d' | + + # and filter out any remaining empty lines + sed -e '/^$/d' +-- +2.27.0 + diff --git a/valgrind.spec b/valgrind.spec index e3c696c..06a97be 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -149,6 +149,10 @@ Patch12: valgrind-3.17.0-s390-z15.patch # s390x: Don't emit "vector or with complement" on z13 Patch13: valgrind-3.17.0-s390-z13-vec-fix.patch +# commit 6da22a4d246519cd1a638cfc7eff00cdd74413c4 +# gdbserver_tests: update filters for newer glibc/gdb +Patch14: gdbserver_tests-update-filters-for-newer-glibc-gdb.patch + BuildRequires: make BuildRequires: glibc-devel @@ -302,6 +306,8 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch12 -p1 %patch13 -p1 +%patch14 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -526,6 +532,9 @@ fi %endif %changelog +* Sat Jul 17 2021 Mark Wielaard +- Add gdbserver_tests-update-filters-for-newer-glibc-gdb.patch + * Fri Jul 9 2021 Mark Wielaard - 3.17.0-6 - Update to include fixed CI gating tests. From 5a53fca2ab75be78b35734e801a16c3b051a1b44 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 17 Jul 2021 20:43:29 +0200 Subject: [PATCH 057/196] 3.17.0-7 Add helgrind-and-drd-suppression-libc-and-libpthread.patch --- ...-drd-suppression-libc-and-libpthread.patch | 241 ++++++++++++++++++ valgrind-3.9.0-helgrind-race-supp.patch | 15 -- valgrind.spec | 14 +- 3 files changed, 249 insertions(+), 21 deletions(-) create mode 100644 helgrind-and-drd-suppression-libc-and-libpthread.patch delete mode 100644 valgrind-3.9.0-helgrind-race-supp.patch diff --git a/helgrind-and-drd-suppression-libc-and-libpthread.patch b/helgrind-and-drd-suppression-libc-and-libpthread.patch new file mode 100644 index 0000000..0cda082 --- /dev/null +++ b/helgrind-and-drd-suppression-libc-and-libpthread.patch @@ -0,0 +1,241 @@ +From 5e16f12e5e812d8ed4e3e96f373d73c22c964148 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Fri, 16 Jul 2021 15:47:08 -0400 +Subject: [PATCH] Update helgrind and drd suppression libc and libpthread paths + in glibc 2.34 + +glibc 2.34 moved all pthread functions into the main libc library. +And it changed the (in memory) path of the main libc library to +libc.so.6 (before it was libc-2.xx.so). + +This breaks various standard suppressions for helgrind and drd. +Fix this by doing a configure check for whether we are using glibc +2.34 by checking whether pthread_create is in libc instead of in +libpthread. If we are using glibc then define GLIBC_LIBC_PATH and +GLIBC_LIBPTHREAD_PATH variables that point to the (regexp) path +of the library that contains all libc functions and pthread functions +(which will be the same path for glibc 2.34+). + +Rename glibc-2.34567-NPTL-helgrind.supp to glibc-2.X-helgrind.supp.in +and glibc-2.X-drd.supp to glibc-2.X-drd.supp.in and replace the +GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH at configure time. + +The same could be done for the glibc-2.X.supp.in file, but hasn't +yet because it looks like most suppressions in that file are obsolete. +--- + Makefile.am | 2 +- + configure.ac | 37 +++++++++++++++++-- + glibc-2.X-drd.supp => glibc-2.X-drd.supp.in | 6 ++- + ...elgrind.supp => glibc-2.X-helgrind.supp.in | 16 ++++---- + 4 files changed, 47 insertions(+), 14 deletions(-) + rename glibc-2.X-drd.supp => glibc-2.X-drd.supp.in (97%) + rename glibc-2.34567-NPTL-helgrind.supp => glibc-2.X-helgrind.supp.in (95%) + +diff --git a/Makefile.am b/Makefile.am +index 66848afaa..f5935eb69 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -41,7 +41,7 @@ SUPP_FILES = \ + glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \ + glibc-2.6.supp glibc-2.7.supp glibc-2.X.supp.in \ + xfree-3.supp xfree-4.supp \ +- glibc-2.34567-NPTL-helgrind.supp \ ++ glibc-2.X-helgrind.supp \ + glibc-2.2-LinuxThreads-helgrind.supp \ + glibc-2.X-drd.supp \ + darwin9.supp darwin9-drd.supp \ +diff --git a/configure.ac b/configure.ac +index 4582fb5d0..beb5bba79 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -1090,6 +1090,31 @@ if test x$GLIBC_VERSION = x; then + fi + fi + ++# If this is glibc then figure out the generic (in file) libc.so and ++# libpthread.so file paths to use in suppressions. Before 2.34 libpthread ++# was a separate library, afterwards it was merged into libc.so and ++# the library is called libc.so.6 (before it was libc-2.[0-9]+.so). ++# Use this fact to set GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH. ++case ${GLIBC_VERSION} in ++2*) ++ AC_MSG_CHECKING([whether pthread_create needs libpthread]) ++ AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_create])], ++ [ ++ AC_MSG_RESULT([no]) ++ GLIBC_LIBC_PATH="*/lib*/libc.so.6" ++ GLIBC_LIBPTHREAD_PATH="$GLIBC_LIBC_PATH" ++ ], [ ++ AC_MSG_RESULT([yes]) ++ GLIBC_LIBC_PATH="*/lib*/libc-2.*so*" ++ GLIBC_LIBPTHREAD_PATH="*/lib*/libpthread-2.*so*" ++ ]) ++ ;; ++*) ++ AC_MSG_CHECKING([not glibc...]) ++ AC_MSG_RESULT([${GLIBC_VERSION}]) ++ ;; ++esac ++ + AC_MSG_CHECKING([the glibc version]) + + case "${GLIBC_VERSION}" in +@@ -1102,13 +1127,13 @@ case "${GLIBC_VERSION}" in + 2.[[3-6]]) + AC_MSG_RESULT(${GLIBC_VERSION} family) + DEFAULT_SUPP="glibc-${GLIBC_VERSION}.supp ${DEFAULT_SUPP}" +- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" + ;; + 2.[[7-9]]) + AC_MSG_RESULT(${GLIBC_VERSION} family) + DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" +- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" + ;; + 2.10|2.11) +@@ -1116,7 +1141,7 @@ case "${GLIBC_VERSION}" in + AC_DEFINE([GLIBC_MANDATORY_STRLEN_REDIRECT], 1, + [Define to 1 if strlen() has been optimized heavily (amd64 glibc >= 2.10)]) + DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" +- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" + ;; + 2.*) +@@ -1126,7 +1151,7 @@ case "${GLIBC_VERSION}" in + AC_DEFINE([GLIBC_MANDATORY_INDEX_AND_STRLEN_REDIRECT], 1, + [Define to 1 if index() and strlen() have been optimized heavily (x86 glibc >= 2.12)]) + DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" +- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" ++ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" + DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" + ;; + darwin) +@@ -1157,6 +1182,8 @@ case "${GLIBC_VERSION}" in + esac + + AC_SUBST(GLIBC_VERSION) ++AC_SUBST(GLIBC_LIBC_PATH) ++AC_SUBST(GLIBC_LIBPTHREAD_PATH) + + + if test "$VGCONF_OS" != "solaris"; then +@@ -4928,6 +4955,8 @@ AC_CONFIG_FILES([ + valgrind.spec + valgrind.pc + glibc-2.X.supp ++ glibc-2.X-helgrind.supp ++ glibc-2.X-drd.supp + docs/Makefile + tests/Makefile + tests/vg_regtest +diff --git a/glibc-2.X-drd.supp b/glibc-2.X-drd.supp.in +similarity index 97% +rename from glibc-2.X-drd.supp +rename to glibc-2.X-drd.supp.in +index cee5f22fb..2c880051a 100644 +--- a/glibc-2.X-drd.supp ++++ b/glibc-2.X-drd.supp.in +@@ -1,3 +1,5 @@ ++# IMPORTANT: DO NOT EDIT glibc-2.X-drd.supp, as it is as a generated ++# file. Instead edit glibc-2.X-drd.supp.in. + # + # Suppression patterns for ld, the dynamic loader. + # +@@ -6,7 +8,7 @@ + { + drd-ld + drd:ConflictingAccess +- obj:*/lib*/ld-*.so ++ obj:*/lib*/ld-*.so* + } + + # +@@ -22,7 +24,7 @@ + { + drd-libc-stdio + drd:ConflictingAccess +- obj:*/lib*/libc-* ++ obj:@GLIBC_LIBC_PATH@ + } + { + drd-libc-thread-cancellation-test +diff --git a/glibc-2.34567-NPTL-helgrind.supp b/glibc-2.X-helgrind.supp.in +similarity index 95% +rename from glibc-2.34567-NPTL-helgrind.supp +rename to glibc-2.X-helgrind.supp.in +index 7ebd2c4b4..cecf3ceab 100644 +--- a/glibc-2.34567-NPTL-helgrind.supp ++++ b/glibc-2.X-helgrind.supp.in +@@ -1,3 +1,5 @@ ++# IMPORTANT: DO NOT EDIT glibc-2.X-helgrind.supp, as it is as a generated ++# file. Instead edit glibc-2.X-helgrind.supp.in. + + # FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of + # other stuff. They should be removed. +@@ -41,7 +43,7 @@ + { + helgrind-glibc2X-004 + Helgrind:Race +- obj:*/lib*/libc-2.*so* ++ obj:@GLIBC_LIBC_PATH@ + } + + { +@@ -49,13 +51,13 @@ + Helgrind:Race + fun:__GI_mempcpy + fun:_IO_*xsputn* +- obj:*/lib*/libc-2.*so* ++ obj:@GLIBC_LIBC_PATH@ + } + + { + helgrind-glibc2X-005 + Helgrind:Race +- obj:*/lib*/libpthread-2.*so* ++ obj:@GLIBC_LIBPTHREAD_PATH@ + } + + # helgrind-glibc2X-006 was merged into helgrind-glibc2X-005 +@@ -90,14 +92,14 @@ + { + helgrind-glibc2X-101 + Helgrind:Race +- obj:*/lib*/libpthread-2.*so* ++ obj:@GLIBC_LIBPTHREAD_PATH@ + fun:pthread_* + } + { + helgrind-glibc2X-102 + Helgrind:Race + fun:mythread_wrapper +- obj:*/lib*/libpthread-2.*so* ++ obj:@GLIBC_LIBPTHREAD_PATH@ + } + { + helgrind-glibc2X-103 +@@ -122,7 +124,7 @@ + { + helgrind-glibc2X-107 + Helgrind:Race +- obj:*/lib*/libpthread-2.*so* ++ obj:@GLIBC_LIBPTHREAD_PATH@ + fun:sem_* + } + { +@@ -138,7 +140,7 @@ + { + helgrind-glibc2X-110 + Helgrind:Race +- obj:*/lib*/libc-2.*so* ++ obj:@GLIBC_LIBC_PATH@ + fun:pthread_* + } + { +-- +2.27.0 + diff --git a/valgrind-3.9.0-helgrind-race-supp.patch b/valgrind-3.9.0-helgrind-race-supp.patch deleted file mode 100644 index 759d151..0000000 --- a/valgrind-3.9.0-helgrind-race-supp.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- valgrind/glibc-2.34567-NPTL-helgrind.supp.jj 2009-08-19 15:37:48.000000000 +0200 -+++ valgrind/glibc-2.34567-NPTL-helgrind.supp 2009-10-21 16:46:31.000000000 +0200 -@@ -88,6 +88,12 @@ - obj:*/lib*/libpthread-2.*so* - } - { -+ helgrind-glibc2X-102a -+ Helgrind:Race -+ fun:mythread_wrapper -+ obj:*vgpreload_helgrind*.so -+} -+{ - helgrind-glibc2X-103 - Helgrind:Race - fun:pthread_cond_*@@GLIBC_2.* diff --git a/valgrind.spec b/valgrind.spec index 06a97be..65f7ca4 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -76,9 +76,6 @@ Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch -# KDE#211352 - helgrind races in helgrind's own mythread_wrapper -Patch2: valgrind-3.9.0-helgrind-race-supp.patch - # Make ld.so supressions slightly less specific. Patch3: valgrind-3.9.0-ldso-supp.patch @@ -153,6 +150,9 @@ Patch13: valgrind-3.17.0-s390-z13-vec-fix.patch # gdbserver_tests: update filters for newer glibc/gdb Patch14: gdbserver_tests-update-filters-for-newer-glibc-gdb.patch +# KDE#439590 glibc-2.34 breaks suppressions against obj:*/lib*/libc-2.*so* +Patch15: helgrind-and-drd-suppression-libc-and-libpthread.patch + BuildRequires: make BuildRequires: glibc-devel @@ -285,7 +285,6 @@ Valgrind User Manual for details. %setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 -%patch2 -p1 %patch3 -p1 # Old rhel gcc doesn't have -fstack-protector-strong. @@ -307,6 +306,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch13 -p1 %patch14 -p1 +%patch15 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -532,8 +532,10 @@ fi %endif %changelog -* Sat Jul 17 2021 Mark Wielaard +* Sat Jul 17 2021 Mark Wielaard - 3.17.0-7 - Add gdbserver_tests-update-filters-for-newer-glibc-gdb.patch +- Add helgrind-and-drd-suppression-libc-and-libpthread.patch +- Remove valgrind-3.9.0-helgrind-race-supp.patch * Fri Jul 9 2021 Mark Wielaard - 3.17.0-6 - Update to include fixed CI gating tests. From d0ee12fb3c2b6c21d6090480ffa7c19195402fc7 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 17 Jul 2021 22:50:03 +0200 Subject: [PATCH 058/196] 3.17.0-8 - Update drd for native ld.so library name --- helgrind-and-drd-suppression-libc-and-libpthread.patch | 2 +- valgrind.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/helgrind-and-drd-suppression-libc-and-libpthread.patch b/helgrind-and-drd-suppression-libc-and-libpthread.patch index 0cda082..94840b7 100644 --- a/helgrind-and-drd-suppression-libc-and-libpthread.patch +++ b/helgrind-and-drd-suppression-libc-and-libpthread.patch @@ -150,7 +150,7 @@ index cee5f22fb..2c880051a 100644 drd-ld drd:ConflictingAccess - obj:*/lib*/ld-*.so -+ obj:*/lib*/ld-*.so* ++ obj:*/lib*/ld*.so* } # diff --git a/valgrind.spec b/valgrind.spec index 65f7ca4..f23723e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -532,6 +532,9 @@ fi %endif %changelog +* Sat Jul 17 2021 Mark Wielaard - 3.17.0-8 +- Update drd suppression for native ld.so names. + * Sat Jul 17 2021 Mark Wielaard - 3.17.0-7 - Add gdbserver_tests-update-filters-for-newer-glibc-gdb.patch - Add helgrind-and-drd-suppression-libc-and-libpthread.patch From 39ef6a93f4f09159fa0cef51ca287e0cfe91f87e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 21 Jul 2021 14:17:40 +0200 Subject: [PATCH 059/196] 3.17.0-9 - Add valgrind-3.17.0-clone3.patch --- valgrind-3.17.0-clone3.patch | 141 +++++++++++++++++++++++++++++++++++ valgrind.spec | 9 ++- 2 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.17.0-clone3.patch diff --git a/valgrind-3.17.0-clone3.patch b/valgrind-3.17.0-clone3.patch new file mode 100644 index 0000000..bd7a32a --- /dev/null +++ b/valgrind-3.17.0-clone3.patch @@ -0,0 +1,141 @@ +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 45e1f3d1b..3b2dcb8e3 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -874,6 +874,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 428cb7c6f..7f41b0749 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1051,6 +1051,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 024ece27f..0d717f44b 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -830,6 +830,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index 62b085ea2..b62129111 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1136,6 +1136,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_ (__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index b73c03da1..94f38366f 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -815,6 +815,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY (__NR_io_uring_setup, sys_io_uring_setup), + LINXY (__NR_io_uring_enter, sys_io_uring_enter), + LINXY (__NR_io_uring_register, sys_io_uring_register), ++ GENX_ (__NR_clone3, sys_ni_syscall), + LINX_ (__NR_faccessat2, sys_faccessat2), + }; + +diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c +index 14127b181..102c15550 100644 +--- a/coregrind/m_syswrap/syswrap-nanomips-linux.c ++++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c +@@ -824,6 +824,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY (__NR_io_uring_setup, sys_io_uring_setup), + LINXY (__NR_io_uring_enter, sys_io_uring_enter), + LINXY (__NR_io_uring_register, sys_io_uring_register), ++ GENX_ (__NR_clone3, sys_ni_syscall), + LINX_ (__NR_faccessat2, sys_faccessat2), + }; + +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index aad14f8ba..1e2efc677 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1054,6 +1054,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index c0e3f5549..76610e142 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1023,6 +1023,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index af6c4eb21..5283c19fe 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -864,6 +864,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index 67d866497..418c76975 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1645,6 +1645,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register),// 427 + ++ GENX_(__NR_clone3, sys_ni_syscall), // 435 ++ + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + }; + +diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h +index c8bc31b4b..6c70c9981 100644 +--- a/include/vki/vki-scnums-shared-linux.h ++++ b/include/vki/vki-scnums-shared-linux.h +@@ -39,6 +39,8 @@ + #define __NR_fsmount 432 + #define __NR_fspick 433 + ++#define __NR_clone3 435 ++ + #define __NR_faccessat2 439 + + #endif diff --git a/valgrind.spec b/valgrind.spec index f23723e..0c10cde 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 8%{?dist} +Release: 9%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -153,6 +153,9 @@ Patch14: gdbserver_tests-update-filters-for-newer-glibc-gdb.patch # KDE#439590 glibc-2.34 breaks suppressions against obj:*/lib*/libc-2.*so* Patch15: helgrind-and-drd-suppression-libc-and-libpthread.patch +# KDE#420906 missing syscall wrapper for clone3 (435) +Patch16: valgrind-3.17.0-clone3.patch + BuildRequires: make BuildRequires: glibc-devel @@ -307,6 +310,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch14 -p1 %patch15 -p1 +%patch16 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -532,6 +536,9 @@ fi %endif %changelog +* Wed Jul 21 2021 Mark Wielaard - 3.17.0-9 +- Add valgrind-3.17.0-clone3.patch + * Sat Jul 17 2021 Mark Wielaard - 3.17.0-8 - Update drd suppression for native ld.so names. From f5bf8faa662c2c733097c15a2c99d2b6297f36c2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 21 Jul 2021 18:22:35 +0200 Subject: [PATCH 060/196] Add valgrind-3.17.0_start.patch --- valgrind-3.17.0_start.patch | 26 ++++++++++++++++++++++++++ valgrind.spec | 8 ++++++++ 2 files changed, 34 insertions(+) create mode 100644 valgrind-3.17.0_start.patch diff --git a/valgrind-3.17.0_start.patch b/valgrind-3.17.0_start.patch new file mode 100644 index 0000000..3882fb6 --- /dev/null +++ b/valgrind-3.17.0_start.patch @@ -0,0 +1,26 @@ +commit 200b6a5a0ea3e1e154663b0fc575bfe2becf177d +Author: Mark Wielaard +Date: Wed Jul 21 17:55:40 2021 +0200 + + m_debuginfo/debuginfo.c VG_(get_fnname_kind) _start is below main + + With glibc 2.34 we might see the _start symbol as the frame that + called main instead of directly after __libc_start_main or + generic_start_main. + + Fixes memcheck/tests/badjump[2], memcheck/tests/origin4-many, + helgrind/tests/tc04_free_lock, helgrind/tests/tc09_bad_unlock + and helgrind/tests/tc20_verifywrap. + +diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c +index bc2578b37..e2218f266 100644 +--- a/coregrind/m_debuginfo/debuginfo.c ++++ b/coregrind/m_debuginfo/debuginfo.c +@@ -2289,6 +2289,7 @@ Vg_FnNameKind VG_(get_fnname_kind) ( const HChar* name ) + VG_STREQN(18, "__libc_start_main.", name) || // gcc optimization + VG_STREQ("generic_start_main", name) || // Yellow Dog doggedness + VG_STREQN(19, "generic_start_main.", name) || // gcc optimization ++ VG_STREQ("_start", name) || + # elif defined(VGO_darwin) + // See readmacho.c for an explanation of this. + VG_STREQ("start_according_to_valgrind", name) || // Darwin, darling diff --git a/valgrind.spec b/valgrind.spec index 0c10cde..d533581 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -156,6 +156,10 @@ Patch15: helgrind-and-drd-suppression-libc-and-libpthread.patch # KDE#420906 missing syscall wrapper for clone3 (435) Patch16: valgrind-3.17.0-clone3.patch +# commit 200b6a5a0ea3e1e154663b0fc575bfe2becf177d +# m_debuginfo/debuginfo.c VG_(get_fnname_kind) _start is below main +Patch17: valgrind-3.17.0_start.patch + BuildRequires: make BuildRequires: glibc-devel @@ -311,6 +315,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -536,6 +541,9 @@ fi %endif %changelog +* Wed Jul 21 2021 Mark Wielaard +- Add valgrind-3.17.0_start.patch + * Wed Jul 21 2021 Mark Wielaard - 3.17.0-9 - Add valgrind-3.17.0-clone3.patch From 4a13e5ce746b2e1d2676aa814d3eb12812a3a0c9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 23 Jul 2021 20:17:16 +0000 Subject: [PATCH 061/196] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index d533581..7a60994 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 9%{?dist} +Release: 10%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -541,6 +541,9 @@ fi %endif %changelog +* Fri Jul 23 2021 Fedora Release Engineering - 1:3.17.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Wed Jul 21 2021 Mark Wielaard - Add valgrind-3.17.0_start.patch From 632481ff8cdbacfb5ebccbdc4453e2ae63a660e3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 6 Aug 2021 19:15:28 +0200 Subject: [PATCH 062/196] 3.17.0-10 - Add valgrind-3.17.0-ppc64-statfs64.patch --- valgrind-3.17.0-ppc64-statfs64.patch | 27 +++++++++++++++++++++++++++ valgrind.spec | 8 +++++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.17.0-ppc64-statfs64.patch diff --git a/valgrind-3.17.0-ppc64-statfs64.patch b/valgrind-3.17.0-ppc64-statfs64.patch new file mode 100644 index 0000000..6b29887 --- /dev/null +++ b/valgrind-3.17.0-ppc64-statfs64.patch @@ -0,0 +1,27 @@ +commit 44da99781e5bb954a0cd3c897b859012a125fec6 +Author: Mark Wielaard +Date: Fri Aug 6 19:08:17 2021 +0200 + + unhandled ppc64le-linux syscall: 252 (statfs64) and 253 (fstatfs64) + + glibc 2.34 consolidated all statfs implementations. All other arches + that have statfs64/fstat64 (including ppc32) already had that syscall + hooked up, it was just ppc64 that was missing it. + + https://bugs.kde.org/show_bug.cgi?id=440670 + +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 76610e142..f1a88f7ce 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -900,8 +900,8 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_tgkill, sys_tgkill), // 250 + // _____(__NR_utimes, sys_utimes), // 251 +-// _____(__NR_statfs64, sys_statfs64), // 252 +-// _____(__NR_fstatfs64, sys_fstatfs64), // 253 ++ GENXY(__NR_statfs64, sys_statfs64), // 252 ++ GENXY(__NR_fstatfs64, sys_fstatfs64), // 253 + // /* #define __NR_fadvise64_64 254 32bit only */ + + // _____(__NR_rtas, sys_rtas), // 255 diff --git a/valgrind.spec b/valgrind.spec index 7a60994..fb9db50 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 10%{?dist} +Release: 11%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -160,6 +160,9 @@ Patch16: valgrind-3.17.0-clone3.patch # m_debuginfo/debuginfo.c VG_(get_fnname_kind) _start is below main Patch17: valgrind-3.17.0_start.patch +# KDE#440670 unhandled ppc64 syscalls 252 (statfs64 and 253 (fstatfs64) +Patch18: valgrind-3.17.0-ppc64-statfs64.patch + BuildRequires: make BuildRequires: glibc-devel @@ -541,6 +544,9 @@ fi %endif %changelog +* Fri Aug 6 2021 Mark Wielaard - 3.17.0-11 +- Add valgrind-3.17.0-ppc64-statfs64.patch + * Fri Jul 23 2021 Fedora Release Engineering - 1:3.17.0-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 024b8dbc5e597375d75eeb01592bb1ed191cfd49 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 8 Aug 2021 21:38:24 +0200 Subject: [PATCH 063/196] Apply patch18 --- valgrind.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/valgrind.spec b/valgrind.spec index fb9db50..05b1012 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -319,6 +319,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto From defd9797da5b3c737ff69ce7729863047fac0d89 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 25 Aug 2021 16:04:55 +0200 Subject: [PATCH 064/196] Add valgrind-3.17.0-vgdb-queued-signals.patch --- valgrind-3.17.0-vgdb-queued-signals.patch | 15 +++++++++++++++ valgrind.spec | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 valgrind-3.17.0-vgdb-queued-signals.patch diff --git a/valgrind-3.17.0-vgdb-queued-signals.patch b/valgrind-3.17.0-vgdb-queued-signals.patch new file mode 100644 index 0000000..6e0da66 --- /dev/null +++ b/valgrind-3.17.0-vgdb-queued-signals.patch @@ -0,0 +1,15 @@ +index 389748960..07f3400f9 100644 +--- a/coregrind/vgdb-invoker-ptrace.c ++++ b/coregrind/vgdb-invoker-ptrace.c +@@ -300,6 +300,10 @@ Bool waitstopped (pid_t pid, int signal_expected, const char *msg) + + // realloc a bigger queue, and store new signal at the end. + // This is not very efficient but we assume not many sigs are queued. ++ if (signal_queue_sz >= 64) { ++ DEBUG(0, "too many queued signals while waiting for SIGSTOP\n"); ++ return False; ++ } + signal_queue_sz++; + signal_queue = vrealloc(signal_queue, + sizeof(siginfo_t) * signal_queue_sz); + diff --git a/valgrind.spec b/valgrind.spec index 05b1012..786375e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -163,6 +163,9 @@ Patch17: valgrind-3.17.0_start.patch # KDE#440670 unhandled ppc64 syscalls 252 (statfs64 and 253 (fstatfs64) Patch18: valgrind-3.17.0-ppc64-statfs64.patch +# KDE#441474 vgdb might eat all memory while waiting for sigstop +Patch19: valgrind-3.17.0-vgdb-queued-signals.patch + BuildRequires: make BuildRequires: glibc-devel @@ -320,6 +323,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -545,6 +549,9 @@ fi %endif %changelog +* Wed Aug 25 2021 Mark Wielaard +- Add valgrind-3.17.0-vgdb-queued-signals.patch + * Fri Aug 6 2021 Mark Wielaard - 3.17.0-11 - Add valgrind-3.17.0-ppc64-statfs64.patch From b35e0b892ce1afaf5cb120005124e1c955b1abb8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 25 Aug 2021 16:10:44 +0200 Subject: [PATCH 065/196] Add valgrind-3.17.0-ppc64-test-isa-3-1.patch --- valgrind-3.17.0-ppc64-test-isa-3-1.patch | 38 ++++++++++++++++++++++++ valgrind.spec | 5 ++++ 2 files changed, 43 insertions(+) create mode 100644 valgrind-3.17.0-ppc64-test-isa-3-1.patch diff --git a/valgrind-3.17.0-ppc64-test-isa-3-1.patch b/valgrind-3.17.0-ppc64-test-isa-3-1.patch new file mode 100644 index 0000000..c471cdd --- /dev/null +++ b/valgrind-3.17.0-ppc64-test-isa-3-1.patch @@ -0,0 +1,38 @@ +commit 60ff013998de8aa168e01b7b1c1743bcbdee99b1 +Author: Will Schmidt +Date: Thu Aug 12 15:41:50 2021 -0500 + + Hi + + This reworks the modulo operation as seen in + valgrind/none/tests/ppc64/test_isa_3_1_common.c: + initialize_source_registers(). Due to a GCC issue (PR101882), we + will try to avoid a modulo operation with both input and outputs set to + a hard register. + In this case, we can apply the modulo operation to the args[] array + value used to initialize the ra value. + +diff --git a/none/tests/ppc64/test_isa_3_1_common.c b/none/tests/ppc64/test_isa_3_1_common.c +index 8222a857fc..7c3dc6f009 100644 +--- a/none/tests/ppc64/test_isa_3_1_common.c ++++ b/none/tests/ppc64/test_isa_3_1_common.c +@@ -2261,12 +2261,17 @@ void initialize_source_registers () { + if (has_rb) rb = 2*vrbi; + /* note special case for is_insert_double, see set_up_iterators () */ + if (has_ra) ra = 4*vrai; + if (is_insert_double) { + /* For an insert_double, the results are undefined +- for ra > 8, so modulo those into a valid range. */ +- ra = ra % 9; ++ for ra > 8, so modulo those into a valid range. ++ Since ra is defined as a hard register, and due to gcc ++ issue (PR101882) where a modulo operation fails with ++ both input and output regs set to a hard register, this ++ assignment references the args[] array again, versus ++ ra = ra % 9;. */ ++ ra = args[vrai] % 9; + } + } + + if (uses_buffer) { + if (has_rb) { diff --git a/valgrind.spec b/valgrind.spec index 786375e..fbe4607 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -166,6 +166,9 @@ Patch18: valgrind-3.17.0-ppc64-statfs64.patch # KDE#441474 vgdb might eat all memory while waiting for sigstop Patch19: valgrind-3.17.0-vgdb-queued-signals.patch +# KDE#440906 update test_isa_3_1_common.c to avoid modulo against hard regs +Patch20: valgrind-3.17.0-ppc64-test-isa-3-1.patch + BuildRequires: make BuildRequires: glibc-devel @@ -324,6 +327,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -551,6 +555,7 @@ fi %changelog * Wed Aug 25 2021 Mark Wielaard - Add valgrind-3.17.0-vgdb-queued-signals.patch +- Add valgrind-3.17.0-ppc64-test-isa-3-1.patch * Fri Aug 6 2021 Mark Wielaard - 3.17.0-11 - Add valgrind-3.17.0-ppc64-statfs64.patch From cfaf74d97dcbfb0741d61f12a11eab0cc45227cc Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 25 Aug 2021 16:14:59 +0200 Subject: [PATCH 066/196] Add valgrind-3.17.0-ppc64-pstxvp.patch --- valgrind-3.17.0-ppc64-pstxvp.patch | 27 +++++++++++++++++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 32 insertions(+) create mode 100644 valgrind-3.17.0-ppc64-pstxvp.patch diff --git a/valgrind-3.17.0-ppc64-pstxvp.patch b/valgrind-3.17.0-ppc64-pstxvp.patch new file mode 100644 index 0000000..1253d00 --- /dev/null +++ b/valgrind-3.17.0-ppc64-pstxvp.patch @@ -0,0 +1,27 @@ +commit a7216a4c4cc676e8f4750e71e7de654c0ce78ca3 +Author: Will Schmidt +Date: Tue Aug 24 13:18:11 2021 -0500 + + Remove a unneeded / unnecessary prefix check. + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index f223fe9456..57ac7bcf48 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -14561,16 +14561,10 @@ static Bool dis_fp_pair_prefix ( UInt prefix, UInt theInstr ) + + /* Endian aware prefixed load */ + pDIP( is_prefix, "stxvp %u,%llu(%u)\n", XTp, immediate_val, rA_addr ); + DIPp( is_prefix, ",%u", R ); + +- if ( R == 1 ) { +- vex_printf("Illegal instruction R = 1; pstxvp %u,%llu(%u)\n", +- XTp, immediate_val, rA_addr ); +- return False; +- } +- + assign( EA_8, binop( Iop_Add64, mkU64( 8 ), mkexpr( EA ) ) ); + assign( EA_16, binop( Iop_Add64, mkU64( 16 ), mkexpr( EA ) ) ); + assign( EA_24, binop( Iop_Add64, mkU64( 24 ), mkexpr( EA ) ) ); + + if (host_endness == VexEndnessBE) { diff --git a/valgrind.spec b/valgrind.spec index fbe4607..8c62bcf 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -169,6 +169,9 @@ Patch19: valgrind-3.17.0-vgdb-queued-signals.patch # KDE#440906 update test_isa_3_1_common.c to avoid modulo against hard regs Patch20: valgrind-3.17.0-ppc64-test-isa-3-1.patch +# KDE#441512 remove troublesome block of code from guest_ppc_toIR for pstxvp +Patch21: valgrind-3.17.0-ppc64-pstxvp.patch + BuildRequires: make BuildRequires: glibc-devel @@ -328,6 +331,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -556,6 +560,7 @@ fi * Wed Aug 25 2021 Mark Wielaard - Add valgrind-3.17.0-vgdb-queued-signals.patch - Add valgrind-3.17.0-ppc64-test-isa-3-1.patch +- Add valgrind-3.17.0-ppc64-pstxvp.patch * Fri Aug 6 2021 Mark Wielaard - 3.17.0-11 - Add valgrind-3.17.0-ppc64-statfs64.patch From 543a722e089b438b49a59544bef2de730f2de54a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 25 Aug 2021 16:16:18 +0200 Subject: [PATCH 067/196] 3.17.0-12 --- valgrind.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 8c62bcf..fe18022 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 11%{?dist} +Release: 12%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -557,7 +557,7 @@ fi %endif %changelog -* Wed Aug 25 2021 Mark Wielaard +* Wed Aug 25 2021 Mark Wielaard - 3.17.0-12 - Add valgrind-3.17.0-vgdb-queued-signals.patch - Add valgrind-3.17.0-ppc64-test-isa-3-1.patch - Add valgrind-3.17.0-ppc64-pstxvp.patch From edbf1c26c31a8c274a94bac0285120af5cb309f4 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Sep 2021 13:06:59 +0200 Subject: [PATCH 068/196] Add valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch --- valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch | 102 +++++++++++++++++++ valgrind.spec | 7 ++ 2 files changed, 109 insertions(+) create mode 100644 valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch diff --git a/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch b/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch new file mode 100644 index 0000000..26e80bc --- /dev/null +++ b/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch @@ -0,0 +1,102 @@ +commit 9aaeafa70c5126b22857485449f8d5eeb1d9c527 +Author: Carl Love +Date: Tue Sep 7 17:15:38 2021 +0000 + + Update the expected output for test_isa_3_1_VRT. + + The inputs into the vinsdlx,vinsdrx instructions changed as a result of + the impossible constraint issue fix. This patch updates the expected + results. + + https://bugs.kde.org/show_bug.cgi?id=441534 + +diff --git a/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp b/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp +index 39c4d8619..8f04ee2cb 100644 +--- a/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp ++++ b/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp +@@ -6798,24 +6798,24 @@ vinsdlx 0 4 => 4,1111111111111111 + vinsdlx 0 6 => 6,1111111111111111 + vinsdlx 0 8 => 8,1111111111111111 + vinsdlx 0 a => a,1111111111111111 +-vinsdlx 4 0 => 1111111100000000,0000000011111111 +-vinsdlx 4 2 => 1111111100000000,0000000211111111 +-vinsdlx 4 4 => 1111111100000000,0000000411111111 +-vinsdlx 4 6 => 1111111100000000,0000000611111111 +-vinsdlx 4 8 => 1111111100000000,0000000811111111 +-vinsdlx 4 a => 1111111100000000,0000000a11111111 +-vinsdlx 8 0 => 1111111111111111,0000000000000000 +-vinsdlx 8 2 => 1111111111111111,0000000000000002 +-vinsdlx 8 4 => 1111111111111111,0000000000000004 +-vinsdlx 8 6 => 1111111111111111,0000000000000006 +-vinsdlx 8 8 => 1111111111111111,0000000000000008 +-vinsdlx 8 a => 1111111111111111,000000000000000a +-vinsdlx 3 0 => 1111110000000000,0000001111111111 +-vinsdlx 3 2 => 1111110000000000,0000021111111111 +-vinsdlx 3 4 => 1111110000000000,0000041111111111 +-vinsdlx 3 6 => 1111110000000000,0000061111111111 +-vinsdlx 3 8 => 1111110000000000,0000081111111111 +-vinsdlx 3 a => 1111110000000000,00000a1111111111 ++vinsdlx 6 0 => 1111111111110000,0000000000001111 ++vinsdlx 6 2 => 1111111111110000,0000000000021111 ++vinsdlx 6 4 => 1111111111110000,0000000000041111 ++vinsdlx 6 6 => 1111111111110000,0000000000061111 ++vinsdlx 6 8 => 1111111111110000,0000000000081111 ++vinsdlx 6 a => 1111111111110000,00000000000a1111 ++vinsdlx 6 0 => 1111111111110000,0000000000001111 ++vinsdlx 6 2 => 1111111111110000,0000000000021111 ++vinsdlx 6 4 => 1111111111110000,0000000000041111 ++vinsdlx 6 6 => 1111111111110000,0000000000061111 ++vinsdlx 6 8 => 1111111111110000,0000000000081111 ++vinsdlx 6 a => 1111111111110000,00000000000a1111 ++vinsdlx 2 0 => 1111000000000000,0000111111111111 ++vinsdlx 2 2 => 1111000000000000,0002111111111111 ++vinsdlx 2 4 => 1111000000000000,0004111111111111 ++vinsdlx 2 6 => 1111000000000000,0006111111111111 ++vinsdlx 2 8 => 1111000000000000,0008111111111111 ++vinsdlx 2 a => 1111000000000000,000a111111111111 + + vinsdrx 0 0 => 1111111111111111,0000000000000000 + vinsdrx 0 2 => 1111111111111111,0000000000000002 +@@ -6823,24 +6823,24 @@ vinsdrx 0 4 => 1111111111111111,0000000000000004 + vinsdrx 0 6 => 1111111111111111,0000000000000006 + vinsdrx 0 8 => 1111111111111111,0000000000000008 + vinsdrx 0 a => 1111111111111111,000000000000000a +-vinsdrx 4 0 => 1111111100000000,0000000011111111 +-vinsdrx 4 2 => 1111111100000000,0000000211111111 +-vinsdrx 4 4 => 1111111100000000,0000000411111111 +-vinsdrx 4 6 => 1111111100000000,0000000611111111 +-vinsdrx 4 8 => 1111111100000000,0000000811111111 +-vinsdrx 4 a => 1111111100000000,0000000a11111111 +-vinsdrx 8 0 => 0,1111111111111111 +-vinsdrx 8 2 => 2,1111111111111111 +-vinsdrx 8 4 => 4,1111111111111111 +-vinsdrx 8 6 => 6,1111111111111111 +-vinsdrx 8 8 => 8,1111111111111111 +-vinsdrx 8 a => a,1111111111111111 +-vinsdrx 3 0 => 1111111111000000,0000000000111111 +-vinsdrx 3 2 => 1111111111000000,0000000002111111 +-vinsdrx 3 4 => 1111111111000000,0000000004111111 +-vinsdrx 3 6 => 1111111111000000,0000000006111111 +-vinsdrx 3 8 => 1111111111000000,0000000008111111 +-vinsdrx 3 a => 1111111111000000,000000000a111111 ++vinsdrx 6 0 => 1111000000000000,0000111111111111 ++vinsdrx 6 2 => 1111000000000000,0002111111111111 ++vinsdrx 6 4 => 1111000000000000,0004111111111111 ++vinsdrx 6 6 => 1111000000000000,0006111111111111 ++vinsdrx 6 8 => 1111000000000000,0008111111111111 ++vinsdrx 6 a => 1111000000000000,000a111111111111 ++vinsdrx 6 0 => 1111000000000000,0000111111111111 ++vinsdrx 6 2 => 1111000000000000,0002111111111111 ++vinsdrx 6 4 => 1111000000000000,0004111111111111 ++vinsdrx 6 6 => 1111000000000000,0006111111111111 ++vinsdrx 6 8 => 1111000000000000,0008111111111111 ++vinsdrx 6 a => 1111000000000000,000a111111111111 ++vinsdrx 2 0 => 1111111111110000,0000000000001111 ++vinsdrx 2 2 => 1111111111110000,0000000000021111 ++vinsdrx 2 4 => 1111111111110000,0000000000041111 ++vinsdrx 2 6 => 1111111111110000,0000000000061111 ++vinsdrx 2 8 => 1111111111110000,0000000000081111 ++vinsdrx 2 a => 1111111111110000,00000000000a1111 + + vinsd 3 0 => 1111110000000000,0000001111111111 + vinsd 3 2 => 1111110000000000,0000021111111111 diff --git a/valgrind.spec b/valgrind.spec index fe18022..2ceef8f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -172,6 +172,9 @@ Patch20: valgrind-3.17.0-ppc64-test-isa-3-1.patch # KDE#441512 remove troublesome block of code from guest_ppc_toIR for pstxvp Patch21: valgrind-3.17.0-ppc64-pstxvp.patch +# KDE#441534 Update the expected output for test_isa_3_1_VRT +Patch22: valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch + BuildRequires: make BuildRequires: glibc-devel @@ -332,6 +335,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -557,6 +561,9 @@ fi %endif %changelog +* Wed Sep 8 2021 Mark Wielaard +- Add valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch + * Wed Aug 25 2021 Mark Wielaard - 3.17.0-12 - Add valgrind-3.17.0-vgdb-queued-signals.patch - Add valgrind-3.17.0-ppc64-test-isa-3-1.patch From 925e930034f8e48d5f702a39b3ee9488bc1f4a49 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 20 Sep 2021 11:26:00 +0200 Subject: [PATCH 069/196] Add valgrind-3.17.0-dwarf-atomic_type.patch --- valgrind-3.17.0-dwarf-atomic_type.patch | 43 +++++++++++++++++++++++++ valgrind.spec | 8 +++++ 2 files changed, 51 insertions(+) create mode 100644 valgrind-3.17.0-dwarf-atomic_type.patch diff --git a/valgrind-3.17.0-dwarf-atomic_type.patch b/valgrind-3.17.0-dwarf-atomic_type.patch new file mode 100644 index 0000000..b41474f --- /dev/null +++ b/valgrind-3.17.0-dwarf-atomic_type.patch @@ -0,0 +1,43 @@ +commit 10922b70b825a0a9b4df9694ceb9f20e93e2c11d +Author: Mark Wielaard +Date: Sat Sep 18 02:19:13 2021 +0200 + + m_debuginfo: Handle DW_TAG_atomic_type + + DW_TAG_atomic_type is a DWARF5 qualifier tag like DW_TAG_volatile_type, + DW_TAG_const_type and DW_TAG_restrict_type. + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 52c27d4bb..968c37bd6 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -4191,14 +4191,15 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, + } + + if (dtag == DW_TAG_volatile_type || dtag == DW_TAG_const_type +- || dtag == DW_TAG_restrict_type) { ++ || dtag == DW_TAG_restrict_type || dtag == DW_TAG_atomic_type) { + Int have_ty = 0; + VG_(memset)(&typeE, 0, sizeof(typeE)); + typeE.cuOff = D3_INVALID_CUOFF; + typeE.tag = Te_TyQual; + typeE.Te.TyQual.qual + = (dtag == DW_TAG_volatile_type ? 'V' +- : (dtag == DW_TAG_const_type ? 'C' : 'R')); ++ : (dtag == DW_TAG_const_type ? 'C' ++ : (dtag == DW_TAG_restrict_type ? 'R' : 'A'))); + /* target type defaults to 'void' */ + typeE.Te.TyQual.typeR = D3_FAKEVOID_CUOFF; + nf_i = 0; +diff --git a/coregrind/m_debuginfo/tytypes.c b/coregrind/m_debuginfo/tytypes.c +index 75e4cf500..e356b92c9 100644 +--- a/coregrind/m_debuginfo/tytypes.c ++++ b/coregrind/m_debuginfo/tytypes.c +@@ -295,6 +295,7 @@ void ML_(pp_TyEnt_C_ishly)( const XArray* /* of TyEnt */ tyents, + case 'C': VG_(printf)("const "); break; + case 'V': VG_(printf)("volatile "); break; + case 'R': VG_(printf)("restrict "); break; ++ case 'A': VG_(printf)("atomic "); break; + default: goto unhandled; + } + ML_(pp_TyEnt_C_ishly)(tyents, ent->Te.TyQual.typeR); diff --git a/valgrind.spec b/valgrind.spec index 2ceef8f..a314045 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -175,6 +175,10 @@ Patch21: valgrind-3.17.0-ppc64-pstxvp.patch # KDE#441534 Update the expected output for test_isa_3_1_VRT Patch22: valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch +# commit 10922b70b825a0a9b4df9694ceb9f20e93e2c11d +# m_debuginfo: Handle DW_TAG_atomic_type +Patch23: valgrind-3.17.0-dwarf-atomic_type.patch + BuildRequires: make BuildRequires: glibc-devel @@ -336,6 +340,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -561,6 +566,9 @@ fi %endif %changelog +* Mon Sep 20 2021 Mark Wielaard +- Add valgrind-3.17.0-dwarf-atomic_type.patch + * Wed Sep 8 2021 Mark Wielaard - Add valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch From f531747bcba846a42bf655416e5fb5933bfdd29e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 20 Sep 2021 12:53:28 +0200 Subject: [PATCH 070/196] 3.17.0-13 - Add valgrind-3.17.0-faster-readdwarf3.patch --- valgrind-3.17.0-faster-readdwarf3.patch | 976 ++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 983 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.17.0-faster-readdwarf3.patch diff --git a/valgrind-3.17.0-faster-readdwarf3.patch b/valgrind-3.17.0-faster-readdwarf3.patch new file mode 100644 index 0000000..af1ff01 --- /dev/null +++ b/valgrind-3.17.0-faster-readdwarf3.patch @@ -0,0 +1,976 @@ +From 7183a5638e294822bff3f486edce6303d22059ef Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 16 Sep 2021 22:01:47 +0200 +Subject: [PATCH 1/6] readdwarf3: Skip units without addresses when looking for + inlined functions + +When a unit doesn't cover any addresses skip it because no actual code +will be inside. Also use skip_DIE instead of read_DIE when not parsing +(skipping) children. +--- + coregrind/m_debuginfo/readdwarf3.c | 48 +++++++++++++++++++++++++----- + 1 file changed, 40 insertions(+), 8 deletions(-) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 968c37bd6..cf8270c8c 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -3127,8 +3127,9 @@ static Bool parse_inl_DIE ( + + UWord saved_die_c_offset = get_position_of_Cursor( c_die ); + +- /* Get info about DW_TAG_compile_unit and DW_TAG_partial_unit 'which +- in theory could also contain inlined fn calls). */ ++ /* Get info about DW_TAG_compile_unit and DW_TAG_partial_unit which in theory ++ could also contain inlined fn calls, if they cover an address range. */ ++ Bool unit_has_addrs = False; + if (dtag == DW_TAG_compile_unit || dtag == DW_TAG_partial_unit) { + Bool have_lo = False; + Addr ip_lo = 0; +@@ -3145,7 +3146,10 @@ static Bool parse_inl_DIE ( + if (attr == DW_AT_low_pc && cts.szB > 0) { + ip_lo = cts.u.val; + have_lo = True; ++ unit_has_addrs = True; + } ++ if (attr == DW_AT_ranges && cts.szB > 0) ++ unit_has_addrs = True; + if (attr == DW_AT_comp_dir) { + if (cts.szB >= 0) + cc->barf("parse_inl_DIE compdir: expecting indirect string"); +@@ -3278,9 +3282,10 @@ static Bool parse_inl_DIE ( + + // Only recursively parse the (possible) children for the DIE which + // might maybe contain a DW_TAG_inlined_subroutine: +- return dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram +- || dtag == DW_TAG_inlined_subroutine +- || dtag == DW_TAG_compile_unit || dtag == DW_TAG_partial_unit; ++ Bool ret = (unit_has_addrs ++ || dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram ++ || dtag == DW_TAG_inlined_subroutine); ++ return ret; + + bad_DIE: + dump_bad_die_and_barf("parse_inl_DIE", dtag, posn, level, +@@ -4759,9 +4764,36 @@ static void read_DIE ( + while (True) { + atag = peek_ULEB128( c ); + if (atag == 0) break; +- read_DIE( rangestree, tyents, tempvars, gexprs, +- typarser, varparser, inlparser, +- c, td3, cc, level+1 ); ++ if (parse_children) { ++ read_DIE( rangestree, tyents, tempvars, gexprs, ++ typarser, varparser, inlparser, ++ c, td3, cc, level+1 ); ++ } else { ++ Int skip_level = level + 1; ++ while (True) { ++ atag = peek_ULEB128( c ); ++ if (atag == 0) { ++ skip_level--; ++ if (skip_level == level) break; ++ /* Eat the terminating zero and continue skipping the ++ children one level up. */ ++ atag = get_ULEB128( c ); ++ vg_assert(atag == 0); ++ continue; ++ } ++ ++ abbv_code = get_ULEB128( c ); ++ abbv = get_abbv(cc, abbv_code); ++ sibling = 0; ++ skip_DIE (&sibling, c, abbv, cc); ++ if (abbv->has_children) { ++ if (sibling == 0) ++ skip_level++; ++ else ++ set_position_of_Cursor( c, sibling ); ++ } ++ } ++ } + } + /* Now we need to eat the terminating zero */ + atag = get_ULEB128( c ); +-- +2.18.4 + +From 1597c1139127bb02d49f4711a9c9addd877d17cf Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 16 Sep 2021 22:49:41 +0200 +Subject: [PATCH 2/6] readdwarf3: Only read line table for units with addresses + for inlined functions + +When parsing DIEs for inlined functions, only read the line table for +units which can actually contain inlined_subroutines. +--- + coregrind/m_debuginfo/readdwarf3.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index cf8270c8c..7ece77009 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -3134,6 +3134,8 @@ static Bool parse_inl_DIE ( + Bool have_lo = False; + Addr ip_lo = 0; + const HChar *compdir = NULL; ++ Bool has_stmt_list = False; ++ ULong debug_line_offset = 0; + + nf_i = 0; + while (True) { +@@ -3159,15 +3161,19 @@ static Bool parse_inl_DIE ( + ML_(dinfo_free) (str); + } + if (attr == DW_AT_stmt_list && cts.szB > 0) { +- read_filename_table( parser->fndn_ix_Table, compdir, +- cc, cts.u.val, td3 ); ++ has_stmt_list = True; ++ debug_line_offset = cts.u.val; + } + if (attr == DW_AT_sibling && cts.szB > 0) { + parser->sibling = cts.u.val; + } + } +- if (level == 0) ++ if (level == 0) { + setup_cu_svma (cc, have_lo, ip_lo, td3); ++ if (has_stmt_list && unit_has_addrs) ++ read_filename_table( parser->fndn_ix_Table, compdir, ++ cc, debug_line_offset, td3 ); ++ } + } + + if (dtag == DW_TAG_inlined_subroutine) { +-- +2.18.4 + +From 528a71f95f8eb124ed284f7cff093b3375bca380 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sat, 18 Sep 2021 00:24:38 +0200 +Subject: [PATCH 3/6] readdwarf3: Reuse fndn_ix_Table as much as possible + +Both the var parser and the inl parser kept a fndn_ix_Table. +Initialize only one per debuginfo read pass and reuse if the stmt offset +is the same as last time (CUs can share the same line table and alt +files do share one for all units). +--- + coregrind/m_debuginfo/readdwarf3.c | 122 +++++++++++++++++------------ + 1 file changed, 72 insertions(+), 50 deletions(-) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 7ece77009..e63e35788 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -1801,9 +1801,6 @@ typedef + Int *level; /* D3 DIE levels */ + Bool *isFunc; /* from DW_AT_subprogram? */ + GExpr **fbGX; /* if isFunc, contains the FB expr, else NULL */ +- /* The fndn_ix file name/dirname table. Is a mapping from dwarf +- integer index to the index in di->fndnpool. */ +- XArray* /* of UInt* */ fndn_ix_Table; + } + D3VarParser; + +@@ -1817,7 +1814,6 @@ var_parser_init ( D3VarParser *parser ) + parser->level = NULL; + parser->isFunc = NULL; + parser->fbGX = NULL; +- parser->fndn_ix_Table = NULL; + } + + /* Release any memory hanging off a variable parser object */ +@@ -2471,12 +2467,39 @@ static void bad_DIE_confusion(int linenr) + } + #define goto_bad_DIE do {bad_DIE_confusion(__LINE__); goto bad_DIE;} while (0) + ++/* Reset the fndn_ix_Table. When we come across the top level DIE for a CU we ++ will copy all the file names out of the .debug_line img area and use this ++ table to look up the copies when we later see filename numbers in ++ DW_TAG_variables etc. The table can be be reused between parsers (var and ++ inline) and between CUs. So we keep a copy of the last one parsed. Call ++ reset_fndn_ix_table before reading a new one from a new offset. */ ++static ++void reset_fndn_ix_table (XArray** fndn_ix_Table, ULong *debug_line_offset, ++ ULong new_offset) ++{ ++ vg_assert (new_offset == -1 ++ || *debug_line_offset != new_offset); ++ Int size = *fndn_ix_Table == NULL ? 0 : VG_(sizeXA) (*fndn_ix_Table); ++ if (size > 0) { ++ VG_(deleteXA) (*fndn_ix_Table); ++ *fndn_ix_Table = NULL; ++ } ++ if (*fndn_ix_Table == NULL) ++ *fndn_ix_Table = VG_(newXA)( ML_(dinfo_zalloc), ++ "di.readdwarf3.reset_ix_table", ++ ML_(dinfo_free), ++ sizeof(UInt) ); ++ *debug_line_offset = new_offset; ++} ++ + __attribute__((noinline)) + static void parse_var_DIE ( + /*MOD*/WordFM* /* of (XArray* of AddrRange, void) */ rangestree, + /*MOD*/XArray* /* of TempVar* */ tempvars, + /*MOD*/XArray* /* of GExpr* */ gexprs, + /*MOD*/D3VarParser* parser, ++ XArray** fndn_ix_Table, ++ ULong *debug_line_offset, + DW_TAG dtag, + UWord posn, + Int level, +@@ -2535,8 +2558,12 @@ static void parse_var_DIE ( + ML_(dinfo_free) (str); + } + if (attr == DW_AT_stmt_list && cts.szB > 0) { +- read_filename_table( parser->fndn_ix_Table, compdir, +- cc, cts.u.val, td3 ); ++ if (cts.u.val != *debug_line_offset) { ++ reset_fndn_ix_table( fndn_ix_Table, debug_line_offset, ++ cts.u.val ); ++ read_filename_table( *fndn_ix_Table, compdir, ++ cc, cts.u.val, td3 ); ++ } + } + } + if (have_lo && have_hi1 && hiIsRelative) +@@ -2730,8 +2757,8 @@ static void parse_var_DIE ( + if (attr == DW_AT_decl_file && cts.szB > 0) { + Int ftabIx = (Int)cts.u.val; + if (ftabIx >= 1 +- && ftabIx < VG_(sizeXA)( parser->fndn_ix_Table )) { +- fndn_ix = *(UInt*)VG_(indexXA)( parser->fndn_ix_Table, ftabIx ); ++ && ftabIx < VG_(sizeXA)( *fndn_ix_Table )) { ++ fndn_ix = *(UInt*)VG_(indexXA)( *fndn_ix_Table, ftabIx ); + } + if (0) VG_(printf)("XXX filename fndn_ix = %u %s\n", fndn_ix, + ML_(fndn_ix2filename) (cc->di, fndn_ix)); +@@ -2958,9 +2985,6 @@ static void parse_var_DIE ( + + typedef + struct { +- /* The fndn_ix file name/dirname table. Is a mapping from dwarf +- integer index to the index in di->fndnpool. */ +- XArray* /* of UInt* */ fndn_ix_Table; + UWord sibling; // sibling of the last read DIE (if it has a sibling). + } + D3InlParser; +@@ -3113,6 +3137,8 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) + __attribute__((noinline)) + static Bool parse_inl_DIE ( + /*MOD*/D3InlParser* parser, ++ XArray** fndn_ix_Table, ++ ULong *debug_line_offset, + DW_TAG dtag, + UWord posn, + Int level, +@@ -3135,7 +3161,7 @@ static Bool parse_inl_DIE ( + Addr ip_lo = 0; + const HChar *compdir = NULL; + Bool has_stmt_list = False; +- ULong debug_line_offset = 0; ++ ULong cu_line_offset = 0; + + nf_i = 0; + while (True) { +@@ -3162,7 +3188,7 @@ static Bool parse_inl_DIE ( + } + if (attr == DW_AT_stmt_list && cts.szB > 0) { + has_stmt_list = True; +- debug_line_offset = cts.u.val; ++ cu_line_offset = cts.u.val; + } + if (attr == DW_AT_sibling && cts.szB > 0) { + parser->sibling = cts.u.val; +@@ -3170,9 +3196,13 @@ static Bool parse_inl_DIE ( + } + if (level == 0) { + setup_cu_svma (cc, have_lo, ip_lo, td3); +- if (has_stmt_list && unit_has_addrs) +- read_filename_table( parser->fndn_ix_Table, compdir, +- cc, debug_line_offset, td3 ); ++ if (has_stmt_list && unit_has_addrs ++ && *debug_line_offset != cu_line_offset) { ++ reset_fndn_ix_table ( fndn_ix_Table, debug_line_offset, ++ cu_line_offset ); ++ read_filename_table( *fndn_ix_Table, compdir, ++ cc, cu_line_offset, td3 ); ++ } + } + } + +@@ -3200,9 +3230,9 @@ static Bool parse_inl_DIE ( + if (attr == DW_AT_call_file && cts.szB > 0) { + Int ftabIx = (Int)cts.u.val; + if (ftabIx >= 1 +- && ftabIx < VG_(sizeXA)( parser->fndn_ix_Table )) { ++ && ftabIx < VG_(sizeXA)( *fndn_ix_Table )) { + caller_fndn_ix = *(UInt*) +- VG_(indexXA)( parser->fndn_ix_Table, ftabIx ); ++ VG_(indexXA)( *fndn_ix_Table, ftabIx ); + } + if (0) VG_(printf)("XXX caller_fndn_ix = %u %s\n", caller_fndn_ix, + ML_(fndn_ix2filename) (cc->di, caller_fndn_ix)); +@@ -4652,6 +4682,8 @@ static void read_DIE ( + /*MOD*/D3TypeParser* typarser, + /*MOD*/D3VarParser* varparser, + /*MOD*/D3InlParser* inlparser, ++ XArray** fndn_ix_Table, ++ ULong *debug_line_offset, + Cursor* c, Bool td3, CUConst* cc, Int level + ) + { +@@ -4713,6 +4745,8 @@ static void read_DIE ( + tempvars, + gexprs, + varparser, ++ fndn_ix_Table, ++ debug_line_offset, + (DW_TAG)atag, + posn, + level, +@@ -4734,6 +4768,8 @@ static void read_DIE ( + inlparser->sibling = 0; + parse_children = + parse_inl_DIE( inlparser, ++ fndn_ix_Table, ++ debug_line_offset, + (DW_TAG)atag, + posn, + level, +@@ -4773,6 +4809,7 @@ static void read_DIE ( + if (parse_children) { + read_DIE( rangestree, tyents, tempvars, gexprs, + typarser, varparser, inlparser, ++ fndn_ix_Table, debug_line_offset, + c, td3, cc, level+1 ); + } else { + Int skip_level = level + 1; +@@ -5006,6 +5043,8 @@ void new_dwarf3_reader_wrk ( + D3TypeParser typarser; + D3VarParser varparser; + D3InlParser inlparser; ++ XArray* /* of UInt */ fndn_ix_Table = NULL; ++ ULong debug_line_offset = (ULong) -1; + Word i, j, n; + Bool td3 = di->trace_symtab; + XArray* /* of TempVar* */ dioff_lookup_tab; +@@ -5145,6 +5184,10 @@ void new_dwarf3_reader_wrk ( + "Overrun whilst reading alternate .debug_info section" ); + section_size = escn_debug_info_alt.szB; + ++ /* Keep track of the last line table we have seen, ++ it might turn up again. */ ++ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); ++ + TRACE_D3("\n------ Parsing alternate .debug_info section ------\n"); + } else if (pass == 1) { + /* Now loop over the Compilation Units listed in the .debug_info +@@ -5155,6 +5198,10 @@ void new_dwarf3_reader_wrk ( + "Overrun whilst reading .debug_info section" ); + section_size = escn_debug_info.szB; + ++ /* Keep track of the last line table we have seen, ++ it might turn up again. */ ++ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); ++ + TRACE_D3("\n------ Parsing .debug_info section ------\n"); + } else { + if (!ML_(sli_is_valid)(escn_debug_types)) +@@ -5165,6 +5212,10 @@ void new_dwarf3_reader_wrk ( + "Overrun whilst reading .debug_types section" ); + section_size = escn_debug_types.szB; + ++ /* Keep track of the last line table we have seen, ++ it might turn up again. */ ++ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); ++ + TRACE_D3("\n------ Parsing .debug_types section ------\n"); + } + +@@ -5257,26 +5308,6 @@ void new_dwarf3_reader_wrk ( + unitary_range_list(0UL, ~0UL), + -1, False/*isFunc*/, NULL/*fbGX*/ ); + +- /* And set up the fndn_ix_Table. When we come across the top +- level DIE for this CU (which is what the next call to +- read_DIE should process) we will copy all the file names out +- of the .debug_line img area and use this table to look up the +- copies when we later see filename numbers in DW_TAG_variables +- etc. */ +- vg_assert(!varparser.fndn_ix_Table ); +- varparser.fndn_ix_Table +- = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.ndrw.5var", +- ML_(dinfo_free), +- sizeof(UInt) ); +- } +- +- if (VG_(clo_read_inline_info)) { +- /* fndn_ix_Table for the inlined call parser */ +- vg_assert(!inlparser.fndn_ix_Table ); +- inlparser.fndn_ix_Table +- = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.ndrw.5inl", +- ML_(dinfo_free), +- sizeof(UInt) ); + } + + /* Now read the one-and-only top-level DIE for this CU. */ +@@ -5284,6 +5315,7 @@ void new_dwarf3_reader_wrk ( + read_DIE( rangestree, + tyents, tempvars, gexprs, + &typarser, &varparser, &inlparser, ++ &fndn_ix_Table, &debug_line_offset, + &info, td3, &cc, 0 ); + + cu_offset_now = get_position_of_Cursor( &info ); +@@ -5328,16 +5360,6 @@ void new_dwarf3_reader_wrk ( + typestack_preen( &typarser, td3, -2 ); + } + +- if (VG_(clo_read_var_info)) { +- vg_assert(varparser.fndn_ix_Table ); +- VG_(deleteXA)( varparser.fndn_ix_Table ); +- varparser.fndn_ix_Table = NULL; +- } +- if (VG_(clo_read_inline_info)) { +- vg_assert(inlparser.fndn_ix_Table ); +- VG_(deleteXA)( inlparser.fndn_ix_Table ); +- inlparser.fndn_ix_Table = NULL; +- } + clear_CUConst(&cc); + + if (cu_offset_now == section_size) +@@ -5346,6 +5368,8 @@ void new_dwarf3_reader_wrk ( + } + } + ++ if (fndn_ix_Table != NULL) ++ VG_(deleteXA)(fndn_ix_Table); + + if (VG_(clo_read_var_info)) { + /* From here on we're post-processing the stuff we got +@@ -5662,8 +5686,6 @@ void new_dwarf3_reader_wrk ( + ML_(dinfo_free)( tyents_to_keep_cache ); + tyents_to_keep_cache = NULL; + +- vg_assert( varparser.fndn_ix_Table == NULL ); +- + /* And the signatured type hash. */ + VG_(HT_destruct) ( signature_types, ML_(dinfo_free) ); + +-- +2.18.4 + +From 8548d2e4ca0fb485597ddbf958e2064620ee972a Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sat, 18 Sep 2021 03:23:52 +0200 +Subject: [PATCH 4/6] readdwarf3: Immediately skip to end of CU when not + parsing children + +--- + coregrind/m_debuginfo/readdwarf3.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index e63e35788..b02e23990 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -4787,6 +4787,16 @@ static void read_DIE ( + vg_assert (inlparser->sibling == 0 || inlparser->sibling == sibling); + } + ++ /* Top level CU DIE, but we don't want to read anything else, just skip ++ to the end and return. */ ++ if (level == 0 && !parse_children) { ++ UWord cu_size_including_IniLen = (cc->unit_length ++ + (cc->is_dw64 ? 12 : 4)); ++ set_position_of_Cursor( c, (cc->cu_start_offset ++ + cu_size_including_IniLen)); ++ return; ++ } ++ + if (after_die_c_offset > 0) { + // DIE was read by a parser above, so we know where the DIE ends. + set_position_of_Cursor( c, after_die_c_offset ); +-- +2.18.4 + +From 2295d273ee03781f5bf112ccedabcea03ca79bf5 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sat, 18 Sep 2021 22:16:33 +0200 +Subject: [PATCH 5/6] readdwarf3: Reuse abbrev if possible between units + +Instead of destroying the ht_abbrvs after processing a CU save it +and the offset so it can be reused for the next CU if that happens +to have the same abbrev offset. dwz compressed DWARF often reuse +the same abbrev for multiple CUs. +--- + coregrind/m_debuginfo/readdwarf3.c | 40 ++++++++++++++++++++++-------- + 1 file changed, 29 insertions(+), 11 deletions(-) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index b02e23990..0c86b712e 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -470,6 +470,7 @@ typedef + struct _DebugInfo* di; + /* --- a hash table of g_abbv (i.e. parsed abbreviations) --- */ + VgHashTable *ht_abbvs; ++ ULong debug_abbrev_offset; + + /* True if this came from .debug_types; otherwise it came from + .debug_info. */ +@@ -1101,13 +1102,6 @@ static g_abbv* get_abbv (const CUConst* cc, ULong abbv_code) + return abbv; + } + +-/* Free the memory allocated in CUConst. */ +-static void clear_CUConst (CUConst* cc) +-{ +- VG_(HT_destruct) ( cc->ht_abbvs, ML_(dinfo_free)); +- cc->ht_abbvs = NULL; +-} +- + /* Parse the Compilation Unit header indicated at 'c' and + initialise 'cc' accordingly. */ + static __attribute__((noinline)) +@@ -1115,6 +1109,8 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + Bool td3, + Cursor* c, + DiSlice escn_debug_abbv, ++ ULong last_debug_abbrev_offset, ++ VgHashTable *last_ht_abbvs, + Bool type_unit, + Bool alt_info ) + { +@@ -1190,7 +1186,15 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + cc->debug_abbv.ioff += debug_abbrev_offset; + cc->debug_abbv.szB -= debug_abbrev_offset; + +- init_ht_abbvs(cc, td3); ++ cc->debug_abbrev_offset = debug_abbrev_offset; ++ if (last_ht_abbvs != NULL ++ && debug_abbrev_offset == last_debug_abbrev_offset) { ++ cc->ht_abbvs = last_ht_abbvs; ++ } else { ++ if (last_ht_abbvs != NULL) ++ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); ++ init_ht_abbvs(cc, td3); ++ } + } + + /* This represents a single signatured type. It maps a type signature +@@ -5141,6 +5145,8 @@ void new_dwarf3_reader_wrk ( + TRACE_D3("\n------ Collecting signatures from " + ".debug_types section ------\n"); + ++ ULong last_debug_abbrev_offset = (ULong) -1; ++ VgHashTable *last_ht_abbvs = NULL; + while (True) { + UWord cu_start_offset, cu_offset_now; + CUConst cc; +@@ -5149,7 +5155,9 @@ void new_dwarf3_reader_wrk ( + TRACE_D3("\n"); + TRACE_D3(" Compilation Unit @ offset 0x%lx:\n", cu_start_offset); + /* parse_CU_header initialises the CU's abbv hash table. */ +- parse_CU_Header( &cc, td3, &info, escn_debug_abbv, True, False ); ++ parse_CU_Header( &cc, td3, &info, escn_debug_abbv, ++ last_debug_abbrev_offset, last_ht_abbvs, ++ True, False ); + + /* Needed by cook_die. */ + cc.types_cuOff_bias = escn_debug_info.szB; +@@ -5163,7 +5171,8 @@ void new_dwarf3_reader_wrk ( + cu_offset_now = (cu_start_offset + cc.unit_length + + (cc.is_dw64 ? 12 : 4)); + +- clear_CUConst ( &cc); ++ last_debug_abbrev_offset = cc.debug_abbrev_offset; ++ last_ht_abbvs = cc.ht_abbvs; + + if (cu_offset_now >= escn_debug_types.szB) { + break; +@@ -5171,6 +5180,8 @@ void new_dwarf3_reader_wrk ( + + set_position_of_Cursor ( &info, cu_offset_now ); + } ++ if (last_ht_abbvs != NULL) ++ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); + } + + /* Perform three DIE-reading passes. The first pass reads DIEs from +@@ -5229,6 +5240,8 @@ void new_dwarf3_reader_wrk ( + TRACE_D3("\n------ Parsing .debug_types section ------\n"); + } + ++ ULong last_debug_abbrev_offset = (ULong) -1; ++ VgHashTable *last_ht_abbvs = NULL; + while (True) { + ULong cu_start_offset, cu_offset_now; + CUConst cc; +@@ -5277,9 +5290,11 @@ void new_dwarf3_reader_wrk ( + /* parse_CU_header initialises the CU's hashtable of abbvs ht_abbvs */ + if (pass == 0) { + parse_CU_Header( &cc, td3, &info, escn_debug_abbv_alt, ++ last_debug_abbrev_offset, last_ht_abbvs, + False, True ); + } else { + parse_CU_Header( &cc, td3, &info, escn_debug_abbv, ++ last_debug_abbrev_offset, last_ht_abbvs, + pass == 2, False ); + } + cc.escn_debug_str = pass == 0 ? escn_debug_str_alt +@@ -5370,12 +5385,15 @@ void new_dwarf3_reader_wrk ( + typestack_preen( &typarser, td3, -2 ); + } + +- clear_CUConst(&cc); ++ last_debug_abbrev_offset = cc.debug_abbrev_offset; ++ last_ht_abbvs = cc.ht_abbvs; + + if (cu_offset_now == section_size) + break; + /* else keep going */ + } ++ if (last_ht_abbvs != NULL) ++ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); + } + + if (fndn_ix_Table != NULL) +-- +2.18.4 + +From 24faa4c59b719c4a4bb2b21c2024ecb52c9be875 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sun, 19 Sep 2021 14:30:19 +0200 +Subject: [PATCH 6/6] readdwarf3: Introduce abbv_state to read .debug_abbrev + more lazily + +With the inline parser often a lot of DIEs are skipped, so reading +all abbrevs up front wastes time and memory. A lot of time and memory +can be saved by reading the abbrevs on demand. Do this by introducing +an abbv_state that is used to keep track of the abbrevs already read. +This does technically make the CUConst struct not const. +--- + coregrind/m_debuginfo/readdwarf3.c | 145 +++++++++++++++++------------ + 1 file changed, 88 insertions(+), 57 deletions(-) + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 0c86b712e..4ac23a3c4 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -415,6 +415,23 @@ typedef + described by this g_abbv; */ + } g_abbv; + ++/* Holds information about the .debug_abbrev section for this CU. The current ++ Cursor into the abbrev section, the known abbrev codes are but into an hash ++ table. The (starting) offset into the abbrev_offset can be used to check ++ whether the abbv can be shared between CUs. The done boolean is set when all ++ known codes have been read. Initialize a new abbv_state with init_ht_abbvs. ++ To read any new abbrev codes not yet in the hash table call find_ht_abbvs ++ (get_abbv will first query the ht_abbvs, then if not done, call ++ find_ht_abbvs). */ ++typedef ++ struct _abbv_state { ++ Cursor c; /* Current cursor into .debug_abbrev. */ ++ VgHashTable *ht_abbvs; /* Hash table mapping codes to abbrevs. */ ++ ULong debug_abbrev_offset; /* Starting offset into .debug_abbrev. */ ++ Bool done; /* Whether there (might) still be new abbrev codes not yet ++ in the cache. */ ++ } abbv_state; ++ + /* Holds information that is constant through the parsing of a + Compilation Unit. This is basically plumbed through to + everywhere. */ +@@ -468,9 +485,9 @@ typedef + UWord alt_cuOff_bias; + /* --- Needed so we can add stuff to the string table. --- */ + struct _DebugInfo* di; +- /* --- a hash table of g_abbv (i.e. parsed abbreviations) --- */ +- VgHashTable *ht_abbvs; +- ULong debug_abbrev_offset; ++ /* --- State of the hash table of g_abbv (i.e. parsed abbreviations) ++ technically makes this struct not const. --- */ ++ abbv_state abbv; + + /* True if this came from .debug_types; otherwise it came from + .debug_info. */ +@@ -998,18 +1015,27 @@ get_range_list ( const CUConst* cc, + #define VARSZ_FORM 0xffffffff + static UInt get_Form_szB (const CUConst* cc, DW_FORM form ); + +-/* Initialises the hash table of abbreviations. +- We do a single scan of the abbv slice to parse and +- build all abbreviations, for the following reasons: +- * all or most abbreviations will be needed in any case +- (at least for var-info reading). +- * re-reading each time an abbreviation causes a lot of calls +- to get_ULEB128. +- * a CU should not have many abbreviations. */ +-static void init_ht_abbvs (CUConst* cc, ++/* Initialises the hash table of abbreviations. This only sets up the abbv ++ Cursor and hash table, but does not try to read any abbrevs yes. The actual ++ reading of abbrevs will be done by get_abbv by calling find_ht_abbvs on ++ demand if a requested abbrev code isn't in the hash table yet. When using the ++ inline parser a lot of abbrevs will not be needed so reading everything ++ upfront will often waste time and memory. */ ++static void init_ht_abbvs (CUConst* cc, ULong debug_abbrev_offset, + Bool td3) + { +- Cursor c; ++ Cursor *c = &cc->abbv.c; ++ init_Cursor( c, cc->debug_abbv, 0, cc->barf, ++ "Overrun whilst parsing .debug_abbrev section(2)" ); ++ cc->abbv.ht_abbvs = VG_(HT_construct) ("di.readdwarf3.ht_abbvs"); ++ cc->abbv.debug_abbrev_offset = debug_abbrev_offset; ++ cc->abbv.done = False; ++} ++ ++static g_abbv *find_ht_abbvs (CUConst* cc, ULong abbv_code, ++ Bool td3) ++{ ++ Cursor *c; + g_abbv *ta; // temporary abbreviation, reallocated if needed. + UInt ta_nf_maxE; // max nr of pairs in ta.nf[], doubled when reallocated. + UInt ta_nf_n; // nr of pairs in ta->nf that are initialised. +@@ -1020,16 +1046,18 @@ static void init_ht_abbvs (CUConst* cc, + + ta_nf_maxE = 10; // starting with enough for 9 pairs+terminating pair. + ta = ML_(dinfo_zalloc) ("di.readdwarf3.ht_ta_nf", SZ_G_ABBV(ta_nf_maxE)); +- cc->ht_abbvs = VG_(HT_construct) ("di.readdwarf3.ht_abbvs"); + +- init_Cursor( &c, cc->debug_abbv, 0, cc->barf, +- "Overrun whilst parsing .debug_abbrev section(2)" ); ++ c = &cc->abbv.c; + while (True) { +- ta->abbv_code = get_ULEB128( &c ); +- if (ta->abbv_code == 0) break; /* end of the table */ ++ ht_ta = NULL; ++ ta->abbv_code = get_ULEB128( c ); ++ if (ta->abbv_code == 0) { ++ cc->abbv.done = True; ++ break; /* end of the table */ ++ } + +- ta->atag = get_ULEB128( &c ); +- ta->has_children = get_UChar( &c ); ++ ta->atag = get_ULEB128( c ); ++ ta->has_children = get_UChar( c ); + ta_nf_n = 0; + while (True) { + if (ta_nf_n >= ta_nf_maxE) { +@@ -1040,10 +1068,10 @@ static void init_ht_abbvs (CUConst* cc, + VG_(memcpy) (ta, old_ta, SZ_G_ABBV(ta_nf_n)); + ML_(dinfo_free) (old_ta); + } +- ta->nf[ta_nf_n].at_name = get_ULEB128( &c ); +- ta->nf[ta_nf_n].at_form = get_ULEB128( &c ); ++ ta->nf[ta_nf_n].at_name = get_ULEB128( c ); ++ ta->nf[ta_nf_n].at_form = get_ULEB128( c ); + if (ta->nf[ta_nf_n].at_form == DW_FORM_implicit_const) +- ta->nf[ta_nf_n].at_val = get_SLEB128( &c ); ++ ta->nf[ta_nf_n].at_val = get_SLEB128( c ); + if (ta->nf[ta_nf_n].at_name == 0 && ta->nf[ta_nf_n].at_form == 0) { + ta_nf_n++; + break; +@@ -1075,7 +1103,7 @@ static void init_ht_abbvs (CUConst* cc, + + ht_ta = ML_(dinfo_zalloc) ("di.readdwarf3.ht_ta", SZ_G_ABBV(ta_nf_n)); + VG_(memcpy) (ht_ta, ta, SZ_G_ABBV(ta_nf_n)); +- VG_(HT_add_node) ( cc->ht_abbvs, ht_ta ); ++ VG_(HT_add_node) ( cc->abbv.ht_abbvs, ht_ta ); + if (TD3) { + TRACE_D3(" Adding abbv_code %lu TAG %s [%s] nf %u ", + ht_ta->abbv_code, ML_(pp_DW_TAG)(ht_ta->atag), +@@ -1086,19 +1114,27 @@ static void init_ht_abbvs (CUConst* cc, + TRACE_D3("[%u,%u] ", ta->nf[i].skip_szB, ta->nf[i].next_nf); + TRACE_D3("\n"); + } ++ if (ht_ta->abbv_code == abbv_code) ++ break; + } + + ML_(dinfo_free) (ta); + #undef SZ_G_ABBV ++ ++ return ht_ta; + } + +-static g_abbv* get_abbv (const CUConst* cc, ULong abbv_code) ++static g_abbv* get_abbv (CUConst* cc, ULong abbv_code, ++ Bool td3) + { + g_abbv *abbv; + +- abbv = VG_(HT_lookup) (cc->ht_abbvs, abbv_code); ++ abbv = VG_(HT_lookup) (cc->abbv.ht_abbvs, abbv_code); ++ if (!abbv && !cc->abbv.done) ++ abbv = find_ht_abbvs (cc, abbv_code, td3); + if (!abbv) + cc->barf ("abbv_code not found in ht_abbvs table"); ++ + return abbv; + } + +@@ -1109,8 +1145,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + Bool td3, + Cursor* c, + DiSlice escn_debug_abbv, +- ULong last_debug_abbrev_offset, +- VgHashTable *last_ht_abbvs, ++ abbv_state last_abbv, + Bool type_unit, + Bool alt_info ) + { +@@ -1186,14 +1221,13 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, + cc->debug_abbv.ioff += debug_abbrev_offset; + cc->debug_abbv.szB -= debug_abbrev_offset; + +- cc->debug_abbrev_offset = debug_abbrev_offset; +- if (last_ht_abbvs != NULL +- && debug_abbrev_offset == last_debug_abbrev_offset) { +- cc->ht_abbvs = last_ht_abbvs; ++ if (last_abbv.ht_abbvs != NULL ++ && debug_abbrev_offset == last_abbv.debug_abbrev_offset) { ++ cc->abbv = last_abbv; + } else { +- if (last_ht_abbvs != NULL) +- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); +- init_ht_abbvs(cc, td3); ++ if (last_abbv.ht_abbvs != NULL) ++ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); ++ init_ht_abbvs(cc, debug_abbrev_offset, td3); + } + } + +@@ -3016,7 +3050,7 @@ typedef + table is kept, while we must handle all abbreviations in all CUs + referenced by an absori (being a reference to an alt CU, or a previous + or following CU). */ +-static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) ++static const HChar* get_inlFnName (Int absori, CUConst* cc, Bool td3) + { + Cursor c; + const g_abbv *abbv; +@@ -3072,7 +3106,7 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) + "Overrun get_inlFnName absori"); + + abbv_code = get_ULEB128( &c ); +- abbv = get_abbv ( cc, abbv_code); ++ abbv = get_abbv ( cc, abbv_code, td3); + atag = abbv->atag; + TRACE_D3(" <%lx>: Abbrev Number: %llu (%s)\n", + posn, abbv_code, ML_(pp_DW_TAG)( atag ) ); +@@ -4707,7 +4741,7 @@ static void read_DIE ( + /* --- Deal with this DIE --- */ + posn = cook_die( cc, get_position_of_Cursor( c ) ); + abbv_code = get_ULEB128( c ); +- abbv = get_abbv(cc, abbv_code); ++ abbv = get_abbv(cc, abbv_code, td3); + atag = abbv->atag; + + if (TD3) { +@@ -4840,7 +4874,7 @@ static void read_DIE ( + } + + abbv_code = get_ULEB128( c ); +- abbv = get_abbv(cc, abbv_code); ++ abbv = get_abbv(cc, abbv_code, td3); + sibling = 0; + skip_DIE (&sibling, c, abbv, cc); + if (abbv->has_children) { +@@ -5145,8 +5179,9 @@ void new_dwarf3_reader_wrk ( + TRACE_D3("\n------ Collecting signatures from " + ".debug_types section ------\n"); + +- ULong last_debug_abbrev_offset = (ULong) -1; +- VgHashTable *last_ht_abbvs = NULL; ++ abbv_state last_abbv; ++ last_abbv.debug_abbrev_offset = (ULong) -1; ++ last_abbv.ht_abbvs = NULL; + while (True) { + UWord cu_start_offset, cu_offset_now; + CUConst cc; +@@ -5156,8 +5191,7 @@ void new_dwarf3_reader_wrk ( + TRACE_D3(" Compilation Unit @ offset 0x%lx:\n", cu_start_offset); + /* parse_CU_header initialises the CU's abbv hash table. */ + parse_CU_Header( &cc, td3, &info, escn_debug_abbv, +- last_debug_abbrev_offset, last_ht_abbvs, +- True, False ); ++ last_abbv, True, False ); + + /* Needed by cook_die. */ + cc.types_cuOff_bias = escn_debug_info.szB; +@@ -5171,8 +5205,7 @@ void new_dwarf3_reader_wrk ( + cu_offset_now = (cu_start_offset + cc.unit_length + + (cc.is_dw64 ? 12 : 4)); + +- last_debug_abbrev_offset = cc.debug_abbrev_offset; +- last_ht_abbvs = cc.ht_abbvs; ++ last_abbv = cc.abbv; + + if (cu_offset_now >= escn_debug_types.szB) { + break; +@@ -5180,8 +5213,8 @@ void new_dwarf3_reader_wrk ( + + set_position_of_Cursor ( &info, cu_offset_now ); + } +- if (last_ht_abbvs != NULL) +- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); ++ if (last_abbv.ht_abbvs != NULL) ++ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); + } + + /* Perform three DIE-reading passes. The first pass reads DIEs from +@@ -5240,8 +5273,9 @@ void new_dwarf3_reader_wrk ( + TRACE_D3("\n------ Parsing .debug_types section ------\n"); + } + +- ULong last_debug_abbrev_offset = (ULong) -1; +- VgHashTable *last_ht_abbvs = NULL; ++ abbv_state last_abbv; ++ last_abbv.debug_abbrev_offset = (ULong) -1; ++ last_abbv.ht_abbvs = NULL; + while (True) { + ULong cu_start_offset, cu_offset_now; + CUConst cc; +@@ -5290,12 +5324,10 @@ void new_dwarf3_reader_wrk ( + /* parse_CU_header initialises the CU's hashtable of abbvs ht_abbvs */ + if (pass == 0) { + parse_CU_Header( &cc, td3, &info, escn_debug_abbv_alt, +- last_debug_abbrev_offset, last_ht_abbvs, +- False, True ); ++ last_abbv, False, True ); + } else { + parse_CU_Header( &cc, td3, &info, escn_debug_abbv, +- last_debug_abbrev_offset, last_ht_abbvs, +- pass == 2, False ); ++ last_abbv, pass == 2, False ); + } + cc.escn_debug_str = pass == 0 ? escn_debug_str_alt + : escn_debug_str; +@@ -5385,15 +5417,14 @@ void new_dwarf3_reader_wrk ( + typestack_preen( &typarser, td3, -2 ); + } + +- last_debug_abbrev_offset = cc.debug_abbrev_offset; +- last_ht_abbvs = cc.ht_abbvs; ++ last_abbv = cc.abbv; + + if (cu_offset_now == section_size) + break; + /* else keep going */ + } +- if (last_ht_abbvs != NULL) +- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); ++ if (last_abbv.ht_abbvs != NULL) ++ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); + } + + if (fndn_ix_Table != NULL) +-- +2.18.4 + diff --git a/valgrind.spec b/valgrind.spec index a314045..a10c02d 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.17.0 -Release: 12%{?dist} +Release: 13%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -179,6 +179,9 @@ Patch22: valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch # m_debuginfo: Handle DW_TAG_atomic_type Patch23: valgrind-3.17.0-dwarf-atomic_type.patch +# KDE#442061 Valgrind: very slow execution under Fedora 34 +Patch24: valgrind-3.17.0-faster-readdwarf3.patch + BuildRequires: make BuildRequires: glibc-devel @@ -341,6 +344,7 @@ touch memcheck/tests/s390x/vistr.stdout.exp %patch21 -p1 %patch22 -p1 %patch23 -p1 +%patch24 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -566,8 +570,9 @@ fi %endif %changelog -* Mon Sep 20 2021 Mark Wielaard +* Mon Sep 20 2021 Mark Wielaard - 3.17.0-13 - Add valgrind-3.17.0-dwarf-atomic_type.patch +- Add valgrind-3.17.0-faster-readdwarf3.patch * Wed Sep 8 2021 Mark Wielaard - Add valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch From 103a632efa804a5a496915d75b2cfc12de58b4a2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 13 Oct 2021 14:49:54 +0200 Subject: [PATCH 071/196] 3.18.0.RC1 --- ...s-update-filters-for-newer-glibc-gdb.patch | 41 - ...-drd-suppression-libc-and-libpthread.patch | 241 -- valgrind-3.17.0-clone-parent-res.patch | 21 - valgrind-3.17.0-clone3.patch | 141 - valgrind-3.17.0-debuginfod.patch | 30 - valgrind-3.17.0-dwarf-atomic_type.patch | 43 - valgrind-3.17.0-faster-readdwarf3.patch | 976 ------- valgrind-3.17.0-ppc64-isa-3.1-tests.patch | 1712 ------------ valgrind-3.17.0-ppc64-isa-3.1.patch | 1720 ------------ valgrind-3.17.0-ppc64-pstxvp.patch | 27 - valgrind-3.17.0-ppc64-statfs64.patch | 27 - valgrind-3.17.0-ppc64-test-isa-3-1.patch | 38 - valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch | 102 - valgrind-3.17.0-s390-prep.patch | 2283 ---------------- valgrind-3.17.0-s390-z13-vec-fix.patch | 46 - valgrind-3.17.0-s390-z15.patch | 2413 ----------------- valgrind-3.17.0-s390_insn_as_string.patch | 54 - valgrind-3.17.0-vgdb-queued-signals.patch | 15 - valgrind-3.17.0_start.patch | 26 - valgrind.spec | 144 +- 20 files changed, 15 insertions(+), 10085 deletions(-) delete mode 100644 gdbserver_tests-update-filters-for-newer-glibc-gdb.patch delete mode 100644 helgrind-and-drd-suppression-libc-and-libpthread.patch delete mode 100644 valgrind-3.17.0-clone-parent-res.patch delete mode 100644 valgrind-3.17.0-clone3.patch delete mode 100644 valgrind-3.17.0-debuginfod.patch delete mode 100644 valgrind-3.17.0-dwarf-atomic_type.patch delete mode 100644 valgrind-3.17.0-faster-readdwarf3.patch delete mode 100644 valgrind-3.17.0-ppc64-isa-3.1-tests.patch delete mode 100644 valgrind-3.17.0-ppc64-isa-3.1.patch delete mode 100644 valgrind-3.17.0-ppc64-pstxvp.patch delete mode 100644 valgrind-3.17.0-ppc64-statfs64.patch delete mode 100644 valgrind-3.17.0-ppc64-test-isa-3-1.patch delete mode 100644 valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch delete mode 100644 valgrind-3.17.0-s390-prep.patch delete mode 100644 valgrind-3.17.0-s390-z13-vec-fix.patch delete mode 100644 valgrind-3.17.0-s390-z15.patch delete mode 100644 valgrind-3.17.0-s390_insn_as_string.patch delete mode 100644 valgrind-3.17.0-vgdb-queued-signals.patch delete mode 100644 valgrind-3.17.0_start.patch diff --git a/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch b/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch deleted file mode 100644 index e09698f..0000000 --- a/gdbserver_tests-update-filters-for-newer-glibc-gdb.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 6da22a4d246519cd1a638cfc7eff00cdd74413c4 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Fri, 16 Jul 2021 21:37:21 +0200 -Subject: [PATCH] gdbserver_tests: update filters for newer glibc/gdb - -With newer glibc/gdb we might see a __select call without anything -following on the line. Also when gdb cannot find a file it might -now print "Inappropriate ioctl for device" instead of the message -"No such file or directory" ---- - gdbserver_tests/filter_gdb | 1 + - gdbserver_tests/filter_vgdb | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/gdbserver_tests/filter_gdb b/gdbserver_tests/filter_gdb -index 3bcd26d86..4a5b5d7a5 100755 ---- a/gdbserver_tests/filter_gdb -+++ b/gdbserver_tests/filter_gdb -@@ -111,6 +111,7 @@ s/\(0x........\) in ?? ()$/\1 in syscall .../ - # If select.c sources are present, we can also get a line containing: - # return SYSCALL_CANCEL.... - s/in __select .*/in syscall .../ -+s/in __select$/in syscall .../ - /exceptfds/d - /sysv\/linux\/select\.c/d - /return SYSCALL_CANCEL /d -diff --git a/gdbserver_tests/filter_vgdb b/gdbserver_tests/filter_vgdb -index f8028a39a..679ca4b31 100755 ---- a/gdbserver_tests/filter_vgdb -+++ b/gdbserver_tests/filter_vgdb -@@ -18,6 +18,7 @@ sed -e '/relaying data between gdb and process/d' \ - - # filter some debuginfo problems with ld.so and SLES11 - sed -e '/^1 rtld.c: No such file or directory\./d' | -+sed -e '/rtld.c: Inappropriate ioctl for device\./d' | - - # and filter out any remaining empty lines - sed -e '/^$/d' --- -2.27.0 - diff --git a/helgrind-and-drd-suppression-libc-and-libpthread.patch b/helgrind-and-drd-suppression-libc-and-libpthread.patch deleted file mode 100644 index 94840b7..0000000 --- a/helgrind-and-drd-suppression-libc-and-libpthread.patch +++ /dev/null @@ -1,241 +0,0 @@ -From 5e16f12e5e812d8ed4e3e96f373d73c22c964148 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Fri, 16 Jul 2021 15:47:08 -0400 -Subject: [PATCH] Update helgrind and drd suppression libc and libpthread paths - in glibc 2.34 - -glibc 2.34 moved all pthread functions into the main libc library. -And it changed the (in memory) path of the main libc library to -libc.so.6 (before it was libc-2.xx.so). - -This breaks various standard suppressions for helgrind and drd. -Fix this by doing a configure check for whether we are using glibc -2.34 by checking whether pthread_create is in libc instead of in -libpthread. If we are using glibc then define GLIBC_LIBC_PATH and -GLIBC_LIBPTHREAD_PATH variables that point to the (regexp) path -of the library that contains all libc functions and pthread functions -(which will be the same path for glibc 2.34+). - -Rename glibc-2.34567-NPTL-helgrind.supp to glibc-2.X-helgrind.supp.in -and glibc-2.X-drd.supp to glibc-2.X-drd.supp.in and replace the -GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH at configure time. - -The same could be done for the glibc-2.X.supp.in file, but hasn't -yet because it looks like most suppressions in that file are obsolete. ---- - Makefile.am | 2 +- - configure.ac | 37 +++++++++++++++++-- - glibc-2.X-drd.supp => glibc-2.X-drd.supp.in | 6 ++- - ...elgrind.supp => glibc-2.X-helgrind.supp.in | 16 ++++---- - 4 files changed, 47 insertions(+), 14 deletions(-) - rename glibc-2.X-drd.supp => glibc-2.X-drd.supp.in (97%) - rename glibc-2.34567-NPTL-helgrind.supp => glibc-2.X-helgrind.supp.in (95%) - -diff --git a/Makefile.am b/Makefile.am -index 66848afaa..f5935eb69 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -41,7 +41,7 @@ SUPP_FILES = \ - glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \ - glibc-2.6.supp glibc-2.7.supp glibc-2.X.supp.in \ - xfree-3.supp xfree-4.supp \ -- glibc-2.34567-NPTL-helgrind.supp \ -+ glibc-2.X-helgrind.supp \ - glibc-2.2-LinuxThreads-helgrind.supp \ - glibc-2.X-drd.supp \ - darwin9.supp darwin9-drd.supp \ -diff --git a/configure.ac b/configure.ac -index 4582fb5d0..beb5bba79 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -1090,6 +1090,31 @@ if test x$GLIBC_VERSION = x; then - fi - fi - -+# If this is glibc then figure out the generic (in file) libc.so and -+# libpthread.so file paths to use in suppressions. Before 2.34 libpthread -+# was a separate library, afterwards it was merged into libc.so and -+# the library is called libc.so.6 (before it was libc-2.[0-9]+.so). -+# Use this fact to set GLIBC_LIBC_PATH and GLIBC_LIBPTHREAD_PATH. -+case ${GLIBC_VERSION} in -+2*) -+ AC_MSG_CHECKING([whether pthread_create needs libpthread]) -+ AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_create])], -+ [ -+ AC_MSG_RESULT([no]) -+ GLIBC_LIBC_PATH="*/lib*/libc.so.6" -+ GLIBC_LIBPTHREAD_PATH="$GLIBC_LIBC_PATH" -+ ], [ -+ AC_MSG_RESULT([yes]) -+ GLIBC_LIBC_PATH="*/lib*/libc-2.*so*" -+ GLIBC_LIBPTHREAD_PATH="*/lib*/libpthread-2.*so*" -+ ]) -+ ;; -+*) -+ AC_MSG_CHECKING([not glibc...]) -+ AC_MSG_RESULT([${GLIBC_VERSION}]) -+ ;; -+esac -+ - AC_MSG_CHECKING([the glibc version]) - - case "${GLIBC_VERSION}" in -@@ -1102,13 +1127,13 @@ case "${GLIBC_VERSION}" in - 2.[[3-6]]) - AC_MSG_RESULT(${GLIBC_VERSION} family) - DEFAULT_SUPP="glibc-${GLIBC_VERSION}.supp ${DEFAULT_SUPP}" -- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" -+ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" - DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" - ;; - 2.[[7-9]]) - AC_MSG_RESULT(${GLIBC_VERSION} family) - DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" -- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" -+ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" - DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" - ;; - 2.10|2.11) -@@ -1116,7 +1141,7 @@ case "${GLIBC_VERSION}" in - AC_DEFINE([GLIBC_MANDATORY_STRLEN_REDIRECT], 1, - [Define to 1 if strlen() has been optimized heavily (amd64 glibc >= 2.10)]) - DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" -- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" -+ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" - DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" - ;; - 2.*) -@@ -1126,7 +1151,7 @@ case "${GLIBC_VERSION}" in - AC_DEFINE([GLIBC_MANDATORY_INDEX_AND_STRLEN_REDIRECT], 1, - [Define to 1 if index() and strlen() have been optimized heavily (x86 glibc >= 2.12)]) - DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" -- DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" -+ DEFAULT_SUPP="glibc-2.X-helgrind.supp ${DEFAULT_SUPP}" - DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" - ;; - darwin) -@@ -1157,6 +1182,8 @@ case "${GLIBC_VERSION}" in - esac - - AC_SUBST(GLIBC_VERSION) -+AC_SUBST(GLIBC_LIBC_PATH) -+AC_SUBST(GLIBC_LIBPTHREAD_PATH) - - - if test "$VGCONF_OS" != "solaris"; then -@@ -4928,6 +4955,8 @@ AC_CONFIG_FILES([ - valgrind.spec - valgrind.pc - glibc-2.X.supp -+ glibc-2.X-helgrind.supp -+ glibc-2.X-drd.supp - docs/Makefile - tests/Makefile - tests/vg_regtest -diff --git a/glibc-2.X-drd.supp b/glibc-2.X-drd.supp.in -similarity index 97% -rename from glibc-2.X-drd.supp -rename to glibc-2.X-drd.supp.in -index cee5f22fb..2c880051a 100644 ---- a/glibc-2.X-drd.supp -+++ b/glibc-2.X-drd.supp.in -@@ -1,3 +1,5 @@ -+# IMPORTANT: DO NOT EDIT glibc-2.X-drd.supp, as it is as a generated -+# file. Instead edit glibc-2.X-drd.supp.in. - # - # Suppression patterns for ld, the dynamic loader. - # -@@ -6,7 +8,7 @@ - { - drd-ld - drd:ConflictingAccess -- obj:*/lib*/ld-*.so -+ obj:*/lib*/ld*.so* - } - - # -@@ -22,7 +24,7 @@ - { - drd-libc-stdio - drd:ConflictingAccess -- obj:*/lib*/libc-* -+ obj:@GLIBC_LIBC_PATH@ - } - { - drd-libc-thread-cancellation-test -diff --git a/glibc-2.34567-NPTL-helgrind.supp b/glibc-2.X-helgrind.supp.in -similarity index 95% -rename from glibc-2.34567-NPTL-helgrind.supp -rename to glibc-2.X-helgrind.supp.in -index 7ebd2c4b4..cecf3ceab 100644 ---- a/glibc-2.34567-NPTL-helgrind.supp -+++ b/glibc-2.X-helgrind.supp.in -@@ -1,3 +1,5 @@ -+# IMPORTANT: DO NOT EDIT glibc-2.X-helgrind.supp, as it is as a generated -+# file. Instead edit glibc-2.X-helgrind.supp.in. - - # FIXME 22 Jan 09: helgrind-glibc2X-005 overlaps with a lot of - # other stuff. They should be removed. -@@ -41,7 +43,7 @@ - { - helgrind-glibc2X-004 - Helgrind:Race -- obj:*/lib*/libc-2.*so* -+ obj:@GLIBC_LIBC_PATH@ - } - - { -@@ -49,13 +51,13 @@ - Helgrind:Race - fun:__GI_mempcpy - fun:_IO_*xsputn* -- obj:*/lib*/libc-2.*so* -+ obj:@GLIBC_LIBC_PATH@ - } - - { - helgrind-glibc2X-005 - Helgrind:Race -- obj:*/lib*/libpthread-2.*so* -+ obj:@GLIBC_LIBPTHREAD_PATH@ - } - - # helgrind-glibc2X-006 was merged into helgrind-glibc2X-005 -@@ -90,14 +92,14 @@ - { - helgrind-glibc2X-101 - Helgrind:Race -- obj:*/lib*/libpthread-2.*so* -+ obj:@GLIBC_LIBPTHREAD_PATH@ - fun:pthread_* - } - { - helgrind-glibc2X-102 - Helgrind:Race - fun:mythread_wrapper -- obj:*/lib*/libpthread-2.*so* -+ obj:@GLIBC_LIBPTHREAD_PATH@ - } - { - helgrind-glibc2X-103 -@@ -122,7 +124,7 @@ - { - helgrind-glibc2X-107 - Helgrind:Race -- obj:*/lib*/libpthread-2.*so* -+ obj:@GLIBC_LIBPTHREAD_PATH@ - fun:sem_* - } - { -@@ -138,7 +140,7 @@ - { - helgrind-glibc2X-110 - Helgrind:Race -- obj:*/lib*/libc-2.*so* -+ obj:@GLIBC_LIBC_PATH@ - fun:pthread_* - } - { --- -2.27.0 - diff --git a/valgrind-3.17.0-clone-parent-res.patch b/valgrind-3.17.0-clone-parent-res.patch deleted file mode 100644 index 8d03cea..0000000 --- a/valgrind-3.17.0-clone-parent-res.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit e08a82991a9b9dc87c13f2b89273f25f97d14baf -Author: Tom Hughes -Date: Tue Apr 6 22:44:36 2021 +0100 - - Only process clone results in the parent thread - - Fixes BZ#423963 - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 5ae4e6613..c59d8ee26 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -940,7 +940,7 @@ PRE(sys_clone) - ("Valgrind does not support general clone()."); - } - -- if (SUCCESS) { -+ if (SUCCESS && RES != 0) { - if (ARG_FLAGS & (VKI_CLONE_PARENT_SETTID | VKI_CLONE_PIDFD)) - POST_MEM_WRITE(ARG3, sizeof(Int)); - if (ARG_FLAGS & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) diff --git a/valgrind-3.17.0-clone3.patch b/valgrind-3.17.0-clone3.patch deleted file mode 100644 index bd7a32a..0000000 --- a/valgrind-3.17.0-clone3.patch +++ /dev/null @@ -1,141 +0,0 @@ -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 45e1f3d1b..3b2dcb8e3 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -874,6 +874,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 428cb7c6f..7f41b0749 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1051,6 +1051,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 024ece27f..0d717f44b 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -830,6 +830,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index 62b085ea2..b62129111 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1136,6 +1136,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_ (__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index b73c03da1..94f38366f 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -815,6 +815,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_io_uring_setup, sys_io_uring_setup), - LINXY (__NR_io_uring_enter, sys_io_uring_enter), - LINXY (__NR_io_uring_register, sys_io_uring_register), -+ GENX_ (__NR_clone3, sys_ni_syscall), - LINX_ (__NR_faccessat2, sys_faccessat2), - }; - -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index 14127b181..102c15550 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -824,6 +824,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_io_uring_setup, sys_io_uring_setup), - LINXY (__NR_io_uring_enter, sys_io_uring_enter), - LINXY (__NR_io_uring_register, sys_io_uring_register), -+ GENX_ (__NR_clone3, sys_ni_syscall), - LINX_ (__NR_faccessat2, sys_faccessat2), - }; - -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index aad14f8ba..1e2efc677 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1054,6 +1054,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index c0e3f5549..76610e142 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1023,6 +1023,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index af6c4eb21..5283c19fe 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -864,6 +864,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index 67d866497..418c76975 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1645,6 +1645,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register),// 427 - -+ GENX_(__NR_clone3, sys_ni_syscall), // 435 -+ - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - }; - -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -index c8bc31b4b..6c70c9981 100644 ---- a/include/vki/vki-scnums-shared-linux.h -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -39,6 +39,8 @@ - #define __NR_fsmount 432 - #define __NR_fspick 433 - -+#define __NR_clone3 435 -+ - #define __NR_faccessat2 439 - - #endif diff --git a/valgrind-3.17.0-debuginfod.patch b/valgrind-3.17.0-debuginfod.patch deleted file mode 100644 index 5109a4b..0000000 --- a/valgrind-3.17.0-debuginfod.patch +++ /dev/null @@ -1,30 +0,0 @@ -commit 93104368952c37268da724231487058ea3eaf1dc -Author: Tom Hughes -Date: Thu May 20 17:16:06 2021 +0100 - - Don't look for separate debuginfo if the image has a .debug_info section - - Fixes BZ#435908 - -diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c -index b0f062ddc..e424e3e7e 100644 ---- a/coregrind/m_debuginfo/readelf.c -+++ b/coregrind/m_debuginfo/readelf.c -@@ -2879,13 +2879,15 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - /* Look for a build-id */ - HChar* buildid = find_buildid(mimg, False, False); - -- /* Look for a debug image that matches either the build-id or -+ /* If we don't have a .debug_info section in the main image then -+ look for a debug image that matches either the build-id or - the debuglink-CRC32 in the main image. If the main image - doesn't contain either of those then this won't even bother - to try looking. This looks in all known places, including - the --extra-debuginfo-path if specified and on the - --debuginfo-server if specified. */ -- if (buildid != NULL || debuglink_escn.img != NULL) { -+ if (debug_info_escn.img == NULL && -+ (buildid != NULL || debuglink_escn.img != NULL)) { - /* Do have a debuglink section? */ - if (debuglink_escn.img != NULL) { - UInt crc_offset diff --git a/valgrind-3.17.0-dwarf-atomic_type.patch b/valgrind-3.17.0-dwarf-atomic_type.patch deleted file mode 100644 index b41474f..0000000 --- a/valgrind-3.17.0-dwarf-atomic_type.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit 10922b70b825a0a9b4df9694ceb9f20e93e2c11d -Author: Mark Wielaard -Date: Sat Sep 18 02:19:13 2021 +0200 - - m_debuginfo: Handle DW_TAG_atomic_type - - DW_TAG_atomic_type is a DWARF5 qualifier tag like DW_TAG_volatile_type, - DW_TAG_const_type and DW_TAG_restrict_type. - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 52c27d4bb..968c37bd6 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -4191,14 +4191,15 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents, - } - - if (dtag == DW_TAG_volatile_type || dtag == DW_TAG_const_type -- || dtag == DW_TAG_restrict_type) { -+ || dtag == DW_TAG_restrict_type || dtag == DW_TAG_atomic_type) { - Int have_ty = 0; - VG_(memset)(&typeE, 0, sizeof(typeE)); - typeE.cuOff = D3_INVALID_CUOFF; - typeE.tag = Te_TyQual; - typeE.Te.TyQual.qual - = (dtag == DW_TAG_volatile_type ? 'V' -- : (dtag == DW_TAG_const_type ? 'C' : 'R')); -+ : (dtag == DW_TAG_const_type ? 'C' -+ : (dtag == DW_TAG_restrict_type ? 'R' : 'A'))); - /* target type defaults to 'void' */ - typeE.Te.TyQual.typeR = D3_FAKEVOID_CUOFF; - nf_i = 0; -diff --git a/coregrind/m_debuginfo/tytypes.c b/coregrind/m_debuginfo/tytypes.c -index 75e4cf500..e356b92c9 100644 ---- a/coregrind/m_debuginfo/tytypes.c -+++ b/coregrind/m_debuginfo/tytypes.c -@@ -295,6 +295,7 @@ void ML_(pp_TyEnt_C_ishly)( const XArray* /* of TyEnt */ tyents, - case 'C': VG_(printf)("const "); break; - case 'V': VG_(printf)("volatile "); break; - case 'R': VG_(printf)("restrict "); break; -+ case 'A': VG_(printf)("atomic "); break; - default: goto unhandled; - } - ML_(pp_TyEnt_C_ishly)(tyents, ent->Te.TyQual.typeR); diff --git a/valgrind-3.17.0-faster-readdwarf3.patch b/valgrind-3.17.0-faster-readdwarf3.patch deleted file mode 100644 index af1ff01..0000000 --- a/valgrind-3.17.0-faster-readdwarf3.patch +++ /dev/null @@ -1,976 +0,0 @@ -From 7183a5638e294822bff3f486edce6303d22059ef Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 16 Sep 2021 22:01:47 +0200 -Subject: [PATCH 1/6] readdwarf3: Skip units without addresses when looking for - inlined functions - -When a unit doesn't cover any addresses skip it because no actual code -will be inside. Also use skip_DIE instead of read_DIE when not parsing -(skipping) children. ---- - coregrind/m_debuginfo/readdwarf3.c | 48 +++++++++++++++++++++++++----- - 1 file changed, 40 insertions(+), 8 deletions(-) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 968c37bd6..cf8270c8c 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -3127,8 +3127,9 @@ static Bool parse_inl_DIE ( - - UWord saved_die_c_offset = get_position_of_Cursor( c_die ); - -- /* Get info about DW_TAG_compile_unit and DW_TAG_partial_unit 'which -- in theory could also contain inlined fn calls). */ -+ /* Get info about DW_TAG_compile_unit and DW_TAG_partial_unit which in theory -+ could also contain inlined fn calls, if they cover an address range. */ -+ Bool unit_has_addrs = False; - if (dtag == DW_TAG_compile_unit || dtag == DW_TAG_partial_unit) { - Bool have_lo = False; - Addr ip_lo = 0; -@@ -3145,7 +3146,10 @@ static Bool parse_inl_DIE ( - if (attr == DW_AT_low_pc && cts.szB > 0) { - ip_lo = cts.u.val; - have_lo = True; -+ unit_has_addrs = True; - } -+ if (attr == DW_AT_ranges && cts.szB > 0) -+ unit_has_addrs = True; - if (attr == DW_AT_comp_dir) { - if (cts.szB >= 0) - cc->barf("parse_inl_DIE compdir: expecting indirect string"); -@@ -3278,9 +3282,10 @@ static Bool parse_inl_DIE ( - - // Only recursively parse the (possible) children for the DIE which - // might maybe contain a DW_TAG_inlined_subroutine: -- return dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram -- || dtag == DW_TAG_inlined_subroutine -- || dtag == DW_TAG_compile_unit || dtag == DW_TAG_partial_unit; -+ Bool ret = (unit_has_addrs -+ || dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram -+ || dtag == DW_TAG_inlined_subroutine); -+ return ret; - - bad_DIE: - dump_bad_die_and_barf("parse_inl_DIE", dtag, posn, level, -@@ -4759,9 +4764,36 @@ static void read_DIE ( - while (True) { - atag = peek_ULEB128( c ); - if (atag == 0) break; -- read_DIE( rangestree, tyents, tempvars, gexprs, -- typarser, varparser, inlparser, -- c, td3, cc, level+1 ); -+ if (parse_children) { -+ read_DIE( rangestree, tyents, tempvars, gexprs, -+ typarser, varparser, inlparser, -+ c, td3, cc, level+1 ); -+ } else { -+ Int skip_level = level + 1; -+ while (True) { -+ atag = peek_ULEB128( c ); -+ if (atag == 0) { -+ skip_level--; -+ if (skip_level == level) break; -+ /* Eat the terminating zero and continue skipping the -+ children one level up. */ -+ atag = get_ULEB128( c ); -+ vg_assert(atag == 0); -+ continue; -+ } -+ -+ abbv_code = get_ULEB128( c ); -+ abbv = get_abbv(cc, abbv_code); -+ sibling = 0; -+ skip_DIE (&sibling, c, abbv, cc); -+ if (abbv->has_children) { -+ if (sibling == 0) -+ skip_level++; -+ else -+ set_position_of_Cursor( c, sibling ); -+ } -+ } -+ } - } - /* Now we need to eat the terminating zero */ - atag = get_ULEB128( c ); --- -2.18.4 - -From 1597c1139127bb02d49f4711a9c9addd877d17cf Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 16 Sep 2021 22:49:41 +0200 -Subject: [PATCH 2/6] readdwarf3: Only read line table for units with addresses - for inlined functions - -When parsing DIEs for inlined functions, only read the line table for -units which can actually contain inlined_subroutines. ---- - coregrind/m_debuginfo/readdwarf3.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index cf8270c8c..7ece77009 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -3134,6 +3134,8 @@ static Bool parse_inl_DIE ( - Bool have_lo = False; - Addr ip_lo = 0; - const HChar *compdir = NULL; -+ Bool has_stmt_list = False; -+ ULong debug_line_offset = 0; - - nf_i = 0; - while (True) { -@@ -3159,15 +3161,19 @@ static Bool parse_inl_DIE ( - ML_(dinfo_free) (str); - } - if (attr == DW_AT_stmt_list && cts.szB > 0) { -- read_filename_table( parser->fndn_ix_Table, compdir, -- cc, cts.u.val, td3 ); -+ has_stmt_list = True; -+ debug_line_offset = cts.u.val; - } - if (attr == DW_AT_sibling && cts.szB > 0) { - parser->sibling = cts.u.val; - } - } -- if (level == 0) -+ if (level == 0) { - setup_cu_svma (cc, have_lo, ip_lo, td3); -+ if (has_stmt_list && unit_has_addrs) -+ read_filename_table( parser->fndn_ix_Table, compdir, -+ cc, debug_line_offset, td3 ); -+ } - } - - if (dtag == DW_TAG_inlined_subroutine) { --- -2.18.4 - -From 528a71f95f8eb124ed284f7cff093b3375bca380 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 18 Sep 2021 00:24:38 +0200 -Subject: [PATCH 3/6] readdwarf3: Reuse fndn_ix_Table as much as possible - -Both the var parser and the inl parser kept a fndn_ix_Table. -Initialize only one per debuginfo read pass and reuse if the stmt offset -is the same as last time (CUs can share the same line table and alt -files do share one for all units). ---- - coregrind/m_debuginfo/readdwarf3.c | 122 +++++++++++++++++------------ - 1 file changed, 72 insertions(+), 50 deletions(-) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 7ece77009..e63e35788 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -1801,9 +1801,6 @@ typedef - Int *level; /* D3 DIE levels */ - Bool *isFunc; /* from DW_AT_subprogram? */ - GExpr **fbGX; /* if isFunc, contains the FB expr, else NULL */ -- /* The fndn_ix file name/dirname table. Is a mapping from dwarf -- integer index to the index in di->fndnpool. */ -- XArray* /* of UInt* */ fndn_ix_Table; - } - D3VarParser; - -@@ -1817,7 +1814,6 @@ var_parser_init ( D3VarParser *parser ) - parser->level = NULL; - parser->isFunc = NULL; - parser->fbGX = NULL; -- parser->fndn_ix_Table = NULL; - } - - /* Release any memory hanging off a variable parser object */ -@@ -2471,12 +2467,39 @@ static void bad_DIE_confusion(int linenr) - } - #define goto_bad_DIE do {bad_DIE_confusion(__LINE__); goto bad_DIE;} while (0) - -+/* Reset the fndn_ix_Table. When we come across the top level DIE for a CU we -+ will copy all the file names out of the .debug_line img area and use this -+ table to look up the copies when we later see filename numbers in -+ DW_TAG_variables etc. The table can be be reused between parsers (var and -+ inline) and between CUs. So we keep a copy of the last one parsed. Call -+ reset_fndn_ix_table before reading a new one from a new offset. */ -+static -+void reset_fndn_ix_table (XArray** fndn_ix_Table, ULong *debug_line_offset, -+ ULong new_offset) -+{ -+ vg_assert (new_offset == -1 -+ || *debug_line_offset != new_offset); -+ Int size = *fndn_ix_Table == NULL ? 0 : VG_(sizeXA) (*fndn_ix_Table); -+ if (size > 0) { -+ VG_(deleteXA) (*fndn_ix_Table); -+ *fndn_ix_Table = NULL; -+ } -+ if (*fndn_ix_Table == NULL) -+ *fndn_ix_Table = VG_(newXA)( ML_(dinfo_zalloc), -+ "di.readdwarf3.reset_ix_table", -+ ML_(dinfo_free), -+ sizeof(UInt) ); -+ *debug_line_offset = new_offset; -+} -+ - __attribute__((noinline)) - static void parse_var_DIE ( - /*MOD*/WordFM* /* of (XArray* of AddrRange, void) */ rangestree, - /*MOD*/XArray* /* of TempVar* */ tempvars, - /*MOD*/XArray* /* of GExpr* */ gexprs, - /*MOD*/D3VarParser* parser, -+ XArray** fndn_ix_Table, -+ ULong *debug_line_offset, - DW_TAG dtag, - UWord posn, - Int level, -@@ -2535,8 +2558,12 @@ static void parse_var_DIE ( - ML_(dinfo_free) (str); - } - if (attr == DW_AT_stmt_list && cts.szB > 0) { -- read_filename_table( parser->fndn_ix_Table, compdir, -- cc, cts.u.val, td3 ); -+ if (cts.u.val != *debug_line_offset) { -+ reset_fndn_ix_table( fndn_ix_Table, debug_line_offset, -+ cts.u.val ); -+ read_filename_table( *fndn_ix_Table, compdir, -+ cc, cts.u.val, td3 ); -+ } - } - } - if (have_lo && have_hi1 && hiIsRelative) -@@ -2730,8 +2757,8 @@ static void parse_var_DIE ( - if (attr == DW_AT_decl_file && cts.szB > 0) { - Int ftabIx = (Int)cts.u.val; - if (ftabIx >= 1 -- && ftabIx < VG_(sizeXA)( parser->fndn_ix_Table )) { -- fndn_ix = *(UInt*)VG_(indexXA)( parser->fndn_ix_Table, ftabIx ); -+ && ftabIx < VG_(sizeXA)( *fndn_ix_Table )) { -+ fndn_ix = *(UInt*)VG_(indexXA)( *fndn_ix_Table, ftabIx ); - } - if (0) VG_(printf)("XXX filename fndn_ix = %u %s\n", fndn_ix, - ML_(fndn_ix2filename) (cc->di, fndn_ix)); -@@ -2958,9 +2985,6 @@ static void parse_var_DIE ( - - typedef - struct { -- /* The fndn_ix file name/dirname table. Is a mapping from dwarf -- integer index to the index in di->fndnpool. */ -- XArray* /* of UInt* */ fndn_ix_Table; - UWord sibling; // sibling of the last read DIE (if it has a sibling). - } - D3InlParser; -@@ -3113,6 +3137,8 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) - __attribute__((noinline)) - static Bool parse_inl_DIE ( - /*MOD*/D3InlParser* parser, -+ XArray** fndn_ix_Table, -+ ULong *debug_line_offset, - DW_TAG dtag, - UWord posn, - Int level, -@@ -3135,7 +3161,7 @@ static Bool parse_inl_DIE ( - Addr ip_lo = 0; - const HChar *compdir = NULL; - Bool has_stmt_list = False; -- ULong debug_line_offset = 0; -+ ULong cu_line_offset = 0; - - nf_i = 0; - while (True) { -@@ -3162,7 +3188,7 @@ static Bool parse_inl_DIE ( - } - if (attr == DW_AT_stmt_list && cts.szB > 0) { - has_stmt_list = True; -- debug_line_offset = cts.u.val; -+ cu_line_offset = cts.u.val; - } - if (attr == DW_AT_sibling && cts.szB > 0) { - parser->sibling = cts.u.val; -@@ -3170,9 +3196,13 @@ static Bool parse_inl_DIE ( - } - if (level == 0) { - setup_cu_svma (cc, have_lo, ip_lo, td3); -- if (has_stmt_list && unit_has_addrs) -- read_filename_table( parser->fndn_ix_Table, compdir, -- cc, debug_line_offset, td3 ); -+ if (has_stmt_list && unit_has_addrs -+ && *debug_line_offset != cu_line_offset) { -+ reset_fndn_ix_table ( fndn_ix_Table, debug_line_offset, -+ cu_line_offset ); -+ read_filename_table( *fndn_ix_Table, compdir, -+ cc, cu_line_offset, td3 ); -+ } - } - } - -@@ -3200,9 +3230,9 @@ static Bool parse_inl_DIE ( - if (attr == DW_AT_call_file && cts.szB > 0) { - Int ftabIx = (Int)cts.u.val; - if (ftabIx >= 1 -- && ftabIx < VG_(sizeXA)( parser->fndn_ix_Table )) { -+ && ftabIx < VG_(sizeXA)( *fndn_ix_Table )) { - caller_fndn_ix = *(UInt*) -- VG_(indexXA)( parser->fndn_ix_Table, ftabIx ); -+ VG_(indexXA)( *fndn_ix_Table, ftabIx ); - } - if (0) VG_(printf)("XXX caller_fndn_ix = %u %s\n", caller_fndn_ix, - ML_(fndn_ix2filename) (cc->di, caller_fndn_ix)); -@@ -4652,6 +4682,8 @@ static void read_DIE ( - /*MOD*/D3TypeParser* typarser, - /*MOD*/D3VarParser* varparser, - /*MOD*/D3InlParser* inlparser, -+ XArray** fndn_ix_Table, -+ ULong *debug_line_offset, - Cursor* c, Bool td3, CUConst* cc, Int level - ) - { -@@ -4713,6 +4745,8 @@ static void read_DIE ( - tempvars, - gexprs, - varparser, -+ fndn_ix_Table, -+ debug_line_offset, - (DW_TAG)atag, - posn, - level, -@@ -4734,6 +4768,8 @@ static void read_DIE ( - inlparser->sibling = 0; - parse_children = - parse_inl_DIE( inlparser, -+ fndn_ix_Table, -+ debug_line_offset, - (DW_TAG)atag, - posn, - level, -@@ -4773,6 +4809,7 @@ static void read_DIE ( - if (parse_children) { - read_DIE( rangestree, tyents, tempvars, gexprs, - typarser, varparser, inlparser, -+ fndn_ix_Table, debug_line_offset, - c, td3, cc, level+1 ); - } else { - Int skip_level = level + 1; -@@ -5006,6 +5043,8 @@ void new_dwarf3_reader_wrk ( - D3TypeParser typarser; - D3VarParser varparser; - D3InlParser inlparser; -+ XArray* /* of UInt */ fndn_ix_Table = NULL; -+ ULong debug_line_offset = (ULong) -1; - Word i, j, n; - Bool td3 = di->trace_symtab; - XArray* /* of TempVar* */ dioff_lookup_tab; -@@ -5145,6 +5184,10 @@ void new_dwarf3_reader_wrk ( - "Overrun whilst reading alternate .debug_info section" ); - section_size = escn_debug_info_alt.szB; - -+ /* Keep track of the last line table we have seen, -+ it might turn up again. */ -+ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); -+ - TRACE_D3("\n------ Parsing alternate .debug_info section ------\n"); - } else if (pass == 1) { - /* Now loop over the Compilation Units listed in the .debug_info -@@ -5155,6 +5198,10 @@ void new_dwarf3_reader_wrk ( - "Overrun whilst reading .debug_info section" ); - section_size = escn_debug_info.szB; - -+ /* Keep track of the last line table we have seen, -+ it might turn up again. */ -+ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); -+ - TRACE_D3("\n------ Parsing .debug_info section ------\n"); - } else { - if (!ML_(sli_is_valid)(escn_debug_types)) -@@ -5165,6 +5212,10 @@ void new_dwarf3_reader_wrk ( - "Overrun whilst reading .debug_types section" ); - section_size = escn_debug_types.szB; - -+ /* Keep track of the last line table we have seen, -+ it might turn up again. */ -+ reset_fndn_ix_table(&fndn_ix_Table, &debug_line_offset, (ULong) -1); -+ - TRACE_D3("\n------ Parsing .debug_types section ------\n"); - } - -@@ -5257,26 +5308,6 @@ void new_dwarf3_reader_wrk ( - unitary_range_list(0UL, ~0UL), - -1, False/*isFunc*/, NULL/*fbGX*/ ); - -- /* And set up the fndn_ix_Table. When we come across the top -- level DIE for this CU (which is what the next call to -- read_DIE should process) we will copy all the file names out -- of the .debug_line img area and use this table to look up the -- copies when we later see filename numbers in DW_TAG_variables -- etc. */ -- vg_assert(!varparser.fndn_ix_Table ); -- varparser.fndn_ix_Table -- = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.ndrw.5var", -- ML_(dinfo_free), -- sizeof(UInt) ); -- } -- -- if (VG_(clo_read_inline_info)) { -- /* fndn_ix_Table for the inlined call parser */ -- vg_assert(!inlparser.fndn_ix_Table ); -- inlparser.fndn_ix_Table -- = VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.ndrw.5inl", -- ML_(dinfo_free), -- sizeof(UInt) ); - } - - /* Now read the one-and-only top-level DIE for this CU. */ -@@ -5284,6 +5315,7 @@ void new_dwarf3_reader_wrk ( - read_DIE( rangestree, - tyents, tempvars, gexprs, - &typarser, &varparser, &inlparser, -+ &fndn_ix_Table, &debug_line_offset, - &info, td3, &cc, 0 ); - - cu_offset_now = get_position_of_Cursor( &info ); -@@ -5328,16 +5360,6 @@ void new_dwarf3_reader_wrk ( - typestack_preen( &typarser, td3, -2 ); - } - -- if (VG_(clo_read_var_info)) { -- vg_assert(varparser.fndn_ix_Table ); -- VG_(deleteXA)( varparser.fndn_ix_Table ); -- varparser.fndn_ix_Table = NULL; -- } -- if (VG_(clo_read_inline_info)) { -- vg_assert(inlparser.fndn_ix_Table ); -- VG_(deleteXA)( inlparser.fndn_ix_Table ); -- inlparser.fndn_ix_Table = NULL; -- } - clear_CUConst(&cc); - - if (cu_offset_now == section_size) -@@ -5346,6 +5368,8 @@ void new_dwarf3_reader_wrk ( - } - } - -+ if (fndn_ix_Table != NULL) -+ VG_(deleteXA)(fndn_ix_Table); - - if (VG_(clo_read_var_info)) { - /* From here on we're post-processing the stuff we got -@@ -5662,8 +5686,6 @@ void new_dwarf3_reader_wrk ( - ML_(dinfo_free)( tyents_to_keep_cache ); - tyents_to_keep_cache = NULL; - -- vg_assert( varparser.fndn_ix_Table == NULL ); -- - /* And the signatured type hash. */ - VG_(HT_destruct) ( signature_types, ML_(dinfo_free) ); - --- -2.18.4 - -From 8548d2e4ca0fb485597ddbf958e2064620ee972a Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 18 Sep 2021 03:23:52 +0200 -Subject: [PATCH 4/6] readdwarf3: Immediately skip to end of CU when not - parsing children - ---- - coregrind/m_debuginfo/readdwarf3.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index e63e35788..b02e23990 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -4787,6 +4787,16 @@ static void read_DIE ( - vg_assert (inlparser->sibling == 0 || inlparser->sibling == sibling); - } - -+ /* Top level CU DIE, but we don't want to read anything else, just skip -+ to the end and return. */ -+ if (level == 0 && !parse_children) { -+ UWord cu_size_including_IniLen = (cc->unit_length -+ + (cc->is_dw64 ? 12 : 4)); -+ set_position_of_Cursor( c, (cc->cu_start_offset -+ + cu_size_including_IniLen)); -+ return; -+ } -+ - if (after_die_c_offset > 0) { - // DIE was read by a parser above, so we know where the DIE ends. - set_position_of_Cursor( c, after_die_c_offset ); --- -2.18.4 - -From 2295d273ee03781f5bf112ccedabcea03ca79bf5 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 18 Sep 2021 22:16:33 +0200 -Subject: [PATCH 5/6] readdwarf3: Reuse abbrev if possible between units - -Instead of destroying the ht_abbrvs after processing a CU save it -and the offset so it can be reused for the next CU if that happens -to have the same abbrev offset. dwz compressed DWARF often reuse -the same abbrev for multiple CUs. ---- - coregrind/m_debuginfo/readdwarf3.c | 40 ++++++++++++++++++++++-------- - 1 file changed, 29 insertions(+), 11 deletions(-) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index b02e23990..0c86b712e 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -470,6 +470,7 @@ typedef - struct _DebugInfo* di; - /* --- a hash table of g_abbv (i.e. parsed abbreviations) --- */ - VgHashTable *ht_abbvs; -+ ULong debug_abbrev_offset; - - /* True if this came from .debug_types; otherwise it came from - .debug_info. */ -@@ -1101,13 +1102,6 @@ static g_abbv* get_abbv (const CUConst* cc, ULong abbv_code) - return abbv; - } - --/* Free the memory allocated in CUConst. */ --static void clear_CUConst (CUConst* cc) --{ -- VG_(HT_destruct) ( cc->ht_abbvs, ML_(dinfo_free)); -- cc->ht_abbvs = NULL; --} -- - /* Parse the Compilation Unit header indicated at 'c' and - initialise 'cc' accordingly. */ - static __attribute__((noinline)) -@@ -1115,6 +1109,8 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - Bool td3, - Cursor* c, - DiSlice escn_debug_abbv, -+ ULong last_debug_abbrev_offset, -+ VgHashTable *last_ht_abbvs, - Bool type_unit, - Bool alt_info ) - { -@@ -1190,7 +1186,15 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - cc->debug_abbv.ioff += debug_abbrev_offset; - cc->debug_abbv.szB -= debug_abbrev_offset; - -- init_ht_abbvs(cc, td3); -+ cc->debug_abbrev_offset = debug_abbrev_offset; -+ if (last_ht_abbvs != NULL -+ && debug_abbrev_offset == last_debug_abbrev_offset) { -+ cc->ht_abbvs = last_ht_abbvs; -+ } else { -+ if (last_ht_abbvs != NULL) -+ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); -+ init_ht_abbvs(cc, td3); -+ } - } - - /* This represents a single signatured type. It maps a type signature -@@ -5141,6 +5145,8 @@ void new_dwarf3_reader_wrk ( - TRACE_D3("\n------ Collecting signatures from " - ".debug_types section ------\n"); - -+ ULong last_debug_abbrev_offset = (ULong) -1; -+ VgHashTable *last_ht_abbvs = NULL; - while (True) { - UWord cu_start_offset, cu_offset_now; - CUConst cc; -@@ -5149,7 +5155,9 @@ void new_dwarf3_reader_wrk ( - TRACE_D3("\n"); - TRACE_D3(" Compilation Unit @ offset 0x%lx:\n", cu_start_offset); - /* parse_CU_header initialises the CU's abbv hash table. */ -- parse_CU_Header( &cc, td3, &info, escn_debug_abbv, True, False ); -+ parse_CU_Header( &cc, td3, &info, escn_debug_abbv, -+ last_debug_abbrev_offset, last_ht_abbvs, -+ True, False ); - - /* Needed by cook_die. */ - cc.types_cuOff_bias = escn_debug_info.szB; -@@ -5163,7 +5171,8 @@ void new_dwarf3_reader_wrk ( - cu_offset_now = (cu_start_offset + cc.unit_length - + (cc.is_dw64 ? 12 : 4)); - -- clear_CUConst ( &cc); -+ last_debug_abbrev_offset = cc.debug_abbrev_offset; -+ last_ht_abbvs = cc.ht_abbvs; - - if (cu_offset_now >= escn_debug_types.szB) { - break; -@@ -5171,6 +5180,8 @@ void new_dwarf3_reader_wrk ( - - set_position_of_Cursor ( &info, cu_offset_now ); - } -+ if (last_ht_abbvs != NULL) -+ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); - } - - /* Perform three DIE-reading passes. The first pass reads DIEs from -@@ -5229,6 +5240,8 @@ void new_dwarf3_reader_wrk ( - TRACE_D3("\n------ Parsing .debug_types section ------\n"); - } - -+ ULong last_debug_abbrev_offset = (ULong) -1; -+ VgHashTable *last_ht_abbvs = NULL; - while (True) { - ULong cu_start_offset, cu_offset_now; - CUConst cc; -@@ -5277,9 +5290,11 @@ void new_dwarf3_reader_wrk ( - /* parse_CU_header initialises the CU's hashtable of abbvs ht_abbvs */ - if (pass == 0) { - parse_CU_Header( &cc, td3, &info, escn_debug_abbv_alt, -+ last_debug_abbrev_offset, last_ht_abbvs, - False, True ); - } else { - parse_CU_Header( &cc, td3, &info, escn_debug_abbv, -+ last_debug_abbrev_offset, last_ht_abbvs, - pass == 2, False ); - } - cc.escn_debug_str = pass == 0 ? escn_debug_str_alt -@@ -5370,12 +5385,15 @@ void new_dwarf3_reader_wrk ( - typestack_preen( &typarser, td3, -2 ); - } - -- clear_CUConst(&cc); -+ last_debug_abbrev_offset = cc.debug_abbrev_offset; -+ last_ht_abbvs = cc.ht_abbvs; - - if (cu_offset_now == section_size) - break; - /* else keep going */ - } -+ if (last_ht_abbvs != NULL) -+ VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); - } - - if (fndn_ix_Table != NULL) --- -2.18.4 - -From 24faa4c59b719c4a4bb2b21c2024ecb52c9be875 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sun, 19 Sep 2021 14:30:19 +0200 -Subject: [PATCH 6/6] readdwarf3: Introduce abbv_state to read .debug_abbrev - more lazily - -With the inline parser often a lot of DIEs are skipped, so reading -all abbrevs up front wastes time and memory. A lot of time and memory -can be saved by reading the abbrevs on demand. Do this by introducing -an abbv_state that is used to keep track of the abbrevs already read. -This does technically make the CUConst struct not const. ---- - coregrind/m_debuginfo/readdwarf3.c | 145 +++++++++++++++++------------ - 1 file changed, 88 insertions(+), 57 deletions(-) - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 0c86b712e..4ac23a3c4 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -415,6 +415,23 @@ typedef - described by this g_abbv; */ - } g_abbv; - -+/* Holds information about the .debug_abbrev section for this CU. The current -+ Cursor into the abbrev section, the known abbrev codes are but into an hash -+ table. The (starting) offset into the abbrev_offset can be used to check -+ whether the abbv can be shared between CUs. The done boolean is set when all -+ known codes have been read. Initialize a new abbv_state with init_ht_abbvs. -+ To read any new abbrev codes not yet in the hash table call find_ht_abbvs -+ (get_abbv will first query the ht_abbvs, then if not done, call -+ find_ht_abbvs). */ -+typedef -+ struct _abbv_state { -+ Cursor c; /* Current cursor into .debug_abbrev. */ -+ VgHashTable *ht_abbvs; /* Hash table mapping codes to abbrevs. */ -+ ULong debug_abbrev_offset; /* Starting offset into .debug_abbrev. */ -+ Bool done; /* Whether there (might) still be new abbrev codes not yet -+ in the cache. */ -+ } abbv_state; -+ - /* Holds information that is constant through the parsing of a - Compilation Unit. This is basically plumbed through to - everywhere. */ -@@ -468,9 +485,9 @@ typedef - UWord alt_cuOff_bias; - /* --- Needed so we can add stuff to the string table. --- */ - struct _DebugInfo* di; -- /* --- a hash table of g_abbv (i.e. parsed abbreviations) --- */ -- VgHashTable *ht_abbvs; -- ULong debug_abbrev_offset; -+ /* --- State of the hash table of g_abbv (i.e. parsed abbreviations) -+ technically makes this struct not const. --- */ -+ abbv_state abbv; - - /* True if this came from .debug_types; otherwise it came from - .debug_info. */ -@@ -998,18 +1015,27 @@ get_range_list ( const CUConst* cc, - #define VARSZ_FORM 0xffffffff - static UInt get_Form_szB (const CUConst* cc, DW_FORM form ); - --/* Initialises the hash table of abbreviations. -- We do a single scan of the abbv slice to parse and -- build all abbreviations, for the following reasons: -- * all or most abbreviations will be needed in any case -- (at least for var-info reading). -- * re-reading each time an abbreviation causes a lot of calls -- to get_ULEB128. -- * a CU should not have many abbreviations. */ --static void init_ht_abbvs (CUConst* cc, -+/* Initialises the hash table of abbreviations. This only sets up the abbv -+ Cursor and hash table, but does not try to read any abbrevs yes. The actual -+ reading of abbrevs will be done by get_abbv by calling find_ht_abbvs on -+ demand if a requested abbrev code isn't in the hash table yet. When using the -+ inline parser a lot of abbrevs will not be needed so reading everything -+ upfront will often waste time and memory. */ -+static void init_ht_abbvs (CUConst* cc, ULong debug_abbrev_offset, - Bool td3) - { -- Cursor c; -+ Cursor *c = &cc->abbv.c; -+ init_Cursor( c, cc->debug_abbv, 0, cc->barf, -+ "Overrun whilst parsing .debug_abbrev section(2)" ); -+ cc->abbv.ht_abbvs = VG_(HT_construct) ("di.readdwarf3.ht_abbvs"); -+ cc->abbv.debug_abbrev_offset = debug_abbrev_offset; -+ cc->abbv.done = False; -+} -+ -+static g_abbv *find_ht_abbvs (CUConst* cc, ULong abbv_code, -+ Bool td3) -+{ -+ Cursor *c; - g_abbv *ta; // temporary abbreviation, reallocated if needed. - UInt ta_nf_maxE; // max nr of pairs in ta.nf[], doubled when reallocated. - UInt ta_nf_n; // nr of pairs in ta->nf that are initialised. -@@ -1020,16 +1046,18 @@ static void init_ht_abbvs (CUConst* cc, - - ta_nf_maxE = 10; // starting with enough for 9 pairs+terminating pair. - ta = ML_(dinfo_zalloc) ("di.readdwarf3.ht_ta_nf", SZ_G_ABBV(ta_nf_maxE)); -- cc->ht_abbvs = VG_(HT_construct) ("di.readdwarf3.ht_abbvs"); - -- init_Cursor( &c, cc->debug_abbv, 0, cc->barf, -- "Overrun whilst parsing .debug_abbrev section(2)" ); -+ c = &cc->abbv.c; - while (True) { -- ta->abbv_code = get_ULEB128( &c ); -- if (ta->abbv_code == 0) break; /* end of the table */ -+ ht_ta = NULL; -+ ta->abbv_code = get_ULEB128( c ); -+ if (ta->abbv_code == 0) { -+ cc->abbv.done = True; -+ break; /* end of the table */ -+ } - -- ta->atag = get_ULEB128( &c ); -- ta->has_children = get_UChar( &c ); -+ ta->atag = get_ULEB128( c ); -+ ta->has_children = get_UChar( c ); - ta_nf_n = 0; - while (True) { - if (ta_nf_n >= ta_nf_maxE) { -@@ -1040,10 +1068,10 @@ static void init_ht_abbvs (CUConst* cc, - VG_(memcpy) (ta, old_ta, SZ_G_ABBV(ta_nf_n)); - ML_(dinfo_free) (old_ta); - } -- ta->nf[ta_nf_n].at_name = get_ULEB128( &c ); -- ta->nf[ta_nf_n].at_form = get_ULEB128( &c ); -+ ta->nf[ta_nf_n].at_name = get_ULEB128( c ); -+ ta->nf[ta_nf_n].at_form = get_ULEB128( c ); - if (ta->nf[ta_nf_n].at_form == DW_FORM_implicit_const) -- ta->nf[ta_nf_n].at_val = get_SLEB128( &c ); -+ ta->nf[ta_nf_n].at_val = get_SLEB128( c ); - if (ta->nf[ta_nf_n].at_name == 0 && ta->nf[ta_nf_n].at_form == 0) { - ta_nf_n++; - break; -@@ -1075,7 +1103,7 @@ static void init_ht_abbvs (CUConst* cc, - - ht_ta = ML_(dinfo_zalloc) ("di.readdwarf3.ht_ta", SZ_G_ABBV(ta_nf_n)); - VG_(memcpy) (ht_ta, ta, SZ_G_ABBV(ta_nf_n)); -- VG_(HT_add_node) ( cc->ht_abbvs, ht_ta ); -+ VG_(HT_add_node) ( cc->abbv.ht_abbvs, ht_ta ); - if (TD3) { - TRACE_D3(" Adding abbv_code %lu TAG %s [%s] nf %u ", - ht_ta->abbv_code, ML_(pp_DW_TAG)(ht_ta->atag), -@@ -1086,19 +1114,27 @@ static void init_ht_abbvs (CUConst* cc, - TRACE_D3("[%u,%u] ", ta->nf[i].skip_szB, ta->nf[i].next_nf); - TRACE_D3("\n"); - } -+ if (ht_ta->abbv_code == abbv_code) -+ break; - } - - ML_(dinfo_free) (ta); - #undef SZ_G_ABBV -+ -+ return ht_ta; - } - --static g_abbv* get_abbv (const CUConst* cc, ULong abbv_code) -+static g_abbv* get_abbv (CUConst* cc, ULong abbv_code, -+ Bool td3) - { - g_abbv *abbv; - -- abbv = VG_(HT_lookup) (cc->ht_abbvs, abbv_code); -+ abbv = VG_(HT_lookup) (cc->abbv.ht_abbvs, abbv_code); -+ if (!abbv && !cc->abbv.done) -+ abbv = find_ht_abbvs (cc, abbv_code, td3); - if (!abbv) - cc->barf ("abbv_code not found in ht_abbvs table"); -+ - return abbv; - } - -@@ -1109,8 +1145,7 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - Bool td3, - Cursor* c, - DiSlice escn_debug_abbv, -- ULong last_debug_abbrev_offset, -- VgHashTable *last_ht_abbvs, -+ abbv_state last_abbv, - Bool type_unit, - Bool alt_info ) - { -@@ -1186,14 +1221,13 @@ void parse_CU_Header ( /*OUT*/CUConst* cc, - cc->debug_abbv.ioff += debug_abbrev_offset; - cc->debug_abbv.szB -= debug_abbrev_offset; - -- cc->debug_abbrev_offset = debug_abbrev_offset; -- if (last_ht_abbvs != NULL -- && debug_abbrev_offset == last_debug_abbrev_offset) { -- cc->ht_abbvs = last_ht_abbvs; -+ if (last_abbv.ht_abbvs != NULL -+ && debug_abbrev_offset == last_abbv.debug_abbrev_offset) { -+ cc->abbv = last_abbv; - } else { -- if (last_ht_abbvs != NULL) -- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); -- init_ht_abbvs(cc, td3); -+ if (last_abbv.ht_abbvs != NULL) -+ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); -+ init_ht_abbvs(cc, debug_abbrev_offset, td3); - } - } - -@@ -3016,7 +3050,7 @@ typedef - table is kept, while we must handle all abbreviations in all CUs - referenced by an absori (being a reference to an alt CU, or a previous - or following CU). */ --static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) -+static const HChar* get_inlFnName (Int absori, CUConst* cc, Bool td3) - { - Cursor c; - const g_abbv *abbv; -@@ -3072,7 +3106,7 @@ static const HChar* get_inlFnName (Int absori, const CUConst* cc, Bool td3) - "Overrun get_inlFnName absori"); - - abbv_code = get_ULEB128( &c ); -- abbv = get_abbv ( cc, abbv_code); -+ abbv = get_abbv ( cc, abbv_code, td3); - atag = abbv->atag; - TRACE_D3(" <%lx>: Abbrev Number: %llu (%s)\n", - posn, abbv_code, ML_(pp_DW_TAG)( atag ) ); -@@ -4707,7 +4741,7 @@ static void read_DIE ( - /* --- Deal with this DIE --- */ - posn = cook_die( cc, get_position_of_Cursor( c ) ); - abbv_code = get_ULEB128( c ); -- abbv = get_abbv(cc, abbv_code); -+ abbv = get_abbv(cc, abbv_code, td3); - atag = abbv->atag; - - if (TD3) { -@@ -4840,7 +4874,7 @@ static void read_DIE ( - } - - abbv_code = get_ULEB128( c ); -- abbv = get_abbv(cc, abbv_code); -+ abbv = get_abbv(cc, abbv_code, td3); - sibling = 0; - skip_DIE (&sibling, c, abbv, cc); - if (abbv->has_children) { -@@ -5145,8 +5179,9 @@ void new_dwarf3_reader_wrk ( - TRACE_D3("\n------ Collecting signatures from " - ".debug_types section ------\n"); - -- ULong last_debug_abbrev_offset = (ULong) -1; -- VgHashTable *last_ht_abbvs = NULL; -+ abbv_state last_abbv; -+ last_abbv.debug_abbrev_offset = (ULong) -1; -+ last_abbv.ht_abbvs = NULL; - while (True) { - UWord cu_start_offset, cu_offset_now; - CUConst cc; -@@ -5156,8 +5191,7 @@ void new_dwarf3_reader_wrk ( - TRACE_D3(" Compilation Unit @ offset 0x%lx:\n", cu_start_offset); - /* parse_CU_header initialises the CU's abbv hash table. */ - parse_CU_Header( &cc, td3, &info, escn_debug_abbv, -- last_debug_abbrev_offset, last_ht_abbvs, -- True, False ); -+ last_abbv, True, False ); - - /* Needed by cook_die. */ - cc.types_cuOff_bias = escn_debug_info.szB; -@@ -5171,8 +5205,7 @@ void new_dwarf3_reader_wrk ( - cu_offset_now = (cu_start_offset + cc.unit_length - + (cc.is_dw64 ? 12 : 4)); - -- last_debug_abbrev_offset = cc.debug_abbrev_offset; -- last_ht_abbvs = cc.ht_abbvs; -+ last_abbv = cc.abbv; - - if (cu_offset_now >= escn_debug_types.szB) { - break; -@@ -5180,8 +5213,8 @@ void new_dwarf3_reader_wrk ( - - set_position_of_Cursor ( &info, cu_offset_now ); - } -- if (last_ht_abbvs != NULL) -- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); -+ if (last_abbv.ht_abbvs != NULL) -+ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); - } - - /* Perform three DIE-reading passes. The first pass reads DIEs from -@@ -5240,8 +5273,9 @@ void new_dwarf3_reader_wrk ( - TRACE_D3("\n------ Parsing .debug_types section ------\n"); - } - -- ULong last_debug_abbrev_offset = (ULong) -1; -- VgHashTable *last_ht_abbvs = NULL; -+ abbv_state last_abbv; -+ last_abbv.debug_abbrev_offset = (ULong) -1; -+ last_abbv.ht_abbvs = NULL; - while (True) { - ULong cu_start_offset, cu_offset_now; - CUConst cc; -@@ -5290,12 +5324,10 @@ void new_dwarf3_reader_wrk ( - /* parse_CU_header initialises the CU's hashtable of abbvs ht_abbvs */ - if (pass == 0) { - parse_CU_Header( &cc, td3, &info, escn_debug_abbv_alt, -- last_debug_abbrev_offset, last_ht_abbvs, -- False, True ); -+ last_abbv, False, True ); - } else { - parse_CU_Header( &cc, td3, &info, escn_debug_abbv, -- last_debug_abbrev_offset, last_ht_abbvs, -- pass == 2, False ); -+ last_abbv, pass == 2, False ); - } - cc.escn_debug_str = pass == 0 ? escn_debug_str_alt - : escn_debug_str; -@@ -5385,15 +5417,14 @@ void new_dwarf3_reader_wrk ( - typestack_preen( &typarser, td3, -2 ); - } - -- last_debug_abbrev_offset = cc.debug_abbrev_offset; -- last_ht_abbvs = cc.ht_abbvs; -+ last_abbv = cc.abbv; - - if (cu_offset_now == section_size) - break; - /* else keep going */ - } -- if (last_ht_abbvs != NULL) -- VG_(HT_destruct) (last_ht_abbvs, ML_(dinfo_free)); -+ if (last_abbv.ht_abbvs != NULL) -+ VG_(HT_destruct) (last_abbv.ht_abbvs, ML_(dinfo_free)); - } - - if (fndn_ix_Table != NULL) --- -2.18.4 - diff --git a/valgrind-3.17.0-ppc64-isa-3.1-tests.patch b/valgrind-3.17.0-ppc64-isa-3.1-tests.patch deleted file mode 100644 index b7f1a6c..0000000 --- a/valgrind-3.17.0-ppc64-isa-3.1-tests.patch +++ /dev/null @@ -1,1712 +0,0 @@ -commit 4bcc6c8a97c10c4dd41b35bd3b3035ec4037d524 -Author: Carl Love -Date: Mon Nov 16 19:09:47 2020 -0600 - - VSX Permute Control Vector Generate Operation tests. - -diff --git a/NEWS b/NEWS -index aa398cf54..2e42e74b2 100644 ---- a/NEWS -+++ b/NEWS -@@ -154,6 +154,7 @@ where XXXXXX is the bug number as listed below. - 428909 helgrind: need to intercept duplicate libc definitions for Fedora 33 - 429352 PPC ISA 3.1 support is missing, part 7 - 429354 PPC ISA 3.1 support is missing, part 8 -+429375 PPC ISA 3.1 support is missing, part 9 - 429692 unhandled ppc64le-linux syscall: 147 (getsid) - 429864 s390x: C++ atomic test_and_set yields false-positive memcheck - diagnostics -diff --git a/none/tests/ppc64/test_isa_3_1_XT.c b/none/tests/ppc64/test_isa_3_1_XT.c -index c16ddedac..a54e8763a 100644 ---- a/none/tests/ppc64/test_isa_3_1_XT.c -+++ b/none/tests/ppc64/test_isa_3_1_XT.c -@@ -491,6 +491,54 @@ static void test_pstxv_4 (void) { - static void test_pstxv_0 (void) { - __asm__ __volatile__ ("pstxv %x0, 0(%1), 0" :: "wa" (vec_xs), "r" (ra) ); - } -+static void test_xxgenpcvbm_imm0 (void) { -+ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvbm_imm1 (void) { -+ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvbm_imm2 (void) { -+ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvbm_imm3 (void) { -+ __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvhm_imm0 (void) { -+ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvhm_imm1 (void) { -+ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvhm_imm2 (void) { -+ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvhm_imm3 (void) { -+ __asm__ __volatile__ ("xxgenpcvhm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvwm_imm0 (void) { -+ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvwm_imm1 (void) { -+ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvwm_imm2 (void) { -+ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvwm_imm3 (void) { -+ __asm__ __volatile__ ("xxgenpcvwm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvdm_imm0 (void) { -+ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvdm_imm1 (void) { -+ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 1" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvdm_imm2 (void) { -+ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 2" : "=wa" (vec_xt) : "v" (vrb) ); -+} -+static void test_xxgenpcvdm_imm3 (void) { -+ __asm__ __volatile__ ("xxgenpcvdm %x0, %1, 3" : "=wa" (vec_xt) : "v" (vrb) ); -+} - - static test_list_t testgroup_generic[] = { - { &test_lxvkq_imm1, "lxvkq imm1", "XT,UIM"}, /* bcwp */ -@@ -592,6 +640,22 @@ static test_list_t testgroup_generic[] = { - { &test_xxblendvw, "xxblendvw", "XT,XA,XB,XC"}, /* bcs */ - { &test_xxeval_imm0, "xxeval imm0", "XT,XA,XB,XC,IMM"}, /* bcwp */ - { &test_xxeval_imm3, "xxeval imm3", "XT,XA,XB,XC,IMM"}, /* bcwp */ -+ { &test_xxgenpcvbm_imm0, "xxgenpcvbm imm0", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvbm_imm1, "xxgenpcvbm imm1", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvbm_imm2, "xxgenpcvbm imm2", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvbm_imm3, "xxgenpcvbm imm3", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvdm_imm0, "xxgenpcvdm imm0", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvdm_imm1, "xxgenpcvdm imm1", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvdm_imm2, "xxgenpcvdm imm2", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvdm_imm3, "xxgenpcvdm imm3", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvhm_imm0, "xxgenpcvhm imm0", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvhm_imm1, "xxgenpcvhm imm1", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvhm_imm2, "xxgenpcvhm imm2", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvhm_imm3, "xxgenpcvhm imm3", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvwm_imm0, "xxgenpcvwm imm0", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvwm_imm1, "xxgenpcvwm imm1", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvwm_imm2, "xxgenpcvwm imm2", "XT,VRB,IMM"}, /* bcwp */ -+ { &test_xxgenpcvwm_imm3, "xxgenpcvwm imm3", "XT,VRB,IMM"}, /* bcwp */ - { &test_xxpermx_imm0, "xxpermx imm0", "XT,XA,XB,XC,UIM"}, /* bcwp */ - { &test_xxpermx_imm3, "xxpermx imm3", "XT,XA,XB,XC,UIM"}, /* bcwp */ - { &test_xxsplti32dx_ix0_imm0xa5a5a5a5, "xxsplti32dx ix0_imm0xa5a5a5a5", "XT,IX,IMM32"}, /* bcwp */ -diff --git a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -index efa95884e..8b5f1d1a3 100644 ---- a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -+++ b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -@@ -4644,6 +4644,230 @@ xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 - xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => 8000000000000000 7f800000ff800000 - xxeval imm3 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => 8000000000000000 7f800000ff800000 - -+xxgenpcvbm imm0 7f800000ff800000,ff8000007f800000 => 18031a1b04051e1f 1121314021617 -+xxgenpcvbm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 5061a1b1c071e1f 11010214150304 -+xxgenpcvbm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 31904051c1d0607 1000121301021617 -+xxgenpcvbm imm0 0080000e8080000e,0180055e0180077e => 18021a1b03041e1f 1000121314011617 -+xxgenpcvbm imm0 0180055e0180077e,0000111e8000222e => 18011a1b1c021e1f 1011121300151617 -+xxgenpcvbm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b011d1e1f 1000121314151617 -+xxgenpcvbm imm0 7ff0000000000000,fff0000000000000 => 18021a1b1c1d1e1f 1121314151617 -+xxgenpcvbm imm0 fff0000000000000,2208400000000000 => 11a1b1c1d1e1f 1011121314151617 -+xxgenpcvbm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvbm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1121302151617 -+xxgenpcvbm imm0 ffff000180000001,0000000000000000 => 11a1b021d1e1f 1011121314151617 -+xxgenpcvbm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 11121314151617 -+xxgenpcvbm imm0 8000000000000000,7f800000ff800000 => 3191a1b1c1d1e1f 1000121301021617 -+ -+xxgenpcvbm imm1 7f800000ff800000,ff8000007f800000 => 0 105090c0d0000 -+xxgenpcvbm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 203060708090d -+xxgenpcvbm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 10405080a0b0e0f -+xxgenpcvbm imm1 0080000e8080000e,0180055e0180077e => 0 105090c0d000000 -+xxgenpcvbm imm1 0180055e0180077e,0000111e8000222e => 0 4090d0000000000 -+xxgenpcvbm imm1 0000111e8000222e,7ff0000000000000 => 0 10c000000000000 -+xxgenpcvbm imm1 7ff0000000000000,fff0000000000000 => 0 1090000000000 -+xxgenpcvbm imm1 fff0000000000000,2208400000000000 => 0 809000000000000 -+xxgenpcvbm imm1 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvbm imm1 0000000000000009,ffff000180000001 => 0 1040000000000 -+xxgenpcvbm imm1 ffff000180000001,0000000000000000 => 0 8090c0000000000 -+xxgenpcvbm imm1 0000000000000000,8000000000000000 => 0 0 -+xxgenpcvbm imm1 8000000000000000,7f800000ff800000 => 0 104050800000000 -+ -+xxgenpcvbm imm2 7f800000ff800000,ff8000007f800000 => 1702151401001110 5041d1c1b031918 -+xxgenpcvbm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 201151413001110 71e06051b1a0403 -+xxgenpcvbm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 416030213120100 1f071d1c06051918 -+xxgenpcvbm imm2 0080000e8080000e,0180055e0180077e => 1702151401001110 1f041d1c1b031918 -+xxgenpcvbm imm2 0180055e0180077e,0000111e8000222e => 1701151413001110 1f1e1d1c021a1918 -+xxgenpcvbm imm2 0000111e8000222e,7ff0000000000000 => 1716151400121110 1f011d1c1b1a1918 -+xxgenpcvbm imm2 7ff0000000000000,fff0000000000000 => 1700151413121110 2011d1c1b1a1918 -+xxgenpcvbm imm2 fff0000000000000,2208400000000000 => 100151413121110 1f1e1d1c1b1a1918 -+xxgenpcvbm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvbm imm2 0000000000000009,ffff000180000001 => 1716151413121110 2011d1c001a1918 -+xxgenpcvbm imm2 ffff000180000001,0000000000000000 => 201151400121110 1f1e1d1c1b1a1918 -+xxgenpcvbm imm2 0000000000000000,8000000000000000 => 1716151413121110 1e1d1c1b1a1918 -+xxgenpcvbm imm2 8000000000000000,7f800000ff800000 => 16151413121110 1f031d1c02011918 -+ -+xxgenpcvbm imm3 7f800000ff800000,ff8000007f800000 => f0e0a060302 0 -+xxgenpcvbm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0d0c0908070602 0 -+xxgenpcvbm imm3 ff7ffffe7f7ffffe,0080000e8080000e => e0b0a0705040100 0 -+xxgenpcvbm imm3 0080000e8080000e,0180055e0180077e => e0a060302 0 -+xxgenpcvbm imm3 0180055e0180077e,0000111e8000222e => b0602 0 -+xxgenpcvbm imm3 0000111e8000222e,7ff0000000000000 => e03 0 -+xxgenpcvbm imm3 7ff0000000000000,fff0000000000000 => f0e06 0 -+xxgenpcvbm imm3 fff0000000000000,2208400000000000 => 706 0 -+xxgenpcvbm imm3 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvbm imm3 0000000000000009,ffff000180000001 => f0e0b 0 -+xxgenpcvbm imm3 ffff000180000001,0000000000000000 => 70603 0 -+xxgenpcvbm imm3 0000000000000000,8000000000000000 => f 0 -+xxgenpcvbm imm3 8000000000000000,7f800000ff800000 => e0b0a07 0 -+ -+xxgenpcvdm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b1c1d1e1f 1020304050607 -+xxgenpcvdm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 8090a0b0c0d0e0f 1020304050607 -+xxgenpcvdm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 1020304050607 1011121314151617 -+xxgenpcvdm imm0 0080000e8080000e,0180055e0180077e => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvdm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvdm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvdm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1020304050607 -+xxgenpcvdm imm0 fff0000000000000,2208400000000000 => 1020304050607 1011121314151617 -+xxgenpcvdm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvdm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1020304050607 -+xxgenpcvdm imm0 ffff000180000001,0000000000000000 => 1020304050607 1011121314151617 -+xxgenpcvdm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1020304050607 -+xxgenpcvdm imm0 8000000000000000,7f800000ff800000 => 1020304050607 1011121314151617 -+ -+xxgenpcvdm imm1 7f800000ff800000,ff8000007f800000 => 0 1020304050607 -+xxgenpcvdm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 8090a0b0c0d0e0f 1020304050607 -+xxgenpcvdm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 8090a0b0c0d0e0f -+xxgenpcvdm imm1 0080000e8080000e,0180055e0180077e => 0 0 -+xxgenpcvdm imm1 0180055e0180077e,0000111e8000222e => 0 0 -+xxgenpcvdm imm1 0000111e8000222e,7ff0000000000000 => 0 0 -+xxgenpcvdm imm1 7ff0000000000000,fff0000000000000 => 0 1020304050607 -+xxgenpcvdm imm1 fff0000000000000,2208400000000000 => 0 8090a0b0c0d0e0f -+xxgenpcvdm imm1 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvdm imm1 0000000000000009,ffff000180000001 => 0 1020304050607 -+xxgenpcvdm imm1 ffff000180000001,0000000000000000 => 0 8090a0b0c0d0e0f -+xxgenpcvdm imm1 0000000000000000,8000000000000000 => 0 1020304050607 -+xxgenpcvdm imm1 8000000000000000,7f800000ff800000 => 0 8090a0b0c0d0e0f -+ -+xxgenpcvdm imm2 7f800000ff800000,ff8000007f800000 => 1716151413121110 706050403020100 -+xxgenpcvdm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 706050403020100 f0e0d0c0b0a0908 -+xxgenpcvdm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 706050403020100 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 0080000e8080000e,0180055e0180077e => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 0000111e8000222e,7ff0000000000000 => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 706050403020100 -+xxgenpcvdm imm2 fff0000000000000,2208400000000000 => 706050403020100 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 0000000000000009,ffff000180000001 => 1716151413121110 706050403020100 -+xxgenpcvdm imm2 ffff000180000001,0000000000000000 => 706050403020100 1f1e1d1c1b1a1918 -+xxgenpcvdm imm2 0000000000000000,8000000000000000 => 1716151413121110 706050403020100 -+xxgenpcvdm imm2 8000000000000000,7f800000ff800000 => 706050403020100 1f1e1d1c1b1a1918 -+ -+xxgenpcvdm imm3 7f800000ff800000,ff8000007f800000 => f0e0d0c0b0a0908 0 -+xxgenpcvdm imm3 ff8000007f800000,ff7ffffe7f7ffffe => 706050403020100 f0e0d0c0b0a0908 -+xxgenpcvdm imm3 ff7ffffe7f7ffffe,0080000e8080000e => 706050403020100 0 -+xxgenpcvdm imm3 0080000e8080000e,0180055e0180077e => 0 0 -+xxgenpcvdm imm3 0180055e0180077e,0000111e8000222e => 0 0 -+xxgenpcvdm imm3 0000111e8000222e,7ff0000000000000 => 0 0 -+xxgenpcvdm imm3 7ff0000000000000,fff0000000000000 => f0e0d0c0b0a0908 0 -+xxgenpcvdm imm3 fff0000000000000,2208400000000000 => 706050403020100 0 -+xxgenpcvdm imm3 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvdm imm3 0000000000000009,ffff000180000001 => f0e0d0c0b0a0908 0 -+xxgenpcvdm imm3 ffff000180000001,0000000000000000 => 706050403020100 0 -+xxgenpcvdm imm3 0000000000000000,8000000000000000 => f0e0d0c0b0a0908 0 -+xxgenpcvdm imm3 8000000000000000,7f800000ff800000 => 706050403020100 0 -+ -+xxgenpcvhm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b02031e1f 1121314151617 -+xxgenpcvhm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 6071a1b1c1d1e1f 1020314150405 -+xxgenpcvhm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 20304051c1d0607 1011121300011617 -+xxgenpcvhm imm0 0080000e8080000e,0180055e0180077e => 18191a1b00011e1f 1011121314151617 -+xxgenpcvhm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121300011617 -+xxgenpcvhm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b00011e1f 1011121314151617 -+xxgenpcvhm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1121314151617 -+xxgenpcvhm imm0 fff0000000000000,2208400000000000 => 11a1b1c1d1e1f 1011121314151617 -+xxgenpcvhm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvhm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1121302031617 -+xxgenpcvhm imm0 ffff000180000001,0000000000000000 => 11a1b02031e1f 1011121314151617 -+xxgenpcvhm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1121314151617 -+xxgenpcvhm imm0 8000000000000000,7f800000ff800000 => 2031a1b1c1d1e1f 1011121300011617 -+ -+xxgenpcvhm imm1 7f800000ff800000,ff8000007f800000 => 0 10c0d00000000 -+xxgenpcvhm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 1020306070809 -+xxgenpcvhm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 40508090a0b0e0f -+xxgenpcvhm imm1 0080000e8080000e,0180055e0180077e => 0 c0d000000000000 -+xxgenpcvhm imm1 0180055e0180077e,0000111e8000222e => 0 405000000000000 -+xxgenpcvhm imm1 0000111e8000222e,7ff0000000000000 => 0 c0d000000000000 -+xxgenpcvhm imm1 7ff0000000000000,fff0000000000000 => 0 1000000000000 -+xxgenpcvhm imm1 fff0000000000000,2208400000000000 => 0 809000000000000 -+xxgenpcvhm imm1 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvhm imm1 0000000000000009,ffff000180000001 => 0 1040500000000 -+xxgenpcvhm imm1 ffff000180000001,0000000000000000 => 0 8090c0d00000000 -+xxgenpcvhm imm1 0000000000000000,8000000000000000 => 0 1000000000000 -+xxgenpcvhm imm1 8000000000000000,7f800000ff800000 => 0 405080900000000 -+ -+xxgenpcvhm imm2 7f800000ff800000,ff8000007f800000 => 1716151401001110 3021d1c1b1a1918 -+xxgenpcvhm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 100151413121110 70605041b1a0302 -+xxgenpcvhm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 504030213120100 1f1e1d1c07061918 -+xxgenpcvhm imm2 0080000e8080000e,0180055e0180077e => 1716151401001110 1f1e1d1c1b1a1918 -+xxgenpcvhm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c01001918 -+xxgenpcvhm imm2 0000111e8000222e,7ff0000000000000 => 1716151401001110 1f1e1d1c1b1a1918 -+xxgenpcvhm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 1001d1c1b1a1918 -+xxgenpcvhm imm2 fff0000000000000,2208400000000000 => 100151413121110 1f1e1d1c1b1a1918 -+xxgenpcvhm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvhm imm2 0000000000000009,ffff000180000001 => 1716151413121110 3021d1c01001918 -+xxgenpcvhm imm2 ffff000180000001,0000000000000000 => 302151401001110 1f1e1d1c1b1a1918 -+xxgenpcvhm imm2 0000000000000000,8000000000000000 => 1716151413121110 1001d1c1b1a1918 -+xxgenpcvhm imm2 8000000000000000,7f800000ff800000 => 100151413121110 1f1e1d1c03021918 -+ -+xxgenpcvhm imm3 7f800000ff800000,ff8000007f800000 => f0e0302 0 -+xxgenpcvhm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0e0d0c09080706 0 -+xxgenpcvhm imm3 ff7ffffe7f7ffffe,0080000e8080000e => b0a070605040100 0 -+xxgenpcvhm imm3 0080000e8080000e,0180055e0180077e => 302 0 -+xxgenpcvhm imm3 0180055e0180077e,0000111e8000222e => b0a 0 -+xxgenpcvhm imm3 0000111e8000222e,7ff0000000000000 => 302 0 -+xxgenpcvhm imm3 7ff0000000000000,fff0000000000000 => f0e 0 -+xxgenpcvhm imm3 fff0000000000000,2208400000000000 => 706 0 -+xxgenpcvhm imm3 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvhm imm3 0000000000000009,ffff000180000001 => f0e0b0a 0 -+xxgenpcvhm imm3 ffff000180000001,0000000000000000 => 7060302 0 -+xxgenpcvhm imm3 0000000000000000,8000000000000000 => f0e 0 -+xxgenpcvhm imm3 8000000000000000,7f800000ff800000 => b0a0706 0 -+ -+xxgenpcvwm imm0 7f800000ff800000,ff8000007f800000 => 18191a1b04050607 1020314151617 -+xxgenpcvwm imm0 ff8000007f800000,ff7ffffe7f7ffffe => 40506071c1d1e1f 1020314151617 -+xxgenpcvwm imm0 ff7ffffe7f7ffffe,0080000e8080000e => 40506071c1d1e1f 1011121300010203 -+xxgenpcvwm imm0 0080000e8080000e,0180055e0180077e => 18191a1b00010203 1011121314151617 -+xxgenpcvwm imm0 0180055e0180077e,0000111e8000222e => 18191a1b1c1d1e1f 1011121300010203 -+xxgenpcvwm imm0 0000111e8000222e,7ff0000000000000 => 18191a1b00010203 1011121314151617 -+xxgenpcvwm imm0 7ff0000000000000,fff0000000000000 => 18191a1b1c1d1e1f 1020314151617 -+xxgenpcvwm imm0 fff0000000000000,2208400000000000 => 102031c1d1e1f 1011121314151617 -+xxgenpcvwm imm0 2208400000000000,0000000000000009 => 18191a1b1c1d1e1f 1011121314151617 -+xxgenpcvwm imm0 0000000000000009,ffff000180000001 => 18191a1b1c1d1e1f 1020304050607 -+xxgenpcvwm imm0 ffff000180000001,0000000000000000 => 1020304050607 1011121314151617 -+xxgenpcvwm imm0 0000000000000000,8000000000000000 => 18191a1b1c1d1e1f 1020314151617 -+xxgenpcvwm imm0 8000000000000000,7f800000ff800000 => 40506071c1d1e1f 1011121300010203 -+ -+xxgenpcvwm imm1 7f800000ff800000,ff8000007f800000 => 0 102030c0d0e0f -+xxgenpcvwm imm1 ff8000007f800000,ff7ffffe7f7ffffe => 0 1020308090a0b -+xxgenpcvwm imm1 ff7ffffe7f7ffffe,0080000e8080000e => 0 405060708090a0b -+xxgenpcvwm imm1 0080000e8080000e,0180055e0180077e => 0 c0d0e0f00000000 -+xxgenpcvwm imm1 0180055e0180077e,0000111e8000222e => 0 405060700000000 -+xxgenpcvwm imm1 0000111e8000222e,7ff0000000000000 => 0 c0d0e0f00000000 -+xxgenpcvwm imm1 7ff0000000000000,fff0000000000000 => 0 1020300000000 -+xxgenpcvwm imm1 fff0000000000000,2208400000000000 => 0 8090a0b00000000 -+xxgenpcvwm imm1 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvwm imm1 0000000000000009,ffff000180000001 => 0 1020304050607 -+xxgenpcvwm imm1 ffff000180000001,0000000000000000 => 0 8090a0b0c0d0e0f -+xxgenpcvwm imm1 0000000000000000,8000000000000000 => 0 1020300000000 -+xxgenpcvwm imm1 8000000000000000,7f800000ff800000 => 0 405060708090a0b -+ -+xxgenpcvwm imm2 7f800000ff800000,ff8000007f800000 => 1716151403020100 70605041b1a1918 -+xxgenpcvwm imm2 ff8000007f800000,ff7ffffe7f7ffffe => 302010013121110 70605041b1a1918 -+xxgenpcvwm imm2 ff7ffffe7f7ffffe,0080000e8080000e => 302010013121110 1f1e1d1c07060504 -+xxgenpcvwm imm2 0080000e8080000e,0180055e0180077e => 1716151403020100 1f1e1d1c1b1a1918 -+xxgenpcvwm imm2 0180055e0180077e,0000111e8000222e => 1716151413121110 1f1e1d1c03020100 -+xxgenpcvwm imm2 0000111e8000222e,7ff0000000000000 => 1716151403020100 1f1e1d1c1b1a1918 -+xxgenpcvwm imm2 7ff0000000000000,fff0000000000000 => 1716151413121110 30201001b1a1918 -+xxgenpcvwm imm2 fff0000000000000,2208400000000000 => 302010013121110 1f1e1d1c1b1a1918 -+xxgenpcvwm imm2 2208400000000000,0000000000000009 => 1716151413121110 1f1e1d1c1b1a1918 -+xxgenpcvwm imm2 0000000000000009,ffff000180000001 => 1716151413121110 706050403020100 -+xxgenpcvwm imm2 ffff000180000001,0000000000000000 => 706050403020100 1f1e1d1c1b1a1918 -+xxgenpcvwm imm2 0000000000000000,8000000000000000 => 1716151413121110 30201001b1a1918 -+xxgenpcvwm imm2 8000000000000000,7f800000ff800000 => 302010013121110 1f1e1d1c07060504 -+ -+xxgenpcvwm imm3 7f800000ff800000,ff8000007f800000 => f0e0d0c03020100 0 -+xxgenpcvwm imm3 ff8000007f800000,ff7ffffe7f7ffffe => f0e0d0c07060504 0 -+xxgenpcvwm imm3 ff7ffffe7f7ffffe,0080000e8080000e => b0a090807060504 0 -+xxgenpcvwm imm3 0080000e8080000e,0180055e0180077e => 3020100 0 -+xxgenpcvwm imm3 0180055e0180077e,0000111e8000222e => b0a0908 0 -+xxgenpcvwm imm3 0000111e8000222e,7ff0000000000000 => 3020100 0 -+xxgenpcvwm imm3 7ff0000000000000,fff0000000000000 => f0e0d0c 0 -+xxgenpcvwm imm3 fff0000000000000,2208400000000000 => 7060504 0 -+xxgenpcvwm imm3 2208400000000000,0000000000000009 => 0 0 -+xxgenpcvwm imm3 0000000000000009,ffff000180000001 => f0e0d0c0b0a0908 0 -+xxgenpcvwm imm3 ffff000180000001,0000000000000000 => 706050403020100 0 -+xxgenpcvwm imm3 0000000000000000,8000000000000000 => f0e0d0c 0 -+xxgenpcvwm imm3 8000000000000000,7f800000ff800000 => b0a090807060504 0 -+ - xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff - xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff - xxpermx imm0 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ffff0000ffff ffff0000ffff -@@ -7094,4 +7318,4 @@ xxspltiw imm3 => 300000003 300000003 - - xxspltiw imm8 => 800000008 800000008 - --All done. Tested 142 different instruction groups -+All done. Tested 158 different instruction groups - -commit c8fa838be405d7ac43035dcf675bf490800c26ec -Author: root -Date: Fri Feb 12 15:59:32 2021 -0500 - - Reduced Precision bfloat16 outer product tests - -diff --git a/none/tests/ppc64/test_isa_3_1_AT.c b/none/tests/ppc64/test_isa_3_1_AT.c -index 1d6d42c61..fee76f8f4 100644 ---- a/none/tests/ppc64/test_isa_3_1_AT.c -+++ b/none/tests/ppc64/test_isa_3_1_AT.c -@@ -626,8 +626,228 @@ static void test_pmxvf64gernn_XM11_YM0 (void) { - static void test_pmxvf64gernn_XM11_YM1 (void) { - __asm__ __volatile__ ("pmxvf64gernn 4, 22, %x0, 11, 1" :: "wa" (vec_xa) ); - } -+static void test_xvbf16ger2 (void) { -+ __asm__ __volatile__ ("xvbf16ger2 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvbf16ger2nn (void) { -+ __asm__ __volatile__ ("xvbf16ger2nn 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvbf16ger2np (void) { -+ __asm__ __volatile__ ("xvbf16ger2np 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvbf16ger2pn (void) { -+ __asm__ __volatile__ ("xvbf16ger2pn 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvbf16ger2pp (void) { -+ __asm__ __volatile__ ("xvbf16ger2pp 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2nn_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2nn 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2np_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2np 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pn_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pn 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvbf16ger2pp_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} - - static test_list_t testgroup_generic[] = { -+ { &test_pmxvbf16ger2nn_XM0_YM0_PM0, "pmxvbf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM0_YM0_PM1, "pmxvbf16ger2nn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM0_YM13_PM0, "pmxvbf16ger2nn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM0_YM13_PM1, "pmxvbf16ger2nn XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM11_YM0_PM0, "pmxvbf16ger2nn XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM11_YM0_PM1, "pmxvbf16ger2nn XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM11_YM13_PM0, "pmxvbf16ger2nn XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2nn_XM11_YM13_PM1, "pmxvbf16ger2nn XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM0_YM0_PM0, "pmxvbf16ger2np XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM0_YM0_PM1, "pmxvbf16ger2np XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM0_YM13_PM0, "pmxvbf16ger2np XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM0_YM13_PM1, "pmxvbf16ger2np XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM11_YM0_PM0, "pmxvbf16ger2np XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM11_YM0_PM1, "pmxvbf16ger2np XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM11_YM13_PM0, "pmxvbf16ger2np XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2np_XM11_YM13_PM1, "pmxvbf16ger2np XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM0_YM0_PM0, "pmxvbf16ger2pn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM0_YM0_PM1, "pmxvbf16ger2pn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM0_YM13_PM0, "pmxvbf16ger2pn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM0_YM13_PM1, "pmxvbf16ger2pn XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM11_YM0_PM0, "pmxvbf16ger2pn XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM11_YM0_PM1, "pmxvbf16ger2pn XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM11_YM13_PM0, "pmxvbf16ger2pn XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pn_XM11_YM13_PM1, "pmxvbf16ger2pn XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM0_YM0_PM0, "pmxvbf16ger2pp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM0_YM0_PM1, "pmxvbf16ger2pp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM0_YM13_PM0, "pmxvbf16ger2pp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM0_YM13_PM1, "pmxvbf16ger2pp XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM11_YM0_PM0, "pmxvbf16ger2pp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM11_YM0_PM1, "pmxvbf16ger2pp XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM11_YM13_PM0, "pmxvbf16ger2pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2pp_XM11_YM13_PM1, "pmxvbf16ger2pp XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM0_YM0_PM0, "pmxvbf16ger2 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM0_YM0_PM1, "pmxvbf16ger2 XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM0_YM13_PM0, "pmxvbf16ger2 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM0_YM13_PM1, "pmxvbf16ger2 XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM11_YM0_PM0, "pmxvbf16ger2 XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM11_YM0_PM1, "pmxvbf16ger2 XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM11_YM13_PM0, "pmxvbf16ger2 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -+ { &test_pmxvbf16ger2_XM11_YM13_PM1, "pmxvbf16ger2 XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ - { &test_pmxvf16ger2nn_XM0_YM0_PM0, "pmxvf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ - { &test_pmxvf16ger2nn_XM0_YM0_PM1, "pmxvf16ger2nn XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ - { &test_pmxvf16ger2nn_XM0_YM13_PM0, "pmxvf16ger2nn XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -@@ -756,6 +976,11 @@ static test_list_t testgroup_generic[] = { - { &test_pmxvi16ger2s_XM11_YM0_PM1, "pmxvi16ger2s XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2s_XM11_YM13_PM0, "pmxvi16ger2s XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2s_XM11_YM13_PM1, "pmxvi16ger2s XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_xvbf16ger2nn, "xvbf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ -+ { &test_xvbf16ger2np, "xvbf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ -+ { &test_xvbf16ger2pn, "xvbf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ -+ { &test_xvbf16ger2pp, "xvbf16ger2pp", "AT,XA,XB", 0b00001111}, /* bcs */ -+ { &test_xvbf16ger2, "xvbf16ger2", "AT,XA,XB", 0b00001111}, /* bcs */ - { &test_xvf16ger2nn, "xvf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ - { &test_xvf16ger2np, "xvf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ - { &test_xvf16ger2pn, "xvf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ -diff --git a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -index 5ea998563..be3f17ec3 100644 ---- a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -+++ b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -@@ -1,3 +1,403 @@ -+pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2nn XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+ -+pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -3.63717e-28 -1.14437e-28 +Zero -1.14437e-28 -4.71628e-18 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2nn XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+ -+pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2np XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+ -+pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 -1.34843e-28 1.14437e-28 +Zero 1.14437e-28 -4.71628e-18 1.14437e-28) -+pmxvbf16ger2np XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2np XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+ -+pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pn XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+ -+pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 1.34843e-28 -1.14437e-28 +Zero -1.14437e-28 4.71628e-18 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+pmxvbf16ger2pn XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero +Zero +Zero +Zero +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28 +Zero -1.14437e-28 -1.14437e-28 -1.14437e-28) -+ -+pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+ -+pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 3.63717e-28 1.14437e-28 +Zero 1.14437e-28 4.71628e-18 1.14437e-28) -+pmxvbf16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+pmxvbf16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero 1.14437e-28 * * +Zero +Zero +Zero +Zero +Zero 1.14437e-28 * * +Zero 1.14437e-28 * *) -+ -+pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ -+pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero 2.49280e-28 +Zero +Zero +Zero 4.71628e-18 +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => ( +Zero +Zero +Den +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Den +Zero) -+pmxvbf16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+ - pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) - pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) - pmxvf16ger2nn XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -@@ -1558,6 +1958,91 @@ pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,01 - pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] - pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - -+xvbf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) -+xvbf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) -+xvbf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) -+xvbf16ger2nn 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf NaN NaN -Inf +Inf NaN NaN +Inf -Inf) -+xvbf16ger2nn 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf) -+xvbf16ger2nn 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( -3.63717e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14438e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 -Inf +Inf -1.14437e-28 -1.14437e-28 -Inf +Inf) -+xvbf16ger2nn 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf NaN NaN NaN NaN) -+xvbf16ger2nn 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14438e-28 -3.63717e-28 -4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -4.00000e+00 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 -Inf +Inf -1.14437e-28 -1.14437e-28 NaN NaN) -+xvbf16ger2nn 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf NaN NaN NaN NaN NaN NaN NaN NaN) -+xvbf16ger2nn 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2nn 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN) -+ -+xvbf16ger2np 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) -+xvbf16ger2np 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) -+xvbf16ger2np 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) -+xvbf16ger2np 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf NaN NaN -Inf +Inf NaN NaN +Inf -Inf) -+xvbf16ger2np 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf) -+xvbf16ger2np 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( * * * * * * * * * * * * * * * *) -+xvbf16ger2np 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( -1.34843e-28 1.14437e-28 * * -4.71628e-18 1.14437e-28 * * 1.14437e-28 1.14437e-28 * * 1.14437e-28 1.14437e-28 * *) -+xvbf16ger2np 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * -Inf +Inf * * -Inf +Inf) -+xvbf16ger2np 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN -Inf +Inf +Inf -Inf NaN NaN NaN NaN) -+xvbf16ger2np 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( * * * * * * * * 1.14437e-28 1.14437e-28 -1.34843e-28 -4.71628e-18 * * * *) -+xvbf16ger2np 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( * * * * * * * * -4.00000e+00 1.14437e-28 * * * * * *) -+xvbf16ger2np 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * -Inf +Inf * * NaN NaN) -+xvbf16ger2np 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf NaN NaN NaN NaN NaN NaN NaN NaN) -+xvbf16ger2np 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN * * * * * * * *) -+xvbf16ger2np 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN * * * * * * * *) -+xvbf16ger2np 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf * * NaN NaN * * NaN NaN) -+ -+xvbf16ger2pn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) -+xvbf16ger2pn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) -+xvbf16ger2pn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) -+xvbf16ger2pn 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) -+xvbf16ger2pn 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) -+xvbf16ger2pn 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 1.34843e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 +Inf -Inf -1.14437e-28 -1.14437e-28 +Inf -Inf) -+xvbf16ger2pn 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) -+xvbf16ger2pn 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 1.34843e-28 4.71628e-18 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 4.00000e+00 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 +Inf -Inf -1.14437e-28 -1.14437e-28 NaN NaN) -+xvbf16ger2pn 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) -+xvbf16ger2pn 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28 -1.14437e-28) -+xvbf16ger2pn 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf -1.14437e-28 -1.14437e-28 NaN NaN -1.14437e-28 -1.14437e-28 NaN NaN) -+ -+xvbf16ger2pp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) -+xvbf16ger2pp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) -+xvbf16ger2pp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) -+xvbf16ger2pp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) -+xvbf16ger2pp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) -+xvbf16ger2pp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( * * * * * * * * * * * * * * * *) -+xvbf16ger2pp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 3.63717e-28 1.14437e-28 * * 4.71628e-18 1.14437e-28 * * 1.14437e-28 1.14437e-28 * * 1.14438e-28 1.14437e-28 * *) -+xvbf16ger2pp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * +Inf -Inf * * +Inf -Inf) -+xvbf16ger2pp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) -+xvbf16ger2pp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( * * * * * * * * 1.14437e-28 1.14438e-28 3.63717e-28 4.71628e-18 * * * *) -+xvbf16ger2pp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( * * * * * * * * 4.00000e+00 1.14437e-28 * * * * * *) -+xvbf16ger2pp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( * * NaN NaN * * NaN NaN * * +Inf -Inf * * NaN NaN) -+xvbf16ger2pp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) -+xvbf16ger2pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN * * * * * * * *) -+xvbf16ger2pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN * * * * * * * *) -+xvbf16ger2pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf * * NaN NaN * * NaN NaN) -+ -+xvbf16ger2 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf) -+xvbf16ger2 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( -Inf -Inf NaN NaN +Inf +Inf NaN NaN +Inf +Inf NaN NaN -Inf -Inf NaN NaN) -+xvbf16ger2 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( -Inf NaN NaN NaN +Inf NaN NaN NaN +Inf NaN NaN NaN -Inf NaN NaN NaN) -+xvbf16ger2 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => ( NaN NaN -Inf +Inf NaN NaN +Inf -Inf NaN NaN +Inf -Inf NaN NaN -Inf +Inf) -+xvbf16ger2 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf +Inf -Inf -Inf +Inf) -+xvbf16ger2 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero 5.56082e-36 +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+xvbf16ger2 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => ( 2.49280e-28 +Zero +Zero +Zero 4.71628e-18 +Zero +Zero +Zero 2.08768e-35 +Zero +Zero +Zero 3.82177e-34 +Zero +Zero +Zero) -+xvbf16ger2 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => ( +Zero +Zero NaN NaN +Zero +Zero NaN NaN +Zero +Zero +Inf -Inf +Zero +Zero +Inf -Inf) -+xvbf16ger2 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN +Inf -Inf -Inf +Inf NaN NaN NaN NaN) -+xvbf16ger2 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => ( +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero 2.08768e-35 3.82177e-34 2.49280e-28 4.71628e-18 +Zero +Zero +Zero +Zero) -+xvbf16ger2 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => ( +Zero +Zero +Zero +Zero +Den +Zero +Zero +Zero 4.00000e+00 +Zero +Zero +Den +Zero +Zero +Zero +Zero) -+xvbf16ger2 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => ( +Zero +Zero NaN NaN +Zero +Zero NaN NaN +Zero +Zero +Inf -Inf +Zero +Zero NaN NaN) -+xvbf16ger2 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf NaN NaN NaN NaN NaN NaN NaN NaN) -+xvbf16ger2 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+xvbf16ger2 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN +Zero +Zero +Zero +Zero +Zero +Zero +Zero +Zero) -+xvbf16ger2 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => ( NaN NaN +Inf -Inf NaN NaN -Inf +Inf +Zero +Zero NaN NaN +Zero +Zero NaN NaN) -+ - xvf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) - xvf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) - xvf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN) -@@ -1921,4 +2406,4 @@ xxmtacc => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e - - xxsetaccz => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - --All done. Tested 152 different instruction groups -+All done. Tested 197 different instruction groups -diff --git a/none/tests/ppc64/test_isa_3_1_XT.c b/none/tests/ppc64/test_isa_3_1_XT.c -index a54e8763a..905c17951 100644 ---- a/none/tests/ppc64/test_isa_3_1_XT.c -+++ b/none/tests/ppc64/test_isa_3_1_XT.c -@@ -491,6 +491,16 @@ static void test_pstxv_4 (void) { - static void test_pstxv_0 (void) { - __asm__ __volatile__ ("pstxv %x0, 0(%1), 0" :: "wa" (vec_xs), "r" (ra) ); - } -+static void test_xvcvspbf16 (void) { -+SET_FPSCR_ZERO; -+ __asm__ __volatile__ ("xvcvspbf16 %x0, %x1" -+ : "=wa" (vec_xt) : "wa" (vec_xb) ); -+GET_FPSCR(current_fpscr); -+} -+static void test_xvcvbf16spn (void) { -+ __asm__ __volatile__ ("xvcvbf16spn %x0, %x1" -+ : "=wa" (vec_xt) : "wa" (vec_xb) ); -+} - static void test_xxgenpcvbm_imm0 (void) { - __asm__ __volatile__ ("xxgenpcvbm %x0, %1, 0" : "=wa" (vec_xt) : "v" (vrb) ); - } -@@ -634,6 +644,8 @@ static test_list_t testgroup_generic[] = { - { &test_stxvrdx, "stxvrdx", "XS,RA,RB"}, /* bcs */ - { &test_stxvrhx, "stxvrhx", "XS,RA,RB"}, /* bcs */ - { &test_stxvrwx, "stxvrwx", "XS,RA,RB"}, /* bcs */ -+ { &test_xvcvbf16spn, "xvcvbf16spn", "XT,XB"}, /* bcs */ -+ { &test_xvcvspbf16, "xvcvspbf16", "XT,XB", 0b0101010100000000}, /* bcs */ - { &test_xxblendvb, "xxblendvb", "XT,XA,XB,XC"}, /* bcs */ - { &test_xxblendvd, "xxblendvd", "XT,XA,XB,XC"}, /* bcs */ - { &test_xxblendvh, "xxblendvh", "XT,XA,XB,XC"}, /* bcs */ -diff --git a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -index 8b5f1d1a3..b9d6cb7a8 100644 ---- a/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -+++ b/none/tests/ppc64/test_isa_3_1_XT.stdout.exp -@@ -244,6 +244,34 @@ stxvrwx 18 (&buffer) 0000111e8000222e,0180055e0180077e => [ - - - 7f0000008 - stxvrwx 20 (&buffer) 7ff0000000000000,0000111e8000222e => [ - - - - 5a05a05a00000000 - - - ] - stxvrwx 28 (&buffer) fff0000000000000,7ff0000000000000 => [ - - - - - 0102030400000000 - - ] - -+xvcvbf16spn 7f800000ff800000,ff8000007f800000 => 0 0 -+xvcvbf16spn ff8000007f800000,ff7ffffe7f7ffffe => 0 fffe0000fffe0000 -+xvcvbf16spn ff7ffffe7f7ffffe,0080000e8080000e => fffe0000fffe0000 e0000000e0000 -+xvcvbf16spn 0080000e8080000e,0180055e0180077e => e0000000e0000 55e0000077e0000 -+xvcvbf16spn 0180055e0180077e,0000111e8000222e => 55e0000077e0000 111e0000222e0000 -+xvcvbf16spn 0000111e8000222e,7ff0000000000000 => 111e0000222e0000 0 -+xvcvbf16spn 7ff0000000000000,fff0000000000000 => 0 0 -+xvcvbf16spn fff0000000000000,2208400000000000 => 0 4000000000000000 -+xvcvbf16spn 2208400000000000,0000000000000009 => 4000000000000000 90000 -+xvcvbf16spn 0000000000000009,ffff000180000001 => 90000 1000000010000 -+xvcvbf16spn ffff000180000001,0000000000000000 => 1000000010000 0 -+xvcvbf16spn 0000000000000000,8000000000000000 => 0 0 -+xvcvbf16spn 8000000000000000,7f800000ff800000 => 0 0 -+ -+xvcvspbf16 7f800000ff800000,ff8000007f800000 => +Inf -Inf -Inf +Inf -+xvcvspbf16 ff8000007f800000,ff7ffffe7f7ffffe => -Inf +Inf -Inf +Inf -+xvcvspbf16 ff7ffffe7f7ffffe,0080000e8080000e => -Inf +Inf 0x0080 0x8080 -+xvcvspbf16 0080000e8080000e,0180055e0180077e => 0x0080 0x8080 0x0180 0x0180 -+xvcvspbf16 0180055e0180077e,0000111e8000222e => 0x0180 0x0180 +Zero -Zero -+xvcvspbf16 0000111e8000222e,7ff0000000000000 => +Zero -Zero NaN +Zero -+xvcvspbf16 7ff0000000000000,fff0000000000000 => NaN +Zero NaN +Zero -+xvcvspbf16 fff0000000000000,2208400000000000 => NaN +Zero 0x2208 +Zero -+xvcvspbf16 2208400000000000,0000000000000009 => 0x2208 +Zero +Zero +Zero -+xvcvspbf16 0000000000000009,ffff000180000001 => +Zero +Zero NaN -Zero -+xvcvspbf16 ffff000180000001,0000000000000000 => NaN -Zero +Zero +Zero -+xvcvspbf16 0000000000000000,8000000000000000 => +Zero +Zero -Zero +Zero -+xvcvspbf16 8000000000000000,7f800000ff800000 => -Zero +Zero +Inf -Inf -+ - xxblendvb 7f800000ff800000,ff8000007f800000 0000000000000000,00000000ffffffff 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 - xxblendvb 7f800000ff800000,ff8000007f800000 ffffffff55555555,5555aaaaaaaa5555 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 - xxblendvb 7f800000ff800000,ff8000007f800000 aaaa00000000aaaa,0000000000000000 7f800000ff800000,ff8000007f800000 => 7f800000ff800000 ff8000007f800000 -@@ -7318,4 +7346,4 @@ xxspltiw imm3 => 300000003 300000003 - - xxspltiw imm8 => 800000008 800000008 - --All done. Tested 158 different instruction groups -+All done. Tested 160 different instruction groups - -commit c589b652939655090c005a982a71f50c489fb5ce -Author: root -Date: Fri Feb 12 16:00:53 2021 -0500 - - Reduced precision Missing Integer based outer tests - -diff --git a/NEWS b/NEWS -index 2e42e74b2..52a51fd9e 100644 ---- a/NEWS -+++ b/NEWS -@@ -176,6 +176,7 @@ where XXXXXX is the bug number as listed below. - 433500 DRD regtest faulures when libstdc++ and libgcc debuginfo are installed - 433629 valgrind/README has type "abd" instead of "and" - 433641 Rust std::sys::unix::fs::try_statx Syscall param fstatat(file_name) -+433801 PPC ISA 3.1 support is missing, part 10 (ISA 3.1 support complete) - 433898 arm64: Handle sp, lr, fp as DwReg in CfiExpr - 434193 GCC 9+ inlined strcmp causes "Conditional jump or move [..] value" report - n-i-bz helgrind: If hg_cli__realloc fails, return NULL. -diff --git a/none/tests/ppc64/test_isa_3_1_AT.c b/none/tests/ppc64/test_isa_3_1_AT.c -index fee76f8f4..e9db9cc9a 100644 ---- a/none/tests/ppc64/test_isa_3_1_AT.c -+++ b/none/tests/ppc64/test_isa_3_1_AT.c -@@ -806,6 +806,114 @@ static void test_pmxvbf16ger2pp_XM11_YM13_PM1 (void) { - __asm__ __volatile__ ("pmxvbf16ger2pp 4, %x0, %x1, 11, 13, 1" - :: "wa" (vec_xa), "wa" (vec_xb) ); - } -+static void test_xvi8ger4spp (void) { -+ __asm__ __volatile__ ("xvi8ger4spp 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM0_YM0_PM5 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 0, 5" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM0_YM13_PM5 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 0, 13, 5" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM11_YM0_PM5 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 0, 5" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi8ger4spp_XM11_YM13_PM5 (void) { -+ __asm__ __volatile__ ("pmxvi8ger4spp 4, %x0, %x1, 11, 13, 5" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvi16ger2 (void) { -+ __asm__ __volatile__ ("xvi16ger2 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_xvi16ger2pp (void) { -+ __asm__ __volatile__ ("xvi16ger2pp 4, %x0, %x1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM0_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM0_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM0_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM0_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 0, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM11_YM0_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 0, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM11_YM0_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 0, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM11_YM13_PM0 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 13, 0" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} -+static void test_pmxvi16ger2pp_XM11_YM13_PM1 (void) { -+ __asm__ __volatile__ ("pmxvi16ger2pp 4, %x0, %x1, 11, 13, 1" -+ :: "wa" (vec_xa), "wa" (vec_xb) ); -+} - - static test_list_t testgroup_generic[] = { - { &test_pmxvbf16ger2nn_XM0_YM0_PM0, "pmxvbf16ger2nn XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK", 0b00001111}, /* bcwp */ -@@ -952,6 +1060,14 @@ static test_list_t testgroup_generic[] = { - { &test_pmxvi8ger4pp_XM11_YM0_PM5, "pmxvi8ger4pp XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4pp_XM11_YM13_PM0, "pmxvi8ger4pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4pp_XM11_YM13_PM5, "pmxvi8ger4pp XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM0_YM0_PM0, "pmxvi8ger4spp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM0_YM0_PM5, "pmxvi8ger4spp XM0_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM0_YM13_PM0, "pmxvi8ger4spp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM0_YM13_PM5, "pmxvi8ger4spp XM0_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM11_YM0_PM0, "pmxvi8ger4spp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM11_YM0_PM5, "pmxvi8ger4spp XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM11_YM13_PM0, "pmxvi8ger4spp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi8ger4spp_XM11_YM13_PM5, "pmxvi8ger4spp XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4_XM0_YM0_PM0, "pmxvi8ger4 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4_XM0_YM0_PM5, "pmxvi8ger4 XM0_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4_XM0_YM13_PM0, "pmxvi8ger4 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -@@ -960,6 +1076,14 @@ static test_list_t testgroup_generic[] = { - { &test_pmxvi8ger4_XM11_YM0_PM5, "pmxvi8ger4 XM11_YM0_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4_XM11_YM13_PM0, "pmxvi8ger4 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi8ger4_XM11_YM13_PM5, "pmxvi8ger4 XM11_YM13_PM5", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM0_YM0_PM0, "pmxvi16ger2pp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM0_YM0_PM1, "pmxvi16ger2pp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM0_YM13_PM0, "pmxvi16ger2pp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM0_YM13_PM1, "pmxvi16ger2pp XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM11_YM0_PM0, "pmxvi16ger2pp XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM11_YM0_PM1, "pmxvi16ger2pp XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM11_YM13_PM0, "pmxvi16ger2pp XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2pp_XM11_YM13_PM1, "pmxvi16ger2pp XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2spp_XM0_YM0_PM0, "pmxvi16ger2spp XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2spp_XM0_YM0_PM1, "pmxvi16ger2spp XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2spp_XM0_YM13_PM0, "pmxvi16ger2spp XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -@@ -976,6 +1100,14 @@ static test_list_t testgroup_generic[] = { - { &test_pmxvi16ger2s_XM11_YM0_PM1, "pmxvi16ger2s XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2s_XM11_YM13_PM0, "pmxvi16ger2s XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_pmxvi16ger2s_XM11_YM13_PM1, "pmxvi16ger2s XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM0_YM0_PM0, "pmxvi16ger2 XM0_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM0_YM0_PM1, "pmxvi16ger2 XM0_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM0_YM13_PM0, "pmxvi16ger2 XM0_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM0_YM13_PM1, "pmxvi16ger2 XM0_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM11_YM0_PM0, "pmxvi16ger2 XM11_YM0_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM11_YM0_PM1, "pmxvi16ger2 XM11_YM0_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM11_YM13_PM0, "pmxvi16ger2 XM11_YM13_PM0", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ -+ { &test_pmxvi16ger2_XM11_YM13_PM1, "pmxvi16ger2 XM11_YM13_PM1", "AT,XA,XB,XMSK,YMSK,PMSK"}, /* bcwp */ - { &test_xvbf16ger2nn, "xvbf16ger2nn", "AT,XA,XB", 0b00001111}, /* bcs */ - { &test_xvbf16ger2np, "xvbf16ger2np", "AT,XA,XB", 0b00001111}, /* bcs */ - { &test_xvbf16ger2pn, "xvbf16ger2pn", "AT,XA,XB", 0b00001111}, /* bcs */ -@@ -999,9 +1131,12 @@ static test_list_t testgroup_generic[] = { - { &test_xvi4ger8pp, "xvi4ger8pp", "AT,XA,XB"}, /* bcs */ - { &test_xvi4ger8, "xvi4ger8", "AT,XA,XB"}, /* bcs */ - { &test_xvi8ger4pp, "xvi8ger4pp", "AT,XA,XB"}, /* bcs */ -+ { &test_xvi8ger4spp, "xvi8ger4spp", "AT,XA,XB"}, /* bcs */ - { &test_xvi8ger4, "xvi8ger4", "AT,XA,XB"}, /* bcs */ -+ { &test_xvi16ger2pp, "xvi16ger2pp", "AT,XA,XB"}, /* bcs */ - { &test_xvi16ger2spp, "xvi16ger2spp", "AT,XA,XB"}, /* bcs */ - { &test_xvi16ger2s, "xvi16ger2s", "AT,XA,XB"}, /* bcs */ -+ { &test_xvi16ger2, "xvi16ger2", "AT,XA,XB"}, /* bcs */ - { &test_xxmfacc, "xxmfacc", "AS"}, /* bcs */ - { &test_xxmtacc, "xxmtacc", "AT"}, /* bcs */ - { &test_xxsetaccz, "xxsetaccz", "AT"}, /* bcs */ -diff --git a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -index be3f17ec3..8d1be35b1 100644 ---- a/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -+++ b/none/tests/ppc64/test_isa_3_1_AT.stdout.exp -@@ -1718,6 +1718,86 @@ pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,01 - pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111110911111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] - pmxvi8ger4pp XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] - -+pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM0_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM0_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi8ger4spp XM11_YM0_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+ -+pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011115075 11114fd511114f95 0000000000000000 0000000000000000 000000001110d111 1110d1111110d111 000000001110d111 1110d1111110d111] -+pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 1111150911111111 0000000000000000 0000000000000000 0000000011111111 11110d1111111111 0000000011111111 11110d1111111111] -+pmxvi8ger4spp XM11_YM13_PM5 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011110911 1111091111110911 0000000000000000 0000000000000000 00000000111112b5 11111c1511111fd5 0000000011111395 111121f5111127b5] -+pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 1111109111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM5 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000001111109f 111110ef1111110f 0000000000000000 0000000000000000 0000000011111111 * 000000001111118f 1111145f1111157f] -+pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111110911111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi8ger4spp XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+ - pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - pmxvi8ger4 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -@@ -1798,6 +1878,86 @@ pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 0080000e8080000e,0180 - pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 fffffff800000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - pmxvi8ger4 XM11_YM13_PM5 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - -+pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2pp XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+ -+pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 00000000111110f5 1111065511110215 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000011111111 1110911111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000011111111 * 0000000000000000 0000000000000000 00000000111200b5 116cf01511914fd5 000000001112ef95 11c883f5121125b5] -+pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 1558911111111111 0000000011111111 199c911111111111] -+pmxvi16ger2pp XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000001111111f 1111166f1111188f 0000000000000000 0000000000000000 0000000011111111 * 000000001111118f 1111415f1111547f] -+pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000011111111 1111511111111111 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 1113511111111111] -+pmxvi16ger2pp XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000011111111 * 0000000000000000 0000000000000000 0000000011111111 * 0000000011111111 *] -+ - pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - pmxvi16ger2spp XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -@@ -1958,6 +2118,86 @@ pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,01 - pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] - pmxvi16ger2s XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - -+pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM0_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM0_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM0 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ -+pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0080000e8080000e,0180055e0180077e => [ 00000000ffffffe4 fffff544fffff104 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe fff0000000000000,2208400000000000 => [ 0000000000000000 ffff800000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM1 ff8000007f800000,ff7ffffe7f7ffffe 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0080000e8080000e,0180055e0180077e => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 000000000000efa4 005bdf0400803ec4 000000000001de84 00b772e4010014a4] -+pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 fff0000000000000,2208400000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0447800000000000 0000000000000000 088b800000000000] -+pmxvi16ger2 XM11_YM13_PM1 0000111e8000222e,7ff0000000000000 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0080000e8080000e,0180055e0180077e => [ 000000000000000e 0000055e0000077e 0000000000000000 0000000000000000 0000000000000000 0000000000000000 000000000000007e 0000304e0000436e] -+pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 fff0000000000000,2208400000000000 => [ 0000000000000000 0000400000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0002400000000000] -+pmxvi16ger2 XM11_YM13_PM1 0000000000000009,ffff000180000001 0000000000000000,8000000000000000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] -+ - xvbf16ger2nn 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => ( +Inf -Inf -Inf +Inf -Inf +Inf +Inf -Inf -Inf +Inf +Inf -Inf +Inf -Inf -Inf +Inf) - xvbf16ger2nn 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => ( +Inf +Inf NaN NaN -Inf -Inf NaN NaN -Inf -Inf NaN NaN +Inf +Inf NaN NaN) - xvbf16ger2nn 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => ( +Inf NaN NaN NaN -Inf NaN NaN NaN -Inf NaN NaN NaN +Inf NaN NaN NaN) -@@ -2349,6 +2589,23 @@ xvi8ger4pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e = - xvi8ger4pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 11111def11111111 * 11110cef11111111 * 1111001111111111 * * *] - xvi8ger4pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012 1110d11111111111 1110d19111109191 * *] - -+xvi8ger4spp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 1110d0921110d012 1110d0121110d092 1111101211114f92 11114f9211111012 1111101211114f92 11114f9211111012 1110d0921110d012 1110d0121110d092] -+xvi8ger4spp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110d1101110d110 1111111111111091 1110d1901110d190 1111111111115091 1110d1901110d190 1111111111115091 1110d1101110d110 1111111111111091] -+xvi8ger4spp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11110cef11111111 * 11111def11111111 * 11111def11111111 * 11110cef11111111 *] -+xvi8ger4spp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 1111109111111111 1110d0921110d012 1111509111111111 1111101211114f92 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012] -+xvi8ger4spp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ * * 1110d19111109191 111091911110d191 1110d1901110d210 1110d2101110d190 1110d1901110d210 1110d2101110d190] -+xvi8ger4spp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 11111c6a1111204c 111115b6111118b7 1111221f11112823 111118b71110ddd9 1110f3af1110ff79 11111c6a1111231f 1110ff7911110f47 1111204c11112923] -+xvi8ger4spp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 1111155111111111 111111111111121f 1111089111111111 11111111111112af 11110e7311111111 111111111111145f 11110ef311111111 111111111111157f] -+xvi8ger4spp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ * * 1110d11111111111 1110d19111109191 1111119111111111 1110d1901110d210 1111119111111111 1110d1901110d210] -+xvi8ger4spp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ * * * * 111125ef111136ef 111136ef111125ef * *] -+xvi8ger4spp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ * * 1111145f1111157f 1111121f111112af 11111673111116f3 1111155111112a91 * *] -+xvi8ger4spp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ * * * 1111111111111162 111125d511111111 * * *] -+xvi8ger4spp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ * * * * 1111221111111111 111125ef111136ef * *] -+xvi8ger4spp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 1111101211114f92 11114f9211111012 1110d0921110d012 1110d0121110d092 1110d19111109191 111091911110d191 * *] -+xvi8ger4spp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 1110d1901110d190 1111111111115091 1110d1101110d110 1111111111111091 1111109111111091 111111111110d111 * *] -+xvi8ger4spp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 11111def11111111 * 11110cef11111111 * 1111001111111111 * * *] -+xvi8ger4spp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 1111509111111111 1111101211114f92 1111109111111111 1110d0921110d012 1110d11111111111 1110d19111109191 * *] -+ - xvi8ger4 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ ffffbf81ffffbf01 ffffbf01ffffbf81 ffffff0100003e81 00003e81ffffff01 ffffff0100003e81 00003e81ffffff01 ffffbf81ffffbf01 ffffbf01ffffbf81] - xvi8ger4 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ ffffbfffffffbfff 00000000ffffff80 ffffc07fffffc07f 0000000000003f80 ffffc07fffffc07f 0000000000003f80 ffffbfffffffbfff 00000000ffffff80] - xvi8ger4 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ fffffbde00000000 0000000000000000 00000cde00000000 0000000000000000 00000cde00000000 0000000000000000 fffffbde00000000 0000000000000000] -@@ -2366,6 +2623,23 @@ xvi8ger4 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => - xvi8ger4 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 00000cde00000000 0000000000000000 fffffbde00000000 0000000000000000 ffffef0000000000 0000000000000000 0000000000000000 0000000000000000] - xvi8ger4 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ 00003f8000000000 ffffff0100003e81 ffffff8000000000 ffffbf81ffffbf01 ffffc00000000000 ffffc080ffff8080 0000000000000000 0000000000000000] - -+xvi16ger2pp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 10d1511111115111 1111511110d15111 5091511110d15111 10d1511150915111 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111] -+xvi16ger2pp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110511111105111 1111111111511111 11d0511111d05111 11111111d1511111 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111] -+xvi16ger2pp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11000d1111111111 * 22040d1111111111 * 22040d1111111111 * 11000d1111111111 *] -+xvi16ger2pp 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 1151111111111111 10d1511111115111 d151111111111111 5091511110d15111 d151111111111111 5091511110d15111 1151111111111111 10d1511111115111] -+xvi16ger2pp 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ * * d151111111511111 11511111d1511111 11d0511111105111 1110511111d05111 11d0511111105111 1110511111d05111] -+xvi16ger2pp 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 116cf01511914fd5 12361095135a2075 110883f5115125b5 135a207555a15155 11301f95113b8755 116cf015110883f5 113b8755114b7315 11914fd5115125b5] -+xvi16ger2pp 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 1558911111111111 111111111111ab1f 0898911111111111 11111111111244af 129b9d1111111111 111111111111415f 13239d1111111111 111111111111547f] -+xvi16ger2pp 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ * * 5111111111111111 d151111111511111 1051111111111111 11d0511111105111 1051111111111111 11d0511111105111] -+xvi16ger2pp 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ * * * * 22040d1111000d11 11000d1122040d11 * *] -+xvi16ger2pp 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ * * 1111415f1111547f 1111ab1f111244af 129b9d1113239d11 1558911108989111 * *] -+xvi16ger2pp 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ * * 1113511111111111 1111111111111162 2597315111111111 1111111111135111 * *] -+xvi16ger2pp 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ * * * * 000d111111111111 22040d1111000d11 * *] -+xvi16ger2pp 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111 d151111111511111 11511111d1511111 * *] -+xvi16ger2pp 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111 1051111110511111 1111111151111111 * *] -+xvi16ger2pp 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 22040d1111111111 * 11000d1111111111 * 000d111111111111 * * *] -+xvi16ger2pp 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ d151111111111111 5091511110d15111 1151111111111111 10d1511111115111 5111111111111111 d151111111511111 * *] -+ - xvi16ger2spp 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ 10d1511111115111 1111511110d15111 5091511110d15111 10d1511150915111 5091511110d15111 10d1511150915111 10d1511111115111 1111511110d15111] - xvi16ger2spp 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ 1110511111105111 1111111111511111 11d0511111d05111 11111111d1511111 11d0511111d05111 11111111d1511111 1110511111105111 1111111111511111] - xvi16ger2spp 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ 11000d1111111111 * 22040d1111111111 * 22040d1111111111 * 11000d1111111111 *] -@@ -2400,10 +2674,27 @@ xvi16ger2s 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e = - xvi16ger2s 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000 eefc000000000000 0000000000000000 0000000000000000 0000000000000000] - xvi16ger2s 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000 4000000000000000 c040000000400000 0000000000000000 0000000000000000] - -+xvi16ger2 7f800000ff800000,ff8000007f800000 7f800000ff800000,ff8000007f800000 => [ ffc0400000004000 00004000ffc04000 3f804000ffc04000 ffc040003f804000 3f804000ffc04000 ffc040003f804000 ffc0400000004000 00004000ffc04000] -+xvi16ger2 7f800000ff800000,ff8000007f800000 0180055e0180077e,0000111e8000222e => [ ffff4000ffff4000 0000000000400000 00bf400000bf4000 00000000c0400000 00bf400000bf4000 00000000c0400000 ffff4000ffff4000 0000000000400000] -+xvi16ger2 7f800000ff800000,ff8000007f800000 2208400000000000,0000000000000009 => [ ffeefc0000000000 0000000000000000 10f2fc0000000000 0000000000000000 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000] -+xvi16ger2 7f800000ff800000,ff8000007f800000 8000000000000000,7f800000ff800000 => [ 0040000000000000 ffc0400000004000 c040000000000000 3f804000ffc04000 c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000] -+xvi16ger2 0180055e0180077e,0000111e8000222e 7f800000ff800000,ff8000007f800000 => [ 0000000000000000 0000000000000000 c040000000400000 00400000c0400000 00bf4000ffff4000 ffff400000bf4000 00bf4000ffff4000 ffff400000bf4000] -+xvi16ger2 0180055e0180077e,0000111e8000222e 0180055e0180077e,0000111e8000222e => [ 005bdf0400803ec4 0124ff8402490f64 fff772e4004014a4 02490f6444904044 001f0e84002a7644 005bdf04fff772e4 002a7644003a6204 00803ec4004014a4] -+xvi16ger2 0180055e0180077e,0000111e8000222e 2208400000000000,0000000000000009 => [ 0447800000000000 0000000000009a0e f787800000000000 000000000001339e 018a8c0000000000 000000000000304e 02128c0000000000 000000000000436e] -+xvi16ger2 0180055e0180077e,0000111e8000222e 8000000000000000,7f800000ff800000 => [ 0000000000000000 0000000000000000 4000000000000000 c040000000400000 ff40000000000000 00bf4000ffff4000 ff40000000000000 00bf4000ffff4000] -+xvi16ger2 2208400000000000,0000000000000009 7f800000ff800000,ff8000007f800000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 10f2fc00ffeefc00 ffeefc0010f2fc00 0000000000000000 0000000000000000] -+xvi16ger2 2208400000000000,0000000000000009 0180055e0180077e,0000111e8000222e => [ 0000000000000000 0000000000000000 0000304e0000436e 00009a0e0001339e 018a8c0002128c00 04478000f7878000 0000000000000000 0000000000000000] -+xvi16ger2 2208400000000000,0000000000000009 2208400000000000,0000000000000009 => [ 0000000000000000 0000000000000000 0002400000000000 0000000000000051 1486204000000000 0000000000024000 0000000000000000 0000000000000000] -+xvi16ger2 2208400000000000,0000000000000009 8000000000000000,7f800000ff800000 => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 eefc000000000000 10f2fc00ffeefc00 0000000000000000 0000000000000000] -+xvi16ger2 8000000000000000,7f800000ff800000 7f800000ff800000,ff8000007f800000 => [ 3f804000ffc04000 ffc040003f804000 ffc0400000004000 00004000ffc04000 c040000000400000 00400000c0400000 0000000000000000 0000000000000000] -+xvi16ger2 8000000000000000,7f800000ff800000 0180055e0180077e,0000111e8000222e => [ 00bf400000bf4000 00000000c0400000 ffff4000ffff4000 0000000000400000 ff400000ff400000 0000000040000000 0000000000000000 0000000000000000] -+xvi16ger2 8000000000000000,7f800000ff800000 2208400000000000,0000000000000009 => [ 10f2fc0000000000 0000000000000000 ffeefc0000000000 0000000000000000 eefc000000000000 0000000000000000 0000000000000000 0000000000000000] -+xvi16ger2 8000000000000000,7f800000ff800000 8000000000000000,7f800000ff800000 => [ c040000000000000 3f804000ffc04000 0040000000000000 ffc0400000004000 4000000000000000 c040000000400000 0000000000000000 0000000000000000] -+ - xxmfacc [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] - - xxmtacc => [ 7f800000ff800000 ff8000007f800000 ff7ffffe7f7ffffe 0080000e8080000e 0180055e0180077e 0000111e8000222e 7ff0000000000000 fff0000000000000] - - xxsetaccz => [ 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000] - --All done. Tested 197 different instruction groups -+All done. Tested 224 different instruction groups diff --git a/valgrind-3.17.0-ppc64-isa-3.1.patch b/valgrind-3.17.0-ppc64-isa-3.1.patch deleted file mode 100644 index fb8fa50..0000000 --- a/valgrind-3.17.0-ppc64-isa-3.1.patch +++ /dev/null @@ -1,1720 +0,0 @@ -commit 3cc0232c46a5905b4a6c2fbd302b58bf5f90b3d5 -Author: Carl Love -Date: Mon Jan 11 16:00:57 2021 -0600 - - PPC64: ISA 3.1 VSX PCV Generate Operations - - xgenpcvbm VSX Vector Generate PCV from Byte Mask - xxgenpcvdmVSX Vector Generate PCV from Doubleword Mask - xxgenpcvhmVSX Vector Generate PCV from Halfword Mask - xxgenpcvwmVSX Vector Generate PCV from Word Mask - -diff --git a/VEX/priv/guest_ppc_defs.h b/VEX/priv/guest_ppc_defs.h -index deda4dfce..54ce923a9 100644 ---- a/VEX/priv/guest_ppc_defs.h -+++ b/VEX/priv/guest_ppc_defs.h -@@ -169,6 +169,23 @@ void write_ACC_entry (VexGuestPPC64State* gst, UInt offset, UInt acc, - void get_ACC_entry (VexGuestPPC64State* gst, UInt offset, UInt acc, - UInt reg, UInt *result); - -+extern void vector_gen_pvc_byte_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, -+ ULong src_lo, -+ UInt rtn_val, UInt IMM ); -+extern void vector_gen_pvc_hword_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, -+ ULong src_lo, -+ UInt rtn_val, UInt IMM ); -+extern void vector_gen_pvc_word_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, -+ ULong src_lo, -+ UInt rtn_val, UInt IMM ); -+extern void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, -+ ULong src_lo, -+ UInt rtn_val, UInt IMM ); -+ - /* 8-bit XO value from instruction description */ - #define XVI4GER8 0b00100011 - #define XVI4GER8PP 0b00100010 -diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c -index c24191ef3..75497abb9 100644 ---- a/VEX/priv/guest_ppc_helpers.c -+++ b/VEX/priv/guest_ppc_helpers.c -@@ -701,6 +701,738 @@ ULong vector_evaluate64_helper( ULong srcA, ULong srcB, ULong srcC, - #undef MAX_IMM_BITS - } - -+/*--------------------------------------------------*/ -+/*---- VSX Vector Generate PCV from Mask helpers ---*/ -+/*--------------------------------------------------*/ -+static void write_VSX_entry (VexGuestPPC64State* gst, UInt reg_offset, -+ ULong *vsx_entry) -+{ -+ U128* pU128_dst; -+ pU128_dst = (U128*) (((UChar*) gst) + reg_offset); -+ -+ /* The U128 type is defined as an array of unsigned intetgers. */ -+ /* Writing in LE order */ -+ (*pU128_dst)[0] = (UInt)(vsx_entry[1] & 0xFFFFFFFF); -+ (*pU128_dst)[1] = (UInt)(vsx_entry[1] >> 32); -+ (*pU128_dst)[2] = (UInt)(vsx_entry[0] & 0xFFFFFFFF); -+ (*pU128_dst)[3] = (UInt)(vsx_entry[0] >> 32); -+ return; -+} -+ -+/* CALLED FROM GENERATED CODE */ -+void vector_gen_pvc_byte_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, ULong src_lo, -+ UInt reg_offset, UInt imm ) { -+ /* The function computes the 128-bit result then writes it directly -+ into the guest state VSX register. */ -+ -+ UInt i, shift_by, sel_shift_by, half_sel; -+ ULong index, src, result[2]; -+ ULong j; -+ -+ result[0] = 0; -+ result[1] = 0; -+ j = 0; -+ -+ /* The algorithm in the ISA is written with IBM numbering zero on left and -+ N-1 on right. The loop index is converted to "i" to match the algorithm -+ for claritiy of matching the C code to the algorithm in the ISA. */ -+ -+ if (imm == 0b00) { // big endian expansion -+ for( index = 0; index < 16; index++) { -+ i = 15 - index; -+ -+ shift_by = i*8; -+ -+ if ( i >= 8) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 7; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= j << shift_by; -+ j++; -+ } else { -+ result[half_sel] |= (index + (unsigned long long)0x10) << shift_by; -+ } -+ } -+ -+ -+ } else if (imm == 0b01) { // big endian compression -+ /* If IMM=0b00001, let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement a -+ compression of the sparse byte elements in a source vector specified -+ by the byte-element mask in VSR[VRB+32] into the leftmost byte -+ elements of a result vector. -+ */ -+ for( index = 0; index < 16; index++) { -+ i = 15 - index; -+ shift_by = i*8; -+ -+ if ( i >= 8) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 7; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 8) -+ result[1] |= (index) << (15 - j)*8; -+ else -+ result[0] |= (index) << (7 - j)*8; -+ j++; -+ } -+ } -+ /* The algorithim says set to undefined, leave as 0 -+ for( index = 3 - j; index < 4; index++) { -+ result |= (0 << (index*8)); -+ } -+ */ -+ -+ } else if (imm == 0b10) { //little-endian expansion -+ /* If IMM=0b00010, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement an -+ expansion of the rightmost byte elements of a source vector into the -+ byte elements of a result vector specified by the byte-element mask -+ in VSR[VRB+32]. */ -+ for( index = 0; index < 16; index++) { -+ i = index; -+ -+ shift_by = i*8; -+ -+ if ( i >= 8) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 7; -+ -+ /* mod shift amount by 8 since src is either the upper or lower -+ 64-bits. */ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= j << shift_by; -+ j++; -+ } else { -+ result[half_sel] |= (index + (unsigned long long)0x10) << shift_by; -+ } -+ } -+ -+ } else if (imm == 0b11) { //little-endian compression -+ /* If IMM=0b00011, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement a -+ compression of the sparse byte elements in a source vector specified -+ by the byte-element mask in VSR[VRB+32] into the rightmost byte -+ elements of a result vector. */ -+ -+ for( index = 0; index < 16; index++) { -+ i = index; -+ -+ shift_by = i*8; -+ -+ if ( i >= 8) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 7; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 8) -+ result[0] |= (index) << (j-8)*8; -+ else -+ result[1] |= (index) << j*8; -+ j++; -+ } -+ } -+ -+ /* The algorithim says set to undefined, leave as 0 -+ for( index = 3 - j; index < 4; index++) { -+ result |= (0 << (index*8)); -+ } -+ */ -+ -+ } else { -+ vex_printf("ERROR, vector_gen_pvc_byte_mask_dirty_helper, imm value %u not supported.\n", -+ imm); -+ vassert(0); -+ } -+ write_VSX_entry( gst, reg_offset, result); -+} -+ -+/* CALLED FROM GENERATED CODE */ -+void vector_gen_pvc_hword_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, ULong src_lo, -+ UInt reg_offset, -+ UInt imm ) { -+ /* The function computes the 128-bit result then writes it directly -+ into the guest state VSX register. */ -+ UInt i, shift_by, sel_shift_by, half_sel; -+ ULong index, src, result[2]; -+ ULong j; -+ -+ result[0] = 0; -+ result[1] = 0; -+ j = 0; -+ -+ /* The algorithm in the ISA is written with IBM numbering zero on left and -+ N-1 on right. The loop index is converted to "i" to match the algorithm -+ for claritiy of matching the C code to the algorithm in the ISA. */ -+ -+ if (imm == 0b00) { // big endian expansion -+ /* If IMM=0b00000, let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement an -+ expansion of the leftmost halfword elements of a source vector into -+ the halfword elements of a result vector specified by the halfword- -+ element mask in VSR[VRB+32]. -+ */ -+ for( index = 0; index < 8; index++) { -+ i = 7 - index; -+ -+ shift_by = i*16; -+ -+ if ( i >= 4) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 15; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ // half-word i, byte 0 -+ result[half_sel] |= (2*j + 0x0) << (shift_by+8); -+ // half-word i, byte 1 -+ result[half_sel] |= (2*j + 0x1) << shift_by; -+ j++; -+ } else { -+ result[half_sel] |= (2*index + 0x10) << (shift_by+8); -+ result[half_sel] |= (2*index + 0x11) << shift_by; -+ } -+ } -+ -+ } else if (imm == 0b01) { // big endian expansion -+ /* If IMM=0b00001,let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement a -+ compression of the sparse halfword elements in a source vector -+ specified by the halfword-element mask in VSR[VRB+32] into the -+ leftmost halfword elements of a result vector. -+ */ -+ for( index = 0; index < 8; index++) { -+ i = 7 - index; -+ -+ shift_by = i*16; -+ -+ if ( i >= 4) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 15; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 4) { -+ // half-word i, byte 0 -+ result[1] |= (2*index + 0x0) << ((7 - j)*16 + 8); -+ // half-word i, byte 1 -+ result[1] |= (2*index + 0x1) << ((7 - j)*16); -+ } else { -+ // half-word i, byte 0 -+ result[0] |= (2*index + 0x0) << ((3 - j)*16 + 8); -+ // half-word i, byte 1 -+ result[0] |= (2*index + 0x1) << ((3 - j)*16); -+ } -+ j++; -+ } -+ } -+ -+ } else if (imm == 0b10) { //little-endian expansion -+ /* If IMM=0b00010, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement an -+ expansion of the rightmost halfword elements of a source vector into -+ the halfword elements of a result vector specified by the halfword- -+ element mask in VSR[VRB+32]. -+ */ -+ for( index = 0; index < 8; index++) { -+ i = index; -+ shift_by = i*16; -+ -+ if ( i >= 4) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 15; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ // half-word i, byte 0 -+ result[half_sel] |= (2*j + 0x00) << shift_by; -+ // half-word i, byte 1 -+ result[half_sel] |= (2*j + 0x01) << (shift_by+8); -+ j++; -+ -+ } else { -+ // half-word i, byte 0 -+ result[half_sel] |= (2*index + 0x10) << shift_by; -+ // half-word i, byte 1 -+ result[half_sel] |= (2*index + 0x11) << (shift_by+8); -+ } -+ } -+ -+ } else if (imm == 0b11) { //little-endian compression -+ /* If IMM=0b00011, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement a -+ compression of the sparse halfword elements in a source vector -+ specified by the halfword-element mask in VSR[VRB+32] into the -+ rightmost halfword elements of a result vector. */ -+ for( index = 0; index < 8; index++) { -+ i = index; -+ shift_by = i*16; -+ -+ if ( i >= 4) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 15; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 4) { -+ // half-word j, byte 0 -+ result[0] |= (2*index + 0x0) << ((j-4)*16); -+ // half-word j, byte 1 -+ result[0] |= (2*index + 0x1) << ((j-4)*16+8); -+ } else { -+ // half-word j, byte 0 -+ result[1] |= (2*index + 0x0) << (j*16); -+ // half-word j, byte 1 -+ result[1] |= (2*index + 0x1) << ((j*16)+8); -+ } -+ j++; -+ } -+ } -+ -+ } else { -+ vex_printf("ERROR, vector_gen_pvc_hword_dirty_mask_helper, imm value %u not supported.\n", -+ imm); -+ vassert(0); -+ } -+ write_VSX_entry( gst, reg_offset, result); -+} -+ -+/* CALLED FROM GENERATED CODE */ -+void vector_gen_pvc_word_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, ULong src_lo, -+ UInt reg_offset, UInt imm ) { -+ /* The function computes the 128-bit result then writes it directly -+ into the guest state VSX register. */ -+ UInt i, shift_by, sel_shift_by, half_sel; -+ ULong index, src, result[2]; -+ ULong j; -+ -+ result[0] = 0; -+ result[1] = 0; -+ j = 0; -+ -+ /* The algorithm in the ISA is written with IBM numbering zero on left and -+ N-1 on right. The loop index is converted to "i" to match the algorithm -+ for claritiy of matching the C code to the algorithm in the ISA. */ -+ -+ if (imm == 0b00) { // big endian expansion -+ /* If IMM=0b00000, let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement an -+ expansion of the leftmost word elements of a source vector into the -+ word elements of a result vector specified by the word-element mask -+ in VSR[VRB+32]. -+ */ -+ for( index = 0; index < 4; index++) { -+ i = 3 - index; -+ -+ shift_by = i*32; -+ -+ if ( i >= 2) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 31; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= (4*j+0) << (shift_by+24); // word i, byte 0 -+ result[half_sel] |= (4*j+1) << (shift_by+16); // word i, byte 1 -+ result[half_sel] |= (4*j+2) << (shift_by+8); // word i, byte 2 -+ result[half_sel] |= (4*j+3) << shift_by; // word i, byte 3 -+ j++; -+ } else { -+ result[half_sel] |= (4*index + 0x10) << (shift_by+24); -+ result[half_sel] |= (4*index + 0x11) << (shift_by+16); -+ result[half_sel] |= (4*index + 0x12) << (shift_by+8); -+ result[half_sel] |= (4*index + 0x13) << shift_by; -+ } -+ } -+ -+ } else if (imm == 0b01) { // big endian compression -+ /* If IMM=0b00001, let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement a -+ compression of the sparse word elements in a source vector specified -+ by the word-element mask in VSR[VRB+32] into the leftmost word -+ elements of a result vector. -+ */ -+ for( index = 0; index < 4; index++) { -+ i = 3 - index; -+ -+ shift_by = i*32; -+ -+ if ( i >= 2) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 31; -+ -+ if (((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 2) { -+ // word j, byte 0 -+ result[1] |= (4*index+0) << ((3 - j)*32 + 24); -+ // word j, byte 1 -+ result[1] |= (4*index+1) << ((3 - j)*32 + 16); -+ // word j, byte 2 -+ result[1] |= (4*index+2) << ((3 - j)*32 + 8); -+ // word j, byte 3 -+ result[1] |= (4*index+3) << ((3 - j)*32 + 0); -+ } else { -+ result[0] |= (4*index+0) << ((1 - j)*32 + 24); -+ result[0] |= (4*index+1) << ((1 - j)*32 + 16); -+ result[0] |= (4*index+2) << ((1 - j)*32 + 8); -+ result[0] |= (4*index+3) << ((1 - j)*32 + 0); -+ } -+ j++; -+ } -+ } -+ -+ } else if (imm == 0b10) { //little-endian expansion -+ /* If IMM=0b00010, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement an -+ expansion of the rightmost word elements of a source vector into the -+ word elements of a result vector specified by the word-element mask -+ in VSR[VRB+32]. -+ */ -+ for( index = 0; index < 4; index++) { -+ i = index; -+ -+ shift_by = i*32; -+ -+ if ( i >= 2) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 31; -+ -+ if (((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= (4*j+0) << (shift_by + 0); // word j, byte 0 -+ result[half_sel] |= (4*j+1) << (shift_by + 8); // word j, byte 1 -+ result[half_sel] |= (4*j+2) << (shift_by + 16); // word j, byte 2 -+ result[half_sel] |= (4*j+3) << (shift_by + 24); // word j, byte 3 -+ j++; -+ } else { -+ result[half_sel] |= (4*index + 0x10) << (shift_by + 0); -+ result[half_sel] |= (4*index + 0x11) << (shift_by + 8); -+ result[half_sel] |= (4*index + 0x12) << (shift_by + 16); -+ result[half_sel] |= (4*index + 0x13) << (shift_by + 24); -+ } -+ } -+ -+ } else if (imm == 0b11) { //little-endian compression -+ /* If IMM=0b00011, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement a -+ compression of the sparse word elements in a source vector specified -+ by the word-element mask in VSR[VRB+32] into the rightmost word -+ elements of a result vector. */ -+ for( index = 0; index < 4; index++) { -+ i =index; -+ -+ shift_by = i*32; -+ -+ if ( i >= 2) { -+ src = src_hi; -+ shift_by = shift_by - 64; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = shift_by + 31; -+ -+ if (((src >> sel_shift_by) & 0x1) == 1) { -+ if (j >= 2){ -+ // word j, byte 0 -+ result[0] |= (4*index + 0x0) << ((j-2)*32+0); -+ // word j, byte 1 -+ result[0] |= (4*index + 0x1) << ((j-2)*32+8); -+ // word j, byte 2 -+ result[0] |= (4*index + 0x2) << ((j-2)*32+16); -+ // word j, byte 3 -+ result[0] |= (4*index + 0x3) << ((j-2)*32+24); -+ } else { -+ result[1] |= (4*index + 0x0) << (j*32+0); -+ result[1] |= (4*index + 0x1) << (j*32+8); -+ result[1] |= (4*index + 0x2) << (j*32+16); -+ result[1] |= (4*index + 0x3) << (j*32+24); -+ } -+ j++; -+ } -+ } -+ } else { -+ vex_printf("ERROR, vector_gen_pvc_word_mask_dirty_helper, imm value %u not supported.\n", -+ imm); -+ vassert(0); -+ } -+ -+ write_VSX_entry( gst, reg_offset, result); -+} -+ -+/* CALLED FROM GENERATED CODE */ -+void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, -+ ULong src_hi, ULong src_lo, -+ UInt reg_offset, UInt imm ) { -+ /* The function computes the 128-bit result then writes it directly -+ into the guest state VSX register. */ -+ UInt sel_shift_by, half_sel; -+ ULong index, src, result[2]; -+ ULong j, i; -+ -+ result[0] = 0; -+ result[1] = 0; -+ j = 0; -+ -+ /* The algorithm in the ISA is written with IBM numbering zero on left and -+ N-1 on right. The loop index is converted to "i" to match the algorithm -+ for claritiy of matching the C code to the algorithm in the ISA. */ -+ -+ if (imm == 0b00) { // big endian expansion -+ /* If IMM=0b00000, let pcv be the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement an -+ expansion of the leftmost doubleword elements of a source vector into -+ the doubleword elements of a result vector specified by the -+ doubleword-element mask in VSR[VRB+32]. -+ */ -+ for( index = 0; index < 2; index++) { -+ i = 1 - index; -+ -+ if ( i == 1) { -+ src = src_hi; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = 63; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= (8*j + 0x0) << 56; // dword i, byte 0 -+ result[half_sel] |= (8*j + 0x1) << 48; // dword i, byte 1 -+ result[half_sel] |= (8*j + 0x2) << 40; // dword i, byte 2 -+ result[half_sel] |= (8*j + 0x3) << 32; // dword i, byte 3 -+ result[half_sel] |= (8*j + 0x4) << 24; // dword i, byte 4 -+ result[half_sel] |= (8*j + 0x5) << 16; // dword i, byte 5 -+ result[half_sel] |= (8*j + 0x6) << 8; // dword i, byte 6 -+ result[half_sel] |= (8*j + 0x7) << 0; // dword i, byte 7 -+ j++; -+ } else { -+ result[half_sel] |= (8*index + 0x10) << 56; -+ result[half_sel] |= (8*index + 0x11) << 48; -+ result[half_sel] |= (8*index + 0x12) << 40; -+ result[half_sel] |= (8*index + 0x13) << 32; -+ result[half_sel] |= (8*index + 0x14) << 24; -+ result[half_sel] |= (8*index + 0x15) << 16; -+ result[half_sel] |= (8*index + 0x16) << 8; -+ result[half_sel] |= (8*index + 0x17) << 0; -+ } -+ } -+ } else if (imm == 0b01) { // big endian compression -+ /* If IMM=0b00001, let pcv be the the permute control vector required to -+ enable a left-indexed permute (vperm or xxperm) to implement a -+ compression of the sparse doubleword elements in a source vector -+ specified by the doubleword-element mask in VSR[VRB+32] into the -+ leftmost doubleword elements of a result vector. -+ */ -+ for( index = 0; index < 2; index++) { -+ i = 1 - index; -+ -+ if ( i == 1) { -+ src = src_hi; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = 63; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ if (j == 1) { -+ result[1] |= (8*index + 0x0) << 56; // double-word j, byte 0 -+ result[1] |= (8*index + 0x1) << 48; // double-word j, byte 1 -+ result[1] |= (8*index + 0x2) << 40; // double-word j, byte 2 -+ result[1] |= (8*index + 0x3) << 32; // double-word j, byte 3 -+ result[1] |= (8*index + 0x4) << 24; // double-word j, byte 4 -+ result[1] |= (8*index + 0x5) << 16; // double-word j, byte 5 -+ result[1] |= (8*index + 0x6) << 8; // double-word j, byte 6 -+ result[1] |= (8*index + 0x7) << 0; // double-word j, byte 7 -+ } else { -+ result[0] |= (8*index + 0x0) << 56; // double-word j, byte 0 -+ result[0] |= (8*index + 0x1) << 48; // double-word j, byte 1 -+ result[0] |= (8*index + 0x2) << 40; // double-word j, byte 2 -+ result[0] |= (8*index + 0x3) << 32; // double-word j, byte 3 -+ result[0] |= (8*index + 0x4) << 24; // double-word j, byte 4 -+ result[0] |= (8*index + 0x5) << 16; // double-word j, byte 5 -+ result[0] |= (8*index + 0x6) << 8; // double-word j, byte 6 -+ result[0] |= (8*index + 0x7) << 0; // double-word j, byte 7 -+ } -+ j++; -+ } -+ } -+ } else if (imm == 0b10) { //little-endian expansion -+ /* If IMM=0b00010, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement an -+ expansion of the rightmost doubleword elements of a source vector -+ into the doubleword elements of a result vector specified by the -+ doubleword-element mask in VSR[VRB+32]. -+ */ -+ -+ for( index = 0; index < 2; index++) { -+ i = index; -+ -+ if ( i == 1) { -+ src = src_hi; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = 63; -+ -+ if ( ((src >> sel_shift_by) & 0x1) == 1) { -+ result[half_sel] |= (8*j+0) << 0; // double-word i, byte 0 -+ result[half_sel] |= (8*j+1) << 8; // double-word i, byte 1 -+ result[half_sel] |= (8*j+2) << 16; // double-word i, byte 2 -+ result[half_sel] |= (8*j+3) << 24; // double-word i, byte 3 -+ result[half_sel] |= (8*j+4) << 32; // double-word i, byte 4 -+ result[half_sel] |= (8*j+5) << 40; // double-word i, byte 5 -+ result[half_sel] |= (8*j+6) << 48; // double-word i, byte 6 -+ result[half_sel] |= (8*j+7) << 56; // double-word i, byte 7 -+ j++; -+ } else { -+ result[half_sel] |= (8*index + 0x10) << 0; -+ result[half_sel] |= (8*index + 0x11) << 8; -+ result[half_sel] |= (8*index + 0x12) << 16; -+ result[half_sel] |= (8*index + 0x13) << 24; -+ result[half_sel] |= (8*index + 0x14) << 32; -+ result[half_sel] |= (8*index + 0x15) << 40; -+ result[half_sel] |= (8*index + 0x16) << 48; -+ result[half_sel] |= (8*index + 0x17) << 56; -+ } -+ } -+ -+ } else if (imm == 0b11) { //little-endian compression -+ /* If IMM=0b00011, let pcv be the permute control vector required to -+ enable a right-indexed permute (vpermr or xxpermr) to implement a -+ compression of the sparse doubleword elements in a source vector -+ specified by the doubleword-element mask in VSR[VRB+32] into the -+ rightmost doubleword elements of a result vector. */ -+ for( index = 0; index < 2; index++) { -+ i = index; -+ -+ if ( i == 1) { -+ src = src_hi; -+ half_sel = 0; -+ } else { -+ src = src_lo; -+ half_sel = 1; -+ } -+ -+ sel_shift_by = 63; -+ -+ if (((src >> sel_shift_by) & 0x1) == 1) { -+ if (j == 1) { -+ result[0] |= (8*index + 0x0) << 0; // double-word j, byte 0 -+ result[0] |= (8*index + 0x1) << 8; // double-word j, byte 1 -+ result[0] |= (8*index + 0x2) << 16; // double-word j, byte 2 -+ result[0] |= (8*index + 0x3) << 24; // double-word j, byte 3 -+ result[0] |= (8*index + 0x4) << 32; // double-word j, byte 4 -+ result[0] |= (8*index + 0x5) << 40; // double-word j, byte 5 -+ result[0] |= (8*index + 0x6) << 48; // double-word j, byte 6 -+ result[0] |= (8*index + 0x7) << 56; // double-word j, byte 7 -+ } else { -+ result[1] |= (8*index + 0x0) << 0; -+ result[1] |= (8*index + 0x1) << 8; -+ result[1] |= (8*index + 0x2) << 16; -+ result[1] |= (8*index + 0x3) << 24; -+ result[1] |= (8*index + 0x4) << 32; -+ result[1] |= (8*index + 0x5) << 40; -+ result[1] |= (8*index + 0x6) << 48; -+ result[1] |= (8*index + 0x7) << 56; -+ } -+ j++; -+ } -+ } -+ } else { -+ vex_printf("ERROR, vector_gen_pvc_dword_mask_helper, imm value %u not supported.\n", -+ imm); -+ vassert(0); -+ } -+ -+ write_VSX_entry( gst, reg_offset, result); -+} - - /*------------------------------------------------*/ - /*---- VSX Matrix signed integer GER functions ---*/ -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index bcabf69dd..354be6b53 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -3322,6 +3322,7 @@ static IRExpr * locate_vector_ele_eq ( IRTemp src, IRExpr *value, - #define DFORM_IMMASK 0xffffffff - #define DSFORM_IMMASK 0xfffffffc - #define DQFORM_IMMASK 0xfffffff0 -+#define DA8LSFORM_IMMASK 0x3fffffff // Algebraic 8LS Dform - - #define ISA_3_1_PREFIX_CHECK if (prefix) {if (!allow_isa_3_1) goto decode_noIsa3_1;} - -@@ -6109,6 +6110,87 @@ static void vsx_matrix_64bit_float_ger ( const VexAbiInfo* vbi, - stmt( IRStmt_Dirty(d) ); - } - -+static void vector_gen_pvc_mask ( const VexAbiInfo* vbi, -+ IRExpr *src, UInt IMM, -+ UInt opc2, UInt VSX_addr ) { -+ /* The function takes a 64-bit source and an immediate value. The function -+ calls a helper to execute the xxgenpcvbm, xxgenpcvhm, xxgenpcvwm, -+ xxgenpcvdm instruction. The instructions are not practical to do with -+ Iops. The instruction is implemented with a dirty helper that -+ calculates the 128-bit result and writes it directly into the guest -+ state VSX register. -+ */ -+ IRTemp src_hi = newTemp( Ity_I64); -+ IRTemp src_lo = newTemp( Ity_I64); -+ -+ IRDirty* d; -+ -+ vassert( (VSX_addr >= 0) && (VSX_addr < 64) ); -+ UInt reg_offset = offsetofPPCGuestState( guest_VSR0 ) -+ + sizeof(U128) * VSX_addr; -+ -+ assign( src_hi, unop( Iop_V128HIto64, src ) ); -+ assign( src_lo, unop( Iop_V128to64, src ) ); -+ -+ IRExpr** args = mkIRExprVec_5( -+ IRExpr_GSPTR(), -+ mkexpr( src_hi ), -+ mkexpr( src_lo ), -+ mkU32( reg_offset ), -+ mkU64( IMM ) ); -+ -+ switch( opc2 ) { -+ case 0x394: // xxgenpcvbm -+ d = unsafeIRDirty_0_N ( -+ 0 /*regparms*/, -+ "vector_gen_pvc_byte_mask_dirty_helper", -+ fnptr_to_fnentry( vbi, -+ &vector_gen_pvc_byte_mask_dirty_helper ), -+ args); -+ break; -+ -+ case 0x395: // xxgenpcvhm -+ d = unsafeIRDirty_0_N ( -+ 0 /*regparms*/, -+ "vector_gen_pvc_hword_mask_dirty_helper", -+ fnptr_to_fnentry( vbi, -+ &vector_gen_pvc_hword_mask_dirty_helper ), -+ args); -+ break; -+ -+ case 0x3B4: // xxgenpcvwm -+ d = unsafeIRDirty_0_N ( -+ 0 /*regparms*/, -+ "vector_gen_pvc_word_mask_dirty_helper", -+ fnptr_to_fnentry( vbi, -+ &vector_gen_pvc_word_mask_dirty_helper ), -+ args); -+ break; -+ -+ case 0x3B5: // xxgenpcvdm -+ d = unsafeIRDirty_0_N ( -+ 0 /*regparms*/, -+ "vector_gen_pvc_dword_mask_dirty_helper", -+ fnptr_to_fnentry( vbi, -+ &vector_gen_pvc_dword_mask_dirty_helper ), -+ args); -+ break; -+ default: -+ vex_printf("ERROR: Unkown instruction = %u in vector_gen_pvc_mask()\n", -+ opc2); -+ return; -+ } -+ -+ d->nFxState = 1; -+ vex_bzero(&d->fxState, sizeof(d->fxState)); -+ d->fxState[0].fx = Ifx_Modify; -+ d->fxState[0].size = sizeof(U128); -+ d->fxState[0].offset = reg_offset; -+ -+ /* execute the dirty call, side-effecting guest state */ -+ stmt( IRStmt_Dirty(d) ); -+} -+ - static IRExpr * UNSIGNED_CMP_GT_V128 ( IRExpr *vA, IRExpr *vB ) { - /* This function does an unsigned compare of two V128 values. The - * function is for use in 32-bit mode only as it is expensive. The -@@ -35227,6 +35309,54 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - return True; - } - -+static Bool dis_vector_generate_pvc_from_mask ( UInt prefix, -+ UInt theInstr, -+ const VexAbiInfo* vbi ) -+{ -+ UChar XT_addr = ifieldRegXT(theInstr); -+ UChar vB_addr = ifieldRegB(theInstr); -+ IRTemp vB = newTemp( Ity_V128 ); -+ UInt opc2 = ifieldOPClo10(theInstr); -+ UInt IMM = IFIELD(theInstr, (31-15), 5); // bits[11:15] -+ -+ assign( vB, getVReg( vB_addr ) ); -+ -+ switch( opc2 ) { -+ case 0x394: -+ DIP("xxgenpcvbm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); -+ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and -+ write it to the VSX result register. */ -+ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); -+ break; -+ -+ case 0x395: -+ DIP("xxgenpcvhm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); -+ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and -+ write it to the VSX result register. */ -+ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); -+ break; -+ -+ case 0x3B4: -+ DIP("xxgenpcvwm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); -+ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and -+ write it to the VSX result register. */ -+ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); -+ break; -+ -+ case 0x3B5: -+ DIP("xxgenpcvdm v%u,v%u,%u\n", XT_addr, vB_addr, IMM); -+ /* vector_gen_pvc_mask uses a dirty helper to calculate the result and -+ write it to the VSX result register. */ -+ vector_gen_pvc_mask( vbi, mkexpr( vB ), IMM, opc2, XT_addr ); -+ break; -+ -+ default: -+ return False; -+ } -+ -+ return True; -+} -+ - static Int dis_nop_prefix ( UInt prefix, UInt theInstr ) - { - Bool is_prefix = prefix_instruction( prefix ); -@@ -35748,14 +35878,9 @@ DisResult disInstr_PPC_WRK ( - } - goto decode_failure; - -- case 0x31: // lfsu, stxv -+ case 0x31: // lfsu - if (!allow_F) goto decode_noF; -- if (prefix_instruction( prefix )) { // stxv -- if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; -- if (dis_fp_pair_prefix( prefix, theInstr )) goto decode_success; -- } else { // lfsu -- if (dis_fp_load( prefix, theInstr )) goto decode_success; -- } -+ if (dis_fp_load( prefix, theInstr )) goto decode_success; - goto decode_failure; - - case 0x32: -@@ -35842,7 +35967,6 @@ DisResult disInstr_PPC_WRK ( - case 0x39: // pld, lxsd, lxssp, lfdp - { - UInt opc2tmp = ifieldOPC0o2(theInstr); -- - if (!allow_F) goto decode_noF; - if (prefix_instruction( prefix )) { // pld - if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; -@@ -36125,12 +36249,6 @@ DisResult disInstr_PPC_WRK ( - goto decode_failure; - } - -- /* The vsxOpc2 returned is the "normalized" value, representing the -- * instructions secondary opcode as taken from the standard secondary -- * opcode field [21:30] (IBM notatition), even if the actual field -- * is non-standard. These normalized values are given in the opcode -- * appendices of the ISA 2.06 document. -- */ - if ( ( opc2 == 0x168 ) && ( IFIELD( theInstr, 19, 2 ) == 0 ) )// xxspltib - { - /* This is a special case of the XX1 form where the RA, RB -@@ -36153,6 +36271,23 @@ DisResult disInstr_PPC_WRK ( - goto decode_failure; - } - -+ if ( ( opc2 == 0x394 ) || // xxgenpcvbm -+ ( opc2 == 0x395 ) || // xxgenpcvwm -+ ( opc2 == 0x3B4 ) || // xxgenpcvhm -+ ( opc2 == 0x3B5 ) ) { // xxgenpcvdm -+ if ( !(allow_isa_3_1) ) goto decode_noIsa3_1; -+ if (dis_vector_generate_pvc_from_mask( prefix, theInstr, -+ abiinfo )) -+ goto decode_success; -+ goto decode_failure; -+ } -+ -+ /* The vsxOpc2 returned is the "normalized" value, representing the -+ * instructions secondary opcode as taken from the standard secondary -+ * opcode field [21:30] (IBM notatition), even if the actual field -+ * is non-standard. These normalized values are given in the opcode -+ * appendices of the ISA 2.06 document. -+ */ - vsxOpc2 = get_VSX60_opc2(opc2, theInstr); - - switch (vsxOpc2) { -commit 078f89e99b6f62e043f6138c6a7ae238befc1f2a -Author: Carl Love -Date: Fri Feb 26 15:46:55 2021 -0600 - - PPC64: Reduced-Precision - bfloat16 Outer Product & Format Conversion Operations - - Add support for: - - pmxvbf16ger2 Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) - pmxvbf16ger2pp Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive - multiply, Positive accumulate - pmxvbf16ger2pn Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive - multiply, Negative accumulate - pmxvbf16ger2np Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative - multiply, Positive accumulate - pmxvbf16ger2nn Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative - multiply, Negative accumulate - xvbf16ger2VSX Vector bfloat16 GER (Rank-2 Update) - xvbf16ger2pp VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Positive - accumulate - xvbf16ger2pn VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Negative - accumulate - xvbf16ger2np VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Positive - accumulate - xvbf16ger2nn VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Negative - accumulate - xvcvbf16sp VSX Vector Convert bfloat16 to Single-Precision format - xvcvspbf16 VSX Vector Convert with round Single-Precision to bfloat16 format - -diff --git a/VEX/priv/guest_ppc_defs.h b/VEX/priv/guest_ppc_defs.h -index 54ce923a9..d36d6c07d 100644 ---- a/VEX/priv/guest_ppc_defs.h -+++ b/VEX/priv/guest_ppc_defs.h -@@ -150,6 +150,8 @@ extern ULong convert_to_zoned_helper( ULong src_hi, ULong src_low, - ULong return_upper ); - extern ULong convert_to_national_helper( ULong src, ULong return_upper ); - extern ULong convert_from_zoned_helper( ULong src_hi, ULong src_low ); -+extern ULong convert_from_floattobf16_helper( ULong src ); -+extern ULong convert_from_bf16tofloat_helper( ULong src ); - extern ULong convert_from_national_helper( ULong src_hi, ULong src_low ); - extern ULong generate_C_FPCC_helper( ULong size, ULong src_hi, ULong src ); - extern ULong extract_bits_under_mask_helper( ULong src, ULong mask, -@@ -201,6 +203,11 @@ extern void vector_gen_pvc_dword_mask_dirty_helper( VexGuestPPC64State* gst, - #define XVF16GER2PN 0b10010010 - #define XVF16GER2NP 0b01010010 - #define XVF16GER2NN 0b11010010 -+#define XVBF16GER2 0b00110011 -+#define XVBF16GER2PP 0b00110010 -+#define XVBF16GER2PN 0b10110010 -+#define XVBF16GER2NP 0b01110010 -+#define XVBF16GER2NN 0b11110010 - #define XVF32GER 0b00011011 - #define XVF32GERPP 0b00011010 - #define XVF32GERPN 0b10011010 -diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c -index 75497abb9..6bcee966d 100644 ---- a/VEX/priv/guest_ppc_helpers.c -+++ b/VEX/priv/guest_ppc_helpers.c -@@ -1905,6 +1905,125 @@ static Double conv_f16_to_double( ULong input ) - # endif - } - -+#define BF16_SIGN_MASK 0x8000 -+#define BF16_EXP_MASK 0x7F80 -+#define BF16_FRAC_MASK 0x007F -+#define BF16_BIAS 127 -+#define BF16_MAX_UNBIASED_EXP 127 -+#define BF16_MIN_UNBIASED_EXP -126 -+#define FLOAT_SIGN_MASK 0x80000000 -+#define FLOAT_EXP_MASK 0x7F800000 -+#define FLOAT_FRAC_MASK 0x007FFFFF -+#define FLOAT_FRAC_BIT8 0x00008000 -+#define FLOAT_BIAS 127 -+ -+static Float conv_bf16_to_float( UInt input ) -+{ -+ /* input is 16-bit bfloat. -+ bias +127, exponent 8-bits, fraction 7-bits -+ -+ output is 32-bit float. -+ bias +127, exponent 8-bits, fraction 22-bits -+ */ -+ -+ UInt input_exp, input_fraction, unbiased_exp; -+ UInt output_exp, output_fraction; -+ UInt sign; -+ union convert_t conv; -+ -+ sign = (UInt)(input & BF16_SIGN_MASK); -+ input_exp = input & BF16_EXP_MASK; -+ unbiased_exp = (input_exp >> 7) - (UInt)BF16_BIAS; -+ input_fraction = input & BF16_FRAC_MASK; -+ -+ if (((input_exp & BF16_EXP_MASK) == BF16_EXP_MASK) && -+ (input_fraction != 0)) { -+ /* input is NaN or SNaN, exp all 1's, fraction != 0 */ -+ output_exp = FLOAT_EXP_MASK; -+ output_fraction = input_fraction; -+ -+ } else if(((input_exp & BF16_EXP_MASK) == BF16_EXP_MASK) && -+ ( input_fraction == 0)) { -+ /* input is infinity, exp all 1's, fraction = 0 */ -+ output_exp = FLOAT_EXP_MASK; -+ output_fraction = 0; -+ -+ } else if((input_exp == 0) && (input_fraction == 0)) { -+ /* input is zero */ -+ output_exp = 0; -+ output_fraction = 0; -+ -+ } else if((input_exp == 0) && (input_fraction != 0)) { -+ /* input is denormal */ -+ output_fraction = input_fraction; -+ output_exp = (-(Int)BF16_BIAS + (Int)FLOAT_BIAS ) << 23; -+ -+ } else { -+ /* result is normal */ -+ output_exp = (unbiased_exp + FLOAT_BIAS) << 23; -+ output_fraction = input_fraction; -+ } -+ -+ conv.u32 = sign << (31 - 15) | output_exp | (output_fraction << (23-7)); -+ return conv.f; -+} -+ -+static UInt conv_float_to_bf16( UInt input ) -+{ -+ /* input is 32-bit float stored as unsigned 32-bit. -+ bias +127, exponent 8-bits, fraction 23-bits -+ -+ output is 16-bit bfloat. -+ bias +127, exponent 8-bits, fraction 7-bits -+ -+ If the unbiased exponent of the input is greater than the max floating -+ point unbiased exponent value, the result of the floating point 16-bit -+ value is infinity. -+ */ -+ -+ UInt input_exp, input_fraction; -+ UInt output_exp, output_fraction; -+ UInt result, sign; -+ -+ sign = input & FLOAT_SIGN_MASK; -+ input_exp = input & FLOAT_EXP_MASK; -+ input_fraction = input & FLOAT_FRAC_MASK; -+ -+ if (((input_exp & FLOAT_EXP_MASK) == FLOAT_EXP_MASK) && -+ (input_fraction != 0)) { -+ /* input is NaN or SNaN, exp all 1's, fraction != 0 */ -+ output_exp = BF16_EXP_MASK; -+ output_fraction = (ULong)input_fraction >> (23 - 7); -+ } else if (((input_exp & FLOAT_EXP_MASK) == FLOAT_EXP_MASK) && -+ ( input_fraction == 0)) { -+ /* input is infinity, exp all 1's, fraction = 0 */ -+ output_exp = BF16_EXP_MASK; -+ output_fraction = 0; -+ } else if ((input_exp == 0) && (input_fraction == 0)) { -+ /* input is zero */ -+ output_exp = 0; -+ output_fraction = 0; -+ } else if ((input_exp == 0) && (input_fraction != 0)) { -+ /* input is denormal */ -+ output_exp = 0; -+ output_fraction = (ULong)input_fraction >> (23 - 7); -+ } else { -+ /* result is normal */ -+ output_exp = (input_exp - BF16_BIAS + FLOAT_BIAS) >> (23 - 7); -+ output_fraction = (ULong)input_fraction >> (23 - 7); -+ -+ /* Round result. Look at the 8th bit position of the 32-bit floating -+ pointt fraction. The F16 fraction is only 7 bits wide so if the 8th -+ bit of the F32 is a 1 we need to round up by adding 1 to the output -+ fraction. */ -+ if ((input_fraction & FLOAT_FRAC_BIT8) == FLOAT_FRAC_BIT8) -+ /* Round the F16 fraction up by 1 */ -+ output_fraction = output_fraction + 1; -+ } -+ -+ result = sign >> (31 - 15) | output_exp | output_fraction; -+ return result; -+} - - static Float conv_double_to_float( Double src ) - { -@@ -1942,6 +2061,36 @@ static Float negate_float( Float input ) - return -input; - } - -+/* This C-helper takes a vector of two 32-bit floating point values -+ * and returns a vector containing two 16-bit bfloats. -+ input: word0 word1 -+ output 0x0 hword1 0x0 hword3 -+ Called from generated code. -+ */ -+ULong convert_from_floattobf16_helper( ULong src ) { -+ ULong resultHi, resultLo; -+ -+ resultHi = (ULong)conv_float_to_bf16( (UInt)(src >> 32)); -+ resultLo = (ULong)conv_float_to_bf16( (UInt)(src & 0xFFFFFFFF)); -+ return (resultHi << 32) | resultLo; -+ -+} -+ -+/* This C-helper takes a vector of two 16-bit bfloating point values -+ * and returns a vector containing one 32-bit float. -+ input: 0x0 hword1 0x0 hword3 -+ output: word0 word1 -+ */ -+ULong convert_from_bf16tofloat_helper( ULong src ) { -+ ULong result; -+ union convert_t conv; -+ conv.f = conv_bf16_to_float( (UInt)(src >> 32) ); -+ result = (ULong) conv.u32; -+ conv.f = conv_bf16_to_float( (UInt)(src & 0xFFFFFFFF)); -+ result = (result << 32) | (ULong) conv.u32; -+ return result; -+ } -+ - void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, - UInt offset_ACC, - ULong srcA_hi, ULong srcA_lo, -@@ -2002,24 +2151,44 @@ void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, - srcB_word[0][j] = (UInt)((srcB_lo >> (16-16*j)) & mask); - } - -+ /* Note the isa is not consistent in the src naming. Will use the -+ naming src10, src11, src20, src21 used with xvf16ger2 instructions. -+ */ - for( j = 0; j < 4; j++) { - if (((pmsk >> 1) & 0x1) == 0) { - src10 = 0; - src20 = 0; - } else { -- src10 = conv_f16_to_double((ULong)srcA_word[i][0]); -- src20 = conv_f16_to_double((ULong)srcB_word[j][0]); -+ if (( inst == XVF16GER2 ) || ( inst == XVF16GER2PP ) -+ || ( inst == XVF16GER2PN ) || ( inst == XVF16GER2NP ) -+ || ( inst == XVF16GER2NN )) { -+ src10 = conv_f16_to_double((ULong)srcA_word[i][0]); -+ src20 = conv_f16_to_double((ULong)srcB_word[j][0]); -+ } else { -+ /* Input is in bfloat format, result is stored in the -+ "traditional" 64-bit float format. */ -+ src10 = (double)conv_bf16_to_float((ULong)srcA_word[i][0]); -+ src20 = (double)conv_bf16_to_float((ULong)srcB_word[j][0]); -+ } - } - - if ((pmsk & 0x1) == 0) { - src11 = 0; - src21 = 0; - } else { -- src11 = conv_f16_to_double((ULong)srcA_word[i][1]); -- src21 = conv_f16_to_double((ULong)srcB_word[j][1]); -+ if (( inst == XVF16GER2 ) || ( inst == XVF16GER2PP ) -+ || ( inst == XVF16GER2PN ) || ( inst == XVF16GER2NP ) -+ || ( inst == XVF16GER2NN )) { -+ src11 = conv_f16_to_double((ULong)srcA_word[i][1]); -+ src21 = conv_f16_to_double((ULong)srcB_word[j][1]); -+ } else { -+ /* Input is in bfloat format, result is stored in the -+ "traditional" 64-bit float format. */ -+ src11 = (double)conv_bf16_to_float((ULong)srcA_word[i][1]); -+ src21 = (double)conv_bf16_to_float((ULong)srcB_word[j][1]); -+ } - } - -- - prod = src10 * src20; - msum = prod + src11 * src21; - -@@ -2027,26 +2196,26 @@ void vsx_matrix_16bit_float_ger_dirty_helper( VexGuestPPC64State* gst, - /* Note, we do not track the exception handling bits - ox, ux, xx, si, mz, vxsnan and vximz in the FPSCR. */ - -- if ( inst == XVF16GER2 ) -+ if (( inst == XVF16GER2 ) || ( inst == XVBF16GER2 ) ) - result[j] = reinterpret_float_as_int( - conv_double_to_float(msum) ); - -- else if ( inst == XVF16GER2PP ) -+ else if (( inst == XVF16GER2PP ) || (inst == XVBF16GER2PP )) - result[j] = reinterpret_float_as_int( - conv_double_to_float(msum) - + acc_word[j] ); - -- else if ( inst == XVF16GER2PN ) -+ else if (( inst == XVF16GER2PN ) || ( inst == XVBF16GER2PN )) - result[j] = reinterpret_float_as_int( - conv_double_to_float(msum) - + negate_float( acc_word[j] ) ); - -- else if ( inst == XVF16GER2NP ) -+ else if (( inst == XVF16GER2NP ) || ( inst == XVBF16GER2NP )) - result[j] = reinterpret_float_as_int( - conv_double_to_float( negate_double( msum ) ) - + acc_word[j] ); - -- else if ( inst == XVF16GER2NN ) -+ else if (( inst == XVF16GER2NN ) || ( inst == XVBF16GER2NN )) - result[j] = reinterpret_float_as_int( - conv_double_to_float( negate_double( msum ) ) - + negate_float( acc_word[j] ) ); -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index 354be6b53..20553a539 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -5688,6 +5688,57 @@ static IRExpr * convert_from_national ( const VexAbiInfo* vbi, IRExpr *src ) { - return mkexpr( result ); - } - -+static IRExpr * vector_convert_floattobf16 ( const VexAbiInfo* vbi, -+ IRExpr *src ) { -+ /* The function takes 128-bit value containing four 32-bit floats and -+ returns a 128-bit value containint four 16-bit bfloats in the lower -+ halfwords. */ -+ -+ IRTemp resultHi = newTemp( Ity_I64); -+ IRTemp resultLo = newTemp( Ity_I64); -+ -+ assign( resultHi, -+ mkIRExprCCall( Ity_I64, 0 /*regparms*/, -+ "vector_convert_floattobf16_helper", -+ fnptr_to_fnentry( vbi, -+ &convert_from_floattobf16_helper ), -+ mkIRExprVec_1( unop( Iop_V128HIto64, src ) ) ) ); -+ -+ assign( resultLo, -+ mkIRExprCCall( Ity_I64, 0 /*regparms*/, -+ "vector_convert_floattobf16_helper", -+ fnptr_to_fnentry( vbi, -+ &convert_from_floattobf16_helper ), -+ mkIRExprVec_1( unop( Iop_V128to64, src ) ) ) ); -+ -+ return binop( Iop_64HLtoV128, mkexpr( resultHi ), mkexpr( resultLo ) ); -+} -+ -+static IRExpr * vector_convert_bf16tofloat ( const VexAbiInfo* vbi, -+ IRExpr *src ) { -+ /* The function takes 128-bit value containing four 16-bit bfloats in -+ the lower halfwords and returns a 128-bit value containint four -+ 32-bit floats. */ -+ IRTemp resultHi = newTemp( Ity_I64); -+ IRTemp resultLo = newTemp( Ity_I64); -+ -+ assign( resultHi, -+ mkIRExprCCall( Ity_I64, 0 /*regparms*/, -+ "vector_convert_bf16tofloat_helper", -+ fnptr_to_fnentry( vbi, -+ &convert_from_bf16tofloat_helper ), -+ mkIRExprVec_1( unop( Iop_V128HIto64, src ) ) ) ); -+ -+ assign( resultLo, -+ mkIRExprCCall( Ity_I64, 0 /*regparms*/, -+ "vector_convert_bf16tofloat_helper", -+ fnptr_to_fnentry( vbi, -+ &convert_from_bf16tofloat_helper ), -+ mkIRExprVec_1( unop( Iop_V128to64, src ) ) ) ); -+ -+ return binop( Iop_64HLtoV128, mkexpr( resultHi ), mkexpr( resultLo ) ); -+} -+ - static IRExpr * popcnt64 ( const VexAbiInfo* vbi, - IRExpr *src ){ - /* The function takes a 64-bit source and counts the number of bits in the -@@ -5936,6 +5987,7 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, - case XVI16GER2: - case XVI16GER2S: - case XVF16GER2: -+ case XVBF16GER2: - case XVF32GER: - AT_fx = Ifx_Write; - break; -@@ -5943,6 +5995,10 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, - case XVI8GER4PP: - case XVI16GER2PP: - case XVI16GER2SPP: -+ case XVBF16GER2PP: -+ case XVBF16GER2PN: -+ case XVBF16GER2NP: -+ case XVBF16GER2NN: - case XVF16GER2PP: - case XVF16GER2PN: - case XVF16GER2NP: -@@ -23899,6 +23955,24 @@ dis_vxs_misc( UInt prefix, UInt theInstr, const VexAbiInfo* vbi, UInt opc2, - mkexpr( sub_element1 ), - mkexpr( sub_element0 ) ) ) ); - -+ } else if ((inst_select == 16) && !prefix) { -+ IRTemp result = newTemp(Ity_V128); -+ UChar xT_addr = ifieldRegXT ( theInstr ); -+ UChar xB_addr = ifieldRegXB ( theInstr ); -+ /* Convert 16-bit bfloat to 32-bit float, not a prefix inst */ -+ DIP("xvcvbf16sp v%u,v%u\n", xT_addr, xB_addr); -+ assign( result, vector_convert_bf16tofloat( vbi, mkexpr( vB ) ) ); -+ putVSReg( XT, mkexpr( result) ); -+ -+ } else if ((inst_select == 17) && !prefix) { -+ IRTemp result = newTemp(Ity_V128); -+ UChar xT_addr = ifieldRegXT ( theInstr ); -+ UChar xB_addr = ifieldRegXB ( theInstr ); -+ /* Convert 32-bit float to 16-bit bfloat, not a prefix inst */ -+ DIP("xvcvspbf16 v%u,v%u\n", xT_addr, xB_addr); -+ assign( result, vector_convert_floattobf16( vbi, mkexpr( vB ) ) ); -+ putVSReg( XT, mkexpr( result) ); -+ - } else if (inst_select == 23) { - DIP("xxbrd v%u, v%u\n", (UInt)XT, (UInt)XB); - -@@ -34956,6 +35030,41 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - getVSReg( rB_addr ), AT, - ( ( inst_prefix << 8 ) | XO ) ); - break; -+ case XVBF16GER2: -+ DIP("xvbf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), AT, -+ ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2PP: -+ DIP("xvbf16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), AT, -+ ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2PN: -+ DIP("xvbf16ger2pn %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), AT, -+ ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2NP: -+ DIP("xvbf16ger2np %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), AT, -+ ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2NN: -+ DIP("xvbf16ger2nn %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), AT, -+ ( ( inst_prefix << 8 ) | XO ) ); -+ break; - case XVF32GER: - DIP("xvf32ger %u,r%u, r%u\n", AT, rA_addr, rB_addr); - vsx_matrix_ger( vbi, MATRIX_32BIT_FLOAT_GER, -@@ -35106,6 +35215,61 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - AT, - ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); - break; -+ case XVBF16GER2: -+ PMSK = IFIELD( prefix, 14, 2); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvbf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), -+ AT, ( (MASKS << 9 ) -+ | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2PP: -+ PMSK = IFIELD( prefix, 14, 2); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvbf16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), -+ AT, ( (MASKS << 9 ) -+ | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2PN: -+ PMSK = IFIELD( prefix, 14, 2); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvbf16ger2pn %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), -+ AT, ( (MASKS << 9 ) -+ | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2NP: -+ PMSK = IFIELD( prefix, 14, 2); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvbf16ger2np %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), -+ AT, ( (MASKS << 9 ) -+ | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVBF16GER2NN: -+ PMSK = IFIELD( prefix, 14, 2); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvbf16ger2nn %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -+ getVSReg( rA_addr ), -+ getVSReg( rB_addr ), -+ AT, ( (MASKS << 9 ) -+ | ( inst_prefix << 8 ) | XO ) ); -+ break; - case XVF16GER2: - PMSK = IFIELD( prefix, 14, 2); - XMSK = IFIELD( prefix, 4, 4); -@@ -36181,6 +36345,11 @@ DisResult disInstr_PPC_WRK ( - (opc2 == XVI4GER8PP) || // xvi4ger8pp - (opc2 == XVI8GER4) || // xvi8ger4 - (opc2 == XVI8GER4PP) || // xvi8ger4pp -+ (opc2 == XVBF16GER2) || // xvbf16ger2 -+ (opc2 == XVBF16GER2PP) || // xvbf16ger2pp -+ (opc2 == XVBF16GER2PN) || // xvbf16ger2pn -+ (opc2 == XVBF16GER2NP) || // xvbf16ger2np -+ (opc2 == XVBF16GER2NN) || // xvbf16ger2nn - (opc2 == XVF16GER2) || // xvf16ger2 - (opc2 == XVF16GER2PP) || // xvf16ger2pp - (opc2 == XVF16GER2PN) || // xvf16ger2pn -commit e09fdaf569b975717465ed8043820d0198d4d47d -Author: Carl Love -Date: Fri Feb 26 16:05:12 2021 -0600 - - PPC64: Reduced-Precision: Missing Integer-based Outer Product Operations - - Add support for: - - pmxvi16ger2 VSX Vector 16-bit Signed Integer GER (rank-2 update), Prefixed - Masked - pmxvi16ger2pp VSX Vector 16-bit Signed Integer GER (rank-2 update) (Positive - multiply, Positive accumulate), Prefixed Masked - pmxvi8ger4spp VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with - Saturation (Positive multiply, Positive accumulate), Prefixed Masked - xvi16ger2 VSX Vector 16-bit Signed Integer GER (rank-2 update) - xvi16ger2pp VSX Vector 16-bit Signed Integer GER (rank-2 update) (Positive - multiply, Positive accumulate) - xvi8ger4spp VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with - Saturation (Positive multiply, Positive accumulate) - -diff --git a/VEX/priv/guest_ppc_helpers.c b/VEX/priv/guest_ppc_helpers.c -index 6bcee966d..d8131eb60 100644 ---- a/VEX/priv/guest_ppc_helpers.c -+++ b/VEX/priv/guest_ppc_helpers.c -@@ -1446,16 +1446,16 @@ static UInt exts4( UInt src) - return src & 0xF; /* make sure high order bits are zero */ - } - --static UInt exts8( UInt src) -+static ULong exts8( UInt src) - { -- /* Input is an 8-bit value. Extend bit 7 to bits [31:8] */ -+ /* Input is an 8-bit value. Extend bit 7 to bits [63:8] */ - if (( src >> 7 ) & 0x1) -- return src | 0xFFFFFF00; /* sign bit is a 1, extend */ -+ return src | 0xFFFFFFFFFFFFFF00ULL; /* sign bit is a 1, extend */ - else - return src & 0xFF; /* make sure high order bits are zero */ - } - --static UInt extz8( UInt src) -+static ULong extz8( UInt src) - { - /* Input is an 8-bit value. Extend src on the left with zeros. */ - return src & 0xFF; /* make sure high order bits are zero */ -@@ -1662,12 +1662,12 @@ void vsx_matrix_8bit_ger_dirty_helper( VexGuestPPC64State* gst, - ULong srcB_hi, ULong srcB_lo, - UInt masks_inst ) - { -- UInt i, j, mask, sum, inst, acc_entry, prefix_inst; -+ UInt i, j, mask, inst, acc_entry, prefix_inst; - - UInt srcA_bytes[4][4]; /* word, byte */ - UInt srcB_bytes[4][4]; /* word, byte */ - UInt acc_word[4]; -- UInt prod0, prod1, prod2, prod3; -+ ULong prod0, prod1, prod2, prod3, sum; - UInt result[4]; - UInt pmsk = 0; - UInt xmsk = 0; -@@ -1742,10 +1742,13 @@ void vsx_matrix_8bit_ger_dirty_helper( VexGuestPPC64State* gst, - sum = prod0 + prod1 + prod2 + prod3; - - if ( inst == XVI8GER4 ) -- result[j] = sum; -+ result[j] = chop64to32( sum ); - - else if ( inst == XVI8GER4PP ) -- result[j] = sum + acc_word[j]; -+ result[j] = chop64to32( sum + acc_word[j] ); -+ -+ else if ( inst == XVI8GER4SPP ) -+ result[j] = clampS64toS32(sum + acc_word[j]); - - } else { - result[j] = 0; -@@ -1821,7 +1824,7 @@ void vsx_matrix_16bit_ger_dirty_helper( VexGuestPPC64State* gst, - else - prod1 = exts16to64( srcA_word[i][1] ) - * exts16to64( srcB_word[j][1] ); -- /* sum is UInt so the result is choped to 32-bits */ -+ - sum = prod0 + prod1; - - if ( inst == XVI16GER2 ) -@@ -1830,13 +1833,11 @@ void vsx_matrix_16bit_ger_dirty_helper( VexGuestPPC64State* gst, - else if ( inst == XVI16GER2S ) - result[j] = clampS64toS32( sum ); - -- else if ( inst == XVI16GER2PP ) { -+ else if ( inst == XVI16GER2PP ) - result[j] = chop64to32( sum + acc_word[j] ); -- } - -- else if ( inst == XVI16GER2SPP ) { -+ else if ( inst == XVI16GER2SPP ) - result[j] = clampS64toS32( sum + acc_word[j] ); -- } - - } else { - result[j] = 0; -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index 20553a539..e54f0f389 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -5993,6 +5993,7 @@ static void vsx_matrix_ger ( const VexAbiInfo* vbi, - break; - case XVI4GER8PP: - case XVI8GER4PP: -+ case XVI8GER4SPP: - case XVI16GER2PP: - case XVI16GER2SPP: - case XVBF16GER2PP: -@@ -34983,6 +34984,12 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - getVSReg( rA_addr ), getVSReg( rB_addr ), - AT, ( ( inst_prefix << 8 ) | XO ) ); - break; -+ case XVI8GER4SPP: -+ DIP("xvi8ger4spp %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_8BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, ( ( inst_prefix << 8 ) | XO ) ); -+ break; - case XVI16GER2S: - DIP("xvi16ger2s %u,r%u, r%u\n", AT, rA_addr, rB_addr); - vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, -@@ -34995,6 +35002,19 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - getVSReg( rA_addr ), getVSReg( rB_addr ), - AT, ( ( inst_prefix << 8 ) | XO ) ); - break; -+ case XVI16GER2: -+ DIP("xvi16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVI16GER2PP: -+ DIP("xvi16ger2pp %u,r%u, r%u\n", AT, rA_addr, rB_addr); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, ( ( inst_prefix << 8 ) | XO ) ); -+ break; -+ - case XVF16GER2: - DIP("xvf16ger2 %u,r%u, r%u\n", AT, rA_addr, rB_addr); - vsx_matrix_ger( vbi, MATRIX_16BIT_FLOAT_GER, -@@ -35193,6 +35213,39 @@ static Bool dis_vsx_accumulator_prefix ( UInt prefix, UInt theInstr, - AT, - ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); - break; -+ case XVI8GER4SPP: -+ PMSK = IFIELD( prefix, 12, 4); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvi8ger4spp %u,r%u, r%u,%u,%u,%u\n", -+ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); -+ vsx_matrix_ger( vbi, MATRIX_8BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, -+ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVI16GER2: -+ PMSK = IFIELD( prefix, 12, 4); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvi16ger2 %u,r%u, r%u,%u,%u,%u\n", -+ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, -+ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); -+ break; -+ case XVI16GER2PP: -+ PMSK = IFIELD( prefix, 12, 4); -+ XMSK = IFIELD( prefix, 4, 4); -+ YMSK = IFIELD( prefix, 0, 4); -+ DIP("pmxvi16ger2pp %u,r%u, r%u,%u,%u,%u\n", -+ AT, rA_addr, rB_addr, XMSK, YMSK, PMSK); -+ vsx_matrix_ger( vbi, MATRIX_16BIT_INT_GER, -+ getVSReg( rA_addr ), getVSReg( rB_addr ), -+ AT, -+ ( (MASKS << 9 ) | ( inst_prefix << 8 ) | XO ) ); -+ break; - case XVI16GER2S: - PMSK = IFIELD( prefix, 14, 2); - XMSK = IFIELD( prefix, 4, 4); -@@ -36345,6 +36398,9 @@ DisResult disInstr_PPC_WRK ( - (opc2 == XVI4GER8PP) || // xvi4ger8pp - (opc2 == XVI8GER4) || // xvi8ger4 - (opc2 == XVI8GER4PP) || // xvi8ger4pp -+ (opc2 == XVI8GER4SPP) || // xvi8ger4spp -+ (opc2 == XVI16GER2) || // xvi16ger2 -+ (opc2 == XVI16GER2PP) || // xvi16ger2pp - (opc2 == XVBF16GER2) || // xvbf16ger2 - (opc2 == XVBF16GER2PP) || // xvbf16ger2pp - (opc2 == XVBF16GER2PN) || // xvbf16ger2pn diff --git a/valgrind-3.17.0-ppc64-pstxvp.patch b/valgrind-3.17.0-ppc64-pstxvp.patch deleted file mode 100644 index 1253d00..0000000 --- a/valgrind-3.17.0-ppc64-pstxvp.patch +++ /dev/null @@ -1,27 +0,0 @@ -commit a7216a4c4cc676e8f4750e71e7de654c0ce78ca3 -Author: Will Schmidt -Date: Tue Aug 24 13:18:11 2021 -0500 - - Remove a unneeded / unnecessary prefix check. - -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index f223fe9456..57ac7bcf48 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -14561,16 +14561,10 @@ static Bool dis_fp_pair_prefix ( UInt prefix, UInt theInstr ) - - /* Endian aware prefixed load */ - pDIP( is_prefix, "stxvp %u,%llu(%u)\n", XTp, immediate_val, rA_addr ); - DIPp( is_prefix, ",%u", R ); - -- if ( R == 1 ) { -- vex_printf("Illegal instruction R = 1; pstxvp %u,%llu(%u)\n", -- XTp, immediate_val, rA_addr ); -- return False; -- } -- - assign( EA_8, binop( Iop_Add64, mkU64( 8 ), mkexpr( EA ) ) ); - assign( EA_16, binop( Iop_Add64, mkU64( 16 ), mkexpr( EA ) ) ); - assign( EA_24, binop( Iop_Add64, mkU64( 24 ), mkexpr( EA ) ) ); - - if (host_endness == VexEndnessBE) { diff --git a/valgrind-3.17.0-ppc64-statfs64.patch b/valgrind-3.17.0-ppc64-statfs64.patch deleted file mode 100644 index 6b29887..0000000 --- a/valgrind-3.17.0-ppc64-statfs64.patch +++ /dev/null @@ -1,27 +0,0 @@ -commit 44da99781e5bb954a0cd3c897b859012a125fec6 -Author: Mark Wielaard -Date: Fri Aug 6 19:08:17 2021 +0200 - - unhandled ppc64le-linux syscall: 252 (statfs64) and 253 (fstatfs64) - - glibc 2.34 consolidated all statfs implementations. All other arches - that have statfs64/fstat64 (including ppc32) already had that syscall - hooked up, it was just ppc64 that was missing it. - - https://bugs.kde.org/show_bug.cgi?id=440670 - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index 76610e142..f1a88f7ce 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -900,8 +900,8 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_tgkill, sys_tgkill), // 250 - // _____(__NR_utimes, sys_utimes), // 251 --// _____(__NR_statfs64, sys_statfs64), // 252 --// _____(__NR_fstatfs64, sys_fstatfs64), // 253 -+ GENXY(__NR_statfs64, sys_statfs64), // 252 -+ GENXY(__NR_fstatfs64, sys_fstatfs64), // 253 - // /* #define __NR_fadvise64_64 254 32bit only */ - - // _____(__NR_rtas, sys_rtas), // 255 diff --git a/valgrind-3.17.0-ppc64-test-isa-3-1.patch b/valgrind-3.17.0-ppc64-test-isa-3-1.patch deleted file mode 100644 index c471cdd..0000000 --- a/valgrind-3.17.0-ppc64-test-isa-3-1.patch +++ /dev/null @@ -1,38 +0,0 @@ -commit 60ff013998de8aa168e01b7b1c1743bcbdee99b1 -Author: Will Schmidt -Date: Thu Aug 12 15:41:50 2021 -0500 - - Hi - - This reworks the modulo operation as seen in - valgrind/none/tests/ppc64/test_isa_3_1_common.c: - initialize_source_registers(). Due to a GCC issue (PR101882), we - will try to avoid a modulo operation with both input and outputs set to - a hard register. - In this case, we can apply the modulo operation to the args[] array - value used to initialize the ra value. - -diff --git a/none/tests/ppc64/test_isa_3_1_common.c b/none/tests/ppc64/test_isa_3_1_common.c -index 8222a857fc..7c3dc6f009 100644 ---- a/none/tests/ppc64/test_isa_3_1_common.c -+++ b/none/tests/ppc64/test_isa_3_1_common.c -@@ -2261,12 +2261,17 @@ void initialize_source_registers () { - if (has_rb) rb = 2*vrbi; - /* note special case for is_insert_double, see set_up_iterators () */ - if (has_ra) ra = 4*vrai; - if (is_insert_double) { - /* For an insert_double, the results are undefined -- for ra > 8, so modulo those into a valid range. */ -- ra = ra % 9; -+ for ra > 8, so modulo those into a valid range. -+ Since ra is defined as a hard register, and due to gcc -+ issue (PR101882) where a modulo operation fails with -+ both input and output regs set to a hard register, this -+ assignment references the args[] array again, versus -+ ra = ra % 9;. */ -+ ra = args[vrai] % 9; - } - } - - if (uses_buffer) { - if (has_rb) { diff --git a/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch b/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch deleted file mode 100644 index 26e80bc..0000000 --- a/valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch +++ /dev/null @@ -1,102 +0,0 @@ -commit 9aaeafa70c5126b22857485449f8d5eeb1d9c527 -Author: Carl Love -Date: Tue Sep 7 17:15:38 2021 +0000 - - Update the expected output for test_isa_3_1_VRT. - - The inputs into the vinsdlx,vinsdrx instructions changed as a result of - the impossible constraint issue fix. This patch updates the expected - results. - - https://bugs.kde.org/show_bug.cgi?id=441534 - -diff --git a/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp b/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp -index 39c4d8619..8f04ee2cb 100644 ---- a/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp -+++ b/none/tests/ppc64/test_isa_3_1_VRT.stdout.exp -@@ -6798,24 +6798,24 @@ vinsdlx 0 4 => 4,1111111111111111 - vinsdlx 0 6 => 6,1111111111111111 - vinsdlx 0 8 => 8,1111111111111111 - vinsdlx 0 a => a,1111111111111111 --vinsdlx 4 0 => 1111111100000000,0000000011111111 --vinsdlx 4 2 => 1111111100000000,0000000211111111 --vinsdlx 4 4 => 1111111100000000,0000000411111111 --vinsdlx 4 6 => 1111111100000000,0000000611111111 --vinsdlx 4 8 => 1111111100000000,0000000811111111 --vinsdlx 4 a => 1111111100000000,0000000a11111111 --vinsdlx 8 0 => 1111111111111111,0000000000000000 --vinsdlx 8 2 => 1111111111111111,0000000000000002 --vinsdlx 8 4 => 1111111111111111,0000000000000004 --vinsdlx 8 6 => 1111111111111111,0000000000000006 --vinsdlx 8 8 => 1111111111111111,0000000000000008 --vinsdlx 8 a => 1111111111111111,000000000000000a --vinsdlx 3 0 => 1111110000000000,0000001111111111 --vinsdlx 3 2 => 1111110000000000,0000021111111111 --vinsdlx 3 4 => 1111110000000000,0000041111111111 --vinsdlx 3 6 => 1111110000000000,0000061111111111 --vinsdlx 3 8 => 1111110000000000,0000081111111111 --vinsdlx 3 a => 1111110000000000,00000a1111111111 -+vinsdlx 6 0 => 1111111111110000,0000000000001111 -+vinsdlx 6 2 => 1111111111110000,0000000000021111 -+vinsdlx 6 4 => 1111111111110000,0000000000041111 -+vinsdlx 6 6 => 1111111111110000,0000000000061111 -+vinsdlx 6 8 => 1111111111110000,0000000000081111 -+vinsdlx 6 a => 1111111111110000,00000000000a1111 -+vinsdlx 6 0 => 1111111111110000,0000000000001111 -+vinsdlx 6 2 => 1111111111110000,0000000000021111 -+vinsdlx 6 4 => 1111111111110000,0000000000041111 -+vinsdlx 6 6 => 1111111111110000,0000000000061111 -+vinsdlx 6 8 => 1111111111110000,0000000000081111 -+vinsdlx 6 a => 1111111111110000,00000000000a1111 -+vinsdlx 2 0 => 1111000000000000,0000111111111111 -+vinsdlx 2 2 => 1111000000000000,0002111111111111 -+vinsdlx 2 4 => 1111000000000000,0004111111111111 -+vinsdlx 2 6 => 1111000000000000,0006111111111111 -+vinsdlx 2 8 => 1111000000000000,0008111111111111 -+vinsdlx 2 a => 1111000000000000,000a111111111111 - - vinsdrx 0 0 => 1111111111111111,0000000000000000 - vinsdrx 0 2 => 1111111111111111,0000000000000002 -@@ -6823,24 +6823,24 @@ vinsdrx 0 4 => 1111111111111111,0000000000000004 - vinsdrx 0 6 => 1111111111111111,0000000000000006 - vinsdrx 0 8 => 1111111111111111,0000000000000008 - vinsdrx 0 a => 1111111111111111,000000000000000a --vinsdrx 4 0 => 1111111100000000,0000000011111111 --vinsdrx 4 2 => 1111111100000000,0000000211111111 --vinsdrx 4 4 => 1111111100000000,0000000411111111 --vinsdrx 4 6 => 1111111100000000,0000000611111111 --vinsdrx 4 8 => 1111111100000000,0000000811111111 --vinsdrx 4 a => 1111111100000000,0000000a11111111 --vinsdrx 8 0 => 0,1111111111111111 --vinsdrx 8 2 => 2,1111111111111111 --vinsdrx 8 4 => 4,1111111111111111 --vinsdrx 8 6 => 6,1111111111111111 --vinsdrx 8 8 => 8,1111111111111111 --vinsdrx 8 a => a,1111111111111111 --vinsdrx 3 0 => 1111111111000000,0000000000111111 --vinsdrx 3 2 => 1111111111000000,0000000002111111 --vinsdrx 3 4 => 1111111111000000,0000000004111111 --vinsdrx 3 6 => 1111111111000000,0000000006111111 --vinsdrx 3 8 => 1111111111000000,0000000008111111 --vinsdrx 3 a => 1111111111000000,000000000a111111 -+vinsdrx 6 0 => 1111000000000000,0000111111111111 -+vinsdrx 6 2 => 1111000000000000,0002111111111111 -+vinsdrx 6 4 => 1111000000000000,0004111111111111 -+vinsdrx 6 6 => 1111000000000000,0006111111111111 -+vinsdrx 6 8 => 1111000000000000,0008111111111111 -+vinsdrx 6 a => 1111000000000000,000a111111111111 -+vinsdrx 6 0 => 1111000000000000,0000111111111111 -+vinsdrx 6 2 => 1111000000000000,0002111111111111 -+vinsdrx 6 4 => 1111000000000000,0004111111111111 -+vinsdrx 6 6 => 1111000000000000,0006111111111111 -+vinsdrx 6 8 => 1111000000000000,0008111111111111 -+vinsdrx 6 a => 1111000000000000,000a111111111111 -+vinsdrx 2 0 => 1111111111110000,0000000000001111 -+vinsdrx 2 2 => 1111111111110000,0000000000021111 -+vinsdrx 2 4 => 1111111111110000,0000000000041111 -+vinsdrx 2 6 => 1111111111110000,0000000000061111 -+vinsdrx 2 8 => 1111111111110000,0000000000081111 -+vinsdrx 2 a => 1111111111110000,00000000000a1111 - - vinsd 3 0 => 1111110000000000,0000001111111111 - vinsd 3 2 => 1111110000000000,0000021111111111 diff --git a/valgrind-3.17.0-s390-prep.patch b/valgrind-3.17.0-s390-prep.patch deleted file mode 100644 index 8f2dbb1..0000000 --- a/valgrind-3.17.0-s390-prep.patch +++ /dev/null @@ -1,2283 +0,0 @@ -commit d74a637206ef5532ccd2ccb2e31ee2762f184e60 -Author: Andreas Arnez -Date: Wed Apr 28 18:52:30 2021 +0200 - - Bug 433863 - s390x: Remove memcheck test cases for cs, cds, and csg - - The fix for bug 429864 - "s390x: C++ atomic test_and_set yields - false-positive memcheck diagnostics" changes the memcheck behavior at - various compare-and-swap instructions. The comparison between the old and - expected value now always yields a defined result, even if the input - values are (partially) undefined. However, some existing test cases - explicitly verify that memcheck complains about the use of uninitialised - values here. These test cases are no longer valid. Remove them. - -diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am -index 67ae8c293..e4e69eb38 100644 ---- a/memcheck/tests/s390x/Makefile.am -+++ b/memcheck/tests/s390x/Makefile.am -@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am - - dist_noinst_SCRIPTS = filter_stderr - --INSN_TESTS = cs csg cds cdsg cu21 cu42 ltgjhe -+INSN_TESTS = cdsg cu21 cu42 ltgjhe - - check_PROGRAMS = $(INSN_TESTS) - -@@ -14,7 +14,3 @@ EXTRA_DIST = \ - AM_CFLAGS += @FLAG_M64@ - AM_CXXFLAGS += @FLAG_M64@ - AM_CCASFLAGS += @FLAG_M64@ -- --cs_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ --csg_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ --cds_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@ -diff --git a/memcheck/tests/s390x/cds.c b/memcheck/tests/s390x/cds.c -deleted file mode 100644 -index ec5c533e0..000000000 ---- a/memcheck/tests/s390x/cds.c -+++ /dev/null -@@ -1,82 +0,0 @@ --#include --#include -- --typedef struct { -- uint64_t high; -- uint64_t low; --} quad_word; -- --void --test(quad_word op1_init, uint64_t op2_init, quad_word op3_init) --{ -- int cc; // unused -- quad_word op1 = op1_init; -- uint64_t op2 = op2_init; -- quad_word op3 = op3_init; -- -- __asm__ volatile ( -- "lmg %%r0,%%r1,%1\n\t" -- "lmg %%r2,%%r3,%3\n\t" -- "cds %%r0,%%r2,%2\n\t" // cds 1st,3rd,2nd -- "stmg %%r0,%%r1,%1\n" // store r0,r1 to op1 -- "stmg %%r2,%%r3,%3\n" // store r2,r3 to op3 -- : "=d" (cc), "+QS" (op1), "+QS" (op2), "+QS" (op3) -- : -- : "r0", "r1", "r2", "r3", "cc"); -- --} -- --// Return a quad-word that only bits low[32:63] are undefined --quad_word --make_undefined(void) --{ -- quad_word val; -- -- val.high = 0; -- val.low |= 0xFFFFFFFF00000000ull; -- -- return val; --} -- --void op1_undefined(void) --{ -- quad_word op1, op3; -- uint64_t op2; -- -- // op1 undefined -- op1 = make_undefined(); -- op2 = 42; -- op3.high = op3.low = 0xdeadbeefdeadbabeull; -- test(op1, op2, op3); // complaint --} -- --void op2_undefined(void) --{ -- quad_word op1, op3; -- uint64_t op2; -- -- op1.high = op1.low = 42; -- // op2 undefined -- op3.high = op3.low = 0xdeadbeefdeadbabeull; -- test(op1, op2, op3); // complaint --} -- --void op3_undefined(void) --{ -- quad_word op1, op3; -- uint64_t op2; -- -- op1.high = op1.low = 42; -- op2 = 100; -- op3 = make_undefined(); -- test(op1, op2, op3); // no complaint; op3 is just copied around --} -- --int main () --{ -- op1_undefined(); -- op2_undefined(); -- op3_undefined(); -- -- return 0; --} -diff --git a/memcheck/tests/s390x/cds.stderr.exp b/memcheck/tests/s390x/cds.stderr.exp -deleted file mode 100644 -index e72de94c8..000000000 ---- a/memcheck/tests/s390x/cds.stderr.exp -+++ /dev/null -@@ -1,10 +0,0 @@ --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (cds.c:17) -- by 0x........: op1_undefined (cds.c:50) -- by 0x........: main (cds.c:77) -- --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (cds.c:17) -- by 0x........: op2_undefined (cds.c:61) -- by 0x........: main (cds.c:78) -- -diff --git a/memcheck/tests/s390x/cds.stdout.exp b/memcheck/tests/s390x/cds.stdout.exp -deleted file mode 100644 -index e69de29bb..000000000 -diff --git a/memcheck/tests/s390x/cds.vgtest b/memcheck/tests/s390x/cds.vgtest -deleted file mode 100644 -index 5195887e2..000000000 ---- a/memcheck/tests/s390x/cds.vgtest -+++ /dev/null -@@ -1,2 +0,0 @@ --prog: cds --vgopts: -q -diff --git a/memcheck/tests/s390x/cs.c b/memcheck/tests/s390x/cs.c -deleted file mode 100644 -index 9a298cef9..000000000 ---- a/memcheck/tests/s390x/cs.c -+++ /dev/null -@@ -1,32 +0,0 @@ --#include --#include --#include -- --void --test(int32_t op1_init, int32_t op2_init, int32_t op3_init) --{ -- register int32_t op1 asm("8") = op1_init; -- register int32_t op3 asm("9") = op3_init; -- -- int32_t op2 = op2_init; -- int cc = 1; -- -- __asm__ volatile ( -- "cs 8,9,%1\n\t" -- "ipm %0\n\t" -- "srl %0,28\n\t" -- : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3) -- : -- : "cc"); --} -- --int main () --{ -- int op1, op2, op3; -- -- test(op1, 0x10000000, 0x12345678); // complaint -- test(0x10000000, op2, 0x12345678); // complaint -- test(0x10000000, 0x01000000, op3); // no complaint -- -- return 0; --} -diff --git a/memcheck/tests/s390x/cs.stderr.exp b/memcheck/tests/s390x/cs.stderr.exp -deleted file mode 100644 -index e45dc99cd..000000000 ---- a/memcheck/tests/s390x/cs.stderr.exp -+++ /dev/null -@@ -1,8 +0,0 @@ --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (cs.c:14) -- by 0x........: main (cs.c:27) -- --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (cs.c:14) -- by 0x........: main (cs.c:28) -- -diff --git a/memcheck/tests/s390x/cs.stdout.exp b/memcheck/tests/s390x/cs.stdout.exp -deleted file mode 100644 -index e69de29bb..000000000 -diff --git a/memcheck/tests/s390x/cs.vgtest b/memcheck/tests/s390x/cs.vgtest -deleted file mode 100644 -index 323cce80c..000000000 ---- a/memcheck/tests/s390x/cs.vgtest -+++ /dev/null -@@ -1,2 +0,0 @@ --prog: cs --vgopts: -q -diff --git a/memcheck/tests/s390x/csg.c b/memcheck/tests/s390x/csg.c -deleted file mode 100644 -index 7f9d8c88e..000000000 ---- a/memcheck/tests/s390x/csg.c -+++ /dev/null -@@ -1,32 +0,0 @@ --#include --#include --#include -- --void --test(int64_t op1_init, int64_t op2_init, int64_t op3_init) --{ -- register int64_t op1 asm("8") = op1_init; -- register int64_t op3 asm("9") = op3_init; -- -- int64_t op2 = op2_init; -- int cc = 1; -- -- __asm__ volatile ( -- "csg 8,9,%1\n\t" -- "ipm %0\n\t" -- "srl %0,28\n\t" -- : "=d" (cc), "+Q" (op2), "+d"(op1), "+d"(op3) -- : -- : "cc"); --} -- --int main () --{ -- int64_t op1, op2, op3; -- -- test(op1, 0x1000000000000000ull, 0x1234567887654321ull); // complaint -- test(0x1000000000000000ull, op2, 0x1234567887654321ull); // complaint -- test(0x1000000000000000ull, 0x1000000000000000ull, op3); // no complaint -- -- return 0; --} -diff --git a/memcheck/tests/s390x/csg.stderr.exp b/memcheck/tests/s390x/csg.stderr.exp -deleted file mode 100644 -index fda2021ce..000000000 ---- a/memcheck/tests/s390x/csg.stderr.exp -+++ /dev/null -@@ -1,8 +0,0 @@ --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (csg.c:14) -- by 0x........: main (csg.c:27) -- --Conditional jump or move depends on uninitialised value(s) -- at 0x........: test (csg.c:14) -- by 0x........: main (csg.c:28) -- -diff --git a/memcheck/tests/s390x/csg.stdout.exp b/memcheck/tests/s390x/csg.stdout.exp -deleted file mode 100644 -index e69de29bb..000000000 -diff --git a/memcheck/tests/s390x/csg.vgtest b/memcheck/tests/s390x/csg.vgtest -deleted file mode 100644 -index 6de75c1d6..000000000 ---- a/memcheck/tests/s390x/csg.vgtest -+++ /dev/null -@@ -1,2 +0,0 @@ --prog: csg --vgopts: -q - -commit 18ddcc47c951427efd3b790ba2481159b9bd1598 -Author: Andreas Arnez -Date: Wed Apr 7 16:48:29 2021 +0200 - - s390x: Support "expensive" comparisons Iop_ExpCmpNE32/64 - - Add support for Iop_ExpCmpNE32 and Iop_ExpCmpNE64 in the s390x instruction - selector. Handle them exactly like the "inexpensive" variants Iop_CmpNE32 - and Iop_CmpNE64. - -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 2000ec224..5f79280c0 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -3611,6 +3611,8 @@ s390_isel_cc(ISelEnv *env, IRExpr *cond) - - case Iop_CmpNE32: - case Iop_CmpNE64: -+ case Iop_ExpCmpNE32: -+ case Iop_ExpCmpNE64: - case Iop_CasCmpNE32: - case Iop_CasCmpNE64: - result = S390_CC_NE; - -commit 5db3f929c43bf46f4707178706cfe90f43acdd19 -Author: Andreas Arnez -Date: Wed Apr 7 12:30:20 2021 +0200 - - s390x: Add convenience function mkV128() - - Provide mkV128() as a short-hand notation for creating a vector constant from - a bit pattern, similar to other such functions like mkU64(). - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 339377007..7d54cb551 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -376,6 +376,13 @@ mkU64(ULong value) - return IRExpr_Const(IRConst_U64(value)); - } - -+/* Create an expression node for a 128-bit vector constant */ -+static __inline__ IRExpr * -+mkV128(UShort value) -+{ -+ return IRExpr_Const(IRConst_V128(value)); -+} -+ - /* Create an expression node for a 32-bit floating point constant - whose value is given by a bit pattern. */ - static __inline__ IRExpr * -@@ -16249,7 +16256,7 @@ s390_irgen_VLGV(UChar r1, IRTemp op2addr, UChar v3, UChar m4) - static const HChar * - s390_irgen_VGBM(UChar v1, UShort i2, UChar m3 __attribute__((unused))) - { -- put_vr_qw(v1, IRExpr_Const(IRConst_V128(i2))); -+ put_vr_qw(v1, mkV128(i2)); - - return "vgbm"; - } -@@ -18160,11 +18167,11 @@ s390_irgen_VSUM(UChar v1, UChar v2, UChar v3, UChar m4) - switch(type) { - case Ity_I8: - sum = unop(Iop_PwAddL16Ux8, unop(Iop_PwAddL8Ux16, get_vr_qw(v2))); -- mask = IRExpr_Const(IRConst_V128(0b0001000100010001)); -+ mask = mkV128(0b0001000100010001); - break; - case Ity_I16: - sum = unop(Iop_PwAddL16Ux8, get_vr_qw(v2)); -- mask = IRExpr_Const(IRConst_V128(0b0011001100110011)); -+ mask = mkV128(0b0011001100110011); - break; - default: - vpanic("s390_irgen_VSUM: invalid type "); -@@ -18185,11 +18192,11 @@ s390_irgen_VSUMG(UChar v1, UChar v2, UChar v3, UChar m4) - switch(type) { - case Ity_I16: - sum = unop(Iop_PwAddL32Ux4, unop(Iop_PwAddL16Ux8, get_vr_qw(v2))); -- mask = IRExpr_Const(IRConst_V128(0b0000001100000011)); -+ mask = mkV128(0b0000001100000011); - break; - case Ity_I32: - sum = unop(Iop_PwAddL32Ux4, get_vr_qw(v2)); -- mask = IRExpr_Const(IRConst_V128(0b0000111100001111)); -+ mask = mkV128(0b0000111100001111); - break; - default: - vpanic("s390_irgen_VSUMG: invalid type "); -@@ -18210,11 +18217,11 @@ s390_irgen_VSUMQ(UChar v1, UChar v2, UChar v3, UChar m4) - switch(type) { - case Ity_I32: - sum = unop(Iop_PwAddL64Ux2, unop(Iop_PwAddL32Ux4, get_vr_qw(v2))); -- mask = IRExpr_Const(IRConst_V128(0b0000000000001111)); -+ mask = mkV128(0b0000000000001111); - break; - case Ity_I64: - sum = unop(Iop_PwAddL64Ux2, get_vr_qw(v2)); -- mask = IRExpr_Const(IRConst_V128(0b0000000011111111)); -+ mask = mkV128(0b0000000011111111); - break; - default: - vpanic("s390_irgen_VSUMQ: invalid type "); -@@ -18943,8 +18950,8 @@ s390_irgen_VFCx(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6, - assign(cond, binop(Iop_CmpEQ32, mkexpr(result), mkU32(cmp))); - } - put_vr_qw(v1, mkite(mkexpr(cond), -- IRExpr_Const(IRConst_V128(0xffff)), -- IRExpr_Const(IRConst_V128(0)))); -+ mkV128(0xffff), -+ mkV128(0))); - if (s390_vr_is_cs_set(m6)) { - IRTemp cc = newTemp(Ity_I64); - assign(cc, mkite(mkexpr(cond), mkU64(0), mkU64(3))); - -commit e78bd78d3043729033b426218ab8c6dae9c51e96 -Author: Andreas Arnez -Date: Thu Mar 18 18:01:10 2021 +0100 - - Bug 434296 - s390x: Rework IR conversion of VSTRC, VFAE, and VFEE - - The z/Architecture instructions "vector string range compare" (VSTRC), - "vector find any element equal" (VFAE), and "vector find element - equal" (VFEE) are each implemented with a dirty helper that executes the - instruction. Unfortunately this approach leads to memcheck false - positives, because these instructions may yield a defined result even if - parts of the input vectors are undefined. There are multiple ways this - can happen: Wherever the flags in the fourth operand to VSTRC indicate - "match always" or "match never", the corresponding elements in the third - operand don't affect the result. The same is true for the elements - following the first zero-element in the second operand if the ZS flag is - set, or for the elements following the first matching element, if any. - - Re-implement the instructions without dirty helpers and transform into - lengthy IR instead. - -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index 905429015..49b6cd5dd 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -265,11 +265,8 @@ typedef enum { - S390_VEC_OP_INVALID = 0, - S390_VEC_OP_VPKS, - S390_VEC_OP_VPKLS, -- S390_VEC_OP_VFAE, -- S390_VEC_OP_VFEE, - S390_VEC_OP_VFENE, - S390_VEC_OP_VISTR, -- S390_VEC_OP_VSTRC, - S390_VEC_OP_VCEQ, - S390_VEC_OP_VTM, - S390_VEC_OP_VGFM, -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index b71b621ae..63d2e8ce5 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -2538,11 +2538,8 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - {0x00, 0x00}, /* invalid */ - [S390_VEC_OP_VPKS] = {0xe7, 0x97}, - [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, -- [S390_VEC_OP_VFAE] = {0xe7, 0x82}, -- [S390_VEC_OP_VFEE] = {0xe7, 0x80}, - [S390_VEC_OP_VFENE] = {0xe7, 0x81}, - [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, -- [S390_VEC_OP_VSTRC] = {0xe7, 0x8a}, - [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, - [S390_VEC_OP_VTM] = {0xe7, 0xd8}, - [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, -@@ -2630,8 +2627,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - - case S390_VEC_OP_VPKS: - case S390_VEC_OP_VPKLS: -- case S390_VEC_OP_VFAE: -- case S390_VEC_OP_VFEE: - case S390_VEC_OP_VFENE: - case S390_VEC_OP_VCEQ: - case S390_VEC_OP_VGFM: -@@ -2645,7 +2640,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - the_insn.VRR.m5 = d->m5; - break; - -- case S390_VEC_OP_VSTRC: - case S390_VEC_OP_VGFMA: - case S390_VEC_OP_VMAH: - case S390_VEC_OP_VMALH: -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 7d54cb551..26a947813 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -17156,90 +17156,205 @@ s390_irgen_PPNO(UChar r1, UChar r2) - return "ppno"; - } - --static const HChar * --s390_irgen_VFAE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) --{ -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -+enum s390_VStrX { -+ s390_VStrX_VSTRC, -+ s390_VStrX_VFAE, -+ s390_VStrX_VFEE -+}; - -- /* Check for specification exception */ -- vassert(m4 < 3); -+#define S390_VEC_OP3(m, op0, op1, op2) \ -+ (m) == 0 ? op0 : (m) == 1 ? op1 : (m) == 2 ? op2 : Iop_INVALID; - -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFAE; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.m4 = m4; -- details.m5 = m5; -- -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+/* Helper function for transforming VSTRC, VFAE, or VFEE. These instructions -+ share much of the same logic. */ -+static void -+s390_irgen_VStrX(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, -+ UChar m6, enum s390_VStrX which_insn) -+{ -+ IRTemp op2 = newTemp(Ity_V128); -+ IRTemp op3 = newTemp(Ity_V128); -+ IRExpr* tmp; -+ IRExpr* match = NULL; -+ UChar bitwidth = 8 << m5; -+ UChar n_elem = 16 >> m5; -+ IROp sub_op = S390_VEC_OP3(m5, Iop_Sub8x16, Iop_Sub16x8, Iop_Sub32x4); -+ IROp sar_op = S390_VEC_OP3(m5, Iop_SarN8x16, Iop_SarN16x8, Iop_SarN32x4); -+ IROp shl_op = S390_VEC_OP3(m5, Iop_ShlN8x16, Iop_ShlN16x8, Iop_ShlN32x4); -+ IROp dup_op = S390_VEC_OP3(m5, Iop_Dup8x16, Iop_Dup16x8, Iop_Dup32x4); -+ IROp cmpeq_op = S390_VEC_OP3(m5, Iop_CmpEQ8x16, -+ Iop_CmpEQ16x8, Iop_CmpEQ32x4); -+ IROp cmpgt_op = S390_VEC_OP3(m5, Iop_CmpGT8Ux16, -+ Iop_CmpGT16Ux8, Iop_CmpGT32Ux4); -+ IROp getelem_op = S390_VEC_OP3(m5, Iop_GetElem8x16, -+ Iop_GetElem16x8, Iop_GetElem32x4); -+ -+ assign(op2, get_vr_qw(v2)); -+ assign(op3, get_vr_qw(v3)); -+ -+ switch (which_insn) { -+ -+ case s390_VStrX_VSTRC: { -+ IRTemp op4 = newTemp(Ity_V128); -+ assign(op4, get_vr_qw(v4)); -+ -+ /* Mask off insignificant range boundaries from op3, i.e., all those for -+ which the corresponding field in op4 has all or no bits set ("match -+ always" / "match never"). */ -+ IRTemp bounds = newTemp(Ity_V128); -+ tmp = unop(Iop_NotV128, -+ binop(cmpeq_op, mkV128(0), -+ binop(sar_op, -+ binop(sub_op, -+ binop(sar_op, mkexpr(op4), -+ mkU8(bitwidth - 3)), -+ mkV128(-1)), -+ mkU8(1)))); -+ assign(bounds, binop(Iop_AndV128, mkexpr(op3), tmp)); -+ -+ IRTemp flags_eq = newTemp(Ity_V128); -+ IRTemp flags_lt = newTemp(Ity_V128); -+ IRTemp flags_gt = newTemp(Ity_V128); -+ assign(flags_eq, binop(sar_op, mkexpr(op4), mkU8(bitwidth - 1))); -+ assign(flags_lt, binop(sar_op, binop(shl_op, mkexpr(op4), mkU8(1)), -+ mkU8(bitwidth - 1))); -+ assign(flags_gt, binop(sar_op, binop(shl_op, mkexpr(op4), mkU8(2)), -+ mkU8(bitwidth - 1))); -+ -+ for (UChar idx = 0; idx < n_elem; idx += 2) { -+ /* Match according to the even/odd pairs in op3 and op4 at idx */ -+ IRTemp part[2]; -+ -+ for (UChar j = 0; j < 2; j++) { -+ IRTemp a = newTemp(Ity_V128); -+ assign(a, unop(dup_op, -+ binop(getelem_op, mkexpr(bounds), mkU8(idx + j)))); -+ -+ IRExpr* m[] = { -+ binop(cmpeq_op, mkexpr(op2), mkexpr(a)), -+ binop(cmpgt_op, mkexpr(a), mkexpr(op2)), -+ binop(cmpgt_op, mkexpr(op2), mkexpr(a)) -+ }; -+ IRExpr* f[] = { -+ unop(dup_op, binop(getelem_op, mkexpr(flags_eq), mkU8(idx + j))), -+ unop(dup_op, binop(getelem_op, mkexpr(flags_lt), mkU8(idx + j))), -+ unop(dup_op, binop(getelem_op, mkexpr(flags_gt), mkU8(idx + j))) -+ }; -+ part[j] = newTemp(Ity_V128); -+ assign(part[j], binop(Iop_OrV128, -+ binop(Iop_OrV128, -+ binop(Iop_AndV128, f[0], m[0]), -+ binop(Iop_AndV128, f[1], m[1])), -+ binop(Iop_AndV128, f[2], m[2]))); -+ } -+ tmp = binop(Iop_AndV128, mkexpr(part[0]), mkexpr(part[1])); -+ match = idx == 0 ? tmp : binop(Iop_OrV128, match, tmp); -+ } -+ break; -+ } - -- d->nFxState = 3; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = sizeof(V128); -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = sizeof(V128); -- d->fxState[2].fx = Ifx_Write; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -+ case s390_VStrX_VFAE: -+ for (UChar idx = 0; idx < n_elem; idx++) { -+ IRTemp a = newTemp(Ity_V128); -+ assign(a, binop(cmpeq_op, mkexpr(op2), -+ unop(dup_op, -+ binop(getelem_op, mkexpr(op3), mkU8(idx))))); -+ match = idx == 0 ? mkexpr(a) : binop(Iop_OrV128, match, mkexpr(a)); -+ } -+ break; - -- stmt(IRStmt_Dirty(d)); -+ case s390_VStrX_VFEE: -+ match = binop(cmpeq_op, mkexpr(op2), mkexpr(op3)); -+ break; - -- if (s390_vr_is_cs_set(m5)) { -- s390_cc_set(cc); -+ default: -+ vpanic("s390_irgen_VStrX: unknown insn"); - } - -- return "vfae"; --} -+ /* Invert first intermediate result if requested */ -+ if (m6 & 8) -+ match = unop(Iop_NotV128, match); - --static const HChar * --s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) --{ -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -+ IRTemp inter1 = newTemp(Ity_V128); -+ IRTemp inter2 = newTemp(Ity_V128); -+ IRTemp accu = newTemp(Ity_V128); -+ assign(inter1, match); - -- /* Check for specification exception */ -- vassert(m4 < 3); -- vassert((m5 & 0b1100) == 0); -+ /* Determine second intermediate and accumulated result */ -+ if (s390_vr_is_zs_set(m6)) { -+ assign(inter2, binop(cmpeq_op, mkexpr(op2), mkV128(0))); -+ assign(accu, binop(Iop_OrV128, mkexpr(inter1), mkexpr(inter2))); -+ } else { -+ assign(inter2, mkV128(0)); -+ assign(accu, mkexpr(inter1)); -+ } - -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VFEE; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.m4 = m4; -- details.m5 = m5; -+ IRTemp accu0 = newTemp(Ity_I64); -+ IRTemp is_match0 = newTemp(Ity_I1); -+ IRTemp mismatch_bits = newTemp(Ity_I64); - -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+ assign(accu0, unop(Iop_V128HIto64, mkexpr(accu))); -+ assign(is_match0, binop(Iop_ExpCmpNE64, mkexpr(accu0), mkU64(0))); -+ assign(mismatch_bits, unop(Iop_ClzNat64, -+ mkite(mkexpr(is_match0), mkexpr(accu0), -+ unop(Iop_V128to64, mkexpr(accu))))); - -- d->nFxState = 3; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = sizeof(V128); -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = sizeof(V128); -- d->fxState[2].fx = Ifx_Write; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -+ if (m6 & 4) { -+ put_vr_qw(v1, mkexpr(inter1)); -+ } else { -+ /* Determine byte position of first match */ -+ tmp = binop(Iop_Add64, -+ binop(Iop_Shr64, mkexpr(mismatch_bits), mkU8(3)), -+ mkite(mkexpr(is_match0), mkU64(0), mkU64(8))); -+ put_vr_qw(v1, binop(Iop_64HLtoV128, tmp, mkU64(0))); -+ } - -- stmt(IRStmt_Dirty(d)); -+ if (s390_vr_is_cs_set(m6)) { -+ /* Set condition code depending on... -+ zero found -+ n y -+ +------ -+ match n | 3 0 -+ found y | 1 2 */ - -- if (s390_vr_is_cs_set(m5)) { -+ IRTemp cc = newTemp(Ity_I64); -+ -+ tmp = binop(Iop_Shr64, -+ mkite(mkexpr(is_match0), -+ unop(Iop_V128HIto64, mkexpr(inter1)), -+ unop(Iop_V128to64, mkexpr(inter1))), -+ unop(Iop_64to8, -+ binop(Iop_Sub64, mkU64(63), mkexpr(mismatch_bits)))); -+ tmp = binop(Iop_Shl64, tmp, mkU8(1)); -+ if (s390_vr_is_zs_set(m6)) { -+ tmp = binop(Iop_Xor64, tmp, -+ mkite(binop(Iop_ExpCmpNE64, mkU64(0), -+ binop(Iop_Or64, -+ unop(Iop_V128HIto64, mkexpr(inter2)), -+ unop(Iop_V128to64, mkexpr(inter2)))), -+ mkU64(0), -+ mkU64(3))); -+ } else { -+ tmp = binop(Iop_Xor64, tmp, mkU64(3)); -+ } -+ assign(cc, tmp); - s390_cc_set(cc); - } -+ dis_res->hint = Dis_HintVerbose; -+} - -+static const HChar * -+s390_irgen_VFAE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) -+{ -+ s390_insn_assert("vfae", m4 <= 2); -+ s390_irgen_VStrX(v1, v2, v3, 255, m4, m5, s390_VStrX_VFAE); -+ return "vfae"; -+} -+ -+static const HChar * -+s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) -+{ -+ s390_insn_assert("vfee", m4 < 3 && m5 == (m5 & 3)); -+ s390_irgen_VStrX(v1, v2, v3, 255, m4, m5, s390_VStrX_VFEE); - return "vfee"; - } - -@@ -17406,47 +17521,8 @@ s390_irgen_VISTR(UChar v1, UChar v2, UChar m3, UChar m5) - static const HChar * - s390_irgen_VSTRC(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) - { -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -- -- /* Check for specification exception */ -- vassert(m5 < 3); -- -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VSTRC; -- details.v1 = v1; -- details.v2 = v2; -- details.v3 = v3; -- details.v4 = v4; -- details.m4 = m5; -- details.m5 = m6; -- -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -- -- d->nFxState = 4; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = sizeof(V128); -- d->fxState[1].fx = Ifx_Read; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v3 * sizeof(V128); -- d->fxState[1].size = sizeof(V128); -- d->fxState[2].fx = Ifx_Read; -- d->fxState[2].offset = S390X_GUEST_OFFSET(guest_v0) + v4 * sizeof(V128); -- d->fxState[2].size = sizeof(V128); -- d->fxState[3].fx = Ifx_Write; -- d->fxState[3].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[3].size = sizeof(V128); -- -- stmt(IRStmt_Dirty(d)); -- -- if (s390_vr_is_cs_set(m6)) { -- s390_cc_set(cc); -- } -- -+ s390_insn_assert("vstrc", m5 <= 2); -+ s390_irgen_VStrX(v1, v2, v3, v4, m5, m6, s390_VStrX_VSTRC); - return "vstrc"; - } - - -commit 4f17a067c4f8245c05611d6e8aa36e8841bab376 -Author: Andreas Arnez -Date: Tue Mar 2 14:12:29 2021 +0100 - - Bug 434296 - s390x: Rework IR conversion of VFENE - - So far the z/Architecture instruction "vector find element not - equal" (VFENE) is transformed to a loop. This can cause spurious - "conditional jump or move depends on uninitialised value(s)" messages by - memcheck. Re-implement without a loop. - -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index 49b6cd5dd..caec3108e 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -265,7 +265,6 @@ typedef enum { - S390_VEC_OP_INVALID = 0, - S390_VEC_OP_VPKS, - S390_VEC_OP_VPKLS, -- S390_VEC_OP_VFENE, - S390_VEC_OP_VISTR, - S390_VEC_OP_VCEQ, - S390_VEC_OP_VTM, -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 63d2e8ce5..2188ce5c1 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -2538,7 +2538,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - {0x00, 0x00}, /* invalid */ - [S390_VEC_OP_VPKS] = {0xe7, 0x97}, - [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, -- [S390_VEC_OP_VFENE] = {0xe7, 0x81}, - [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, - [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, - [S390_VEC_OP_VTM] = {0xe7, 0xd8}, -@@ -2627,7 +2626,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - - case S390_VEC_OP_VPKS: - case S390_VEC_OP_VPKLS: -- case S390_VEC_OP_VFENE: - case S390_VEC_OP_VCEQ: - case S390_VEC_OP_VGFM: - case S390_VEC_OP_VCH: -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 26a947813..c8dc3ec18 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -17361,120 +17361,86 @@ s390_irgen_VFEE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - static const HChar * - s390_irgen_VFENE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - { -- const Bool negateComparison = True; -- const IRType type = s390_vr_get_type(m4); -+ s390_insn_assert("vfene", m4 < 3 && m5 == (m5 & 3)); - -- /* Check for specification exception */ -- vassert(m4 < 3); -- vassert((m5 & 0b1100) == 0); -- -- static const IROp elementGetters[] = { -- Iop_GetElem8x16, Iop_GetElem16x8, Iop_GetElem32x4 -+ static const IROp compare_op[3] = { -+ Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4 - }; -- IROp getter = elementGetters[m4]; -- -- static const IROp elementComparators[] = { -- Iop_CmpEQ8, Iop_CmpEQ16, Iop_CmpEQ32 -+ static const IROp abs_op[3] = { -+ Iop_Abs8x16, Iop_Abs16x8, Iop_Abs32x4 - }; -- IROp comparator = elementComparators[m4]; -- -- static const IROp resultConverter[] = {Iop_64to8, Iop_64to16, Iop_64to32}; -- IROp converter = resultConverter[m4]; -- -- IRTemp isZeroElem; -- -- IRTemp counter = newTemp(Ity_I64); -- assign(counter, get_counter_dw0()); -- -- IRTemp arg1 = newTemp(type); -- assign(arg1, binop(getter, get_vr_qw(v2), unop(Iop_64to8, mkexpr(counter)))); -- IRTemp arg2 = newTemp(type); -- assign(arg2, binop(getter, get_vr_qw(v3), unop(Iop_64to8, mkexpr(counter)))); -+ IRTemp op2 = newTemp(Ity_V128); -+ IRTemp op3 = newTemp(Ity_V128); -+ IRTemp op2zero = newTemp(Ity_V128); -+ IRTemp diff = newTemp(Ity_V128); -+ IRTemp diff0 = newTemp(Ity_I64); -+ IRTemp neq0 = newTemp(Ity_I1); -+ IRTemp samebits = newTemp(Ity_I64); -+ IRExpr* tmp; - -- IRTemp isGoodPair = newTemp(Ity_I1); -- if(negateComparison) { -- assign(isGoodPair, unop(Iop_Not1, binop(comparator, mkexpr(arg1), -- mkexpr(arg2)))); -- } else { -- assign(isGoodPair, binop(comparator, mkexpr(arg1), mkexpr(arg2))); -- } -+ assign(op2, get_vr_qw(v2)); -+ assign(op3, get_vr_qw(v3)); - -- if(s390_vr_is_zs_set(m5)) { -- isZeroElem = newTemp(Ity_I1); -- assign(isZeroElem, binop(comparator, mkexpr(arg1), -- unop(converter, mkU64(0)))); -+ tmp = mkV128(0); -+ if (s390_vr_is_zs_set(m5)) { -+ tmp = binop(compare_op[m4], mkexpr(op2), tmp); -+ if (s390_vr_is_cs_set(m5) && v3 != v2) { -+ /* Count leading equal bits in the terminating element too */ -+ tmp = unop(abs_op[m4], tmp); -+ } -+ assign(op2zero, tmp); -+ tmp = mkexpr(op2zero); - } -- -- static const UChar invalidIndices[] = {16, 8, 4}; -- const UChar invalidIndex = invalidIndices[m4]; -- IRTemp endOfVectorIsReached = newTemp(Ity_I1); -- assign(endOfVectorIsReached, binop(Iop_CmpEQ64, mkexpr(counter), -- mkU64(invalidIndex))); -- -- put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); -- IRExpr* shouldBreak = binop(Iop_Or32, -- unop(Iop_1Uto32, mkexpr(isGoodPair)), -- unop(Iop_1Uto32, mkexpr(endOfVectorIsReached)) -- ); -- if(s390_vr_is_zs_set(m5)) { -- shouldBreak = binop(Iop_Or32, -- shouldBreak, -- unop(Iop_1Uto32, mkexpr(isZeroElem))); -- } -- iterate_if(binop(Iop_CmpEQ32, shouldBreak, mkU32(0))); -- -- IRExpr* foundIndex = binop(Iop_Sub64, get_counter_dw0(), mkU64(1)); -- if(m4 > 0) { -- /* We should return index of byte but we found index of element in -- general case. -- if byte elem (m4 == 0) then indexOfByte = indexOfElement -- if halfword elem (m4 == 1) then indexOfByte = 2 * indexOfElement -- = indexOfElement << 1 -- if word elem (m4 == 2) then indexOfByte = 4 * indexOfElement -- = indexOfElement << 2 -- */ -- foundIndex = binop(Iop_Shl64, foundIndex, mkU8(m4)); -+ if (v3 != v2) { -+ tmp = binop(Iop_XorV128, mkexpr(op2), mkexpr(op3)); -+ if (s390_vr_is_zs_set(m5)) -+ tmp = binop(Iop_OrV128, tmp, mkexpr(op2zero)); - } - -- IRTemp result = newTemp(Ity_I64); -- assign(result, mkite(mkexpr(endOfVectorIsReached), -- mkU64(16), -- foundIndex)); -- put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(result), mkU64(0))); -+ assign(diff, tmp); -+ assign(diff0, unop(Iop_V128HIto64, mkexpr(diff))); -+ assign(neq0, binop(Iop_ExpCmpNE64, mkexpr(diff0), mkU64(0))); -+ assign(samebits, unop(Iop_ClzNat64, -+ mkite(mkexpr(neq0), mkexpr(diff0), -+ unop(Iop_V128to64, mkexpr(diff))))); - -+ /* Determine the byte size of the initial equal-elements sequence */ -+ tmp = binop(Iop_Shr64, mkexpr(samebits), mkU8(m4 + 3)); -+ if (m4 != 0) -+ tmp = binop(Iop_Shl64, tmp, mkU8(m4)); -+ tmp = binop(Iop_Add64, tmp, mkite(mkexpr(neq0), mkU64(0), mkU64(8))); -+ put_vr_qw(v1, binop(Iop_64HLtoV128, tmp, mkU64(0))); - - if (s390_vr_is_cs_set(m5)) { -- static const IROp to64Converters[] = {Iop_8Uto64, Iop_16Uto64, Iop_32Uto64}; -- IROp to64Converter = to64Converters[m4]; -- -- IRExpr* arg1IsLessThanArg2 = binop(Iop_CmpLT64U, -- unop(to64Converter, mkexpr(arg1)), -- unop(to64Converter, mkexpr(arg2))); -- -- IRExpr* ccexp = mkite(binop(Iop_CmpEQ32, -- unop(Iop_1Uto32, mkexpr(isGoodPair)), -- mkU32(1)), -- mkite(arg1IsLessThanArg2, mkU64(1), mkU64(2)), -- mkU64(3)); -- -- if(s390_vr_is_zs_set(m5)) { -- IRExpr* arg2IsZero = binop(comparator, mkexpr(arg2), -- unop(converter, mkU64(0))); -- IRExpr* bothArgsAreZero = binop(Iop_And32, -- unop(Iop_1Uto32, mkexpr(isZeroElem)), -- unop(Iop_1Uto32, arg2IsZero)); -- ccexp = mkite(binop(Iop_CmpEQ32, bothArgsAreZero, mkU32(1)), -- mkU64(0), -- ccexp); -- } -+ /* Set condition code like follows -- -+ 0: operands equal up to and including zero element -+ 1: op2 < op3 2: op2 > op3 3: op2 = op3 */ - IRTemp cc = newTemp(Ity_I64); -- assign(cc, ccexp); -- -+ if (v3 == v2) { -+ tmp = mkU64(0); -+ } else { -+ IRTemp shift = newTemp(Ity_I8); -+ IRExpr* op2half = mkite(mkexpr(neq0), -+ unop(Iop_V128HIto64, mkexpr(op2)), -+ unop(Iop_V128to64, mkexpr(op2))); -+ IRExpr* op3half = mkite(mkexpr(neq0), -+ unop(Iop_V128HIto64, mkexpr(op3)), -+ unop(Iop_V128to64, mkexpr(op3))); -+ assign(shift, unop(Iop_64to8, -+ binop(Iop_Sub64, mkU64(63), mkexpr(samebits)))); -+ tmp = binop(Iop_Or64, -+ binop(Iop_Shl64, -+ binop(Iop_And64, mkU64(1), -+ binop(Iop_Shr64, op2half, mkexpr(shift))), -+ mkU8(1)), -+ binop(Iop_And64, mkU64(1), -+ binop(Iop_Shr64, op3half, mkexpr(shift)))); -+ } -+ assign(cc, mkite(binop(Iop_CmpEQ64, mkexpr(samebits), mkU64(64)), -+ mkU64(3), tmp)); - s390_cc_set(cc); - } -- -- -- put_counter_dw0(mkU64(0)); -+ dis_res->hint = Dis_HintVerbose; - return "vfene"; - } - - -commit 9bd78ebd8bb5cd4ebb3f081ceba46836cc485551 -Author: Andreas Arnez -Date: Tue Apr 27 20:13:26 2021 +0200 - - Bug 434296 - s390x: Rework IR conversion of VISTR - - The z/Architecture instruction VISTR is currently transformed to a dirty - helper that executes the instruction. This can cause false positives with - memcheck if the input string contains undefined characters after the - string terminator. Implement without a dirty helper and emulate the - instruction instead. - -diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h -index caec3108e..24f3798c1 100644 ---- a/VEX/priv/guest_s390_defs.h -+++ b/VEX/priv/guest_s390_defs.h -@@ -265,7 +265,6 @@ typedef enum { - S390_VEC_OP_INVALID = 0, - S390_VEC_OP_VPKS, - S390_VEC_OP_VPKLS, -- S390_VEC_OP_VISTR, - S390_VEC_OP_VCEQ, - S390_VEC_OP_VTM, - S390_VEC_OP_VGFM, -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 2188ce5c1..1e04f601a 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -2538,7 +2538,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - {0x00, 0x00}, /* invalid */ - [S390_VEC_OP_VPKS] = {0xe7, 0x97}, - [S390_VEC_OP_VPKLS] = {0xe7, 0x95}, -- [S390_VEC_OP_VISTR] = {0xe7, 0x5c}, - [S390_VEC_OP_VCEQ] = {0xe7, 0xf8}, - [S390_VEC_OP_VTM] = {0xe7, 0xd8}, - [S390_VEC_OP_VGFM] = {0xe7, 0xb4}, -@@ -2610,14 +2609,6 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state, - the_insn.VRR.op2 = opcodes[d->op][1]; - - switch(d->op) { -- case S390_VEC_OP_VISTR: -- the_insn.VRR.v1 = 1; -- the_insn.VRR.v2 = 2; -- the_insn.VRR.rxb = 0b1100; -- the_insn.VRR.m4 = d->m4; -- the_insn.VRR.m5 = d->m5; -- break; -- - case S390_VEC_OP_VTM: - the_insn.VRR.v1 = 2; - the_insn.VRR.v2 = 3; -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index c8dc3ec18..dfea54259 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -17447,40 +17447,34 @@ s390_irgen_VFENE(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5) - static const HChar * - s390_irgen_VISTR(UChar v1, UChar v2, UChar m3, UChar m5) - { -- IRDirty* d; -- IRTemp cc = newTemp(Ity_I64); -- -- /* Check for specification exception */ -- vassert(m3 < 3); -- vassert((m5 & 0b1110) == 0); -+ s390_insn_assert("vistr", m3 < 3 && m5 == (m5 & 1)); - -- s390x_vec_op_details_t details = { .serialized = 0ULL }; -- details.op = S390_VEC_OP_VISTR; -- details.v1 = v1; -- details.v2 = v2; -- details.m4 = m3; -- details.m5 = m5; -- -- d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op", -- &s390x_dirtyhelper_vec_op, -- mkIRExprVec_2(IRExpr_GSPTR(), -- mkU64(details.serialized))); -+ static const IROp compare_op[3] = { -+ Iop_CmpEQ8x16, Iop_CmpEQ16x8, Iop_CmpEQ32x4 -+ }; -+ IRExpr* t; -+ IRTemp op2 = newTemp(Ity_V128); -+ IRTemp op2term = newTemp(Ity_V128); -+ IRTemp mask = newTemp(Ity_V128); - -- d->nFxState = 2; -- vex_bzero(&d->fxState, sizeof(d->fxState)); -- d->fxState[0].fx = Ifx_Read; -- d->fxState[0].offset = S390X_GUEST_OFFSET(guest_v0) + v2 * sizeof(V128); -- d->fxState[0].size = sizeof(V128); -- d->fxState[1].fx = Ifx_Write; -- d->fxState[1].offset = S390X_GUEST_OFFSET(guest_v0) + v1 * sizeof(V128); -- d->fxState[1].size = sizeof(V128); -+ assign(op2, get_vr_qw(v2)); -+ assign(op2term, binop(compare_op[m3], mkexpr(op2), mkV128(0))); -+ t = mkexpr(op2term); - -- stmt(IRStmt_Dirty(d)); -+ for (UChar i = m3; i < 4; i++) { -+ IRTemp s = newTemp(Ity_V128); -+ assign(s, binop(Iop_OrV128, t, binop(Iop_ShrV128, t, mkU8(8 << i)))); -+ t = mkexpr(s); -+ } -+ assign(mask, unop(Iop_NotV128, t)); -+ put_vr_qw(v1, binop(Iop_AndV128, mkexpr(op2), mkexpr(mask))); - - if (s390_vr_is_cs_set(m5)) { -+ IRTemp cc = newTemp(Ity_I64); -+ assign(cc, binop(Iop_And64, mkU64(3), unop(Iop_V128to64, mkexpr(mask)))); - s390_cc_set(cc); - } -- -+ dis_res->hint = Dis_HintVerbose; - return "vistr"; - } - - -commit 32312d588b77c5b5b5a0145bb0cc6f795b447790 -Author: Andreas Arnez -Date: Fri Apr 16 12:44:44 2021 +0200 - - Bug 434296 - s390x: Add memcheck test cases for vector string insns - - Bug 434296 addresses memcheck false positives with the vector string - instructions VISTR, VSTRC, VFAE, VFEE, and VFENE. Add test cases that - verify the fix for that bug. Without the fix, memcheck yields many - complains with these tests, most of which are false positives. - -diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am -index e4e69eb38..d183841ef 100644 ---- a/memcheck/tests/s390x/Makefile.am -+++ b/memcheck/tests/s390x/Makefile.am -@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am - - dist_noinst_SCRIPTS = filter_stderr - --INSN_TESTS = cdsg cu21 cu42 ltgjhe -+INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr - - check_PROGRAMS = $(INSN_TESTS) - -@@ -14,3 +14,7 @@ EXTRA_DIST = \ - AM_CFLAGS += @FLAG_M64@ - AM_CXXFLAGS += @FLAG_M64@ - AM_CCASFLAGS += @FLAG_M64@ -+ -+vstrc_CFLAGS = $(AM_CFLAGS) -march=z13 -+vfae_CFLAGS = $(AM_CFLAGS) -march=z13 -+vistr_CFLAGS = $(AM_CFLAGS) -march=z13 -diff --git a/memcheck/tests/s390x/vfae.c b/memcheck/tests/s390x/vfae.c -new file mode 100644 -index 000000000..68781e7fb ---- /dev/null -+++ b/memcheck/tests/s390x/vfae.c -@@ -0,0 +1,72 @@ -+#include -+#include -+ -+#define VECTOR __attribute__ ((vector_size (16))) -+ -+typedef char VECTOR char_v; -+ -+volatile char tmp; -+static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; -+ -+static char_v to_char_vec(const char *str) -+{ -+ char_v v; -+ char buf[17]; -+ int len = strlen(str); -+ -+ memcpy(buf, str, (len && str[len - 1] == '~') ? len - 1 : len + 1); -+ v = *(char_v *) buf; -+ return v; -+} -+ -+#define GENERATE_TEST(mnem) \ -+static void test_ ## mnem ## _char(const char *str, const char *match, \ -+ int expect_res, int expect_cc) \ -+{ \ -+ int cc; \ -+ char_v v1; \ -+ char_v v2 = to_char_vec(str); \ -+ char_v v3 = to_char_vec(match); \ -+ \ -+ __asm__( \ -+ "cr 0,0\n\t" /* Clear CC */ \ -+ #mnem " %[v1],%[v2],%[v3],0,3\n\t" \ -+ "ipm %[cc]\n\t" \ -+ "srl %[cc],28" \ -+ : [v1] "=v" (v1), \ -+ [cc] "=d" (cc) \ -+ : [v2] "v" (v2), \ -+ [v3] "v" (v3) \ -+ : "cc"); \ -+ \ -+ tmp = hex_digit[v1[7] & 0x1f]; \ -+ if (expect_res >= 0 && v1[7] != expect_res) \ -+ printf("result %u != %d\n", v1[7], expect_res); \ -+ \ -+ tmp = hex_digit[cc & 0xf]; \ -+ if (expect_cc >= 0 && cc != expect_cc) \ -+ printf("CC %d != %d\n", cc, expect_cc); \ -+} -+ -+GENERATE_TEST(vfae) -+ -+GENERATE_TEST(vfee) -+ -+GENERATE_TEST(vfene) -+ -+int main() -+{ -+ test_vfae_char("not found", "................", 9, 0); -+ test_vfae_char("xy", "zzzzzzzzyyyyyyyy", 1, 2); -+ test_vfae_char("incomplete~", "xxxxxxxxxxxxxxxx", -1, -1); -+ -+ test_vfee_char("same char here", "..........here", 10, 2); -+ test_vfee_char("and here too ...", "_________t~", 9, 1); -+ test_vfee_char("equality!~", "========!!~", 8, -1); -+ -+ test_vfene_char("strings equal", "strings equal", 13, 0); -+ test_vfene_char(hex_digit, hex_digit, 16, 3); -+ test_vfene_char("undef~", "undefined", -1, -1); -+ test_vfene_char("active~", "actually ok", 3, 1); -+ return 0; -+} -diff --git a/memcheck/tests/s390x/vfae.stderr.exp b/memcheck/tests/s390x/vfae.stderr.exp -new file mode 100644 -index 000000000..8aad3c87f ---- /dev/null -+++ b/memcheck/tests/s390x/vfae.stderr.exp -@@ -0,0 +1,20 @@ -+Use of uninitialised value of size 8 -+ at 0x........: test_vfae_char (vfae.c:51) -+ by 0x........: main (vfae.c:61) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vfae_char (vfae.c:51) -+ by 0x........: main (vfae.c:61) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vfee_char (vfae.c:53) -+ by 0x........: main (vfae.c:65) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vfene_char (vfae.c:55) -+ by 0x........: main (vfae.c:69) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vfene_char (vfae.c:55) -+ by 0x........: main (vfae.c:69) -+ -diff --git a/memcheck/tests/s390x/vfae.stdout.exp b/memcheck/tests/s390x/vfae.stdout.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/s390x/vfae.vgtest b/memcheck/tests/s390x/vfae.vgtest -new file mode 100644 -index 000000000..ae36c22fe ---- /dev/null -+++ b/memcheck/tests/s390x/vfae.vgtest -@@ -0,0 +1,2 @@ -+prog: vfae -+vgopts: -q -diff --git a/memcheck/tests/s390x/vistr.c b/memcheck/tests/s390x/vistr.c -new file mode 100644 -index 000000000..7ed59b94b ---- /dev/null -+++ b/memcheck/tests/s390x/vistr.c -@@ -0,0 +1,76 @@ -+#include -+#include -+ -+#define VECTOR __attribute__ ((vector_size (16))) -+ -+typedef char VECTOR char_v; -+ -+volatile char tmp; -+static const char *hex_digit = "0123456789abcdef"; -+ -+static char_v to_char_vec(const char *str, char_v *maskp) -+{ -+ char buf[17]; -+ char_v v; -+ char_v mask = {0}; -+ -+ for (int i = 0; i < sizeof(buf); i++) { -+ char ch = str[i]; -+ if (ch == '\0') -+ break; -+ else if (ch == '$') { -+ buf[i] = '\0'; -+ mask[i] = -1; -+ } else if (ch != '~') { -+ buf[i] = ch; -+ mask[i] = -1; -+ } -+ } -+ v = *(char_v *) buf; -+ *maskp = mask; -+ return v; -+} -+ -+static void test_vistr_char(const char *str, const char *expect_res, -+ int expect_cc) -+{ -+ int cc, count; -+ char_v v1, mask; -+ char_v v2 = to_char_vec(str, &mask); -+ char_v exp_v1 = to_char_vec(expect_res, &mask); -+ char equal[16]; -+ -+ __asm__( -+ "cr 0,0\n\t" /* Clear CC */ -+ "vistr %[v1],%[v2],0,1\n\t" -+ "ipm %[cc]\n\t" -+ "srl %[cc],28" -+ : [v1] "=v" (v1), -+ [cc] "=d" (cc) -+ : [v2] "v" (v2) -+ : "cc"); -+ -+ *(char_v *) equal = (v1 & mask) == (exp_v1 & mask); -+ if (memchr(equal, 0, sizeof(equal))) -+ printf("Result doesn't match `%s'\n", expect_res); -+ -+ count = 0; -+ for (int i = 0; i < 16; i++) { -+ if (v1[i] == 0) count++; -+ } -+ tmp = hex_digit[count]; -+ -+ tmp = hex_digit[cc & 0xf]; -+ if (expect_cc >= 0 && cc != expect_cc) -+ printf("CC %d != %d\n", cc, expect_cc); -+} -+ -+int main() -+{ -+ test_vistr_char("terminated$====~", "terminated$$$$$$", 0); -+ test_vistr_char("undef~~~~~~~~~~~", "undef", -1); -+ test_vistr_char("undef, 2nd half~", "undef, 2nd half", -1); -+ test_vistr_char("Not. Terminated.", "Not. Terminated.", 3); -+ test_vistr_char("partiallyOK~~$~~", "partiallyOK~~$$$", 0); -+ return 0; -+} -diff --git a/memcheck/tests/s390x/vistr.stderr.exp b/memcheck/tests/s390x/vistr.stderr.exp -new file mode 100644 -index 000000000..e4f35fd74 ---- /dev/null -+++ b/memcheck/tests/s390x/vistr.stderr.exp -@@ -0,0 +1,20 @@ -+Conditional jump or move depends on uninitialised value(s) -+ at 0x........: test_vistr_char (vistr.c:59) -+ by 0x........: main (vistr.c:71) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vistr_char (vistr.c:63) -+ by 0x........: main (vistr.c:71) -+ -+Conditional jump or move depends on uninitialised value(s) -+ at 0x........: test_vistr_char (vistr.c:59) -+ by 0x........: main (vistr.c:72) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vistr_char (vistr.c:63) -+ by 0x........: main (vistr.c:72) -+ -+Conditional jump or move depends on uninitialised value(s) -+ at 0x........: test_vistr_char (vistr.c:59) -+ by 0x........: main (vistr.c:74) -+ -diff --git a/memcheck/tests/s390x/vistr.vgtest b/memcheck/tests/s390x/vistr.vgtest -new file mode 100644 -index 000000000..f99749d85 ---- /dev/null -+++ b/memcheck/tests/s390x/vistr.vgtest -@@ -0,0 +1,2 @@ -+prog: vistr -+vgopts: -q -diff --git a/memcheck/tests/s390x/vstrc.c b/memcheck/tests/s390x/vstrc.c -new file mode 100644 -index 000000000..268e2f858 ---- /dev/null -+++ b/memcheck/tests/s390x/vstrc.c -@@ -0,0 +1,92 @@ -+#include -+#include -+ -+#define VECTOR __attribute__ ((vector_size (16))) -+ -+typedef char VECTOR char_v; -+ -+struct vstrc_char_rng { -+ unsigned char range[16]; -+ unsigned char flags[16]; -+}; -+ -+#define RNG_FLAG_EQ 0x80 -+#define RNG_FLAG_LT 0x40 -+#define RNG_FLAG_GT 0x20 -+#define RNG_FLAG_ANY 0xe0 -+#define RNG_FLAG_NONE 0x00 -+ -+volatile char tmp; -+static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; -+ -+static void test_vstrc_char(const char *str, const struct vstrc_char_rng *rng, -+ int expect_res, int expect_cc) -+{ -+ int cc; -+ char_v v1; -+ char_v v2 = *(const char_v *) str; -+ char_v v3 = *(const char_v *) rng->range; -+ char_v v4 = *(const char_v *) rng->flags; -+ -+ __asm__( -+ "cr 0,0\n\t" /* Clear CC */ -+ "vstrc %[v1],%[v2],%[v3],%[v4],0,3\n\t" -+ "ipm %[cc]\n\t" -+ "srl %[cc],28" -+ : [v1] "=v" (v1), -+ [cc] "=d" (cc) -+ : [v2] "v" (v2), -+ [v3] "v" (v3), -+ [v4] "v" (v4) -+ : "cc"); -+ -+ tmp = hex_digit[v1[7] & 0x1f]; -+ if (expect_res >= 0 && v1[7] != expect_res) -+ printf("result %u != %d\n", v1[7], expect_res); -+ -+ tmp = hex_digit[cc & 0xf]; -+ if (expect_cc >= 0 && cc != expect_cc) -+ printf("CC %d != %d\n", cc, expect_cc); -+} -+ -+int main() -+{ -+ struct vstrc_char_rng rng; -+ char buf[16]; -+ -+ memset(rng.flags, RNG_FLAG_NONE, 16); -+ -+ rng.range[4] = 'z'; -+ rng.flags[4] = RNG_FLAG_GT | RNG_FLAG_EQ; -+ rng.flags[5] = RNG_FLAG_ANY; -+ /* OK: match at the 'z' */ -+ test_vstrc_char("find the z", &rng, 9, 2); -+ -+ rng.flags[12] = RNG_FLAG_GT | RNG_FLAG_EQ; -+ rng.flags[13] = RNG_FLAG_LT | RNG_FLAG_EQ; -+ /* Bad: undefined range */ -+ test_vstrc_char("undefined", &rng, -1, -1); -+ -+ rng.range[12] = 'a'; -+ rng.range[13] = 'c'; -+ /* OK: match at the 'a' */ -+ test_vstrc_char("get the abc", &rng, 8, 2); -+ -+ rng.flags[12] = RNG_FLAG_LT; -+ rng.flags[13] = RNG_FLAG_GT; -+ /* OK: no match up to null terminator */ -+ test_vstrc_char("no match", &rng, 8, 0); -+ -+ /* OK: no match, no null terminator */ -+ test_vstrc_char("0123456789abcdef", &rng, 16, 3); -+ -+ buf[0] = 'x'; -+ /* Bad: undefined string */ -+ test_vstrc_char(buf, &rng, -1, -1); -+ -+ buf[1] = 'z'; -+ /* Bad: valid match, but CC undefined */ -+ test_vstrc_char(buf, &rng, 1, -1); -+ -+ return 0; -+} -diff --git a/memcheck/tests/s390x/vstrc.stderr.exp b/memcheck/tests/s390x/vstrc.stderr.exp -new file mode 100644 -index 000000000..c1125bea1 ---- /dev/null -+++ b/memcheck/tests/s390x/vstrc.stderr.exp -@@ -0,0 +1,20 @@ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrc_char (vstrc.c:43) -+ by 0x........: main (vstrc.c:68) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrc_char (vstrc.c:47) -+ by 0x........: main (vstrc.c:68) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrc_char (vstrc.c:43) -+ by 0x........: main (vstrc.c:85) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrc_char (vstrc.c:47) -+ by 0x........: main (vstrc.c:85) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrc_char (vstrc.c:47) -+ by 0x........: main (vstrc.c:89) -+ -diff --git a/memcheck/tests/s390x/vstrc.stdout.exp b/memcheck/tests/s390x/vstrc.stdout.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/s390x/vstrc.vgtest b/memcheck/tests/s390x/vstrc.vgtest -new file mode 100644 -index 000000000..26f5db99b ---- /dev/null -+++ b/memcheck/tests/s390x/vstrc.vgtest -@@ -0,0 +1,2 @@ -+prog: vstrc -+vgopts: -q - -commit a0bb049ace14ab52d386bb1d49a399f39eec4986 -Author: Andreas Arnez -Date: Tue Mar 23 14:55:09 2021 +0100 - - s390x: Improve handling of amodes without base register - - Addressing modes without a base or index register represent constants. - They can occur in some special cases such as shift operations and when - accessing individual vector elements. Perform some minor improvements to - the handling of such amodes. - -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 6e0734ae0..2587f81a1 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -360,7 +360,8 @@ s390_amode_is_sane(const s390_amode *am) - { - switch (am->tag) { - case S390_AMODE_B12: -- return is_virtual_gpr(am->b) && fits_unsigned_12bit(am->d); -+ return (is_virtual_gpr(am->b) || sameHReg(am->b, s390_hreg_gpr(0))) && -+ fits_unsigned_12bit(am->d); - - case S390_AMODE_B20: - return is_virtual_gpr(am->b) && fits_signed_20bit(am->d); -@@ -378,47 +379,31 @@ s390_amode_is_sane(const s390_amode *am) - } - } - -+static Bool -+s390_amode_is_constant(const s390_amode *am) -+{ -+ return am->tag == S390_AMODE_B12 && sameHReg(am->b, s390_hreg_gpr(0)); -+} -+ - - /* Record the register use of an amode */ - static void - s390_amode_get_reg_usage(HRegUsage *u, const s390_amode *am) - { -- switch (am->tag) { -- case S390_AMODE_B12: -- case S390_AMODE_B20: -- addHRegUse(u, HRmRead, am->b); -- return; -- -- case S390_AMODE_BX12: -- case S390_AMODE_BX20: -+ if (!sameHReg(am->b, s390_hreg_gpr(0))) - addHRegUse(u, HRmRead, am->b); -+ if (!sameHReg(am->x, s390_hreg_gpr(0))) - addHRegUse(u, HRmRead, am->x); -- return; -- -- default: -- vpanic("s390_amode_get_reg_usage"); -- } - } - - - static void - s390_amode_map_regs(HRegRemap *m, s390_amode *am) - { -- switch (am->tag) { -- case S390_AMODE_B12: -- case S390_AMODE_B20: -- am->b = lookupHRegRemap(m, am->b); -- return; -- -- case S390_AMODE_BX12: -- case S390_AMODE_BX20: -+ if (!sameHReg(am->b, s390_hreg_gpr(0))) - am->b = lookupHRegRemap(m, am->b); -+ if (!sameHReg(am->x, s390_hreg_gpr(0))) - am->x = lookupHRegRemap(m, am->x); -- return; -- -- default: -- vpanic("s390_amode_map_regs"); -- } - } - - -@@ -653,6 +638,16 @@ directReload_S390(HInstr* i, HReg vreg, Short spill_off) - insn->variant.alu.dst, vreg_opnd); - } - -+ /* v-vgetelem , */ -+ if (insn->tag == S390_INSN_VEC_AMODEOP -+ && insn->variant.vec_amodeop.tag == S390_VEC_GET_ELEM -+ && insn->size == 8 -+ && sameHReg(insn->variant.vec_amodeop.op1, vreg) -+ && s390_amode_is_constant(insn->variant.vec_amodeop.op2)) { -+ vreg_am->d += 8 * insn->variant.vec_amodeop.op2->d; -+ return s390_insn_load(insn->size, insn->variant.vec_amodeop.dst, vreg_am); -+ } -+ - /* v- , */ - if (insn->tag == S390_INSN_UNOP - && insn->variant.unop.src.tag == S390_OPND_REG -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 5f79280c0..ceca6836e 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -312,7 +312,18 @@ s390_isel_amode_wrk(ISelEnv *env, IRExpr *expr, - Bool no_index __attribute__((unused)), - Bool short_displacement) - { -- if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { -+ if (expr->tag == Iex_Unop && expr->Iex.Unop.op == Iop_8Uto64 && -+ expr->Iex.Unop.arg->tag == Iex_Const) { -+ UChar value = expr->Iex.Unop.arg->Iex.Const.con->Ico.U8; -+ return s390_amode_b12((Int)value, s390_hreg_gpr(0)); -+ -+ } else if (expr->tag == Iex_Const) { -+ ULong value = expr->Iex.Const.con->Ico.U64; -+ if (ulong_fits_unsigned_12bit(value)) { -+ return s390_amode_b12((Int)value, s390_hreg_gpr(0)); -+ } -+ -+ } else if (expr->tag == Iex_Binop && expr->Iex.Binop.op == Iop_Add64) { - IRExpr *arg1 = expr->Iex.Binop.arg1; - IRExpr *arg2 = expr->Iex.Binop.arg2; - - -commit fd935e238d907d9c523a311ba795077d95ad6912 -Author: Andreas Arnez -Date: Fri Mar 26 19:27:47 2021 +0100 - - s390x: Rework insn "v-vdup" and add "v-vrep" - - So far the only s390x insn for filling a vector with copies of the same - element is "v-vdup" (S390_VEC_DUPLICATE), which replicates the first - element of its vector argument. This is fairly restrictive and can lead - to unnecessarily long code sequences. - - Redefine "v-vdup" to replicate any scalar value instead. And add - "v-vrep" (S390_INSN_VEC_REPLICATE) for replicating any given element of a - vector. Select the latter for suitable expressions like - - Iop_Dup8x16(Iop_GetElem8x16(vector_expr, i)) - - This improves the generated code for some vector string instructions, - where a lot of element replications are performed. - -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 2587f81a1..c764d6ef9 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -670,6 +670,14 @@ directReload_S390(HInstr* i, HReg vreg, Short spill_off) - insn->variant.unop.dst, vreg_opnd); - } - -+ /* v-vrep ,, */ -+ if (insn->tag == S390_INSN_VEC_REPLICATE -+ && sameHReg(insn->variant.vec_replicate.op1, vreg)) { -+ vreg_am->d += insn->size * insn->variant.vec_replicate.idx; -+ return s390_insn_unop(insn->size, S390_VEC_DUPLICATE, -+ insn->variant.vec_replicate.dst, vreg_opnd); -+ } -+ - no_match: - return NULL; - } -@@ -1050,6 +1058,11 @@ s390_insn_get_reg_usage(HRegUsage *u, const s390_insn *insn) - addHRegUse(u, HRmRead, insn->variant.vec_triop.op3); - break; - -+ case S390_INSN_VEC_REPLICATE: -+ addHRegUse(u, HRmWrite, insn->variant.vec_replicate.dst); -+ addHRegUse(u, HRmRead, insn->variant.vec_replicate.op1); -+ break; -+ - default: - vpanic("s390_insn_get_reg_usage"); - } -@@ -1433,6 +1446,14 @@ s390_insn_map_regs(HRegRemap *m, s390_insn *insn) - insn->variant.vec_triop.op3 = - lookupHRegRemap(m, insn->variant.vec_triop.op3); - break; -+ -+ case S390_INSN_VEC_REPLICATE: -+ insn->variant.vec_replicate.dst = -+ lookupHRegRemap(m, insn->variant.vec_replicate.dst); -+ insn->variant.vec_replicate.op1 = -+ lookupHRegRemap(m, insn->variant.vec_replicate.op1); -+ break; -+ - default: - vpanic("s390_insn_map_regs"); - } -@@ -1767,7 +1788,39 @@ emit_VRI_VI(UChar *p, ULong op, UChar v1, UShort i2) - - - static UChar * --emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2) -+emit_VRI_VIM(UChar *p, ULong op, UChar v1, UShort i2, UChar m3) -+{ -+ ULong the_insn = op; -+ ULong rxb = s390_update_rxb(0, 1, &v1); -+ -+ the_insn |= ((ULong)v1) << 36; -+ the_insn |= ((ULong)i2) << 16; -+ the_insn |= ((ULong)m3) << 12; -+ the_insn |= ((ULong)rxb)<< 8; -+ -+ return emit_6bytes(p, the_insn); -+} -+ -+ -+static UChar * -+emit_VRI_VVMM(UChar *p, ULong op, UChar v1, UChar v3, UShort i2, UChar m4) -+{ -+ ULong the_insn = op; -+ ULong rxb = s390_update_rxb(0, 1, &v1); -+ rxb = s390_update_rxb(rxb, 2, &v3); -+ -+ the_insn |= ((ULong)v1) << 36; -+ the_insn |= ((ULong)v3) << 32; -+ the_insn |= ((ULong)i2) << 16; -+ the_insn |= ((ULong)m4) << 12; -+ the_insn |= ((ULong)rxb) << 8; -+ -+ return emit_6bytes(p, the_insn); -+} -+ -+ -+static UChar * -+emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2, UChar m3) - { - ULong the_insn = op; - ULong rxb = s390_update_rxb(0, 1, &v1); -@@ -1776,6 +1829,7 @@ emit_VRX(UChar *p, ULong op, UChar v1, UChar x2, UChar b2, UShort d2) - the_insn |= ((ULong)x2) << 32; - the_insn |= ((ULong)b2) << 28; - the_insn |= ((ULong)d2) << 16; -+ the_insn |= ((ULong)m3) << 12; - the_insn |= ((ULong)rxb)<< 8; - - return emit_6bytes(p, the_insn); -@@ -5782,7 +5836,7 @@ s390_emit_VL(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2) - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, VR, UDXB), "vl", v1, d2, x2, b2); - -- return emit_VRX(p, 0xE70000000006ULL, v1, x2, b2, d2); -+ return emit_VRX(p, 0xE70000000006ULL, v1, x2, b2, d2, 0); - } - - static UChar * -@@ -5795,13 +5849,23 @@ s390_emit_VLR(UChar *p, UChar v1, UChar v2) - } - - -+static UChar * -+s390_emit_VLREP(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2, UShort m3) -+{ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -+ s390_disasm(ENC4(MNM, VR, UDXB, UINT), "vlrep", v1, d2, x2, b2, m3); -+ -+ return emit_VRX(p, 0xE70000000005ULL, v1, x2, b2, d2, m3); -+} -+ -+ - static UChar * - s390_emit_VST(UChar *p, UChar v1, UChar x2, UChar b2, UShort d2) - { - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) - s390_disasm(ENC3(MNM, VR, UDXB), "vst", v1, d2, x2, b2); - -- return emit_VRX(p, 0xE7000000000eULL, v1, x2, b2, d2); -+ return emit_VRX(p, 0xE7000000000eULL, v1, x2, b2, d2, 0); - } - - -@@ -5912,15 +5976,24 @@ s390_emit_VPKLS(UChar *p, UChar v1, UChar v2, UChar v3, UChar m4) - - - static UChar * --s390_emit_VREP(UChar *p, UChar v1, UChar v3, UChar m3) -+s390_emit_VREP(UChar *p, UChar v1, UChar v3, UShort i2, UChar m4) - { - if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -- s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), "vrep", v1, v3, 0, m3); -+ s390_disasm(ENC5(MNM, VR, VR, UINT, UINT), "vrep", v1, v3, i2, m4); - -- return emit_VRR_VVM(p, 0xE7000000004DULL, v1, v3, m3); -+ return emit_VRI_VVMM(p, 0xE7000000004DULL, v1, v3, i2, m4); - } - - -+static UChar * -+s390_emit_VREPI(UChar *p, UChar v1, UShort i2, UChar m3) -+{ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -+ s390_disasm(ENC4(MNM, VR, UINT, UINT), "vrepi", v1, i2, m3); -+ -+ return emit_VRI_VIM(p, 0xE70000000045ULL, v1, i2, m3); -+} -+ - - static UChar * - s390_emit_VUPH(UChar *p, UChar v1, UChar v3, UChar m3) -@@ -7560,6 +7633,20 @@ s390_insn *s390_insn_vec_triop(UChar size, s390_vec_triop_t tag, HReg dst, - return insn; - } - -+s390_insn *s390_insn_vec_replicate(UChar size, HReg dst, HReg op1, -+ UChar idx) -+{ -+ s390_insn *insn = LibVEX_Alloc_inline(sizeof(s390_insn)); -+ -+ insn->tag = S390_INSN_VEC_REPLICATE; -+ insn->size = size; -+ insn->variant.vec_replicate.dst = dst; -+ insn->variant.vec_replicate.op1 = op1; -+ insn->variant.vec_replicate.idx = idx; -+ -+ return insn; -+} -+ - /*---------------------------------------------------------------*/ - /*--- Debug print ---*/ - /*---------------------------------------------------------------*/ -@@ -8284,6 +8371,13 @@ s390_insn_as_string(const s390_insn *insn) - insn->variant.vec_triop.op3); - break; - -+ case S390_INSN_VEC_REPLICATE: -+ s390_sprintf(buf, "%M %R, %R, %I", "v-vrep", -+ insn->variant.vec_replicate.dst, -+ insn->variant.vec_replicate.op1, -+ insn->variant.vec_replicate.idx); -+ break; -+ - default: goto fail; - } - -@@ -9386,6 +9480,56 @@ s390_negate_emit(UChar *buf, const s390_insn *insn) - } - - -+static UChar * -+s390_vec_duplicate_emit(UChar *buf, const s390_insn *insn) -+{ -+ UChar v1 = hregNumber(insn->variant.unop.dst); -+ s390_opnd_RMI opnd = insn->variant.unop.src; -+ UChar r2; -+ -+ switch (opnd.tag) { -+ case S390_OPND_AMODE: { -+ s390_amode* am = opnd.variant.am; -+ UInt b = hregNumber(am->b); -+ UInt x = hregNumber(am->x); -+ UInt d = am->d; -+ -+ if (fits_unsigned_12bit(d)) { -+ return s390_emit_VLREP(buf, v1, x, b, d, -+ s390_getM_from_size(insn->size)); -+ } -+ buf = s390_emit_load_mem(buf, insn->size, R0, am); -+ r2 = R0; -+ goto duplicate_from_gpr; -+ } -+ -+ case S390_OPND_IMMEDIATE: { -+ ULong val = opnd.variant.imm; -+ -+ if (ulong_fits_signed_16bit(val)) { -+ return s390_emit_VREPI(buf, v1, val, s390_getM_from_size(insn->size)); -+ } -+ buf = s390_emit_load_64imm(buf, R0, val); -+ r2 = R0; -+ goto duplicate_from_gpr; -+ } -+ -+ case S390_OPND_REG: -+ r2 = hregNumber(opnd.variant.reg); -+ -+ duplicate_from_gpr: -+ buf = s390_emit_VLVGP(buf, v1, r2, r2); -+ if (insn->size != 8) { -+ buf = s390_emit_VREP(buf, v1, v1, 8 / insn->size - 1, -+ s390_getM_from_size(insn->size)); -+ } -+ return buf; -+ } -+ -+ vpanic("s390_vec_duplicate_emit"); -+} -+ -+ - static UChar * - s390_insn_unop_emit(UChar *buf, const s390_insn *insn) - { -@@ -9405,12 +9549,7 @@ s390_insn_unop_emit(UChar *buf, const s390_insn *insn) - UShort i2 = insn->variant.unop.src.variant.imm; - return s390_emit_VGBM(buf, v1, i2); - } -- case S390_VEC_DUPLICATE: { -- vassert(insn->variant.unop.src.tag == S390_OPND_REG); -- UChar v1 = hregNumber(insn->variant.unop.dst); -- UChar v2 = hregNumber(insn->variant.unop.src.variant.reg); -- return s390_emit_VREP(buf, v1, v2, s390_getM_from_size(insn->size)); -- } -+ case S390_VEC_DUPLICATE: return s390_vec_duplicate_emit(buf, insn); - case S390_VEC_UNPACKLOWS: { - vassert(insn->variant.unop.src.tag == S390_OPND_REG); - vassert(insn->size < 8); -@@ -11595,6 +11734,16 @@ s390_insn_vec_triop_emit(UChar *buf, const s390_insn *insn) - } - - -+static UChar * -+s390_insn_vec_replicate_emit(UChar *buf, const s390_insn *insn) -+{ -+ UChar v1 = hregNumber(insn->variant.vec_replicate.dst); -+ UChar v2 = hregNumber(insn->variant.vec_replicate.op1); -+ UShort idx = (UShort) insn->variant.vec_replicate.idx; -+ return s390_emit_VREP(buf, v1, v2, idx, s390_getM_from_size(insn->size)); -+} -+ -+ - Int - emit_S390Instr(Bool *is_profinc, UChar *buf, Int nbuf, const s390_insn *insn, - Bool mode64, VexEndness endness_host, -@@ -11791,6 +11940,11 @@ emit_S390Instr(Bool *is_profinc, UChar *buf, Int nbuf, const s390_insn *insn, - case S390_INSN_VEC_TRIOP: - end = s390_insn_vec_triop_emit(buf, insn); - break; -+ -+ case S390_INSN_VEC_REPLICATE: -+ end = s390_insn_vec_replicate_emit(buf, insn); -+ break; -+ - fail: - default: - vpanic("emit_S390Instr"); -diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h -index 9b69f4d38..063fd3800 100644 ---- a/VEX/priv/host_s390_defs.h -+++ b/VEX/priv/host_s390_defs.h -@@ -166,7 +166,8 @@ typedef enum { - S390_INSN_VEC_AMODEINTOP, - S390_INSN_VEC_UNOP, - S390_INSN_VEC_BINOP, -- S390_INSN_VEC_TRIOP -+ S390_INSN_VEC_TRIOP, -+ S390_INSN_VEC_REPLICATE - } s390_insn_tag; - - -@@ -738,6 +739,11 @@ typedef struct { - HReg op2; /* 128-bit second operand */ - HReg op3; /* 128-bit third operand */ - } vec_triop; -+ struct { -+ HReg dst; /* 128-bit result */ -+ HReg op1; /* 128-bit first operand */ -+ UChar idx; /* index of element to replicate */ -+ } vec_replicate; - } variant; - } s390_insn; - -@@ -853,6 +859,7 @@ s390_insn *s390_insn_vec_binop(UChar size, s390_vec_binop_t, HReg dst, HReg op1, - HReg op2); - s390_insn *s390_insn_vec_triop(UChar size, s390_vec_triop_t, HReg dst, HReg op1, - HReg op2, HReg op3); -+s390_insn *s390_insn_vec_replicate(UChar size, HReg dst, HReg op1, UChar idx); - - const HChar *s390_insn_as_string(const s390_insn *); - -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index ceca6836e..968122596 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -3778,12 +3778,12 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - } - /* --------- UNARY OP --------- */ - case Iex_Unop: { -- UChar size_for_int_arg = 0; - HReg dst = INVALID_HREG; - HReg reg1 = INVALID_HREG; - s390_unop_t vec_unop = S390_UNOP_T_INVALID; - s390_vec_binop_t vec_binop = S390_VEC_BINOP_T_INVALID; - IROp op = expr->Iex.Unop.op; -+ IROp arg_op = Iop_INVALID; - IRExpr* arg = expr->Iex.Unop.arg; - switch(op) { - case Iop_NotV128: -@@ -3839,59 +3839,63 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - } - - case Iop_Dup8x16: -- size = size_for_int_arg = 1; -- vec_unop = S390_VEC_DUPLICATE; -- goto Iop_V_int_wrk; -+ size = 1; -+ arg_op = Iop_GetElem8x16; -+ goto Iop_V_dup_wrk; - case Iop_Dup16x8: -- size = size_for_int_arg = 2; -- vec_unop = S390_VEC_DUPLICATE; -- goto Iop_V_int_wrk; -+ size = 2; -+ arg_op = Iop_GetElem16x8; -+ goto Iop_V_dup_wrk; - case Iop_Dup32x4: -- size = size_for_int_arg = 4; -- vec_unop = S390_VEC_DUPLICATE; -- goto Iop_V_int_wrk; -+ size = 4; -+ arg_op = Iop_GetElem32x4; -+ goto Iop_V_dup_wrk; -+ -+ Iop_V_dup_wrk: { -+ dst = newVRegV(env); -+ if (arg->tag == Iex_Binop && arg->Iex.Binop.op == arg_op && -+ arg->Iex.Binop.arg2->tag == Iex_Const) { -+ ULong idx; -+ idx = get_const_value_as_ulong(arg->Iex.Binop.arg2-> Iex.Const.con); -+ reg1 = s390_isel_vec_expr(env, arg->Iex.Binop.arg1); -+ addInstr(env, s390_insn_vec_replicate(size, dst, reg1, (UChar)idx)); -+ } else { -+ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg); -+ addInstr(env, s390_insn_unop(size, S390_VEC_DUPLICATE, dst, src)); -+ } -+ return dst; -+ } - - case Iop_Widen8Sto16x8: - size = 1; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWS; -- goto Iop_V_int_wrk; -+ goto Iop_V_widen_wrk; - case Iop_Widen16Sto32x4: - size = 2; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWS; -- goto Iop_V_int_wrk; -+ goto Iop_V_widen_wrk; - case Iop_Widen32Sto64x2: - size = 4; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWS; -- goto Iop_V_int_wrk; -+ goto Iop_V_widen_wrk; - case Iop_Widen8Uto16x8: - size = 1; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWU; -- goto Iop_V_int_wrk; -+ goto Iop_V_widen_wrk; - case Iop_Widen16Uto32x4: - size = 2; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWU; -- goto Iop_V_int_wrk; -+ goto Iop_V_widen_wrk; - case Iop_Widen32Uto64x2: - size = 4; -- size_for_int_arg = 8; - vec_unop = S390_VEC_UNPACKLOWU; -- goto Iop_V_int_wrk; -- -- Iop_V_int_wrk: { -- HReg vr1 = vec_generate_zeroes(env); -- s390_amode* amode2 = s390_isel_amode(env, IRExpr_Const(IRConst_U64(0))); -- reg1 = s390_isel_int_expr(env, arg); -+ goto Iop_V_widen_wrk; - -+ Iop_V_widen_wrk: { - vassert(vec_unop != S390_UNOP_T_INVALID); -- addInstr(env, -- s390_insn_vec_amodeintop(size_for_int_arg, S390_VEC_SET_ELEM, -- vr1, amode2, reg1)); -- -+ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg); -+ HReg vr1 = newVRegV(env); -+ addInstr(env, s390_insn_unop(8, S390_VEC_DUPLICATE, vr1, src)); - dst = newVRegV(env); - addInstr(env, s390_insn_unop(size, vec_unop, dst, s390_opnd_reg(vr1))); - return dst; - -commit 6c1cb1a0128b00858b973ef9344e12d6ddbaaf57 -Author: Andreas Arnez -Date: Thu Mar 25 18:48:07 2021 +0100 - - s390x: Add support for emitting "vector or with complement" - - In the instruction selector, look out for IR expressions that fit "vector - or with complement (VOC)". Emit when applicable. - - This slighly reduces the generated code sometimes, such as for certain - vector string instructions, where such expressions occur quite frequently. - -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index c764d6ef9..239d9d299 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -5907,6 +5907,15 @@ s390_emit_VO(UChar *p, UChar v1, UChar v2, UChar v3) - return emit_VRR_VVV(p, 0xE7000000006aULL, v1, v2, v3); - } - -+static UChar * -+s390_emit_VOC(UChar *p, UChar v1, UChar v2, UChar v3) -+{ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) -+ s390_disasm(ENC4(MNM, VR, VR, VR), "voc", v1, v2, v3); -+ -+ return emit_VRR_VVV(p, 0xE7000000006fULL, v1, v2, v3); -+} -+ - static UChar * - s390_emit_VX(UChar *p, UChar v1, UChar v2, UChar v3) - { -@@ -8312,6 +8321,7 @@ s390_insn_as_string(const s390_insn *insn) - case S390_VEC_PACK_SATURU: op = "v-vpacksaturu"; break; - case S390_VEC_COMPARE_EQUAL: op = "v-vcmpeq"; break; - case S390_VEC_OR: op = "v-vor"; break; -+ case S390_VEC_ORC: op = "v-vorc"; break; - case S390_VEC_XOR: op = "v-vxor"; break; - case S390_VEC_AND: op = "v-vand"; break; - case S390_VEC_MERGEL: op = "v-vmergel"; break; -@@ -11609,6 +11619,8 @@ s390_insn_vec_binop_emit(UChar *buf, const s390_insn *insn) - return s390_emit_VCEQ(buf, v1, v2, v3, s390_getM_from_size(size)); - case S390_VEC_OR: - return s390_emit_VO(buf, v1, v2, v3); -+ case S390_VEC_ORC: -+ return s390_emit_VOC(buf, v1, v2, v3); - case S390_VEC_XOR: - return s390_emit_VX(buf, v1, v2, v3); - case S390_VEC_AND: -diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h -index 063fd3800..dc116106e 100644 ---- a/VEX/priv/host_s390_defs.h -+++ b/VEX/priv/host_s390_defs.h -@@ -366,6 +366,7 @@ typedef enum { - S390_VEC_PACK_SATURU, - S390_VEC_COMPARE_EQUAL, - S390_VEC_OR, -+ S390_VEC_ORC, - S390_VEC_XOR, - S390_VEC_AND, - S390_VEC_MERGEL, -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 968122596..53d76fe8a 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -4102,6 +4102,15 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - case Iop_OrV128: - size = 16; - vec_binop = S390_VEC_OR; -+ if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { -+ IRExpr* orig_arg1 = arg1; -+ arg1 = arg2; -+ arg2 = orig_arg1->Iex.Unop.arg; -+ vec_binop = S390_VEC_ORC; -+ } else if (arg2->tag == Iex_Unop && arg2->Iex.Unop.op == Iop_NotV128) { -+ arg2 = arg2->Iex.Unop.arg; -+ vec_binop = S390_VEC_ORC; -+ } - goto Iop_VV_wrk; - - case Iop_XorV128: - -commit 0bd4263326b2d48f782339a9bbe1a069c7de45c7 -Author: Andreas Arnez -Date: Tue Mar 30 17:45:20 2021 +0200 - - s390x: Fix/optimize Iop_64HLtoV128 - - In s390_vr_fill() in guest_s390_toIR.c, filling a vector with two copies - of a 64-bit value is realized with Iop_64HLtoV128, since there is no such - operator as Iop_Dup64x2. But the two args to Iop_64HLtoV128 use the same - expression, referenced twice. Although this hasn't been seen to cause - real trouble yet, it's problematic and potentially inefficient, so change - it: Assign to a temp and pass that twice instead. - - In the instruction selector, if Iop_64HLtoV128 is found to be used for a - duplication as above, select "v-vdup" instead of "v-vinitfromgprs". This - mimicks the behavior we'd get if there actually was an operator - Iop_Dup64x2. - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index dfea54259..a73dcfb14 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -2299,9 +2299,12 @@ s390_vr_fill(UChar v1, IRExpr *o2) - case Ity_I32: - put_vr_qw(v1, unop(Iop_Dup32x4, o2)); - break; -- case Ity_I64: -- put_vr_qw(v1, binop(Iop_64HLtoV128, o2, o2)); -+ case Ity_I64: { -+ IRTemp val = newTemp(Ity_I64); -+ assign(val, o2); -+ put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(val), mkexpr(val))); - break; -+ } - default: - ppIRType(o2type); - vpanic("s390_vr_fill: invalid IRType"); -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index 53d76fe8a..ee20c6711 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -4662,12 +4662,16 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - } - - case Iop_64HLtoV128: -- reg1 = s390_isel_int_expr(env, arg1); -- reg2 = s390_isel_int_expr(env, arg2); -- -- addInstr(env, s390_insn_vec_binop(size, S390_VEC_INIT_FROM_GPRS, -- dst, reg1, reg2)); -- -+ if (arg1->tag == Iex_RdTmp && arg2->tag == Iex_RdTmp && -+ arg1->Iex.RdTmp.tmp == arg2->Iex.RdTmp.tmp) { -+ s390_opnd_RMI src = s390_isel_int_expr_RMI(env, arg1); -+ addInstr(env, s390_insn_unop(8, S390_VEC_DUPLICATE, dst, src)); -+ } else { -+ reg1 = s390_isel_int_expr(env, arg1); -+ reg2 = s390_isel_int_expr(env, arg2); -+ addInstr(env, s390_insn_vec_binop(size, S390_VEC_INIT_FROM_GPRS, -+ dst, reg1, reg2)); -+ } - return dst; - - default: - -commit cae5062b05b95e0303b1122a0ea9aadc197e4f0a -Author: Andreas Arnez -Date: Fri May 7 18:13:03 2021 +0200 - - s390x: Add missing stdout.exp for vector string memcheck test - - The file vistr.stdout.exp was missing from commit 32312d588. Add it. - -diff --git a/memcheck/tests/s390x/vistr.stdout.exp b/memcheck/tests/s390x/vistr.stdout.exp -new file mode 100644 -index 000000000..e69de29bb diff --git a/valgrind-3.17.0-s390-z13-vec-fix.patch b/valgrind-3.17.0-s390-z13-vec-fix.patch deleted file mode 100644 index 959e5f8..0000000 --- a/valgrind-3.17.0-s390-z13-vec-fix.patch +++ /dev/null @@ -1,46 +0,0 @@ -commit 124ae6cfa303f0cc71ffd685620cb57c4f8f02bb -Author: Andreas Arnez -Date: Mon Jun 7 14:01:53 2021 +0200 - - s390x: Don't emit "vector or with complement" on z13 - - The z/Architecture instruction "vector or with complement" (VOC) can be - used as an optimization to combine "vector or" with "vector nor". This is - exploited in Valgrind since commit 6c1cb1a0128b00858b973e. However, VOC - requires the vector-enhancements facility 1, which is not installed on a - z13 CPU. Thus Valgrind can now run into SIGILL on z13 when trying to - execute vector string instructions. - - Fix this by suppressing the VOC optimization unless the - vector-enhancements facility 1 is recognized on the host. - -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index ee20c6711..15ca92a6b 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -4102,14 +4102,17 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - case Iop_OrV128: - size = 16; - vec_binop = S390_VEC_OR; -- if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { -- IRExpr* orig_arg1 = arg1; -- arg1 = arg2; -- arg2 = orig_arg1->Iex.Unop.arg; -- vec_binop = S390_VEC_ORC; -- } else if (arg2->tag == Iex_Unop && arg2->Iex.Unop.op == Iop_NotV128) { -- arg2 = arg2->Iex.Unop.arg; -- vec_binop = S390_VEC_ORC; -+ if (s390_host_has_vxe) { -+ if (arg1->tag == Iex_Unop && arg1->Iex.Unop.op == Iop_NotV128) { -+ IRExpr* orig_arg1 = arg1; -+ arg1 = arg2; -+ arg2 = orig_arg1->Iex.Unop.arg; -+ vec_binop = S390_VEC_ORC; -+ } else if (arg2->tag == Iex_Unop && -+ arg2->Iex.Unop.op == Iop_NotV128) { -+ arg2 = arg2->Iex.Unop.arg; -+ vec_binop = S390_VEC_ORC; -+ } - } - goto Iop_VV_wrk; - diff --git a/valgrind-3.17.0-s390-z15.patch b/valgrind-3.17.0-s390-z15.patch deleted file mode 100644 index 2ec3c2f..0000000 --- a/valgrind-3.17.0-s390-z15.patch +++ /dev/null @@ -1,2413 +0,0 @@ -From 3fbde55a5696c9273084ee2c44daca752e407597 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 26 Jan 2021 15:06:47 +0100 -Subject: [PATCH 01/13] s390x: Misc-insn-3, bitwise logical 3-way instructions - -Add support for the instructions NCRK, NCGRK, NNRK, NNGRK, NORK, NOGRK, -NXRK, NXGRK, OCRK, and OCGRK. Introduce a common helper and use it for -the existing instructions NRK, NGRK, XRK, XGRK, ORK, and OGRK as well. ---- - VEX/priv/guest_s390_toIR.c | 154 ++++++++++++++++++++++++++----------- - 1 file changed, 109 insertions(+), 45 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index a73dcfb14..f8afd5b96 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -5022,8 +5022,12 @@ s390_irgen_NGR(UChar r1, UChar r2) - return "ngr"; - } - -+/* Helper for bitwise logical instructions with two 32-bit input operands and a -+ 32-bit output operand. `inv3' and `inv' indicate whether to invert (build -+ bitwise complement of) operand 3 or the result, respectively. */ - static const HChar * --s390_irgen_NRK(UChar r3, UChar r1, UChar r2) -+s390_irgen_logicalK32(UChar r3, UChar r1, UChar r2, -+ const HChar *mnem, IROp op, Bool inv3, Bool inv) - { - IRTemp op2 = newTemp(Ity_I32); - IRTemp op3 = newTemp(Ity_I32); -@@ -5031,15 +5035,19 @@ s390_irgen_NRK(UChar r3, UChar r1, UChar r2) - - assign(op2, get_gpr_w1(r2)); - assign(op3, get_gpr_w1(r3)); -- assign(result, binop(Iop_And32, mkexpr(op2), mkexpr(op3))); -+ IRExpr* tmp = binop(op, mkexpr(op2), -+ inv3 ? unop(Iop_Not32, mkexpr(op3)) : mkexpr(op3)); -+ assign(result, inv ? unop(Iop_Not32, tmp) : tmp); - s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); - put_gpr_w1(r1, mkexpr(result)); - -- return "nrk"; -+ return mnem; - } - -+/* Same as s390_irgen_logicalK32, but for 64-bit operands. */ - static const HChar * --s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) -+s390_irgen_logicalK64(UChar r3, UChar r1, UChar r2, -+ const HChar *mnem, IROp op, Bool inv3, Bool inv) - { - IRTemp op2 = newTemp(Ity_I64); - IRTemp op3 = newTemp(Ity_I64); -@@ -5047,11 +5055,49 @@ s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) - - assign(op2, get_gpr_dw0(r2)); - assign(op3, get_gpr_dw0(r3)); -- assign(result, binop(Iop_And64, mkexpr(op2), mkexpr(op3))); -+ IRExpr* tmp = binop(op, mkexpr(op2), -+ inv3 ? unop(Iop_Not64, mkexpr(op3)) : mkexpr(op3)); -+ assign(result, inv ? unop(Iop_Not64, tmp) : tmp); - s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); - put_gpr_dw0(r1, mkexpr(result)); - -- return "ngrk"; -+ return mnem; -+} -+ -+static const HChar * -+s390_irgen_NRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "nrk", Iop_And32, False, False); -+} -+ -+static const HChar * -+s390_irgen_NGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "ngrk", Iop_And64, False, False); -+} -+ -+static const HChar * -+s390_irgen_NCRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "ncrk", Iop_And32, True, False); -+} -+ -+static const HChar * -+s390_irgen_NCGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "ncgrk", Iop_And64, True, False); -+} -+ -+static const HChar * -+s390_irgen_NNRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "nnrk", Iop_And32, False, True); -+} -+ -+static const HChar * -+s390_irgen_NNGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "nngrk", Iop_And64, False, True); - } - - static const HChar * -@@ -7071,33 +7117,25 @@ s390_irgen_XGR(UChar r1, UChar r2) - static const HChar * - s390_irgen_XRK(UChar r3, UChar r1, UChar r2) - { -- IRTemp op2 = newTemp(Ity_I32); -- IRTemp op3 = newTemp(Ity_I32); -- IRTemp result = newTemp(Ity_I32); -- -- assign(op2, get_gpr_w1(r2)); -- assign(op3, get_gpr_w1(r3)); -- assign(result, binop(Iop_Xor32, mkexpr(op2), mkexpr(op3))); -- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); -- put_gpr_w1(r1, mkexpr(result)); -- -- return "xrk"; -+ return s390_irgen_logicalK32(r3, r1, r2, "xrk", Iop_Xor32, False, False); - } - - static const HChar * - s390_irgen_XGRK(UChar r3, UChar r1, UChar r2) - { -- IRTemp op2 = newTemp(Ity_I64); -- IRTemp op3 = newTemp(Ity_I64); -- IRTemp result = newTemp(Ity_I64); -+ return s390_irgen_logicalK64(r3, r1, r2, "xgrk", Iop_Xor64, False, False); -+} - -- assign(op2, get_gpr_dw0(r2)); -- assign(op3, get_gpr_dw0(r3)); -- assign(result, binop(Iop_Xor64, mkexpr(op2), mkexpr(op3))); -- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); -- put_gpr_dw0(r1, mkexpr(result)); -+static const HChar * -+s390_irgen_NXRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "nxrk", Iop_Xor32, False, True); -+} - -- return "xgrk"; -+static const HChar * -+s390_irgen_NXGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "nxgrk", Iop_Xor64, False, True); - } - - static const HChar * -@@ -8920,33 +8958,37 @@ s390_irgen_OGR(UChar r1, UChar r2) - static const HChar * - s390_irgen_ORK(UChar r3, UChar r1, UChar r2) - { -- IRTemp op2 = newTemp(Ity_I32); -- IRTemp op3 = newTemp(Ity_I32); -- IRTemp result = newTemp(Ity_I32); -+ return s390_irgen_logicalK32(r3, r1, r2, "ork", Iop_Or32, False, False); -+} - -- assign(op2, get_gpr_w1(r2)); -- assign(op3, get_gpr_w1(r3)); -- assign(result, binop(Iop_Or32, mkexpr(op2), mkexpr(op3))); -- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); -- put_gpr_w1(r1, mkexpr(result)); -+static const HChar * -+s390_irgen_OGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "ogrk", Iop_Or64, False, False); -+} - -- return "ork"; -+static const HChar * -+s390_irgen_OCRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "ocrk", Iop_Or32, True, False); - } - - static const HChar * --s390_irgen_OGRK(UChar r3, UChar r1, UChar r2) -+s390_irgen_OCGRK(UChar r3, UChar r1, UChar r2) - { -- IRTemp op2 = newTemp(Ity_I64); -- IRTemp op3 = newTemp(Ity_I64); -- IRTemp result = newTemp(Ity_I64); -+ return s390_irgen_logicalK64(r3, r1, r2, "ocgrk", Iop_Or64, True, False); -+} - -- assign(op2, get_gpr_dw0(r2)); -- assign(op3, get_gpr_dw0(r3)); -- assign(result, binop(Iop_Or64, mkexpr(op2), mkexpr(op3))); -- s390_cc_thunk_putZ(S390_CC_OP_BITWISE, result); -- put_gpr_dw0(r1, mkexpr(result)); -+static const HChar * -+s390_irgen_NORK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK32(r3, r1, r2, "nork", Iop_Or32, False, True); -+} - -- return "ogrk"; -+static const HChar * -+s390_irgen_NOGRK(UChar r3, UChar r1, UChar r2) -+{ -+ return s390_irgen_logicalK64(r3, r1, r2, "nogrk", Iop_Or64, False, True); - } - - static const HChar * -@@ -20031,12 +20073,28 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb961: s390_format_RRF_U0RR(s390_irgen_CLGRT, RRF2_m3(ovl), - RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; -+ case 0xb964: s390_format_RRF_R0RR2(s390_irgen_NNGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb965: s390_format_RRF_R0RR2(s390_irgen_OCGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb966: s390_format_RRF_R0RR2(s390_irgen_NOGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb967: s390_format_RRF_R0RR2(s390_irgen_NXGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; - case 0xb972: s390_format_RRF_U0RR(s390_irgen_CRT, RRF2_m3(ovl), - RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; - case 0xb973: s390_format_RRF_U0RR(s390_irgen_CLRT, RRF2_m3(ovl), - RRF2_r1(ovl), RRF2_r2(ovl), - S390_XMNM_CAB); goto ok; -+ case 0xb974: s390_format_RRF_R0RR2(s390_irgen_NNRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb975: s390_format_RRF_R0RR2(s390_irgen_OCRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb976: s390_format_RRF_R0RR2(s390_irgen_NORK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; -+ case 0xb977: s390_format_RRF_R0RR2(s390_irgen_NXRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); goto ok; - case 0xb980: s390_format_RRE_RR(s390_irgen_NGR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb981: s390_format_RRE_RR(s390_irgen_OGR, RRE_r1(ovl), -@@ -20148,6 +20206,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9e4: s390_format_RRF_R0RR2(s390_irgen_NGRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -+ case 0xb9e5: s390_format_RRF_R0RR2(s390_irgen_NCGRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); -+ goto ok; - case 0xb9e6: s390_format_RRF_R0RR2(s390_irgen_OGRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -@@ -20178,6 +20239,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9f4: s390_format_RRF_R0RR2(s390_irgen_NRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -+ case 0xb9f5: s390_format_RRF_R0RR2(s390_irgen_NCRK, RRF4_r3(ovl), -+ RRF4_r1(ovl), RRF4_r2(ovl)); -+ goto ok; - case 0xb9f6: s390_format_RRF_R0RR2(s390_irgen_ORK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; --- -2.23.0 - -From 748421b31ab6b15cc849bd6b9588ad759b807324 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Wed, 27 Jan 2021 18:11:06 +0100 -Subject: [PATCH 02/13] s390x: Misc-insn-3, "select" instructions - -Add support for the instructions SELR, SELGR, and SELFHR. ---- - VEX/priv/guest_s390_toIR.c | 43 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 43 insertions(+) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index f8afd5b96..41265631b 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -3113,6 +3113,16 @@ s390_format_RRF_FUFF2(const HChar *(*irgen)(UChar, UChar, UChar, UChar), - s390_disasm(ENC5(MNM, FPR, FPR, FPR, UINT), mnm, r1, r2, r3, m4); - } - -+static void -+s390_format_RRF_RURR(const HChar *(*irgen)(UChar, UChar, UChar, UChar), -+ UChar r3, UChar m4, UChar r1, UChar r2) -+{ -+ const HChar *mnm = irgen(r3, m4, r1, r2); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) -+ s390_disasm(ENC5(MNM, GPR, GPR, GPR, UINT), mnm, r1, r3, r2, m4); -+} -+ - static void - s390_format_RRF_R0RR2(const HChar *(*irgen)(UChar r3, UChar r1, UChar r2), - UChar r3, UChar r1, UChar r2) -@@ -19254,6 +19264,30 @@ s390_irgen_VBPERM(UChar v1, UChar v2, UChar v3) - return "vbperm"; - } - -+static const HChar * -+s390_irgen_SELR(UChar r3, UChar m4, UChar r1, UChar r2) -+{ -+ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); -+ put_gpr_w1(r1, mkite(cond, get_gpr_w1(r2), get_gpr_w1(r3))); -+ return "selr"; -+} -+ -+static const HChar * -+s390_irgen_SELGR(UChar r3, UChar m4, UChar r1, UChar r2) -+{ -+ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); -+ put_gpr_dw0(r1, mkite(cond, get_gpr_dw0(r2), get_gpr_dw0(r3))); -+ return "selgr"; -+} -+ -+static const HChar * -+s390_irgen_SELFHR(UChar r3, UChar m4, UChar r1, UChar r2) -+{ -+ IRExpr* cond = binop(Iop_CmpNE32, s390_call_calculate_cond(m4), mkU32(0)); -+ put_gpr_w0(r1, mkite(cond, get_gpr_w0(r2), get_gpr_w0(r3))); -+ return "selfhr"; -+} -+ - /* New insns are added here. - If an insn is contingent on a facility being installed also - check whether the list of supported facilities in function -@@ -20163,6 +20197,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9bd: /* TRTRE */ goto unimplemented; - case 0xb9be: /* SRSTU */ goto unimplemented; - case 0xb9bf: /* TRTE */ goto unimplemented; -+ case 0xb9c0: s390_format_RRF_RURR(s390_irgen_SELFHR, RRF4_r3(ovl), -+ RRF4_m4(ovl), RRF4_r1(ovl), -+ RRF4_r2(ovl)); goto ok; - case 0xb9c8: s390_format_RRF_R0RR2(s390_irgen_AHHHR, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -@@ -20203,6 +20240,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, RRF3_r3(ovl), - RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_LOCGR); goto ok; -+ case 0xb9e3: s390_format_RRF_RURR(s390_irgen_SELGR, RRF4_r3(ovl), -+ RRF4_m4(ovl), RRF4_r1(ovl), -+ RRF4_r2(ovl)); goto ok; - case 0xb9e4: s390_format_RRF_R0RR2(s390_irgen_NGRK, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -@@ -20233,6 +20273,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9ed: s390_format_RRF_R0RR2(s390_irgen_MSGRKC, RRF4_r3(ovl), - RRF4_r1(ovl), RRF4_r2(ovl)); - goto ok; -+ case 0xb9f0: s390_format_RRF_RURR(s390_irgen_SELR, RRF4_r3(ovl), -+ RRF4_m4(ovl), RRF4_r1(ovl), -+ RRF4_r2(ovl)); goto ok; - case 0xb9f2: s390_format_RRF_U0RR(s390_irgen_LOCR, RRF3_r3(ovl), - RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_LOCR); goto ok; --- -2.23.0 - -From 31cbd583e858f47a86ada087d21a6abc13ba04f2 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Thu, 28 Jan 2021 19:47:00 +0100 -Subject: [PATCH 03/13] s390x: Misc-insn-3, new POPCNT variant - -Add support for the new POPCNT variant that has bit 0 of the M3 field set -and yields the total number of one bits in its 64-bit operand. ---- - VEX/priv/guest_s390_toIR.c | 44 ++++++++++++++++++++++++++------------ - 1 file changed, 30 insertions(+), 14 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 41265631b..ca9e6dc03 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -3073,6 +3073,20 @@ s390_format_RRF_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), - s390_disasm(ENC3(XMNM, GPR, GPR), xmnm_kind, m3, r1, r2); - } - -+static void -+s390_format_RRFa_U0RR(const HChar *(*irgen)(UChar m3, UChar r1, UChar r2), -+ UChar m3, UChar r1, UChar r2) -+{ -+ const HChar *mnm = irgen(m3, r1, r2); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) { -+ if (m3 != 0) -+ s390_disasm(ENC4(MNM, GPR, GPR, UINT), mnm, r1, r2, m3); -+ else -+ s390_disasm(ENC3(MNM, GPR, GPR), mnm, r1, r2); -+ } -+} -+ - static void - s390_format_RRF_F0FF2(const HChar *(*irgen)(UChar, UChar, UChar), - UChar r3, UChar r1, UChar r2) -@@ -15112,30 +15126,32 @@ s390_irgen_FLOGR(UChar r1, UChar r2) - } - - static const HChar * --s390_irgen_POPCNT(UChar r1, UChar r2) -+s390_irgen_POPCNT(UChar m3, UChar r1, UChar r2) - { -- Int i; -+ s390_insn_assert("popcnt", (m3 & 7) == 0); -+ -+ static const ULong masks[] = { -+ 0x5555555555555555, 0x3333333333333333, 0x0F0F0F0F0F0F0F0F, -+ 0x00FF00FF00FF00FF, 0x0000FFFF0000FFFF, 0x00000000FFFFFFFF, -+ }; -+ Int i, n; - IRTemp val = newTemp(Ity_I64); -- IRTemp mask[3]; - - assign(val, get_gpr_dw0(r2)); -- for (i = 0; i < 3; i++) { -- mask[i] = newTemp(Ity_I64); -- } -- assign(mask[0], mkU64(0x5555555555555555ULL)); -- assign(mask[1], mkU64(0x3333333333333333ULL)); -- assign(mask[2], mkU64(0x0F0F0F0F0F0F0F0FULL)); -- for (i = 0; i < 3; i++) { -+ n = (m3 & 8) ? 6 : 3; -+ for (i = 0; i < n; i++) { -+ IRTemp mask = newTemp(Ity_I64); - IRTemp tmp = newTemp(Ity_I64); - -+ assign (mask, mkU64(masks[i])); - assign(tmp, - binop(Iop_Add64, - binop(Iop_And64, - mkexpr(val), -- mkexpr(mask[i])), -+ mkexpr(mask)), - binop(Iop_And64, - binop(Iop_Shr64, mkexpr(val), mkU8(1 << i)), -- mkexpr(mask[i])))); -+ mkexpr(mask)))); - val = tmp; - } - s390_cc_thunk_putZ(S390_CC_OP_BITWISE, val); -@@ -20235,8 +20251,8 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - case 0xb9e0: s390_format_RRF_U0RR(s390_irgen_LOCFHR, RRF3_r3(ovl), - RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_LOCFHR); goto ok; -- case 0xb9e1: s390_format_RRE_RR(s390_irgen_POPCNT, RRE_r1(ovl), -- RRE_r2(ovl)); goto ok; -+ case 0xb9e1: s390_format_RRFa_U0RR(s390_irgen_POPCNT, RRF3_r3(ovl), -+ RRF3_r1(ovl), RRF3_r2(ovl)); goto ok; - case 0xb9e2: s390_format_RRF_U0RR(s390_irgen_LOCGR, RRF3_r3(ovl), - RRF3_r1(ovl), RRF3_r2(ovl), - S390_XMNM_LOCGR); goto ok; --- -2.23.0 - -From 64352d57f93711ce76fd481558dcf6d65e26b19f Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Fri, 29 Jan 2021 20:13:05 +0100 -Subject: [PATCH 04/13] s390x: Misc-insn-3, MVCRL - -Add support for the "move right to left" instruction MVCRL. ---- - VEX/priv/guest_s390_toIR.c | 47 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 47 insertions(+) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index ca9e6dc03..9f7d98f8c 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -3562,6 +3562,25 @@ s390_format_SS_L0RDRD(const HChar *(*irgen)(UChar, IRTemp, IRTemp), - s390_disasm(ENC3(MNM, UDLB, UDXB), mnm, d1, l, b1, d2, 0, b2); - } - -+static void -+s390_format_SSE_RDRD(const HChar *(*irgen)(IRTemp, IRTemp), -+ UChar b1, UShort d1, UChar b2, UShort d2) -+{ -+ const HChar *mnm; -+ IRTemp op1addr = newTemp(Ity_I64); -+ IRTemp op2addr = newTemp(Ity_I64); -+ -+ assign(op1addr, binop(Iop_Add64, mkU64(d1), b1 != 0 ? get_gpr_dw0(b1) : -+ mkU64(0))); -+ assign(op2addr, binop(Iop_Add64, mkU64(d2), b2 != 0 ? get_gpr_dw0(b2) : -+ mkU64(0))); -+ -+ mnm = irgen(op1addr, op2addr); -+ -+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) -+ s390_disasm(ENC2(UDXB, UDXB), mnm, d1, 0, b1, d2, 0, b2); -+} -+ - static void - s390_format_SIL_RDI(const HChar *(*irgen)(UShort i2, IRTemp op1addr), - UChar b1, UShort d1, UShort i2) -@@ -13667,6 +13686,31 @@ s390_irgen_MVCIN(UChar length, IRTemp start1, IRTemp start2) - return "mvcin"; - } - -+static const HChar * -+s390_irgen_MVCRL(IRTemp op1addr, IRTemp op2addr) -+{ -+ IRTemp counter = newTemp(Ity_I64); -+ IRTemp offset = newTemp(Ity_I64); -+ -+ assign(counter, get_counter_dw0()); -+ /* offset = length - 1 - counter, where length-1 is specified in r0 */ -+ assign(offset, -+ binop(Iop_Sub64, -+ unop(Iop_16Uto64, -+ binop(Iop_And16, get_gpr_hw3(0), mkU16(0xfff))), -+ mkexpr(counter))); -+ -+ store(binop(Iop_Add64, mkexpr(op1addr), mkexpr(offset)), -+ load(Ity_I8, binop(Iop_Add64, mkexpr(op2addr), mkexpr(offset)))); -+ -+ /* Check for end of field */ -+ put_counter_dw0(binop(Iop_Add64, mkexpr(counter), mkU64(1))); -+ iterate_if(binop(Iop_CmpNE64, mkexpr(offset), mkU64(0))); -+ put_counter_dw0(mkU64(0)); -+ -+ return "mvcrl"; -+} -+ - static const HChar * - s390_irgen_MVCL(UChar r1, UChar r2) - { -@@ -22217,6 +22261,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe500ULL: /* LASP */ goto unimplemented; - case 0xe501ULL: /* TPROT */ goto unimplemented; - case 0xe502ULL: /* STRAG */ goto unimplemented; -+ case 0xe50aULL: s390_format_SSE_RDRD(s390_irgen_MVCRL, -+ SS_b1(ovl), SS_d1(ovl), -+ SS_b2(ovl), SS_d2(ovl)); goto ok; - case 0xe50eULL: /* MVCSK */ goto unimplemented; - case 0xe50fULL: /* MVCDK */ goto unimplemented; - case 0xe544ULL: s390_format_SIL_RDI(s390_irgen_MVHHI, SIL_b1(ovl), --- -2.23.0 - -From 6cc4d66cc3a999253d9a57e2b5c75aeb67f77918 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 2 Feb 2021 20:15:02 +0100 -Subject: [PATCH 05/13] s390x: Misc-insn-3, test case - -Add a test case for the new instructions in the miscellaneous instruction -extensions facitility 3. ---- - .gitignore | 1 + - none/tests/s390x/Makefile.am | 3 +- - none/tests/s390x/misc3.c | 182 ++++++++++++++++++++++++++++++ - none/tests/s390x/misc3.stderr.exp | 2 + - none/tests/s390x/misc3.stdout.exp | 103 +++++++++++++++++ - none/tests/s390x/misc3.vgtest | 1 + - 6 files changed, 291 insertions(+), 1 deletion(-) - create mode 100644 none/tests/s390x/misc3.c - create mode 100644 none/tests/s390x/misc3.stderr.exp - create mode 100644 none/tests/s390x/misc3.stdout.exp - create mode 100644 none/tests/s390x/misc3.vgtest - -diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am -index a0fb92ef5..2fd45ec1e 100644 ---- a/none/tests/s390x/Makefile.am -+++ b/none/tests/s390x/Makefile.am -@@ -19,7 +19,8 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ - spechelper-ltr spechelper-or \ - spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ - spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ -- vector_float add-z14 sub-z14 mul-z14 bic -+ vector_float add-z14 sub-z14 mul-z14 bic \ -+ misc3 - - if BUILD_DFP_TESTS - INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo -diff --git a/none/tests/s390x/misc3.c b/none/tests/s390x/misc3.c -new file mode 100644 -index 000000000..ae6e8d4c2 ---- /dev/null -+++ b/none/tests/s390x/misc3.c -@@ -0,0 +1,182 @@ -+#include -+ -+/* -- Logical instructions -- */ -+ -+#define TEST_GENERATE(opcode,insn) \ -+ static void test_##insn(unsigned long a, unsigned long b) \ -+ { \ -+ unsigned long out = 0xdecaffee42424242; \ -+ int cc; \ -+ \ -+ __asm__( \ -+ "cr 0,0\n\t" /* Clear CC */ \ -+ ".insn rrf,0x" #opcode "0000,%[out],%[a],%[b],0\n\t" \ -+ "ipm %[cc]\n\t" \ -+ "srl %[cc],28\n" \ -+ : [out] "+d" (out), \ -+ [cc] "=d" (cc) \ -+ : [a] "d" (a), \ -+ [b] "d" (b) \ -+ : "cc"); \ -+ \ -+ printf("\t%016lx %016lx -> %016lx cc=%d\n", \ -+ a, b, out, cc); \ -+ } -+ -+#define TEST_EXEC(opcode,insn) \ -+ do { \ -+ puts(#insn); \ -+ test_##insn(0, 0); \ -+ test_##insn(0, -1); \ -+ test_##insn(-1, 0); \ -+ test_##insn(-1, -1); \ -+ test_##insn(0x012345678abcdef, 0); \ -+ test_##insn(0x012345678abcdef, -1); \ -+ test_##insn(0x55555555aaaaaaaa, 0xaaaaaaaa55555555); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(b9f5,ncrk); \ -+ XTEST(b9e5,ncgrk); \ -+ XTEST(b974,nnrk); \ -+ XTEST(b964,nngrk); \ -+ XTEST(b976,nork); \ -+ XTEST(b966,nogrk); \ -+ XTEST(b977,nxrk); \ -+ XTEST(b967,nxgrk); \ -+ XTEST(b975,ocrk); \ -+ XTEST(b965,ocgrk); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_logical_insns() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+#undef INSNS -+#undef TEST_GENERATE -+#undef TEST_EXEC -+ -+ -+/* -- Full population count -- */ -+ -+static void test_popcnt(unsigned long op2) -+{ -+ unsigned long result; -+ int cc; -+ -+ __asm__(".insn rrf,0xb9e10000,%[result],%[op2],8,0\n\t" -+ "ipm %[cc]\n\t" -+ "srl %[cc],28\n" -+ : [result]"=d" (result), -+ [cc]"=d" (cc) -+ : [op2]"d" (op2) -+ : "cc"); -+ printf("\t%016lx -> %2lu cc=%d\n", op2, result, cc); -+} -+ -+static int test_all_popcnt() -+{ -+ puts("popcnt"); -+ test_popcnt(0); -+ test_popcnt(1); -+ test_popcnt(0x8000000000000000); -+ test_popcnt(-1UL); -+ test_popcnt(0xff427e3800556bcd); -+ return 0; -+} -+ -+/* -- Select -- */ -+ -+#define TEST_GENERATE(opcode,insn) \ -+ static void test_##insn(unsigned long a, unsigned long b) \ -+ { \ -+ unsigned long out0 = 0x0cafebad0badcafe; \ -+ unsigned long out1 = 0x0badcafe0cafebad; \ -+ \ -+ __asm__( \ -+ "cr 0,0\n\t" /* Clear CC */ \ -+ ".insn rrf,0x" #opcode "0000,%[out0],%[a],%[b],8\n\t" \ -+ ".insn rrf,0x" #opcode "0000,%[out1],%[a],%[b],7\n\t" \ -+ : [out0] "+d" (out0), \ -+ [out1] "+d" (out1) \ -+ : [a] "d" (a), \ -+ [b] "d" (b) \ -+ : ); \ -+ \ -+ printf("\t%016lx %016lx -> %016lx %016lx\n", \ -+ a, b, out0, out1); \ -+ } -+ -+#define TEST_EXEC(opcode,insn) \ -+ do { \ -+ puts(#insn); \ -+ test_##insn(-1, 0); \ -+ test_##insn(0, -1); \ -+ test_##insn(0x1234567890abcdef, 0xfedcba9876543210); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(b9f0,selr); \ -+ XTEST(b9e3,selgr); \ -+ XTEST(b9c0,selfhr); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_select() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+#undef INSNS -+#undef TEST_GENERATE -+#undef TEST_EXEC -+ -+ -+/* -- Move right to left -- */ -+ -+static void test_mvcrl(void *to, void *from, size_t len) -+{ -+ len -= 1; -+ __asm__("lgr 0,%[len]\n\t" -+ ".insn sse,0xe50a00000000,%[to],%[from]\n\t" -+ : [to] "+Q" (*(struct { char c[len]; } *) to) -+ : [from] "Q" (*(struct { char c[len]; } *) from), -+ [len] "d" (len) -+ : ); -+} -+ -+static void test_all_mvcrl() -+{ -+ static const char pattern[] = -+ "abcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -+ char buf[4 * sizeof(pattern) - 2]; -+ -+ test_mvcrl(buf, (char *) pattern, sizeof(pattern)); -+ test_mvcrl(buf + sizeof(pattern) - 1, buf, sizeof(pattern)); -+ test_mvcrl(buf + 2 * sizeof(pattern) - 2, buf, 2 * sizeof(pattern) - 1); -+ test_mvcrl(buf + 32, buf + 10, 63); -+ test_mvcrl(buf + 2, buf + 1, 256); -+ test_mvcrl(buf + 254, buf + 256, 2); -+ puts("mvcrl"); -+ for (int i = 0; i < 256; i += 64) { -+ printf("\t%.64s\n", buf + i); -+ } -+} -+ -+ -+int main() -+{ -+ test_all_logical_insns(); -+ test_all_popcnt(); -+ test_all_select(); -+ test_all_mvcrl(); -+ return 0; -+} -diff --git a/none/tests/s390x/misc3.stderr.exp b/none/tests/s390x/misc3.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/misc3.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/misc3.stdout.exp b/none/tests/s390x/misc3.stdout.exp -new file mode 100644 -index 000000000..caaba4960 ---- /dev/null -+++ b/none/tests/s390x/misc3.stdout.exp -@@ -0,0 +1,103 @@ -+ncrk -+ 0000000000000000 0000000000000000 -> decaffee00000000 cc=0 -+ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> decaffee78abcdef cc=1 -+ 0012345678abcdef ffffffffffffffff -> decaffee00000000 cc=0 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeaaaaaaaa cc=1 -+ncgrk -+ 0000000000000000 0000000000000000 -> 0000000000000000 cc=0 -+ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> 0012345678abcdef cc=1 -+ 0012345678abcdef ffffffffffffffff -> 0000000000000000 cc=0 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> 55555555aaaaaaaa cc=1 -+nnrk -+ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> decaffeeffffffff cc=1 -+ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> decaffeeffffffff cc=1 -+ 0012345678abcdef ffffffffffffffff -> decaffee87543210 cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeffffffff cc=1 -+nngrk -+ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> ffffffffffffffff cc=1 -+ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> ffffffffffffffff cc=1 -+ 0012345678abcdef ffffffffffffffff -> ffedcba987543210 cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> ffffffffffffffff cc=1 -+nork -+ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> decaffee00000000 cc=0 -+ ffffffffffffffff ffffffffffffffff -> decaffee00000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> decaffee87543210 cc=1 -+ 0012345678abcdef ffffffffffffffff -> decaffee00000000 cc=0 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffee00000000 cc=0 -+nogrk -+ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> 0000000000000000 cc=0 -+ ffffffffffffffff ffffffffffffffff -> 0000000000000000 cc=0 -+ 0012345678abcdef 0000000000000000 -> ffedcba987543210 cc=1 -+ 0012345678abcdef ffffffffffffffff -> 0000000000000000 cc=0 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> 0000000000000000 cc=0 -+nxrk -+ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> decaffee00000000 cc=0 -+ ffffffffffffffff ffffffffffffffff -> decaffeeffffffff cc=1 -+ 0012345678abcdef 0000000000000000 -> decaffee87543210 cc=1 -+ 0012345678abcdef ffffffffffffffff -> decaffee78abcdef cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffee00000000 cc=0 -+nxgrk -+ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> 0000000000000000 cc=0 -+ ffffffffffffffff ffffffffffffffff -> ffffffffffffffff cc=1 -+ 0012345678abcdef 0000000000000000 -> ffedcba987543210 cc=1 -+ 0012345678abcdef ffffffffffffffff -> 0012345678abcdef cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> 0000000000000000 cc=0 -+ocrk -+ 0000000000000000 0000000000000000 -> decaffeeffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> decaffee00000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> decaffeeffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> decaffeeffffffff cc=1 -+ 0012345678abcdef 0000000000000000 -> decaffeeffffffff cc=1 -+ 0012345678abcdef ffffffffffffffff -> decaffee78abcdef cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> decaffeeaaaaaaaa cc=1 -+ocgrk -+ 0000000000000000 0000000000000000 -> ffffffffffffffff cc=1 -+ 0000000000000000 ffffffffffffffff -> 0000000000000000 cc=0 -+ ffffffffffffffff 0000000000000000 -> ffffffffffffffff cc=1 -+ ffffffffffffffff ffffffffffffffff -> ffffffffffffffff cc=1 -+ 0012345678abcdef 0000000000000000 -> ffffffffffffffff cc=1 -+ 0012345678abcdef ffffffffffffffff -> 0012345678abcdef cc=1 -+ 55555555aaaaaaaa aaaaaaaa55555555 -> 55555555aaaaaaaa cc=1 -+popcnt -+ 0000000000000000 -> 0 cc=0 -+ 0000000000000001 -> 1 cc=1 -+ 8000000000000000 -> 1 cc=1 -+ ffffffffffffffff -> 64 cc=1 -+ ff427e3800556bcd -> 33 cc=1 -+selr -+ ffffffffffffffff 0000000000000000 -> 0cafebadffffffff 0badcafe00000000 -+ 0000000000000000 ffffffffffffffff -> 0cafebad00000000 0badcafeffffffff -+ 1234567890abcdef fedcba9876543210 -> 0cafebad90abcdef 0badcafe76543210 -+selgr -+ ffffffffffffffff 0000000000000000 -> ffffffffffffffff 0000000000000000 -+ 0000000000000000 ffffffffffffffff -> 0000000000000000 ffffffffffffffff -+ 1234567890abcdef fedcba9876543210 -> 1234567890abcdef fedcba9876543210 -+selfhr -+ ffffffffffffffff 0000000000000000 -> ffffffff0badcafe 000000000cafebad -+ 0000000000000000 ffffffffffffffff -> 000000000badcafe ffffffff0cafebad -+ 1234567890abcdef fedcba9876543210 -> 123456780badcafe fedcba980cafebad -+mvcrl -+ abbcdefghijklmnopqrstuvwxyz-01234klmnopqrstuvwxyz-0123456789.ABC -+ DEFGHIJKLMNOPQRSTUVWXYZabcdefghi456789.ABCDEFGHIJKLMNOPQRSTUVWXY -+ Zabcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWXY -+ Zabcdefghijklmnopqrstuvwxyz-0123456789.ABCDEFGHIJKLMNOPQRSTUVWZ -diff --git a/none/tests/s390x/misc3.vgtest b/none/tests/s390x/misc3.vgtest -new file mode 100644 -index 000000000..d051a06bd ---- /dev/null -+++ b/none/tests/s390x/misc3.vgtest -@@ -0,0 +1 @@ -+prog: misc3 --- -2.23.0 - -From 401b51d79886362d1962dc487db45ac91462eaa0 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Wed, 7 Apr 2021 12:29:32 +0200 -Subject: [PATCH 06/13] s390x: Vec-enh-2, extend VSL, VSRA, and VSRL - -The vector-enhancements facility 2 extends the existing bitwise vector -shift instructions VSL, VSRA, and VSRL. Now they allow the shift -vector (the third operand) to contain different shift amounts for each -byte. Add support for these new forms. ---- - VEX/priv/guest_s390_toIR.c | 58 ++++++++++++++++++++++++++++++-------- - 1 file changed, 47 insertions(+), 11 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 9f7d98f8c..622d5a02e 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -17983,30 +17983,66 @@ s390_irgen_VERLL(UChar v1, IRTemp op2addr, UChar v3, UChar m4) - static const HChar * - s390_irgen_VSL(UChar v1, UChar v2, UChar v3) - { -- IRTemp shift_amount = newTemp(Ity_I8); -- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); -- -- put_vr_qw(v1, binop(Iop_ShlV128, get_vr_qw(v2), mkexpr(shift_amount))); -+ IRTemp a = newTemp(Ity_V128); -+ IRTemp b = newTemp(Ity_V128); -+ -+ assign(a, get_vr_qw(v2)); -+ assign(b, get_vr_qw(v3)); -+ -+ put_vr_qw(v1, -+ binop(Iop_OrV128, -+ binop(Iop_Shl8x16, mkexpr(a), mkexpr(b)), -+ binop(Iop_Shr8x16, -+ binop(Iop_Shr8x16, -+ binop(Iop_ShlV128, mkexpr(a), mkU8(8)), -+ unop(Iop_NotV128, mkexpr(b))), -+ unop(Iop_Dup8x16, mkU8(1))))); - return "vsl"; - } - - static const HChar * - s390_irgen_VSRL(UChar v1, UChar v2, UChar v3) - { -- IRTemp shift_amount = newTemp(Ity_I8); -- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); -+ IRTemp a = newTemp(Ity_V128); -+ IRTemp b = newTemp(Ity_V128); - -- put_vr_qw(v1, binop(Iop_ShrV128, get_vr_qw(v2), mkexpr(shift_amount))); -+ assign(a, get_vr_qw(v2)); -+ assign(b, get_vr_qw(v3)); -+ -+ put_vr_qw(v1, -+ binop(Iop_OrV128, -+ binop(Iop_Shr8x16, mkexpr(a), mkexpr(b)), -+ binop(Iop_Shl8x16, -+ binop(Iop_Shl8x16, -+ binop(Iop_ShrV128, mkexpr(a), mkU8(8)), -+ unop(Iop_NotV128, mkexpr(b))), -+ unop(Iop_Dup8x16, mkU8(1))))); - return "vsrl"; - } - - static const HChar * - s390_irgen_VSRA(UChar v1, UChar v2, UChar v3) - { -- IRTemp shift_amount = newTemp(Ity_I8); -- assign(shift_amount, binop(Iop_And8, get_vr_b7(v3), mkU8(0b00000111))); -- -- put_vr_qw(v1, binop(Iop_SarV128, get_vr_qw(v2), mkexpr(shift_amount))); -+ IRTemp a = newTemp(Ity_V128); -+ IRTemp b = newTemp(Ity_V128); -+ -+ assign(a, get_vr_qw(v2)); -+ assign(b, get_vr_qw(v3)); -+ -+ /* Shift-right: first byte arithmetically, all others logically */ -+ IRExpr* elems_shifted = -+ binop(Iop_Sar8x16, -+ binop(Iop_Shr8x16, mkexpr(a), -+ binop(Iop_AndV128, mkexpr(b), mkV128(0x7fff))), -+ binop(Iop_AndV128, mkexpr(b), mkV128(0x8000))); -+ /* Then OR the appropriate bits from the byte to the left */ -+ put_vr_qw(v1, -+ binop(Iop_OrV128, elems_shifted, -+ binop(Iop_Shl8x16, -+ binop(Iop_Shl8x16, -+ binop(Iop_ShrV128, mkexpr(a), mkU8(8)), -+ unop(Iop_NotV128, mkexpr(b))), -+ unop(Iop_Dup8x16, mkU8(1))))); - return "vsra"; - } - --- -2.23.0 - -From 3fdf065d0bf26a02d6d93a812a6571a287379c36 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Thu, 11 Feb 2021 20:02:03 +0100 -Subject: [PATCH 07/13] s390x: Vec-enh-2, extend VCDG, VCDLG, VCGD, and VCLGD - -The vector-enhancements facility 2 extends the vector floating-point -conversion instructions VCDG, VCDLG, VCGD, and VCLGD. In addition to -64-bit elements, they now also handle 32-bit elements. Add support for -these new forms. ---- - VEX/priv/guest_s390_toIR.c | 36 ++++++++++++++++++++---------------- - 1 file changed, 20 insertions(+), 16 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 622d5a02e..11271a1c9 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -18794,44 +18794,48 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType, Bool rounding, - static const HChar * - s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vcdg", m3 == 3); -- -- s390_vector_fp_convert(Iop_I64StoF64, Ity_I64, Ity_F64, True, -- v1, v2, m3, m4, m5); -+ s390_insn_assert("vcdg", m3 == 2 || m3 == 3); - -+ s390_vector_fp_convert(m3 == 2 ? Iop_I32StoF32 : Iop_I64StoF64, -+ m3 == 2 ? Ity_I32 : Ity_I64, -+ m3 == 2 ? Ity_F32 : Ity_F64, -+ True, v1, v2, m3, m4, m5); - return "vcdg"; - } - - static const HChar * - s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vcdlg", m3 == 3); -- -- s390_vector_fp_convert(Iop_I64UtoF64, Ity_I64, Ity_F64, True, -- v1, v2, m3, m4, m5); -+ s390_insn_assert("vcdlg", m3 == 2 || m3 == 3); - -+ s390_vector_fp_convert(m3 == 2 ? Iop_I32UtoF32 : Iop_I64UtoF64, -+ m3 == 2 ? Ity_I32 : Ity_I64, -+ m3 == 2 ? Ity_F32 : Ity_F64, -+ True, v1, v2, m3, m4, m5); - return "vcdlg"; - } - - static const HChar * - s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vcgd", m3 == 3); -- -- s390_vector_fp_convert(Iop_F64toI64S, Ity_F64, Ity_I64, True, -- v1, v2, m3, m4, m5); -+ s390_insn_assert("vcgd", m3 == 2 || m3 == 3); - -+ s390_vector_fp_convert(m3 == 2 ? Iop_F32toI32S : Iop_F64toI64S, -+ m3 == 2 ? Ity_F32 : Ity_F64, -+ m3 == 2 ? Ity_I32 : Ity_I64, -+ True, v1, v2, m3, m4, m5); - return "vcgd"; - } - - static const HChar * - s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vclgd", m3 == 3); -- -- s390_vector_fp_convert(Iop_F64toI64U, Ity_F64, Ity_I64, True, -- v1, v2, m3, m4, m5); -+ s390_insn_assert("vclgd", m3 == 2 || m3 == 3); - -+ s390_vector_fp_convert(m3 == 2 ? Iop_F32toI32U : Iop_F64toI64U, -+ m3 == 2 ? Ity_F32 : Ity_F64, -+ m3 == 2 ? Ity_I32 : Ity_I64, -+ True, v1, v2, m3, m4, m5); - return "vclgd"; - } - --- -2.23.0 - -From d195bf17388572e85474c7ded4b5bd0e4774637d Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 16 Feb 2021 16:19:31 +0100 -Subject: [PATCH 08/13] s390x: Vec-enh-2, VLBR and friends - -Add support for the new byte- and element-swapping vector load/store -instructions VLEBRH, VLEBRG, VLEBRF, VLLEBRZ, VLBRREP, VLBR, VLER, -VSTEBRH, VSTEBRG, VSTEBRF, VSTBR, and VSTER. ---- - VEX/priv/guest_s390_toIR.c | 256 +++++++++++++++++++++++++++++++++++++ - VEX/priv/host_s390_isel.c | 9 ++ - 2 files changed, 265 insertions(+) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 11271a1c9..f65b42705 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -19388,6 +19388,209 @@ s390_irgen_SELFHR(UChar r3, UChar m4, UChar r1, UChar r2) - return "selfhr"; - } - -+/* Helper function that byte-swaps each element of its V128 input operand */ -+static IRExpr * -+s390_byteswap_elements(IRExpr* v, UChar m) -+{ -+ static const ULong perm[4][2] = { -+ { 0x0100030205040706, 0x09080b0a0d0c0f0e }, /* 2-byte elements */ -+ { 0x0302010007060504, 0x0b0a09080f0e0d0c }, /* 4-byte elements */ -+ { 0x0706050403020100, 0x0f0e0d0c0b0a0908 }, /* 8-byte elements */ -+ { 0x0f0e0d0c0b0a0908, 0x0706050403020100 }, /* whole vector */ -+ }; -+ return binop(Iop_Perm8x16, v, binop(Iop_64HLtoV128, -+ mkU64(perm[m - 1][0]), -+ mkU64(perm[m - 1][1]))); -+} -+ -+/* Helper function that reverses the elements of its V128 input operand */ -+static IRExpr * -+s390_reverse_elements(IRExpr* v, UChar m) -+{ -+ static const ULong perm[3][2] = { -+ { 0x0e0f0c0d0a0b0809, 0x0607040502030001 }, /* 2-byte elements */ -+ { 0x0c0d0e0f08090a0b, 0x0405060700010203 }, /* 4-byte elements */ -+ { 0x08090a0b0c0d0e0f, 0x0001020304050607 }, /* 8-byte elements */ -+ }; -+ return binop(Iop_Perm8x16, v, binop(Iop_64HLtoV128, -+ mkU64(perm[m - 1][0]), -+ mkU64(perm[m - 1][1]))); -+} -+ -+static const HChar * -+s390_irgen_VLBR(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vlbr", m3 >= 1 && m3 <= 4); -+ put_vr_qw(v1, s390_byteswap_elements(load(Ity_V128, mkexpr(op2addr)), m3)); -+ return "vlbr"; -+} -+ -+static const HChar * -+s390_irgen_VSTBR(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vstbr", m3 >= 1 && m3 <= 4); -+ store(mkexpr(op2addr), s390_byteswap_elements(get_vr_qw(v1), m3)); -+ return "vstbr"; -+} -+ -+static const HChar * -+s390_irgen_VLER(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vler", m3 >= 1 && m3 <= 3); -+ put_vr_qw(v1, s390_reverse_elements(load(Ity_V128, mkexpr(op2addr)), m3)); -+ return "vler"; -+} -+ -+static const HChar * -+s390_irgen_VSTER(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vstbr", m3 >= 1 && m3 <= 4); -+ store(mkexpr(op2addr), s390_reverse_elements(get_vr_qw(v1), m3)); -+ return "vstbr"; -+} -+ -+/* Helper function that combines its two V128 operands by replacing element 'to' -+ in 'a' by byte-swapped element 'from' in 'b' */ -+static IRExpr * -+s390_insert_byteswapped(IRExpr* a, IRExpr* b, UChar m, UChar to, UChar from) -+{ -+ UInt elem_size = 1U << m; -+ UInt start = elem_size * to; -+ UInt end = start + elem_size - 1; -+ UInt offs = end + elem_size * from + 16; -+ UInt i; -+ -+ ULong permH = 0; -+ for (i = 0; i < 8; i++) { -+ permH = (permH << 8) | (i >= start && i <= end ? offs - i : i); -+ } -+ ULong permL = 0; -+ for (i = 8; i < 16; i++) { -+ permL = (permL << 8) | (i >= start && i <= end ? offs - i : i); -+ } -+ return triop(Iop_Perm8x16x2, a, b, binop(Iop_64HLtoV128, -+ mkU64(permH), mkU64(permL))); -+} -+ -+static const HChar * -+s390_irgen_VLEBRH(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vlebrh", m3 <= 7); -+ IRTemp op2 = newTemp(Ity_I16); -+ assign(op2, load(Ity_I16, mkexpr(op2addr))); -+ put_vr(v1, Ity_I16, m3, binop(Iop_Or16, -+ binop(Iop_Shl16, mkexpr(op2), mkU8(8)), -+ binop(Iop_Shr16, mkexpr(op2), mkU8(8)))); -+ return "vlebrh"; -+} -+ -+static const HChar * -+s390_irgen_VLEBRF(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vlebrf", m3 <= 3); -+ IRTemp op1 = newTemp(Ity_V128); -+ assign(op1, get_vr_qw(v1)); -+ IRTemp op2 = newTemp(Ity_I64); -+ assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkexpr(op2addr)))); -+ IRExpr* b = binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)); -+ put_vr_qw(v1, s390_insert_byteswapped(mkexpr(op1), b, 2, m3, 3)); -+ return "vlebrf"; -+} -+ -+static const HChar * -+s390_irgen_VLEBRG(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vlebrg", m3 <= 1); -+ IRTemp op1 = newTemp(Ity_V128); -+ assign(op1, get_vr_qw(v1)); -+ IRTemp op2 = newTemp(Ity_I64); -+ assign(op2, load(Ity_I64, mkexpr(op2addr))); -+ IRExpr* b = binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)); -+ put_vr_qw(v1, s390_insert_byteswapped(mkexpr(op1), b, 3, m3, 1)); -+ return "vlebrg"; -+} -+ -+static const HChar * -+s390_irgen_VLBRREP(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vlbrrep", m3 >= 1 && m3 <= 3); -+ static const ULong perm[3] = { -+ 0x0f0e0f0e0f0e0f0e, /* 2-byte element */ -+ 0x0f0e0d0c0f0e0d0c, /* 4-byte element */ -+ 0x0f0e0d0c0b0a0908 /* 8-byte element */ -+ }; -+ IRExpr* permHL = mkU64(perm[m3 - 1]); -+ IRTemp op2 = newTemp(Ity_I64); -+ if (m3 == 3) -+ assign(op2, load(Ity_I64, mkexpr(op2addr))); -+ else -+ assign(op2, unop(m3 == 2 ? Iop_32Uto64 : Iop_16Uto64, -+ load(s390_vr_get_type(m3), mkexpr(op2addr)))); -+ put_vr_qw(v1, binop(Iop_Perm8x16, -+ binop(Iop_64HLtoV128, mkexpr(op2), mkexpr(op2)), -+ binop(Iop_64HLtoV128, permHL, permHL))); -+ return "vlbrrep"; -+} -+ -+static const HChar * -+s390_irgen_VLLEBRZ(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vllebrz", (m3 >= 1 && m3 <= 3) || m3 == 6); -+ static const ULong perm[6] = { -+ 0x0000000000000f0e, /* 2-byte element */ -+ 0x000000000f0e0d0c, /* 4-byte element */ -+ 0x0f0e0d0c0b0a0908, /* 8-byte element */ -+ 0, /* invalid (4) */ -+ 0, /* invalid (5) */ -+ 0x0f0e0d0c00000000, /* 4-byte element, left-aligned */ -+ }; -+ IRExpr* permH = mkU64(perm[m3 - 1]); -+ IRTemp op2 = newTemp(Ity_I64); -+ if (m3 == 3) -+ assign(op2, load(Ity_I64, mkexpr(op2addr))); -+ else -+ assign(op2, unop((m3 & 3) == 2 ? Iop_32Uto64 : Iop_16Uto64, -+ load(s390_vr_get_type(m3 & 3), mkexpr(op2addr)))); -+ put_vr_qw(v1, binop(Iop_Perm8x16, -+ binop(Iop_64HLtoV128, mkU64(0), mkexpr(op2)), -+ binop(Iop_64HLtoV128, permH, mkU64(0)))); -+ return "vllebrz"; -+} -+ -+static const HChar * -+s390_irgen_VSTEBRH(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vstebrh", m3 <= 7); -+ IRTemp op1 = newTemp(Ity_I16); -+ assign(op1, get_vr(v1, Ity_I16, m3)); -+ store(mkexpr(op2addr), binop(Iop_Or16, -+ binop(Iop_Shl16, mkexpr(op1), mkU8(8)), -+ binop(Iop_Shr16, mkexpr(op1), mkU8(8)))); -+ return "vstebrh"; -+} -+ -+static const HChar * -+s390_irgen_VSTEBRF(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vstebrf", m3 <= 3); -+ IRTemp op1 = newTemp(Ity_V128); -+ assign(op1, get_vr_qw(v1)); -+ IRExpr* b = s390_insert_byteswapped(mkexpr(op1), mkexpr(op1), 2, 3, m3); -+ store(mkexpr(op2addr), unop(Iop_V128to32, b)); -+ return "vstebrf"; -+} -+ -+static const HChar * -+s390_irgen_VSTEBRG(UChar v1, IRTemp op2addr, UChar m3) -+{ -+ s390_insn_assert("vstebrg", m3 <= 1); -+ IRTemp op1 = newTemp(Ity_V128); -+ assign(op1, get_vr_qw(v1)); -+ IRExpr* b = s390_insert_byteswapped(mkexpr(op1), mkexpr(op1), 3, 1, m3); -+ store(mkexpr(op2addr), unop(Iop_V128to64, b)); -+ return "vstebrg"; -+} -+ - /* New insns are added here. - If an insn is contingent on a facility being installed also - check whether the list of supported facilities in function -@@ -21003,6 +21206,59 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - RXY_x2(ovl), RXY_b2(ovl), - RXY_dl2(ovl), - RXY_dh2(ovl)); goto ok; -+ case 0xe60000000001ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRH, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000002ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRG, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000003ULL: s390_format_VRX_VRRDM(s390_irgen_VLEBRF, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000004ULL: s390_format_VRX_VRRDM(s390_irgen_VLLEBRZ, -+ VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000005ULL: s390_format_VRX_VRRDM(s390_irgen_VLBRREP, -+ VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000006ULL: s390_format_VRX_VRRDM(s390_irgen_VLBR, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000007ULL: s390_format_VRX_VRRDM(s390_irgen_VLER, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe60000000009ULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRH, -+ VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe6000000000aULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRG, -+ VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe6000000000bULL: s390_format_VRX_VRRDM(s390_irgen_VSTEBRF, -+ VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe6000000000eULL: s390_format_VRX_VRRDM(s390_irgen_VSTBR, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; -+ case 0xe6000000000fULL: s390_format_VRX_VRRDM(s390_irgen_VSTER, VRX_v1(ovl), -+ VRX_x2(ovl), VRX_b2(ovl), -+ VRX_d2(ovl), VRX_m3(ovl), -+ VRX_rxb(ovl)); goto ok; - case 0xe60000000034ULL: /* VPKZ */ goto unimplemented; - case 0xe60000000035ULL: s390_format_VSI_URDV(s390_irgen_VLRL, VSI_v1(ovl), - VSI_b2(ovl), VSI_d2(ovl), -diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c -index ee20c6711..06e195957 100644 ---- a/VEX/priv/host_s390_isel.c -+++ b/VEX/priv/host_s390_isel.c -@@ -4189,6 +4189,15 @@ s390_isel_vec_expr_wrk(ISelEnv *env, IRExpr *expr) - return dst; - } - -+ case Iop_Perm8x16: -+ size = 16; -+ reg1 = s390_isel_vec_expr(env, arg1); -+ reg2 = s390_isel_vec_expr(env, arg2); -+ -+ addInstr(env, s390_insn_vec_triop(size, S390_VEC_PERM, -+ dst, reg1, reg1, reg2)); -+ return dst; -+ - case Iop_CmpEQ8x16: - size = 1; - vec_binop = S390_VEC_COMPARE_EQUAL; --- -2.23.0 - -From f7447f4c73b2d0fb4eb3827c3709f378f6c9c656 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 23 Feb 2021 19:10:37 +0100 -Subject: [PATCH 09/13] s390x: Vec-enh-2, VSLD and VSRD - -Support the new "vector shift left/right double by bit" instructions VSLD -and VSRD. ---- - VEX/priv/guest_s390_toIR.c | 50 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 50 insertions(+) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index f65b42705..aa429d085 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -18228,6 +18228,48 @@ s390_irgen_VSLDB(UChar v1, UChar v2, UChar v3, UChar i4) - return "vsldb"; - } - -+static const HChar * -+s390_irgen_VSLD(UChar v1, UChar v2, UChar v3, UChar i4) -+{ -+ s390_insn_assert("vsld", i4 <= 7); -+ -+ if (i4 == 0) { -+ /* Just copy v2. */ -+ put_vr_qw(v1, get_vr_qw(v2)); -+ } else { -+ /* Concatenate v2's tail with v3's head. */ -+ put_vr_qw(v1, -+ binop(Iop_OrV128, -+ binop(Iop_ShlV128, get_vr_qw(v2), mkU8(i4)), -+ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(128 - i4)) -+ ) -+ ); -+ } -+ -+ return "vsld"; -+} -+ -+static const HChar * -+s390_irgen_VSRD(UChar v1, UChar v2, UChar v3, UChar i4) -+{ -+ s390_insn_assert("vsrd", i4 <= 7); -+ -+ if (i4 == 0) { -+ /* Just copy v3. */ -+ put_vr_qw(v1, get_vr_qw(v3)); -+ } else { -+ /* Concatenate v2's tail with v3's head. */ -+ put_vr_qw(v1, -+ binop(Iop_OrV128, -+ binop(Iop_ShlV128, get_vr_qw(v2), mkU8(128 - i4)), -+ binop(Iop_ShrV128, get_vr_qw(v3), mkU8(i4)) -+ ) -+ ); -+ } -+ -+ return "vsrd"; -+} -+ - static const HChar * - s390_irgen_VMO(UChar v1, UChar v2, UChar v3, UChar m4) - { -@@ -21541,6 +21583,14 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - case 0xe70000000085ULL: s390_format_VRR_VVV(s390_irgen_VBPERM, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_rxb(ovl)); goto ok; -+ case 0xe70000000086ULL: s390_format_VRId_VVVI(s390_irgen_VSLD, VRId_v1(ovl), -+ VRId_v2(ovl), VRId_v3(ovl), -+ VRId_i4(ovl), -+ VRId_rxb(ovl)); goto ok; -+ case 0xe70000000087ULL: s390_format_VRId_VVVI(s390_irgen_VSRD, VRId_v1(ovl), -+ VRId_v2(ovl), VRId_v3(ovl), -+ VRId_i4(ovl), -+ VRId_rxb(ovl)); goto ok; - case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl), - VRRd_v2(ovl), VRRd_v3(ovl), - VRRd_v4(ovl), VRRd_m5(ovl), --- -2.23.0 - -From 388082bca7146f8a15814798dbfe570af2aab2a9 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Wed, 10 Mar 2021 19:22:51 +0100 -Subject: [PATCH 10/13] s390x: Vec-enh-2, VSTRS - -Support the new "vector string search" instruction VSTRS. The -implementation is a full emulation and follows a similar approach as for -the other vector string instructions. ---- - VEX/priv/guest_s390_toIR.c | 104 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 104 insertions(+) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index aa429d085..46a867475 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -17601,6 +17601,105 @@ s390_irgen_VSTRC(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) - return "vstrc"; - } - -+static const HChar * -+s390_irgen_VSTRS(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5, UChar m6) -+{ -+ s390_insn_assert("vstrs", m5 <= 2 && m6 == (m6 & 2)); -+ -+ IRTemp op2 = newTemp(Ity_V128); -+ IRTemp op3 = newTemp(Ity_V128); -+ IRTemp op4 = newTemp(Ity_I8); -+ IRTemp op2clean = newTemp(Ity_V128); -+ IRTemp op3mask = newTemp(Ity_V128); -+ IRTemp result = newTemp(Ity_V128); -+ IRTemp ccnomatch = newTemp(Ity_I64); -+ IRExpr* tmp; -+ IRExpr* match = NULL; -+ UChar elem_bits = 8 << m5; -+ IROp cmpeq_op = S390_VEC_OP3(m5, Iop_CmpEQ8x16, -+ Iop_CmpEQ16x8, Iop_CmpEQ32x4); -+ -+ assign(op2, get_vr_qw(v2)); -+ assign(op3, get_vr_qw(v3)); -+ assign(op4, get_vr_b7(v4)); -+ -+ tmp = unop(Iop_Dup32x4, -+ unop(Iop_1Sto32, binop(Iop_CmpNE8, mkexpr(op4), mkU8(16)))); -+ tmp = binop(Iop_ShrV128, tmp, binop(Iop_Shl8, mkexpr(op4), mkU8(3))); -+ -+ if (s390_vr_is_zs_set(m6)) { -+ IRTemp op2eos = newTemp(Ity_V128); -+ IRExpr* t; -+ t = binop(cmpeq_op, mkexpr(op2), mkV128(0)); -+ for (UChar i = m5; i < 4; i++) { -+ IRTemp s = newTemp(Ity_V128); -+ assign(s, t); -+ t = binop(Iop_OrV128, mkexpr(s), binop(Iop_ShrV128, mkexpr(s), -+ mkU8(8 << i))); -+ } -+ assign(op2eos, t); -+ assign(op2clean, binop(Iop_AndV128, mkexpr(op2), -+ unop(Iop_NotV128, mkexpr(op2eos)))); -+ assign(ccnomatch, binop(Iop_And64, mkU64(1), -+ unop(Iop_V128to64, mkexpr(op2eos)))); -+ -+ t = binop(cmpeq_op, mkexpr(op3), mkV128(0)); -+ for (UChar i = m5; i < 4; i++) { -+ IRTemp s = newTemp(Ity_V128); -+ assign(s, t); -+ t = binop(Iop_OrV128, mkexpr(s), binop(Iop_ShrV128, mkexpr(s), -+ mkU8(8 << i))); -+ } -+ tmp = binop(Iop_OrV128, tmp, t); -+ } else { -+ assign(op2clean, mkexpr(op2)); -+ } -+ assign(op3mask, unop(Iop_NotV128, tmp)); -+ -+ for (UChar shift = 0; shift < 128; shift += elem_bits) { -+ IRTemp s = newTemp(Ity_V128); -+ tmp = unop(Iop_NotV128, -+ binop(cmpeq_op, mkexpr(op2clean), -+ binop(Iop_ShrV128, mkexpr(op3), mkU8(shift)))); -+ assign(s, binop(Iop_CmpEQ64x2, mkV128(0), -+ binop(Iop_AndV128, mkexpr(op3mask), -+ binop(Iop_ShlV128, tmp, mkU8(shift))))); -+ tmp = mkexpr(s); -+ if (shift < 64) { -+ tmp = binop(Iop_AndV128, tmp, -+ unop(Iop_Dup16x8, binop(Iop_GetElem16x8, tmp, mkU8(4)))); -+ } -+ tmp = binop(Iop_AndV128, tmp, -+ unop(Iop_Dup16x8, mkU16(1 << (15 - shift / 8)))); -+ if (shift) -+ match = binop(Iop_OrV128, mkexpr(mktemp(Ity_V128, match)), tmp); -+ else -+ match = tmp; -+ } -+ assign(result, unop(Iop_ClzNat64, -+ binop(Iop_Or64, -+ unop(Iop_V128HIto64, match), -+ mkU64((1UL << 48) - 1)))); -+ put_vr_qw(v1, binop(Iop_64HLtoV128, mkexpr(result), mkU64(0))); -+ -+ /* Set condition code. -+ 0: no match, no string terminator in op2 -+ 1: no match, string terminator found -+ 2: full match -+ 3: partial match */ -+ IRTemp cc = newTemp(Ity_I64); -+ tmp = binop(Iop_CmpLE64U, -+ binop(Iop_Add64, mkexpr(result), unop(Iop_8Uto64, mkexpr(op4))), -+ mkU64(16)); -+ assign(cc, mkite(binop(Iop_CmpEQ64, mkexpr(result), mkU64(16)), -+ s390_vr_is_zs_set(m6) ? mkexpr(ccnomatch) : mkU64(0), -+ mkite(tmp, mkU64(2), mkU64(3)))); -+ s390_cc_set(cc); -+ -+ dis_res->hint = Dis_HintVerbose; -+ return "vstrs"; -+} -+ - static const HChar * - s390_irgen_VNC(UChar v1, UChar v2, UChar v3) - { -@@ -21596,6 +21695,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes) - VRRd_v4(ovl), VRRd_m5(ovl), - VRRd_m6(ovl), - VRRd_rxb(ovl)); goto ok; -+ case 0xe7000000008bULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRS, VRRd_v1(ovl), -+ VRRd_v2(ovl), VRRd_v3(ovl), -+ VRRd_v4(ovl), VRRd_m5(ovl), -+ VRRd_m6(ovl), -+ VRRd_rxb(ovl)); goto ok; - case 0xe7000000008cULL: s390_format_VRR_VVVV(s390_irgen_VPERM, VRR_v1(ovl), - VRR_v2(ovl), VRR_r3(ovl), - VRR_m4(ovl), VRR_rxb(ovl)); goto ok; --- -2.23.0 - -From 8a079b405467fa127c6c311d7ae3c649e76106c6 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 16 Feb 2021 17:52:09 +0100 -Subject: [PATCH 11/13] s390x: Mark arch13 features as supported - -Make the STFLE instruction report the miscellaneous-instruction-extensions -facility 3 and the vector-enhancements facility 2 as supported. Indicate -support for the latter in the HWCAP vector as well. ---- - VEX/priv/guest_s390_helpers.c | 9 +++------ - coregrind/m_initimg/initimg-linux.c | 3 ++- - include/vki/vki-s390x-linux.h | 1 + - 3 files changed, 6 insertions(+), 7 deletions(-) - -diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c -index 1e04f601a..804b92a29 100644 ---- a/VEX/priv/guest_s390_helpers.c -+++ b/VEX/priv/guest_s390_helpers.c -@@ -356,9 +356,7 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) - | s390_stfle_range(51, 55) - /* 56: unassigned */ - /* 57: MSA5, not supported */ -- | s390_stfle_range(58, 60) -- /* 61: miscellaneous-instruction 3, not supported */ -- | s390_stfle_range(62, 63)), -+ | s390_stfle_range(58, 63)), - - /* === 64 .. 127 === */ - (s390_stfle_range(64, 72) -@@ -384,11 +382,10 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr) - /* 143: unassigned */ - | s390_stfle_range(144, 145) - /* 146: MSA8, not supported */ -- | s390_stfle_range(147, 147) -- /* 148: vector-enhancements 2, not supported */ -- | s390_stfle_range(149, 149) -+ | s390_stfle_range(147, 149) - /* 150: unassigned */ - /* 151: DEFLATE-conversion, not supported */ -+ /* 152: vector packed decimal enhancement, not supported */ - /* 153: unassigned */ - /* 154: unassigned */ - /* 155: MSA9, not supported */ -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index fc1a32ecf..37d005168 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -703,7 +703,8 @@ Addr setup_client_stack( void* init_sp, - itself, is not supported by Valgrind. */ - auxv->u.a_val &= ((VKI_HWCAP_S390_TE - 1) - | VKI_HWCAP_S390_VXRS -- | VKI_HWCAP_S390_VXRS_EXT); -+ | VKI_HWCAP_S390_VXRS_EXT -+ | VKI_HWCAP_S390_VXRS_EXT2); - } - # elif defined(VGP_arm64_linux) - { -diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h -index 4ab2d3334..71b363029 100644 ---- a/include/vki/vki-s390x-linux.h -+++ b/include/vki/vki-s390x-linux.h -@@ -807,6 +807,7 @@ typedef vki_s390_regs vki_elf_gregset_t; - #define VKI_HWCAP_S390_TE 1024 - #define VKI_HWCAP_S390_VXRS 2048 - #define VKI_HWCAP_S390_VXRS_EXT 8192 -+#define VKI_HWCAP_S390_VXRS_EXT2 32768 - - - //---------------------------------------------------------------------- --- -2.23.0 - -From 1461d9b8d0b12e55b648fbf50c5dcee30785afa2 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Mon, 17 May 2021 15:34:15 +0200 -Subject: [PATCH 12/13] s390x: Vec-enh-2, test cases - -Add test cases for verifying the new/enhanced instructions in the -vector-enhancements facility 2. For "vector string search" VSTRS add a -memcheck test case. ---- - .gitignore | 2 + - memcheck/tests/s390x/Makefile.am | 3 +- - memcheck/tests/s390x/vstrs.c | 68 ++++++ - memcheck/tests/s390x/vstrs.stderr.exp | 16 ++ - memcheck/tests/s390x/vstrs.stdout.exp | 0 - memcheck/tests/s390x/vstrs.vgtest | 2 + - none/tests/s390x/Makefile.am | 3 +- - none/tests/s390x/vec2.c | 314 ++++++++++++++++++++++++++ - none/tests/s390x/vec2.stderr.exp | 2 + - none/tests/s390x/vec2.stdout.exp | 168 ++++++++++++++ - none/tests/s390x/vec2.vgtest | 2 + - tests/s390x_features.c | 4 + - 12 files changed, 582 insertions(+), 2 deletions(-) - create mode 100644 memcheck/tests/s390x/vstrs.c - create mode 100644 memcheck/tests/s390x/vstrs.stderr.exp - create mode 100644 memcheck/tests/s390x/vstrs.stdout.exp - create mode 100644 memcheck/tests/s390x/vstrs.vgtest - create mode 100644 none/tests/s390x/vec2.c - create mode 100644 none/tests/s390x/vec2.stderr.exp - create mode 100644 none/tests/s390x/vec2.stdout.exp - create mode 100644 none/tests/s390x/vec2.vgtest - -diff --git a/memcheck/tests/s390x/Makefile.am b/memcheck/tests/s390x/Makefile.am -index d183841ef..668fd9933 100644 ---- a/memcheck/tests/s390x/Makefile.am -+++ b/memcheck/tests/s390x/Makefile.am -@@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.tool-tests.am - - dist_noinst_SCRIPTS = filter_stderr - --INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr -+INSN_TESTS = cdsg cu21 cu42 ltgjhe vstrc vfae vistr vstrs - - check_PROGRAMS = $(INSN_TESTS) - -@@ -18,3 +18,4 @@ AM_CCASFLAGS += @FLAG_M64@ - vstrc_CFLAGS = $(AM_CFLAGS) -march=z13 - vfae_CFLAGS = $(AM_CFLAGS) -march=z13 - vistr_CFLAGS = $(AM_CFLAGS) -march=z13 -+vstrs_CFLAGS = $(AM_CFLAGS) -march=z13 -diff --git a/memcheck/tests/s390x/vstrs.c b/memcheck/tests/s390x/vstrs.c -new file mode 100644 -index 000000000..3354c2e53 ---- /dev/null -+++ b/memcheck/tests/s390x/vstrs.c -@@ -0,0 +1,68 @@ -+#include -+#include -+ -+#define VECTOR __attribute__ ((vector_size (16))) -+ -+typedef char VECTOR char_v; -+ -+volatile char tmp; -+static const char *hex_digit = "0123456789abcdefGHIJKLMNOPQRSTUV"; -+ -+static char_v to_char_vec(const char *str) -+{ -+ char buf[17]; -+ char_v v; -+ -+ for (int i = 0; i < sizeof(buf); i++) { -+ char ch = str[i]; -+ if (ch == '\0') -+ break; -+ else if (ch == '$') -+ buf[i] = '\0'; -+ else if (ch != '~') -+ buf[i] = ch; -+ } -+ v = *(char_v *) buf; -+ return v; -+} -+ -+static void test_vstrs_char(const char *haystack, const char *needle, -+ int expect_res, int expect_cc) -+{ -+ int cc; -+ char_v v2val = to_char_vec(haystack); -+ char_v v3val = to_char_vec(needle); -+ -+ register unsigned long VECTOR v4 __asm__("v4") = { strlen(needle), 0 }; -+ register char_v v1 __asm__("v1"); -+ register char_v v2 __asm__("v2") = v2val; -+ register char_v v3 __asm__("v3") = v3val; -+ -+ __asm__( -+ "cr 0,0\n\t" /* Clear CC */ -+ ".short 0xe712,0x3020,0x408b\n\t" /* vstrs %v1,%v2,%v3,%v4,0,2 */ -+ "ipm %[cc]\n\t" -+ "srl %[cc],28" -+ : "=v" (v1), [cc] "=d" (cc) -+ : "v" (v2), "v" (v3), "v" (v4) -+ : "cc"); -+ -+ tmp = hex_digit[v1[7] & 0x1f]; -+ if (expect_res >= 0 && v1[7] != expect_res) -+ printf("result %u != %d\n", v1[7], expect_res); -+ -+ tmp = hex_digit[cc & 0xf]; -+ if (expect_cc >= 0 && cc != expect_cc) -+ printf("CC %d != %d\n", cc, expect_cc); -+} -+ -+int main() -+{ -+ test_vstrs_char("haystack$needle", "needle$haystack", 16, 1); -+ test_vstrs_char("haystack, needle", "needle, haystack", 10, 3); -+ test_vstrs_char("ABCDEFGH", "DEFGHI", -1, -1); -+ test_vstrs_char("match in UNDEF", "UN", 9, 2); -+ test_vstrs_char("after ~ UNDEF", "DEF", -1, -1); -+ test_vstrs_char("", "", 0, 2); -+ return 0; -+} -diff --git a/memcheck/tests/s390x/vstrs.stderr.exp b/memcheck/tests/s390x/vstrs.stderr.exp -new file mode 100644 -index 000000000..c5c3ef705 ---- /dev/null -+++ b/memcheck/tests/s390x/vstrs.stderr.exp -@@ -0,0 +1,16 @@ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrs_char (vstrs.c:50) -+ by 0x........: main (vstrs.c:63) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrs_char (vstrs.c:54) -+ by 0x........: main (vstrs.c:63) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrs_char (vstrs.c:50) -+ by 0x........: main (vstrs.c:65) -+ -+Use of uninitialised value of size 8 -+ at 0x........: test_vstrs_char (vstrs.c:54) -+ by 0x........: main (vstrs.c:65) -+ -diff --git a/memcheck/tests/s390x/vstrs.stdout.exp b/memcheck/tests/s390x/vstrs.stdout.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/s390x/vstrs.vgtest b/memcheck/tests/s390x/vstrs.vgtest -new file mode 100644 -index 000000000..fd2a29873 ---- /dev/null -+++ b/memcheck/tests/s390x/vstrs.vgtest -@@ -0,0 +1,2 @@ -+prog: vstrs -+vgopts: -q -diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am -index 2fd45ec1e..ca38db935 100644 ---- a/none/tests/s390x/Makefile.am -+++ b/none/tests/s390x/Makefile.am -@@ -20,7 +20,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ - spechelper-icm-1 spechelper-icm-2 spechelper-tmll \ - spechelper-tm laa vector lsc2 ppno vector_string vector_integer \ - vector_float add-z14 sub-z14 mul-z14 bic \ -- misc3 -+ misc3 vec2 - - if BUILD_DFP_TESTS - INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo -@@ -74,3 +74,4 @@ lsc2_CFLAGS = -march=z13 -DS390_TESTS_NOCOLOR - vector_string_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=5 - vector_integer_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 - vector_float_CFLAGS = $(AM_CFLAGS) -march=z13 -DS390_TEST_COUNT=4 -+vec2_CFLAGS = $(AM_CFLAGS) -march=z13 -diff --git a/none/tests/s390x/vec2.c b/none/tests/s390x/vec2.c -new file mode 100644 -index 000000000..73b04dee4 ---- /dev/null -+++ b/none/tests/s390x/vec2.c -@@ -0,0 +1,314 @@ -+#include -+ -+#define VECTOR __attribute__ ((vector_size (16))) -+ -+typedef unsigned long VECTOR ulong_v; -+typedef float VECTOR float_v; -+ -+static const ulong_v vec_a = { 0x0123456789abcdef, 0xfedcba9876543210 }; -+static const ulong_v vec_b = { 0xfedcba9876543210, 0x0123456789abcdef }; -+static const ulong_v vec_c = { 0x8040201008040201, 0x7fbfdfeff7fbfdfe }; -+static const ulong_v vec_one = { -1, -1 }; -+static const ulong_v vec_ini = { 0x0112233445566778, 0x899aabbccddeeff0 }; -+ -+static const float_v vec_fa = { 16777215., -16777215., 42.5, 10000. }; -+static const float_v vec_fb = { 4., 3., 2., 1. }; -+ -+/* -- Vector shift -- */ -+ -+#define TEST_GENERATE(insn) \ -+ static void test_##insn(ulong_v a, ulong_v b) \ -+ { \ -+ ulong_v out; \ -+ __asm__( \ -+ #insn " %[out],%[a],%[b]" \ -+ : [out] "=v" (out) \ -+ : [a] "v" (a), \ -+ [b] "v" (b) \ -+ : ); \ -+ printf("\t%016lx %016lx\n", out[0], out[1]); \ -+ } -+ -+#define TEST_EXEC(insn) \ -+ do { \ -+ puts(#insn); \ -+ test_##insn(vec_a, vec_b); \ -+ test_##insn(vec_b, vec_a); \ -+ test_##insn(vec_c, vec_a); \ -+ test_##insn(vec_one, vec_b); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(vsl); \ -+ XTEST(vsrl); \ -+ XTEST(vsra); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_single_bitshifts() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ -+/* -- Vector load element-/byte-swapped -- */ -+ -+#define TEST_EXEC(opc1,opc2,insn,m3) \ -+ do { \ -+ puts(#insn " " #m3); \ -+ test_##insn##_##m3(vec_a); \ -+ test_##insn##_##m3(vec_b); \ -+ } while (0) -+ -+#define TEST_GENERATE(opc1,opc2,insn,m3) \ -+ static void test_##insn##_##m3(ulong_v a) \ -+ { \ -+ ulong_v out = vec_ini; \ -+ __asm__( \ -+ ".insn vrx,0x" #opc1 "00000000" #opc2 ",%[out],%[a]," #m3 \ -+ : [out] "+v" (out) \ -+ : [a] "R" (a) \ -+ : ); \ -+ printf("\t%016lx %016lx\n", out[0], out[1]); \ -+ } -+ -+#define INSNS \ -+ XTEST(e6,01, vlebrh, 0); \ -+ XTEST(e6,01, vlebrh, 7); \ -+ XTEST(e6,01, vlebrh, 2); \ -+ XTEST(e6,03, vlebrf, 0); \ -+ XTEST(e6,03, vlebrf, 3); \ -+ XTEST(e6,03, vlebrf, 1); \ -+ XTEST(e6,02, vlebrg, 0); \ -+ XTEST(e6,02, vlebrg, 1); \ -+ XTEST(e6,04, vllebrz, 1); \ -+ XTEST(e6,04, vllebrz, 2); \ -+ XTEST(e6,04, vllebrz, 3); \ -+ XTEST(e6,04, vllebrz, 6); \ -+ XTEST(e6,05, vlbrrep, 1); \ -+ XTEST(e6,05, vlbrrep, 2); \ -+ XTEST(e6,05, vlbrrep, 3); \ -+ XTEST(e6,06, vlbr, 1); \ -+ XTEST(e6,06, vlbr, 2); \ -+ XTEST(e6,06, vlbr, 3); \ -+ XTEST(e6,06, vlbr, 4); \ -+ XTEST(e6,07, vler, 1); \ -+ XTEST(e6,07, vler, 2); \ -+ XTEST(e6,07, vler, 3); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_swapped_loads() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_GENERATE -+ -+/* -- Vector store element-/byte-swapped -- */ -+ -+#define TEST_GENERATE(opc1,opc2,insn,m3) \ -+ static void test_##insn##_##m3(ulong_v a) \ -+ { \ -+ ulong_v out = vec_ini; \ -+ __asm__( \ -+ ".insn vrx,0x" #opc1 "00000000" #opc2 ",%[a],%[out]," #m3 \ -+ : [out] "+R" (out) \ -+ : [a] "v" (a) \ -+ : ); \ -+ printf("\t%016lx %016lx\n", out[0], out[1]); \ -+ } -+ -+#define INSNS \ -+ XTEST(e6,09, vstebrh, 0); \ -+ XTEST(e6,09, vstebrh, 7); \ -+ XTEST(e6,09, vstebrh, 2); \ -+ XTEST(e6,0b, vstebrf, 0); \ -+ XTEST(e6,0b, vstebrf, 3); \ -+ XTEST(e6,0b, vstebrf, 1); \ -+ XTEST(e6,0a, vstebrg, 0); \ -+ XTEST(e6,0a, vstebrg, 1); \ -+ XTEST(e6,0e, vstbr, 1); \ -+ XTEST(e6,0e, vstbr, 2); \ -+ XTEST(e6,0e, vstbr, 3); \ -+ XTEST(e6,0e, vstbr, 4); \ -+ XTEST(e6,0f, vster, 1); \ -+ XTEST(e6,0f, vster, 2); \ -+ XTEST(e6,0f, vster, 3); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_swapped_stores() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ -+/* -- Vector shift double by bit -- */ -+ -+#define TEST_GENERATE(opc1,opc2,insn,i4) \ -+ static void test_##insn##_##i4(ulong_v a, ulong_v b) \ -+ { \ -+ ulong_v out = vec_ini; \ -+ __asm__( \ -+ ".insn vrr,0x" #opc1 "00000000" #opc2 \ -+ ",%[out],%[a],%[b],0," #i4 ",0" \ -+ : [out] "+v" (out) \ -+ : [a] "v" (a), \ -+ [b] "v" (b) \ -+ : ); \ -+ printf("\t%016lx %016lx\n", out[0], out[1]); \ -+ } -+ -+#define TEST_EXEC(opc1,opc2,insn,i4) \ -+ do { \ -+ puts(#insn " " #i4); \ -+ test_##insn##_##i4(vec_a, vec_one); \ -+ test_##insn##_##i4(vec_b, vec_a); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(e7,86,vsld,0); \ -+ XTEST(e7,86,vsld,7); \ -+ XTEST(e7,86,vsld,4); \ -+ XTEST(e7,87,vsrd,0); \ -+ XTEST(e7,87,vsrd,7); \ -+ XTEST(e7,87,vsrd,4); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_double_bitshifts() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ -+/* -- Vector integer -> FP conversions -- */ -+ -+#define TEST_GENERATE(opc1,opc2,insn,m4) \ -+ static void test_##insn##_##m4(ulong_v a) \ -+ { \ -+ float_v out; \ -+ __asm__( \ -+ ".insn vrr,0x" #opc1 "00000000" #opc2 \ -+ ",%[out],%[a],0,2," #m4 ",0" \ -+ : [out] "=v" (out) \ -+ : [a] "v" (a) \ -+ : ); \ -+ if (m4 & 8) \ -+ printf("\t%a - - -\n", out[0]); \ -+ else \ -+ printf("\t%a %a %a %a\n", out[0], out[1], out[2], out[3]); \ -+ } -+ -+#define TEST_EXEC(opc1,opc2,insn,m4) \ -+ do { \ -+ puts(#insn " " #m4); \ -+ test_##insn##_##m4(vec_a); \ -+ test_##insn##_##m4(vec_c); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(e7,c1,vcfpl,0); \ -+ XTEST(e7,c1,vcfpl,8); \ -+ XTEST(e7,c3,vcfps,0); \ -+ XTEST(e7,c3,vcfps,8); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_int_fp_conversions() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ -+/* -- Vector FP -> integer conversions -- */ -+ -+#define TEST_GENERATE(opc1,opc2,insn,m4) \ -+ static void test_##insn##_##m4(float_v a) \ -+ { \ -+ unsigned int VECTOR out; \ -+ __asm__( \ -+ ".insn vrr,0x" #opc1 "00000000" #opc2 \ -+ ",%[out],%[a],0,2," #m4 ",0" \ -+ : [out] "=v" (out) \ -+ : [a] "v" (a) \ -+ : ); \ -+ if (m4 & 8) \ -+ printf("\t%08x - - -\n", out[0]); \ -+ else \ -+ printf("\t%08x %08x %08x %08x\n", \ -+ out[0], out[1], out[2], out[3]); \ -+ } -+ -+#define TEST_EXEC(opc1,opc2,insn,m4) \ -+ do { \ -+ puts(#insn " " #m4); \ -+ test_##insn##_##m4(vec_fa); \ -+ test_##insn##_##m4(vec_fb); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(e7,c0,vclfp,0); \ -+ XTEST(e7,c0,vclfp,8); \ -+ XTEST(e7,c2,vcsfp,0); \ -+ XTEST(e7,c2,vcsfp,8); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_fp_int_conversions() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ -+ -+int main() -+{ -+ test_all_single_bitshifts(); -+ test_all_swapped_loads(); -+ test_all_swapped_stores(); -+ test_all_double_bitshifts(); -+ test_all_int_fp_conversions(); -+ test_all_fp_int_conversions(); -+ return 0; -+} -diff --git a/none/tests/s390x/vec2.stderr.exp b/none/tests/s390x/vec2.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/s390x/vec2.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/s390x/vec2.stdout.exp b/none/tests/s390x/vec2.stdout.exp -new file mode 100644 -index 000000000..b32cbe1bc ---- /dev/null -+++ b/none/tests/s390x/vec2.stdout.exp -@@ -0,0 +1,168 @@ -+vsl -+ 483415676abc37ef fde5533beca14200 -+ fde5533beca14200 483415676abc37ef -+ 00010204102040bf effd7feffebff7fe -+ ffffffffffffffff ffffffffffffff80 -+vsrl -+ 0012d1679e9af3ef ffdbe5753bcaa164 -+ 7fdbe5753bcaa164 4012d1679e9af3ef -+ 4008014004002004 05fbf7efbf7ffffe -+ 03ffffffffffffff ffffffffffffffff -+vsra -+ 0012d1679e9af3ef ffdbe5753bcaa164 -+ ffdbe5753bcaa164 4012d1679e9af3ef -+ c008014004002004 05fbf7efbf7ffffe -+ ffffffffffffffff ffffffffffffffff -+vlebrh 0 -+ 2301233445566778 899aabbccddeeff0 -+ dcfe233445566778 899aabbccddeeff0 -+vlebrh 7 -+ 0112233445566778 899aabbccdde2301 -+ 0112233445566778 899aabbccddedcfe -+vlebrh 2 -+ 0112233423016778 899aabbccddeeff0 -+ 01122334dcfe6778 899aabbccddeeff0 -+vlebrf 0 -+ 6745230145566778 899aabbccddeeff0 -+ 98badcfe45566778 899aabbccddeeff0 -+vlebrf 3 -+ 0112233445566778 899aabbc67452301 -+ 0112233445566778 899aabbc98badcfe -+vlebrf 1 -+ 0112233467452301 899aabbccddeeff0 -+ 0112233498badcfe 899aabbccddeeff0 -+vlebrg 0 -+ efcdab8967452301 899aabbccddeeff0 -+ 1032547698badcfe 899aabbccddeeff0 -+vlebrg 1 -+ 0112233445566778 efcdab8967452301 -+ 0112233445566778 1032547698badcfe -+vllebrz 1 -+ 0000000000002301 0000000000000000 -+ 000000000000dcfe 0000000000000000 -+vllebrz 2 -+ 0000000067452301 0000000000000000 -+ 0000000098badcfe 0000000000000000 -+vllebrz 3 -+ efcdab8967452301 0000000000000000 -+ 1032547698badcfe 0000000000000000 -+vllebrz 6 -+ 6745230100000000 0000000000000000 -+ 98badcfe00000000 0000000000000000 -+vlbrrep 1 -+ 2301230123012301 2301230123012301 -+ dcfedcfedcfedcfe dcfedcfedcfedcfe -+vlbrrep 2 -+ 6745230167452301 6745230167452301 -+ 98badcfe98badcfe 98badcfe98badcfe -+vlbrrep 3 -+ efcdab8967452301 efcdab8967452301 -+ 1032547698badcfe 1032547698badcfe -+vlbr 1 -+ 23016745ab89efcd dcfe98ba54761032 -+ dcfe98ba54761032 23016745ab89efcd -+vlbr 2 -+ 67452301efcdab89 98badcfe10325476 -+ 98badcfe10325476 67452301efcdab89 -+vlbr 3 -+ efcdab8967452301 1032547698badcfe -+ 1032547698badcfe efcdab8967452301 -+vlbr 4 -+ 1032547698badcfe efcdab8967452301 -+ efcdab8967452301 1032547698badcfe -+vler 1 -+ 32107654ba98fedc cdef89ab45670123 -+ cdef89ab45670123 32107654ba98fedc -+vler 2 -+ 76543210fedcba98 89abcdef01234567 -+ 89abcdef01234567 76543210fedcba98 -+vler 3 -+ fedcba9876543210 0123456789abcdef -+ 0123456789abcdef fedcba9876543210 -+vstebrh 0 -+ 2301233445566778 899aabbccddeeff0 -+ dcfe233445566778 899aabbccddeeff0 -+vstebrh 7 -+ 1032233445566778 899aabbccddeeff0 -+ efcd233445566778 899aabbccddeeff0 -+vstebrh 2 -+ ab89233445566778 899aabbccddeeff0 -+ 5476233445566778 899aabbccddeeff0 -+vstebrf 0 -+ 6745230145566778 899aabbccddeeff0 -+ 98badcfe45566778 899aabbccddeeff0 -+vstebrf 3 -+ 1032547645566778 899aabbccddeeff0 -+ efcdab8945566778 899aabbccddeeff0 -+vstebrf 1 -+ efcdab8945566778 899aabbccddeeff0 -+ 1032547645566778 899aabbccddeeff0 -+vstebrg 0 -+ efcdab8967452301 899aabbccddeeff0 -+ 1032547698badcfe 899aabbccddeeff0 -+vstebrg 1 -+ 1032547698badcfe 899aabbccddeeff0 -+ efcdab8967452301 899aabbccddeeff0 -+vstbr 1 -+ 23016745ab89efcd dcfe98ba54761032 -+ dcfe98ba54761032 23016745ab89efcd -+vstbr 2 -+ 67452301efcdab89 98badcfe10325476 -+ 98badcfe10325476 67452301efcdab89 -+vstbr 3 -+ efcdab8967452301 1032547698badcfe -+ 1032547698badcfe efcdab8967452301 -+vstbr 4 -+ 1032547698badcfe efcdab8967452301 -+ efcdab8967452301 1032547698badcfe -+vster 1 -+ 32107654ba98fedc cdef89ab45670123 -+ cdef89ab45670123 32107654ba98fedc -+vster 2 -+ 76543210fedcba98 89abcdef01234567 -+ 89abcdef01234567 76543210fedcba98 -+vster 3 -+ fedcba9876543210 0123456789abcdef -+ 0123456789abcdef fedcba9876543210 -+vsld 0 -+ 0123456789abcdef fedcba9876543210 -+ fedcba9876543210 0123456789abcdef -+vsld 7 -+ 91a2b3c4d5e6f7ff 6e5d4c3b2a19087f -+ 6e5d4c3b2a190800 91a2b3c4d5e6f780 -+vsld 4 -+ 123456789abcdeff edcba9876543210f -+ edcba98765432100 123456789abcdef0 -+vsrd 0 -+ ffffffffffffffff ffffffffffffffff -+ 0123456789abcdef fedcba9876543210 -+vsrd 7 -+ 21ffffffffffffff ffffffffffffffff -+ de02468acf13579b dffdb97530eca864 -+vsrd 4 -+ 0fffffffffffffff ffffffffffffffff -+ f0123456789abcde ffedcba987654321 -+vcfpl 0 -+ 0x1.234568p+24 0x1.13579cp+31 0x1.fdb976p+31 0x1.d950c8p+30 -+ 0x1.00804p+31 0x1.00804p+27 0x1.feff8p+30 0x1.eff7fcp+31 -+vcfpl 8 -+ 0x1.234568p+24 - - - -+ 0x1.00804p+31 - - - -+vcfps 0 -+ 0x1.234568p+24 -0x1.d950c8p+30 -0x1.234568p+24 0x1.d950c8p+30 -+ -0x1.feff8p+30 0x1.00804p+27 0x1.feff8p+30 -0x1.00804p+27 -+vcfps 8 -+ 0x1.234568p+24 - - - -+ -0x1.feff8p+30 - - - -+vclfp 0 -+ 00ffffff 00000000 0000002a 00002710 -+ 00000004 00000003 00000002 00000001 -+vclfp 8 -+ 00ffffff - - - -+ 00000004 - - - -+vcsfp 0 -+ 00ffffff ff000001 0000002a 00002710 -+ 00000004 00000003 00000002 00000001 -+vcsfp 8 -+ 00ffffff - - - -+ 00000004 - - - -diff --git a/none/tests/s390x/vec2.vgtest b/none/tests/s390x/vec2.vgtest -new file mode 100644 -index 000000000..45e942e64 ---- /dev/null -+++ b/none/tests/s390x/vec2.vgtest -@@ -0,0 +1,2 @@ -+prog: vec2 -+prereq: test -e vec2 && ../../../tests/s390x_features s390x-vx -diff --git a/tests/s390x_features.c b/tests/s390x_features.c -index 25b98f3a3..e7939c463 100644 ---- a/tests/s390x_features.c -+++ b/tests/s390x_features.c -@@ -270,6 +270,10 @@ static int go(char *feature, char *cpu) - match = facilities[0] & FAC_BIT(57); /* message security assist 5 facility */ - } else if (strcmp(feature, "s390x-mi2") == 0 ) { - match = facilities[0] & FAC_BIT(58); -+ } else if (strcmp(feature, "s390x-mi3") == 0 ) { -+ match = facilities[0] & FAC_BIT(61); -+ } else if (strcmp(feature, "s390x-vx2") == 0 ) { -+ match = facilities[2] & FAC_BIT(20); - } else { - return 2; // Unrecognised feature. - } --- -2.23.0 - -From d9364bc90ee894c43ee742840f806571edc08ab3 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Tue, 18 May 2021 19:59:32 +0200 -Subject: [PATCH 13/13] s390x: Wrap up misc-insn-3 and vec-enh-2 support - -Wrap up support for the miscellaneous-instruction-extensions facility 3 -and the vector-enhancements facility 2: Add 'case' statements for the -remaining unhandled arch13 instructions to 'guest_s390_toIR.c', document -the new support in 's390-opcodes.csv', adjust 's390-check-opcodes.pl', and -announce the new feature in 'NEWS'. ---- - NEWS | 5 ++ - VEX/priv/guest_s390_toIR.c | 5 +- - auxprogs/s390-check-opcodes.pl | 22 ++++++++- - docs/internals/s390-opcodes.csv | 81 +++++++++++++++++++++++++++++++-- - 4 files changed, 108 insertions(+), 5 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 46a867475..1bd18f760 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -8,7 +8,7 @@ - This file is part of Valgrind, a dynamic binary instrumentation - framework. - -- Copyright IBM Corp. 2010-2020 -+ Copyright IBM Corp. 2010-2021 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as -@@ -20503,6 +20503,9 @@ s390_decode_4byte_and_irgen(const UChar *bytes) - RRE_r2(ovl)); goto ok; - case 0xb931: s390_format_RRE_RR(s390_irgen_CLGFR, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; -+ case 0xb938: /* SORTL */ goto unimplemented; -+ case 0xb939: /* DFLTCC */ goto unimplemented; -+ case 0xb93a: /* KDSA */ goto unimplemented; - case 0xb93c: s390_format_RRE_RR(s390_irgen_PPNO, RRE_r1(ovl), - RRE_r2(ovl)); goto ok; - case 0xb93e: /* KIMD */ goto unimplemented; --- -2.23.0 - diff --git a/valgrind-3.17.0-s390_insn_as_string.patch b/valgrind-3.17.0-s390_insn_as_string.patch deleted file mode 100644 index 39c956c..0000000 --- a/valgrind-3.17.0-s390_insn_as_string.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit 45873298ff2d17accc65654d64758360616aade5 -Author: Andreas Arnez -Date: Tue Mar 30 18:10:43 2021 +0200 - - s390x: Add missing UNOP insns to s390_insn_as_string - - Some unary operator insns are not handled by s390_insn_as_string(). If - they are encountered while the appropriate trace flag is set, a vpanic - occurs. Fix this: add handling for the missing insns. - -diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c -index 8762975b2..6e0734ae0 100644 ---- a/VEX/priv/host_s390_defs.c -+++ b/VEX/priv/host_s390_defs.c -@@ -7860,12 +7860,24 @@ s390_insn_as_string(const s390_insn *insn) - op = "v-vunpacku"; - break; - -- case S390_VEC_FLOAT_NEG: -- op = "v-vfloatneg"; -+ case S390_VEC_ABS: -+ op = "v-vabs"; - break; - -- case S390_VEC_FLOAT_SQRT: -- op = "v-vfloatsqrt"; -+ case S390_VEC_COUNT_LEADING_ZEROES: -+ op = "v-vclz"; -+ break; -+ -+ case S390_VEC_COUNT_TRAILING_ZEROES: -+ op = "v-vctz"; -+ break; -+ -+ case S390_VEC_COUNT_ONES: -+ op = "v-vpopct"; -+ break; -+ -+ case S390_VEC_FLOAT_NEG: -+ op = "v-vfloatneg"; - break; - - case S390_VEC_FLOAT_ABS: -@@ -7876,6 +7888,10 @@ s390_insn_as_string(const s390_insn *insn) - op = "v-vfloatnabs"; - break; - -+ case S390_VEC_FLOAT_SQRT: -+ op = "v-vfloatsqrt"; -+ break; -+ - default: - goto fail; - } diff --git a/valgrind-3.17.0-vgdb-queued-signals.patch b/valgrind-3.17.0-vgdb-queued-signals.patch deleted file mode 100644 index 6e0da66..0000000 --- a/valgrind-3.17.0-vgdb-queued-signals.patch +++ /dev/null @@ -1,15 +0,0 @@ -index 389748960..07f3400f9 100644 ---- a/coregrind/vgdb-invoker-ptrace.c -+++ b/coregrind/vgdb-invoker-ptrace.c -@@ -300,6 +300,10 @@ Bool waitstopped (pid_t pid, int signal_expected, const char *msg) - - // realloc a bigger queue, and store new signal at the end. - // This is not very efficient but we assume not many sigs are queued. -+ if (signal_queue_sz >= 64) { -+ DEBUG(0, "too many queued signals while waiting for SIGSTOP\n"); -+ return False; -+ } - signal_queue_sz++; - signal_queue = vrealloc(signal_queue, - sizeof(siginfo_t) * signal_queue_sz); - diff --git a/valgrind-3.17.0_start.patch b/valgrind-3.17.0_start.patch deleted file mode 100644 index 3882fb6..0000000 --- a/valgrind-3.17.0_start.patch +++ /dev/null @@ -1,26 +0,0 @@ -commit 200b6a5a0ea3e1e154663b0fc575bfe2becf177d -Author: Mark Wielaard -Date: Wed Jul 21 17:55:40 2021 +0200 - - m_debuginfo/debuginfo.c VG_(get_fnname_kind) _start is below main - - With glibc 2.34 we might see the _start symbol as the frame that - called main instead of directly after __libc_start_main or - generic_start_main. - - Fixes memcheck/tests/badjump[2], memcheck/tests/origin4-many, - helgrind/tests/tc04_free_lock, helgrind/tests/tc09_bad_unlock - and helgrind/tests/tc20_verifywrap. - -diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c -index bc2578b37..e2218f266 100644 ---- a/coregrind/m_debuginfo/debuginfo.c -+++ b/coregrind/m_debuginfo/debuginfo.c -@@ -2289,6 +2289,7 @@ Vg_FnNameKind VG_(get_fnname_kind) ( const HChar* name ) - VG_STREQN(18, "__libc_start_main.", name) || // gcc optimization - VG_STREQ("generic_start_main", name) || // Yellow Dog doggedness - VG_STREQN(19, "generic_start_main.", name) || // gcc optimization -+ VG_STREQ("_start", name) || - # elif defined(VGO_darwin) - // See readmacho.c for an explanation of this. - VG_STREQ("start_according_to_valgrind", name) || // Darwin, darling diff --git a/valgrind.spec b/valgrind.spec index a10c02d..8d9abb1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.17.0 -Release: 13%{?dist} +Version: 3.18.0 +Release: 0.1.RC1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: ftp://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -85,103 +85,6 @@ Patch4: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch5: valgrind-3.16.0-some-Wl-z-now.patch -# Upstream commits that provide additional ppc64le ISA 3.1 support -# commit 3cc0232c46a5905b4a6c2fbd302b58bf5f90b3d5 -# PPC64: ISA 3.1 VSX PCV Generate Operations -# commit 078f89e99b6f62e043f6138c6a7ae238befc1f2a -# PPC64: Reduced-Precision bfloat16 Outer Product & Format Conversion Operations -# commit e09fdaf569b975717465ed8043820d0198d4d47d -# PPC64: Reduced-Precision: Missing Integer-based Outer Product Operations -Patch6: valgrind-3.17.0-ppc64-isa-3.1.patch - -# Upstream commits that provide extra tests for ppc64le ISA 3.1 support -# commit c8fa838be405d7ac43035dcf675bf490800c26ec -# Reduced Precision bfloat16 outer product tests -# commit 4bcc6c8a97c10c4dd41b35bd3b3035ec4037d524 -# VSX Permute Control Vector Generate Operation tests. -# commit c589b652939655090c005a982a71f50c489fb5ce -# Reduced precision Missing Integer based outer tests -Patch7: valgrind-3.17.0-ppc64-isa-3.1-tests.patch - -# commit 45873298ff2d17accc65654d64758360616aade5 -# s390x: Add missing UNOP insns to s390_insn_as_string -Patch8: valgrind-3.17.0-s390_insn_as_string.patch - -# KDE#435908 Don't look for separate debuginfo if image already has .debug_info -Patch9: valgrind-3.17.0-debuginfod.patch - -# KDE#423963 Only process clone results in the parent thread -Patch10: valgrind-3.17.0-clone-parent-res.patch - -# commit d74a637206ef5532ccd2ccb2e31ee2762f184e60 -# Bug 433863 - s390x: Remove memcheck test cases for cs, cds, and csg -# commit 18ddcc47c951427efd3b790ba2481159b9bd1598 -# s390x: Support "expensive" comparisons Iop_ExpCmpNE32/64 -# commit 5db3f929c43bf46f4707178706cfe90f43acdd19 -# s390x: Add convenience function mkV128() -# commit e78bd78d3043729033b426218ab8c6dae9c51e96 -# Bug 434296 - s390x: Rework IR conversion of VSTRC, VFAE, and VFEE -# commit 4f17a067c4f8245c05611d6e8aa36e8841bab376 -# Bug 434296 - s390x: Rework IR conversion of VFENE -# commit 9bd78ebd8bb5cd4ebb3f081ceba46836cc485551 -# Bug 434296 - s390x: Rework IR conversion of VISTR -# commit 32312d588b77c5b5b5a0145bb0cc6f795b447790 -# Bug 434296 - s390x: Add memcheck test cases for vector string insns -# commit a0bb049ace14ab52d386bb1d49a399f39eec4986 -# s390x: Improve handling of amodes without base register -# commit fd935e238d907d9c523a311ba795077d95ad6912 -# s390x: Rework insn "v-vdup" and add "v-vrep" -# commit 6c1cb1a0128b00858b973ef9344e12d6ddbaaf57 -# s390x: Add support for emitting "vector or with complement" -# commit 0bd4263326b2d48f782339a9bbe1a069c7de45c7 -# s390x: Fix/optimize Iop_64HLtoV128 -# commit cae5062b05b95e0303b1122a0ea9aadc197e4f0a -# s390x: Add missing stdout.exp for vector string memcheck test -Patch11: valgrind-3.17.0-s390-prep.patch - -# KDE#432387 - s390x: z15 instructions support -Patch12: valgrind-3.17.0-s390-z15.patch - -# commit 124ae6cfa303f0cc71ffd685620cb57c4f8f02bb -# s390x: Don't emit "vector or with complement" on z13 -Patch13: valgrind-3.17.0-s390-z13-vec-fix.patch - -# commit 6da22a4d246519cd1a638cfc7eff00cdd74413c4 -# gdbserver_tests: update filters for newer glibc/gdb -Patch14: gdbserver_tests-update-filters-for-newer-glibc-gdb.patch - -# KDE#439590 glibc-2.34 breaks suppressions against obj:*/lib*/libc-2.*so* -Patch15: helgrind-and-drd-suppression-libc-and-libpthread.patch - -# KDE#420906 missing syscall wrapper for clone3 (435) -Patch16: valgrind-3.17.0-clone3.patch - -# commit 200b6a5a0ea3e1e154663b0fc575bfe2becf177d -# m_debuginfo/debuginfo.c VG_(get_fnname_kind) _start is below main -Patch17: valgrind-3.17.0_start.patch - -# KDE#440670 unhandled ppc64 syscalls 252 (statfs64 and 253 (fstatfs64) -Patch18: valgrind-3.17.0-ppc64-statfs64.patch - -# KDE#441474 vgdb might eat all memory while waiting for sigstop -Patch19: valgrind-3.17.0-vgdb-queued-signals.patch - -# KDE#440906 update test_isa_3_1_common.c to avoid modulo against hard regs -Patch20: valgrind-3.17.0-ppc64-test-isa-3-1.patch - -# KDE#441512 remove troublesome block of code from guest_ppc_toIR for pstxvp -Patch21: valgrind-3.17.0-ppc64-pstxvp.patch - -# KDE#441534 Update the expected output for test_isa_3_1_VRT -Patch22: valgrind-3.17.0-ppc64-test_isa_3_1_VRT.patch - -# commit 10922b70b825a0a9b4df9694ceb9f20e93e2c11d -# m_debuginfo: Handle DW_TAG_atomic_type -Patch23: valgrind-3.17.0-dwarf-atomic_type.patch - -# KDE#442061 Valgrind: very slow execution under Fedora 34 -Patch24: valgrind-3.17.0-faster-readdwarf3.patch - BuildRequires: make BuildRequires: glibc-devel @@ -212,9 +115,6 @@ BuildRequires: autoconf # For make check validating the documentation BuildRequires: docbook-dtds -# configure might use which -BuildRequires: which - # For testing debuginfod-find %if 0%{?fedora} > 29 || 0%{?rhel} > 7 BuildRequires: elfutils-debuginfod-client @@ -311,7 +211,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 %patch1 -p1 %patch3 -p1 @@ -322,30 +222,6 @@ Valgrind User Manual for details. %patch5 -p1 %endif -%patch6 -p1 -%patch7 -p1 - -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 - -%patch11 -p1 -touch memcheck/tests/s390x/vistr.stdout.exp -%patch12 -p1 -%patch13 -p1 - -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 - %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -518,7 +394,9 @@ cat diffs echo ===============END TESTING=============== %files -%doc COPYING NEWS README_* +%{!?_licensedir:%global license %%doc} +%license COPYING COPYING.DOCS +%doc NEWS README_* %doc docs/installed/html docs/installed/*.pdf %{_bindir}/* %dir %{_libexecdir}/valgrind @@ -531,6 +409,8 @@ echo ===============END TESTING=============== %{_mandir}/man1/* %files devel +%{!?_licensedir:%global license %%doc} +%license COPYING %dir %{_includedir}/valgrind %{_includedir}/valgrind/valgrind.h %{_includedir}/valgrind/callgrind.h @@ -541,6 +421,8 @@ echo ===============END TESTING=============== %{_libdir}/pkgconfig/valgrind.pc %if %{build_tools_devel} +%{!?_licensedir:%global license %%doc} +%license COPYING %files tools-devel %{_includedir}/valgrind/config.h %{_includedir}/valgrind/libvex*h @@ -570,6 +452,10 @@ fi %endif %changelog +* Wed Oct 13 2021 Mark Wielaard - 3.18.0-0.1.RC1 +- Update to upstream 3.18.0-RC1 +- Drop all upstreamed patches + * Mon Sep 20 2021 Mark Wielaard - 3.17.0-13 - Add valgrind-3.17.0-dwarf-atomic_type.patch - Add valgrind-3.17.0-faster-readdwarf3.patch From a368ab701a53419d8678f57b3d63be432f908398 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 13 Oct 2021 14:56:12 +0200 Subject: [PATCH 072/196] 3.18.0.RC1 sources --- .gitignore | 1 + sources | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 137c9cc..f6cf8b8 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ /valgrind-3.17.0.RC1.tar.bz2 /valgrind-3.17.0.RC2.tar.bz2 /valgrind-3.17.0.tar.bz2 +/valgrind-3.18.0.RC1.tar.bz2 diff --git a/sources b/sources index fa777d5..0bbaf19 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.17.0.tar.bz2) = 94de78942a7059e1ab84d1c0c0b8f3efd1c2d15c70b97bc7edc8136812778adb6f8187149d53a60a8c6a7c8b40534f9be5cfed0eb3c0c314545b681f950b108f +SHA512 (valgrind-3.18.0.RC1.tar.bz2) = e4067e262e3dd92cce9102745c74b3ccfefdf969627793b64de58fa6e101fe73df2603becee01b43cc26f7f19e60dd4d3141d049d4e85897dbd2a3df6915f7c1 From 9cfae7ad95173ea1e0923ee3d6bd212ca024265e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 15 Oct 2021 18:08:43 +0200 Subject: [PATCH 073/196] 3.18.1 final --- .gitignore | 1 + sources | 2 +- valgrind.spec | 11 +++++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index f6cf8b8..7b0f078 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ /valgrind-3.17.0.RC2.tar.bz2 /valgrind-3.17.0.tar.bz2 /valgrind-3.18.0.RC1.tar.bz2 +/valgrind-3.18.1.tar.bz2 diff --git a/sources b/sources index 0bbaf19..29f3ab8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.18.0.RC1.tar.bz2) = e4067e262e3dd92cce9102745c74b3ccfefdf969627793b64de58fa6e101fe73df2603becee01b43cc26f7f19e60dd4d3141d049d4e85897dbd2a3df6915f7c1 +SHA512 (valgrind-3.18.1.tar.bz2) = a03b5cd7eafab4a1cea07f46464c1546ae1cb3d106649626b1e55658badf90e58d1f3854a38a33d5dffd8237f5555ae7e1f27a4b40e06254f87825c7fc61b59b diff --git a/valgrind.spec b/valgrind.spec index 8d9abb1..e4cb92b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind -Version: 3.18.0 -Release: 0.1.RC1%{?dist} +Version: 3.18.1 +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -71,7 +71,7 @@ URL: http://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -211,7 +211,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 %patch3 -p1 @@ -452,6 +452,9 @@ fi %endif %changelog +* Fri Oct 15 2021 Mark Wielaard - 3.18.0-1 +- Update to upstream 3.18.1 final + * Wed Oct 13 2021 Mark Wielaard - 3.18.0-0.1.RC1 - Update to upstream 3.18.0-RC1 - Drop all upstreamed patches From dcd463c59d9e9191ff3cc688b5d5e37dc15b20e9 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 20 Oct 2021 18:07:19 +0200 Subject: [PATCH 074/196] Fix endif for elfutils-debuginfod-client check --- valgrind.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index e4cb92b..763f387 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -118,9 +118,9 @@ BuildRequires: docbook-dtds # For testing debuginfod-find %if 0%{?fedora} > 29 || 0%{?rhel} > 7 BuildRequires: elfutils-debuginfod-client -%endif # For using debuginfod at runtime Recommends: elfutils-debuginfod-client +%endif %{?scl:Requires:%scl_runtime} From f24346e6a48800527b0abfd6e80b02da71f92cb5 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 20 Oct 2021 19:14:59 +0200 Subject: [PATCH 075/196] Define %license only once and correct %files placement in tools-devel --- valgrind.spec | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 763f387..42e6a4b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -393,8 +393,9 @@ fi cat diffs echo ===============END TESTING=============== -%files %{!?_licensedir:%global license %%doc} + +%files %license COPYING COPYING.DOCS %doc NEWS README_* %doc docs/installed/html docs/installed/*.pdf @@ -409,8 +410,6 @@ echo ===============END TESTING=============== %{_mandir}/man1/* %files devel -%{!?_licensedir:%global license %%doc} -%license COPYING %dir %{_includedir}/valgrind %{_includedir}/valgrind/valgrind.h %{_includedir}/valgrind/callgrind.h @@ -421,9 +420,8 @@ echo ===============END TESTING=============== %{_libdir}/pkgconfig/valgrind.pc %if %{build_tools_devel} -%{!?_licensedir:%global license %%doc} -%license COPYING %files tools-devel +%license COPYING %{_includedir}/valgrind/config.h %{_includedir}/valgrind/libvex*h %{_includedir}/valgrind/pub_tool_*h From a8914b410d66f6d073fa0defaa0980cbf75fcca6 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 1 Nov 2021 22:34:25 +0100 Subject: [PATCH 076/196] Add valgrind-3.18.1-dhat-tests-copy.patch --- valgrind-3.18.1-dhat-tests-copy.patch | 20 ++++++++++++++++++++ valgrind.spec | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 valgrind-3.18.1-dhat-tests-copy.patch diff --git a/valgrind-3.18.1-dhat-tests-copy.patch b/valgrind-3.18.1-dhat-tests-copy.patch new file mode 100644 index 0000000..8e183b9 --- /dev/null +++ b/valgrind-3.18.1-dhat-tests-copy.patch @@ -0,0 +1,20 @@ +commit 33aba8eef68b1745d3de96b609ff8296b70d9a1c +Author: Paul Floyd +Date: Wed Oct 27 21:37:00 2021 +0200 + + Bug 444495 - dhat/tests/copy fails on s390x + + Add -fno-builtin to ensure that the copy functions get called and so dhat + can intercept and count them. + +diff --git a/dhat/tests/Makefile.am b/dhat/tests/Makefile.am +index 86a9b6d64..b86fc416d 100644 +--- a/dhat/tests/Makefile.am ++++ b/dhat/tests/Makefile.am +@@ -29,3 +29,6 @@ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) + # We don't care about uninitialized or unused malloc results + basic_CFLAGS = $(AM_CFLAGS) -Wno-uninitialized + big_CFLAGS = $(AM_CFLAGS) -Wno-unused-result ++ ++# Prevent the copying functions from being inlined ++copy_CFLAGS = $(AM_CFLAGS) -fno-builtin diff --git a/valgrind.spec b/valgrind.spec index 42e6a4b..9501e86 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -85,6 +85,9 @@ Patch4: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch5: valgrind-3.16.0-some-Wl-z-now.patch +# KDE#444495 dhat/tests/copy fails on s390x +Patch6: valgrind-3.18.1-dhat-tests-copy.patch + BuildRequires: make BuildRequires: glibc-devel @@ -222,6 +225,8 @@ Valgrind User Manual for details. %patch5 -p1 %endif +%patch6 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -450,6 +455,9 @@ fi %endif %changelog +* Mon Nov 1 2021 Mark Wielaard +- Add valgrind-3.18.1-dhat-tests-copy.patch + * Fri Oct 15 2021 Mark Wielaard - 3.18.0-1 - Update to upstream 3.18.1 final From c64eafb449a423a1996f223f31726c6d40bee6b0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 1 Nov 2021 22:40:00 +0100 Subject: [PATCH 077/196] Add valgrind-3.18.1-s390x-EXRL.patch --- valgrind-3.18.1-s390x-EXRL.patch | 549 +++++++++++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 554 insertions(+) create mode 100644 valgrind-3.18.1-s390x-EXRL.patch diff --git a/valgrind-3.18.1-s390x-EXRL.patch b/valgrind-3.18.1-s390x-EXRL.patch new file mode 100644 index 0000000..6927cc3 --- /dev/null +++ b/valgrind-3.18.1-s390x-EXRL.patch @@ -0,0 +1,549 @@ +commit b77dbefe72e4a5c7bcf1576a02c909010bd56991 +Author: Andreas Arnez +Date: Fri Oct 22 19:55:12 2021 +0200 + + Bug 444242 - s390x: Sign-extend "relative long" offset in EXRL + + In s390_irgen_EXRL, the offset is zero-extended instead of sign-extended, + typically causing Valgrind to crash when a negative offset occurs. + + Fix this with a new helper function that calculates a "relative long" + address from a 32-bit offset. Replace other calculations of "relative + long" addresses by invocations of this function as well. And for + consistency, do the same with "relative" (short) addresses. + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 72222ab04..fffc563d4 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -399,6 +399,22 @@ mkF64i(ULong value) + return IRExpr_Const(IRConst_F64i(value)); + } + ++/* Return the 64-bit address with the given 32-bit "relative long" offset from ++ the current guest instruction being translated. */ ++static __inline__ Addr64 ++addr_rel_long(UInt offset) ++{ ++ return guest_IA_curr_instr + ((Addr64)(Long)(Int)offset << 1); ++} ++ ++/* Return the 64-bit address with the given 16-bit "relative" offset from the ++ current guest instruction being translated. */ ++static __inline__ Addr64 ++addr_relative(UShort offset) ++{ ++ return guest_IA_curr_instr + ((Addr64)(Long)(Short)offset << 1); ++} ++ + /* Little helper function for my sanity. ITE = if-then-else */ + static IRExpr * + mkite(IRExpr *condition, IRExpr *iftrue, IRExpr *iffalse) +@@ -5516,7 +5532,7 @@ static const HChar * + s390_irgen_BRAS(UChar r1, UShort i2) + { + put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 4ULL)); +- call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ call_function_and_chase(addr_relative(i2)); + + return "bras"; + } +@@ -5525,7 +5541,7 @@ static const HChar * + s390_irgen_BRASL(UChar r1, UInt i2) + { + put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 6ULL)); +- call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); ++ call_function_and_chase(addr_rel_long(i2)); + + return "brasl"; + } +@@ -5538,12 +5554,11 @@ s390_irgen_BRC(UChar r1, UShort i2) + if (r1 == 0) { + } else { + if (r1 == 15) { +- always_goto_and_chase( +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ always_goto_and_chase(addr_relative(i2)); + } else { + assign(cond, s390_call_calculate_cond(r1)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + } + } +@@ -5561,11 +5576,11 @@ s390_irgen_BRCL(UChar r1, UInt i2) + if (r1 == 0) { + } else { + if (r1 == 15) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); ++ always_goto_and_chase(addr_rel_long(i2)); + } else { + assign(cond, s390_call_calculate_cond(r1)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); ++ addr_rel_long(i2)); + } + } + if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) +@@ -5579,7 +5594,7 @@ s390_irgen_BRCT(UChar r1, UShort i2) + { + put_gpr_w1(r1, binop(Iop_Sub32, get_gpr_w1(r1), mkU32(1))); + if_condition_goto(binop(Iop_CmpNE32, get_gpr_w1(r1), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brct"; + } +@@ -5589,7 +5604,7 @@ s390_irgen_BRCTH(UChar r1, UInt i2) + { + put_gpr_w0(r1, binop(Iop_Sub32, get_gpr_w0(r1), mkU32(1))); + if_condition_goto(binop(Iop_CmpNE32, get_gpr_w0(r1), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brcth"; + } +@@ -5599,7 +5614,7 @@ s390_irgen_BRCTG(UChar r1, UShort i2) + { + put_gpr_dw0(r1, binop(Iop_Sub64, get_gpr_dw0(r1), mkU64(1))); + if_condition_goto(binop(Iop_CmpNE64, get_gpr_dw0(r1), mkU64(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brctg"; + } +@@ -5612,7 +5627,7 @@ s390_irgen_BRXH(UChar r1, UChar r3, UShort i2) + assign(value, get_gpr_w1(r3 | 1)); + put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3))); + if_condition_goto(binop(Iop_CmpLT32S, mkexpr(value), get_gpr_w1(r1)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brxh"; + } +@@ -5625,7 +5640,7 @@ s390_irgen_BRXHG(UChar r1, UChar r3, UShort i2) + assign(value, get_gpr_dw0(r3 | 1)); + put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3))); + if_condition_goto(binop(Iop_CmpLT64S, mkexpr(value), get_gpr_dw0(r1)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brxhg"; + } +@@ -5638,7 +5653,7 @@ s390_irgen_BRXLE(UChar r1, UChar r3, UShort i2) + assign(value, get_gpr_w1(r3 | 1)); + put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3))); + if_condition_goto(binop(Iop_CmpLE32S, get_gpr_w1(r1), mkexpr(value)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brxle"; + } +@@ -5651,7 +5666,7 @@ s390_irgen_BRXLG(UChar r1, UChar r3, UShort i2) + assign(value, get_gpr_dw0(r3 | 1)); + put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3))); + if_condition_goto(binop(Iop_CmpLE64S, get_gpr_dw0(r1), mkexpr(value)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); ++ addr_relative(i2)); + + return "brxlg"; + } +@@ -5782,8 +5797,7 @@ s390_irgen_CRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I32); + + assign(op1, get_gpr_w1(r1)); +- assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ assign(op2, load(Ity_I32, mkU64(addr_rel_long(i2)))); + s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); + + return "crl"; +@@ -5796,8 +5810,7 @@ s390_irgen_CGRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ assign(op2, load(Ity_I64, mkU64(addr_rel_long(i2)))); + s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); + + return "cgrl"; +@@ -5810,8 +5823,7 @@ s390_irgen_CGFRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); + + return "cgfrl"; +@@ -5875,15 +5887,14 @@ s390_irgen_CRJ(UChar r1, UChar r2, UShort i4, UChar m3) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase( +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_w1(r1)); + assign(op2, get_gpr_w1(r2)); + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, + op1, op2)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -5901,15 +5912,14 @@ s390_irgen_CGRJ(UChar r1, UChar r2, UShort i4, UChar m3) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase( +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_dw0(r1)); + assign(op2, get_gpr_dw0(r2)); + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, + op1, op2)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -5975,14 +5985,14 @@ s390_irgen_CIJ(UChar r1, UChar m3, UShort i4, UChar i2) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_w1(r1)); + op2 = (Int)(Char)i2; + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, op1, + mktemp(Ity_I32, mkU32((UInt)op2)))); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -6000,14 +6010,14 @@ s390_irgen_CGIJ(UChar r1, UChar m3, UShort i4, UChar i2) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_dw0(r1)); + op2 = (Long)(Char)i2; + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, op1, + mktemp(Ity_I64, mkU64((ULong)op2)))); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -6131,8 +6141,7 @@ s390_irgen_CHRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I32); + + assign(op1, get_gpr_w1(r1)); +- assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); + + return "chrl"; +@@ -6145,8 +6154,7 @@ s390_irgen_CGHRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); + + return "cghrl"; +@@ -6401,8 +6409,7 @@ s390_irgen_CLRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I32); + + assign(op1, get_gpr_w1(r1)); +- assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ assign(op2, load(Ity_I32, mkU64(addr_rel_long(i2)))); + s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); + + return "clrl"; +@@ -6415,8 +6422,7 @@ s390_irgen_CLGRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ assign(op2, load(Ity_I64, mkU64(addr_rel_long(i2)))); + s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); + + return "clgrl"; +@@ -6429,8 +6435,7 @@ s390_irgen_CLGFRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); + + return "clgfrl"; +@@ -6443,8 +6448,7 @@ s390_irgen_CLHRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I32); + + assign(op1, get_gpr_w1(r1)); +- assign(op2, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_16Uto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); + + return "clhrl"; +@@ -6457,8 +6461,7 @@ s390_irgen_CLGHRL(UChar r1, UInt i2) + IRTemp op2 = newTemp(Ity_I64); + + assign(op1, get_gpr_dw0(r1)); +- assign(op2, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ assign(op2, unop(Iop_16Uto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); + s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); + + return "clghrl"; +@@ -6730,14 +6733,14 @@ s390_irgen_CLRJ(UChar r1, UChar r2, UShort i4, UChar m3) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_w1(r1)); + assign(op2, get_gpr_w1(r2)); + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, + op1, op2)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -6755,14 +6758,14 @@ s390_irgen_CLGRJ(UChar r1, UChar r2, UShort i4, UChar m3) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_dw0(r1)); + assign(op2, get_gpr_dw0(r2)); + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, + op1, op2)); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -6828,14 +6831,14 @@ s390_irgen_CLIJ(UChar r1, UChar m3, UShort i4, UChar i2) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_w1(r1)); + op2 = (UInt)i2; + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, op1, + mktemp(Ity_I32, mkU32(op2)))); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -6853,14 +6856,14 @@ s390_irgen_CLGIJ(UChar r1, UChar m3, UShort i4, UChar i2) + if (m3 == 0) { + } else { + if (m3 == 14) { +- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ always_goto_and_chase(addr_relative(i4)); + } else { + assign(op1, get_gpr_dw0(r1)); + op2 = (ULong)i2; + assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, op1, + mktemp(Ity_I64, mkU64(op2)))); + if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), +- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); ++ addr_relative(i4)); + + } + } +@@ -7539,8 +7542,7 @@ s390_irgen_LGFI(UChar r1, UInt i2) + static const HChar * + s390_irgen_LRL(UChar r1, UInt i2) + { +- put_gpr_w1(r1, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ put_gpr_w1(r1, load(Ity_I32, mkU64(addr_rel_long(i2)))); + + return "lrl"; + } +@@ -7548,8 +7550,7 @@ s390_irgen_LRL(UChar r1, UInt i2) + static const HChar * + s390_irgen_LGRL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) +- i2 << 1)))); ++ put_gpr_dw0(r1, load(Ity_I64, mkU64(addr_rel_long(i2)))); + + return "lgrl"; + } +@@ -7557,8 +7558,7 @@ s390_irgen_LGRL(UChar r1, UInt i2) + static const HChar * + s390_irgen_LGFRL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); + + return "lgfrl"; + } +@@ -7598,7 +7598,7 @@ s390_irgen_LAEY(UChar r1, IRTemp op2addr) + static const HChar * + s390_irgen_LARL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1))); ++ put_gpr_dw0(r1, mkU64(addr_rel_long(i2))); + + return "larl"; + } +@@ -8038,8 +8038,7 @@ s390_irgen_LGHI(UChar r1, UShort i2) + static const HChar * + s390_irgen_LHRL(UChar r1, UInt i2) + { +- put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); + + return "lhrl"; + } +@@ -8047,8 +8046,7 @@ s390_irgen_LHRL(UChar r1, UInt i2) + static const HChar * + s390_irgen_LGHRL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); + + return "lghrl"; + } +@@ -8088,8 +8086,7 @@ s390_irgen_LLGF(UChar r1, IRTemp op2addr) + static const HChar * + s390_irgen_LLGFRL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); + + return "llgfrl"; + } +@@ -8169,8 +8166,7 @@ s390_irgen_LLGH(UChar r1, IRTemp op2addr) + static const HChar * + s390_irgen_LLHRL(UChar r1, UInt i2) + { +- put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); + + return "llhrl"; + } +@@ -8178,8 +8174,7 @@ s390_irgen_LLHRL(UChar r1, UInt i2) + static const HChar * + s390_irgen_LLGHRL(UChar r1, UInt i2) + { +- put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr + +- ((ULong)(Long)(Int)i2 << 1))))); ++ put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); + + return "llghrl"; + } +@@ -10064,8 +10059,7 @@ s390_irgen_STG(UChar r1, IRTemp op2addr) + static const HChar * + s390_irgen_STRL(UChar r1, UInt i2) + { +- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), +- get_gpr_w1(r1)); ++ store(mkU64(addr_rel_long(i2)), get_gpr_w1(r1)); + + return "strl"; + } +@@ -10073,8 +10067,7 @@ s390_irgen_STRL(UChar r1, UInt i2) + static const HChar * + s390_irgen_STGRL(UChar r1, UInt i2) + { +- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), +- get_gpr_dw0(r1)); ++ store(mkU64(addr_rel_long(i2)), get_gpr_dw0(r1)); + + return "stgrl"; + } +@@ -10203,8 +10196,7 @@ s390_irgen_STHY(UChar r1, IRTemp op2addr) + static const HChar * + s390_irgen_STHRL(UChar r1, UInt i2) + { +- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), +- get_gpr_hw3(r1)); ++ store(mkU64(addr_rel_long(i2)), get_gpr_hw3(r1)); + + return "sthrl"; + } +@@ -13282,7 +13274,7 @@ static const HChar * + s390_irgen_EXRL(UChar r1, UInt offset) + { + IRTemp addr = newTemp(Ity_I64); +- Addr64 bytes_addr = guest_IA_curr_instr + offset * 2UL; ++ Addr64 bytes_addr = addr_rel_long(offset); + UChar *bytes = (UChar *)(HWord)bytes_addr; + /* we might save one round trip because we know the target */ + if (!last_execute_target) +diff --git a/none/tests/s390x/exrl.c b/none/tests/s390x/exrl.c +index 2c99602d8..e669e484f 100644 +--- a/none/tests/s390x/exrl.c ++++ b/none/tests/s390x/exrl.c +@@ -54,6 +54,17 @@ int main(void) + printf("|\n"); + printf("\n"); + ++ printf("------- EXRL with negative offset\n"); ++ asm volatile( "j 2f\n\t" ++ "1:\n\t" ++ "mvc 2(1,%0),0(%0)\n\t" ++ "2:\n\t" ++ "lghi 1,8\n\t" ++ ".insn ril,0xc60000000000,1,1b\n\t" // exrl 1, 1b ++ : : "a" (target) ++ : "1", "2", "3", "4"); ++ printf(" target = |%s|\n", target); ++ + return 0; + } + +diff --git a/none/tests/s390x/exrl.stdout.exp b/none/tests/s390x/exrl.stdout.exp +index 520919e92..30dcde829 100644 +--- a/none/tests/s390x/exrl.stdout.exp ++++ b/none/tests/s390x/exrl.stdout.exp +@@ -11,3 +11,5 @@ after: target = |0123456789aXXXXX| + ------- EXRL to OR in the syscall number (writes out target) + target = |0123456789aXXXXX| + ++------- EXRL with negative offset ++ target = |01010101010XXXXX| diff --git a/valgrind.spec b/valgrind.spec index 9501e86..f66eab1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -88,6 +88,9 @@ Patch5: valgrind-3.16.0-some-Wl-z-now.patch # KDE#444495 dhat/tests/copy fails on s390x Patch6: valgrind-3.18.1-dhat-tests-copy.patch +# KDE#444242 s390x: Sign-extend "relative long" offset in EXRL +Patch7: valgrind-3.18.1-s390x-EXRL.patch + BuildRequires: make BuildRequires: glibc-devel @@ -226,6 +229,7 @@ Valgrind User Manual for details. %endif %patch6 -p1 +%patch7 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -457,6 +461,7 @@ fi %changelog * Mon Nov 1 2021 Mark Wielaard - Add valgrind-3.18.1-dhat-tests-copy.patch +- Add valgrind-3.18.1-s390x-EXRL.patch * Fri Oct 15 2021 Mark Wielaard - 3.18.0-1 - Update to upstream 3.18.1 final From edae2b9128227c8ec1d74759a9b09204b4118493 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 1 Nov 2021 22:47:41 +0100 Subject: [PATCH 078/196] Add valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch --- valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch | 60 +++++++++++++++++++++ valgrind.spec | 5 ++ 2 files changed, 65 insertions(+) create mode 100644 valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch diff --git a/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch b/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch new file mode 100644 index 0000000..bb36c80 --- /dev/null +++ b/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch @@ -0,0 +1,60 @@ +commit 6e08ee95f7f1b1c3fd434fa380cc5b2cc3e3f7c7 +Author: Carl Love +Date: Fri Oct 29 16:30:33 2021 -0500 + + Bug 444571 - PPC, fix the lxsibzx and lxsihzx so they only load their respective sized data. + + The lxsibzx was doing a 64-bit load. The result was initializing + additional bytes in the register that should not have been initialized. + The memcheck/tests/linux/dlclose_leak test detected the issue. The + code generation uses lxsibzx and stxsibx with -mcpu=power9. Previously + the lbz and stb instructions were generated. + + The same issue was noted and fixed with the lxsihzx instruction. The + memcheck/tests/linux/badrw test now passes as well. + + https://bugs.kde.org/show_bug.cgi?id=444571 + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index d90d566ed..8afd77490 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -25359,19 +25359,17 @@ dis_vx_load ( UInt prefix, UInt theInstr ) + + else + irx_addr = mkexpr( EA ); +- +- byte = load( Ity_I64, irx_addr ); ++ /* byte load */ ++ byte = load( Ity_I8, irx_addr ); + putVSReg( XT, binop( Iop_64HLtoV128, +- binop( Iop_And64, +- byte, +- mkU64( 0xFF ) ), ++ unop( Iop_8Uto64, byte ), + mkU64( 0 ) ) ); + break; + } + + case 0x32D: // lxsihzx + { +- IRExpr *byte; ++ IRExpr *hword; + IRExpr* irx_addr; + + DIP("lxsihzx %u,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr); +@@ -25382,11 +25380,10 @@ dis_vx_load ( UInt prefix, UInt theInstr ) + else + irx_addr = mkexpr( EA ); + +- byte = load( Ity_I64, irx_addr ); ++ hword = load( Ity_I16, irx_addr ); + putVSReg( XT, binop( Iop_64HLtoV128, +- binop( Iop_And64, +- byte, +- mkU64( 0xFFFF ) ), ++ unop( Iop_16Uto64, ++ hword ), + mkU64( 0 ) ) ); + break; + } diff --git a/valgrind.spec b/valgrind.spec index f66eab1..23237ac 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -91,6 +91,9 @@ Patch6: valgrind-3.18.1-dhat-tests-copy.patch # KDE#444242 s390x: Sign-extend "relative long" offset in EXRL Patch7: valgrind-3.18.1-s390x-EXRL.patch +# KDE#444571 - PPC, fix lxsibzx and lxsihzx +Patch8: valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch + BuildRequires: make BuildRequires: glibc-devel @@ -230,6 +233,7 @@ Valgrind User Manual for details. %patch6 -p1 %patch7 -p1 +%patch8 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -462,6 +466,7 @@ fi * Mon Nov 1 2021 Mark Wielaard - Add valgrind-3.18.1-dhat-tests-copy.patch - Add valgrind-3.18.1-s390x-EXRL.patch +- Add valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch * Fri Oct 15 2021 Mark Wielaard - 3.18.0-1 - Update to upstream 3.18.1 final From 44edd212760d35c6008ea876fcd1573e1e824c1d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 1 Nov 2021 22:48:45 +0100 Subject: [PATCH 079/196] 3.18.1-2 --- valgrind.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 23237ac..96a5c39 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -463,7 +463,7 @@ fi %endif %changelog -* Mon Nov 1 2021 Mark Wielaard +* Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch - Add valgrind-3.18.1-s390x-EXRL.patch - Add valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch From f377310679d4d7c85bd2396d9c02e88f9672187d Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Tue, 16 Nov 2021 10:59:41 +0100 Subject: [PATCH 080/196] Add valgrind specific rpminspect configuration --- gating.yaml | 1 + rpminspect.yaml | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 rpminspect.yaml diff --git a/gating.yaml b/gating.yaml index 8daf6e5..0ae927e 100644 --- a/gating.yaml +++ b/gating.yaml @@ -5,6 +5,7 @@ decision_context: bodhi_update_push_stable subject_type: koji_build rules: - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.rpminspect.static-analysis} --- !Policy product_versions: - rhel-8 diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..37b57a6 --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,33 @@ +--- +inspections: + # xml files shipped are GDB register set descriptions which can only be + # verified with gdb/features/gdb-target.dtd, provided in GDB sources. + xml: off + +annocheck: + # Ignore files built specially without hardening flags + ignore: + # Valgrind tools themselves (memcheck, cachegrind, massif, etc) are + # statically linked and need to be built without PIE to be loaded at + # a fixed address in the program's address space. + # Also need to be built without stack protection so the generated + # code (valgrind VEX jit) interacts correctly with their own static code. + - /usr/libexec/valgrind/*-*-linux + # Wrappers for various string and mem functions such as memcpy, strlen, etc + # that valgrind uses to keep track of memory usage. Hardening settings such + # as optimizations need to be disabled so they don't interfere or break + # the checks that valgrind does internally. + - /usr/libexec/valgrind/vgpreload*so + # libmpiwrap is special since it is a LD_PRELOAD wrapper used by valgrind + # memcheck for MPI using programs, the wrapper is against a specific MPI + # implementation though, in our case openmpi. We don't want to have a hard + # dependency on openmpi however, so a user can use the wrapper without + # explicitly pulling in openmpi unless the program explicitly uses it. + - /usr/lib*/openmpi/valgrind/libmpiwrap-*-linux.so + +runpath: + allowed_paths: + # As described above, libmpiwrap is a wrapper against openmpi + # so we set DT_RUNPATH to openmpi libs path + - /usr/lib/openmpi/lib + - /usr/lib64/openmpi/lib From 781a1f8449afb55280f6327e6b495c2d324db6bf Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 16:09:01 +0100 Subject: [PATCH 081/196] Add valgrind-3.18.1-ppc-pstq.patch --- valgrind-3.18.1-ppc-pstq.patch | 47 ++++++++++++++++++++++++++++++++++ valgrind.spec | 8 ++++++ 2 files changed, 55 insertions(+) create mode 100644 valgrind-3.18.1-ppc-pstq.patch diff --git a/valgrind-3.18.1-ppc-pstq.patch b/valgrind-3.18.1-ppc-pstq.patch new file mode 100644 index 0000000..2e23d18 --- /dev/null +++ b/valgrind-3.18.1-ppc-pstq.patch @@ -0,0 +1,47 @@ +commit ae8c6de01417023e78763de145b1c0e6ddd87277 +Author: Carl Love +Date: Wed Oct 20 20:40:13 2021 +0000 + + Fix for the prefixed stq instruction in PC relative mode. + + The pstq instruction for R=1, was not using the correct effective address. + The EA_hi and EA_lo should have been based on the value of EA as calculated + by the function calculate_prefix_EA. Unfortuanely, the EA_hi and EA_lo + addresses were still using the previous code (not PC relative) to calculate + the address from the contants of RA plus the offset. + +diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c +index 8afd77490..543fa9574 100644 +--- a/VEX/priv/guest_ppc_toIR.c ++++ b/VEX/priv/guest_ppc_toIR.c +@@ -9838,23 +9838,24 @@ static Bool dis_int_store_ds_prefix ( UInt prefix, + if (host_endness == VexEndnessBE) { + + /* upper 64-bits */ +- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val ) ); ++ assign( EA_hi, mkexpr(EA)); + + /* lower 64-bits */ +- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val+8 ) ); ++ assign( EA_lo, binop(Iop_Add64, mkexpr(EA), mkU64(8))); ++ + } else { + /* upper 64-bits */ +- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val+8 ) ); ++ assign( EA_hi, binop(Iop_Add64, mkexpr(EA), mkU64(8))); + + /* lower 64-bits */ +- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val ) ); ++ assign( EA_lo, mkexpr(EA)); + } + } else { + /* upper half of upper 64-bits */ +- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val+4 ) ); ++ assign( EA_hi, binop(Iop_Add32, mkexpr(EA), mkU32(4))); + + /* lower half of upper 64-bits */ +- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val+12 ) ); ++ assign( EA_lo, binop(Iop_Add32, mkexpr(EA), mkU32(12))); + } + + /* Note, the store order for stq instruction is the same for BE diff --git a/valgrind.spec b/valgrind.spec index 96a5c39..a9f0e5e 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -94,6 +94,10 @@ Patch7: valgrind-3.18.1-s390x-EXRL.patch # KDE#444571 - PPC, fix lxsibzx and lxsihzx Patch8: valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch +# commit ae8c6de01417023e78763de145b1c0e6ddd87277 +# Fix for the prefixed stq instruction in PC relative mode. +Patch9: valgrind-3.18.1-ppc-pstq.patch + BuildRequires: make BuildRequires: glibc-devel @@ -234,6 +238,7 @@ Valgrind User Manual for details. %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -463,6 +468,9 @@ fi %endif %changelog +* Wed Nov 17 2021 Mark Wielaard +- Add valgrind-3.18.1-ppc-pstq.patch + * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch - Add valgrind-3.18.1-s390x-EXRL.patch From 1cb064e6af74fd5a83a449d2fbdf72a753ef7bd1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 16:27:15 +0100 Subject: [PATCH 082/196] Add valgrind-3.18.1-ppc-pstq-tests.patch --- valgrind-3.18.1-ppc-pstq-tests.patch | 1876 ++++++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 1881 insertions(+) create mode 100644 valgrind-3.18.1-ppc-pstq-tests.patch diff --git a/valgrind-3.18.1-ppc-pstq-tests.patch b/valgrind-3.18.1-ppc-pstq-tests.patch new file mode 100644 index 0000000..58498f2 --- /dev/null +++ b/valgrind-3.18.1-ppc-pstq-tests.patch @@ -0,0 +1,1876 @@ +commit 3950c5d661ee09526cddcf24daf5fc22bc83f70c +Author: Carl Love +Date: Mon Nov 1 11:18:32 2021 -0500 + + Valgrind Add powerpc R=1 tests + + Contributed by Will Schmidt + + This includes updates and adjustments as suggested by Carl. + + Add tests that exercise PCRelative instructions. + These instructions are encoded with R==1, which indicate that + the memory accessed by the instruction is at a location + relative to the currently executing instruction. + + These tests are built using -Wl,-text and -Wl,-bss + options to ensure the location of the target array is at a + location with a specific offset from the currently + executing instruction. + + The write instructions are aimed at a large buffer in + the bss section; which is checked for updates at the + completion of each test. + + In order to ensure consistent output across assorted + systems, the tests have been padded with ori, nop instructions + and align directives. + + Detailed changes: + * Makefile.am: Add test_isa_3_1_R1_RT and test_isa_3_1_R1_XT tests. + * isa_3_1_helpers.h: Add identify_instruction_by_func_name() helper function + to indicate if the test is for R==1. + Add helpers to initialize and print changes to the pcrelative_write_target + array. + Add #define to help pad code with a series of eyecatcher ORI instructions. + * test_isa_3_1_R1_RT.c: New test. + * test_isa_3_1_R1_XT.c: New test. + * test_isa_3_1_R1_XT.stdout.exp: New expected output. + * test_isa_3_1_R1_XT.stdout.exp: New expected output. + * test_isa_3_1_R1_RT.stderr.exp: New expected output. + * test_isa_3_1_R1_RT.stderr.exp: New expected output. + + * test_isa_3_1_R1_RT.vgtest: New test handler. + * test_isa_3_1_R1_XT.vgtest: New test handler. + + * test_isa_3_1_common.c: Add indicators (updates_byte,updates_halfword, + updates_word) indicators to control the output from the R==1 tests. + Add helper check for "_R1" to indicate if instruction is coded with R==1. + Add init and print helpers for the pcrelative_write_target array. + +diff --git a/none/tests/ppc64/Makefile.am b/none/tests/ppc64/Makefile.am +index b709f3ef4..f8eab9fc0 100644 +--- a/none/tests/ppc64/Makefile.am ++++ b/none/tests/ppc64/Makefile.am +@@ -61,6 +61,8 @@ EXTRA_DIST = \ + test_isa_3_1_VRT.vgtest test_isa_3_1_VRT.stderr.exp test_isa_3_1_VRT.stdout.exp \ + test_isa_3_1_Misc.vgtest test_isa_3_1_Misc.stderr.exp test_isa_3_1_Misc.stdout.exp \ + test_isa_3_1_AT.vgtest test_isa_3_1_AT.stderr.exp test_isa_3_1_AT.stdout.exp \ ++ test_isa_3_1_R1_RT.vgtest test_isa_3_1_R1_RT.stderr.exp test_isa_3_1_R1_RT.stdout.exp \ ++ test_isa_3_1_R1_XT.vgtest test_isa_3_1_R1_XT.stderr.exp test_isa_3_1_R1_XT.stdout.exp \ + subnormal_test.stderr.exp subnormal_test.stdout.exp \ + subnormal_test.vgtest test_darn_inst.stderr.exp \ + test_darn_inst.stdout.exp test_darn_inst.vgtest \ +@@ -68,8 +70,8 @@ EXTRA_DIST = \ + test_copy_paste.stderr.exp test_copy_paste.stdout.exp \ + test_copy_paste.vgtest \ + test_mcrxrx.vgtest test_mcrxrx.stderr.exp test_mcrxrx.stdout.exp \ +- test_lxvx_stxvx.vgtest test_lxvx_stxvx.stderr.exp test_lxvx_stxvx.stdout.exp-p8 test_lxvx_stxvx.stdout.exp-p9 +- ++ test_lxvx_stxvx.vgtest test_lxvx_stxvx.stderr.exp \ ++ test_lxvx_stxvx.stdout.exp-p8 test_lxvx_stxvx.stdout.exp-p9 + + check_PROGRAMS = \ + allexec \ +@@ -80,11 +82,12 @@ check_PROGRAMS = \ + test_isa_3_0 test_mod_instructions \ + test_isa_3_1_RT test_isa_3_1_XT test_isa_3_1_VRT \ + test_isa_3_1_Misc test_isa_3_1_AT \ ++ test_isa_3_1_R1_RT test_isa_3_1_R1_XT \ + subnormal_test test_darn_inst test_copy_paste \ + test_tm test_touch_tm data-cache-instructions \ + std_reg_imm \ + twi_tdi tw_td power6_bcmp scv_test \ +- test_mcrxrx test_lxvx_stxvx ++ test_mcrxrx test_lxvx_stxvx + + # lmw, stmw, lswi, lswx, stswi, stswx compile (and run) only on big endian. + if VGCONF_PLATFORMS_INCLUDE_PPC64BE_LINUX +@@ -106,6 +109,8 @@ test_isa_3_1_RT_SOURCES = test_isa_3_1_RT.c test_isa_3_1_common.c + test_isa_3_1_VRT_SOURCES = test_isa_3_1_VRT.c test_isa_3_1_common.c + test_isa_3_1_Misc_SOURCES = test_isa_3_1_Misc.c test_isa_3_1_common.c + test_isa_3_1_AT_SOURCES = test_isa_3_1_AT.c test_isa_3_1_common.c ++test_isa_3_1_R1_XT_SOURCES = test_isa_3_1_R1_XT.c test_isa_3_1_common.c ++test_isa_3_1_R1_RT_SOURCES = test_isa_3_1_R1_RT.c test_isa_3_1_common.c + test_darn_inst_SOURCES = test_darn_inst.c + + if HAS_ALTIVEC +@@ -224,6 +229,11 @@ test_isa_3_1_VRT_CFLAGS = $(test_isa_3_1_CFLAGS) + test_isa_3_1_Misc_CFLAGS = $(test_isa_3_1_CFLAGS) + test_isa_3_1_AT_CFLAGS = $(test_isa_3_1_CFLAGS) + ++# The _R1_foo tests exercise pc-relative instructions, so require the bss and text sections ++# exist at known offsets with respect to each other. ++test_isa_3_1_R1_RT_CFLAGS = $(test_isa_3_1_CFLAGS) -Wl,-Tbss,0x20000 -Wl,-Ttext,0x40000 ++test_isa_3_1_R1_XT_CFLAGS = $(test_isa_3_1_CFLAGS) -Wl,-Tbss,0x20000 -Wl,-Ttext,0x40000 ++ + subnormal_test_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) $(ISA_2_06_FLAG) \ + @FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX) $(BUILD_FLAGS_ISA_2_06) + +diff --git a/none/tests/ppc64/isa_3_1_helpers.h b/none/tests/ppc64/isa_3_1_helpers.h +index 338f55526..716a6277b 100644 +--- a/none/tests/ppc64/isa_3_1_helpers.h ++++ b/none/tests/ppc64/isa_3_1_helpers.h +@@ -43,6 +43,9 @@ extern void debug_show_current_iteration(); + extern void debug_dump_buffer(); + + extern void identify_form_components(const char *, const char *); ++extern void identify_instruction_by_func_name(const char *); ++extern void init_pcrelative_write_target(); ++extern void print_pcrelative_write_target(); + extern void dump_vsxargs(); + extern void generic_prologue(); + extern void build_args_table(); +@@ -58,6 +61,21 @@ extern void initialize_source_registers(); + extern void set_up_iterators(); + extern void initialize_buffer(int); + ++/* This (TEXT_BSS_DELTA) is the relative distance between those ++ sections as set by the linker options for the R==1 tests. */ ++#define TEXT_BSS_DELTA 0x20000 ++#define RELOC_BUFFER_SIZE 0x1000 ++extern unsigned long long pcrelative_buff_addr(int); ++#define PAD_ORI \ ++ __asm__ __volatile__ ("ori 21,21,21"); \ ++ __asm__ __volatile__ ("ori 22,22,22");\ ++ __asm__ __volatile__ ("ori 23,23,23");\ ++ __asm__ __volatile__ ("ori 24,24,24");\ ++ __asm__ __volatile__ ("ori 25,25,25");\ ++ __asm__ __volatile__ ("ori 26,26,26");\ ++ __asm__ __volatile__ ("ori 27,27,27");\ ++ __asm__ __volatile__ ("ori 28,28,28"); ++ + extern int verbose; + #define debug_printf(X) if (verbose>0) printf(X); + #define debug_show_labels (verbose>0) +diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.c b/none/tests/ppc64/test_isa_3_1_R1_RT.c +new file mode 100644 +index 000000000..d73b84b10 +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_RT.c +@@ -0,0 +1,624 @@ ++/* ++ * Valgrind testcase for PowerPC ISA 3.1 ++ * ++ * Copyright (C) 2019-2020 Will Schmidt ++ * ++ * 64bit build: ++ * gcc -Winline -Wall -g -O -mregnames -maltivec -m64 ++ */ ++ ++/* ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of the ++ * License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++#ifdef HAS_ISA_3_1 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* Condition Register fields. ++ These are used to capture the condition register values immediately after ++ the instruction under test is executed. This is done to help prevent other ++ test overhead (switch statements, result compares, etc) from disturbing ++ the test case results. */ ++unsigned long current_cr; ++unsigned long current_fpscr; ++ ++struct test_list_t current_test; ++ ++#include "isa_3_1_helpers.h" ++ ++static void test_plxvp_off0_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plxvp 20, +0(0),1" ); ++ PAD_ORI ++} ++static void test_plxvp_off8_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plxvp 20, +8(0),1" ); ++ PAD_ORI ++} ++static void test_plxvp_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plxvp 20, +16(0),1" ); ++ PAD_ORI ++} ++static void test_plxvp_off24_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plxvp 20, +24(0),1" ); ++ PAD_ORI ++} ++static void test_plxvp_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plxvp 20, +32(0),1" ); ++ PAD_ORI ++} ++static void test_plbz_off0_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plbz %0, +0(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plbz_off8_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plbz %0, +8(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plbz_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plbz %0, +16(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plbz_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plbz %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plbz_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plbz %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plhz_off0_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plhz %0, +0(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plhz_off8_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plhz %0, +8(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plhz_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plhz %0, +16(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plhz_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plhz %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plhz_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plhz %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plha_off0_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plha %0, +0(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plha_off8_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plha %0, +8(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plha_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plha %0, +16(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plha_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plha %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plha_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plha %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plwz_off0_R1 (void) { ++ __asm__ __volatile__ ("plwz %0, +0(0), 1" : "=r" (rt) ); ++} ++static void test_plwz_off8_R1 (void) { ++ __asm__ __volatile__ ("plwz %0, +8(0), 1" : "=r" (rt) ); ++} ++static void test_plwz_off16_R1 (void) { ++ __asm__ __volatile__ ("plwz %0, +16(0), 1" : "=r" (rt) ); ++} ++static void test_plwz_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plwz %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plwz_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plwz %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plwa_off0_R1 (void) { ++ __asm__ __volatile__ ("plwa %0, +0(0), 1" : "=r" (rt) ); ++} ++static void test_plwa_off8_R1 (void) { ++ __asm__ __volatile__ ("plwa %0, +8(0), 1" : "=r" (rt) ); ++} ++static void test_plwa_off16_R1 (void) { ++ __asm__ __volatile__ ("plwa %0, +16(0), 1" : "=r" (rt) ); ++} ++static void test_plwa_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plwa %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_plwa_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plwa %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_pld_off0_R1 (void) { ++ __asm__ __volatile__ ("pld %0, +0(0), 1" : "=r" (rt) ); ++} ++static void test_pld_off8_R1 (void) { ++ __asm__ __volatile__ ("pld %0, +8(0), 1" : "=r" (rt) ); ++} ++static void test_pld_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("pld %0, +16(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_pld_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("pld %0, +32(0), 1" : "=r" (rt) ); ++ PAD_ORI ++} ++static void test_pld_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("pld %0, +64(0), 1" : "=r" (rt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_pstb_off0_R1 (void) { ++ __asm__ __volatile__ ("pstb %0, -0x1f400+0(0), 1" :: "r" (rs) ); ++} ++static void test_pstb_off8_R1 (void) { ++ __asm__ __volatile__ ("pstb %0, -0x1f400+8(0), 1" :: "r" (rs) ); ++} ++static void test_pstb_off16_R1 (void) { ++ __asm__ __volatile__ ("pstb %0, -0x1f400+16(0), 1" :: "r" (rs) ); ++} ++static void test_pstb_off32_R1 (void) { ++ __asm__ __volatile__ ("pstb %0, -0x1f400+32(0), 1" :: "r" (rs) ); ++} ++static void test_psth_off0_R1 (void) { ++ __asm__ __volatile__ ("psth %0, -0x1f400+0(0), 1" :: "r" (rs) ); ++} ++static void test_psth_off8_R1 (void) { ++ __asm__ __volatile__ ("psth %0, -0x1f400+8(0), 1" :: "r" (rs) ); ++} ++static void test_psth_off16_R1 (void) { ++ __asm__ __volatile__ ("psth %0, -0x1f400+16(0), 1" :: "r" (rs) ); ++} ++static void test_psth_off32_R1 (void) { ++ __asm__ __volatile__ ("psth %0, -0x1f400+32(0), 1" :: "r" (rs) ); ++} ++static void test_pstw_off0_R1 (void) { ++ __asm__ __volatile__ ("pstw %0, -0x1f400+0(0), 1" :: "r" (rs) ); ++} ++static void test_pstw_off8_R1 (void) { ++ __asm__ __volatile__ ("pstw %0, -0x1f400+8(0), 1" :: "r" (rs) ); ++} ++static void test_pstw_off16_R1 (void) { ++ __asm__ __volatile__ ("pstw %0, -0x1f400+16(0), 1" :: "r" (rs) ); ++} ++static void test_pstw_off32_R1 (void) { ++ __asm__ __volatile__ ("pstw %0, -0x1f400+32(0), 1" :: "r" (rs) ); ++} ++static void test_pstd_off0_R1 (void) { ++ __asm__ __volatile__ ("pstd %0, -0x1f400+0(0), 1" :: "r" (rs) ); ++} ++static void test_pstd_off8_R1 (void) { ++ __asm__ __volatile__ ("pstd %0, -0x1f400+8(0), 1" :: "r" (rs) ); ++} ++static void test_pstd_off16_R1 (void) { ++ __asm__ __volatile__ ("pstd %0, -0x1f400+16(0), 1" :: "r" (rs) ); ++} ++static void test_pstd_off32_R1 (void) { ++ __asm__ __volatile__ ("pstd %0, -0x1f400+32(0), 1" :: "r" (rs) ); ++} ++ /* For the paddi tests; although we can get close to a read/write target ++ due to forcing where the .text and .bss sections are placed, there is ++ still enough codegen variability that having a raw value in the exp ++ file will not be determinative for these instructions. ++ Thus, compromise and just ensure that the generated value is an ++ address that lands within the reloc buffer, and use quasi magic ++ eyecatcher values in the return to indicate success. */ ++static void test_paddi_0_R1 (void) { ++ __asm__ __volatile__ ("paddi %0, 0, 0+0, 1" : "=r" (rt) ); ++ rt = rt - TEXT_BSS_DELTA; ++ if (rt > pcrelative_buff_addr(0) && ++ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) ++ rt = 0xffff0000; ++} ++static void test_paddi_12_R1 (void) { ++ __asm__ __volatile__ ("paddi %0, 0, 0+12, 1" : "=r" (rt) ); ++ rt = rt - TEXT_BSS_DELTA; ++ if (rt > pcrelative_buff_addr(0) && ++ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) ++ rt = 0xffff0012; ++} ++static void test_paddi_48_R1 (void) { ++ __asm__ __volatile__ ("paddi %0, 0, 0+48, 1" : "=r" (rt) ); ++ rt = rt - TEXT_BSS_DELTA; ++ if (rt > pcrelative_buff_addr(0) && ++ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) ++ rt = 0xffff0048; ++} ++static void test_paddi_98_R1 (void) { ++ __asm__ __volatile__ ("paddi %0, 0, 0+98, 1" : "=r" (rt) ); ++ rt = rt - TEXT_BSS_DELTA; ++ if (rt > pcrelative_buff_addr(0) && ++ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) ++ rt = 0xffff0098; ++} ++static void test_plq_off0_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +0(0), 1" ); ++ PAD_ORI ++} ++static void test_plq_off8_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +8(0), 1" ); ++ PAD_ORI ++} ++static void test_plq_off16_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +16(0), 1" ); ++ PAD_ORI ++} ++static void test_plq_off32_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +32(0), 1" ); ++ PAD_ORI ++} ++static void test_plq_off48_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +48(0), 1" ); ++ PAD_ORI ++} ++static void test_plq_off64_R1 (void) { ++ PAD_ORI ++ __asm__ __volatile__ ("plq 26, +64(0), 1" ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_pstq_off0_R1 (void) { ++ __asm__ __volatile__ ("pstq 24, -0x1f400+0(0), 1" ); ++} ++static void test_pstq_off8_R1 (void) { ++ __asm__ __volatile__ ("pstq 24, -0x1f400+8(0), 1" ); ++} ++static void test_pstq_off16_R1 (void) { ++ __asm__ __volatile__ ("pstq 24, -0x1f400+16(0), 1" ); ++} ++static void test_pstq_off32_R1 (void) { ++ __asm__ __volatile__ ("pstq 24, -0x1f400+32(0), 1" ); ++} ++static void test_pstq_off64_R1 (void) { ++ __asm__ __volatile__ ("pstq 24, -0x1f400+64(0), 1" ); ++} ++ ++static test_list_t testgroup_generic[] = { ++ { &test_paddi_0_R1, "paddi 0_R1", "RT,RA,SI,R"}, /* bcwp */ ++ { &test_paddi_12_R1, "paddi 12_R1", "RT,RA,SI,R"}, /* bcwp */ ++ { &test_paddi_48_R1, "paddi 48_R1", "RT,RA,SI,R"}, /* bcwp */ ++ { &test_paddi_98_R1, "paddi 98_R1", "RT,RA,SI,R"}, /* bcwp */ ++ { &test_plbz_off0_R1, "plbz off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plbz_off8_R1, "plbz off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plbz_off16_R1, "plbz off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plbz_off32_R1, "plbz off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plbz_off64_R1, "plbz off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_pld_off0_R1, "pld off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_pld_off8_R1, "pld off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_pld_off16_R1, "pld off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_pld_off32_R1, "pld off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_pld_off64_R1, "pld off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plha_off0_R1, "plha off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plha_off8_R1, "plha off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plha_off16_R1, "plha off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plha_off32_R1, "plha off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plha_off64_R1, "plha off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plhz_off0_R1, "plhz off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plhz_off8_R1, "plhz off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plhz_off16_R1, "plhz off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plhz_off32_R1, "plhz off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plhz_off64_R1, "plhz off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plq_off0_R1, "plq off0_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plq_off8_R1, "plq off8_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plq_off16_R1, "plq off16_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plq_off32_R1, "plq off32_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plq_off48_R1, "plq off48_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plq_off64_R1, "plq off64_R1", "RTp,D(RA),R"}, /* bcwp */ ++ { &test_plwa_off0_R1, "plwa off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwa_off8_R1, "plwa off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwa_off16_R1, "plwa off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwa_off32_R1, "plwa off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwa_off64_R1, "plwa off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwz_off0_R1, "plwz off0_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwz_off8_R1, "plwz off8_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwz_off16_R1, "plwz off16_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwz_off32_R1, "plwz off32_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plwz_off64_R1, "plwz off64_R1", "RT,D(RA),R"}, /* bcwp */ ++ { &test_plxvp_off0_R1, "plxvp off0_R1", "XTp,D(RA),R"}, /* bcwp */ ++ { &test_plxvp_off8_R1, "plxvp off8_R1", "XTp,D(RA),R"}, /* bcwp */ ++ { &test_plxvp_off16_R1, "plxvp off16_R1", "XTp,D(RA),R"}, /* bcwp */ ++ { &test_plxvp_off24_R1, "plxvp off24_R1", "XTp,D(RA),R"}, /* bcwp */ ++ { &test_plxvp_off32_R1, "plxvp off32_R1", "XTp,D(RA),R"}, /* bcwp */ ++ { &test_pstb_off0_R1, "pstb off0_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstb_off8_R1, "pstb off8_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstb_off16_R1, "pstb off16_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstb_off32_R1, "pstb off32_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstd_off0_R1, "pstd off0_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstd_off8_R1, "pstd off8_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstd_off16_R1, "pstd off16_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstd_off32_R1, "pstd off32_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_psth_off0_R1, "psth off0_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_psth_off8_R1, "psth off8_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_psth_off16_R1, "psth off16_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_psth_off32_R1, "psth off32_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstq_off0_R1, "pstq off0_R1", "RSp,D(RA),R"}, /* bcwp */ ++ { &test_pstq_off8_R1, "pstq off8_R1", "RSp,D(RA),R"}, /* bcwp */ ++ { &test_pstq_off16_R1, "pstq off16_R1", "RSp,D(RA),R"}, /* bcwp */ ++ { &test_pstq_off32_R1, "pstq off32_R1", "RSp,D(RA),R"}, /* bcwp */ ++ { &test_pstq_off64_R1, "pstq off64_R1", "RSp,D(RA),R"}, /* bcwp */ ++ { &test_pstw_off0_R1, "pstw off0_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstw_off8_R1, "pstw off8_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstw_off16_R1, "pstw off16_R1", "RS,D(RA),R"}, /* bcwp */ ++ { &test_pstw_off32_R1, "pstw off32_R1", "RS,D(RA),R"}, /* bcwp */ ++ { NULL, NULL }, ++}; ++ ++/* Allow skipping of tests. */ ++unsigned long test_count=0xffff; ++unsigned long skip_count=0; ++unsigned long setup_only=0; ++ ++/* Set up a setjmp/longjmp to gently handle our SIGILLs and SIGSEGVs. */ ++static jmp_buf mybuf; ++ ++/* This (testfunction_generic) is meant to handle all of the instruction ++ variations. The helpers set up the register and iterator values ++ as is appropriate for the instruction being tested. */ ++static void testfunction_generic (const char* instruction_name, ++ test_func_t test_function, ++ unsigned int ignore_flags, ++ char * cur_form) { ++ ++ identify_form_components (instruction_name , cur_form); ++ debug_show_form (instruction_name, cur_form); ++ set_up_iterators (); ++ debug_show_iter_ranges (); ++ initialize_buffer (0); ++ init_pcrelative_write_target (); ++ debug_dump_buffer (); ++ ++ for (vrai = a_start; vrai < a_iters ; vrai+=a_inc) { ++ for (vrbi = b_start; vrbi < b_iters ; vrbi+=b_inc) { ++ for (vrci = c_start; vrci < c_iters ; vrci+=c_inc) { ++ for (vrmi = m_start; (vrmi < m_iters) ; vrmi+=m_inc) { ++ CHECK_OVERRIDES ++ debug_show_current_iteration (); ++ // Be sure to initialize the target registers first. ++ initialize_target_registers (); ++ initialize_source_registers (); ++ printf ("%s", instruction_name); ++ print_register_header (); ++ printf( " =>"); fflush (stdout); ++ if (!setup_only) { ++ if (enable_setjmp) { ++ if ( setjmp ( mybuf ) ) { ++ printf("signal tripped. (FIXME)\n"); ++ continue; ++ } ++ } ++ (*test_function) (); ++ } ++ print_register_footer (); ++ print_result_buffer (); ++ print_pcrelative_write_target (); ++ printf ("\n"); ++ } ++ } ++ } ++ } ++} ++ ++void mykillhandler ( int x ) { longjmp (mybuf, 1); } ++void mysegvhandler ( int x ) { longjmp (mybuf, 1); } ++ ++static void do_tests ( void ) ++{ ++ int groupcount; ++ char * cur_form; ++ test_group_t group_function = &testfunction_generic; ++ test_list_t *tests = testgroup_generic; ++ ++ struct sigaction kill_action, segv_action; ++ struct sigaction old_kill_action, old_segv_action; ++ if (enable_setjmp) { ++ kill_action.sa_handler = mykillhandler; ++ segv_action.sa_handler = mysegvhandler; ++ sigemptyset ( &kill_action.sa_mask ); ++ sigemptyset ( &segv_action.sa_mask ); ++ kill_action.sa_flags = SA_NODEFER; ++ segv_action.sa_flags = SA_NODEFER; ++ sigaction ( SIGILL, &kill_action, &old_kill_action); ++ sigaction ( SIGSEGV, &segv_action, &old_segv_action); ++ } ++ ++ for (groupcount = 0; tests[groupcount].name != NULL; groupcount++) { ++ cur_form = strdup(tests[groupcount].form); ++ current_test = tests[groupcount]; ++ identify_instruction_by_func_name (current_test.name); ++ if (groupcount < skip_count) continue; ++ if (verbose) printf("Test #%d ,", groupcount); ++ if (verbose > 1) printf(" instruction %s (v=%d)", current_test.name, verbose); ++ (*group_function) (current_test.name, current_test.func, 0, cur_form ); ++ printf ("\n"); ++ if (groupcount >= (skip_count+test_count)) break; ++ } ++ if (debug_show_labels) printf("\n"); ++ printf ("All done. Tested %d different instruction groups\n", groupcount); ++} ++ ++static void usage (void) ++{ ++ fprintf(stderr, ++ "Usage: test_isa_XXX [OPTIONS]\n" ++ "\t-h: display this help and exit\n" ++ "\t-v: increase verbosity\n" ++ "\t-a : limit number of a-iterations to \n" ++ "\t-b : limit number of b-iterations to \n" ++ "\t-c : limit number of c-iterations to \n" ++ "\t-n : limit to this number of tests.\n" ++ "\t-r : run only test # \n" ++ "\t\n" ++ "\t-j :enable setjmp to recover from illegal insns. \n" ++ "\t-m :(dev only?) lock VRM value to zero.\n" ++ "\t-z :(dev only?) lock MC value to zero.\n" ++ "\t-p :(dev only?) disable prefix instructions\n" ++ "\t-s : skip tests \n" ++ "\t-c : stop after running # of tests \n" ++ "\t-f : Do the test setup but do not actually execute the test instruction. \n" ++ ); ++} ++ ++int main (int argc, char **argv) ++{ ++ int c; ++ while ((c = getopt(argc, argv, "dhjvmpfzs:a:b:c:n:r:")) != -1) { ++ switch (c) { ++ case 'h': ++ usage(); ++ return 0; ++ ++ case 'v': ++ verbose++; ++ break; ++ ++ /* Options related to limiting the test iterations. */ ++ case 'a': ++ a_limit=atoi (optarg); ++ printf ("limiting a-iters to %ld.\n", a_limit); ++ break; ++ case 'b': ++ b_limit=atoi (optarg); ++ printf ("limiting b-iters to %ld.\n", b_limit); ++ break; ++ case 'c': ++ c_limit=atoi (optarg); ++ printf ("limiting c-iters to %ld.\n", c_limit); ++ break; ++ case 'n': // run this number of tests. ++ test_count=atoi (optarg); ++ printf ("limiting to %ld tests\n", test_count); ++ break; ++ case 'r': // run just test #. ++ skip_count=atoi (optarg); ++ test_count=0; ++ if (verbose) printf("Running test number %ld\n", skip_count); ++ break; ++ case 's': // skip this number of tests. ++ skip_count=atoi (optarg); ++ printf ("skipping %ld tests\n", skip_count); ++ break; ++ ++ /* debug options. */ ++ case 'd': ++ dump_tables=1; ++ printf("DEBUG:dump_tables.\n"); ++ break; ++ case 'f': ++ setup_only=1; ++ printf("DEBUG:setup_only.\n"); ++ break; ++ case 'j': ++ enable_setjmp=1; ++ printf ("DEBUG:setjmp enabled.\n"); ++ break; ++ case 'm': ++ vrm_override=1; ++ printf ("DEBUG:vrm override enabled.\n"); ++ break; ++ case 'p': ++ prefix_override=1; ++ printf ("DEBUG:prefix override enabled.\n"); ++ break; ++ case 'z': ++ mc_override=1; ++ printf ("DEBUG:MC override enabled.\n"); ++ break; ++ default: ++ usage(); ++ fprintf(stderr, "Unknown argument: '%c'\n", c); ++ } ++ } ++ ++ generic_prologue (); ++ build_vsx_table (); ++ build_args_table (); ++ build_float_vsx_tables (); ++ ++ if (dump_tables) { ++ dump_float_vsx_tables (); ++ dump_vsxargs (); ++ } ++ ++ do_tests (); ++ ++ return 0; ++} ++ ++#else // HAS_ISA_3_1 ++int main (int argc, char **argv) ++{ ++ printf("NO ISA 3.1 SUPPORT\n"); ++ return 0; ++} ++#endif +diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp b/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp +new file mode 100644 +index 000000000..139597f9c +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp +@@ -0,0 +1,2 @@ ++ ++ +diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp b/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp +new file mode 100644 +index 000000000..87594748f +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp +@@ -0,0 +1,138 @@ ++paddi 0_R1 => ffff0000 ++ ++paddi 12_R1 => ffff0012 ++ ++paddi 48_R1 => ffff0048 ++ ++paddi 98_R1 => ffff0098 ++ ++plbz off0_R1 => 1a ++ ++plbz off8_R1 => 1f ++ ++plbz off16_R1 => 1f ++ ++plbz off32_R1 => 1b ++ ++plbz off64_R1 => 1b ++ ++pld off0_R1 => e740000004100000 ++ ++pld off8_R1 => 4e800020 ++ ++pld off16_R1 => 6318001862f7001f ++ ++pld off32_R1 => 639c001c637b001b ++ ++pld off64_R1 => 639c001c637b001b ++ ++plha off0_R1 => 1a ++ ++plha off8_R1 => 1f ++ ++plha off16_R1 => 1f ++ ++plha off32_R1 => 1b ++ ++plha off64_R1 => 1b ++ ++plhz off0_R1 => 1a ++ ++plhz off8_R1 => 1f ++ ++plhz off16_R1 => 1f ++ ++plhz off32_R1 => 1b ++ ++plhz off64_R1 => 1b ++ ++plq off0_R1 => e34000000410001a 62d6001662b5001f ++ ++plq off8_R1 => 62d6001662b5001f 6318001862f7001f ++ ++plq off16_R1 => 6318001862f7001f 635a001a6339001b ++ ++plq off32_R1 => 639c001c637b001b 4e80003b ++ ++plq off48_R1 => 1a 62d6001662b5001f ++ ++plq off64_R1 => 639c001c637b001b 4e80003b ++ ++plwa off0_R1 => 4100000 ++ ++plwa off8_R1 => 4e800020 ++ ++plwa off16_R1 => 0 ++ ++plwa off32_R1 => 637b001b ++ ++plwa off64_R1 => 637b001b ++ ++plwz off0_R1 => 6100000 ++ ++plwz off8_R1 => 4e800020 ++ ++plwz off16_R1 => 0 ++ ++plwz off32_R1 => 637b001b ++ ++plwz off64_R1 => 637b001b ++ ++plxvp off0_R1 => 6318001862f70017 635a001a63390019 ea80000004100000 62d6001662b50015 ++ ++plxvp off8_R1 => 635a001a63390019 639c001c637b001b 62d6001662b50015 6318001862f70017 ++ ++plxvp off16_R1 => 639c001c637b001b 000000004e800020 6318001862f70017 635a001a63390019 ++ ++plxvp off24_R1 => 000000004e800020 0000000000000000 635a001a63390019 639c001c637b001b ++ ++plxvp off32_R1 => 0000000000000000 62d6001662b50015 639c001c637b001b 000000004e800020 ++ ++pstb off0_R1 102030405060708 => 08 ++ ++pstb off8_R1 102030405060708 => 08 ++ ++pstb off16_R1 102030405060708 => 08 ++ ++pstb off32_R1 102030405060708 => 08 ++ ++pstd off0_R1 102030405060708 => 0102030405060708 ++ ++pstd off8_R1 102030405060708 => 0102030405060708 ++ ++pstd off16_R1 102030405060708 => 0102030405060708 ++ ++pstd off32_R1 102030405060708 => 0102030405060708 ++ ++psth off0_R1 102030405060708 => 0708 ++ ++psth off8_R1 102030405060708 => 0708 ++ ++psth off16_R1 102030405060708 => 0708 ++ ++psth off32_R1 102030405060708 => 0708 ++ ++pstq off0_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++pstq off0_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++ ++pstq off8_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++pstq off8_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++ ++pstq off16_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++pstq off16_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++ ++pstq off32_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++pstq off32_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++ ++pstq off64_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++pstq off64_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 ++ ++pstw off0_R1 102030405060708 => 05060708 ++ ++pstw off8_R1 102030405060708 => 05060708 ++ ++pstw off16_R1 102030405060708 => 05060708 ++ ++pstw off32_R1 102030405060708 => 05060708 ++ ++All done. Tested 66 different instruction groups +diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest b/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest +new file mode 100644 +index 000000000..61d7f65a1 +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest +@@ -0,0 +1,2 @@ ++prereq: ../../../tests/check_ppc64_auxv_cap arch_3_1 ++prog: test_isa_3_1_R1_RT +diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.c b/none/tests/ppc64/test_isa_3_1_R1_XT.c +new file mode 100644 +index 000000000..58885b8d3 +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_XT.c +@@ -0,0 +1,534 @@ ++/* ++ * Valgrind testcase for PowerPC ISA 3.1 ++ * ++ * Copyright (C) 2019-2020 Will Schmidt ++ * ++ * 64bit build: ++ * gcc -Winline -Wall -g -O -mregnames -maltivec -m64 ++ */ ++ ++/* ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of the ++ * License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++#ifdef HAS_ISA_3_1 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* Condition Register fields. ++ These are used to capture the condition register values immediately after ++ the instruction under test is executed. This is done to help prevent other ++ test overhead (switch statements, result compares, etc) from disturbing ++ the test case results. */ ++unsigned long current_cr; ++unsigned long current_fpscr; ++ ++struct test_list_t current_test; ++ ++#include "isa_3_1_helpers.h" ++static void test_pstxvp_off0_R1 (void) { ++ __asm__ __volatile__ ("pstxvp 20, -0x1f400+0(0),1"); ++} ++static void test_pstxvp_off16_R1 (void) { ++ __asm__ __volatile__ ("pstxvp 20, -0x1f400+16(0),1"); ++} ++static void test_pstxvp_off32_R1 (void) { ++ __asm__ __volatile__ ("pstxvp 20, -0x1f400+32(0),1"); ++} ++static void test_pstxvp_off48_R1 (void) { ++ __asm__ __volatile__ ("pstxvp 20, -0x1f400+48(0),1"); ++} ++static void test_plfd_64_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +64(0), 1"); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plfd_32_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +32(0), 1"); ++ PAD_ORI ++} ++static void test_plfd_16_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +16(0), 1"); ++ PAD_ORI ++} ++static void test_plfd_8_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +8(0), 1"); ++ PAD_ORI ++} ++static void test_plfd_4_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +4(0), 1"); ++ PAD_ORI ++} ++static void test_plfd_0_R1 (void) { ++ __asm__ __volatile__ ("plfd 28, +0(0), 1"); ++ PAD_ORI ++} ++static void test_plfs_64_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +64(0), 1"); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plfs_32_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +32(0), 1"); ++ PAD_ORI ++} ++static void test_plfs_16_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +16(0), 1"); ++ PAD_ORI ++} ++static void test_plfs_8_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +8(0), 1"); ++ PAD_ORI ++} ++static void test_plfs_4_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +4(0), 1"); ++ PAD_ORI ++} ++static void test_plfs_0_R1 (void) { ++ __asm__ __volatile__ ("plfs 28, +0(0), 1"); ++ PAD_ORI ++} ++static void test_pstfd_32_R1 (void) { ++ __asm__ __volatile__ ("pstfd 26, -0x1f400+32(0), 1"); ++} ++static void test_pstfd_16_R1 (void) { ++ __asm__ __volatile__ ("pstfd 26, -0x1f400+16(0), 1"); ++} ++static void test_pstfd_8_R1 (void) { ++ __asm__ __volatile__ ("pstfd 26, -0x1f400+8(0), 1"); ++} ++static void test_pstfd_4_R1 (void) { ++ __asm__ __volatile__ ("pstfd 26, -0x1f400+4(0), 1"); ++} ++static void test_pstfd_0_R1 (void) { ++ __asm__ __volatile__ ("pstfd 26, -0x1f400+0(0), 1"); ++} ++static void test_pstfs_32_R1 (void) { ++ __asm__ __volatile__ ("pstfs 26, -0x1f400+32(0), 1"); ++} ++static void test_pstfs_16_R1 (void) { ++ __asm__ __volatile__ ("pstfs 26, -0x1f400+16(0), 1"); ++} ++static void test_pstfs_8_R1 (void) { ++ __asm__ __volatile__ ("pstfs 26, -0x1f400+8(0), 1"); ++} ++static void test_pstfs_4_R1 (void) { ++ __asm__ __volatile__ ("pstfs 26, -0x1f400+4(0), 1"); ++} ++static void test_pstfs_0_R1 (void) { ++ __asm__ __volatile__ ("pstfs 26, -0x1f400+0(0), 1"); ++} ++static void test_plxsd_64_R1 (void) { ++ __asm__ __volatile__ ("plxsd %0, +64(0), 1" : "=v" (vrt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plxsd_32_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; plxsd %0, +32(0), 1" : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxsd_16_R1 (void) { ++ __asm__ __volatile__ ("plxsd %0, +16(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxsd_8_R1 (void) { ++ __asm__ __volatile__ ("plxsd %0, +8(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxsd_4_R1 (void) { ++ __asm__ __volatile__ ("plxsd %0, +4(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxsd_0_R1 (void) { ++ __asm__ __volatile__ ("plxsd %0, +0(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxssp_64_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +64(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++ PAD_ORI ++} ++static void test_plxssp_32_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +32(0), 1; pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxssp_16_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +16(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxssp_8_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +8(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxssp_4_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +4(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++static void test_plxssp_0_R1 (void) { ++ __asm__ __volatile__ ("plxssp %0, +0(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); ++ PAD_ORI ++} ++/* Follow the short-range plxv instructions with nop in order to ++ pad out subsequent instructions. When written there are found ++ to be fluctuations in the instructions to store the result back ++ into the target variable. (pla,pstxv...). ++ */ ++static void test_plxv_16_R1 (void) { ++ __asm__ __volatile__ ("plxv %x0, +16(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); ++ PAD_ORI ++} ++static void test_plxv_8_R1 (void) { ++ __asm__ __volatile__ ("plxv %x0, +8(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); ++ PAD_ORI ++} ++static void test_plxv_4_R1 (void) { ++ __asm__ __volatile__ ("plxv %x0, +4(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); ++ PAD_ORI ++} ++static void test_plxv_0_R1 (void) { ++ __asm__ __volatile__ ("plxv %x0, +0(0), 1; pnop;pnop;pnop; " : "=wa" (vec_xt) ); ++ PAD_ORI ++} ++static void test_pstxsd_64_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+64(0), 1" ); ++} ++static void test_pstxsd_32_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+32(0), 1" ); ++} ++static void test_pstxsd_16_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+16(0), 1" ); ++} ++static void test_pstxsd_8_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+8(0), 1" ); ++} ++static void test_pstxsd_4_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+4(0), 1" ); ++} ++static void test_pstxsd_0_R1 (void) { ++ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+0(0), 1" ); ++} ++static void test_pstxssp_64_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+64(0), 1" ); ++} ++static void test_pstxssp_32_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+32(0), 1"); ++} ++static void test_pstxssp_16_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+16(0), 1"); ++} ++static void test_pstxssp_8_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+8(0), 1"); ++} ++static void test_pstxssp_4_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+4(0), 1"); ++} ++static void test_pstxssp_0_R1 (void) { ++ __asm__ __volatile__ ("pstxssp 22, -0x1f400+0(0), 1"); ++} ++static void test_pstxv_16_R1 (void) { ++ __asm__ __volatile__ ("pstxv %x0, -0x1f400+16(0), 1" :: "wa" (vec_xs)); ++} ++static void test_pstxv_8_R1 (void) { ++ __asm__ __volatile__ ("pstxv %x0, -0x1f400+8(0), 1" :: "wa" (vec_xs)); ++} ++static void test_pstxv_4_R1 (void) { ++ __asm__ __volatile__ ("pstxv %x0, -0x1f400+4(0), 1" :: "wa" (vec_xs)); ++} ++static void test_pstxv_0_R1 (void) { ++ __asm__ __volatile__ ("pstxv %x0, -0x1f400+0(0), 1" :: "wa" (vec_xs)); ++} ++ ++static test_list_t testgroup_generic[] = { ++ { &test_plfd_0_R1, "plfd 0_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfd_4_R1, "plfd 4_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfd_8_R1, "plfd 8_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfd_16_R1, "plfd 16_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfd_32_R1, "plfd 32_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfd_64_R1, "plfd 64_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_0_R1, "plfs 0_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_4_R1, "plfs 4_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_8_R1, "plfs 8_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_16_R1, "plfs 16_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_32_R1, "plfs 32_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plfs_64_R1, "plfs 64_R1", "FRT,D(RA),R"}, /* bcwp */ ++ { &test_plxsd_0_R1, "plxsd 0_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxsd_4_R1, "plxsd 4_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxsd_8_R1, "plxsd 8_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxsd_16_R1, "plxsd 16_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxsd_32_R1, "plxsd 32_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxsd_64_R1, "plxsd 64_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_plxssp_0_R1, "plxssp 0_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxssp_4_R1, "plxssp 4_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxssp_8_R1, "plxssp 8_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxssp_16_R1, "plxssp 16_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxssp_32_R1, "plxssp 32_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxssp_64_R1, "plxssp 64_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_plxv_0_R1, "plxv 0_R1", "XT,D(RA),R"}, /* bcwp */ ++ { &test_plxv_4_R1, "plxv 4_R1", "XT,D(RA),R"}, /* bcwp */ ++ { &test_plxv_8_R1, "plxv 8_R1", "XT,D(RA),R"}, /* bcwp */ ++ { &test_plxv_16_R1, "plxv 16_R1", "XT,D(RA),R"}, /* bcwp */ ++ { &test_pstfd_0_R1, "pstfd 0_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_pstfd_4_R1, "pstfd 4_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_pstfd_8_R1, "pstfd 8_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_pstfd_16_R1, "pstfd 16_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_pstfd_32_R1, "pstfd 32_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ ++ { &test_pstfs_0_R1, "pstfs 0_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_pstfs_4_R1, "pstfs 4_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_pstfs_8_R1, "pstfs 8_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_pstfs_16_R1, "pstfs 16_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_pstfs_32_R1, "pstfs 32_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ ++ { &test_pstxsd_0_R1, "pstxsd 0_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxsd_4_R1, "pstxsd 4_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxsd_8_R1, "pstxsd 8_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxsd_16_R1, "pstxsd 16_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxsd_32_R1, "pstxsd 32_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxsd_64_R1, "pstxsd 64_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_0_R1, "pstxssp 0_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_4_R1, "pstxssp 4_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_8_R1, "pstxssp 8_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_16_R1, "pstxssp 16_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_32_R1, "pstxssp 32_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxssp_64_R1, "pstxssp 64_R1", "VRS,D(RA),R"}, /* bcwp */ ++ { &test_pstxvp_off0_R1, "pstxvp off0_R1", "XSp,D(RA),R"}, /* bcwp */ ++ { &test_pstxvp_off16_R1, "pstxvp off16_R1", "XSp,D(RA),R"}, /* bcwp */ ++ { &test_pstxvp_off32_R1, "pstxvp off32_R1", "XSp,D(RA),R"}, /* bcwp */ ++ { &test_pstxvp_off48_R1, "pstxvp off48_R1", "XSp,D(RA),R"}, /* bcwp */ ++ { &test_pstxv_0_R1, "pstxv 0_R1", "XS,D(RA),R"}, /* bcwp */ ++ { &test_pstxv_4_R1, "pstxv 4_R1", "XS,D(RA),R"}, /* bcwp */ ++ { &test_pstxv_8_R1, "pstxv 8_R1", "XS,D(RA),R"}, /* bcwp */ ++ { &test_pstxv_16_R1, "pstxv 16_R1", "XS,D(RA),R"}, /* bcwp */ ++ { NULL, NULL }, ++}; ++ ++/* Allow skipping of tests. */ ++unsigned long test_count=0xffff; ++unsigned long skip_count=0; ++unsigned long setup_only=0; ++ ++/* Set up a setjmp/longjmp to gently handle our SIGILLs and SIGSEGVs. */ ++static jmp_buf mybuf; ++ ++/* This (testfunction_generic) is meant to handle all of the instruction ++ variations. The helpers set up the register and iterator values ++ as is appropriate for the instruction being tested. */ ++static void testfunction_generic (const char* instruction_name, ++ test_func_t test_function, ++ unsigned int ignore_flags, ++ char * cur_form) { ++ ++ identify_form_components (instruction_name , cur_form); ++ debug_show_form (instruction_name, cur_form); ++ set_up_iterators (); ++ debug_show_iter_ranges (); ++ initialize_buffer (0); ++ init_pcrelative_write_target (); ++ debug_dump_buffer (); ++ ++ for (vrai = a_start; vrai < a_iters ; vrai+=a_inc) { ++ for (vrbi = b_start; vrbi < b_iters ; vrbi+=b_inc) { ++ for (vrci = c_start; vrci < c_iters ; vrci+=c_inc) { ++ for (vrmi = m_start; (vrmi < m_iters) ; vrmi+=m_inc) { ++ CHECK_OVERRIDES ++ debug_show_current_iteration (); ++ // Be sure to initialize the target registers first. ++ initialize_target_registers (); ++ initialize_source_registers (); ++ vec_xa[0]=0x1234; ++ vec_xa[1]=0x4567; ++ printf ("%s", instruction_name); ++ print_register_header (); ++ printf( " =>"); fflush (stdout); ++ if (!setup_only) { ++ if (enable_setjmp) { ++ if ( setjmp ( mybuf ) ) { ++ printf("signal tripped. (FIXME)\n"); ++ continue; ++ } ++ } ++ (*test_function) (); ++ } ++ print_register_footer (); ++ print_result_buffer (); ++ print_pcrelative_write_target (); ++ printf ("\n"); ++ } ++ } ++ } ++ } ++} ++ ++void mykillhandler ( int x ) { longjmp (mybuf, 1); } ++void mysegvhandler ( int x ) { longjmp (mybuf, 1); } ++ ++static void do_tests ( void ) ++{ ++ int groupcount; ++ char * cur_form; ++ test_group_t group_function = &testfunction_generic; ++ test_list_t *tests = testgroup_generic; ++ ++ struct sigaction kill_action, segv_action; ++ struct sigaction old_kill_action, old_segv_action; ++ if (enable_setjmp) { ++ kill_action.sa_handler = mykillhandler; ++ segv_action.sa_handler = mysegvhandler; ++ sigemptyset ( &kill_action.sa_mask ); ++ sigemptyset ( &segv_action.sa_mask ); ++ kill_action.sa_flags = SA_NODEFER; ++ segv_action.sa_flags = SA_NODEFER; ++ sigaction ( SIGILL, &kill_action, &old_kill_action); ++ sigaction ( SIGSEGV, &segv_action, &old_segv_action); ++ } ++ ++ for (groupcount = 0; tests[groupcount].name != NULL; groupcount++) { ++ cur_form = strdup(tests[groupcount].form); ++ current_test = tests[groupcount]; ++ identify_instruction_by_func_name (current_test.name); ++ if (groupcount < skip_count) continue; ++ if (verbose) printf("Test #%d ,", groupcount); ++ if (verbose > 1) printf(" instruction %s (v=%d)", current_test.name, verbose); ++ (*group_function) (current_test.name, current_test.func, 0, cur_form ); ++ printf ("\n"); ++ if (groupcount >= (skip_count+test_count)) break; ++ } ++ if (debug_show_labels) printf("\n"); ++ printf ("All done. Tested %d different instruction groups\n", groupcount); ++} ++ ++static void usage (void) ++{ ++ fprintf(stderr, ++ "Usage: test_isa_XXX [OPTIONS]\n" ++ "\t-h: display this help and exit\n" ++ "\t-v: increase verbosity\n" ++ "\t-a : limit number of a-iterations to \n" ++ "\t-b : limit number of b-iterations to \n" ++ "\t-c : limit number of c-iterations to \n" ++ "\t-n : limit to this number of tests.\n" ++ "\t-r : run only test # \n" ++ "\t\n" ++ "\t-j :enable setjmp to recover from illegal insns. \n" ++ "\t-m :(dev only?) lock VRM value to zero.\n" ++ "\t-z :(dev only?) lock MC value to zero.\n" ++ "\t-p :(dev only?) disable prefix instructions\n" ++ "\t-s : skip tests \n" ++ "\t-c : stop after running # of tests \n" ++ "\t-f : Do the test setup but do not actually execute the test instruction. \n" ++ ); ++} ++ ++int main (int argc, char **argv) ++{ ++ int c; ++ while ((c = getopt(argc, argv, "dhjvmpfzs:a:b:c:n:r:")) != -1) { ++ switch (c) { ++ case 'h': ++ usage(); ++ return 0; ++ ++ case 'v': ++ verbose++; ++ break; ++ ++ /* Options related to limiting the test iterations. */ ++ case 'a': ++ a_limit=atoi (optarg); ++ printf ("limiting a-iters to %ld.\n", a_limit); ++ break; ++ case 'b': ++ b_limit=atoi (optarg); ++ printf ("limiting b-iters to %ld.\n", b_limit); ++ break; ++ case 'c': ++ c_limit=atoi (optarg); ++ printf ("limiting c-iters to %ld.\n", c_limit); ++ break; ++ case 'n': // run this number of tests. ++ test_count=atoi (optarg); ++ printf ("limiting to %ld tests\n", test_count); ++ break; ++ case 'r': // run just test #. ++ skip_count=atoi (optarg); ++ test_count=0; ++ if (verbose) printf("Running test number %ld\n", skip_count); ++ break; ++ case 's': // skip this number of tests. ++ skip_count=atoi (optarg); ++ printf ("skipping %ld tests\n", skip_count); ++ break; ++ ++ /* debug options. */ ++ case 'd': ++ dump_tables=1; ++ printf("DEBUG:dump_tables.\n"); ++ break; ++ case 'f': ++ setup_only=1; ++ printf("DEBUG:setup_only.\n"); ++ break; ++ case 'j': ++ enable_setjmp=1; ++ printf ("DEBUG:setjmp enabled.\n"); ++ break; ++ case 'm': ++ vrm_override=1; ++ printf ("DEBUG:vrm override enabled.\n"); ++ break; ++ case 'p': ++ prefix_override=1; ++ printf ("DEBUG:prefix override enabled.\n"); ++ break; ++ case 'z': ++ mc_override=1; ++ printf ("DEBUG:MC override enabled.\n"); ++ break; ++ default: ++ usage(); ++ fprintf(stderr, "Unknown argument: '%c'\n", c); ++ } ++ } ++ ++ generic_prologue (); ++ build_vsx_table (); ++ build_args_table (); ++ build_float_vsx_tables (); ++ ++ if (dump_tables) { ++ dump_float_vsx_tables (); ++ dump_vsxargs (); ++ } ++ ++ do_tests (); ++ ++ return 0; ++} ++ ++#else // HAS_ISA_3_1 ++int main (int argc, char **argv) ++{ ++ printf("NO ISA 3.1 SUPPORT\n"); ++ return 0; ++} ++#endif +diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp b/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp +new file mode 100644 +index 000000000..139597f9c +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp +@@ -0,0 +1,2 @@ ++ ++ +diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp +new file mode 100644 +index 000000000..48d591f4d +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp +@@ -0,0 +1,127 @@ ++plfd 0_R1 =>_ -4.903986e+55 _ cb80000006100000, 0 ++ ++plfd 4_R1 =>_ 3.095878e+167 _ 62b50015cb800004, 0 ++ ++plfd 8_R1 =>_ 1.297320e+168 _ 62d6001662b50015, 0 ++ ++plfd 16_R1 =>_ 2.264413e+169 _ 6318001862f70017, 0 ++ ++plfd 32_R1 =>_ 6.763045e+171 _ 639c001c637b001b, 0 ++ ++plfd 64_R1 =>_ 6.763045e+171 _ 639c001c637b001b, 0 ++ ++plfs 0_R1 =>_ 2.708339e-35 _ 38c2000000000000, 0 ++ ++plfs 4_R1 =>_ -2.560001e+02 _ c070000080000000, 0 ++ ++plfs 8_R1 =>_ 1.669433e+21 _ 4456a002a0000000, 0 ++ ++plfs 16_R1 =>_ 2.278176e+21 _ 445ee002e0000000, 0 ++ ++plfs 32_R1 =>_ 4.630140e+21 _ 446f600360000000, 0 ++ ++plfs 64_R1 =>_ 4.630140e+21 _ 446f600360000000, 0 ++ ++plxsd 0_R1 => a800000004100000,0000000000000000 -5.07588375e-116 +Zero ++ ++plxsd 4_R1 => 7000000a8000004,0000000000000000 5.77662562e-275 +Zero ++ ++plxsd 8_R1 => 700000060000000,0000000000000000 5.77662407e-275 +Zero ++ ++plxsd 16_R1 => 7000000,0000000000000000 +Den +Zero ++ ++plxsd 32_R1 => 6339001963180018,0000000000000000 9.43505226e+169 +Zero ++ ++plxsd 64_R1 => 6339001963180018,0000000000000000 9.43505226e+169 +Zero ++ ++plxssp 0_R1 => 3882000000000000,0000000000000000 6.19888e-05 +Zero +Zero +Zero ++ ++plxssp 4_R1 => bd80000080000000,0000000000000000 -6.25000e-02 -Zero +Zero +Zero ++ ++plxssp 8_R1 => 38e0000000000000,0000000000000000 1.06812e-04 +Zero +Zero +Zero ++ ++plxssp 16_R1 => 38e0000000000000,0000000000000000 1.06812e-04 +Zero +Zero +Zero ++ ++plxssp 32_R1 => 445ac002c0000000,0000000000000000 8.75000e+02 -2.00000e+00 +Zero +Zero ++ ++plxssp 64_R1 => 446b400340000000,0000000000000000 9.41000e+02 2.00000e+00 +Zero +Zero ++ ++plxv 0_R1 => c800000004100000 7000000 ++ ++plxv 4_R1 => 7000000c8000004 700000000000000 ++ ++plxv 8_R1 => 7000000 7000000 ++ ++plxv 16_R1 => 7000000 7000000 ++ ++pstfd 0_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df ++pstfd 0_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef ++ ++pstfd 4_R1 43dfe000003fe000 43eff000000ff000 => e000003f e00043df ++pstfd 4_R1 43eff000000ff000 43efefffffcff000 => f000000f f00043ef ++ ++pstfd 8_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df ++pstfd 8_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef ++ ++pstfd 16_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df ++pstfd 16_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef ++ ++pstfd 32_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df ++pstfd 32_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef ++ ++pstfs 0_R1 000000005eff0000 000000005f7f8000 => 00005eff ++pstfs 0_R1 000000005f7f8000 000000005f7f8000 => 80005f7f ++ ++pstfs 4_R1 000000005eff0000 000000005f7f8000 => 00005eff ++pstfs 4_R1 000000005f7f8000 000000005f7f8000 => 80005f7f ++ ++pstfs 8_R1 000000005eff0000 000000005f7f8000 => 00005eff ++pstfs 8_R1 000000005f7f8000 000000005f7f8000 => 80005f7f ++ ++pstfs 16_R1 000000005eff0000 000000005f7f8000 => 00005eff ++pstfs 16_R1 000000005f7f8000 000000005f7f8000 => 80005f7f ++ ++pstfs 32_R1 000000005eff0000 000000005f7f8000 => 00005eff ++pstfs 32_R1 000000005f7f8000 000000005f7f8000 => 80005f7f ++ ++pstxsd 0_R1 => 0000000000000000 ++ ++pstxsd 4_R1 => 00000000 00000000 ++ ++pstxsd 8_R1 => 0000000000000000 ++ ++pstxsd 16_R1 => 0000000000000000 ++ ++pstxsd 32_R1 => 0000000000000000 ++ ++pstxsd 64_R1 => 0000000000000000 ++ ++pstxssp 0_R1 => 00000000 ++ ++pstxssp 4_R1 => 00000000 ++ ++pstxssp 8_R1 => 00000000 ++ ++pstxssp 16_R1 => 00000000 ++ ++pstxssp 32_R1 => 00000000 ++ ++pstxssp 64_R1 => 00000000 ++ ++pstxvp off0_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 ++ ++pstxvp off16_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 ++ ++pstxvp off32_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 ++ ++pstxvp off48_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 ++ ++pstxv 0_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 ++ ++pstxv 4_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 ++ ++pstxv 8_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 ++ ++pstxv 16_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7f fffeff7f00007f80 0000ff80 ++ ++All done. Tested 58 different instruction groups +diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest b/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest +new file mode 100644 +index 000000000..7331aafad +--- /dev/null ++++ b/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest +@@ -0,0 +1,2 @@ ++prereq: ../../../tests/check_ppc64_auxv_cap arch_3_1 ++prog: test_isa_3_1_R1_XT +diff --git a/none/tests/ppc64/test_isa_3_1_common.c b/none/tests/ppc64/test_isa_3_1_common.c +index 7c3dc6f00..b3320277b 100644 +--- a/none/tests/ppc64/test_isa_3_1_common.c ++++ b/none/tests/ppc64/test_isa_3_1_common.c +@@ -134,11 +134,13 @@ bool uses_acc_vsrs; + bool uses_pmsk; + bool uses_buffer; // Buffer related. + bool uses_load_buffer, uses_store_buffer, uses_any_buffer; ++bool updates_byte, updates_halfword, updates_word; // output helpers. + bool uses_quad; + unsigned long output_mask; // Output field special handling. + bool instruction_is_sp, instruction_is_sp_estimate; + bool instruction_is_dp, instruction_is_dp_estimate; + bool instruction_is_b16; ++bool instruction_is_relative; + + unsigned long long min (unsigned long long a, unsigned long long b) { + if ( a < b ) +@@ -236,6 +238,18 @@ void identify_form_components (const char *instruction_name, + (strncmp (instruction_name, "pmst", 4) == 0) || + (strncmp (instruction_name, "pst", 3) == 0) || + (strncmp (instruction_name, "st", 2) == 0)); ++ updates_byte = ( ++ (strncmp (instruction_name, "pstb", 4) == 0) ); ++ updates_halfword = ( ++ (strncmp (instruction_name, "psth", 4) == 0) || ++ (strncmp (instruction_name, "pstfs", 4) == 0) || ++ (strncmp (instruction_name, "pstxsd", 4) == 0) || ++ (strncmp (instruction_name, "pstxssp", 4) == 0) || ++ (strncmp (instruction_name, "pstxv", 4) == 0) || ++ (strncmp (instruction_name, "psfs", 4) == 0) ); ++ updates_word = ( ++ (strncmp (instruction_name, "pstw", 4) == 0) ); ++ + uses_any_buffer = (strstr (cur_form, "(RA)") != NULL); + uses_buffer = uses_any_buffer||uses_load_buffer||uses_store_buffer; + +@@ -268,6 +282,15 @@ void identify_form_components (const char *instruction_name, + instruction_is_b16 = ( current_test.mask & B16_MASK ); + } + ++/* Parse the provided function name to set assorted values. ++ In particular, set an indicator when the instruction test has ++ indicated it will run with R==1 that indicates it is a PC-relative ++ instruction. Those tests should all have "_R1" as part of ++ the function name. */ ++void identify_instruction_by_func_name(const char * function_name) { ++ instruction_is_relative = ( (strstr (function_name, "R1") != NULL)); ++} ++ + void display_form_components (char * cur_form) { + printf (" %s\n", cur_form); + printf ("Instruction form elements: "); +@@ -288,7 +311,7 @@ void display_form_components (char * cur_form) { + if (has_frbp) printf ("frbp "); + if (has_frs) printf ("frs "); + if (has_frsp) printf ("frsp "); +- if (has_frt) printf ("frt "); ++ if (has_frt) printf ("frt%s ",(instruction_is_relative)?"-raw":""); + if (has_frtp) printf ("frtp "); + if (has_xa) printf ("xa "); + if (has_xap) printf ("xap "); +@@ -298,6 +321,7 @@ void display_form_components (char * cur_form) { + if (has_xsp) printf ("xsp "); + if (has_xt) printf ("xt "); + if (has_xtp) printf ("xtp "); ++ if (instruction_is_relative) printf ("R==1 "); + if (uses_acc_src) printf ("AS "); + if (uses_acc_dest) printf ("AT "); + printf ("\n"); +@@ -991,6 +1015,107 @@ if (debug_show_values) printf (" buffer:"); + } + } + ++/* **** Reloc Buffer **************************************** */ ++/* Create a large buffer to be the destination for pc-relative ++ * writes. This test is built with linker hints in order ++ * to ensure our buffer, stored in the .bss section, is at a ++ * mostly known offset from the instructions being exercised, ++ * so a hardcoded offset from the PC (pc-relative) will be ++ * on-target. ++ * If there are significant reworks to the code, the bss or ++ * text sections, or the offsets used may need to change. ++ * ++ * The linker hints are specifically -Tbss and -Ttext. ++ * gcc foo.c test_isa_3_1_common.c -I../../../ -Wl,-Tbss 0x20000 -Wl,-Ttext 0x40000 ++ */ ++ /* RELOC_BUFFER_SIZE is defined to 0x1000 in isa_3_1_helpers.h */ ++#define RELOC_BUFFER_PATTERN 0x0001000100010001 ++volatile unsigned long long pcrelative_write_target[RELOC_BUFFER_SIZE]; ++ ++/* Initialize the buffer to known values. */ ++void init_pcrelative_write_target() { ++ int i; ++ for (i=0;i %llx\n",i,ref_value,curr_value); ++ if (updates_byte) { ++ for (z=0;z<8;z++) { ++ rshift=z*8; ++ if (verbose) printf("z:%d ",z); ++ init_token = (ref_value>>rshift) & 0xff; ++ curr_token = (curr_value>>rshift) & 0xff; ++ if (verbose) ++ printf("wms byte:: %llx -> %llx \n",init_token,curr_token); ++ if (init_token == curr_token && (updates_byte||updates_halfword||updates_word) ) { ++ printf("%2s"," "); ++ } else { ++ printf("%02llx",curr_token); ++ } ++ } ++ } ++ else if (updates_halfword) { ++ for (z=0;z<4;z++) { ++ rshift=z*16; ++ if (verbose) printf("z:%d ",z); ++ init_token = (ref_value>>rshift) & 0xffff; ++ curr_token = (curr_value>>rshift) & 0xffff; ++ if (verbose) ++ printf("wms half:: %llx -> %llx \n",init_token,curr_token); ++ if (init_token == curr_token) { ++ printf("%2s"," "); ++ } else { ++ printf("%04llx",curr_token); ++ } ++ } ++ } ++ else if (updates_word) { ++ for (z=0;z<2;z++) { ++ rshift=z*32; ++ if (verbose) printf("z:%d ",z); ++ init_token = (ref_value>>rshift) & 0xffffffff; ++ curr_token = (curr_value>>rshift) & 0xffffffff; ++ if (verbose) ++ printf("wms word:: %llx -> %llx \n",init_token,curr_token); ++ if (init_token == curr_token ) { ++ printf("%2s"," "); ++ } else { ++ printf("%08llx",curr_token); ++ } ++ } ++ } ++ else { ++ printf("%016llx ",curr_value); ++ } ++ } ++ } ++} ++ ++/* Helper that returns the address of the pcrelative_write_target buffer. ++ Due to variances in where the sections land in memory, this value is ++ used to normalize the results. (see paddi tests for usage). */ ++unsigned long long pcrelative_buff_addr(int x) { ++ /* Return the base address of the array. The base address will be ++ a function of the code load address. */ ++ return (unsigned long long) &pcrelative_write_target[x]; ++} ++ + void print_undefined () { + if (debug_show_values) + printf (" [Undef]"); +@@ -1339,7 +1464,7 @@ void print_frt () { + /* If the result is a dfp128 value, the dfp128 value is + contained in the frt, frtp values which are split across + a pair of VSRs. */ +- if (uses_dfp128_output) { ++ if (!instruction_is_relative && uses_dfp128_output) { + if (verbose) print_vsr (28); + if (verbose) print_vsr (29); + value1 = get_vsrhd_vs28 (); +@@ -1347,7 +1472,12 @@ void print_frt () { + dissect_dfp128_float (value1, value3); + } else { + if (debug_show_raw_values) generic_print_float_as_hex (frt); +- printf (" %e", frt); ++ if (instruction_is_relative) { ++ printf ("_ %e _ ", frt); ++ print_vsr (28); ++ } else { ++ printf (" %e", frt); ++ } + if (has_frtp) { + if (debug_show_raw_values) generic_print_float_as_hex (frtp); + printf (" %e", frtp); +@@ -1652,7 +1782,15 @@ void print_all() { + void print_register_header () { + post_test = 0; + if (debug_show_all_regs) print_all(); +- if (has_ra) print_ra (); ++ ++ if (has_ra) { ++ /* Suppress the print of RA if the instruction has ++ R==1, since the ra value must be zero for the ++ instruction to be valid. */ ++ if (!instruction_is_relative) ++ print_ra(); ++ } ++ + if (has_rb) print_rb (); + if (has_rc) print_rc (); + if (has_rs) print_rs(); +@@ -1894,6 +2032,11 @@ void set_up_iterators () { + } else { + a_start=0; b_start=0; c_start=0; m_start=0; + } ++ /* Special casing for R==1 tests. */ ++ if (instruction_is_relative) { ++ a_iters = 1; ++ m_start=3; m_iters=4; ++ } + if ((has_vra+has_vrb+has_vrc+has_vrm+has_xa+has_xb+uses_MC > 2) && + (!debug_enable_all_iters)) { + /* Instruction tests using multiple fields will generate a lot of +@@ -2196,15 +2339,12 @@ void initialize_source_registers () { + vrb[0] = vsxargs[ (vrbi ) % isr_modulo]; + vrb[1] = vsxargs[ (vrbi+1) % isr_modulo]; + } +- +- if (has_xa) { +- vec_xa[0] = vsxargs[ (vrai ) % isr_modulo]; +- vec_xa[1] = vsxargs[ (vrai+1) % isr_modulo]; +- } +- if (has_xb) { +- vec_xb[0] = vsxargs[ (vrbi ) % isr_modulo]; +- vec_xb[1] = vsxargs[ (vrbi+1) % isr_modulo]; +- } ++ ++ if (instruction_is_relative) { ++ /* for pstxsd and friends using R=1 */ ++ vec_xa[0] = vsxargs[ (vrai+2 ) % isr_modulo]; ++ vec_xa[1] = vsxargs[ (vrai+3 ) % isr_modulo]; ++ } + + // xap 'shares' with the second half of an xa-pair. + if (has_xap ) { diff --git a/valgrind.spec b/valgrind.spec index a9f0e5e..f140424 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -95,8 +95,11 @@ Patch7: valgrind-3.18.1-s390x-EXRL.patch Patch8: valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch # commit ae8c6de01417023e78763de145b1c0e6ddd87277 +# commit 3950c5d661ee09526cddcf24daf5fc22bc83f70c # Fix for the prefixed stq instruction in PC relative mode. +# KDE#444836 pstq instruction for R=1 is not storing to the correct address Patch9: valgrind-3.18.1-ppc-pstq.patch +Patch10: valgrind-3.18.1-ppc-pstq-tests.patch BuildRequires: make BuildRequires: glibc-devel @@ -239,6 +242,7 @@ Valgrind User Manual for details. %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -470,6 +474,7 @@ fi %changelog * Wed Nov 17 2021 Mark Wielaard - Add valgrind-3.18.1-ppc-pstq.patch +- Add valgrind-3.18.1-ppc-pstq-tests.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From cdb8886b44e6344281bf2b1a23c42e356c41615a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 16:32:05 +0100 Subject: [PATCH 083/196] Add valgrind-3.18.1-gdbserver_tests-hwcap.patch --- valgrind-3.18.1-gdbserver_tests-hwcap.patch | 25 +++++++++++++++++++++ valgrind.spec | 6 +++++ 2 files changed, 31 insertions(+) create mode 100644 valgrind-3.18.1-gdbserver_tests-hwcap.patch diff --git a/valgrind-3.18.1-gdbserver_tests-hwcap.patch b/valgrind-3.18.1-gdbserver_tests-hwcap.patch new file mode 100644 index 0000000..2d952cd --- /dev/null +++ b/valgrind-3.18.1-gdbserver_tests-hwcap.patch @@ -0,0 +1,25 @@ +commit 64ab89162906d5b9e2de6c3afe476fec861ef7ec +Author: Mark Wielaard +Date: Tue Nov 2 14:27:45 2021 +0100 + + gdbserver_tests: Filter out glibc hwcaps libc.so + + On some systems the gdbserver_tests would fail because the filter + for the optimized hwcaps subdir didn't match because the file is + called slightly differently, with the version number before .so + instead of after. For example: /lib64/glibc-hwcaps/power9/libc-2.28.so + + Add one extra filter for this pattern. + +diff --git a/gdbserver_tests/filter_gdb.in b/gdbserver_tests/filter_gdb.in +index d0c94f3f1..b753e0168 100755 +--- a/gdbserver_tests/filter_gdb.in ++++ b/gdbserver_tests/filter_gdb.in +@@ -134,6 +134,7 @@ s/in \(.__\)\{0,1\}select () from \/.*$/in syscall .../ + /^ from \/lib\/libc.so.*$/d + /^ from \/lib64\/libc.so.*$/d + /^ from \/lib64\/.*\/libc.so.*$/d ++/^ from \/lib64\/.*\/libc-.*.so/d + + # and yet another (gdb 7.0 way) to get a system call + s/in select ()$/in syscall .../ diff --git a/valgrind.spec b/valgrind.spec index f140424..bdf267b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -101,6 +101,10 @@ Patch8: valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch Patch9: valgrind-3.18.1-ppc-pstq.patch Patch10: valgrind-3.18.1-ppc-pstq-tests.patch +# commit 64ab89162906d5b9e2de6c3afe476fec861ef7ec +# gdbserver_tests: Filter out glibc hwcaps libc.so +Patch11: valgrind-3.18.1-gdbserver_tests-hwcap.patch + BuildRequires: make BuildRequires: glibc-devel @@ -243,6 +247,7 @@ Valgrind User Manual for details. %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -475,6 +480,7 @@ fi * Wed Nov 17 2021 Mark Wielaard - Add valgrind-3.18.1-ppc-pstq.patch - Add valgrind-3.18.1-ppc-pstq-tests.patch +- Add valgrind-3.18.1-gdbserver_tests-hwcap.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From a345f6151036bcd3929125413495054f49365ff2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 17:46:42 +0100 Subject: [PATCH 084/196] Add valgrind-3.18.1-rust-v0-demangle.patch --- valgrind-3.18.1-rust-v0-demangle.patch | 137 +++++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 142 insertions(+) create mode 100644 valgrind-3.18.1-rust-v0-demangle.patch diff --git a/valgrind-3.18.1-rust-v0-demangle.patch b/valgrind-3.18.1-rust-v0-demangle.patch new file mode 100644 index 0000000..e48a106 --- /dev/null +++ b/valgrind-3.18.1-rust-v0-demangle.patch @@ -0,0 +1,137 @@ +commit 4831385c6706b377851284adc4c4545fff4c6564 +Author: Nicholas Nethercote +Date: Tue Nov 9 12:30:07 2021 +1100 + + Fix Rust v0 demangling. + + It's currently broken due to a silly test that prevents the v0 + demangling code from even running. + + The commit also adds a test, to avoid such problems in the future. + +diff --git a/coregrind/m_demangle/demangle.c b/coregrind/m_demangle/demangle.c +index 16161da2a..3fd7cb75f 100644 +--- a/coregrind/m_demangle/demangle.c ++++ b/coregrind/m_demangle/demangle.c +@@ -118,8 +118,13 @@ void VG_(demangle) ( Bool do_cxx_demangling, Bool do_z_demangling, + } + + /* Possibly undo (1) */ ++ // - C++ mangled symbols start with "_Z" (possibly with exceptions?) ++ // - Rust "legacy" mangled symbols start with "_Z". ++ // - Rust "v0" mangled symbols start with "_R". ++ // XXX: the Java/Rust/Ada demangling here probably doesn't work. See ++ // https://bugs.kde.org/show_bug.cgi?id=445235 for details. + if (do_cxx_demangling && VG_(clo_demangle) +- && orig != NULL && orig[0] == '_' && orig[1] == 'Z') { ++ && orig != NULL && orig[0] == '_' && (orig[1] == 'Z' || orig[1] == 'R')) { + /* !!! vvv STATIC vvv !!! */ + static HChar* demangled = NULL; + /* !!! ^^^ STATIC ^^^ !!! */ +diff --git a/memcheck/tests/demangle-rust.c b/memcheck/tests/demangle-rust.c +new file mode 100644 +index 000000000..f2a458b2a +--- /dev/null ++++ b/memcheck/tests/demangle-rust.c +@@ -0,0 +1,31 @@ ++// Valgrind supports demangling Rust symbols (both the "v0" and "legacy" ++// mangling schemes), but we don't want to add a dependency on the Rust ++// compiler for a single test. So this is a C program with function names that ++// are mangled Rust symbols. In the output, they become demangled Rust names. ++// It's a hack, but a useful one. ++ ++#include ++ ++// A v0 symbol that demangles to: ::fold_with:: ++int _RINvYNtNtCs4uGc65yWeeX_12rustc_middle2ty13PredicateKindNtNtB5_4fold12TypeFoldable9fold_withNtNtNtCsgI90OQiJWEs_11rustc_infer5infer7resolve24OpportunisticVarResolverECsdozMG8X9FIu_21rustc_trait_selection(int *p) ++{ ++ return *p ? 1 : 2; ++} ++ ++// A v0 symbol that demangles to: rustc_expand::mbe::macro_parser::parse_tt ++int _RNvNtNtCsaqSe1lZGvEL_12rustc_expand3mbe12macro_parser8parse_tt(int* p) ++{ ++ return _RINvYNtNtCs4uGc65yWeeX_12rustc_middle2ty13PredicateKindNtNtB5_4fold12TypeFoldable9fold_withNtNtNtCsgI90OQiJWEs_11rustc_infer5infer7resolve24OpportunisticVarResolverECsdozMG8X9FIu_21rustc_trait_selection(p); ++} ++ ++// A legacy symbol that demangles to: core::str::lossy::Utf8Lossy::from_bytes ++int _ZN4core3str5lossy9Utf8Lossy10from_bytes17heb1677c8cb728b0bE(int* p) ++{ ++ return _RNvNtNtCsaqSe1lZGvEL_12rustc_expand3mbe12macro_parser8parse_tt(p); ++} ++ ++int main(void) ++{ ++ return _ZN4core3str5lossy9Utf8Lossy10from_bytes17heb1677c8cb728b0bE(malloc(sizeof(int))); ++} ++ +diff --git a/memcheck/tests/demangle-rust.stderr.exp b/memcheck/tests/demangle-rust.stderr.exp +new file mode 100644 +index 000000000..f04bb625b +--- /dev/null ++++ b/memcheck/tests/demangle-rust.stderr.exp +@@ -0,0 +1,6 @@ ++Conditional jump or move depends on uninitialised value(s) ++ at 0x........: ::fold_with:: (demangle-rust.c:12) ++ by 0x........: rustc_expand::mbe::macro_parser::parse_tt (demangle-rust.c:18) ++ by 0x........: core::str::lossy::Utf8Lossy::from_bytes (demangle-rust.c:24) ++ by 0x........: main (demangle-rust.c:29) ++ +diff --git a/memcheck/tests/demangle-rust.vgtest b/memcheck/tests/demangle-rust.vgtest +new file mode 100644 +index 000000000..d726c6b2e +--- /dev/null ++++ b/memcheck/tests/demangle-rust.vgtest +@@ -0,0 +1,2 @@ ++prog: demangle-rust ++vgopts: -q + +commit c1bfa115f985633722f25922d2996c231e8c9d8d +Author: Mark Wielaard +Date: Wed Nov 10 09:02:36 2021 +0100 + + Add demangle-rust.vgtest demangle-rust.stderr.exp to EXTRA_DIST + +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 4d0476e2d..7837d87c7 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -281,6 +281,7 @@ EXTRA_DIST = \ + realloc3.stderr.exp realloc3.vgtest \ + recursive-merge.stderr.exp recursive-merge.vgtest \ + resvn_stack.stderr.exp resvn_stack.vgtest \ ++ demangle-rust.vgtest demangle-rust.stderr.exp \ + sbfragment.stdout.exp sbfragment.stderr.exp sbfragment.vgtest \ + sem.stderr.exp sem.vgtest \ + sendmsg.stderr.exp sendmsg.stderr.exp-solaris sendmsg.vgtest \ + +commit d151907e5d8ff393f4fef126c8ae445ea8813661 +Author: Mark Wielaard +Date: Thu Nov 11 18:02:09 2021 +0100 + + Add demangle-rust to check_PROGRAMS + + The demangle-rust.vgtest would fail because the demangle-rust binary + wasn't build by default. Add it to check_PROGRAMS and define + demangle_rust_SOURCES to make sure it is always build. + +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 7837d87c7..449710020 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -392,6 +392,7 @@ check_PROGRAMS = \ + custom_alloc \ + custom-overlap \ + demangle \ ++ demangle-rust \ + big_debuginfo_symbol \ + deep-backtrace \ + describe-block \ +@@ -505,6 +506,7 @@ endif + leak_cpp_interior_SOURCES = leak_cpp_interior.cpp + + demangle_SOURCES = demangle.cpp ++demangle_rust_SOURCES = demangle-rust.c + + # Suppress various gcc warnings which are correct, but for things + # we are actually testing for at runtime. diff --git a/valgrind.spec b/valgrind.spec index bdf267b..7f16088 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -105,6 +105,9 @@ Patch10: valgrind-3.18.1-ppc-pstq-tests.patch # gdbserver_tests: Filter out glibc hwcaps libc.so Patch11: valgrind-3.18.1-gdbserver_tests-hwcap.patch +# KDE#445184 Rust v0 symbol demangling is broken +Patch12: valgrind-3.18.1-rust-v0-demangle.patch + BuildRequires: make BuildRequires: glibc-devel @@ -248,6 +251,7 @@ Valgrind User Manual for details. %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -481,6 +485,7 @@ fi - Add valgrind-3.18.1-ppc-pstq.patch - Add valgrind-3.18.1-ppc-pstq-tests.patch - Add valgrind-3.18.1-gdbserver_tests-hwcap.patch +- Add valgrind-3.18.1-rust-v0-demangle.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From beb1f8730af609899d6dbd6dda4755af0ab5dc4f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 18:13:42 +0100 Subject: [PATCH 085/196] Add valgrind-3.18.1-arm64-doubleword-cas.patch --- valgrind-3.18.1-arm64-doubleword-cas.patch | 121 +++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 126 insertions(+) create mode 100644 valgrind-3.18.1-arm64-doubleword-cas.patch diff --git a/valgrind-3.18.1-arm64-doubleword-cas.patch b/valgrind-3.18.1-arm64-doubleword-cas.patch new file mode 100644 index 0000000..7cf0bf5 --- /dev/null +++ b/valgrind-3.18.1-arm64-doubleword-cas.patch @@ -0,0 +1,121 @@ +commit 7dbe2fed72886874f2eaf57dc07929542ae55b58 +Author: Julian Seward +Date: Fri Nov 12 10:40:48 2021 +0100 + + Bug 445354 - arm64 backend: incorrect code emitted for doubleword CAS. + + The sequence of instructions emitted by the arm64 backend for doubleword + compare-and-swap is incorrect. This could lead to incorrect simulation of the + AArch8.1 atomic instructions (CASP, at least). It also causes failures in the + upcoming fix for v8.0 support for LD{,A}XP/ST{,L}XP in bug 444399, at least + when running with the fallback LL/SC implementation + (`--sim-hints=fallback-llsc`, or as autoselected at startup). In the worst + case it can cause segfaulting in the generated code, because it could jump + backwards unexpectedly far. + + The problem is the sequence emitted for ARM64in_CASP: + + * the jump offsets are incorrect, both for `bne out` (x 2) and `cbnz w1, loop`. + + * using w1 to hold the success indication of the stxp instruction trashes the + previous value in x1. But the value in x1 is an output of ARM64in_CASP, + hence one of the two output registers is corrupted. That confuses any code + downstream that want to inspect those values to find out whether or not the + transaction succeeded. + + The fixes are to + + * fix the branch offsets + + * use a different register to hold the stxp success indication. w3 is a + convenient check. + +diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c +index 5dccc0495..5657bcab9 100644 +--- a/VEX/priv/host_arm64_defs.c ++++ b/VEX/priv/host_arm64_defs.c +@@ -2271,6 +2271,7 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) + addHRegUse(u, HRmWrite, hregARM64_X1()); + addHRegUse(u, HRmWrite, hregARM64_X9()); + addHRegUse(u, HRmWrite, hregARM64_X8()); ++ addHRegUse(u, HRmWrite, hregARM64_X3()); + break; + case ARM64in_MFence: + return; +@@ -4254,16 +4255,16 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, + + -- always: + cmp x0, x8 // EB08001F +- bne out // 540000E1 (b.ne #28 ) ++ bne out // 540000A1 + cmp x1, x9 // EB09003F +- bne out // 540000A1 (b.ne #20 ) ++ bne out // 54000061 + + -- one of: +- stxp w1, x6, x7, [x2] // C8211C46 +- stxp w1, w6, w7, [x2] // 88211C46 ++ stxp w3, x6, x7, [x2] // C8231C46 ++ stxp w3, w6, w7, [x2] // 88231C46 + + -- always: +- cbnz w1, loop // 35FFFE81 (cbnz w1, #-48 ) ++ cbnz w3, loop // 35FFFF03 + out: + */ + switch (i->ARM64in.CASP.szB) { +@@ -4277,15 +4278,15 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, + default: vassert(0); + } + *p++ = 0xEB08001F; +- *p++ = 0x540000E1; +- *p++ = 0xEB09003F; + *p++ = 0x540000A1; ++ *p++ = 0xEB09003F; ++ *p++ = 0x54000061; + switch (i->ARM64in.CASP.szB) { +- case 8: *p++ = 0xC8211C46; break; +- case 4: *p++ = 0x88211C46; break; ++ case 8: *p++ = 0xC8231C46; break; ++ case 4: *p++ = 0x88231C46; break; + default: vassert(0); + } +- *p++ = 0x35FFFE81; ++ *p++ = 0x35FFFF03; + goto done; + } + case ARM64in_MFence: { +diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h +index f0737f2c6..01fb5708e 100644 +--- a/VEX/priv/host_arm64_defs.h ++++ b/VEX/priv/host_arm64_defs.h +@@ -720,6 +720,7 @@ typedef + Int szB; /* 1, 2, 4 or 8 */ + } StrEX; + /* x1 = CAS(x3(addr), x5(expected) -> x7(new)), ++ and trashes x8 + where x1[8*szB-1 : 0] == x5[8*szB-1 : 0] indicates success, + x1[8*szB-1 : 0] != x5[8*szB-1 : 0] indicates failure. + Uses x8 as scratch (but that's not allocatable). +@@ -738,7 +739,7 @@ typedef + -- if branch taken, failure; x1[[8*szB-1 : 0] holds old value + -- attempt to store + stxr w8, x7, [x3] +- -- if store successful, x1==0, so the eor is "x1 := x5" ++ -- if store successful, x8==0 + -- if store failed, branch back and try again. + cbne w8, loop + after: +@@ -746,6 +747,12 @@ typedef + struct { + Int szB; /* 1, 2, 4 or 8 */ + } CAS; ++ /* Doubleworld CAS, 2 x 32 bit or 2 x 64 bit ++ x0(oldLSW),x1(oldMSW) ++ = DCAS(x2(addr), x4(expectedLSW),x5(expectedMSW) ++ -> x6(newLSW),x7(newMSW)) ++ and trashes x8, x9 and x3 ++ */ + struct { + Int szB; /* 4 or 8 */ + } CASP; diff --git a/valgrind.spec b/valgrind.spec index 7f16088..337279f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -108,6 +108,9 @@ Patch11: valgrind-3.18.1-gdbserver_tests-hwcap.patch # KDE#445184 Rust v0 symbol demangling is broken Patch12: valgrind-3.18.1-rust-v0-demangle.patch +# KDE#445354 arm64 backend: incorrect code emitted for doubleword CAS +Patch13: valgrind-3.18.1-arm64-doubleword-cas.patch + BuildRequires: make BuildRequires: glibc-devel @@ -252,6 +255,7 @@ Valgrind User Manual for details. %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -486,6 +490,7 @@ fi - Add valgrind-3.18.1-ppc-pstq-tests.patch - Add valgrind-3.18.1-gdbserver_tests-hwcap.patch - Add valgrind-3.18.1-rust-v0-demangle.patch +- Add valgrind-3.18.1-arm64-doubleword-cas.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From 04e90e24c6548b45b48ae056e4b9b33be498eb5e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 18:19:28 +0100 Subject: [PATCH 086/196] Add valgrind-3.18.1-arm64-ldaxp-stlxp.patch --- valgrind-3.18.1-arm64-ldaxp-stlxp.patch | 1440 +++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 1445 insertions(+) create mode 100644 valgrind-3.18.1-arm64-ldaxp-stlxp.patch diff --git a/valgrind-3.18.1-arm64-ldaxp-stlxp.patch b/valgrind-3.18.1-arm64-ldaxp-stlxp.patch new file mode 100644 index 0000000..d118cc6 --- /dev/null +++ b/valgrind-3.18.1-arm64-ldaxp-stlxp.patch @@ -0,0 +1,1440 @@ +commit 530df882b8f60ecacaf2b9b8a719f7ea1c1d1650 +Author: Julian Seward +Date: Fri Nov 12 12:13:45 2021 +0100 + + Bug 444399 - disInstr(arm64): unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP). + + This is unfortunately a big and complex patch, to implement LD{,A}XP and + ST{,L}XP. These were omitted from the original AArch64 v8.0 implementation + for unknown reasons. + + (Background) the patch is made significantly more complex because for AArch64 + we actually have two implementations of the underlying + Load-Linked/Store-Conditional (LL/SC) machinery: a "primary" implementation, + which translates LL/SC more or less directly into IR and re-emits them at the + back end, and a "fallback" implementation that implements LL/SC "manually", by + taking advantage of the fact that V serialises thread execution, so we can + "implement" LL/SC by simulating a reservation using fields LLSC_* in the guest + state, and invalidating the reservation at every thread switch. + + (Background) the fallback scheme is needed because the primary scheme is in + violation of the ARMv8 semantics in that it can (easily) introduce extra + memory references between the LL and SC, hence on some hardware causing the + reservation to always fail and so the simulated program to wind up looping + forever. + + For these instructions, big picture: + + * for the primary implementation, we take advantage of the fact that + IRStmt_LLSC allows I128 bit transactions to be represented. Hence we bundle + up the two 64-bit data elements into an I128 (or vice versa) and present a + single I128-typed IRStmt_LLSC in the IR. In the backend, those are + re-emitted as LDXP/STXP respectively. For LL/SC on 32-bit register pairs, + that bundling produces a single 64-bit item, and so the existing LL/SC + backend machinery handles it. The effect is that a doubleword 32-bit LL/SC + in the front end translates into a single 64-bit LL/SC in the back end. + Overall, though, the implementation is straightforward. + + * for the fallback implementation, it is necessary to extend the guest state + field `guest_LLSC_DATA` to represent a 128-bit transaction, by splitting it + into _DATA_LO64 and DATA_HI64. Then, the implementation is an exact + analogue of the fallback implementation for single-word LL/SC. It takes + advantage of the fact that the backend already supports 128-bit CAS, as + fixed in bug 445354. As with the primary implementation, doubleword 32-bit + LL/SC is bundled into a single 64-bit transaction. + + Detailed changes: + + * new arm64 guest state fields LLSC_DATA_LO64/LLSC_DATA_LO64 to replace + guest_LLSC_DATA + + * (ridealong fix) arm64 front end: a fix to a minor and harmless decoding bug + for the single-word LDX/STX case. + + * arm64 front end: IR generation for LD{,A}XP/ST{,L}XP: tedious and + longwinded, but per comments above, an exact(ish) analogue of the singleword + case + + * arm64 backend: new insns ARM64Instr_LdrEXP / ARM64Instr_StrEXP to wrap up 2 + x 64 exclusive loads/stores. Per comments above, there's no need to handle + the 2 x 32 case. + + * arm64 isel: translate I128-typed IRStmt_LLSC into the above two insns + + * arm64 isel: some auxiliary bits and pieces needed to handle I128 values; + this is standard doubleword isel stuff + + * arm64 isel: (ridealong fix): Ist_CAS: check for endianness of the CAS! + + * arm64 isel: (ridealong) a couple of formatting fixes + + * IR infrastructure: add support for I128 constants, done the same as V128 + constants + + * memcheck: handle shadow loads and stores for I128 values + + * testcase: memcheck/tests/atomic_incs.c: on arm64, also test 128-bit atomic + addition, to check we really have atomicity right + + * testcase: new test none/tests/arm64/ldxp_stxp.c, tests operation but not + atomicity. (Smoke test). + +diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c +index 12a1c5978..ee018c6a9 100644 +--- a/VEX/priv/guest_arm64_toIR.c ++++ b/VEX/priv/guest_arm64_toIR.c +@@ -1184,9 +1184,10 @@ static IRExpr* narrowFrom64 ( IRType dstTy, IRExpr* e ) + #define OFFB_CMSTART offsetof(VexGuestARM64State,guest_CMSTART) + #define OFFB_CMLEN offsetof(VexGuestARM64State,guest_CMLEN) + +-#define OFFB_LLSC_SIZE offsetof(VexGuestARM64State,guest_LLSC_SIZE) +-#define OFFB_LLSC_ADDR offsetof(VexGuestARM64State,guest_LLSC_ADDR) +-#define OFFB_LLSC_DATA offsetof(VexGuestARM64State,guest_LLSC_DATA) ++#define OFFB_LLSC_SIZE offsetof(VexGuestARM64State,guest_LLSC_SIZE) ++#define OFFB_LLSC_ADDR offsetof(VexGuestARM64State,guest_LLSC_ADDR) ++#define OFFB_LLSC_DATA_LO64 offsetof(VexGuestARM64State,guest_LLSC_DATA_LO64) ++#define OFFB_LLSC_DATA_HI64 offsetof(VexGuestARM64State,guest_LLSC_DATA_HI64) + + + /* ---------------- Integer registers ---------------- */ +@@ -6652,7 +6653,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + (coregrind/m_scheduler/scheduler.c, run_thread_for_a_while() + has to do this bit) + */ +- if (INSN(29,23) == BITS7(0,0,1,0,0,0,0) ++ if (INSN(29,24) == BITS6(0,0,1,0,0,0) + && (INSN(23,21) & BITS3(1,0,1)) == BITS3(0,0,0) + && INSN(14,10) == BITS5(1,1,1,1,1)) { + UInt szBlg2 = INSN(31,30); +@@ -6678,7 +6679,8 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + // if it faults. + IRTemp loaded_data64 = newTemp(Ity_I64); + assign(loaded_data64, widenUto64(ty, loadLE(ty, mkexpr(ea)))); +- stmt( IRStmt_Put( OFFB_LLSC_DATA, mkexpr(loaded_data64) )); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, mkexpr(loaded_data64) )); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, mkU64(0) )); + stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); + stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(szB) )); + putIReg64orZR(tt, mkexpr(loaded_data64)); +@@ -6729,7 +6731,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + )); + // Fail if the data doesn't match the LL data + IRTemp llsc_data64 = newTemp(Ity_I64); +- assign(llsc_data64, IRExpr_Get(OFFB_LLSC_DATA, Ity_I64)); ++ assign(llsc_data64, IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); + stmt( IRStmt_Exit( + binop(Iop_CmpNE64, widenUto64(ty, loadLE(ty, mkexpr(ea))), + mkexpr(llsc_data64)), +@@ -6771,6 +6773,257 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + /* else fall through */ + } + ++ /* -------------------- LD{,A}XP -------------------- */ ++ /* -------------------- ST{,L}XP -------------------- */ ++ /* 31 30 29 23 20 15 14 9 4 ++ 1 sz 001000 011 11111 0 t2 n t1 LDXP Rt1, Rt2, [Xn|SP] ++ 1 sz 001000 011 11111 1 t2 n t1 LDAXP Rt1, Rt2, [Xn|SP] ++ 1 sz 001000 001 s 0 t2 n t1 STXP Ws, Rt1, Rt2, [Xn|SP] ++ 1 sz 001000 001 s 1 t2 n t1 STLXP Ws, Rt1, Rt2, [Xn|SP] ++ */ ++ /* See just above, "LD{,A}X{R,RH,RB} / ST{,L}X{R,RH,RB}", for detailed ++ comments about this implementation. Note the 'sz' field here is only 1 ++ bit; above, it is 2 bits, and has a different encoding. ++ */ ++ if (INSN(31,31) == 1 ++ && INSN(29,24) == BITS6(0,0,1,0,0,0) ++ && (INSN(23,21) & BITS3(1,0,1)) == BITS3(0,0,1)) { ++ Bool elemIs64 = INSN(30,30) == 1; ++ Bool isLD = INSN(22,22) == 1; ++ Bool isAcqOrRel = INSN(15,15) == 1; ++ UInt ss = INSN(20,16); ++ UInt tt2 = INSN(14,10); ++ UInt nn = INSN(9,5); ++ UInt tt1 = INSN(4,0); ++ ++ UInt elemSzB = elemIs64 ? 8 : 4; ++ UInt fullSzB = 2 * elemSzB; ++ IRType elemTy = integerIRTypeOfSize(elemSzB); ++ IRType fullTy = integerIRTypeOfSize(fullSzB); ++ ++ IRTemp ea = newTemp(Ity_I64); ++ assign(ea, getIReg64orSP(nn)); ++ /* FIXME generate check that ea is 2*elemSzB-aligned */ ++ ++ if (isLD && ss == BITS5(1,1,1,1,1)) { ++ if (abiinfo->guest__use_fallback_LLSC) { ++ // Fallback implementation of LL. ++ // Do the load first so we don't update any guest state if it ++ // faults. Assumes little-endian guest. ++ if (fullTy == Ity_I64) { ++ vassert(elemSzB == 4); ++ IRTemp loaded_data64 = newTemp(Ity_I64); ++ assign(loaded_data64, loadLE(fullTy, mkexpr(ea))); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, mkexpr(loaded_data64) )); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, mkU64(0) )); ++ stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); ++ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(8) )); ++ putIReg64orZR(tt1, unop(Iop_32Uto64, ++ unop(Iop_64to32, ++ mkexpr(loaded_data64)))); ++ putIReg64orZR(tt2, unop(Iop_32Uto64, ++ unop(Iop_64HIto32, ++ mkexpr(loaded_data64)))); ++ } else { ++ vassert(elemSzB == 8 && fullTy == Ity_I128); ++ IRTemp loaded_data128 = newTemp(Ity_I128); ++ // Hack: do the load as V128 rather than I128 so as to avoid ++ // having to implement I128 loads in the arm64 back end. ++ assign(loaded_data128, unop(Iop_ReinterpV128asI128, ++ loadLE(Ity_V128, mkexpr(ea)))); ++ IRTemp loaded_data_lo64 = newTemp(Ity_I64); ++ IRTemp loaded_data_hi64 = newTemp(Ity_I64); ++ assign(loaded_data_lo64, unop(Iop_128to64, ++ mkexpr(loaded_data128))); ++ assign(loaded_data_hi64, unop(Iop_128HIto64, ++ mkexpr(loaded_data128))); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, ++ mkexpr(loaded_data_lo64) )); ++ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, ++ mkexpr(loaded_data_hi64) )); ++ stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); ++ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(16) )); ++ putIReg64orZR(tt1, mkexpr(loaded_data_lo64)); ++ putIReg64orZR(tt2, mkexpr(loaded_data_hi64)); ++ } ++ } else { ++ // Non-fallback implementation of LL. ++ IRTemp res = newTemp(fullTy); // I64 or I128 ++ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), NULL/*LL*/)); ++ // Assuming a little-endian guest here. Rt1 goes at the lower ++ // address, so it must live in the least significant half of `res`. ++ IROp opGetLO = fullTy == Ity_I128 ? Iop_128to64 : Iop_64to32; ++ IROp opGetHI = fullTy == Ity_I128 ? Iop_128HIto64 : Iop_64HIto32; ++ putIReg64orZR(tt1, widenUto64(elemTy, unop(opGetLO, mkexpr(res)))); ++ putIReg64orZR(tt2, widenUto64(elemTy, unop(opGetHI, mkexpr(res)))); ++ } ++ if (isAcqOrRel) { ++ stmt(IRStmt_MBE(Imbe_Fence)); ++ } ++ DIP("ld%sxp %s, %s, [%s] %s\n", ++ isAcqOrRel ? (isLD ? "a" : "l") : "", ++ nameIRegOrZR(elemSzB == 8, tt1), ++ nameIRegOrZR(elemSzB == 8, tt2), ++ nameIReg64orSP(nn), ++ abiinfo->guest__use_fallback_LLSC ++ ? "(fallback implementation)" : ""); ++ return True; ++ } ++ if (!isLD) { ++ if (isAcqOrRel) { ++ stmt(IRStmt_MBE(Imbe_Fence)); ++ } ++ if (abiinfo->guest__use_fallback_LLSC) { ++ // Fallback implementation of SC. ++ // This is really ugly, since we don't have any way to do ++ // proper if-then-else. First, set up as if the SC failed, ++ // and jump forwards if it really has failed. ++ ++ // Continuation address ++ IRConst* nia = IRConst_U64(guest_PC_curr_instr + 4); ++ ++ // "the SC failed". Any non-zero value means failure. ++ putIReg64orZR(ss, mkU64(1)); ++ ++ IRTemp tmp_LLsize = newTemp(Ity_I64); ++ assign(tmp_LLsize, IRExpr_Get(OFFB_LLSC_SIZE, Ity_I64)); ++ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(0) // "no transaction" ++ )); ++ // Fail if no or wrong-size transaction ++ vassert((fullSzB == 8 && fullTy == Ity_I64) ++ || (fullSzB == 16 && fullTy == Ity_I128)); ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, mkexpr(tmp_LLsize), mkU64(fullSzB)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ // Fail if the address doesn't match the LL address ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, mkexpr(ea), ++ IRExpr_Get(OFFB_LLSC_ADDR, Ity_I64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ // The data to be stored. ++ IRTemp store_data = newTemp(fullTy); ++ if (fullTy == Ity_I64) { ++ assign(store_data, ++ binop(Iop_32HLto64, ++ narrowFrom64(Ity_I32, getIReg64orZR(tt2)), ++ narrowFrom64(Ity_I32, getIReg64orZR(tt1)))); ++ } else { ++ assign(store_data, ++ binop(Iop_64HLto128, ++ getIReg64orZR(tt2), getIReg64orZR(tt1))); ++ } ++ ++ if (fullTy == Ity_I64) { ++ // 64 bit (2x32 bit) path ++ // Fail if the data in memory doesn't match the data stashed by ++ // the LL. ++ IRTemp llsc_data_lo64 = newTemp(Ity_I64); ++ assign(llsc_data_lo64, ++ IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, loadLE(Ity_I64, mkexpr(ea)), ++ mkexpr(llsc_data_lo64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ // Try to CAS the new value in. ++ IRTemp old = newTemp(Ity_I64); ++ IRTemp expd = newTemp(Ity_I64); ++ assign(expd, mkexpr(llsc_data_lo64)); ++ stmt( IRStmt_CAS(mkIRCAS(/*oldHi*/IRTemp_INVALID, old, ++ Iend_LE, mkexpr(ea), ++ /*expdHi*/NULL, mkexpr(expd), ++ /*dataHi*/NULL, mkexpr(store_data) ++ ))); ++ // Fail if the CAS failed (viz, old != expd) ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, mkexpr(old), mkexpr(expd)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ } else { ++ // 128 bit (2x64 bit) path ++ // Fail if the data in memory doesn't match the data stashed by ++ // the LL. ++ IRTemp llsc_data_lo64 = newTemp(Ity_I64); ++ assign(llsc_data_lo64, ++ IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); ++ IRTemp llsc_data_hi64 = newTemp(Ity_I64); ++ assign(llsc_data_hi64, ++ IRExpr_Get(OFFB_LLSC_DATA_HI64, Ity_I64)); ++ IRTemp data_at_ea = newTemp(Ity_I128); ++ assign(data_at_ea, ++ unop(Iop_ReinterpV128asI128, ++ loadLE(Ity_V128, mkexpr(ea)))); ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, ++ unop(Iop_128to64, mkexpr(data_at_ea)), ++ mkexpr(llsc_data_lo64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, ++ unop(Iop_128HIto64, mkexpr(data_at_ea)), ++ mkexpr(llsc_data_hi64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ // Try to CAS the new value in. ++ IRTemp old_lo64 = newTemp(Ity_I64); ++ IRTemp old_hi64 = newTemp(Ity_I64); ++ IRTemp expd_lo64 = newTemp(Ity_I64); ++ IRTemp expd_hi64 = newTemp(Ity_I64); ++ IRTemp store_data_lo64 = newTemp(Ity_I64); ++ IRTemp store_data_hi64 = newTemp(Ity_I64); ++ assign(expd_lo64, mkexpr(llsc_data_lo64)); ++ assign(expd_hi64, mkexpr(llsc_data_hi64)); ++ assign(store_data_lo64, unop(Iop_128to64, mkexpr(store_data))); ++ assign(store_data_hi64, unop(Iop_128HIto64, mkexpr(store_data))); ++ stmt( IRStmt_CAS(mkIRCAS(old_hi64, old_lo64, ++ Iend_LE, mkexpr(ea), ++ mkexpr(expd_hi64), mkexpr(expd_lo64), ++ mkexpr(store_data_hi64), ++ mkexpr(store_data_lo64) ++ ))); ++ // Fail if the CAS failed (viz, old != expd) ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, mkexpr(old_lo64), mkexpr(expd_lo64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ stmt( IRStmt_Exit( ++ binop(Iop_CmpNE64, mkexpr(old_hi64), mkexpr(expd_hi64)), ++ Ijk_Boring, nia, OFFB_PC ++ )); ++ } ++ // Otherwise we succeeded (!) ++ putIReg64orZR(ss, mkU64(0)); ++ } else { ++ // Non-fallback implementation of SC. ++ IRTemp res = newTemp(Ity_I1); ++ IRExpr* dataLO = narrowFrom64(elemTy, getIReg64orZR(tt1)); ++ IRExpr* dataHI = narrowFrom64(elemTy, getIReg64orZR(tt2)); ++ IROp opMerge = fullTy == Ity_I128 ? Iop_64HLto128 : Iop_32HLto64; ++ IRExpr* data = binop(opMerge, dataHI, dataLO); ++ // Assuming a little-endian guest here. Rt1 goes at the lower ++ // address, so it must live in the least significant half of `data`. ++ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), data)); ++ /* IR semantics: res is 1 if store succeeds, 0 if it fails. ++ Need to set rS to 1 on failure, 0 on success. */ ++ putIReg64orZR(ss, binop(Iop_Xor64, unop(Iop_1Uto64, mkexpr(res)), ++ mkU64(1))); ++ } ++ DIP("st%sxp %s, %s, %s, [%s] %s\n", ++ isAcqOrRel ? (isLD ? "a" : "l") : "", ++ nameIRegOrZR(False, ss), ++ nameIRegOrZR(elemSzB == 8, tt1), ++ nameIRegOrZR(elemSzB == 8, tt2), ++ nameIReg64orSP(nn), ++ abiinfo->guest__use_fallback_LLSC ++ ? "(fallback implementation)" : ""); ++ return True; ++ } ++ /* else fall through */ ++ } ++ + /* ------------------ LDA{R,RH,RB} ------------------ */ + /* ------------------ STL{R,RH,RB} ------------------ */ + /* 31 29 23 20 14 9 4 +diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c +index 5657bcab9..b65e27db4 100644 +--- a/VEX/priv/host_arm64_defs.c ++++ b/VEX/priv/host_arm64_defs.c +@@ -1059,6 +1059,16 @@ ARM64Instr* ARM64Instr_StrEX ( Int szB ) { + vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1); + return i; + } ++ARM64Instr* ARM64Instr_LdrEXP ( void ) { ++ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); ++ i->tag = ARM64in_LdrEXP; ++ return i; ++} ++ARM64Instr* ARM64Instr_StrEXP ( void ) { ++ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); ++ i->tag = ARM64in_StrEXP; ++ return i; ++} + ARM64Instr* ARM64Instr_CAS ( Int szB ) { + ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); + i->tag = ARM64in_CAS; +@@ -1699,12 +1709,19 @@ void ppARM64Instr ( const ARM64Instr* i ) { + sz, i->ARM64in.StrEX.szB == 8 ? 'x' : 'w'); + return; + } ++ case ARM64in_LdrEXP: ++ vex_printf("ldxp x2, x3, [x4]"); ++ return; ++ case ARM64in_StrEXP: ++ vex_printf("stxp w0, x2, x3, [x4]"); ++ return; + case ARM64in_CAS: { + vex_printf("x1 = cas(%dbit)(x3, x5 -> x7)", 8 * i->ARM64in.CAS.szB); + return; + } + case ARM64in_CASP: { +- vex_printf("x0,x1 = casp(%dbit)(x2, x4,x5 -> x6,x7)", 8 * i->ARM64in.CASP.szB); ++ vex_printf("x0,x1 = casp(2x%dbit)(x2, x4,x5 -> x6,x7)", ++ 8 * i->ARM64in.CASP.szB); + return; + } + case ARM64in_MFence: +@@ -2253,6 +2270,17 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) + addHRegUse(u, HRmWrite, hregARM64_X0()); + addHRegUse(u, HRmRead, hregARM64_X2()); + return; ++ case ARM64in_LdrEXP: ++ addHRegUse(u, HRmRead, hregARM64_X4()); ++ addHRegUse(u, HRmWrite, hregARM64_X2()); ++ addHRegUse(u, HRmWrite, hregARM64_X3()); ++ return; ++ case ARM64in_StrEXP: ++ addHRegUse(u, HRmRead, hregARM64_X4()); ++ addHRegUse(u, HRmWrite, hregARM64_X0()); ++ addHRegUse(u, HRmRead, hregARM64_X2()); ++ addHRegUse(u, HRmRead, hregARM64_X3()); ++ return; + case ARM64in_CAS: + addHRegUse(u, HRmRead, hregARM64_X3()); + addHRegUse(u, HRmRead, hregARM64_X5()); +@@ -2571,6 +2599,10 @@ void mapRegs_ARM64Instr ( HRegRemap* m, ARM64Instr* i, Bool mode64 ) + return; + case ARM64in_StrEX: + return; ++ case ARM64in_LdrEXP: ++ return; ++ case ARM64in_StrEXP: ++ return; + case ARM64in_CAS: + return; + case ARM64in_CASP: +@@ -4167,6 +4199,16 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, + } + goto bad; + } ++ case ARM64in_LdrEXP: { ++ // 820C7FC8 ldxp x2, x3, [x4] ++ *p++ = 0xC87F0C82; ++ goto done; ++ } ++ case ARM64in_StrEXP: { ++ // 820C20C8 stxp w0, x2, x3, [x4] ++ *p++ = 0xC8200C82; ++ goto done; ++ } + case ARM64in_CAS: { + /* This isn't simple. For an explanation see the comment in + host_arm64_defs.h on the definition of ARM64Instr case CAS. +diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h +index 01fb5708e..dc686dff7 100644 +--- a/VEX/priv/host_arm64_defs.h ++++ b/VEX/priv/host_arm64_defs.h +@@ -509,8 +509,10 @@ typedef + ARM64in_AddToSP, /* move SP by small, signed constant */ + ARM64in_FromSP, /* move SP to integer register */ + ARM64in_Mul, +- ARM64in_LdrEX, +- ARM64in_StrEX, ++ ARM64in_LdrEX, /* load exclusive, single register */ ++ ARM64in_StrEX, /* store exclusive, single register */ ++ ARM64in_LdrEXP, /* load exclusive, register pair, 2x64-bit only */ ++ ARM64in_StrEXP, /* store exclusive, register pair, 2x64-bit only */ + ARM64in_CAS, + ARM64in_CASP, + ARM64in_MFence, +@@ -719,6 +721,12 @@ typedef + struct { + Int szB; /* 1, 2, 4 or 8 */ + } StrEX; ++ /* LDXP x2, x3, [x4]. This is 2x64-bit only. */ ++ struct { ++ } LdrEXP; ++ /* STXP w0, x2, x3, [x4]. This is 2x64-bit only. */ ++ struct { ++ } StrEXP; + /* x1 = CAS(x3(addr), x5(expected) -> x7(new)), + and trashes x8 + where x1[8*szB-1 : 0] == x5[8*szB-1 : 0] indicates success, +@@ -1037,6 +1045,8 @@ extern ARM64Instr* ARM64Instr_Mul ( HReg dst, HReg argL, HReg argR, + ARM64MulOp op ); + extern ARM64Instr* ARM64Instr_LdrEX ( Int szB ); + extern ARM64Instr* ARM64Instr_StrEX ( Int szB ); ++extern ARM64Instr* ARM64Instr_LdrEXP ( void ); ++extern ARM64Instr* ARM64Instr_StrEXP ( void ); + extern ARM64Instr* ARM64Instr_CAS ( Int szB ); + extern ARM64Instr* ARM64Instr_CASP ( Int szB ); + extern ARM64Instr* ARM64Instr_MFence ( void ); +diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c +index 4b1d8c846..094e7e74b 100644 +--- a/VEX/priv/host_arm64_isel.c ++++ b/VEX/priv/host_arm64_isel.c +@@ -196,9 +196,9 @@ static HReg iselCondCode_R ( ISelEnv* env, IRExpr* e ); + static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ); + static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e ); + +-static void iselInt128Expr_wrk ( /*OUT*/HReg* rHi, HReg* rLo, ++static void iselInt128Expr_wrk ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo, + ISelEnv* env, IRExpr* e ); +-static void iselInt128Expr ( /*OUT*/HReg* rHi, HReg* rLo, ++static void iselInt128Expr ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo, + ISelEnv* env, IRExpr* e ); + + static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e ); +@@ -1759,9 +1759,12 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) + + /* AND/OR/XOR(e1, e2) (for any e1, e2) */ + switch (e->Iex.Binop.op) { +- case Iop_And64: case Iop_And32: lop = ARM64lo_AND; goto log_binop; +- case Iop_Or64: case Iop_Or32: case Iop_Or16: lop = ARM64lo_OR; goto log_binop; +- case Iop_Xor64: case Iop_Xor32: lop = ARM64lo_XOR; goto log_binop; ++ case Iop_And64: case Iop_And32: ++ lop = ARM64lo_AND; goto log_binop; ++ case Iop_Or64: case Iop_Or32: case Iop_Or16: ++ lop = ARM64lo_OR; goto log_binop; ++ case Iop_Xor64: case Iop_Xor32: ++ lop = ARM64lo_XOR; goto log_binop; + log_binop: { + HReg dst = newVRegI(env); + HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); +@@ -2013,6 +2016,11 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) + iselInt128Expr(&rHi,&rLo, env, e->Iex.Unop.arg); + return rHi; /* and abandon rLo */ + } ++ case Iop_128to64: { ++ HReg rHi, rLo; ++ iselInt128Expr(&rHi,&rLo, env, e->Iex.Unop.arg); ++ return rLo; /* and abandon rHi */ ++ } + case Iop_8Sto32: case Iop_8Sto64: { + IRExpr* arg = e->Iex.Unop.arg; + HReg src = iselIntExpr_R(env, arg); +@@ -2185,13 +2193,19 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) + } + return dst; + } ++ case Iop_64HIto32: { ++ HReg dst = newVRegI(env); ++ HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); ++ addInstr(env, ARM64Instr_Shift(dst, src, ARM64RI6_I6(32), ++ ARM64sh_SHR)); ++ return dst; ++ } + case Iop_64to32: + case Iop_64to16: + case Iop_64to8: + case Iop_32to16: + /* These are no-ops. */ + return iselIntExpr_R(env, e->Iex.Unop.arg); +- + default: + break; + } +@@ -2335,6 +2349,43 @@ static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo, + vassert(e); + vassert(typeOfIRExpr(env->type_env,e) == Ity_I128); + ++ /* --------- TEMP --------- */ ++ if (e->tag == Iex_RdTmp) { ++ lookupIRTempPair(rHi, rLo, env, e->Iex.RdTmp.tmp); ++ return; ++ } ++ ++ /* --------- CONST --------- */ ++ if (e->tag == Iex_Const) { ++ IRConst* c = e->Iex.Const.con; ++ vassert(c->tag == Ico_U128); ++ if (c->Ico.U128 == 0) { ++ // The only case we need to handle (so far) ++ HReg zero = newVRegI(env); ++ addInstr(env, ARM64Instr_Imm64(zero, 0)); ++ *rHi = *rLo = zero; ++ return; ++ } ++ } ++ ++ /* --------- UNARY ops --------- */ ++ if (e->tag == Iex_Unop) { ++ switch (e->Iex.Unop.op) { ++ case Iop_ReinterpV128asI128: { ++ HReg dstHi = newVRegI(env); ++ HReg dstLo = newVRegI(env); ++ HReg src = iselV128Expr(env, e->Iex.Unop.arg); ++ addInstr(env, ARM64Instr_VXfromQ(dstHi, src, 1)); ++ addInstr(env, ARM64Instr_VXfromQ(dstLo, src, 0)); ++ *rHi = dstHi; ++ *rLo = dstLo; ++ return; ++ } ++ default: ++ break; ++ } ++ } ++ + /* --------- BINARY ops --------- */ + if (e->tag == Iex_Binop) { + switch (e->Iex.Binop.op) { +@@ -4086,6 +4137,14 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) + addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src)); + return; + } ++ if (ty == Ity_I128) { ++ HReg rHi, rLo, dstHi, dstLo; ++ iselInt128Expr(&rHi,&rLo, env, stmt->Ist.WrTmp.data); ++ lookupIRTempPair( &dstHi, &dstLo, env, tmp); ++ addInstr(env, ARM64Instr_MovI(dstHi, rHi)); ++ addInstr(env, ARM64Instr_MovI(dstLo, rLo)); ++ return; ++ } + if (ty == Ity_V128) { + HReg src = iselV128Expr(env, stmt->Ist.WrTmp.data); + HReg dst = lookupIRTemp(env, tmp); +@@ -4183,42 +4242,67 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) + /* LL */ + IRTemp res = stmt->Ist.LLSC.result; + IRType ty = typeOfIRTemp(env->type_env, res); +- if (ty == Ity_I64 || ty == Ity_I32 ++ if (ty == Ity_I128 || ty == Ity_I64 || ty == Ity_I32 + || ty == Ity_I16 || ty == Ity_I8) { + Int szB = 0; +- HReg r_dst = lookupIRTemp(env, res); + HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr); + switch (ty) { +- case Ity_I8: szB = 1; break; +- case Ity_I16: szB = 2; break; +- case Ity_I32: szB = 4; break; +- case Ity_I64: szB = 8; break; +- default: vassert(0); ++ case Ity_I8: szB = 1; break; ++ case Ity_I16: szB = 2; break; ++ case Ity_I32: szB = 4; break; ++ case Ity_I64: szB = 8; break; ++ case Ity_I128: szB = 16; break; ++ default: vassert(0); ++ } ++ if (szB == 16) { ++ HReg r_dstMSword = INVALID_HREG; ++ HReg r_dstLSword = INVALID_HREG; ++ lookupIRTempPair(&r_dstMSword, &r_dstLSword, env, res); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); ++ addInstr(env, ARM64Instr_LdrEXP()); ++ addInstr(env, ARM64Instr_MovI(r_dstLSword, hregARM64_X2())); ++ addInstr(env, ARM64Instr_MovI(r_dstMSword, hregARM64_X3())); ++ } else { ++ vassert(szB != 0); ++ HReg r_dst = lookupIRTemp(env, res); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); ++ addInstr(env, ARM64Instr_LdrEX(szB)); ++ addInstr(env, ARM64Instr_MovI(r_dst, hregARM64_X2())); + } +- addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); +- addInstr(env, ARM64Instr_LdrEX(szB)); +- addInstr(env, ARM64Instr_MovI(r_dst, hregARM64_X2())); + return; + } + goto stmt_fail; + } else { + /* SC */ + IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.LLSC.storedata); +- if (tyd == Ity_I64 || tyd == Ity_I32 ++ if (tyd == Ity_I128 || tyd == Ity_I64 || tyd == Ity_I32 + || tyd == Ity_I16 || tyd == Ity_I8) { + Int szB = 0; +- HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata); + HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr); + switch (tyd) { +- case Ity_I8: szB = 1; break; +- case Ity_I16: szB = 2; break; +- case Ity_I32: szB = 4; break; +- case Ity_I64: szB = 8; break; +- default: vassert(0); ++ case Ity_I8: szB = 1; break; ++ case Ity_I16: szB = 2; break; ++ case Ity_I32: szB = 4; break; ++ case Ity_I64: szB = 8; break; ++ case Ity_I128: szB = 16; break; ++ default: vassert(0); ++ } ++ if (szB == 16) { ++ HReg rD_MSword = INVALID_HREG; ++ HReg rD_LSword = INVALID_HREG; ++ iselInt128Expr(&rD_MSword, ++ &rD_LSword, env, stmt->Ist.LLSC.storedata); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD_LSword)); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X3(), rD_MSword)); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); ++ addInstr(env, ARM64Instr_StrEXP()); ++ } else { ++ vassert(szB != 0); ++ HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD)); ++ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); ++ addInstr(env, ARM64Instr_StrEX(szB)); + } +- addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD)); +- addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); +- addInstr(env, ARM64Instr_StrEX(szB)); + } else { + goto stmt_fail; + } +@@ -4243,10 +4327,10 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) + + /* --------- ACAS --------- */ + case Ist_CAS: { +- if (stmt->Ist.CAS.details->oldHi == IRTemp_INVALID) { ++ IRCAS* cas = stmt->Ist.CAS.details; ++ if (cas->oldHi == IRTemp_INVALID && cas->end == Iend_LE) { + /* "normal" singleton CAS */ + UChar sz; +- IRCAS* cas = stmt->Ist.CAS.details; + IRType ty = typeOfIRExpr(env->type_env, cas->dataLo); + switch (ty) { + case Ity_I64: sz = 8; break; +@@ -4281,10 +4365,9 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) + addInstr(env, ARM64Instr_MovI(rOld, rResult)); + return; + } +- else { ++ if (cas->oldHi != IRTemp_INVALID && cas->end == Iend_LE) { + /* Paired register CAS, i.e. CASP */ + UChar sz; +- IRCAS* cas = stmt->Ist.CAS.details; + IRType ty = typeOfIRExpr(env->type_env, cas->dataLo); + switch (ty) { + case Ity_I64: sz = 8; break; +diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c +index 25566c41c..2d82c41a1 100644 +--- a/VEX/priv/ir_defs.c ++++ b/VEX/priv/ir_defs.c +@@ -76,6 +76,7 @@ void ppIRConst ( const IRConst* con ) + case Ico_U16: vex_printf( "0x%x:I16", (UInt)(con->Ico.U16)); break; + case Ico_U32: vex_printf( "0x%x:I32", (UInt)(con->Ico.U32)); break; + case Ico_U64: vex_printf( "0x%llx:I64", (ULong)(con->Ico.U64)); break; ++ case Ico_U128: vex_printf( "I128{0x%04x}", (UInt)(con->Ico.U128)); break; + case Ico_F32: u.f32 = con->Ico.F32; + vex_printf( "F32{0x%x}", u.i32); + break; +@@ -2266,6 +2267,13 @@ IRConst* IRConst_U64 ( ULong u64 ) + c->Ico.U64 = u64; + return c; + } ++IRConst* IRConst_U128 ( UShort con ) ++{ ++ IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst)); ++ c->tag = Ico_U128; ++ c->Ico.U128 = con; ++ return c; ++} + IRConst* IRConst_F32 ( Float f32 ) + { + IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst)); +@@ -4230,6 +4238,7 @@ IRType typeOfIRConst ( const IRConst* con ) + case Ico_U16: return Ity_I16; + case Ico_U32: return Ity_I32; + case Ico_U64: return Ity_I64; ++ case Ico_U128: return Ity_I128; + case Ico_F32: return Ity_F32; + case Ico_F32i: return Ity_F32; + case Ico_F64: return Ity_F64; +@@ -5129,7 +5138,7 @@ void tcStmt ( const IRSB* bb, const IRStmt* stmt, IRType gWordTy ) + tyRes = typeOfIRTemp(tyenv, stmt->Ist.LLSC.result); + if (stmt->Ist.LLSC.storedata == NULL) { + /* it's a LL */ +- if (tyRes != Ity_I64 && tyRes != Ity_I32 ++ if (tyRes != Ity_I128 && tyRes != Ity_I64 && tyRes != Ity_I32 + && tyRes != Ity_I16 && tyRes != Ity_I8) + sanityCheckFail(bb,stmt,"Ist.LLSC(LL).result :: bogus"); + } else { +@@ -5137,7 +5146,7 @@ void tcStmt ( const IRSB* bb, const IRStmt* stmt, IRType gWordTy ) + if (tyRes != Ity_I1) + sanityCheckFail(bb,stmt,"Ist.LLSC(SC).result: not :: Ity_I1"); + tyData = typeOfIRExpr(tyenv, stmt->Ist.LLSC.storedata); +- if (tyData != Ity_I64 && tyData != Ity_I32 ++ if (tyData != Ity_I128 && tyData != Ity_I64 && tyData != Ity_I32 + && tyData != Ity_I16 && tyData != Ity_I8) + sanityCheckFail(bb,stmt, + "Ist.LLSC(SC).result :: storedata bogus"); +@@ -5385,6 +5394,7 @@ Int sizeofIRType ( IRType ty ) + IRType integerIRTypeOfSize ( Int szB ) + { + switch (szB) { ++ case 16: return Ity_I128; + case 8: return Ity_I64; + case 4: return Ity_I32; + case 2: return Ity_I16; +diff --git a/VEX/pub/libvex_guest_arm64.h b/VEX/pub/libvex_guest_arm64.h +index 39b6ecdc2..91d06bd75 100644 +--- a/VEX/pub/libvex_guest_arm64.h ++++ b/VEX/pub/libvex_guest_arm64.h +@@ -157,14 +157,18 @@ typedef + note of bits 23 and 22. */ + UInt guest_FPCR; + +- /* Fallback LL/SC support. See bugs 344524 and 369459. */ +- ULong guest_LLSC_SIZE; // 0==no current transaction, else 1,2,4 or 8. ++ /* Fallback LL/SC support. See bugs 344524 and 369459. _LO64 and _HI64 ++ contain the original contents of _ADDR+0 .. _ADDR+15, but only _SIZE ++ number of bytes of it. The remaining 16-_SIZE bytes of them must be ++ zero. */ ++ ULong guest_LLSC_SIZE; // 0==no current transaction, else 1,2,4,8 or 16. + ULong guest_LLSC_ADDR; // Address of transaction. +- ULong guest_LLSC_DATA; // Original value at _ADDR, zero-extended. ++ ULong guest_LLSC_DATA_LO64; // Original value at _ADDR+0. ++ ULong guest_LLSC_DATA_HI64; // Original value at _ADDR+8. + + /* Padding to make it have an 16-aligned size */ + /* UInt pad_end_0; */ +- ULong pad_end_1; ++ /* ULong pad_end_1; */ + } + VexGuestARM64State; + +diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h +index deaa044c1..85805bb69 100644 +--- a/VEX/pub/libvex_ir.h ++++ b/VEX/pub/libvex_ir.h +@@ -269,6 +269,8 @@ typedef + Ico_U16, + Ico_U32, + Ico_U64, ++ Ico_U128, /* 128-bit restricted integer constant, ++ same encoding scheme as V128 */ + Ico_F32, /* 32-bit IEEE754 floating */ + Ico_F32i, /* 32-bit unsigned int to be interpreted literally + as a IEEE754 single value. */ +@@ -295,6 +297,7 @@ typedef + UShort U16; + UInt U32; + ULong U64; ++ UShort U128; + Float F32; + UInt F32i; + Double F64; +@@ -311,6 +314,7 @@ extern IRConst* IRConst_U8 ( UChar ); + extern IRConst* IRConst_U16 ( UShort ); + extern IRConst* IRConst_U32 ( UInt ); + extern IRConst* IRConst_U64 ( ULong ); ++extern IRConst* IRConst_U128 ( UShort ); + extern IRConst* IRConst_F32 ( Float ); + extern IRConst* IRConst_F32i ( UInt ); + extern IRConst* IRConst_F64 ( Double ); +diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c +index 919c7fae8..176c8e5cb 100644 +--- a/memcheck/mc_machine.c ++++ b/memcheck/mc_machine.c +@@ -1115,9 +1115,10 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB ) + if (o == GOF(CMSTART) && sz == 8) return -1; // untracked + if (o == GOF(CMLEN) && sz == 8) return -1; // untracked + +- if (o == GOF(LLSC_SIZE) && sz == 8) return -1; // untracked +- if (o == GOF(LLSC_ADDR) && sz == 8) return o; +- if (o == GOF(LLSC_DATA) && sz == 8) return o; ++ if (o == GOF(LLSC_SIZE) && sz == 8) return -1; // untracked ++ if (o == GOF(LLSC_ADDR) && sz == 8) return o; ++ if (o == GOF(LLSC_DATA_LO64) && sz == 8) return o; ++ if (o == GOF(LLSC_DATA_HI64) && sz == 8) return o; + + VG_(printf)("MC_(get_otrack_shadow_offset)(arm64)(off=%d,sz=%d)\n", + offset,szB); +diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c +index c6fd2653f..72ccb3c8c 100644 +--- a/memcheck/mc_translate.c ++++ b/memcheck/mc_translate.c +@@ -5497,8 +5497,11 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, + the address (shadow) to 'defined' following the test. */ + complainIfUndefined( mce, addr, guard ); + +- /* Now cook up a call to the relevant helper function, to read the +- data V bits from shadow memory. */ ++ /* Now cook up a call to the relevant helper function, to read the data V ++ bits from shadow memory. Note that I128 loads are done by pretending ++ we're doing a V128 load, and then converting the resulting V128 vbits ++ word to an I128, right at the end of this function -- see `castedToI128` ++ below. (It's only a minor hack :-) This pertains to bug 444399. */ + ty = shadowTypeV(ty); + + void* helper = NULL; +@@ -5511,6 +5514,7 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, + hname = "MC_(helperc_LOADV256le)"; + ret_via_outparam = True; + break; ++ case Ity_I128: // fallthrough. See comment above. + case Ity_V128: helper = &MC_(helperc_LOADV128le); + hname = "MC_(helperc_LOADV128le)"; + ret_via_outparam = True; +@@ -5576,7 +5580,7 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, + + /* We need to have a place to park the V bits we're just about to + read. */ +- IRTemp datavbits = newTemp(mce, ty, VSh); ++ IRTemp datavbits = newTemp(mce, ty == Ity_I128 ? Ity_V128 : ty, VSh); + + /* Here's the call. */ + IRDirty* di; +@@ -5603,7 +5607,14 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, + } + stmt( 'V', mce, IRStmt_Dirty(di) ); + +- return mkexpr(datavbits); ++ if (ty == Ity_I128) { ++ IRAtom* castedToI128 ++ = assignNew('V', mce, Ity_I128, ++ unop(Iop_ReinterpV128asI128, mkexpr(datavbits))); ++ return castedToI128; ++ } else { ++ return mkexpr(datavbits); ++ } + } + + +@@ -5631,6 +5642,7 @@ IRAtom* expr2vbits_Load ( MCEnv* mce, + case Ity_I16: + case Ity_I32: + case Ity_I64: ++ case Ity_I128: + case Ity_V128: + case Ity_V256: + return expr2vbits_Load_WRK(mce, end, ty, addr, bias, guard); +@@ -5928,6 +5940,7 @@ void do_shadow_Store ( MCEnv* mce, + c = IRConst_V256(V_BITS32_DEFINED); break; + case Ity_V128: // V128 weirdness -- used twice + c = IRConst_V128(V_BITS16_DEFINED); break; ++ case Ity_I128: c = IRConst_U128(V_BITS16_DEFINED); break; + case Ity_I64: c = IRConst_U64 (V_BITS64_DEFINED); break; + case Ity_I32: c = IRConst_U32 (V_BITS32_DEFINED); break; + case Ity_I16: c = IRConst_U16 (V_BITS16_DEFINED); break; +@@ -5948,6 +5961,7 @@ void do_shadow_Store ( MCEnv* mce, + switch (ty) { + case Ity_V256: /* we'll use the helper four times */ + case Ity_V128: /* we'll use the helper twice */ ++ case Ity_I128: /* we'll use the helper twice */ + case Ity_I64: helper = &MC_(helperc_STOREV64le); + hname = "MC_(helperc_STOREV64le)"; + break; +@@ -6051,9 +6065,9 @@ void do_shadow_Store ( MCEnv* mce, + stmt( 'V', mce, IRStmt_Dirty(diQ3) ); + + } +- else if (UNLIKELY(ty == Ity_V128)) { ++ else if (UNLIKELY(ty == Ity_V128 || ty == Ity_I128)) { + +- /* V128-bit case */ ++ /* V128/I128-bit case */ + /* See comment in next clause re 64-bit regparms */ + /* also, need to be careful about endianness */ + +@@ -6062,6 +6076,7 @@ void do_shadow_Store ( MCEnv* mce, + IRAtom *addrLo64, *addrHi64; + IRAtom *vdataLo64, *vdataHi64; + IRAtom *eBiasLo64, *eBiasHi64; ++ IROp opGetLO64, opGetHI64; + + if (end == Iend_LE) { + offLo64 = 0; +@@ -6071,9 +6086,17 @@ void do_shadow_Store ( MCEnv* mce, + offHi64 = 0; + } + ++ if (ty == Ity_V128) { ++ opGetLO64 = Iop_V128to64; ++ opGetHI64 = Iop_V128HIto64; ++ } else { ++ opGetLO64 = Iop_128to64; ++ opGetHI64 = Iop_128HIto64; ++ } ++ + eBiasLo64 = tyAddr==Ity_I32 ? mkU32(bias+offLo64) : mkU64(bias+offLo64); + addrLo64 = assignNew('V', mce, tyAddr, binop(mkAdd, addr, eBiasLo64) ); +- vdataLo64 = assignNew('V', mce, Ity_I64, unop(Iop_V128to64, vdata)); ++ vdataLo64 = assignNew('V', mce, Ity_I64, unop(opGetLO64, vdata)); + diLo64 = unsafeIRDirty_0_N( + 1/*regparms*/, + hname, VG_(fnptr_to_fnentry)( helper ), +@@ -6081,7 +6104,7 @@ void do_shadow_Store ( MCEnv* mce, + ); + eBiasHi64 = tyAddr==Ity_I32 ? mkU32(bias+offHi64) : mkU64(bias+offHi64); + addrHi64 = assignNew('V', mce, tyAddr, binop(mkAdd, addr, eBiasHi64) ); +- vdataHi64 = assignNew('V', mce, Ity_I64, unop(Iop_V128HIto64, vdata)); ++ vdataHi64 = assignNew('V', mce, Ity_I64, unop(opGetHI64, vdata)); + diHi64 = unsafeIRDirty_0_N( + 1/*regparms*/, + hname, VG_(fnptr_to_fnentry)( helper ), +@@ -6888,7 +6911,7 @@ static void do_shadow_LLSC ( MCEnv* mce, + /* Just treat this as a normal load, followed by an assignment of + the value to .result. */ + /* Stay sane */ +- tl_assert(resTy == Ity_I64 || resTy == Ity_I32 ++ tl_assert(resTy == Ity_I128 || resTy == Ity_I64 || resTy == Ity_I32 + || resTy == Ity_I16 || resTy == Ity_I8); + assign( 'V', mce, resTmp, + expr2vbits_Load( +@@ -6899,7 +6922,7 @@ static void do_shadow_LLSC ( MCEnv* mce, + /* Stay sane */ + IRType dataTy = typeOfIRExpr(mce->sb->tyenv, + stStoredata); +- tl_assert(dataTy == Ity_I64 || dataTy == Ity_I32 ++ tl_assert(dataTy == Ity_I128 || dataTy == Ity_I64 || dataTy == Ity_I32 + || dataTy == Ity_I16 || dataTy == Ity_I8); + do_shadow_Store( mce, stEnd, + stAddr, 0/* addr bias */, +@@ -7684,7 +7707,7 @@ static void schemeS ( MCEnv* mce, IRStmt* st ) + = typeOfIRTemp(mce->sb->tyenv, st->Ist.LLSC.result); + IRExpr* vanillaLoad + = IRExpr_Load(st->Ist.LLSC.end, resTy, st->Ist.LLSC.addr); +- tl_assert(resTy == Ity_I64 || resTy == Ity_I32 ++ tl_assert(resTy == Ity_I128 || resTy == Ity_I64 || resTy == Ity_I32 + || resTy == Ity_I16 || resTy == Ity_I8); + assign( 'B', mce, findShadowTmpB(mce, st->Ist.LLSC.result), + schemeE(mce, vanillaLoad)); +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 449710020..2b43ef7d7 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -90,6 +90,7 @@ EXTRA_DIST = \ + addressable.stderr.exp addressable.stdout.exp addressable.vgtest \ + atomic_incs.stderr.exp atomic_incs.vgtest \ + atomic_incs.stdout.exp-32bit atomic_incs.stdout.exp-64bit \ ++ atomic_incs.stdout.exp-64bit-and-128bit \ + badaddrvalue.stderr.exp \ + badaddrvalue.stdout.exp badaddrvalue.vgtest \ + exit_on_first_error.stderr.exp \ +diff --git a/memcheck/tests/atomic_incs.c b/memcheck/tests/atomic_incs.c +index f931750f4..1c738c530 100644 +--- a/memcheck/tests/atomic_incs.c ++++ b/memcheck/tests/atomic_incs.c +@@ -22,6 +22,17 @@ + #define NNN 3456987 + + #define IS_8_ALIGNED(_ptr) (0 == (((unsigned long)(_ptr)) & 7)) ++#define IS_16_ALIGNED(_ptr) (0 == (((unsigned long)(_ptr)) & 15)) ++ ++// U128 from libvex_basictypes.h is a 4-x-UInt array, which is a bit ++// inconvenient, hence: ++typedef ++ struct { ++ // assuming little-endianness ++ unsigned long long int lo64; ++ unsigned long long int hi64; ++ } ++ MyU128; + + + __attribute__((noinline)) void atomic_add_8bit ( char* p, int n ) +@@ -712,6 +723,40 @@ __attribute__((noinline)) void atomic_add_64bit ( long long int* p, int n ) + #endif + } + ++__attribute__((noinline)) void atomic_add_128bit ( MyU128* p, ++ unsigned long long int n ) ++{ ++#if defined(VGA_x86) || defined(VGA_ppc32) || defined(VGA_mips32) \ ++ || defined (VGA_nanomips) || defined(VGA_mips64) \ ++ || defined(VGA_amd64) \ ++ || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ ++ || defined(VGA_arm) \ ++ || defined(VGA_s390x) ++ /* do nothing; is not supported */ ++#elif defined(VGA_arm64) ++ unsigned long long int block[3] ++ = { (unsigned long long int)p, (unsigned long long int)n, ++ 0xFFFFFFFFFFFFFFFFULL}; ++ do { ++ __asm__ __volatile__( ++ "mov x5, %0" "\n\t" // &block[0] ++ "ldr x9, [x5, #0]" "\n\t" // p ++ "ldr x10, [x5, #8]" "\n\t" // n ++ "ldxp x7, x8, [x9]" "\n\t" ++ "adds x7, x7, x10" "\n\t" ++ "adc x8, x8, xzr" "\n\t" ++ "stxp w4, x7, x8, [x9]" "\n\t" ++ "str x4, [x5, #16]" "\n\t" ++ : /*out*/ ++ : /*in*/ "r"(&block[0]) ++ : /*trash*/ "memory", "cc", "x5", "x7", "x8", "x9", "x10", "x4" ++ ); ++ } while (block[2] != 0); ++#else ++# error "Unsupported arch" ++#endif ++} ++ + int main ( int argc, char** argv ) + { + int i, status; +@@ -720,8 +765,12 @@ int main ( int argc, char** argv ) + short* p16; + int* p32; + long long int* p64; ++ MyU128* p128; + pid_t child, p2; + ++ assert(sizeof(MyU128) == 16); ++ assert(sysconf(_SC_PAGESIZE) >= 4096); ++ + printf("parent, pre-fork\n"); + + page = mmap( 0, sysconf(_SC_PAGESIZE), +@@ -736,11 +785,13 @@ int main ( int argc, char** argv ) + p16 = (short*)(page+256); + p32 = (int*)(page+512); + p64 = (long long int*)(page+768); ++ p128 = (MyU128*)(page+1024); + + assert( IS_8_ALIGNED(p8) ); + assert( IS_8_ALIGNED(p16) ); + assert( IS_8_ALIGNED(p32) ); + assert( IS_8_ALIGNED(p64) ); ++ assert( IS_16_ALIGNED(p128) ); + + memset(page, 0, 1024); + +@@ -748,6 +799,7 @@ int main ( int argc, char** argv ) + *p16 = 0; + *p32 = 0; + *p64 = 0; ++ p128->lo64 = p128->hi64 = 0; + + child = fork(); + if (child == -1) { +@@ -763,6 +815,7 @@ int main ( int argc, char** argv ) + atomic_add_16bit(p16, 1); + atomic_add_32bit(p32, 1); + atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */ ++ atomic_add_128bit(p128, 0x1000000013374771ULL); // ditto re upper 64 + } + return 1; + /* NOTREACHED */ +@@ -778,6 +831,7 @@ int main ( int argc, char** argv ) + atomic_add_16bit(p16, 1); + atomic_add_32bit(p32, 1); + atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */ ++ atomic_add_128bit(p128, 0x1000000013374771ULL); // ditto re upper 64 + } + + p2 = waitpid(child, &status, 0); +@@ -788,11 +842,17 @@ int main ( int argc, char** argv ) + + printf("FINAL VALUES: 8 bit %d, 16 bit %d, 32 bit %d, 64 bit %lld\n", + (int)(*(signed char*)p8), (int)(*p16), *p32, *p64 ); ++ printf(" 128 bit 0x%016llx:0x%016llx\n", ++ p128->hi64, p128->lo64); + + if (-74 == (int)(*(signed char*)p8) + && 32694 == (int)(*p16) + && 6913974 == *p32 +- && (0LL == *p64 || 682858642110LL == *p64)) { ++ && (0LL == *p64 || 682858642110LL == *p64) ++ && ((0 == p128->hi64 && 0 == p128->lo64) ++ || (0x00000000000697fb == p128->hi64 ++ && 0x6007eb426316d956ULL == p128->lo64)) ++ ) { + printf("PASS\n"); + } else { + printf("FAIL -- see source code for expected values\n"); +diff --git a/memcheck/tests/atomic_incs.stdout.exp-32bit b/memcheck/tests/atomic_incs.stdout.exp-32bit +index c5b8781e5..55e5044b5 100644 +--- a/memcheck/tests/atomic_incs.stdout.exp-32bit ++++ b/memcheck/tests/atomic_incs.stdout.exp-32bit +@@ -3,5 +3,6 @@ child + parent, pre-fork + parent + FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 0 ++ 128 bit 0x0000000000000000:0x0000000000000000 + PASS + parent exits +diff --git a/memcheck/tests/atomic_incs.stdout.exp-64bit b/memcheck/tests/atomic_incs.stdout.exp-64bit +index 82405c520..ca2f4fc97 100644 +--- a/memcheck/tests/atomic_incs.stdout.exp-64bit ++++ b/memcheck/tests/atomic_incs.stdout.exp-64bit +@@ -3,5 +3,6 @@ child + parent, pre-fork + parent + FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 682858642110 ++ 128 bit 0x0000000000000000:0x0000000000000000 + PASS + parent exits +diff --git a/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit b/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit +new file mode 100644 +index 000000000..ef6580917 +--- /dev/null ++++ b/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit +@@ -0,0 +1,8 @@ ++parent, pre-fork ++child ++parent, pre-fork ++parent ++FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 682858642110 ++ 128 bit 0x00000000000697fb:0x6007eb426316d956 ++PASS ++parent exits +diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am +index 00cbfa52c..9efb49b27 100644 +--- a/none/tests/arm64/Makefile.am ++++ b/none/tests/arm64/Makefile.am +@@ -12,7 +12,10 @@ EXTRA_DIST = \ + atomics_v81.stdout.exp atomics_v81.stderr.exp atomics_v81.vgtest \ + simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest \ + fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest \ +- fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp fp_and_simd_v82.vgtest ++ fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp \ ++ fp_and_simd_v82.vgtest \ ++ ldxp_stxp.stdout.exp ldxp_stxp.stderr.exp \ ++ ldxp_stxp_basisimpl.vgtest ldxp_stxp_fallbackimpl.vgtest + + check_PROGRAMS = \ + allexec \ +@@ -20,7 +23,8 @@ check_PROGRAMS = \ + fp_and_simd \ + integer \ + memory \ +- fmadd_sub ++ fmadd_sub \ ++ ldxp_stxp + + if BUILD_ARMV8_CRC_TESTS + check_PROGRAMS += crc32 +diff --git a/none/tests/arm64/ldxp_stxp.c b/none/tests/arm64/ldxp_stxp.c +new file mode 100644 +index 000000000..b5f6ea121 +--- /dev/null ++++ b/none/tests/arm64/ldxp_stxp.c +@@ -0,0 +1,93 @@ ++ ++/* Note, this is only a basic smoke test of LD{A}XP and ST{L}XP. Their ++ atomicity properties are tested by memcheck/tests/atomic_incs.c. */ ++ ++#include ++#include ++#include ++#include ++ ++typedef unsigned int UInt; ++typedef unsigned long long int ULong; ++ ++ ++void initBlock ( ULong* block ) ++{ ++ block[0] = 0x0001020304050607ULL; ++ block[1] = 0x1011121314151617ULL; ++ block[2] = 0x2021222324252627ULL; ++ block[3] = 0x3031323334353637ULL; ++ block[4] = 0x4041424344454647ULL; ++ block[5] = 0x5051525354555657ULL; ++} ++ ++void printBlock ( const char* who, ++ ULong* block, ULong rt1contents, ULong rt2contents, ++ UInt zeroIfSuccess ) ++{ ++ printf("Block %s (%s)\n", who, zeroIfSuccess == 0 ? "success" : "FAILURE" ); ++ for (int i = 0; i < 6; i++) { ++ printf("0x%016llx\n", block[i]); ++ } ++ printf("0x%016llx rt1contents\n", rt1contents); ++ printf("0x%016llx rt2contents\n", rt2contents); ++ printf("\n"); ++} ++ ++int main ( void ) ++{ ++ ULong* block = memalign(16, 6 * sizeof(ULong)); ++ assert(block); ++ ++ ULong rt1in, rt2in, rt1out, rt2out; ++ UInt scRes; ++ ++ // Do ldxp then stxp with x-registers ++ initBlock(block); ++ rt1in = 0x5555666677778888ULL; ++ rt2in = 0xAAAA9999BBBB0000ULL; ++ rt1out = 0x1111222233334444ULL; ++ rt2out = 0xFFFFEEEEDDDDCCCCULL; ++ scRes = 0x55555555; ++ __asm__ __volatile__( ++ "ldxp %1, %2, [%5]" "\n\t" ++ "stxp %w0, %3, %4, [%5]" "\n\t" ++ : /*OUT*/ ++ "=&r"(scRes), // %0 ++ "=&r"(rt1out), // %1 ++ "=&r"(rt2out) // %2 ++ : /*IN*/ ++ "r"(rt1in), // %3 ++ "r"(rt2in), // %4 ++ "r"(&block[2]) // %5 ++ : /*TRASH*/ ++ "memory","cc" ++ ); ++ printBlock("after ldxp/stxp 2x64-bit", block, rt1out, rt2out, scRes); ++ ++ // Do ldxp then stxp with w-registers ++ initBlock(block); ++ rt1in = 0x5555666677778888ULL; ++ rt2in = 0xAAAA9999BBBB0000ULL; ++ rt1out = 0x1111222233334444ULL; ++ rt2out = 0xFFFFEEEEDDDDCCCCULL; ++ scRes = 0x55555555; ++ __asm__ __volatile__( ++ "ldxp %w1, %w2, [%5]" "\n\t" ++ "stxp %w0, %w3, %w4, [%5]" "\n\t" ++ : /*OUT*/ ++ "=&r"(scRes), // %0 ++ "=&r"(rt1out), // %1 ++ "=&r"(rt2out) // %2 ++ : /*IN*/ ++ "r"(rt1in), // %3 ++ "r"(rt2in), // %4 ++ "r"(&block[2]) // %5 ++ : /*TRASH*/ ++ "memory","cc" ++ ); ++ printBlock("after ldxp/stxp 2x32-bit", block, rt1out, rt2out, scRes); ++ ++ free(block); ++ return 0; ++} +diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.stderr.exp b/none/tests/arm64/ldxp_stxp_basisimpl.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp b/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp +new file mode 100644 +index 000000000..f269ecdcc +--- /dev/null ++++ b/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp +@@ -0,0 +1,20 @@ ++Block after ldxp/stxp 2x64-bit (success) ++0x0001020304050607 ++0x1011121314151617 ++0x5555666677778888 ++0xaaaa9999bbbb0000 ++0x4041424344454647 ++0x5051525354555657 ++0x2021222324252627 rt1contents ++0x3031323334353637 rt2contents ++ ++Block after ldxp/stxp 2x32-bit (success) ++0x0001020304050607 ++0x1011121314151617 ++0xbbbb000077778888 ++0x3031323334353637 ++0x4041424344454647 ++0x5051525354555657 ++0x0000000024252627 rt1contents ++0x0000000020212223 rt2contents ++ +diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.vgtest b/none/tests/arm64/ldxp_stxp_basisimpl.vgtest +new file mode 100644 +index 000000000..29133729a +--- /dev/null ++++ b/none/tests/arm64/ldxp_stxp_basisimpl.vgtest +@@ -0,0 +1,2 @@ ++prog: ldxp_stxp ++vgopts: -q +diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.stderr.exp b/none/tests/arm64/ldxp_stxp_fallbackimpl.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp b/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp +new file mode 100644 +index 000000000..f269ecdcc +--- /dev/null ++++ b/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp +@@ -0,0 +1,20 @@ ++Block after ldxp/stxp 2x64-bit (success) ++0x0001020304050607 ++0x1011121314151617 ++0x5555666677778888 ++0xaaaa9999bbbb0000 ++0x4041424344454647 ++0x5051525354555657 ++0x2021222324252627 rt1contents ++0x3031323334353637 rt2contents ++ ++Block after ldxp/stxp 2x32-bit (success) ++0x0001020304050607 ++0x1011121314151617 ++0xbbbb000077778888 ++0x3031323334353637 ++0x4041424344454647 ++0x5051525354555657 ++0x0000000024252627 rt1contents ++0x0000000020212223 rt2contents ++ +diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest b/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest +new file mode 100644 +index 000000000..474282a03 +--- /dev/null ++++ b/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest +@@ -0,0 +1,2 @@ ++prog: ldxp_stxp ++vgopts: -q --sim-hints=fallback-llsc + +commit 0d38ca5dd6b446c70738031132d41f09de0f7a8a +Author: Julian Seward +Date: Fri Nov 12 13:08:45 2021 +0100 + + Bug 444399 - disInstr(arm64): unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP). FOLLOWUP FIX. + + This is an attempt to un-break 'make dist', as broken by the main commit for + this bug, which was 530df882b8f60ecacaf2b9b8a719f7ea1c1d1650. + +diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am +index 9efb49b27..4a06f0996 100644 +--- a/none/tests/arm64/Makefile.am ++++ b/none/tests/arm64/Makefile.am +@@ -14,8 +14,10 @@ EXTRA_DIST = \ + fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest \ + fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp \ + fp_and_simd_v82.vgtest \ +- ldxp_stxp.stdout.exp ldxp_stxp.stderr.exp \ +- ldxp_stxp_basisimpl.vgtest ldxp_stxp_fallbackimpl.vgtest ++ ldxp_stxp_basisimpl.stdout.exp ldxp_stxp_basisimpl.stderr.exp \ ++ ldxp_stxp_basisimpl.vgtest \ ++ ldxp_stxp_fallbackimpl.stdout.exp ldxp_stxp_fallbackimpl.stderr.exp \ ++ ldxp_stxp_fallbackimpl.vgtest + + check_PROGRAMS = \ + allexec \ diff --git a/valgrind.spec b/valgrind.spec index 337279f..01ecfe8 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -111,6 +111,9 @@ Patch12: valgrind-3.18.1-rust-v0-demangle.patch # KDE#445354 arm64 backend: incorrect code emitted for doubleword CAS Patch13: valgrind-3.18.1-arm64-doubleword-cas.patch +# KDE#444399 arm64: unhandled instruction LD{,A}XP and ST{,L}XP +Patch14: valgrind-3.18.1-arm64-ldaxp-stlxp.patch + BuildRequires: make BuildRequires: glibc-devel @@ -256,6 +259,7 @@ Valgrind User Manual for details. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -491,6 +495,7 @@ fi - Add valgrind-3.18.1-gdbserver_tests-hwcap.patch - Add valgrind-3.18.1-rust-v0-demangle.patch - Add valgrind-3.18.1-arm64-doubleword-cas.patch +- Add valgrind-3.18.1-arm64-ldaxp-stlxp.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From 54ca779d10faa375105a545c22011d7f2f86cec2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 Nov 2021 22:49:54 +0100 Subject: [PATCH 087/196] Add valgrind-3.18.1-arm64-atomic-align.patch --- valgrind-3.18.1-arm64-atomic-align.patch | 163 +++++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 168 insertions(+) create mode 100644 valgrind-3.18.1-arm64-atomic-align.patch diff --git a/valgrind-3.18.1-arm64-atomic-align.patch b/valgrind-3.18.1-arm64-atomic-align.patch new file mode 100644 index 0000000..8cce35f --- /dev/null +++ b/valgrind-3.18.1-arm64-atomic-align.patch @@ -0,0 +1,163 @@ +commit 2be719921e700a9ac9b85f470ed87cb8adf8151b +Author: Julian Seward +Date: Sat Nov 13 09:27:01 2021 +0100 + + Bug 445415 - arm64 front end: alignment checks missing for atomic instructions. + + For the arm64 front end, none of the atomic instructions have address + alignment checks included in their IR. They all should. The effect of + missing alignment checks in the IR is that, since this IR will in most cases + be translated back to atomic instructions in the back end, we will get + alignment traps (SIGBUS) on the host side and not on the guest side, which is + (very) incorrect behaviour of the simulation. + + +diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c +index ee018c6a9..16a7e075f 100644 +--- a/VEX/priv/guest_arm64_toIR.c ++++ b/VEX/priv/guest_arm64_toIR.c +@@ -4833,6 +4833,34 @@ static IRTemp gen_zwidening_load ( UInt szB, IRTemp addr ) + } + + ++/* Generate a SIGBUS followed by a restart of the current instruction if ++ `effective_addr` is `align`-aligned. This is required behaviour for atomic ++ instructions. This assumes that guest_RIP_curr_instr is set correctly! ++ ++ This is hardwired to generate SIGBUS because so far the only supported arm64 ++ (arm64-linux) does that. Should we need to later extend it to generate some ++ other signal, use the same scheme as with gen_SIGNAL_if_not_XX_aligned in ++ guest_amd64_toIR.c. */ ++static ++void gen_SIGBUS_if_not_XX_aligned ( IRTemp effective_addr, ULong align ) ++{ ++ if (align == 1) { ++ return; ++ } ++ vassert(align == 16 || align == 8 || align == 4 || align == 2); ++ stmt( ++ IRStmt_Exit( ++ binop(Iop_CmpNE64, ++ binop(Iop_And64,mkexpr(effective_addr),mkU64(align-1)), ++ mkU64(0)), ++ Ijk_SigBUS, ++ IRConst_U64(guest_PC_curr_instr), ++ OFFB_PC ++ ) ++ ); ++} ++ ++ + /* Generate a "standard 7" name, from bitQ and size. But also + allow ".1d" since that's occasionally useful. */ + static +@@ -6670,7 +6698,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + + IRTemp ea = newTemp(Ity_I64); + assign(ea, getIReg64orSP(nn)); +- /* FIXME generate check that ea is szB-aligned */ ++ gen_SIGBUS_if_not_XX_aligned(ea, szB); + + if (isLD && ss == BITS5(1,1,1,1,1)) { + IRTemp res = newTemp(ty); +@@ -6803,7 +6831,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + + IRTemp ea = newTemp(Ity_I64); + assign(ea, getIReg64orSP(nn)); +- /* FIXME generate check that ea is 2*elemSzB-aligned */ ++ gen_SIGBUS_if_not_XX_aligned(ea, fullSzB); + + if (isLD && ss == BITS5(1,1,1,1,1)) { + if (abiinfo->guest__use_fallback_LLSC) { +@@ -7044,7 +7072,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + + IRTemp ea = newTemp(Ity_I64); + assign(ea, getIReg64orSP(nn)); +- /* FIXME generate check that ea is szB-aligned */ ++ gen_SIGBUS_if_not_XX_aligned(ea, szB); + + if (isLD) { + IRTemp res = newTemp(ty); +@@ -7159,6 +7187,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + + IRTemp ea = newTemp(Ity_I64); + assign(ea, getIReg64orSP(nn)); ++ gen_SIGBUS_if_not_XX_aligned(ea, szB); + + // Insert barrier before loading for acquire and acquire-release variants: + // A and AL. +@@ -7266,6 +7295,10 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + IRType ty = integerIRTypeOfSize(szB); + Bool is64 = szB == 8; + ++ IRTemp ea = newTemp(Ity_I64); ++ assign(ea, getIReg64orSP(nn)); ++ gen_SIGBUS_if_not_XX_aligned(ea, szB); ++ + IRExpr *exp = narrowFrom64(ty, getIReg64orZR(ss)); + IRExpr *new = narrowFrom64(ty, getIReg64orZR(tt)); + +@@ -7275,7 +7308,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + // Store the result back if LHS remains unchanged in memory. + IRTemp old = newTemp(ty); + stmt( IRStmt_CAS(mkIRCAS(/*oldHi*/IRTemp_INVALID, old, +- Iend_LE, getIReg64orSP(nn), ++ Iend_LE, mkexpr(ea), + /*expdHi*/NULL, exp, + /*dataHi*/NULL, new)) ); + +@@ -7307,6 +7340,10 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + if ((ss & 0x1) || (tt & 0x1)) { + /* undefined; fall through */ + } else { ++ IRTemp ea = newTemp(Ity_I64); ++ assign(ea, getIReg64orSP(nn)); ++ gen_SIGBUS_if_not_XX_aligned(ea, is64 ? 16 : 8); ++ + IRExpr *expLo = getIRegOrZR(is64, ss); + IRExpr *expHi = getIRegOrZR(is64, ss + 1); + IRExpr *newLo = getIRegOrZR(is64, tt); +@@ -7318,7 +7355,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, + stmt(IRStmt_MBE(Imbe_Fence)); + + stmt( IRStmt_CAS(mkIRCAS(oldHi, oldLo, +- Iend_LE, getIReg64orSP(nn), ++ Iend_LE, mkexpr(ea), + expHi, expLo, + newHi, newLo)) ); + +diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c +index b65e27db4..39c6aaa46 100644 +--- a/VEX/priv/host_arm64_defs.c ++++ b/VEX/priv/host_arm64_defs.c +@@ -4033,6 +4033,7 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, + case Ijk_FlushDCache: trcval = VEX_TRC_JMP_FLUSHDCACHE; break; + case Ijk_NoRedir: trcval = VEX_TRC_JMP_NOREDIR; break; + case Ijk_SigTRAP: trcval = VEX_TRC_JMP_SIGTRAP; break; ++ case Ijk_SigBUS: trcval = VEX_TRC_JMP_SIGBUS; break; + //case Ijk_SigSEGV: trcval = VEX_TRC_JMP_SIGSEGV; break; + case Ijk_Boring: trcval = VEX_TRC_JMP_BORING; break; + /* We don't expect to see the following being assisted. */ +diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c +index 094e7e74b..82cb2d78c 100644 +--- a/VEX/priv/host_arm64_isel.c ++++ b/VEX/priv/host_arm64_isel.c +@@ -4483,6 +4483,7 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) + case Ijk_InvalICache: + case Ijk_FlushDCache: + case Ijk_SigTRAP: ++ case Ijk_SigBUS: + case Ijk_Yield: { + HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst)); + addInstr(env, ARM64Instr_XAssisted(r, amPC, cc, +@@ -4576,8 +4577,8 @@ static void iselNext ( ISelEnv* env, + case Ijk_InvalICache: + case Ijk_FlushDCache: + case Ijk_SigTRAP: +- case Ijk_Yield: +- { ++ case Ijk_SigBUS: ++ case Ijk_Yield: { + HReg r = iselIntExpr_R(env, next); + ARM64AMode* amPC = mk_baseblock_64bit_access_amode(offsIP); + addInstr(env, ARM64Instr_XAssisted(r, amPC, ARM64cc_AL, jk)); diff --git a/valgrind.spec b/valgrind.spec index 01ecfe8..e2a97c2 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -114,6 +114,9 @@ Patch13: valgrind-3.18.1-arm64-doubleword-cas.patch # KDE#444399 arm64: unhandled instruction LD{,A}XP and ST{,L}XP Patch14: valgrind-3.18.1-arm64-ldaxp-stlxp.patch +# KDE#445415 arm64 front end: alignment checks missing for atomic instructions. +Patch15: valgrind-3.18.1-arm64-atomic-align.patch + BuildRequires: make BuildRequires: glibc-devel @@ -260,6 +263,7 @@ Valgrind User Manual for details. %patch12 -p1 %patch13 -p1 %patch14 -p1 +%patch15 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -496,6 +500,7 @@ fi - Add valgrind-3.18.1-rust-v0-demangle.patch - Add valgrind-3.18.1-arm64-doubleword-cas.patch - Add valgrind-3.18.1-arm64-ldaxp-stlxp.patch +- Add valgrind-3.18.1-arm64-atomic-align.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From f51111e602bace2a8399ab772e233dde33376562 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 18 Nov 2021 01:02:50 +0100 Subject: [PATCH 088/196] Add valgrind-3.18.1-amd64-more-spec-rules.patch --- valgrind-3.18.1-amd64-more-spec-rules.patch | 105 ++++++++++++++++++++ valgrind.spec | 6 ++ 2 files changed, 111 insertions(+) create mode 100644 valgrind-3.18.1-amd64-more-spec-rules.patch diff --git a/valgrind-3.18.1-amd64-more-spec-rules.patch b/valgrind-3.18.1-amd64-more-spec-rules.patch new file mode 100644 index 0000000..87794ee --- /dev/null +++ b/valgrind-3.18.1-amd64-more-spec-rules.patch @@ -0,0 +1,105 @@ +commit 595341b150312d2407bd43304449bf39ec3e1fa8 +Author: Julian Seward +Date: Sat Nov 13 19:59:07 2021 +0100 + + amd64 front end: add more spec rules: + + S after SHRQ + Z after SHLQ + NZ after SHLQ + Z after SHLL + S after SHLL + + The lack of at least one of these was observed to cause occasional false + positives in Memcheck. + + Plus add commented-out cases so as to complete the set of 12 rules + {Z,NZ,S,NS} after {SHRQ,SHLQ,SHLL}. The commented-out ones are commented + out because I so far didn't find any use cases for them. + +diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c +index 9d61e7a0f..ba71c1b62 100644 +--- a/VEX/priv/guest_amd64_helpers.c ++++ b/VEX/priv/guest_amd64_helpers.c +@@ -1823,16 +1823,26 @@ IRExpr* guest_amd64_spechelper ( const HChar* function_name, + /*---------------- SHRQ ----------------*/ + + if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondZ)) { +- /* SHRQ, then Z --> test dep1 == 0 */ ++ /* SHRQ, then Z --> test result[63:0] == 0 */ + return unop(Iop_1Uto64, + binop(Iop_CmpEQ64, cc_dep1, mkU64(0))); + } + if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondNZ)) { +- /* SHRQ, then NZ --> test dep1 != 0 */ ++ /* SHRQ, then NZ --> test result[63:0] != 0 */ + return unop(Iop_1Uto64, + binop(Iop_CmpNE64, cc_dep1, mkU64(0))); + } + ++ if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondS)) { ++ /* SHRQ, then S --> (ULong)result[63] (result is in dep1) */ ++ return binop(Iop_Shr64, cc_dep1, mkU8(63)); ++ } ++ // No known test case for this, hence disabled: ++ //if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondNS)) { ++ // /* SHRQ, then NS --> (ULong) ~ result[63] */ ++ // vassert(0); ++ //} ++ + /*---------------- SHRL ----------------*/ + + if (isU64(cc_op, AMD64G_CC_OP_SHRL) && isU64(cond, AMD64CondZ)) { +@@ -1881,6 +1891,52 @@ IRExpr* guest_amd64_spechelper ( const HChar* function_name, + // mkU32(0))); + //} + ++ /*---------------- SHLQ ----------------*/ ++ ++ if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondZ)) { ++ /* SHLQ, then Z --> test dep1 == 0 */ ++ return unop(Iop_1Uto64, ++ binop(Iop_CmpEQ64, cc_dep1, mkU64(0))); ++ } ++ if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondNZ)) { ++ /* SHLQ, then NZ --> test dep1 != 0 */ ++ return unop(Iop_1Uto64, ++ binop(Iop_CmpNE64, cc_dep1, mkU64(0))); ++ } ++ ++ //if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondS)) { ++ // /* SHLQ, then S --> (ULong)result[63] */ ++ // vassert(0); ++ //} ++ //if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondNS)) { ++ // /* SHLQ, then NS --> (ULong) ~ result[63] */ ++ // vassert(0); ++ //} ++ ++ /*---------------- SHLL ----------------*/ ++ ++ if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondZ)) { ++ /* SHLL, then Z --> test result[31:0] == 0 */ ++ return unop(Iop_1Uto64, ++ binop(Iop_CmpEQ32, unop(Iop_64to32, cc_dep1), ++ mkU32(0))); ++ } ++ //if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondNZ)) { ++ // /* SHLL, then NZ --> test dep1 != 0 */ ++ // vassert(0); ++ //} ++ ++ if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondS)) { ++ /* SHLL, then S --> (ULong)result[31] */ ++ return binop(Iop_And64, ++ binop(Iop_Shr64, cc_dep1, mkU8(31)), ++ mkU64(1)); ++ } ++ //if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondNS)) { ++ // /* SHLL, then NS --> (ULong) ~ result[31] */ ++ // vassert(0); ++ //} ++ + /*---------------- COPY ----------------*/ + /* This can happen, as a result of amd64 FP compares: "comisd ... ; + jbe" for example. */ diff --git a/valgrind.spec b/valgrind.spec index e2a97c2..42b55fd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -117,6 +117,10 @@ Patch14: valgrind-3.18.1-arm64-ldaxp-stlxp.patch # KDE#445415 arm64 front end: alignment checks missing for atomic instructions. Patch15: valgrind-3.18.1-arm64-atomic-align.patch +# commit 595341b150312d2407bd43304449bf39ec3e1fa8 +# amd64 front end: add more spec rules +Patch16: valgrind-3.18.1-amd64-more-spec-rules.patch + BuildRequires: make BuildRequires: glibc-devel @@ -264,6 +268,7 @@ Valgrind User Manual for details. %patch13 -p1 %patch14 -p1 %patch15 -p1 +%patch16 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -501,6 +506,7 @@ fi - Add valgrind-3.18.1-arm64-doubleword-cas.patch - Add valgrind-3.18.1-arm64-ldaxp-stlxp.patch - Add valgrind-3.18.1-arm64-atomic-align.patch +- Add valgrind-3.18.1-amd64-more-spec-rules.patch * Mon Nov 1 2021 Mark Wielaard - 3.18.1-2 - Add valgrind-3.18.1-dhat-tests-copy.patch From e2e1c0b1bfa797c098889e3406832293b52f5461 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 18 Nov 2021 01:04:23 +0100 Subject: [PATCH 089/196] 3.18.1-3 --- valgrind.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 42b55fd..27078fb 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -498,7 +498,7 @@ fi %endif %changelog -* Wed Nov 17 2021 Mark Wielaard +* Wed Nov 17 2021 Mark Wielaard - 3.18.1-3 - Add valgrind-3.18.1-ppc-pstq.patch - Add valgrind-3.18.1-ppc-pstq-tests.patch - Add valgrind-3.18.1-gdbserver_tests-hwcap.patch From b9b4facde87efe64993657ed7a034a8c15399a13 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 19 Nov 2021 14:24:49 +0100 Subject: [PATCH 090/196] Update rpminspect.yaml for lto and valgrind-tools-devel Some extra excludes from Jesus Checa Hidalgo --- rpminspect.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rpminspect.yaml b/rpminspect.yaml index 37b57a6..5b6857a 100644 --- a/rpminspect.yaml +++ b/rpminspect.yaml @@ -5,6 +5,12 @@ inspections: xml: off annocheck: + # Currently lto is disabled globally for valgrind, it should be able + # to be enabled through upstream configure --enable-lto in the future. + # Note that all (default fedora) flags need to be repeated here, if + # you override some config flags it will completely overwrite the + # defaults (--ignore-unknown --verbose). + - hardened: --ignore-unknown --verbose --skip-lto # Ignore files built specially without hardening flags ignore: # Valgrind tools themselves (memcheck, cachegrind, massif, etc) are @@ -24,6 +30,10 @@ annocheck: # dependency on openmpi however, so a user can use the wrapper without # explicitly pulling in openmpi unless the program explicitly uses it. - /usr/lib*/openmpi/valgrind/libmpiwrap-*-linux.so + # These static archives (to create custom valgrind tools) are only + # distributed in valgrind-tools-devel and don't have hardening flags + # for the same reason as the standard tools (see above). + - /usr/lib*/valgrind/*-*linux.a runpath: allowed_paths: From 0e37cf264d56f00a64049f4ed0fbe015393e1b5b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 19 Nov 2021 18:37:25 +0100 Subject: [PATCH 091/196] 3.18.1-4 - Add valgrind-3.18.1-condvar.patch --- valgrind-3.18.1-condvar.patch | 284 ++++++++++++++++++++++++++++++++++ valgrind.spec | 10 +- 2 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.18.1-condvar.patch diff --git a/valgrind-3.18.1-condvar.patch b/valgrind-3.18.1-condvar.patch new file mode 100644 index 0000000..e129326 --- /dev/null +++ b/valgrind-3.18.1-condvar.patch @@ -0,0 +1,284 @@ +commit 9abfed23c0d430aafb85de6397d171316c982792 +Author: Paul Floyd +Date: Fri Nov 19 08:34:53 2021 +0100 + + Bug 445504 Using C++ condition_variable results in bogus "mutex is locked simultaneously by two threads" warning(edit) + + Add intercepts for pthread_cond_clockwait to DRD and Helgrind + Also testcase from bugzilla done by Bart, with configure check + +diff --git a/configure.ac b/configure.ac +index e7381f205..cb836dbff 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -1989,6 +1989,27 @@ AC_LANG(C) + + AM_CONDITIONAL(CXX_CAN_INCLUDE_THREAD_HEADER, test x$ac_cxx_can_include_thread_header = xyes) + ++# Check whether compiler can process #include without errors ++ ++AC_MSG_CHECKING([that C++ compiler can include header file]) ++AC_LANG(C++) ++safe_CXXFLAGS=$CXXFLAGS ++CXXFLAGS=-std=c++0x ++ ++AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ++#include ++])], ++[ ++ac_cxx_can_include_condition_variable_header=yes ++AC_MSG_RESULT([yes]) ++], [ ++ac_cxx_can_include_condition_variable_header=no ++AC_MSG_RESULT([no]) ++]) ++CXXFLAGS=$safe_CXXFLAGS ++AC_LANG(C) ++ ++AM_CONDITIONAL(CXX_CAN_INCLUDE_CONDITION_VARIABLE_HEADER, test x$ac_cxx_can_include_condition_variable_header = xyes) + + # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead + # of the user_regs_struct from sys/user.h. They are structurally the same +diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c +index 8b4454364..95127b42c 100644 +--- a/drd/drd_pthread_intercepts.c ++++ b/drd/drd_pthread_intercepts.c +@@ -1175,6 +1175,30 @@ PTH_FUNCS(int, condZureltimedwait, pthread_cond_timedwait_intercept, + (cond, mutex, timeout)); + #endif /* VGO_solaris */ + ++ ++static __always_inline ++int pthread_cond_clockwait_intercept(pthread_cond_t *cond, ++ pthread_mutex_t *mutex, ++ clockid_t clockid, ++ const struct timespec* abstime) ++{ ++ int ret; ++ OrigFn fn; ++ VALGRIND_GET_ORIG_FN(fn); ++ VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_COND_WAIT, ++ cond, mutex, DRD_(mutex_type)(mutex), 0, 0); ++ CALL_FN_W_WWWW(ret, fn, cond, mutex, clockid, abstime); ++ VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_COND_WAIT, ++ cond, mutex, 1, 0, 0); ++ return ret; ++} ++ ++PTH_FUNCS(int, pthreadZucondZuclockwait, pthread_cond_clockwait_intercept, ++ (pthread_cond_t *cond, pthread_mutex_t *mutex, ++ clockid_t clockid, const struct timespec* abstime), ++ (cond, mutex, clockid, abstime)); ++ ++ + // NOTE: be careful to intercept only pthread_cond_signal() and not Darwin's + // pthread_cond_signal_thread_np(). The former accepts one argument; the latter + // two. Intercepting all pthread_cond_signal* functions will cause only one +diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am +index 4cb2f7f84..c804391e8 100755 +--- a/drd/tests/Makefile.am ++++ b/drd/tests/Makefile.am +@@ -105,6 +105,8 @@ EXTRA_DIST = \ + circular_buffer.vgtest \ + concurrent_close.stderr.exp \ + concurrent_close.vgtest \ ++ condvar.stderr.exp \ ++ condvar.vgtest \ + custom_alloc.stderr.exp \ + custom_alloc.vgtest \ + custom_alloc_fiw.stderr.exp \ +@@ -458,6 +460,11 @@ check_PROGRAMS += \ + endif + endif + ++if CXX_CAN_INCLUDE_CONDITION_VARIABLE_HEADER ++check_PROGRAMS += \ ++ condvar ++endif ++ + if HAVE_OPENMP + check_PROGRAMS += omp_matinv omp_prime omp_printf + endif +@@ -502,6 +509,8 @@ LDADD = -lpthread + + + bug322621_SOURCES = bug322621.cpp ++condvar_SOURCES = condvar.cpp ++condvar_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x + concurrent_close_SOURCES = concurrent_close.cpp + if !VGCONF_OS_IS_FREEBSD + dlopen_main_LDADD = -ldl +diff --git a/drd/tests/condvar.cpp b/drd/tests/condvar.cpp +new file mode 100644 +index 000000000..18ecb3f8a +--- /dev/null ++++ b/drd/tests/condvar.cpp +@@ -0,0 +1,55 @@ ++/* See also https://bugs.kde.org/show_bug.cgi?id=445504 */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++using lock_guard = std::lock_guard; ++using unique_lock = std::unique_lock; ++ ++struct state { ++ std::mutex m; ++ std::vector v; ++ std::condition_variable cv; ++ ++ state() { ++ // Call pthread_cond_init() explicitly to let DRD know about 'cv'. ++ pthread_cond_init(cv.native_handle(), NULL); ++ } ++}; ++ ++void other_thread(state *sp) { ++ state &s = *sp; ++ std::cerr << "Other thread: waiting for notify\n"; ++ unique_lock l{s.m}; ++ while (true) { ++ if (s.cv.wait_for(l, std::chrono::seconds(3)) != ++ std::cv_status::timeout) { ++ std::cerr << "Other thread: notified\n"; ++ break; ++ } ++ } ++ return; ++} ++ ++ ++int main() { ++ state s; ++ auto future = std::async(std::launch::async, other_thread, &s); ++ ++ if (future.wait_for(std::chrono::seconds(1)) != std::future_status::timeout) { ++ std::cerr << "Main: other thread returned too early!\n"; ++ return 2; ++ } ++ ++ { ++ std::lock_guard g{s.m}; ++ s.v.push_back(1); ++ s.v.push_back(2); ++ s.cv.notify_all(); ++ } ++ return 0; ++} +diff --git a/drd/tests/condvar.stderr.exp b/drd/tests/condvar.stderr.exp +new file mode 100644 +index 000000000..be1de9f97 +--- /dev/null ++++ b/drd/tests/condvar.stderr.exp +@@ -0,0 +1,5 @@ ++ ++Other thread: waiting for notify ++Other thread: notified ++ ++ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/drd/tests/condvar.vgtest b/drd/tests/condvar.vgtest +new file mode 100644 +index 000000000..2e7d49f5a +--- /dev/null ++++ b/drd/tests/condvar.vgtest +@@ -0,0 +1,3 @@ ++prereq: ./supported_libpthread && [ -e condvar ] ++vgopts: --check-stack-var=yes --read-var-info=yes ++prog: condvar +diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c +index 866efdbaa..49c3ddcd9 100644 +--- a/helgrind/hg_intercepts.c ++++ b/helgrind/hg_intercepts.c +@@ -1409,6 +1409,88 @@ static int pthread_cond_timedwait_WRK(pthread_cond_t* cond, + # error "Unsupported OS" + #endif + ++//----------------------------------------------------------- ++// glibc: pthread_cond_clockwait ++// ++__attribute__((noinline)) ++static int pthread_cond_clockwait_WRK(pthread_cond_t* cond, ++ pthread_mutex_t* mutex, ++ clockid_t clockid, ++ struct timespec* abstime, ++ int timeout_error) ++{ ++ int ret; ++ OrigFn fn; ++ unsigned long mutex_is_valid; ++ Bool abstime_is_valid; ++ VALGRIND_GET_ORIG_FN(fn); ++ ++ if (TRACE_PTH_FNS) { ++ fprintf(stderr, "<< pthread_cond_clockwait %p %p %p", ++ cond, mutex, abstime); ++ fflush(stderr); ++ } ++ ++ /* Tell the tool a cond-wait is about to happen, so it can check ++ for bogus argument values. In return it tells us whether it ++ thinks the mutex is valid or not. */ ++ DO_CREQ_W_WW(mutex_is_valid, ++ _VG_USERREQ__HG_PTHREAD_COND_WAIT_PRE, ++ pthread_cond_t*,cond, pthread_mutex_t*,mutex); ++ assert(mutex_is_valid == 1 || mutex_is_valid == 0); ++ ++ abstime_is_valid = abstime->tv_nsec >= 0 && abstime->tv_nsec < 1000000000; ++ ++ /* Tell the tool we're about to drop the mutex. This reflects the ++ fact that in a cond_wait, we show up holding the mutex, and the ++ call atomically drops the mutex and waits for the cv to be ++ signalled. */ ++ if (mutex_is_valid && abstime_is_valid) { ++ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_PRE, ++ pthread_mutex_t*,mutex); ++ } ++ ++ CALL_FN_W_WWWW(ret, fn, cond,mutex,clockid,abstime); ++ ++ if (mutex_is_valid && !abstime_is_valid && ret != EINVAL) { ++ DO_PthAPIerror("Bug in libpthread: pthread_cond_clockwait " ++ "invalid abstime did not cause" ++ " EINVAL", ret); ++ } ++ ++ if (mutex_is_valid && abstime_is_valid) { ++ /* and now we have the mutex again if (ret == 0 || ret == timeout) */ ++ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST, ++ pthread_mutex_t *, mutex, ++ long, (ret == 0 || ret == timeout_error) ? True : False); ++ } ++ ++ DO_CREQ_v_WWWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST, ++ pthread_cond_t*,cond, pthread_mutex_t*,mutex, ++ long,ret == timeout_error, ++ long, (ret == 0 || ret == timeout_error) && mutex_is_valid ++ ? True : False); ++ ++ if (ret != 0 && ret != timeout_error) { ++ DO_PthAPIerror( "pthread_cond_clockwait", ret ); ++ } ++ ++ if (TRACE_PTH_FNS) { ++ fprintf(stderr, " cotimedwait -> %d >>\n", ret); ++ } ++ ++ return ret; ++} ++ ++#if defined(VGO_linux) ++ PTH_FUNC(int, pthreadZucondZuclockwait, // pthread_cond_clockwait ++ pthread_cond_t* cond, pthread_mutex_t* mutex, ++ clockid_t clockid, ++ struct timespec* abstime) { ++ return pthread_cond_clockwait_WRK(cond, mutex, clockid, abstime, ETIMEDOUT); ++ } ++#endif ++ + + //----------------------------------------------------------- + // glibc: pthread_cond_signal@GLIBC_2.0 diff --git a/valgrind.spec b/valgrind.spec index 27078fb..512301a 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -121,6 +121,10 @@ Patch15: valgrind-3.18.1-arm64-atomic-align.patch # amd64 front end: add more spec rules Patch16: valgrind-3.18.1-amd64-more-spec-rules.patch +# KDE#445504 Using C++ condition_variable results in bogus +# "mutex is locked simultaneously by two threads" warning +Patch17: valgrind-3.18.1-condvar.patch + BuildRequires: make BuildRequires: glibc-devel @@ -269,6 +273,7 @@ Valgrind User Manual for details. %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -498,6 +503,9 @@ fi %endif %changelog +* Fri Nov 19 2021 Mark Wielaard - 3.18.1-4 +- Add valgrind-3.18.1-condvar.patch + * Wed Nov 17 2021 Mark Wielaard - 3.18.1-3 - Add valgrind-3.18.1-ppc-pstq.patch - Add valgrind-3.18.1-ppc-pstq-tests.patch From b8d4e42b21111c791e717532c15dbe07069c39de Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 22 Nov 2021 14:45:14 +0100 Subject: [PATCH 092/196] 3.18.1-5 - Add valgrind-3.18.1-demangle-namespace.patch --- valgrind-3.18.1-demangle-namespace.patch | 35 ++++++++++++++++++++++++ valgrind.spec | 9 +++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.18.1-demangle-namespace.patch diff --git a/valgrind-3.18.1-demangle-namespace.patch b/valgrind-3.18.1-demangle-namespace.patch new file mode 100644 index 0000000..25ddf92 --- /dev/null +++ b/valgrind-3.18.1-demangle-namespace.patch @@ -0,0 +1,35 @@ +commit 542447d4708d4418a08e678dcf467af92b90b7ad +Author: Mark Wielaard +Date: Mon Nov 22 13:07:59 2021 +0100 + + readdwarf3.c (parse_inl_DIE) inlined_subroutine can appear in namespaces + + This was broken by commit 75e3ef0f3 "readdwarf3: Skip units without + addresses when looking for inlined functions". Specifically by this + part: "Also use skip_DIE instead of read_DIE when not parsing + (skipping) children" + + rustc puts concrete function instances in namespaces (which is + allowed in DWARF since there is no strict separation between type + declarations and program scope entries in a DIE tree), the inline + parser didn't expect this and so skipped any DIE under a namespace + entry. This wasn't an issue before because "skipping" a DIE tree was + done by reading it, so it wasn't actually skipped. But now that we + really skip the DIE (sub)tree (which is faster than actually parsing + it) some entries were missed in the rustc case. + + https://bugs.kde.org/show_bug.cgi?id=445668 + +diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c +index 18eecea9f..5489f8d13 100644 +--- a/coregrind/m_debuginfo/readdwarf3.c ++++ b/coregrind/m_debuginfo/readdwarf3.c +@@ -3358,7 +3358,7 @@ static Bool parse_inl_DIE ( + // might maybe contain a DW_TAG_inlined_subroutine: + Bool ret = (unit_has_addrs + || dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram +- || dtag == DW_TAG_inlined_subroutine); ++ || dtag == DW_TAG_inlined_subroutine || dtag == DW_TAG_namespace); + return ret; + + bad_DIE: diff --git a/valgrind.spec b/valgrind.spec index 512301a..a8ccb90 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -125,6 +125,9 @@ Patch16: valgrind-3.18.1-amd64-more-spec-rules.patch # "mutex is locked simultaneously by two threads" warning Patch17: valgrind-3.18.1-condvar.patch +# KDE#445668 Inline stack frame generation is broken for Rust binaries +Patch18: valgrind-3.18.1-demangle-namespace.patch + BuildRequires: make BuildRequires: glibc-devel @@ -274,6 +277,7 @@ Valgrind User Manual for details. %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -503,6 +507,9 @@ fi %endif %changelog +* Mon Nov 22 2021 Mark Wielaard - 3.18.1-5 +- Add valgrind-3.18.1-demangle-namespace.patch + * Fri Nov 19 2021 Mark Wielaard - 3.18.1-4 - Add valgrind-3.18.1-condvar.patch From 6a8a0b1986ecc9bc9fdde3e2ce1ad7803e1806b6 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 10 Dec 2021 18:17:17 +0100 Subject: [PATCH 093/196] 3.18.1-6 - Add valgrind-3.18.1-rseq-enosys.patch --- valgrind-3.18.1-rseq-enosys.patch | 180 ++++++++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.18.1-rseq-enosys.patch diff --git a/valgrind-3.18.1-rseq-enosys.patch b/valgrind-3.18.1-rseq-enosys.patch new file mode 100644 index 0000000..c9de0a8 --- /dev/null +++ b/valgrind-3.18.1-rseq-enosys.patch @@ -0,0 +1,180 @@ +commit 4ea7c91dad1251d320bfffbb50b2323988af45a4 +Author: Mark Wielaard +Date: Fri Dec 10 17:41:59 2021 +0100 + + Implement linux rseq syscall as ENOSYS + + This implements rseq for amd64, arm, arm64, ppc32, ppc64, + s390x and x86 linux as ENOSYS (without warning). + + glibc will start using rseq to accelerate sched_getcpu, if + available. This would cause a warning from valgrind every + time a new thread is started. + + Real rseq (restartable sequences) support is pretty hard, so + for now just explicitly return ENOSYS (just like we do for clone3). + + https://sourceware.org/pipermail/libc-alpha/2021-December/133656.html + +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 5062324a1..18b25f80a 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -862,6 +862,8 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_statx, sys_statx), // 332 + ++ GENX_(__NR_rseq, sys_ni_syscall), // 334 ++ + LINX_(__NR_membarrier, sys_membarrier), // 324 + + LINX_(__NR_copy_file_range, sys_copy_file_range), // 326 +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 556dd844b..d583cef0c 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1024,6 +1024,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_pwritev2, sys_pwritev2), // 393 + + LINXY(__NR_statx, sys_statx), // 397 ++ GENX_(__NR_rseq, sys_ni_syscall), // 398 + + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 + LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index b87107727..2066a38ea 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -823,8 +823,9 @@ static SyscallTableEntry syscall_main_table[] = { + // (__NR_pkey_mprotect, sys_ni_syscall), // 288 + // (__NR_pkey_alloc, sys_ni_syscall), // 289 + // (__NR_pkey_free, sys_ni_syscall), // 290 ++ LINXY(__NR_statx, sys_statx), // 291 + +- LINXY(__NR_statx, sys_statx), // 397 ++ GENX_(__NR_rseq, sys_ni_syscall), // 293 + + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index 6263ab845..637b2504e 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1028,6 +1028,8 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_statx, sys_statx), // 383 + ++ GENX_(__NR_rseq, sys_ni_syscall), // 387 ++ + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 + LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 + +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index a26b41c32..93956d3cc 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1019,6 +1019,8 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_statx, sys_statx), // 383 + ++ GENX_(__NR_rseq, sys_ni_syscall), // 387 ++ + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index 5c9209859..73f9684c4 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -860,6 +860,8 @@ static SyscallTableEntry syscall_table[] = { + + LINXY(__NR_statx, sys_statx), // 379 + ++ GENX_(__NR_rseq, sys_ni_syscall), // 381 ++ + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 + LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 + LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index 1d8f45d33..8662ff501 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1619,6 +1619,8 @@ static SyscallTableEntry syscall_table[] = { + /* Explicitly not supported on i386 yet. */ + GENX_(__NR_arch_prctl, sys_ni_syscall), // 384 + ++ GENX_(__NR_rseq, sys_ni_syscall), // 386 ++ + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 + LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 + +diff --git a/include/vki/vki-scnums-arm-linux.h b/include/vki/vki-scnums-arm-linux.h +index ff560e19d..485db8b26 100644 +--- a/include/vki/vki-scnums-arm-linux.h ++++ b/include/vki/vki-scnums-arm-linux.h +@@ -432,6 +432,7 @@ + #define __NR_pkey_alloc 395 + #define __NR_pkey_free 396 + #define __NR_statx 397 ++#define __NR_rseq 398 + + + +diff --git a/include/vki/vki-scnums-arm64-linux.h b/include/vki/vki-scnums-arm64-linux.h +index 9aa3b2b5f..acdfb39c6 100644 +--- a/include/vki/vki-scnums-arm64-linux.h ++++ b/include/vki/vki-scnums-arm64-linux.h +@@ -323,9 +323,11 @@ + #define __NR_pkey_alloc 289 + #define __NR_pkey_free 290 + #define __NR_statx 291 ++#define __NR_io_pgetevents 291 ++#define __NR_rseq 293 + + #undef __NR_syscalls +-#define __NR_syscalls 292 ++#define __NR_syscalls 294 + + ///* + // * All syscalls below here should go away really, +diff --git a/include/vki/vki-scnums-ppc32-linux.h b/include/vki/vki-scnums-ppc32-linux.h +index 6987ad941..08fa77df0 100644 +--- a/include/vki/vki-scnums-ppc32-linux.h ++++ b/include/vki/vki-scnums-ppc32-linux.h +@@ -415,6 +415,7 @@ + #define __NR_pkey_alloc 384 + #define __NR_pkey_free 385 + #define __NR_pkey_mprotect 386 ++#define __NR_rseq 387 + + #endif /* __VKI_SCNUMS_PPC32_LINUX_H */ + +diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h +index 6827964fd..507117bf3 100644 +--- a/include/vki/vki-scnums-ppc64-linux.h ++++ b/include/vki/vki-scnums-ppc64-linux.h +@@ -407,6 +407,7 @@ + #define __NR_pkey_alloc 384 + #define __NR_pkey_free 385 + #define __NR_pkey_mprotect 386 ++#define __NR_pkey_rseq 387 + + #endif /* __VKI_SCNUMS_PPC64_LINUX_H */ + +diff --git a/include/vki/vki-scnums-s390x-linux.h b/include/vki/vki-scnums-s390x-linux.h +index 6487e20c9..869c04584 100644 +--- a/include/vki/vki-scnums-s390x-linux.h ++++ b/include/vki/vki-scnums-s390x-linux.h +@@ -342,8 +342,11 @@ + #define __NR_s390_guarded_storage 378 + #define __NR_statx 379 + #define __NR_s390_sthyi 380 ++#define __NR_kexec_file_load 381 ++#define __NR_io_pgetevents 382 ++#define __NR_rseq 383 + +-#define NR_syscalls 381 ++#define NR_syscalls 384 + + /* + * There are some system calls that are not present on 64 bit, some diff --git a/valgrind.spec b/valgrind.spec index a8ccb90..c5de217 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -128,6 +128,9 @@ Patch17: valgrind-3.18.1-condvar.patch # KDE#445668 Inline stack frame generation is broken for Rust binaries Patch18: valgrind-3.18.1-demangle-namespace.patch +# KDE#405377 Handle new Linux kernel feature: Restartable Sequences ("rseq") +Patch19: valgrind-3.18.1-rseq-enosys.patch + BuildRequires: make BuildRequires: glibc-devel @@ -278,6 +281,7 @@ Valgrind User Manual for details. %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -507,6 +511,9 @@ fi %endif %changelog +* Fri Dec 10 2021 Mark Wielaard - 3.18.1-6 +- Add valgrind-3.18.1-rseq-enosys.patch + * Mon Nov 22 2021 Mark Wielaard - 3.18.1-5 - Add valgrind-3.18.1-demangle-namespace.patch From ff4eb7f48731c55670d432e98ec117e6376860ea Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 10 Dec 2021 22:50:14 +0100 Subject: [PATCH 094/196] Fix vki-scnums-ppc64-linux.h --- valgrind-3.18.1-rseq-enosys.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/valgrind-3.18.1-rseq-enosys.patch b/valgrind-3.18.1-rseq-enosys.patch index c9de0a8..40664c3 100644 --- a/valgrind-3.18.1-rseq-enosys.patch +++ b/valgrind-3.18.1-rseq-enosys.patch @@ -1,4 +1,4 @@ -commit 4ea7c91dad1251d320bfffbb50b2323988af45a4 +commit 67e7b20eb256baec225b3d7df1f03d731bf5e939 Author: Mark Wielaard Date: Fri Dec 10 17:41:59 2021 +0100 @@ -150,14 +150,14 @@ index 6987ad941..08fa77df0 100644 #endif /* __VKI_SCNUMS_PPC32_LINUX_H */ diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h -index 6827964fd..507117bf3 100644 +index 6827964fd..a76fa6d32 100644 --- a/include/vki/vki-scnums-ppc64-linux.h +++ b/include/vki/vki-scnums-ppc64-linux.h @@ -407,6 +407,7 @@ #define __NR_pkey_alloc 384 #define __NR_pkey_free 385 #define __NR_pkey_mprotect 386 -+#define __NR_pkey_rseq 387 ++#define __NR_rseq 387 #endif /* __VKI_SCNUMS_PPC64_LINUX_H */ From f1bdbbead9c08b755a0d50617486be646f2895c3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 11 Dec 2021 17:44:14 +0100 Subject: [PATCH 095/196] 3.18.1-7 -Add valgrind-3.18.1-s390x-vdso.patch --- valgrind-3.18.1-s390x-vdso.patch | 28 ++++++++++++++++++++++++++++ valgrind.spec | 9 ++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.18.1-s390x-vdso.patch diff --git a/valgrind-3.18.1-s390x-vdso.patch b/valgrind-3.18.1-s390x-vdso.patch new file mode 100644 index 0000000..501fc56 --- /dev/null +++ b/valgrind-3.18.1-s390x-vdso.patch @@ -0,0 +1,28 @@ +commit 99bf5dabf7865aaea7f2192373633e026c6fb16e +Author: Andreas Arnez +Date: Thu Dec 9 15:27:41 2021 +0100 + + Bug 444481 - Don't unmap the vDSO on s390x + + Newer Linux kernels on s390x may use the vDSO as a "trampoline" for + syscall restart. This means that the vDSO is no longer optional, and + unmapping it may lead to a segmentation fault when a system call restart + is performed. + + So far Valgrind has been unmapping the vDSO on s390x. Just don't do this + anymore. + +diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c +index 7d02d5567..95508ad1e 100644 +--- a/coregrind/m_initimg/initimg-linux.c ++++ b/coregrind/m_initimg/initimg-linux.c +@@ -892,7 +892,8 @@ Addr setup_client_stack( void* init_sp, + # if !defined(VGP_ppc32_linux) && !defined(VGP_ppc64be_linux) \ + && !defined(VGP_ppc64le_linux) \ + && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) \ +- && !defined(VGP_nanomips_linux) ++ && !defined(VGP_nanomips_linux) \ ++ && !defined(VGP_s390x_linux) + case AT_SYSINFO_EHDR: { + /* Trash this, because we don't reproduce it */ + const NSegment* ehdrseg = VG_(am_find_nsegment)((Addr)auxv->u.a_ptr); diff --git a/valgrind.spec b/valgrind.spec index c5de217..204c8e2 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -131,6 +131,9 @@ Patch18: valgrind-3.18.1-demangle-namespace.patch # KDE#405377 Handle new Linux kernel feature: Restartable Sequences ("rseq") Patch19: valgrind-3.18.1-rseq-enosys.patch +# KDE#444481 gdb_server test failures on s390x +Patch20: valgrind-3.18.1-s390x-vdso.patch + BuildRequires: make BuildRequires: glibc-devel @@ -282,6 +285,7 @@ Valgrind User Manual for details. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -511,6 +515,9 @@ fi %endif %changelog +* Sat Dec 11 2021 Mark Wielaard - 3.18.1-7 +-Add valgrind-3.18.1-s390x-vdso.patch + * Fri Dec 10 2021 Mark Wielaard - 3.18.1-6 - Add valgrind-3.18.1-rseq-enosys.patch From 2a6d55c5ff9ce6ea04f04628175ef28540f8f688 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 12 Jan 2022 16:00:00 +0100 Subject: [PATCH 096/196] Add valgrind-3.18.1-ppc-hwcaps.patch --- valgrind-3.18.1-ppc-hwcaps.patch | 136 +++++++++++++++++++++++++++++++ valgrind.spec | 7 ++ 2 files changed, 143 insertions(+) create mode 100644 valgrind-3.18.1-ppc-hwcaps.patch diff --git a/valgrind-3.18.1-ppc-hwcaps.patch b/valgrind-3.18.1-ppc-hwcaps.patch new file mode 100644 index 0000000..09b2714 --- /dev/null +++ b/valgrind-3.18.1-ppc-hwcaps.patch @@ -0,0 +1,136 @@ +commit 9d1d6cd6acc612cd94261956a8a94a6403a5d528 +Author: Will Schmidt +Date: Tue Jan 4 16:41:00 2022 -0600 + + Subject: Assorted changes to protect from side affects from the feature checking code. + + This problem was initially reported by Tulio, he assisted me in + identifying the underlying issue here. + + This was discovered on a Power10, and occurs since the ISA 3.1 support + check uses the brh instruction via a hardcoded ".long 0x7f1401b6" asm stanza. + That encoding writes to r20, and since the stanza does not contain a clobber + the compiler did not know to save or restore that register upon entry or exit. + The junk value remaining in r20 subsequently caused a segfault. + + This patch adds clobber masks to the instruction stanzas, as well as + updates the associated comments to clarify which registers are being + used. + As part of this change I've also + - updated the .long for the cnttzw instruction to write to r20, and + zeroed the reserved bits from that instruction so it is properly + decoded by the disassembler. + - updated the .long for the dadd instruction to write to f0. + + I've inspected the current codegen with these changes in place, and + confirm that r20 is now saved and restored on entry and exit from the + machine_get_hwcaps() function. + +diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c +index 0b60ecc0fd44..a860ed67a334 100644 +--- a/coregrind/m_machine.c ++++ b/coregrind/m_machine.c +@@ -1244,11 +1244,11 @@ Bool VG_(machine_get_hwcaps)( void ) + /* Check for ISA 3.0 support. */ + have_isa_3_0 = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_isa_3_0 = False; + } else { +- __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ ++ __asm__ __volatile__(".long 00x7f140434"::"r20"); /* cnttzw r20,r24 */ + } + + // ISA 3.1 not supported on 32-bit systems + + /* determine dcbz/dcbzl sizes while we still have the signal +@@ -1356,79 +1356,79 @@ Bool VG_(machine_get_hwcaps)( void ) + /* Altivec insns */ + have_V = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_V = False; + } else { +- __asm__ __volatile__(".long 0x10000484"); /*vor 0,0,0*/ ++ __asm__ __volatile__(".long 0x10000484"); /* vor v0,v0,v0 */ + } + + /* General-Purpose optional (fsqrt, fsqrts) */ + have_FX = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_FX = False; + } else { +- __asm__ __volatile__(".long 0xFC00002C"); /*fsqrt 0,0*/ ++ __asm__ __volatile__(".long 0xFC00002C"); /* fsqrt f0,f0 */ + } + + /* Graphics optional (stfiwx, fres, frsqrte, fsel) */ + have_GX = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_GX = False; + } else { +- __asm__ __volatile__(".long 0xFC000034"); /*frsqrte 0,0*/ ++ __asm__ __volatile__(".long 0xFC000034"); /* frsqrte f0,f0 */ + } + + /* VSX support implies Power ISA 2.06 */ + have_VX = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_VX = False; + } else { +- __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp XT,XB */ ++ __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp vs0,vs0 */ + } + + /* Check for Decimal Floating Point (DFP) support. */ + have_DFP = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_DFP = False; + } else { +- __asm__ __volatile__(".long 0xee4e8005"); /* dadd FRT,FRA, FRB */ ++ __asm__ __volatile__(".long 0xec0e8005"); /* dadd f0,f14,f16 */ + } + + /* Check for ISA 2.07 support. */ + have_isa_2_07 = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_isa_2_07 = False; + } else { +- __asm__ __volatile__(".long 0x7c000166"); /* mtvsrd XT,RA */ ++ __asm__ __volatile__(".long 0x7c000166"); /* mtvsrd f0,r0 */ + } + + /* Check for ISA 3.0 support. */ + have_isa_3_0 = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_isa_3_0 = False; + } else { +- __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ ++ __asm__ __volatile__(".long 0x7f140434":::"r20"); /* cnttzw r20,r24 */ + } + + /* Check for ISA 3.1 support. */ + have_isa_3_1 = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_isa_3_1 = False; + } else { +- __asm__ __volatile__(".long 0x7f1401b6"); /* brh RA, RS */ ++ __asm__ __volatile__(".long 0x7f1401b6":::"r20"); /* brh r20,r24 */ + } + + /* Check if Host supports scv instruction */ + have_scv_support = True; + if (VG_MINIMAL_SETJMP(env_unsup_insn)) { + have_scv_support = False; + } else { + /* Set r0 to 13 for the system time call. Don't want to make a random + system call. */ +- __asm__ __volatile__(".long 0x7c000278"); /* clear r0 */ +- __asm__ __volatile__(".long 0x6009000d"); /* set r0 to 13 */ +- __asm__ __volatile__(".long 0x44000001"); /* scv */ ++ __asm__ __volatile__(".long 0x7c000278"); /* clear r0 with xor r0,r0,r0 */ ++ __asm__ __volatile__(".long 0x6009000d"); /* set r0 to 13 with ori r9,r0,13 */ ++ __asm__ __volatile__(".long 0x44000001"); /* scv 0 */ + } + + /* determine dcbz/dcbzl sizes while we still have the signal + * handlers registered */ + find_ppc_dcbz_sz(&vai); diff --git a/valgrind.spec b/valgrind.spec index 204c8e2..d08ec17 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -134,6 +134,9 @@ Patch19: valgrind-3.18.1-rseq-enosys.patch # KDE#444481 gdb_server test failures on s390x Patch20: valgrind-3.18.1-s390x-vdso.patch +# KDE#447995 Valgrind segfault on power10 due to hwcap checking code +Patch21: valgrind-3.18.1-ppc-hwcaps.patch + BuildRequires: make BuildRequires: glibc-devel @@ -286,6 +289,7 @@ Valgrind User Manual for details. %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -515,6 +519,9 @@ fi %endif %changelog +* Wed Jan 12 2022 Mark Wielaard +- Add valgrind-3.18.1-ppc-hwcaps.patch + * Sat Dec 11 2021 Mark Wielaard - 3.18.1-7 -Add valgrind-3.18.1-s390x-vdso.patch From c39755526469adcb7c71a2a1e9d044d2b2ed30d2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 12 Jan 2022 16:06:58 +0100 Subject: [PATCH 097/196] Add valgrind-3.18.1-s390x-wflrx.patch --- valgrind-3.18.1-s390x-wflrx.patch | 33 +++++++++++++++++++++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 38 insertions(+) create mode 100644 valgrind-3.18.1-s390x-wflrx.patch diff --git a/valgrind-3.18.1-s390x-wflrx.patch b/valgrind-3.18.1-s390x-wflrx.patch new file mode 100644 index 0000000..6639756 --- /dev/null +++ b/valgrind-3.18.1-s390x-wflrx.patch @@ -0,0 +1,33 @@ +From da3b331c63a6aec0ec3206b1d9ca0df9bced3338 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 3 Jan 2022 18:15:05 +0100 +Subject: [PATCH] s390: Fix VFLRX and WFLRX instructions + +Due to a typo in s390_irgen_VFLR, the VFLR instruction behaves incorrectly +when its m3 field contains 4, meaning extended format. In that case VFLR +is also written as VFLRX (or WFLRX) and supposed to round down from the +extended 128-bit format to the long 64-bit format. However, the typo +checks for m3 == 2 instead, so the value of 4 is unhandled, causing +Valgrind to throw a specification exception. + +This fixes the typo. +--- + VEX/priv/guest_s390_toIR.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index fffc563d4..3ef104fcd 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -19008,7 +19008,7 @@ s390_irgen_VFLL(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + static const HChar * + s390_irgen_VFLR(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) + { +- s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 2)); ++ s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 4)); + + if (m3 == 3) + s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, True, +-- +2.31.1 + diff --git a/valgrind.spec b/valgrind.spec index d08ec17..1a6fba2 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -137,6 +137,9 @@ Patch20: valgrind-3.18.1-s390x-vdso.patch # KDE#447995 Valgrind segfault on power10 due to hwcap checking code Patch21: valgrind-3.18.1-ppc-hwcaps.patch +# KDE#447991 s390x: Valgrind indicates illegal instruction on wflrx +Patch22: valgrind-3.18.1-s390x-wflrx.patch + BuildRequires: make BuildRequires: glibc-devel @@ -290,6 +293,7 @@ Valgrind User Manual for details. %patch19 -p1 %patch20 -p1 %patch21 -p1 +%patch22 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -521,6 +525,7 @@ fi %changelog * Wed Jan 12 2022 Mark Wielaard - Add valgrind-3.18.1-ppc-hwcaps.patch +- Add valgrind-3.18.1-s390x-wflrx.patch * Sat Dec 11 2021 Mark Wielaard - 3.18.1-7 -Add valgrind-3.18.1-s390x-vdso.patch From 79dc655a5c3a46377b3d9b3764c3c8517907724c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 12 Jan 2022 16:10:34 +0100 Subject: [PATCH 098/196] 3.18.1-8 --- valgrind.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 1a6fba2..dcb3331 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -523,7 +523,7 @@ fi %endif %changelog -* Wed Jan 12 2022 Mark Wielaard +* Wed Jan 12 2022 Mark Wielaard - 3.18.1-8 - Add valgrind-3.18.1-ppc-hwcaps.patch - Add valgrind-3.18.1-s390x-wflrx.patch From e6b9f20ee07343c1f64c0097308f5d48b9c1b425 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jan 2022 03:46:45 +0000 Subject: [PATCH 099/196] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index dcb3331..7dded8b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Tool for finding memory management bugs in programs Name: %{?scl_prefix}valgrind Version: 3.18.1 -Release: 8%{?dist} +Release: 9%{?dist} Epoch: 1 License: GPLv2+ URL: http://www.valgrind.org/ @@ -523,6 +523,9 @@ fi %endif %changelog +* Sat Jan 22 2022 Fedora Release Engineering - 1:3.18.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Wed Jan 12 2022 Mark Wielaard - 3.18.1-8 - Add valgrind-3.18.1-ppc-hwcaps.patch - Add valgrind-3.18.1-s390x-wflrx.patch From 5fd4dd6339633899f5144c4eda9688d12d1b79b0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 29 Jan 2022 22:24:27 +0100 Subject: [PATCH 100/196] Update valgrind-3.18.1-ppc-hwcaps.patch Update to version checked in upstream. --- valgrind-3.18.1-ppc-hwcaps.patch | 64 +++++++++++++++----------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/valgrind-3.18.1-ppc-hwcaps.patch b/valgrind-3.18.1-ppc-hwcaps.patch index 09b2714..4171677 100644 --- a/valgrind-3.18.1-ppc-hwcaps.patch +++ b/valgrind-3.18.1-ppc-hwcaps.patch @@ -1,8 +1,10 @@ -commit 9d1d6cd6acc612cd94261956a8a94a6403a5d528 -Author: Will Schmidt -Date: Tue Jan 4 16:41:00 2022 -0600 +commit 3ea8d4327003c3cefe8e82c59be8e92dcfe1a60f +Author: Carl Love +Date: Fri Jan 14 23:04:44 2022 +0000 - Subject: Assorted changes to protect from side affects from the feature checking code. + Assorted changes to protect from side affects from the feature checking code. + + Patch contributed by Will Schmidt This problem was initially reported by Tulio, he assisted me in identifying the underlying issue here. @@ -16,36 +18,32 @@ Date: Tue Jan 4 16:41:00 2022 -0600 This patch adds clobber masks to the instruction stanzas, as well as updates the associated comments to clarify which registers are being used. - As part of this change I've also - - updated the .long for the cnttzw instruction to write to r20, and - zeroed the reserved bits from that instruction so it is properly - decoded by the disassembler. - - updated the .long for the dadd instruction to write to f0. + As part of this change I've also + - updated the .long for the cnttzw instruction to write to r20, and + zeroed the reserved bits from that instruction so it is properly + decoded by the disassembler. + - updated the .long for the dadd instruction to write to f0. - I've inspected the current codegen with these changes in place, and - confirm that r20 is now saved and restored on entry and exit from the - machine_get_hwcaps() function. + I've inspected the current codegen with these changes in place, and + confirm that r20 is now saved and restored on entry and exit from the + machine_get_hwcaps() function. + + bugzilla 447995 Valgrind segfault on power10 due to hwcap checking code diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 0b60ecc0fd44..a860ed67a334 100644 +index 0b60ecc0f..089acee64 100644 --- a/coregrind/m_machine.c +++ b/coregrind/m_machine.c -@@ -1244,11 +1244,11 @@ Bool VG_(machine_get_hwcaps)( void ) - /* Check for ISA 3.0 support. */ - have_isa_3_0 = True; +@@ -1246,7 +1246,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_isa_3_0 = False; } else { - __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ -+ __asm__ __volatile__(".long 00x7f140434"::"r20"); /* cnttzw r20,r24 */ ++ __asm__ __volatile__(".long 00x7f140434":::"r20"); /* cnttzw r20,r24 */ } // ISA 3.1 not supported on 32-bit systems - - /* determine dcbz/dcbzl sizes while we still have the signal -@@ -1356,79 +1356,79 @@ Bool VG_(machine_get_hwcaps)( void ) - /* Altivec insns */ - have_V = True; +@@ -1358,7 +1358,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_V = False; } else { @@ -54,7 +52,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* General-Purpose optional (fsqrt, fsqrts) */ - have_FX = True; +@@ -1366,7 +1366,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_FX = False; } else { @@ -63,7 +61,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Graphics optional (stfiwx, fres, frsqrte, fsel) */ - have_GX = True; +@@ -1374,7 +1374,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_GX = False; } else { @@ -72,7 +70,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* VSX support implies Power ISA 2.06 */ - have_VX = True; +@@ -1382,7 +1382,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_VX = False; } else { @@ -81,7 +79,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Check for Decimal Floating Point (DFP) support. */ - have_DFP = True; +@@ -1390,7 +1390,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_DFP = False; } else { @@ -90,7 +88,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Check for ISA 2.07 support. */ - have_isa_2_07 = True; +@@ -1398,7 +1398,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_isa_2_07 = False; } else { @@ -99,7 +97,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Check for ISA 3.0 support. */ - have_isa_3_0 = True; +@@ -1406,7 +1406,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_isa_3_0 = False; } else { @@ -108,7 +106,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Check for ISA 3.1 support. */ - have_isa_3_1 = True; +@@ -1414,7 +1414,7 @@ Bool VG_(machine_get_hwcaps)( void ) if (VG_MINIMAL_SETJMP(env_unsup_insn)) { have_isa_3_1 = False; } else { @@ -117,9 +115,7 @@ index 0b60ecc0fd44..a860ed67a334 100644 } /* Check if Host supports scv instruction */ - have_scv_support = True; - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_scv_support = False; +@@ -1424,9 +1424,9 @@ Bool VG_(machine_get_hwcaps)( void ) } else { /* Set r0 to 13 for the system time call. Don't want to make a random system call. */ @@ -127,10 +123,8 @@ index 0b60ecc0fd44..a860ed67a334 100644 - __asm__ __volatile__(".long 0x6009000d"); /* set r0 to 13 */ - __asm__ __volatile__(".long 0x44000001"); /* scv */ + __asm__ __volatile__(".long 0x7c000278"); /* clear r0 with xor r0,r0,r0 */ -+ __asm__ __volatile__(".long 0x6009000d"); /* set r0 to 13 with ori r9,r0,13 */ ++ __asm__ __volatile__(".long 0x6000000d"); /* set r0 to 13 with ori r0,r0,13 */ + __asm__ __volatile__(".long 0x44000001"); /* scv 0 */ } /* determine dcbz/dcbzl sizes while we still have the signal - * handlers registered */ - find_ppc_dcbz_sz(&vai); From 0378dd3a632b0d577239a3226360727d9cf5ea70 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 8 Feb 2022 17:46:26 +0100 Subject: [PATCH 101/196] Add valgrind-3.18.1-ppc64-cmov.patch --- valgrind-3.18.1-ppc64-cmov.patch | 33 ++++++++++++++++++++++++++++++++ valgrind.spec | 7 +++++++ 2 files changed, 40 insertions(+) create mode 100644 valgrind-3.18.1-ppc64-cmov.patch diff --git a/valgrind-3.18.1-ppc64-cmov.patch b/valgrind-3.18.1-ppc64-cmov.patch new file mode 100644 index 0000000..9e5ee62 --- /dev/null +++ b/valgrind-3.18.1-ppc64-cmov.patch @@ -0,0 +1,33 @@ +commit fb6a77ed78876083e8ba4c2f92384db5c2e41be8 +Author: Mark Wielaard +Date: Tue Feb 8 16:36:08 2022 +0100 + + ppc64 --track-origins=yes failure because of bad cmov addHRegUse + + For Pin_CMov getRegUsage_PPCInstr called addHRegUse for the dst + register with HRmWrite, but since this is a conditional move the + register could be both read and written (read + write = modify). + This matches the dst of Pin_FpCMov and Pin_AvCMov. + + In a very rare case, and only with --track-origins=yes, this + could cause bad code generation. + + This is slightly amazing, this code is from 2005 and as far as + I know we never seen an issue with --track-origins=yes on power + before. And I have been unable to come up simple reproducer. + + https://bugs.kde.org/show_bug.cgi?id=449672 + +diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c +index 3ae0f6e08..4222b4786 100644 +--- a/VEX/priv/host_ppc_defs.c ++++ b/VEX/priv/host_ppc_defs.c +@@ -2590,7 +2590,7 @@ void getRegUsage_PPCInstr ( HRegUsage* u, const PPCInstr* i, Bool mode64 ) + return; + case Pin_CMov: + addRegUsage_PPCRI(u, i->Pin.CMov.src); +- addHRegUse(u, HRmWrite, i->Pin.CMov.dst); ++ addHRegUse(u, HRmModify, i->Pin.CMov.dst); + return; + case Pin_Load: + addRegUsage_PPCAMode(u, i->Pin.Load.src); diff --git a/valgrind.spec b/valgrind.spec index 7dded8b..340b727 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -140,6 +140,9 @@ Patch21: valgrind-3.18.1-ppc-hwcaps.patch # KDE#447991 s390x: Valgrind indicates illegal instruction on wflrx Patch22: valgrind-3.18.1-s390x-wflrx.patch +# KDE#449672 ppc64 --track-origins=yes failure because of bad cmov addHRegUse +Patch23: valgrind-3.18.1-ppc64-cmov.patch + BuildRequires: make BuildRequires: glibc-devel @@ -294,6 +297,7 @@ Valgrind User Manual for details. %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -523,6 +527,9 @@ fi %endif %changelog +* Tue Feb 8 2022 Mark Wielaard +- Add valgrind-3.18.1-ppc64-cmov.patch + * Sat Jan 22 2022 Fedora Release Engineering - 1:3.18.1-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 24a691aa0af7f97b340544d7feb25d1710de7f5e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 11 Feb 2022 00:30:40 +0100 Subject: [PATCH 102/196] Add valgrind-3.18.1-arm64-atomics-rdm.patch --- valgrind-3.18.1-arm64-atomics-rdm.patch | 16 ++++++++++++++++ valgrind.spec | 5 +++++ 2 files changed, 21 insertions(+) create mode 100644 valgrind-3.18.1-arm64-atomics-rdm.patch diff --git a/valgrind-3.18.1-arm64-atomics-rdm.patch b/valgrind-3.18.1-arm64-atomics-rdm.patch new file mode 100644 index 0000000..47cb91a --- /dev/null +++ b/valgrind-3.18.1-arm64-atomics-rdm.patch @@ -0,0 +1,16 @@ +diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c +index 1253cf588..482047c7a 100644 +--- a/VEX/priv/main_main.c ++++ b/VEX/priv/main_main.c +@@ -2163,11 +2163,6 @@ static void check_hwcaps ( VexArch arch, UInt hwcaps ) + if (have_fp16 != have_vfp16) + invalid_hwcaps(arch, hwcaps, + "Mismatch detected between scalar and vector FP16 features.\n"); +- Bool have_rdm = ((hwcaps & VEX_HWCAPS_ARM64_RDM) != 0); +- Bool have_atomics = ((hwcaps & VEX_HWCAPS_ARM64_ATOMICS) != 0); +- if (have_rdm != have_atomics) +- invalid_hwcaps(arch, hwcaps, +- "Mismatch detected between RDMA and atomics features.\n"); + return; + } + diff --git a/valgrind.spec b/valgrind.spec index 340b727..190a90b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -143,6 +143,9 @@ Patch22: valgrind-3.18.1-s390x-wflrx.patch # KDE#449672 ppc64 --track-origins=yes failure because of bad cmov addHRegUse Patch23: valgrind-3.18.1-ppc64-cmov.patch +# KDE#449494 arm64: Mismatch detected between RDMA and atomics features +Patch24: valgrind-3.18.1-arm64-atomics-rdm.patch + BuildRequires: make BuildRequires: glibc-devel @@ -298,6 +301,7 @@ Valgrind User Manual for details. %patch21 -p1 %patch22 -p1 %patch23 -p1 +%patch24 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -529,6 +533,7 @@ fi %changelog * Tue Feb 8 2022 Mark Wielaard - Add valgrind-3.18.1-ppc64-cmov.patch +- Add valgrind-3.18.1-arm64-atomics-rdm.patch * Sat Jan 22 2022 Fedora Release Engineering - 1:3.18.1-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 97e828edde40bf3347e2d78875e4eb17510ae188 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 11 Feb 2022 11:51:21 +0100 Subject: [PATCH 103/196] Fix typo in valgrind-3.18.1-ppc-hwcaps.patch Powerpc: Fix typo in assembly code specification. The extra 0 results in an assebler error: Error: junk at end of line, first unrecognized character is `x' --- valgrind-3.18.1-ppc-hwcaps.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind-3.18.1-ppc-hwcaps.patch b/valgrind-3.18.1-ppc-hwcaps.patch index 4171677..27f0439 100644 --- a/valgrind-3.18.1-ppc-hwcaps.patch +++ b/valgrind-3.18.1-ppc-hwcaps.patch @@ -39,7 +39,7 @@ index 0b60ecc0f..089acee64 100644 have_isa_3_0 = False; } else { - __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ -+ __asm__ __volatile__(".long 00x7f140434":::"r20"); /* cnttzw r20,r24 */ ++ __asm__ __volatile__(".long 0x7f140434":::"r20"); /* cnttzw r20,r24 */ } // ISA 3.1 not supported on 32-bit systems From e5cdcb45ad8ef3bbb04c67cbe689b2e79ac1af9b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Feb 2022 00:55:25 +0100 Subject: [PATCH 104/196] Add valgrind-3.18.1-rust-demangle-suffix.patch --- valgrind-3.18.1-rust-demangle-suffix.patch | 370 +++++++++++++++++++++ valgrind.spec | 5 + 2 files changed, 375 insertions(+) create mode 100644 valgrind-3.18.1-rust-demangle-suffix.patch diff --git a/valgrind-3.18.1-rust-demangle-suffix.patch b/valgrind-3.18.1-rust-demangle-suffix.patch new file mode 100644 index 0000000..58de409 --- /dev/null +++ b/valgrind-3.18.1-rust-demangle-suffix.patch @@ -0,0 +1,370 @@ +commit e0b62fe05559003b731b4d786f3b71e9a66fb94d +Author: Mark Wielaard +Date: Thu Feb 17 18:35:38 2022 +0100 + + Update libiberty demangler + + Update the libiberty demangler using the auxprogs/update-demangler + script to gcc git commit d3b2ead595467166c849950ecd3710501a5094d9. + + This update includes: + + - libiberty rust-demangle, ignore .suffix + - libiberty: Fix infinite recursion in rust demangler + - Update copyright years + - libiberty: support digits in cpp mangled clone names + - d-demangle: properly skip anonymous symbols + - d-demangle: remove parenthesis where it is not needed + +diff --git a/auxprogs/update-demangler b/auxprogs/update-demangler +index 00c090467..307a0ea36 100755 +--- a/auxprogs/update-demangler ++++ b/auxprogs/update-demangler +@@ -17,8 +17,8 @@ set -e + #--------------------------------------------------------------------- + + # You need to modify these revision numbers for your update. +-old_gcc_revision=01d92cfd79872e4cffc78bf233bb9b767336beb8 # the revision of the previous update +-new_gcc_revision=b3585c0836e729bed56b9afd4292177673a25ca0 # the revision for this update ++old_gcc_revision=b3585c0836e729bed56b9afd4292177673a25ca0 # the revision of the previous update ++new_gcc_revision=d3b2ead595467166c849950ecd3710501a5094d9 # the revision for this update + + # Unless the organization of demangler related files has changed, no + # changes below this line should be necessary. +diff --git a/coregrind/m_demangle/ansidecl.h b/coregrind/m_demangle/ansidecl.h +index 2329c8655..4275c9b9c 100644 +--- a/coregrind/m_demangle/ansidecl.h ++++ b/coregrind/m_demangle/ansidecl.h +@@ -1,5 +1,5 @@ +-/* ANSI and traditional C compatibility macros +- Copyright (C) 1991-2021 Free Software Foundation, Inc. ++/* ANSI and traditional C compatability macros ++ Copyright (C) 1991-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify +diff --git a/coregrind/m_demangle/cp-demangle.c b/coregrind/m_demangle/cp-demangle.c +index 1f4cd3d28..ca82c330d 100644 +--- a/coregrind/m_demangle/cp-demangle.c ++++ b/coregrind/m_demangle/cp-demangle.c +@@ -1,5 +1,5 @@ + /* Demangler for g++ V3 ABI. +- Copyright (C) 2003-2021 Free Software Foundation, Inc. ++ Copyright (C) 2003-2022 Free Software Foundation, Inc. + Written by Ian Lance Taylor . + + This file is part of the libiberty library, which is part of GCC. +@@ -3901,10 +3901,11 @@ d_clone_suffix (struct d_info *di, struct demangle_component *encoding) + const char *pend = suffix; + struct demangle_component *n; + +- if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_')) ++ if (*pend == '.' && (IS_LOWER (pend[1]) || IS_DIGIT (pend[1]) ++ || pend[1] == '_')) + { + pend += 2; +- while (IS_LOWER (*pend) || *pend == '_') ++ while (IS_LOWER (*pend) || IS_DIGIT (*pend) || *pend == '_') + ++pend; + } + while (*pend == '.' && IS_DIGIT (pend[1])) +diff --git a/coregrind/m_demangle/cp-demangle.h b/coregrind/m_demangle/cp-demangle.h +index cb47bdf0d..c6445036d 100644 +--- a/coregrind/m_demangle/cp-demangle.h ++++ b/coregrind/m_demangle/cp-demangle.h +@@ -1,5 +1,5 @@ + /* Internal demangler interface for g++ V3 ABI. +- Copyright (C) 2003-2021 Free Software Foundation, Inc. ++ Copyright (C) 2003-2022 Free Software Foundation, Inc. + Written by Ian Lance Taylor . + + This file is part of the libiberty library, which is part of GCC. +diff --git a/coregrind/m_demangle/cplus-dem.c b/coregrind/m_demangle/cplus-dem.c +index bf4379054..5d6e04d96 100644 +--- a/coregrind/m_demangle/cplus-dem.c ++++ b/coregrind/m_demangle/cplus-dem.c +@@ -1,5 +1,5 @@ + /* Demangler for GNU C++ +- Copyright (C) 1989-2021 Free Software Foundation, Inc. ++ Copyright (C) 1989-2022 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.uucp) + Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling + Modified by Satish Pai (pai@apollo.hp.com) for HP demangling +diff --git a/coregrind/m_demangle/d-demangle.c b/coregrind/m_demangle/d-demangle.c +index 4525c48d4..c2c3e08c8 100644 +--- a/coregrind/m_demangle/d-demangle.c ++++ b/coregrind/m_demangle/d-demangle.c +@@ -1,5 +1,5 @@ + /* Demangler for the D programming language +- Copyright (C) 2014-2021 Free Software Foundation, Inc. ++ Copyright (C) 2014-2022 Free Software Foundation, Inc. + Written by Iain Buclaw (ibuclaw@gdcproject.org) + + This file is part of the libiberty library. +@@ -269,15 +269,15 @@ dlang_hexdigit (const char *mangled, char *ret) + + c = mangled[0]; + if (!ISDIGIT (c)) +- (*ret) = (c - (ISUPPER (c) ? 'A' : 'a') + 10); ++ *ret = c - (ISUPPER (c) ? 'A' : 'a') + 10; + else +- (*ret) = (c - '0'); ++ *ret = c - '0'; + + c = mangled[1]; + if (!ISDIGIT (c)) +- (*ret) = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10); ++ *ret = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10); + else +- (*ret) = (*ret << 4) | (c - '0'); ++ *ret = (*ret << 4) | (c - '0'); + + mangled += 2; + +@@ -354,7 +354,7 @@ dlang_decode_backref (const char *mangled, long *ret) + static const char * + dlang_backref (const char *mangled, const char **ret, struct dlang_info *info) + { +- (*ret) = NULL; ++ *ret = NULL; + + if (mangled == NULL || *mangled != 'Q') + return NULL; +@@ -372,7 +372,7 @@ dlang_backref (const char *mangled, const char **ret, struct dlang_info *info) + return NULL; + + /* Set the position of the back reference. */ +- (*ret) = qpos - refpos; ++ *ret = qpos - refpos; + + return mangled; + } +@@ -1666,13 +1666,19 @@ dlang_parse_qualified (string *decl, const char *mangled, + size_t n = 0; + do + { ++ /* Skip over anonymous symbols. */ ++ if (*mangled == '0') ++ { ++ do ++ mangled++; ++ while (*mangled == '0'); ++ ++ continue; ++ } ++ + if (n++) + string_append (decl, "."); + +- /* Skip over anonymous symbols. */ +- while (*mangled == '0') +- mangled++; +- + mangled = dlang_identifier (decl, mangled, info); + + /* Consume the encoded arguments. However if this is not followed by the +diff --git a/coregrind/m_demangle/demangle.h b/coregrind/m_demangle/demangle.h +index 2acb3bd4e..bbce948c5 100644 +--- a/coregrind/m_demangle/demangle.h ++++ b/coregrind/m_demangle/demangle.h +@@ -1,5 +1,5 @@ + /* Defs for interface to demanglers. +- Copyright (C) 1992-2021 Free Software Foundation, Inc. ++ Copyright (C) 1992-2022 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License +diff --git a/coregrind/m_demangle/dyn-string.c b/coregrind/m_demangle/dyn-string.c +index 66948debf..89ce8e12c 100644 +--- a/coregrind/m_demangle/dyn-string.c ++++ b/coregrind/m_demangle/dyn-string.c +@@ -1,5 +1,5 @@ + /* An abstract string datatype. +- Copyright (C) 1998-2021 Free Software Foundation, Inc. ++ Copyright (C) 1998-2022 Free Software Foundation, Inc. + Contributed by Mark Mitchell (mark@markmitchell.com). + + This file is part of GNU CC. +diff --git a/coregrind/m_demangle/dyn-string.h b/coregrind/m_demangle/dyn-string.h +index 6c5e66012..be2184aa9 100644 +--- a/coregrind/m_demangle/dyn-string.h ++++ b/coregrind/m_demangle/dyn-string.h +@@ -1,5 +1,5 @@ + /* An abstract string datatype. +- Copyright (C) 1998-2021 Free Software Foundation, Inc. ++ Copyright (C) 1998-2022 Free Software Foundation, Inc. + Contributed by Mark Mitchell (mark@markmitchell.com). + + This file is part of GCC. +diff --git a/coregrind/m_demangle/rust-demangle.c b/coregrind/m_demangle/rust-demangle.c +index 0cafa3df9..0a9331ac2 100644 +--- a/coregrind/m_demangle/rust-demangle.c ++++ b/coregrind/m_demangle/rust-demangle.c +@@ -1,5 +1,5 @@ + /* Demangler for the Rust programming language +- Copyright (C) 2016-2021 Free Software Foundation, Inc. ++ Copyright (C) 2016-2022 Free Software Foundation, Inc. + Written by David Tolnay (dtolnay@gmail.com). + Rewritten by Eduard-Mihai Burtescu (eddyb@lyken.rs) for v0 support. + +@@ -101,6 +101,12 @@ struct rust_demangler + /* Rust mangling version, with legacy mangling being -1. */ + int version; + ++ /* Recursion depth. */ ++ unsigned int recursion; ++ /* Maximum number of times demangle_path may be called recursively. */ ++#define RUST_MAX_RECURSION_COUNT 1024 ++#define RUST_NO_RECURSION_LIMIT ((unsigned int) -1) ++ + uint64_t bound_lifetime_depth; + }; + +@@ -698,6 +704,15 @@ demangle_path (struct rust_demangler *rdm, int in_value) + if (rdm->errored) + return; + ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ { ++ ++ rdm->recursion; ++ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) ++ /* FIXME: There ought to be a way to report ++ that the recursion limit has been reached. */ ++ goto fail_return; ++ } ++ + switch (tag = next (rdm)) + { + case 'C': +@@ -715,10 +730,7 @@ demangle_path (struct rust_demangler *rdm, int in_value) + case 'N': + ns = next (rdm); + if (!ISLOWER (ns) && !ISUPPER (ns)) +- { +- rdm->errored = 1; +- return; +- } ++ goto fail_return; + + demangle_path (rdm, in_value); + +@@ -803,9 +815,15 @@ demangle_path (struct rust_demangler *rdm, int in_value) + } + break; + default: +- rdm->errored = 1; +- return; ++ goto fail_return; + } ++ goto pass_return; ++ ++ fail_return: ++ rdm->errored = 1; ++ pass_return: ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ -- rdm->recursion; + } + + static void +@@ -897,6 +915,19 @@ demangle_type (struct rust_demangler *rdm) + return; + } + ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ { ++ ++ rdm->recursion; ++ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) ++ /* FIXME: There ought to be a way to report ++ that the recursion limit has been reached. */ ++ { ++ rdm->errored = 1; ++ -- rdm->recursion; ++ return; ++ } ++ } ++ + switch (tag) + { + case 'R': +@@ -1057,6 +1088,9 @@ demangle_type (struct rust_demangler *rdm) + rdm->next--; + demangle_path (rdm, 0); + } ++ ++ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) ++ -- rdm->recursion; + } + + /* A trait in a trait object may have some "existential projections" +@@ -1347,6 +1381,7 @@ rust_demangle_callback (const char *mangled, int options, + rdm.skipping_printing = 0; + rdm.verbose = (options & DMGL_VERBOSE) != 0; + rdm.version = 0; ++ rdm.recursion = (options & DMGL_NO_RECURSE_LIMIT) ? RUST_NO_RECURSION_LIMIT : 0; + rdm.bound_lifetime_depth = 0; + + /* Rust symbols always start with _R (v0) or _ZN (legacy). */ +@@ -1367,13 +1402,19 @@ rust_demangle_callback (const char *mangled, int options, + /* Rust symbols (v0) use only [_0-9a-zA-Z] characters. */ + for (p = rdm.sym; *p; p++) + { ++ /* Rust v0 symbols can have '.' suffixes, ignore those. */ ++ if (rdm.version == 0 && *p == '.') ++ break; ++ + rdm.sym_len++; + + if (*p == '_' || ISALNUM (*p)) + continue; + +- /* Legacy Rust symbols can also contain [.:$] characters. */ +- if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':')) ++ /* Legacy Rust symbols can also contain [.:$] characters. ++ Or @ in the .suffix (which will be skipped, see below). */ ++ if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':' ++ || *p == '@')) + continue; + + return 0; +@@ -1382,7 +1423,16 @@ rust_demangle_callback (const char *mangled, int options, + /* Legacy Rust symbols need to be handled separately. */ + if (rdm.version == -1) + { +- /* Legacy Rust symbols always end with E. */ ++ /* Legacy Rust symbols always end with E. But can be followed by a ++ .suffix (which we want to ignore). */ ++ int dot_suffix = 1; ++ while (rdm.sym_len > 0 && ++ !(dot_suffix && rdm.sym[rdm.sym_len - 1] == 'E')) ++ { ++ dot_suffix = rdm.sym[rdm.sym_len - 1] == '.'; ++ rdm.sym_len--; ++ } ++ + if (!(rdm.sym_len > 0 && rdm.sym[rdm.sym_len - 1] == 'E')) + return 0; + rdm.sym_len--; +diff --git a/coregrind/m_demangle/safe-ctype.c b/coregrind/m_demangle/safe-ctype.c +index 14da11918..97bc43667 100644 +--- a/coregrind/m_demangle/safe-ctype.c ++++ b/coregrind/m_demangle/safe-ctype.c +@@ -1,6 +1,6 @@ + /* replacement macros. + +- Copyright (C) 2000-2021 Free Software Foundation, Inc. ++ Copyright (C) 2000-2022 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + + This file is part of the libiberty library. +diff --git a/coregrind/m_demangle/safe-ctype.h b/coregrind/m_demangle/safe-ctype.h +index a7389c32e..86157ed4b 100644 +--- a/coregrind/m_demangle/safe-ctype.h ++++ b/coregrind/m_demangle/safe-ctype.h +@@ -1,6 +1,6 @@ + /* replacement macros. + +- Copyright (C) 2000-2021 Free Software Foundation, Inc. ++ Copyright (C) 2000-2022 Free Software Foundation, Inc. + Contributed by Zack Weinberg . + + This file is part of the libiberty library. diff --git a/valgrind.spec b/valgrind.spec index 190a90b..6bbee75 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -146,6 +146,9 @@ Patch23: valgrind-3.18.1-ppc64-cmov.patch # KDE#449494 arm64: Mismatch detected between RDMA and atomics features Patch24: valgrind-3.18.1-arm64-atomics-rdm.patch +# KDE#445916 Demangle Rust v0 symbols with .llvm suffix +Patch25: valgrind-3.18.1-rust-demangle-suffix.patch + BuildRequires: make BuildRequires: glibc-devel @@ -302,6 +305,7 @@ Valgrind User Manual for details. %patch22 -p1 %patch23 -p1 %patch24 -p1 +%patch25 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -534,6 +538,7 @@ fi * Tue Feb 8 2022 Mark Wielaard - Add valgrind-3.18.1-ppc64-cmov.patch - Add valgrind-3.18.1-arm64-atomics-rdm.patch +- Add valgrind-3.18.1-rust-demangle-suffix.patch * Sat Jan 22 2022 Fedora Release Engineering - 1:3.18.1-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 6cf39d342b63920b83b85bba0d88631dab25f075 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 12 Apr 2022 13:20:57 +0200 Subject: [PATCH 105/196] 3.19.0-1 - Upgrade to valgrind 3.19.0. Drop old patches. --- .gitignore | 1 + sources | 2 +- valgrind-3.18.1-amd64-more-spec-rules.patch | 105 -- valgrind-3.18.1-arm64-atomic-align.patch | 163 -- valgrind-3.18.1-arm64-atomics-rdm.patch | 16 - valgrind-3.18.1-arm64-doubleword-cas.patch | 121 -- valgrind-3.18.1-arm64-ldaxp-stlxp.patch | 1440 -------------- valgrind-3.18.1-condvar.patch | 284 --- valgrind-3.18.1-demangle-namespace.patch | 35 - valgrind-3.18.1-dhat-tests-copy.patch | 20 - valgrind-3.18.1-gdbserver_tests-hwcap.patch | 25 - valgrind-3.18.1-ppc-hwcaps.patch | 130 -- valgrind-3.18.1-ppc-pstq-tests.patch | 1876 ------------------- valgrind-3.18.1-ppc-pstq.patch | 47 - valgrind-3.18.1-ppc64-cmov.patch | 33 - valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch | 60 - valgrind-3.18.1-rseq-enosys.patch | 180 -- valgrind-3.18.1-rust-demangle-suffix.patch | 370 ---- valgrind-3.18.1-rust-v0-demangle.patch | 137 -- valgrind-3.18.1-s390x-EXRL.patch | 549 ------ valgrind-3.18.1-s390x-vdso.patch | 28 - valgrind-3.18.1-s390x-wflrx.patch | 33 - valgrind.spec | 105 +- 23 files changed, 14 insertions(+), 5746 deletions(-) delete mode 100644 valgrind-3.18.1-amd64-more-spec-rules.patch delete mode 100644 valgrind-3.18.1-arm64-atomic-align.patch delete mode 100644 valgrind-3.18.1-arm64-atomics-rdm.patch delete mode 100644 valgrind-3.18.1-arm64-doubleword-cas.patch delete mode 100644 valgrind-3.18.1-arm64-ldaxp-stlxp.patch delete mode 100644 valgrind-3.18.1-condvar.patch delete mode 100644 valgrind-3.18.1-demangle-namespace.patch delete mode 100644 valgrind-3.18.1-dhat-tests-copy.patch delete mode 100644 valgrind-3.18.1-gdbserver_tests-hwcap.patch delete mode 100644 valgrind-3.18.1-ppc-hwcaps.patch delete mode 100644 valgrind-3.18.1-ppc-pstq-tests.patch delete mode 100644 valgrind-3.18.1-ppc-pstq.patch delete mode 100644 valgrind-3.18.1-ppc64-cmov.patch delete mode 100644 valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch delete mode 100644 valgrind-3.18.1-rseq-enosys.patch delete mode 100644 valgrind-3.18.1-rust-demangle-suffix.patch delete mode 100644 valgrind-3.18.1-rust-v0-demangle.patch delete mode 100644 valgrind-3.18.1-s390x-EXRL.patch delete mode 100644 valgrind-3.18.1-s390x-vdso.patch delete mode 100644 valgrind-3.18.1-s390x-wflrx.patch diff --git a/.gitignore b/.gitignore index 7b0f078..cbec41e 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ /valgrind-3.17.0.tar.bz2 /valgrind-3.18.0.RC1.tar.bz2 /valgrind-3.18.1.tar.bz2 +/valgrind-3.19.0.tar.bz2 diff --git a/sources b/sources index 29f3ab8..e93a40c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.18.1.tar.bz2) = a03b5cd7eafab4a1cea07f46464c1546ae1cb3d106649626b1e55658badf90e58d1f3854a38a33d5dffd8237f5555ae7e1f27a4b40e06254f87825c7fc61b59b +SHA512 (valgrind-3.19.0.tar.bz2) = f720a89dc4c4989cc5714bff9efe97529f71990bcfad7a92b889ce099c4326d6da07fa4d5fbab2e9125e20f352354f6178471e49e419b613a3c82c2a1c667ab2 diff --git a/valgrind-3.18.1-amd64-more-spec-rules.patch b/valgrind-3.18.1-amd64-more-spec-rules.patch deleted file mode 100644 index 87794ee..0000000 --- a/valgrind-3.18.1-amd64-more-spec-rules.patch +++ /dev/null @@ -1,105 +0,0 @@ -commit 595341b150312d2407bd43304449bf39ec3e1fa8 -Author: Julian Seward -Date: Sat Nov 13 19:59:07 2021 +0100 - - amd64 front end: add more spec rules: - - S after SHRQ - Z after SHLQ - NZ after SHLQ - Z after SHLL - S after SHLL - - The lack of at least one of these was observed to cause occasional false - positives in Memcheck. - - Plus add commented-out cases so as to complete the set of 12 rules - {Z,NZ,S,NS} after {SHRQ,SHLQ,SHLL}. The commented-out ones are commented - out because I so far didn't find any use cases for them. - -diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c -index 9d61e7a0f..ba71c1b62 100644 ---- a/VEX/priv/guest_amd64_helpers.c -+++ b/VEX/priv/guest_amd64_helpers.c -@@ -1823,16 +1823,26 @@ IRExpr* guest_amd64_spechelper ( const HChar* function_name, - /*---------------- SHRQ ----------------*/ - - if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondZ)) { -- /* SHRQ, then Z --> test dep1 == 0 */ -+ /* SHRQ, then Z --> test result[63:0] == 0 */ - return unop(Iop_1Uto64, - binop(Iop_CmpEQ64, cc_dep1, mkU64(0))); - } - if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondNZ)) { -- /* SHRQ, then NZ --> test dep1 != 0 */ -+ /* SHRQ, then NZ --> test result[63:0] != 0 */ - return unop(Iop_1Uto64, - binop(Iop_CmpNE64, cc_dep1, mkU64(0))); - } - -+ if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondS)) { -+ /* SHRQ, then S --> (ULong)result[63] (result is in dep1) */ -+ return binop(Iop_Shr64, cc_dep1, mkU8(63)); -+ } -+ // No known test case for this, hence disabled: -+ //if (isU64(cc_op, AMD64G_CC_OP_SHRQ) && isU64(cond, AMD64CondNS)) { -+ // /* SHRQ, then NS --> (ULong) ~ result[63] */ -+ // vassert(0); -+ //} -+ - /*---------------- SHRL ----------------*/ - - if (isU64(cc_op, AMD64G_CC_OP_SHRL) && isU64(cond, AMD64CondZ)) { -@@ -1881,6 +1891,52 @@ IRExpr* guest_amd64_spechelper ( const HChar* function_name, - // mkU32(0))); - //} - -+ /*---------------- SHLQ ----------------*/ -+ -+ if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondZ)) { -+ /* SHLQ, then Z --> test dep1 == 0 */ -+ return unop(Iop_1Uto64, -+ binop(Iop_CmpEQ64, cc_dep1, mkU64(0))); -+ } -+ if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondNZ)) { -+ /* SHLQ, then NZ --> test dep1 != 0 */ -+ return unop(Iop_1Uto64, -+ binop(Iop_CmpNE64, cc_dep1, mkU64(0))); -+ } -+ -+ //if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondS)) { -+ // /* SHLQ, then S --> (ULong)result[63] */ -+ // vassert(0); -+ //} -+ //if (isU64(cc_op, AMD64G_CC_OP_SHLQ) && isU64(cond, AMD64CondNS)) { -+ // /* SHLQ, then NS --> (ULong) ~ result[63] */ -+ // vassert(0); -+ //} -+ -+ /*---------------- SHLL ----------------*/ -+ -+ if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondZ)) { -+ /* SHLL, then Z --> test result[31:0] == 0 */ -+ return unop(Iop_1Uto64, -+ binop(Iop_CmpEQ32, unop(Iop_64to32, cc_dep1), -+ mkU32(0))); -+ } -+ //if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondNZ)) { -+ // /* SHLL, then NZ --> test dep1 != 0 */ -+ // vassert(0); -+ //} -+ -+ if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondS)) { -+ /* SHLL, then S --> (ULong)result[31] */ -+ return binop(Iop_And64, -+ binop(Iop_Shr64, cc_dep1, mkU8(31)), -+ mkU64(1)); -+ } -+ //if (isU64(cc_op, AMD64G_CC_OP_SHLL) && isU64(cond, AMD64CondNS)) { -+ // /* SHLL, then NS --> (ULong) ~ result[31] */ -+ // vassert(0); -+ //} -+ - /*---------------- COPY ----------------*/ - /* This can happen, as a result of amd64 FP compares: "comisd ... ; - jbe" for example. */ diff --git a/valgrind-3.18.1-arm64-atomic-align.patch b/valgrind-3.18.1-arm64-atomic-align.patch deleted file mode 100644 index 8cce35f..0000000 --- a/valgrind-3.18.1-arm64-atomic-align.patch +++ /dev/null @@ -1,163 +0,0 @@ -commit 2be719921e700a9ac9b85f470ed87cb8adf8151b -Author: Julian Seward -Date: Sat Nov 13 09:27:01 2021 +0100 - - Bug 445415 - arm64 front end: alignment checks missing for atomic instructions. - - For the arm64 front end, none of the atomic instructions have address - alignment checks included in their IR. They all should. The effect of - missing alignment checks in the IR is that, since this IR will in most cases - be translated back to atomic instructions in the back end, we will get - alignment traps (SIGBUS) on the host side and not on the guest side, which is - (very) incorrect behaviour of the simulation. - - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index ee018c6a9..16a7e075f 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -4833,6 +4833,34 @@ static IRTemp gen_zwidening_load ( UInt szB, IRTemp addr ) - } - - -+/* Generate a SIGBUS followed by a restart of the current instruction if -+ `effective_addr` is `align`-aligned. This is required behaviour for atomic -+ instructions. This assumes that guest_RIP_curr_instr is set correctly! -+ -+ This is hardwired to generate SIGBUS because so far the only supported arm64 -+ (arm64-linux) does that. Should we need to later extend it to generate some -+ other signal, use the same scheme as with gen_SIGNAL_if_not_XX_aligned in -+ guest_amd64_toIR.c. */ -+static -+void gen_SIGBUS_if_not_XX_aligned ( IRTemp effective_addr, ULong align ) -+{ -+ if (align == 1) { -+ return; -+ } -+ vassert(align == 16 || align == 8 || align == 4 || align == 2); -+ stmt( -+ IRStmt_Exit( -+ binop(Iop_CmpNE64, -+ binop(Iop_And64,mkexpr(effective_addr),mkU64(align-1)), -+ mkU64(0)), -+ Ijk_SigBUS, -+ IRConst_U64(guest_PC_curr_instr), -+ OFFB_PC -+ ) -+ ); -+} -+ -+ - /* Generate a "standard 7" name, from bitQ and size. But also - allow ".1d" since that's occasionally useful. */ - static -@@ -6670,7 +6698,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - - IRTemp ea = newTemp(Ity_I64); - assign(ea, getIReg64orSP(nn)); -- /* FIXME generate check that ea is szB-aligned */ -+ gen_SIGBUS_if_not_XX_aligned(ea, szB); - - if (isLD && ss == BITS5(1,1,1,1,1)) { - IRTemp res = newTemp(ty); -@@ -6803,7 +6831,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - - IRTemp ea = newTemp(Ity_I64); - assign(ea, getIReg64orSP(nn)); -- /* FIXME generate check that ea is 2*elemSzB-aligned */ -+ gen_SIGBUS_if_not_XX_aligned(ea, fullSzB); - - if (isLD && ss == BITS5(1,1,1,1,1)) { - if (abiinfo->guest__use_fallback_LLSC) { -@@ -7044,7 +7072,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - - IRTemp ea = newTemp(Ity_I64); - assign(ea, getIReg64orSP(nn)); -- /* FIXME generate check that ea is szB-aligned */ -+ gen_SIGBUS_if_not_XX_aligned(ea, szB); - - if (isLD) { - IRTemp res = newTemp(ty); -@@ -7159,6 +7187,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - - IRTemp ea = newTemp(Ity_I64); - assign(ea, getIReg64orSP(nn)); -+ gen_SIGBUS_if_not_XX_aligned(ea, szB); - - // Insert barrier before loading for acquire and acquire-release variants: - // A and AL. -@@ -7266,6 +7295,10 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - IRType ty = integerIRTypeOfSize(szB); - Bool is64 = szB == 8; - -+ IRTemp ea = newTemp(Ity_I64); -+ assign(ea, getIReg64orSP(nn)); -+ gen_SIGBUS_if_not_XX_aligned(ea, szB); -+ - IRExpr *exp = narrowFrom64(ty, getIReg64orZR(ss)); - IRExpr *new = narrowFrom64(ty, getIReg64orZR(tt)); - -@@ -7275,7 +7308,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - // Store the result back if LHS remains unchanged in memory. - IRTemp old = newTemp(ty); - stmt( IRStmt_CAS(mkIRCAS(/*oldHi*/IRTemp_INVALID, old, -- Iend_LE, getIReg64orSP(nn), -+ Iend_LE, mkexpr(ea), - /*expdHi*/NULL, exp, - /*dataHi*/NULL, new)) ); - -@@ -7307,6 +7340,10 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - if ((ss & 0x1) || (tt & 0x1)) { - /* undefined; fall through */ - } else { -+ IRTemp ea = newTemp(Ity_I64); -+ assign(ea, getIReg64orSP(nn)); -+ gen_SIGBUS_if_not_XX_aligned(ea, is64 ? 16 : 8); -+ - IRExpr *expLo = getIRegOrZR(is64, ss); - IRExpr *expHi = getIRegOrZR(is64, ss + 1); - IRExpr *newLo = getIRegOrZR(is64, tt); -@@ -7318,7 +7355,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - stmt(IRStmt_MBE(Imbe_Fence)); - - stmt( IRStmt_CAS(mkIRCAS(oldHi, oldLo, -- Iend_LE, getIReg64orSP(nn), -+ Iend_LE, mkexpr(ea), - expHi, expLo, - newHi, newLo)) ); - -diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c -index b65e27db4..39c6aaa46 100644 ---- a/VEX/priv/host_arm64_defs.c -+++ b/VEX/priv/host_arm64_defs.c -@@ -4033,6 +4033,7 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, - case Ijk_FlushDCache: trcval = VEX_TRC_JMP_FLUSHDCACHE; break; - case Ijk_NoRedir: trcval = VEX_TRC_JMP_NOREDIR; break; - case Ijk_SigTRAP: trcval = VEX_TRC_JMP_SIGTRAP; break; -+ case Ijk_SigBUS: trcval = VEX_TRC_JMP_SIGBUS; break; - //case Ijk_SigSEGV: trcval = VEX_TRC_JMP_SIGSEGV; break; - case Ijk_Boring: trcval = VEX_TRC_JMP_BORING; break; - /* We don't expect to see the following being assisted. */ -diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c -index 094e7e74b..82cb2d78c 100644 ---- a/VEX/priv/host_arm64_isel.c -+++ b/VEX/priv/host_arm64_isel.c -@@ -4483,6 +4483,7 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) - case Ijk_InvalICache: - case Ijk_FlushDCache: - case Ijk_SigTRAP: -+ case Ijk_SigBUS: - case Ijk_Yield: { - HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst)); - addInstr(env, ARM64Instr_XAssisted(r, amPC, cc, -@@ -4576,8 +4577,8 @@ static void iselNext ( ISelEnv* env, - case Ijk_InvalICache: - case Ijk_FlushDCache: - case Ijk_SigTRAP: -- case Ijk_Yield: -- { -+ case Ijk_SigBUS: -+ case Ijk_Yield: { - HReg r = iselIntExpr_R(env, next); - ARM64AMode* amPC = mk_baseblock_64bit_access_amode(offsIP); - addInstr(env, ARM64Instr_XAssisted(r, amPC, ARM64cc_AL, jk)); diff --git a/valgrind-3.18.1-arm64-atomics-rdm.patch b/valgrind-3.18.1-arm64-atomics-rdm.patch deleted file mode 100644 index 47cb91a..0000000 --- a/valgrind-3.18.1-arm64-atomics-rdm.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c -index 1253cf588..482047c7a 100644 ---- a/VEX/priv/main_main.c -+++ b/VEX/priv/main_main.c -@@ -2163,11 +2163,6 @@ static void check_hwcaps ( VexArch arch, UInt hwcaps ) - if (have_fp16 != have_vfp16) - invalid_hwcaps(arch, hwcaps, - "Mismatch detected between scalar and vector FP16 features.\n"); -- Bool have_rdm = ((hwcaps & VEX_HWCAPS_ARM64_RDM) != 0); -- Bool have_atomics = ((hwcaps & VEX_HWCAPS_ARM64_ATOMICS) != 0); -- if (have_rdm != have_atomics) -- invalid_hwcaps(arch, hwcaps, -- "Mismatch detected between RDMA and atomics features.\n"); - return; - } - diff --git a/valgrind-3.18.1-arm64-doubleword-cas.patch b/valgrind-3.18.1-arm64-doubleword-cas.patch deleted file mode 100644 index 7cf0bf5..0000000 --- a/valgrind-3.18.1-arm64-doubleword-cas.patch +++ /dev/null @@ -1,121 +0,0 @@ -commit 7dbe2fed72886874f2eaf57dc07929542ae55b58 -Author: Julian Seward -Date: Fri Nov 12 10:40:48 2021 +0100 - - Bug 445354 - arm64 backend: incorrect code emitted for doubleword CAS. - - The sequence of instructions emitted by the arm64 backend for doubleword - compare-and-swap is incorrect. This could lead to incorrect simulation of the - AArch8.1 atomic instructions (CASP, at least). It also causes failures in the - upcoming fix for v8.0 support for LD{,A}XP/ST{,L}XP in bug 444399, at least - when running with the fallback LL/SC implementation - (`--sim-hints=fallback-llsc`, or as autoselected at startup). In the worst - case it can cause segfaulting in the generated code, because it could jump - backwards unexpectedly far. - - The problem is the sequence emitted for ARM64in_CASP: - - * the jump offsets are incorrect, both for `bne out` (x 2) and `cbnz w1, loop`. - - * using w1 to hold the success indication of the stxp instruction trashes the - previous value in x1. But the value in x1 is an output of ARM64in_CASP, - hence one of the two output registers is corrupted. That confuses any code - downstream that want to inspect those values to find out whether or not the - transaction succeeded. - - The fixes are to - - * fix the branch offsets - - * use a different register to hold the stxp success indication. w3 is a - convenient check. - -diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c -index 5dccc0495..5657bcab9 100644 ---- a/VEX/priv/host_arm64_defs.c -+++ b/VEX/priv/host_arm64_defs.c -@@ -2271,6 +2271,7 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) - addHRegUse(u, HRmWrite, hregARM64_X1()); - addHRegUse(u, HRmWrite, hregARM64_X9()); - addHRegUse(u, HRmWrite, hregARM64_X8()); -+ addHRegUse(u, HRmWrite, hregARM64_X3()); - break; - case ARM64in_MFence: - return; -@@ -4254,16 +4255,16 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, - - -- always: - cmp x0, x8 // EB08001F -- bne out // 540000E1 (b.ne #28 ) -+ bne out // 540000A1 - cmp x1, x9 // EB09003F -- bne out // 540000A1 (b.ne #20 ) -+ bne out // 54000061 - - -- one of: -- stxp w1, x6, x7, [x2] // C8211C46 -- stxp w1, w6, w7, [x2] // 88211C46 -+ stxp w3, x6, x7, [x2] // C8231C46 -+ stxp w3, w6, w7, [x2] // 88231C46 - - -- always: -- cbnz w1, loop // 35FFFE81 (cbnz w1, #-48 ) -+ cbnz w3, loop // 35FFFF03 - out: - */ - switch (i->ARM64in.CASP.szB) { -@@ -4277,15 +4278,15 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, - default: vassert(0); - } - *p++ = 0xEB08001F; -- *p++ = 0x540000E1; -- *p++ = 0xEB09003F; - *p++ = 0x540000A1; -+ *p++ = 0xEB09003F; -+ *p++ = 0x54000061; - switch (i->ARM64in.CASP.szB) { -- case 8: *p++ = 0xC8211C46; break; -- case 4: *p++ = 0x88211C46; break; -+ case 8: *p++ = 0xC8231C46; break; -+ case 4: *p++ = 0x88231C46; break; - default: vassert(0); - } -- *p++ = 0x35FFFE81; -+ *p++ = 0x35FFFF03; - goto done; - } - case ARM64in_MFence: { -diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h -index f0737f2c6..01fb5708e 100644 ---- a/VEX/priv/host_arm64_defs.h -+++ b/VEX/priv/host_arm64_defs.h -@@ -720,6 +720,7 @@ typedef - Int szB; /* 1, 2, 4 or 8 */ - } StrEX; - /* x1 = CAS(x3(addr), x5(expected) -> x7(new)), -+ and trashes x8 - where x1[8*szB-1 : 0] == x5[8*szB-1 : 0] indicates success, - x1[8*szB-1 : 0] != x5[8*szB-1 : 0] indicates failure. - Uses x8 as scratch (but that's not allocatable). -@@ -738,7 +739,7 @@ typedef - -- if branch taken, failure; x1[[8*szB-1 : 0] holds old value - -- attempt to store - stxr w8, x7, [x3] -- -- if store successful, x1==0, so the eor is "x1 := x5" -+ -- if store successful, x8==0 - -- if store failed, branch back and try again. - cbne w8, loop - after: -@@ -746,6 +747,12 @@ typedef - struct { - Int szB; /* 1, 2, 4 or 8 */ - } CAS; -+ /* Doubleworld CAS, 2 x 32 bit or 2 x 64 bit -+ x0(oldLSW),x1(oldMSW) -+ = DCAS(x2(addr), x4(expectedLSW),x5(expectedMSW) -+ -> x6(newLSW),x7(newMSW)) -+ and trashes x8, x9 and x3 -+ */ - struct { - Int szB; /* 4 or 8 */ - } CASP; diff --git a/valgrind-3.18.1-arm64-ldaxp-stlxp.patch b/valgrind-3.18.1-arm64-ldaxp-stlxp.patch deleted file mode 100644 index d118cc6..0000000 --- a/valgrind-3.18.1-arm64-ldaxp-stlxp.patch +++ /dev/null @@ -1,1440 +0,0 @@ -commit 530df882b8f60ecacaf2b9b8a719f7ea1c1d1650 -Author: Julian Seward -Date: Fri Nov 12 12:13:45 2021 +0100 - - Bug 444399 - disInstr(arm64): unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP). - - This is unfortunately a big and complex patch, to implement LD{,A}XP and - ST{,L}XP. These were omitted from the original AArch64 v8.0 implementation - for unknown reasons. - - (Background) the patch is made significantly more complex because for AArch64 - we actually have two implementations of the underlying - Load-Linked/Store-Conditional (LL/SC) machinery: a "primary" implementation, - which translates LL/SC more or less directly into IR and re-emits them at the - back end, and a "fallback" implementation that implements LL/SC "manually", by - taking advantage of the fact that V serialises thread execution, so we can - "implement" LL/SC by simulating a reservation using fields LLSC_* in the guest - state, and invalidating the reservation at every thread switch. - - (Background) the fallback scheme is needed because the primary scheme is in - violation of the ARMv8 semantics in that it can (easily) introduce extra - memory references between the LL and SC, hence on some hardware causing the - reservation to always fail and so the simulated program to wind up looping - forever. - - For these instructions, big picture: - - * for the primary implementation, we take advantage of the fact that - IRStmt_LLSC allows I128 bit transactions to be represented. Hence we bundle - up the two 64-bit data elements into an I128 (or vice versa) and present a - single I128-typed IRStmt_LLSC in the IR. In the backend, those are - re-emitted as LDXP/STXP respectively. For LL/SC on 32-bit register pairs, - that bundling produces a single 64-bit item, and so the existing LL/SC - backend machinery handles it. The effect is that a doubleword 32-bit LL/SC - in the front end translates into a single 64-bit LL/SC in the back end. - Overall, though, the implementation is straightforward. - - * for the fallback implementation, it is necessary to extend the guest state - field `guest_LLSC_DATA` to represent a 128-bit transaction, by splitting it - into _DATA_LO64 and DATA_HI64. Then, the implementation is an exact - analogue of the fallback implementation for single-word LL/SC. It takes - advantage of the fact that the backend already supports 128-bit CAS, as - fixed in bug 445354. As with the primary implementation, doubleword 32-bit - LL/SC is bundled into a single 64-bit transaction. - - Detailed changes: - - * new arm64 guest state fields LLSC_DATA_LO64/LLSC_DATA_LO64 to replace - guest_LLSC_DATA - - * (ridealong fix) arm64 front end: a fix to a minor and harmless decoding bug - for the single-word LDX/STX case. - - * arm64 front end: IR generation for LD{,A}XP/ST{,L}XP: tedious and - longwinded, but per comments above, an exact(ish) analogue of the singleword - case - - * arm64 backend: new insns ARM64Instr_LdrEXP / ARM64Instr_StrEXP to wrap up 2 - x 64 exclusive loads/stores. Per comments above, there's no need to handle - the 2 x 32 case. - - * arm64 isel: translate I128-typed IRStmt_LLSC into the above two insns - - * arm64 isel: some auxiliary bits and pieces needed to handle I128 values; - this is standard doubleword isel stuff - - * arm64 isel: (ridealong fix): Ist_CAS: check for endianness of the CAS! - - * arm64 isel: (ridealong) a couple of formatting fixes - - * IR infrastructure: add support for I128 constants, done the same as V128 - constants - - * memcheck: handle shadow loads and stores for I128 values - - * testcase: memcheck/tests/atomic_incs.c: on arm64, also test 128-bit atomic - addition, to check we really have atomicity right - - * testcase: new test none/tests/arm64/ldxp_stxp.c, tests operation but not - atomicity. (Smoke test). - -diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c -index 12a1c5978..ee018c6a9 100644 ---- a/VEX/priv/guest_arm64_toIR.c -+++ b/VEX/priv/guest_arm64_toIR.c -@@ -1184,9 +1184,10 @@ static IRExpr* narrowFrom64 ( IRType dstTy, IRExpr* e ) - #define OFFB_CMSTART offsetof(VexGuestARM64State,guest_CMSTART) - #define OFFB_CMLEN offsetof(VexGuestARM64State,guest_CMLEN) - --#define OFFB_LLSC_SIZE offsetof(VexGuestARM64State,guest_LLSC_SIZE) --#define OFFB_LLSC_ADDR offsetof(VexGuestARM64State,guest_LLSC_ADDR) --#define OFFB_LLSC_DATA offsetof(VexGuestARM64State,guest_LLSC_DATA) -+#define OFFB_LLSC_SIZE offsetof(VexGuestARM64State,guest_LLSC_SIZE) -+#define OFFB_LLSC_ADDR offsetof(VexGuestARM64State,guest_LLSC_ADDR) -+#define OFFB_LLSC_DATA_LO64 offsetof(VexGuestARM64State,guest_LLSC_DATA_LO64) -+#define OFFB_LLSC_DATA_HI64 offsetof(VexGuestARM64State,guest_LLSC_DATA_HI64) - - - /* ---------------- Integer registers ---------------- */ -@@ -6652,7 +6653,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - (coregrind/m_scheduler/scheduler.c, run_thread_for_a_while() - has to do this bit) - */ -- if (INSN(29,23) == BITS7(0,0,1,0,0,0,0) -+ if (INSN(29,24) == BITS6(0,0,1,0,0,0) - && (INSN(23,21) & BITS3(1,0,1)) == BITS3(0,0,0) - && INSN(14,10) == BITS5(1,1,1,1,1)) { - UInt szBlg2 = INSN(31,30); -@@ -6678,7 +6679,8 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - // if it faults. - IRTemp loaded_data64 = newTemp(Ity_I64); - assign(loaded_data64, widenUto64(ty, loadLE(ty, mkexpr(ea)))); -- stmt( IRStmt_Put( OFFB_LLSC_DATA, mkexpr(loaded_data64) )); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, mkexpr(loaded_data64) )); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, mkU64(0) )); - stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); - stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(szB) )); - putIReg64orZR(tt, mkexpr(loaded_data64)); -@@ -6729,7 +6731,7 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - )); - // Fail if the data doesn't match the LL data - IRTemp llsc_data64 = newTemp(Ity_I64); -- assign(llsc_data64, IRExpr_Get(OFFB_LLSC_DATA, Ity_I64)); -+ assign(llsc_data64, IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); - stmt( IRStmt_Exit( - binop(Iop_CmpNE64, widenUto64(ty, loadLE(ty, mkexpr(ea))), - mkexpr(llsc_data64)), -@@ -6771,6 +6773,257 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, - /* else fall through */ - } - -+ /* -------------------- LD{,A}XP -------------------- */ -+ /* -------------------- ST{,L}XP -------------------- */ -+ /* 31 30 29 23 20 15 14 9 4 -+ 1 sz 001000 011 11111 0 t2 n t1 LDXP Rt1, Rt2, [Xn|SP] -+ 1 sz 001000 011 11111 1 t2 n t1 LDAXP Rt1, Rt2, [Xn|SP] -+ 1 sz 001000 001 s 0 t2 n t1 STXP Ws, Rt1, Rt2, [Xn|SP] -+ 1 sz 001000 001 s 1 t2 n t1 STLXP Ws, Rt1, Rt2, [Xn|SP] -+ */ -+ /* See just above, "LD{,A}X{R,RH,RB} / ST{,L}X{R,RH,RB}", for detailed -+ comments about this implementation. Note the 'sz' field here is only 1 -+ bit; above, it is 2 bits, and has a different encoding. -+ */ -+ if (INSN(31,31) == 1 -+ && INSN(29,24) == BITS6(0,0,1,0,0,0) -+ && (INSN(23,21) & BITS3(1,0,1)) == BITS3(0,0,1)) { -+ Bool elemIs64 = INSN(30,30) == 1; -+ Bool isLD = INSN(22,22) == 1; -+ Bool isAcqOrRel = INSN(15,15) == 1; -+ UInt ss = INSN(20,16); -+ UInt tt2 = INSN(14,10); -+ UInt nn = INSN(9,5); -+ UInt tt1 = INSN(4,0); -+ -+ UInt elemSzB = elemIs64 ? 8 : 4; -+ UInt fullSzB = 2 * elemSzB; -+ IRType elemTy = integerIRTypeOfSize(elemSzB); -+ IRType fullTy = integerIRTypeOfSize(fullSzB); -+ -+ IRTemp ea = newTemp(Ity_I64); -+ assign(ea, getIReg64orSP(nn)); -+ /* FIXME generate check that ea is 2*elemSzB-aligned */ -+ -+ if (isLD && ss == BITS5(1,1,1,1,1)) { -+ if (abiinfo->guest__use_fallback_LLSC) { -+ // Fallback implementation of LL. -+ // Do the load first so we don't update any guest state if it -+ // faults. Assumes little-endian guest. -+ if (fullTy == Ity_I64) { -+ vassert(elemSzB == 4); -+ IRTemp loaded_data64 = newTemp(Ity_I64); -+ assign(loaded_data64, loadLE(fullTy, mkexpr(ea))); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, mkexpr(loaded_data64) )); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, mkU64(0) )); -+ stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); -+ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(8) )); -+ putIReg64orZR(tt1, unop(Iop_32Uto64, -+ unop(Iop_64to32, -+ mkexpr(loaded_data64)))); -+ putIReg64orZR(tt2, unop(Iop_32Uto64, -+ unop(Iop_64HIto32, -+ mkexpr(loaded_data64)))); -+ } else { -+ vassert(elemSzB == 8 && fullTy == Ity_I128); -+ IRTemp loaded_data128 = newTemp(Ity_I128); -+ // Hack: do the load as V128 rather than I128 so as to avoid -+ // having to implement I128 loads in the arm64 back end. -+ assign(loaded_data128, unop(Iop_ReinterpV128asI128, -+ loadLE(Ity_V128, mkexpr(ea)))); -+ IRTemp loaded_data_lo64 = newTemp(Ity_I64); -+ IRTemp loaded_data_hi64 = newTemp(Ity_I64); -+ assign(loaded_data_lo64, unop(Iop_128to64, -+ mkexpr(loaded_data128))); -+ assign(loaded_data_hi64, unop(Iop_128HIto64, -+ mkexpr(loaded_data128))); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_LO64, -+ mkexpr(loaded_data_lo64) )); -+ stmt( IRStmt_Put( OFFB_LLSC_DATA_HI64, -+ mkexpr(loaded_data_hi64) )); -+ stmt( IRStmt_Put( OFFB_LLSC_ADDR, mkexpr(ea) )); -+ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(16) )); -+ putIReg64orZR(tt1, mkexpr(loaded_data_lo64)); -+ putIReg64orZR(tt2, mkexpr(loaded_data_hi64)); -+ } -+ } else { -+ // Non-fallback implementation of LL. -+ IRTemp res = newTemp(fullTy); // I64 or I128 -+ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), NULL/*LL*/)); -+ // Assuming a little-endian guest here. Rt1 goes at the lower -+ // address, so it must live in the least significant half of `res`. -+ IROp opGetLO = fullTy == Ity_I128 ? Iop_128to64 : Iop_64to32; -+ IROp opGetHI = fullTy == Ity_I128 ? Iop_128HIto64 : Iop_64HIto32; -+ putIReg64orZR(tt1, widenUto64(elemTy, unop(opGetLO, mkexpr(res)))); -+ putIReg64orZR(tt2, widenUto64(elemTy, unop(opGetHI, mkexpr(res)))); -+ } -+ if (isAcqOrRel) { -+ stmt(IRStmt_MBE(Imbe_Fence)); -+ } -+ DIP("ld%sxp %s, %s, [%s] %s\n", -+ isAcqOrRel ? (isLD ? "a" : "l") : "", -+ nameIRegOrZR(elemSzB == 8, tt1), -+ nameIRegOrZR(elemSzB == 8, tt2), -+ nameIReg64orSP(nn), -+ abiinfo->guest__use_fallback_LLSC -+ ? "(fallback implementation)" : ""); -+ return True; -+ } -+ if (!isLD) { -+ if (isAcqOrRel) { -+ stmt(IRStmt_MBE(Imbe_Fence)); -+ } -+ if (abiinfo->guest__use_fallback_LLSC) { -+ // Fallback implementation of SC. -+ // This is really ugly, since we don't have any way to do -+ // proper if-then-else. First, set up as if the SC failed, -+ // and jump forwards if it really has failed. -+ -+ // Continuation address -+ IRConst* nia = IRConst_U64(guest_PC_curr_instr + 4); -+ -+ // "the SC failed". Any non-zero value means failure. -+ putIReg64orZR(ss, mkU64(1)); -+ -+ IRTemp tmp_LLsize = newTemp(Ity_I64); -+ assign(tmp_LLsize, IRExpr_Get(OFFB_LLSC_SIZE, Ity_I64)); -+ stmt( IRStmt_Put( OFFB_LLSC_SIZE, mkU64(0) // "no transaction" -+ )); -+ // Fail if no or wrong-size transaction -+ vassert((fullSzB == 8 && fullTy == Ity_I64) -+ || (fullSzB == 16 && fullTy == Ity_I128)); -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, mkexpr(tmp_LLsize), mkU64(fullSzB)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ // Fail if the address doesn't match the LL address -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, mkexpr(ea), -+ IRExpr_Get(OFFB_LLSC_ADDR, Ity_I64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ // The data to be stored. -+ IRTemp store_data = newTemp(fullTy); -+ if (fullTy == Ity_I64) { -+ assign(store_data, -+ binop(Iop_32HLto64, -+ narrowFrom64(Ity_I32, getIReg64orZR(tt2)), -+ narrowFrom64(Ity_I32, getIReg64orZR(tt1)))); -+ } else { -+ assign(store_data, -+ binop(Iop_64HLto128, -+ getIReg64orZR(tt2), getIReg64orZR(tt1))); -+ } -+ -+ if (fullTy == Ity_I64) { -+ // 64 bit (2x32 bit) path -+ // Fail if the data in memory doesn't match the data stashed by -+ // the LL. -+ IRTemp llsc_data_lo64 = newTemp(Ity_I64); -+ assign(llsc_data_lo64, -+ IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, loadLE(Ity_I64, mkexpr(ea)), -+ mkexpr(llsc_data_lo64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ // Try to CAS the new value in. -+ IRTemp old = newTemp(Ity_I64); -+ IRTemp expd = newTemp(Ity_I64); -+ assign(expd, mkexpr(llsc_data_lo64)); -+ stmt( IRStmt_CAS(mkIRCAS(/*oldHi*/IRTemp_INVALID, old, -+ Iend_LE, mkexpr(ea), -+ /*expdHi*/NULL, mkexpr(expd), -+ /*dataHi*/NULL, mkexpr(store_data) -+ ))); -+ // Fail if the CAS failed (viz, old != expd) -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, mkexpr(old), mkexpr(expd)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ } else { -+ // 128 bit (2x64 bit) path -+ // Fail if the data in memory doesn't match the data stashed by -+ // the LL. -+ IRTemp llsc_data_lo64 = newTemp(Ity_I64); -+ assign(llsc_data_lo64, -+ IRExpr_Get(OFFB_LLSC_DATA_LO64, Ity_I64)); -+ IRTemp llsc_data_hi64 = newTemp(Ity_I64); -+ assign(llsc_data_hi64, -+ IRExpr_Get(OFFB_LLSC_DATA_HI64, Ity_I64)); -+ IRTemp data_at_ea = newTemp(Ity_I128); -+ assign(data_at_ea, -+ unop(Iop_ReinterpV128asI128, -+ loadLE(Ity_V128, mkexpr(ea)))); -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, -+ unop(Iop_128to64, mkexpr(data_at_ea)), -+ mkexpr(llsc_data_lo64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, -+ unop(Iop_128HIto64, mkexpr(data_at_ea)), -+ mkexpr(llsc_data_hi64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ // Try to CAS the new value in. -+ IRTemp old_lo64 = newTemp(Ity_I64); -+ IRTemp old_hi64 = newTemp(Ity_I64); -+ IRTemp expd_lo64 = newTemp(Ity_I64); -+ IRTemp expd_hi64 = newTemp(Ity_I64); -+ IRTemp store_data_lo64 = newTemp(Ity_I64); -+ IRTemp store_data_hi64 = newTemp(Ity_I64); -+ assign(expd_lo64, mkexpr(llsc_data_lo64)); -+ assign(expd_hi64, mkexpr(llsc_data_hi64)); -+ assign(store_data_lo64, unop(Iop_128to64, mkexpr(store_data))); -+ assign(store_data_hi64, unop(Iop_128HIto64, mkexpr(store_data))); -+ stmt( IRStmt_CAS(mkIRCAS(old_hi64, old_lo64, -+ Iend_LE, mkexpr(ea), -+ mkexpr(expd_hi64), mkexpr(expd_lo64), -+ mkexpr(store_data_hi64), -+ mkexpr(store_data_lo64) -+ ))); -+ // Fail if the CAS failed (viz, old != expd) -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, mkexpr(old_lo64), mkexpr(expd_lo64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ stmt( IRStmt_Exit( -+ binop(Iop_CmpNE64, mkexpr(old_hi64), mkexpr(expd_hi64)), -+ Ijk_Boring, nia, OFFB_PC -+ )); -+ } -+ // Otherwise we succeeded (!) -+ putIReg64orZR(ss, mkU64(0)); -+ } else { -+ // Non-fallback implementation of SC. -+ IRTemp res = newTemp(Ity_I1); -+ IRExpr* dataLO = narrowFrom64(elemTy, getIReg64orZR(tt1)); -+ IRExpr* dataHI = narrowFrom64(elemTy, getIReg64orZR(tt2)); -+ IROp opMerge = fullTy == Ity_I128 ? Iop_64HLto128 : Iop_32HLto64; -+ IRExpr* data = binop(opMerge, dataHI, dataLO); -+ // Assuming a little-endian guest here. Rt1 goes at the lower -+ // address, so it must live in the least significant half of `data`. -+ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), data)); -+ /* IR semantics: res is 1 if store succeeds, 0 if it fails. -+ Need to set rS to 1 on failure, 0 on success. */ -+ putIReg64orZR(ss, binop(Iop_Xor64, unop(Iop_1Uto64, mkexpr(res)), -+ mkU64(1))); -+ } -+ DIP("st%sxp %s, %s, %s, [%s] %s\n", -+ isAcqOrRel ? (isLD ? "a" : "l") : "", -+ nameIRegOrZR(False, ss), -+ nameIRegOrZR(elemSzB == 8, tt1), -+ nameIRegOrZR(elemSzB == 8, tt2), -+ nameIReg64orSP(nn), -+ abiinfo->guest__use_fallback_LLSC -+ ? "(fallback implementation)" : ""); -+ return True; -+ } -+ /* else fall through */ -+ } -+ - /* ------------------ LDA{R,RH,RB} ------------------ */ - /* ------------------ STL{R,RH,RB} ------------------ */ - /* 31 29 23 20 14 9 4 -diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c -index 5657bcab9..b65e27db4 100644 ---- a/VEX/priv/host_arm64_defs.c -+++ b/VEX/priv/host_arm64_defs.c -@@ -1059,6 +1059,16 @@ ARM64Instr* ARM64Instr_StrEX ( Int szB ) { - vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1); - return i; - } -+ARM64Instr* ARM64Instr_LdrEXP ( void ) { -+ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); -+ i->tag = ARM64in_LdrEXP; -+ return i; -+} -+ARM64Instr* ARM64Instr_StrEXP ( void ) { -+ ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); -+ i->tag = ARM64in_StrEXP; -+ return i; -+} - ARM64Instr* ARM64Instr_CAS ( Int szB ) { - ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); - i->tag = ARM64in_CAS; -@@ -1699,12 +1709,19 @@ void ppARM64Instr ( const ARM64Instr* i ) { - sz, i->ARM64in.StrEX.szB == 8 ? 'x' : 'w'); - return; - } -+ case ARM64in_LdrEXP: -+ vex_printf("ldxp x2, x3, [x4]"); -+ return; -+ case ARM64in_StrEXP: -+ vex_printf("stxp w0, x2, x3, [x4]"); -+ return; - case ARM64in_CAS: { - vex_printf("x1 = cas(%dbit)(x3, x5 -> x7)", 8 * i->ARM64in.CAS.szB); - return; - } - case ARM64in_CASP: { -- vex_printf("x0,x1 = casp(%dbit)(x2, x4,x5 -> x6,x7)", 8 * i->ARM64in.CASP.szB); -+ vex_printf("x0,x1 = casp(2x%dbit)(x2, x4,x5 -> x6,x7)", -+ 8 * i->ARM64in.CASP.szB); - return; - } - case ARM64in_MFence: -@@ -2253,6 +2270,17 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) - addHRegUse(u, HRmWrite, hregARM64_X0()); - addHRegUse(u, HRmRead, hregARM64_X2()); - return; -+ case ARM64in_LdrEXP: -+ addHRegUse(u, HRmRead, hregARM64_X4()); -+ addHRegUse(u, HRmWrite, hregARM64_X2()); -+ addHRegUse(u, HRmWrite, hregARM64_X3()); -+ return; -+ case ARM64in_StrEXP: -+ addHRegUse(u, HRmRead, hregARM64_X4()); -+ addHRegUse(u, HRmWrite, hregARM64_X0()); -+ addHRegUse(u, HRmRead, hregARM64_X2()); -+ addHRegUse(u, HRmRead, hregARM64_X3()); -+ return; - case ARM64in_CAS: - addHRegUse(u, HRmRead, hregARM64_X3()); - addHRegUse(u, HRmRead, hregARM64_X5()); -@@ -2571,6 +2599,10 @@ void mapRegs_ARM64Instr ( HRegRemap* m, ARM64Instr* i, Bool mode64 ) - return; - case ARM64in_StrEX: - return; -+ case ARM64in_LdrEXP: -+ return; -+ case ARM64in_StrEXP: -+ return; - case ARM64in_CAS: - return; - case ARM64in_CASP: -@@ -4167,6 +4199,16 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, - } - goto bad; - } -+ case ARM64in_LdrEXP: { -+ // 820C7FC8 ldxp x2, x3, [x4] -+ *p++ = 0xC87F0C82; -+ goto done; -+ } -+ case ARM64in_StrEXP: { -+ // 820C20C8 stxp w0, x2, x3, [x4] -+ *p++ = 0xC8200C82; -+ goto done; -+ } - case ARM64in_CAS: { - /* This isn't simple. For an explanation see the comment in - host_arm64_defs.h on the definition of ARM64Instr case CAS. -diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h -index 01fb5708e..dc686dff7 100644 ---- a/VEX/priv/host_arm64_defs.h -+++ b/VEX/priv/host_arm64_defs.h -@@ -509,8 +509,10 @@ typedef - ARM64in_AddToSP, /* move SP by small, signed constant */ - ARM64in_FromSP, /* move SP to integer register */ - ARM64in_Mul, -- ARM64in_LdrEX, -- ARM64in_StrEX, -+ ARM64in_LdrEX, /* load exclusive, single register */ -+ ARM64in_StrEX, /* store exclusive, single register */ -+ ARM64in_LdrEXP, /* load exclusive, register pair, 2x64-bit only */ -+ ARM64in_StrEXP, /* store exclusive, register pair, 2x64-bit only */ - ARM64in_CAS, - ARM64in_CASP, - ARM64in_MFence, -@@ -719,6 +721,12 @@ typedef - struct { - Int szB; /* 1, 2, 4 or 8 */ - } StrEX; -+ /* LDXP x2, x3, [x4]. This is 2x64-bit only. */ -+ struct { -+ } LdrEXP; -+ /* STXP w0, x2, x3, [x4]. This is 2x64-bit only. */ -+ struct { -+ } StrEXP; - /* x1 = CAS(x3(addr), x5(expected) -> x7(new)), - and trashes x8 - where x1[8*szB-1 : 0] == x5[8*szB-1 : 0] indicates success, -@@ -1037,6 +1045,8 @@ extern ARM64Instr* ARM64Instr_Mul ( HReg dst, HReg argL, HReg argR, - ARM64MulOp op ); - extern ARM64Instr* ARM64Instr_LdrEX ( Int szB ); - extern ARM64Instr* ARM64Instr_StrEX ( Int szB ); -+extern ARM64Instr* ARM64Instr_LdrEXP ( void ); -+extern ARM64Instr* ARM64Instr_StrEXP ( void ); - extern ARM64Instr* ARM64Instr_CAS ( Int szB ); - extern ARM64Instr* ARM64Instr_CASP ( Int szB ); - extern ARM64Instr* ARM64Instr_MFence ( void ); -diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c -index 4b1d8c846..094e7e74b 100644 ---- a/VEX/priv/host_arm64_isel.c -+++ b/VEX/priv/host_arm64_isel.c -@@ -196,9 +196,9 @@ static HReg iselCondCode_R ( ISelEnv* env, IRExpr* e ); - static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ); - static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e ); - --static void iselInt128Expr_wrk ( /*OUT*/HReg* rHi, HReg* rLo, -+static void iselInt128Expr_wrk ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo, - ISelEnv* env, IRExpr* e ); --static void iselInt128Expr ( /*OUT*/HReg* rHi, HReg* rLo, -+static void iselInt128Expr ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo, - ISelEnv* env, IRExpr* e ); - - static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e ); -@@ -1759,9 +1759,12 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) - - /* AND/OR/XOR(e1, e2) (for any e1, e2) */ - switch (e->Iex.Binop.op) { -- case Iop_And64: case Iop_And32: lop = ARM64lo_AND; goto log_binop; -- case Iop_Or64: case Iop_Or32: case Iop_Or16: lop = ARM64lo_OR; goto log_binop; -- case Iop_Xor64: case Iop_Xor32: lop = ARM64lo_XOR; goto log_binop; -+ case Iop_And64: case Iop_And32: -+ lop = ARM64lo_AND; goto log_binop; -+ case Iop_Or64: case Iop_Or32: case Iop_Or16: -+ lop = ARM64lo_OR; goto log_binop; -+ case Iop_Xor64: case Iop_Xor32: -+ lop = ARM64lo_XOR; goto log_binop; - log_binop: { - HReg dst = newVRegI(env); - HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); -@@ -2013,6 +2016,11 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) - iselInt128Expr(&rHi,&rLo, env, e->Iex.Unop.arg); - return rHi; /* and abandon rLo */ - } -+ case Iop_128to64: { -+ HReg rHi, rLo; -+ iselInt128Expr(&rHi,&rLo, env, e->Iex.Unop.arg); -+ return rLo; /* and abandon rHi */ -+ } - case Iop_8Sto32: case Iop_8Sto64: { - IRExpr* arg = e->Iex.Unop.arg; - HReg src = iselIntExpr_R(env, arg); -@@ -2185,13 +2193,19 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) - } - return dst; - } -+ case Iop_64HIto32: { -+ HReg dst = newVRegI(env); -+ HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); -+ addInstr(env, ARM64Instr_Shift(dst, src, ARM64RI6_I6(32), -+ ARM64sh_SHR)); -+ return dst; -+ } - case Iop_64to32: - case Iop_64to16: - case Iop_64to8: - case Iop_32to16: - /* These are no-ops. */ - return iselIntExpr_R(env, e->Iex.Unop.arg); -- - default: - break; - } -@@ -2335,6 +2349,43 @@ static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo, - vassert(e); - vassert(typeOfIRExpr(env->type_env,e) == Ity_I128); - -+ /* --------- TEMP --------- */ -+ if (e->tag == Iex_RdTmp) { -+ lookupIRTempPair(rHi, rLo, env, e->Iex.RdTmp.tmp); -+ return; -+ } -+ -+ /* --------- CONST --------- */ -+ if (e->tag == Iex_Const) { -+ IRConst* c = e->Iex.Const.con; -+ vassert(c->tag == Ico_U128); -+ if (c->Ico.U128 == 0) { -+ // The only case we need to handle (so far) -+ HReg zero = newVRegI(env); -+ addInstr(env, ARM64Instr_Imm64(zero, 0)); -+ *rHi = *rLo = zero; -+ return; -+ } -+ } -+ -+ /* --------- UNARY ops --------- */ -+ if (e->tag == Iex_Unop) { -+ switch (e->Iex.Unop.op) { -+ case Iop_ReinterpV128asI128: { -+ HReg dstHi = newVRegI(env); -+ HReg dstLo = newVRegI(env); -+ HReg src = iselV128Expr(env, e->Iex.Unop.arg); -+ addInstr(env, ARM64Instr_VXfromQ(dstHi, src, 1)); -+ addInstr(env, ARM64Instr_VXfromQ(dstLo, src, 0)); -+ *rHi = dstHi; -+ *rLo = dstLo; -+ return; -+ } -+ default: -+ break; -+ } -+ } -+ - /* --------- BINARY ops --------- */ - if (e->tag == Iex_Binop) { - switch (e->Iex.Binop.op) { -@@ -4086,6 +4137,14 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) - addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src)); - return; - } -+ if (ty == Ity_I128) { -+ HReg rHi, rLo, dstHi, dstLo; -+ iselInt128Expr(&rHi,&rLo, env, stmt->Ist.WrTmp.data); -+ lookupIRTempPair( &dstHi, &dstLo, env, tmp); -+ addInstr(env, ARM64Instr_MovI(dstHi, rHi)); -+ addInstr(env, ARM64Instr_MovI(dstLo, rLo)); -+ return; -+ } - if (ty == Ity_V128) { - HReg src = iselV128Expr(env, stmt->Ist.WrTmp.data); - HReg dst = lookupIRTemp(env, tmp); -@@ -4183,42 +4242,67 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) - /* LL */ - IRTemp res = stmt->Ist.LLSC.result; - IRType ty = typeOfIRTemp(env->type_env, res); -- if (ty == Ity_I64 || ty == Ity_I32 -+ if (ty == Ity_I128 || ty == Ity_I64 || ty == Ity_I32 - || ty == Ity_I16 || ty == Ity_I8) { - Int szB = 0; -- HReg r_dst = lookupIRTemp(env, res); - HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr); - switch (ty) { -- case Ity_I8: szB = 1; break; -- case Ity_I16: szB = 2; break; -- case Ity_I32: szB = 4; break; -- case Ity_I64: szB = 8; break; -- default: vassert(0); -+ case Ity_I8: szB = 1; break; -+ case Ity_I16: szB = 2; break; -+ case Ity_I32: szB = 4; break; -+ case Ity_I64: szB = 8; break; -+ case Ity_I128: szB = 16; break; -+ default: vassert(0); -+ } -+ if (szB == 16) { -+ HReg r_dstMSword = INVALID_HREG; -+ HReg r_dstLSword = INVALID_HREG; -+ lookupIRTempPair(&r_dstMSword, &r_dstLSword, env, res); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); -+ addInstr(env, ARM64Instr_LdrEXP()); -+ addInstr(env, ARM64Instr_MovI(r_dstLSword, hregARM64_X2())); -+ addInstr(env, ARM64Instr_MovI(r_dstMSword, hregARM64_X3())); -+ } else { -+ vassert(szB != 0); -+ HReg r_dst = lookupIRTemp(env, res); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); -+ addInstr(env, ARM64Instr_LdrEX(szB)); -+ addInstr(env, ARM64Instr_MovI(r_dst, hregARM64_X2())); - } -- addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr)); -- addInstr(env, ARM64Instr_LdrEX(szB)); -- addInstr(env, ARM64Instr_MovI(r_dst, hregARM64_X2())); - return; - } - goto stmt_fail; - } else { - /* SC */ - IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.LLSC.storedata); -- if (tyd == Ity_I64 || tyd == Ity_I32 -+ if (tyd == Ity_I128 || tyd == Ity_I64 || tyd == Ity_I32 - || tyd == Ity_I16 || tyd == Ity_I8) { - Int szB = 0; -- HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata); - HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr); - switch (tyd) { -- case Ity_I8: szB = 1; break; -- case Ity_I16: szB = 2; break; -- case Ity_I32: szB = 4; break; -- case Ity_I64: szB = 8; break; -- default: vassert(0); -+ case Ity_I8: szB = 1; break; -+ case Ity_I16: szB = 2; break; -+ case Ity_I32: szB = 4; break; -+ case Ity_I64: szB = 8; break; -+ case Ity_I128: szB = 16; break; -+ default: vassert(0); -+ } -+ if (szB == 16) { -+ HReg rD_MSword = INVALID_HREG; -+ HReg rD_LSword = INVALID_HREG; -+ iselInt128Expr(&rD_MSword, -+ &rD_LSword, env, stmt->Ist.LLSC.storedata); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD_LSword)); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X3(), rD_MSword)); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); -+ addInstr(env, ARM64Instr_StrEXP()); -+ } else { -+ vassert(szB != 0); -+ HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD)); -+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); -+ addInstr(env, ARM64Instr_StrEX(szB)); - } -- addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD)); -- addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA)); -- addInstr(env, ARM64Instr_StrEX(szB)); - } else { - goto stmt_fail; - } -@@ -4243,10 +4327,10 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) - - /* --------- ACAS --------- */ - case Ist_CAS: { -- if (stmt->Ist.CAS.details->oldHi == IRTemp_INVALID) { -+ IRCAS* cas = stmt->Ist.CAS.details; -+ if (cas->oldHi == IRTemp_INVALID && cas->end == Iend_LE) { - /* "normal" singleton CAS */ - UChar sz; -- IRCAS* cas = stmt->Ist.CAS.details; - IRType ty = typeOfIRExpr(env->type_env, cas->dataLo); - switch (ty) { - case Ity_I64: sz = 8; break; -@@ -4281,10 +4365,9 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) - addInstr(env, ARM64Instr_MovI(rOld, rResult)); - return; - } -- else { -+ if (cas->oldHi != IRTemp_INVALID && cas->end == Iend_LE) { - /* Paired register CAS, i.e. CASP */ - UChar sz; -- IRCAS* cas = stmt->Ist.CAS.details; - IRType ty = typeOfIRExpr(env->type_env, cas->dataLo); - switch (ty) { - case Ity_I64: sz = 8; break; -diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c -index 25566c41c..2d82c41a1 100644 ---- a/VEX/priv/ir_defs.c -+++ b/VEX/priv/ir_defs.c -@@ -76,6 +76,7 @@ void ppIRConst ( const IRConst* con ) - case Ico_U16: vex_printf( "0x%x:I16", (UInt)(con->Ico.U16)); break; - case Ico_U32: vex_printf( "0x%x:I32", (UInt)(con->Ico.U32)); break; - case Ico_U64: vex_printf( "0x%llx:I64", (ULong)(con->Ico.U64)); break; -+ case Ico_U128: vex_printf( "I128{0x%04x}", (UInt)(con->Ico.U128)); break; - case Ico_F32: u.f32 = con->Ico.F32; - vex_printf( "F32{0x%x}", u.i32); - break; -@@ -2266,6 +2267,13 @@ IRConst* IRConst_U64 ( ULong u64 ) - c->Ico.U64 = u64; - return c; - } -+IRConst* IRConst_U128 ( UShort con ) -+{ -+ IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst)); -+ c->tag = Ico_U128; -+ c->Ico.U128 = con; -+ return c; -+} - IRConst* IRConst_F32 ( Float f32 ) - { - IRConst* c = LibVEX_Alloc_inline(sizeof(IRConst)); -@@ -4230,6 +4238,7 @@ IRType typeOfIRConst ( const IRConst* con ) - case Ico_U16: return Ity_I16; - case Ico_U32: return Ity_I32; - case Ico_U64: return Ity_I64; -+ case Ico_U128: return Ity_I128; - case Ico_F32: return Ity_F32; - case Ico_F32i: return Ity_F32; - case Ico_F64: return Ity_F64; -@@ -5129,7 +5138,7 @@ void tcStmt ( const IRSB* bb, const IRStmt* stmt, IRType gWordTy ) - tyRes = typeOfIRTemp(tyenv, stmt->Ist.LLSC.result); - if (stmt->Ist.LLSC.storedata == NULL) { - /* it's a LL */ -- if (tyRes != Ity_I64 && tyRes != Ity_I32 -+ if (tyRes != Ity_I128 && tyRes != Ity_I64 && tyRes != Ity_I32 - && tyRes != Ity_I16 && tyRes != Ity_I8) - sanityCheckFail(bb,stmt,"Ist.LLSC(LL).result :: bogus"); - } else { -@@ -5137,7 +5146,7 @@ void tcStmt ( const IRSB* bb, const IRStmt* stmt, IRType gWordTy ) - if (tyRes != Ity_I1) - sanityCheckFail(bb,stmt,"Ist.LLSC(SC).result: not :: Ity_I1"); - tyData = typeOfIRExpr(tyenv, stmt->Ist.LLSC.storedata); -- if (tyData != Ity_I64 && tyData != Ity_I32 -+ if (tyData != Ity_I128 && tyData != Ity_I64 && tyData != Ity_I32 - && tyData != Ity_I16 && tyData != Ity_I8) - sanityCheckFail(bb,stmt, - "Ist.LLSC(SC).result :: storedata bogus"); -@@ -5385,6 +5394,7 @@ Int sizeofIRType ( IRType ty ) - IRType integerIRTypeOfSize ( Int szB ) - { - switch (szB) { -+ case 16: return Ity_I128; - case 8: return Ity_I64; - case 4: return Ity_I32; - case 2: return Ity_I16; -diff --git a/VEX/pub/libvex_guest_arm64.h b/VEX/pub/libvex_guest_arm64.h -index 39b6ecdc2..91d06bd75 100644 ---- a/VEX/pub/libvex_guest_arm64.h -+++ b/VEX/pub/libvex_guest_arm64.h -@@ -157,14 +157,18 @@ typedef - note of bits 23 and 22. */ - UInt guest_FPCR; - -- /* Fallback LL/SC support. See bugs 344524 and 369459. */ -- ULong guest_LLSC_SIZE; // 0==no current transaction, else 1,2,4 or 8. -+ /* Fallback LL/SC support. See bugs 344524 and 369459. _LO64 and _HI64 -+ contain the original contents of _ADDR+0 .. _ADDR+15, but only _SIZE -+ number of bytes of it. The remaining 16-_SIZE bytes of them must be -+ zero. */ -+ ULong guest_LLSC_SIZE; // 0==no current transaction, else 1,2,4,8 or 16. - ULong guest_LLSC_ADDR; // Address of transaction. -- ULong guest_LLSC_DATA; // Original value at _ADDR, zero-extended. -+ ULong guest_LLSC_DATA_LO64; // Original value at _ADDR+0. -+ ULong guest_LLSC_DATA_HI64; // Original value at _ADDR+8. - - /* Padding to make it have an 16-aligned size */ - /* UInt pad_end_0; */ -- ULong pad_end_1; -+ /* ULong pad_end_1; */ - } - VexGuestARM64State; - -diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h -index deaa044c1..85805bb69 100644 ---- a/VEX/pub/libvex_ir.h -+++ b/VEX/pub/libvex_ir.h -@@ -269,6 +269,8 @@ typedef - Ico_U16, - Ico_U32, - Ico_U64, -+ Ico_U128, /* 128-bit restricted integer constant, -+ same encoding scheme as V128 */ - Ico_F32, /* 32-bit IEEE754 floating */ - Ico_F32i, /* 32-bit unsigned int to be interpreted literally - as a IEEE754 single value. */ -@@ -295,6 +297,7 @@ typedef - UShort U16; - UInt U32; - ULong U64; -+ UShort U128; - Float F32; - UInt F32i; - Double F64; -@@ -311,6 +314,7 @@ extern IRConst* IRConst_U8 ( UChar ); - extern IRConst* IRConst_U16 ( UShort ); - extern IRConst* IRConst_U32 ( UInt ); - extern IRConst* IRConst_U64 ( ULong ); -+extern IRConst* IRConst_U128 ( UShort ); - extern IRConst* IRConst_F32 ( Float ); - extern IRConst* IRConst_F32i ( UInt ); - extern IRConst* IRConst_F64 ( Double ); -diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c -index 919c7fae8..176c8e5cb 100644 ---- a/memcheck/mc_machine.c -+++ b/memcheck/mc_machine.c -@@ -1115,9 +1115,10 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB ) - if (o == GOF(CMSTART) && sz == 8) return -1; // untracked - if (o == GOF(CMLEN) && sz == 8) return -1; // untracked - -- if (o == GOF(LLSC_SIZE) && sz == 8) return -1; // untracked -- if (o == GOF(LLSC_ADDR) && sz == 8) return o; -- if (o == GOF(LLSC_DATA) && sz == 8) return o; -+ if (o == GOF(LLSC_SIZE) && sz == 8) return -1; // untracked -+ if (o == GOF(LLSC_ADDR) && sz == 8) return o; -+ if (o == GOF(LLSC_DATA_LO64) && sz == 8) return o; -+ if (o == GOF(LLSC_DATA_HI64) && sz == 8) return o; - - VG_(printf)("MC_(get_otrack_shadow_offset)(arm64)(off=%d,sz=%d)\n", - offset,szB); -diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c -index c6fd2653f..72ccb3c8c 100644 ---- a/memcheck/mc_translate.c -+++ b/memcheck/mc_translate.c -@@ -5497,8 +5497,11 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, - the address (shadow) to 'defined' following the test. */ - complainIfUndefined( mce, addr, guard ); - -- /* Now cook up a call to the relevant helper function, to read the -- data V bits from shadow memory. */ -+ /* Now cook up a call to the relevant helper function, to read the data V -+ bits from shadow memory. Note that I128 loads are done by pretending -+ we're doing a V128 load, and then converting the resulting V128 vbits -+ word to an I128, right at the end of this function -- see `castedToI128` -+ below. (It's only a minor hack :-) This pertains to bug 444399. */ - ty = shadowTypeV(ty); - - void* helper = NULL; -@@ -5511,6 +5514,7 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, - hname = "MC_(helperc_LOADV256le)"; - ret_via_outparam = True; - break; -+ case Ity_I128: // fallthrough. See comment above. - case Ity_V128: helper = &MC_(helperc_LOADV128le); - hname = "MC_(helperc_LOADV128le)"; - ret_via_outparam = True; -@@ -5576,7 +5580,7 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, - - /* We need to have a place to park the V bits we're just about to - read. */ -- IRTemp datavbits = newTemp(mce, ty, VSh); -+ IRTemp datavbits = newTemp(mce, ty == Ity_I128 ? Ity_V128 : ty, VSh); - - /* Here's the call. */ - IRDirty* di; -@@ -5603,7 +5607,14 @@ IRAtom* expr2vbits_Load_WRK ( MCEnv* mce, - } - stmt( 'V', mce, IRStmt_Dirty(di) ); - -- return mkexpr(datavbits); -+ if (ty == Ity_I128) { -+ IRAtom* castedToI128 -+ = assignNew('V', mce, Ity_I128, -+ unop(Iop_ReinterpV128asI128, mkexpr(datavbits))); -+ return castedToI128; -+ } else { -+ return mkexpr(datavbits); -+ } - } - - -@@ -5631,6 +5642,7 @@ IRAtom* expr2vbits_Load ( MCEnv* mce, - case Ity_I16: - case Ity_I32: - case Ity_I64: -+ case Ity_I128: - case Ity_V128: - case Ity_V256: - return expr2vbits_Load_WRK(mce, end, ty, addr, bias, guard); -@@ -5928,6 +5940,7 @@ void do_shadow_Store ( MCEnv* mce, - c = IRConst_V256(V_BITS32_DEFINED); break; - case Ity_V128: // V128 weirdness -- used twice - c = IRConst_V128(V_BITS16_DEFINED); break; -+ case Ity_I128: c = IRConst_U128(V_BITS16_DEFINED); break; - case Ity_I64: c = IRConst_U64 (V_BITS64_DEFINED); break; - case Ity_I32: c = IRConst_U32 (V_BITS32_DEFINED); break; - case Ity_I16: c = IRConst_U16 (V_BITS16_DEFINED); break; -@@ -5948,6 +5961,7 @@ void do_shadow_Store ( MCEnv* mce, - switch (ty) { - case Ity_V256: /* we'll use the helper four times */ - case Ity_V128: /* we'll use the helper twice */ -+ case Ity_I128: /* we'll use the helper twice */ - case Ity_I64: helper = &MC_(helperc_STOREV64le); - hname = "MC_(helperc_STOREV64le)"; - break; -@@ -6051,9 +6065,9 @@ void do_shadow_Store ( MCEnv* mce, - stmt( 'V', mce, IRStmt_Dirty(diQ3) ); - - } -- else if (UNLIKELY(ty == Ity_V128)) { -+ else if (UNLIKELY(ty == Ity_V128 || ty == Ity_I128)) { - -- /* V128-bit case */ -+ /* V128/I128-bit case */ - /* See comment in next clause re 64-bit regparms */ - /* also, need to be careful about endianness */ - -@@ -6062,6 +6076,7 @@ void do_shadow_Store ( MCEnv* mce, - IRAtom *addrLo64, *addrHi64; - IRAtom *vdataLo64, *vdataHi64; - IRAtom *eBiasLo64, *eBiasHi64; -+ IROp opGetLO64, opGetHI64; - - if (end == Iend_LE) { - offLo64 = 0; -@@ -6071,9 +6086,17 @@ void do_shadow_Store ( MCEnv* mce, - offHi64 = 0; - } - -+ if (ty == Ity_V128) { -+ opGetLO64 = Iop_V128to64; -+ opGetHI64 = Iop_V128HIto64; -+ } else { -+ opGetLO64 = Iop_128to64; -+ opGetHI64 = Iop_128HIto64; -+ } -+ - eBiasLo64 = tyAddr==Ity_I32 ? mkU32(bias+offLo64) : mkU64(bias+offLo64); - addrLo64 = assignNew('V', mce, tyAddr, binop(mkAdd, addr, eBiasLo64) ); -- vdataLo64 = assignNew('V', mce, Ity_I64, unop(Iop_V128to64, vdata)); -+ vdataLo64 = assignNew('V', mce, Ity_I64, unop(opGetLO64, vdata)); - diLo64 = unsafeIRDirty_0_N( - 1/*regparms*/, - hname, VG_(fnptr_to_fnentry)( helper ), -@@ -6081,7 +6104,7 @@ void do_shadow_Store ( MCEnv* mce, - ); - eBiasHi64 = tyAddr==Ity_I32 ? mkU32(bias+offHi64) : mkU64(bias+offHi64); - addrHi64 = assignNew('V', mce, tyAddr, binop(mkAdd, addr, eBiasHi64) ); -- vdataHi64 = assignNew('V', mce, Ity_I64, unop(Iop_V128HIto64, vdata)); -+ vdataHi64 = assignNew('V', mce, Ity_I64, unop(opGetHI64, vdata)); - diHi64 = unsafeIRDirty_0_N( - 1/*regparms*/, - hname, VG_(fnptr_to_fnentry)( helper ), -@@ -6888,7 +6911,7 @@ static void do_shadow_LLSC ( MCEnv* mce, - /* Just treat this as a normal load, followed by an assignment of - the value to .result. */ - /* Stay sane */ -- tl_assert(resTy == Ity_I64 || resTy == Ity_I32 -+ tl_assert(resTy == Ity_I128 || resTy == Ity_I64 || resTy == Ity_I32 - || resTy == Ity_I16 || resTy == Ity_I8); - assign( 'V', mce, resTmp, - expr2vbits_Load( -@@ -6899,7 +6922,7 @@ static void do_shadow_LLSC ( MCEnv* mce, - /* Stay sane */ - IRType dataTy = typeOfIRExpr(mce->sb->tyenv, - stStoredata); -- tl_assert(dataTy == Ity_I64 || dataTy == Ity_I32 -+ tl_assert(dataTy == Ity_I128 || dataTy == Ity_I64 || dataTy == Ity_I32 - || dataTy == Ity_I16 || dataTy == Ity_I8); - do_shadow_Store( mce, stEnd, - stAddr, 0/* addr bias */, -@@ -7684,7 +7707,7 @@ static void schemeS ( MCEnv* mce, IRStmt* st ) - = typeOfIRTemp(mce->sb->tyenv, st->Ist.LLSC.result); - IRExpr* vanillaLoad - = IRExpr_Load(st->Ist.LLSC.end, resTy, st->Ist.LLSC.addr); -- tl_assert(resTy == Ity_I64 || resTy == Ity_I32 -+ tl_assert(resTy == Ity_I128 || resTy == Ity_I64 || resTy == Ity_I32 - || resTy == Ity_I16 || resTy == Ity_I8); - assign( 'B', mce, findShadowTmpB(mce, st->Ist.LLSC.result), - schemeE(mce, vanillaLoad)); -diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am -index 449710020..2b43ef7d7 100644 ---- a/memcheck/tests/Makefile.am -+++ b/memcheck/tests/Makefile.am -@@ -90,6 +90,7 @@ EXTRA_DIST = \ - addressable.stderr.exp addressable.stdout.exp addressable.vgtest \ - atomic_incs.stderr.exp atomic_incs.vgtest \ - atomic_incs.stdout.exp-32bit atomic_incs.stdout.exp-64bit \ -+ atomic_incs.stdout.exp-64bit-and-128bit \ - badaddrvalue.stderr.exp \ - badaddrvalue.stdout.exp badaddrvalue.vgtest \ - exit_on_first_error.stderr.exp \ -diff --git a/memcheck/tests/atomic_incs.c b/memcheck/tests/atomic_incs.c -index f931750f4..1c738c530 100644 ---- a/memcheck/tests/atomic_incs.c -+++ b/memcheck/tests/atomic_incs.c -@@ -22,6 +22,17 @@ - #define NNN 3456987 - - #define IS_8_ALIGNED(_ptr) (0 == (((unsigned long)(_ptr)) & 7)) -+#define IS_16_ALIGNED(_ptr) (0 == (((unsigned long)(_ptr)) & 15)) -+ -+// U128 from libvex_basictypes.h is a 4-x-UInt array, which is a bit -+// inconvenient, hence: -+typedef -+ struct { -+ // assuming little-endianness -+ unsigned long long int lo64; -+ unsigned long long int hi64; -+ } -+ MyU128; - - - __attribute__((noinline)) void atomic_add_8bit ( char* p, int n ) -@@ -712,6 +723,40 @@ __attribute__((noinline)) void atomic_add_64bit ( long long int* p, int n ) - #endif - } - -+__attribute__((noinline)) void atomic_add_128bit ( MyU128* p, -+ unsigned long long int n ) -+{ -+#if defined(VGA_x86) || defined(VGA_ppc32) || defined(VGA_mips32) \ -+ || defined (VGA_nanomips) || defined(VGA_mips64) \ -+ || defined(VGA_amd64) \ -+ || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ -+ || defined(VGA_arm) \ -+ || defined(VGA_s390x) -+ /* do nothing; is not supported */ -+#elif defined(VGA_arm64) -+ unsigned long long int block[3] -+ = { (unsigned long long int)p, (unsigned long long int)n, -+ 0xFFFFFFFFFFFFFFFFULL}; -+ do { -+ __asm__ __volatile__( -+ "mov x5, %0" "\n\t" // &block[0] -+ "ldr x9, [x5, #0]" "\n\t" // p -+ "ldr x10, [x5, #8]" "\n\t" // n -+ "ldxp x7, x8, [x9]" "\n\t" -+ "adds x7, x7, x10" "\n\t" -+ "adc x8, x8, xzr" "\n\t" -+ "stxp w4, x7, x8, [x9]" "\n\t" -+ "str x4, [x5, #16]" "\n\t" -+ : /*out*/ -+ : /*in*/ "r"(&block[0]) -+ : /*trash*/ "memory", "cc", "x5", "x7", "x8", "x9", "x10", "x4" -+ ); -+ } while (block[2] != 0); -+#else -+# error "Unsupported arch" -+#endif -+} -+ - int main ( int argc, char** argv ) - { - int i, status; -@@ -720,8 +765,12 @@ int main ( int argc, char** argv ) - short* p16; - int* p32; - long long int* p64; -+ MyU128* p128; - pid_t child, p2; - -+ assert(sizeof(MyU128) == 16); -+ assert(sysconf(_SC_PAGESIZE) >= 4096); -+ - printf("parent, pre-fork\n"); - - page = mmap( 0, sysconf(_SC_PAGESIZE), -@@ -736,11 +785,13 @@ int main ( int argc, char** argv ) - p16 = (short*)(page+256); - p32 = (int*)(page+512); - p64 = (long long int*)(page+768); -+ p128 = (MyU128*)(page+1024); - - assert( IS_8_ALIGNED(p8) ); - assert( IS_8_ALIGNED(p16) ); - assert( IS_8_ALIGNED(p32) ); - assert( IS_8_ALIGNED(p64) ); -+ assert( IS_16_ALIGNED(p128) ); - - memset(page, 0, 1024); - -@@ -748,6 +799,7 @@ int main ( int argc, char** argv ) - *p16 = 0; - *p32 = 0; - *p64 = 0; -+ p128->lo64 = p128->hi64 = 0; - - child = fork(); - if (child == -1) { -@@ -763,6 +815,7 @@ int main ( int argc, char** argv ) - atomic_add_16bit(p16, 1); - atomic_add_32bit(p32, 1); - atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */ -+ atomic_add_128bit(p128, 0x1000000013374771ULL); // ditto re upper 64 - } - return 1; - /* NOTREACHED */ -@@ -778,6 +831,7 @@ int main ( int argc, char** argv ) - atomic_add_16bit(p16, 1); - atomic_add_32bit(p32, 1); - atomic_add_64bit(p64, 98765 ); /* ensure we hit the upper 32 bits */ -+ atomic_add_128bit(p128, 0x1000000013374771ULL); // ditto re upper 64 - } - - p2 = waitpid(child, &status, 0); -@@ -788,11 +842,17 @@ int main ( int argc, char** argv ) - - printf("FINAL VALUES: 8 bit %d, 16 bit %d, 32 bit %d, 64 bit %lld\n", - (int)(*(signed char*)p8), (int)(*p16), *p32, *p64 ); -+ printf(" 128 bit 0x%016llx:0x%016llx\n", -+ p128->hi64, p128->lo64); - - if (-74 == (int)(*(signed char*)p8) - && 32694 == (int)(*p16) - && 6913974 == *p32 -- && (0LL == *p64 || 682858642110LL == *p64)) { -+ && (0LL == *p64 || 682858642110LL == *p64) -+ && ((0 == p128->hi64 && 0 == p128->lo64) -+ || (0x00000000000697fb == p128->hi64 -+ && 0x6007eb426316d956ULL == p128->lo64)) -+ ) { - printf("PASS\n"); - } else { - printf("FAIL -- see source code for expected values\n"); -diff --git a/memcheck/tests/atomic_incs.stdout.exp-32bit b/memcheck/tests/atomic_incs.stdout.exp-32bit -index c5b8781e5..55e5044b5 100644 ---- a/memcheck/tests/atomic_incs.stdout.exp-32bit -+++ b/memcheck/tests/atomic_incs.stdout.exp-32bit -@@ -3,5 +3,6 @@ child - parent, pre-fork - parent - FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 0 -+ 128 bit 0x0000000000000000:0x0000000000000000 - PASS - parent exits -diff --git a/memcheck/tests/atomic_incs.stdout.exp-64bit b/memcheck/tests/atomic_incs.stdout.exp-64bit -index 82405c520..ca2f4fc97 100644 ---- a/memcheck/tests/atomic_incs.stdout.exp-64bit -+++ b/memcheck/tests/atomic_incs.stdout.exp-64bit -@@ -3,5 +3,6 @@ child - parent, pre-fork - parent - FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 682858642110 -+ 128 bit 0x0000000000000000:0x0000000000000000 - PASS - parent exits -diff --git a/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit b/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit -new file mode 100644 -index 000000000..ef6580917 ---- /dev/null -+++ b/memcheck/tests/atomic_incs.stdout.exp-64bit-and-128bit -@@ -0,0 +1,8 @@ -+parent, pre-fork -+child -+parent, pre-fork -+parent -+FINAL VALUES: 8 bit -74, 16 bit 32694, 32 bit 6913974, 64 bit 682858642110 -+ 128 bit 0x00000000000697fb:0x6007eb426316d956 -+PASS -+parent exits -diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am -index 00cbfa52c..9efb49b27 100644 ---- a/none/tests/arm64/Makefile.am -+++ b/none/tests/arm64/Makefile.am -@@ -12,7 +12,10 @@ EXTRA_DIST = \ - atomics_v81.stdout.exp atomics_v81.stderr.exp atomics_v81.vgtest \ - simd_v81.stdout.exp simd_v81.stderr.exp simd_v81.vgtest \ - fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest \ -- fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp fp_and_simd_v82.vgtest -+ fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp \ -+ fp_and_simd_v82.vgtest \ -+ ldxp_stxp.stdout.exp ldxp_stxp.stderr.exp \ -+ ldxp_stxp_basisimpl.vgtest ldxp_stxp_fallbackimpl.vgtest - - check_PROGRAMS = \ - allexec \ -@@ -20,7 +23,8 @@ check_PROGRAMS = \ - fp_and_simd \ - integer \ - memory \ -- fmadd_sub -+ fmadd_sub \ -+ ldxp_stxp - - if BUILD_ARMV8_CRC_TESTS - check_PROGRAMS += crc32 -diff --git a/none/tests/arm64/ldxp_stxp.c b/none/tests/arm64/ldxp_stxp.c -new file mode 100644 -index 000000000..b5f6ea121 ---- /dev/null -+++ b/none/tests/arm64/ldxp_stxp.c -@@ -0,0 +1,93 @@ -+ -+/* Note, this is only a basic smoke test of LD{A}XP and ST{L}XP. Their -+ atomicity properties are tested by memcheck/tests/atomic_incs.c. */ -+ -+#include -+#include -+#include -+#include -+ -+typedef unsigned int UInt; -+typedef unsigned long long int ULong; -+ -+ -+void initBlock ( ULong* block ) -+{ -+ block[0] = 0x0001020304050607ULL; -+ block[1] = 0x1011121314151617ULL; -+ block[2] = 0x2021222324252627ULL; -+ block[3] = 0x3031323334353637ULL; -+ block[4] = 0x4041424344454647ULL; -+ block[5] = 0x5051525354555657ULL; -+} -+ -+void printBlock ( const char* who, -+ ULong* block, ULong rt1contents, ULong rt2contents, -+ UInt zeroIfSuccess ) -+{ -+ printf("Block %s (%s)\n", who, zeroIfSuccess == 0 ? "success" : "FAILURE" ); -+ for (int i = 0; i < 6; i++) { -+ printf("0x%016llx\n", block[i]); -+ } -+ printf("0x%016llx rt1contents\n", rt1contents); -+ printf("0x%016llx rt2contents\n", rt2contents); -+ printf("\n"); -+} -+ -+int main ( void ) -+{ -+ ULong* block = memalign(16, 6 * sizeof(ULong)); -+ assert(block); -+ -+ ULong rt1in, rt2in, rt1out, rt2out; -+ UInt scRes; -+ -+ // Do ldxp then stxp with x-registers -+ initBlock(block); -+ rt1in = 0x5555666677778888ULL; -+ rt2in = 0xAAAA9999BBBB0000ULL; -+ rt1out = 0x1111222233334444ULL; -+ rt2out = 0xFFFFEEEEDDDDCCCCULL; -+ scRes = 0x55555555; -+ __asm__ __volatile__( -+ "ldxp %1, %2, [%5]" "\n\t" -+ "stxp %w0, %3, %4, [%5]" "\n\t" -+ : /*OUT*/ -+ "=&r"(scRes), // %0 -+ "=&r"(rt1out), // %1 -+ "=&r"(rt2out) // %2 -+ : /*IN*/ -+ "r"(rt1in), // %3 -+ "r"(rt2in), // %4 -+ "r"(&block[2]) // %5 -+ : /*TRASH*/ -+ "memory","cc" -+ ); -+ printBlock("after ldxp/stxp 2x64-bit", block, rt1out, rt2out, scRes); -+ -+ // Do ldxp then stxp with w-registers -+ initBlock(block); -+ rt1in = 0x5555666677778888ULL; -+ rt2in = 0xAAAA9999BBBB0000ULL; -+ rt1out = 0x1111222233334444ULL; -+ rt2out = 0xFFFFEEEEDDDDCCCCULL; -+ scRes = 0x55555555; -+ __asm__ __volatile__( -+ "ldxp %w1, %w2, [%5]" "\n\t" -+ "stxp %w0, %w3, %w4, [%5]" "\n\t" -+ : /*OUT*/ -+ "=&r"(scRes), // %0 -+ "=&r"(rt1out), // %1 -+ "=&r"(rt2out) // %2 -+ : /*IN*/ -+ "r"(rt1in), // %3 -+ "r"(rt2in), // %4 -+ "r"(&block[2]) // %5 -+ : /*TRASH*/ -+ "memory","cc" -+ ); -+ printBlock("after ldxp/stxp 2x32-bit", block, rt1out, rt2out, scRes); -+ -+ free(block); -+ return 0; -+} -diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.stderr.exp b/none/tests/arm64/ldxp_stxp_basisimpl.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp b/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp -new file mode 100644 -index 000000000..f269ecdcc ---- /dev/null -+++ b/none/tests/arm64/ldxp_stxp_basisimpl.stdout.exp -@@ -0,0 +1,20 @@ -+Block after ldxp/stxp 2x64-bit (success) -+0x0001020304050607 -+0x1011121314151617 -+0x5555666677778888 -+0xaaaa9999bbbb0000 -+0x4041424344454647 -+0x5051525354555657 -+0x2021222324252627 rt1contents -+0x3031323334353637 rt2contents -+ -+Block after ldxp/stxp 2x32-bit (success) -+0x0001020304050607 -+0x1011121314151617 -+0xbbbb000077778888 -+0x3031323334353637 -+0x4041424344454647 -+0x5051525354555657 -+0x0000000024252627 rt1contents -+0x0000000020212223 rt2contents -+ -diff --git a/none/tests/arm64/ldxp_stxp_basisimpl.vgtest b/none/tests/arm64/ldxp_stxp_basisimpl.vgtest -new file mode 100644 -index 000000000..29133729a ---- /dev/null -+++ b/none/tests/arm64/ldxp_stxp_basisimpl.vgtest -@@ -0,0 +1,2 @@ -+prog: ldxp_stxp -+vgopts: -q -diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.stderr.exp b/none/tests/arm64/ldxp_stxp_fallbackimpl.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp b/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp -new file mode 100644 -index 000000000..f269ecdcc ---- /dev/null -+++ b/none/tests/arm64/ldxp_stxp_fallbackimpl.stdout.exp -@@ -0,0 +1,20 @@ -+Block after ldxp/stxp 2x64-bit (success) -+0x0001020304050607 -+0x1011121314151617 -+0x5555666677778888 -+0xaaaa9999bbbb0000 -+0x4041424344454647 -+0x5051525354555657 -+0x2021222324252627 rt1contents -+0x3031323334353637 rt2contents -+ -+Block after ldxp/stxp 2x32-bit (success) -+0x0001020304050607 -+0x1011121314151617 -+0xbbbb000077778888 -+0x3031323334353637 -+0x4041424344454647 -+0x5051525354555657 -+0x0000000024252627 rt1contents -+0x0000000020212223 rt2contents -+ -diff --git a/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest b/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest -new file mode 100644 -index 000000000..474282a03 ---- /dev/null -+++ b/none/tests/arm64/ldxp_stxp_fallbackimpl.vgtest -@@ -0,0 +1,2 @@ -+prog: ldxp_stxp -+vgopts: -q --sim-hints=fallback-llsc - -commit 0d38ca5dd6b446c70738031132d41f09de0f7a8a -Author: Julian Seward -Date: Fri Nov 12 13:08:45 2021 +0100 - - Bug 444399 - disInstr(arm64): unhandled instruction 0xC87F2D89 (LD{,A}XP and ST{,L}XP). FOLLOWUP FIX. - - This is an attempt to un-break 'make dist', as broken by the main commit for - this bug, which was 530df882b8f60ecacaf2b9b8a719f7ea1c1d1650. - -diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am -index 9efb49b27..4a06f0996 100644 ---- a/none/tests/arm64/Makefile.am -+++ b/none/tests/arm64/Makefile.am -@@ -14,8 +14,10 @@ EXTRA_DIST = \ - fmadd_sub.stdout.exp fmadd_sub.stderr.exp fmadd_sub.vgtest \ - fp_and_simd_v82.stdout.exp fp_and_simd_v82.stderr.exp \ - fp_and_simd_v82.vgtest \ -- ldxp_stxp.stdout.exp ldxp_stxp.stderr.exp \ -- ldxp_stxp_basisimpl.vgtest ldxp_stxp_fallbackimpl.vgtest -+ ldxp_stxp_basisimpl.stdout.exp ldxp_stxp_basisimpl.stderr.exp \ -+ ldxp_stxp_basisimpl.vgtest \ -+ ldxp_stxp_fallbackimpl.stdout.exp ldxp_stxp_fallbackimpl.stderr.exp \ -+ ldxp_stxp_fallbackimpl.vgtest - - check_PROGRAMS = \ - allexec \ diff --git a/valgrind-3.18.1-condvar.patch b/valgrind-3.18.1-condvar.patch deleted file mode 100644 index e129326..0000000 --- a/valgrind-3.18.1-condvar.patch +++ /dev/null @@ -1,284 +0,0 @@ -commit 9abfed23c0d430aafb85de6397d171316c982792 -Author: Paul Floyd -Date: Fri Nov 19 08:34:53 2021 +0100 - - Bug 445504 Using C++ condition_variable results in bogus "mutex is locked simultaneously by two threads" warning(edit) - - Add intercepts for pthread_cond_clockwait to DRD and Helgrind - Also testcase from bugzilla done by Bart, with configure check - -diff --git a/configure.ac b/configure.ac -index e7381f205..cb836dbff 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -1989,6 +1989,27 @@ AC_LANG(C) - - AM_CONDITIONAL(CXX_CAN_INCLUDE_THREAD_HEADER, test x$ac_cxx_can_include_thread_header = xyes) - -+# Check whether compiler can process #include without errors -+ -+AC_MSG_CHECKING([that C++ compiler can include header file]) -+AC_LANG(C++) -+safe_CXXFLAGS=$CXXFLAGS -+CXXFLAGS=-std=c++0x -+ -+AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -+#include -+])], -+[ -+ac_cxx_can_include_condition_variable_header=yes -+AC_MSG_RESULT([yes]) -+], [ -+ac_cxx_can_include_condition_variable_header=no -+AC_MSG_RESULT([no]) -+]) -+CXXFLAGS=$safe_CXXFLAGS -+AC_LANG(C) -+ -+AM_CONDITIONAL(CXX_CAN_INCLUDE_CONDITION_VARIABLE_HEADER, test x$ac_cxx_can_include_condition_variable_header = xyes) - - # On aarch64 before glibc 2.20 we would get the kernel user_pt_regs instead - # of the user_regs_struct from sys/user.h. They are structurally the same -diff --git a/drd/drd_pthread_intercepts.c b/drd/drd_pthread_intercepts.c -index 8b4454364..95127b42c 100644 ---- a/drd/drd_pthread_intercepts.c -+++ b/drd/drd_pthread_intercepts.c -@@ -1175,6 +1175,30 @@ PTH_FUNCS(int, condZureltimedwait, pthread_cond_timedwait_intercept, - (cond, mutex, timeout)); - #endif /* VGO_solaris */ - -+ -+static __always_inline -+int pthread_cond_clockwait_intercept(pthread_cond_t *cond, -+ pthread_mutex_t *mutex, -+ clockid_t clockid, -+ const struct timespec* abstime) -+{ -+ int ret; -+ OrigFn fn; -+ VALGRIND_GET_ORIG_FN(fn); -+ VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__PRE_COND_WAIT, -+ cond, mutex, DRD_(mutex_type)(mutex), 0, 0); -+ CALL_FN_W_WWWW(ret, fn, cond, mutex, clockid, abstime); -+ VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__POST_COND_WAIT, -+ cond, mutex, 1, 0, 0); -+ return ret; -+} -+ -+PTH_FUNCS(int, pthreadZucondZuclockwait, pthread_cond_clockwait_intercept, -+ (pthread_cond_t *cond, pthread_mutex_t *mutex, -+ clockid_t clockid, const struct timespec* abstime), -+ (cond, mutex, clockid, abstime)); -+ -+ - // NOTE: be careful to intercept only pthread_cond_signal() and not Darwin's - // pthread_cond_signal_thread_np(). The former accepts one argument; the latter - // two. Intercepting all pthread_cond_signal* functions will cause only one -diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am -index 4cb2f7f84..c804391e8 100755 ---- a/drd/tests/Makefile.am -+++ b/drd/tests/Makefile.am -@@ -105,6 +105,8 @@ EXTRA_DIST = \ - circular_buffer.vgtest \ - concurrent_close.stderr.exp \ - concurrent_close.vgtest \ -+ condvar.stderr.exp \ -+ condvar.vgtest \ - custom_alloc.stderr.exp \ - custom_alloc.vgtest \ - custom_alloc_fiw.stderr.exp \ -@@ -458,6 +460,11 @@ check_PROGRAMS += \ - endif - endif - -+if CXX_CAN_INCLUDE_CONDITION_VARIABLE_HEADER -+check_PROGRAMS += \ -+ condvar -+endif -+ - if HAVE_OPENMP - check_PROGRAMS += omp_matinv omp_prime omp_printf - endif -@@ -502,6 +509,8 @@ LDADD = -lpthread - - - bug322621_SOURCES = bug322621.cpp -+condvar_SOURCES = condvar.cpp -+condvar_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x - concurrent_close_SOURCES = concurrent_close.cpp - if !VGCONF_OS_IS_FREEBSD - dlopen_main_LDADD = -ldl -diff --git a/drd/tests/condvar.cpp b/drd/tests/condvar.cpp -new file mode 100644 -index 000000000..18ecb3f8a ---- /dev/null -+++ b/drd/tests/condvar.cpp -@@ -0,0 +1,55 @@ -+/* See also https://bugs.kde.org/show_bug.cgi?id=445504 */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+using lock_guard = std::lock_guard; -+using unique_lock = std::unique_lock; -+ -+struct state { -+ std::mutex m; -+ std::vector v; -+ std::condition_variable cv; -+ -+ state() { -+ // Call pthread_cond_init() explicitly to let DRD know about 'cv'. -+ pthread_cond_init(cv.native_handle(), NULL); -+ } -+}; -+ -+void other_thread(state *sp) { -+ state &s = *sp; -+ std::cerr << "Other thread: waiting for notify\n"; -+ unique_lock l{s.m}; -+ while (true) { -+ if (s.cv.wait_for(l, std::chrono::seconds(3)) != -+ std::cv_status::timeout) { -+ std::cerr << "Other thread: notified\n"; -+ break; -+ } -+ } -+ return; -+} -+ -+ -+int main() { -+ state s; -+ auto future = std::async(std::launch::async, other_thread, &s); -+ -+ if (future.wait_for(std::chrono::seconds(1)) != std::future_status::timeout) { -+ std::cerr << "Main: other thread returned too early!\n"; -+ return 2; -+ } -+ -+ { -+ std::lock_guard g{s.m}; -+ s.v.push_back(1); -+ s.v.push_back(2); -+ s.cv.notify_all(); -+ } -+ return 0; -+} -diff --git a/drd/tests/condvar.stderr.exp b/drd/tests/condvar.stderr.exp -new file mode 100644 -index 000000000..be1de9f97 ---- /dev/null -+++ b/drd/tests/condvar.stderr.exp -@@ -0,0 +1,5 @@ -+ -+Other thread: waiting for notify -+Other thread: notified -+ -+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) -diff --git a/drd/tests/condvar.vgtest b/drd/tests/condvar.vgtest -new file mode 100644 -index 000000000..2e7d49f5a ---- /dev/null -+++ b/drd/tests/condvar.vgtest -@@ -0,0 +1,3 @@ -+prereq: ./supported_libpthread && [ -e condvar ] -+vgopts: --check-stack-var=yes --read-var-info=yes -+prog: condvar -diff --git a/helgrind/hg_intercepts.c b/helgrind/hg_intercepts.c -index 866efdbaa..49c3ddcd9 100644 ---- a/helgrind/hg_intercepts.c -+++ b/helgrind/hg_intercepts.c -@@ -1409,6 +1409,88 @@ static int pthread_cond_timedwait_WRK(pthread_cond_t* cond, - # error "Unsupported OS" - #endif - -+//----------------------------------------------------------- -+// glibc: pthread_cond_clockwait -+// -+__attribute__((noinline)) -+static int pthread_cond_clockwait_WRK(pthread_cond_t* cond, -+ pthread_mutex_t* mutex, -+ clockid_t clockid, -+ struct timespec* abstime, -+ int timeout_error) -+{ -+ int ret; -+ OrigFn fn; -+ unsigned long mutex_is_valid; -+ Bool abstime_is_valid; -+ VALGRIND_GET_ORIG_FN(fn); -+ -+ if (TRACE_PTH_FNS) { -+ fprintf(stderr, "<< pthread_cond_clockwait %p %p %p", -+ cond, mutex, abstime); -+ fflush(stderr); -+ } -+ -+ /* Tell the tool a cond-wait is about to happen, so it can check -+ for bogus argument values. In return it tells us whether it -+ thinks the mutex is valid or not. */ -+ DO_CREQ_W_WW(mutex_is_valid, -+ _VG_USERREQ__HG_PTHREAD_COND_WAIT_PRE, -+ pthread_cond_t*,cond, pthread_mutex_t*,mutex); -+ assert(mutex_is_valid == 1 || mutex_is_valid == 0); -+ -+ abstime_is_valid = abstime->tv_nsec >= 0 && abstime->tv_nsec < 1000000000; -+ -+ /* Tell the tool we're about to drop the mutex. This reflects the -+ fact that in a cond_wait, we show up holding the mutex, and the -+ call atomically drops the mutex and waits for the cv to be -+ signalled. */ -+ if (mutex_is_valid && abstime_is_valid) { -+ DO_CREQ_v_W(_VG_USERREQ__HG_PTHREAD_MUTEX_UNLOCK_PRE, -+ pthread_mutex_t*,mutex); -+ } -+ -+ CALL_FN_W_WWWW(ret, fn, cond,mutex,clockid,abstime); -+ -+ if (mutex_is_valid && !abstime_is_valid && ret != EINVAL) { -+ DO_PthAPIerror("Bug in libpthread: pthread_cond_clockwait " -+ "invalid abstime did not cause" -+ " EINVAL", ret); -+ } -+ -+ if (mutex_is_valid && abstime_is_valid) { -+ /* and now we have the mutex again if (ret == 0 || ret == timeout) */ -+ DO_CREQ_v_WW(_VG_USERREQ__HG_PTHREAD_MUTEX_LOCK_POST, -+ pthread_mutex_t *, mutex, -+ long, (ret == 0 || ret == timeout_error) ? True : False); -+ } -+ -+ DO_CREQ_v_WWWW(_VG_USERREQ__HG_PTHREAD_COND_WAIT_POST, -+ pthread_cond_t*,cond, pthread_mutex_t*,mutex, -+ long,ret == timeout_error, -+ long, (ret == 0 || ret == timeout_error) && mutex_is_valid -+ ? True : False); -+ -+ if (ret != 0 && ret != timeout_error) { -+ DO_PthAPIerror( "pthread_cond_clockwait", ret ); -+ } -+ -+ if (TRACE_PTH_FNS) { -+ fprintf(stderr, " cotimedwait -> %d >>\n", ret); -+ } -+ -+ return ret; -+} -+ -+#if defined(VGO_linux) -+ PTH_FUNC(int, pthreadZucondZuclockwait, // pthread_cond_clockwait -+ pthread_cond_t* cond, pthread_mutex_t* mutex, -+ clockid_t clockid, -+ struct timespec* abstime) { -+ return pthread_cond_clockwait_WRK(cond, mutex, clockid, abstime, ETIMEDOUT); -+ } -+#endif -+ - - //----------------------------------------------------------- - // glibc: pthread_cond_signal@GLIBC_2.0 diff --git a/valgrind-3.18.1-demangle-namespace.patch b/valgrind-3.18.1-demangle-namespace.patch deleted file mode 100644 index 25ddf92..0000000 --- a/valgrind-3.18.1-demangle-namespace.patch +++ /dev/null @@ -1,35 +0,0 @@ -commit 542447d4708d4418a08e678dcf467af92b90b7ad -Author: Mark Wielaard -Date: Mon Nov 22 13:07:59 2021 +0100 - - readdwarf3.c (parse_inl_DIE) inlined_subroutine can appear in namespaces - - This was broken by commit 75e3ef0f3 "readdwarf3: Skip units without - addresses when looking for inlined functions". Specifically by this - part: "Also use skip_DIE instead of read_DIE when not parsing - (skipping) children" - - rustc puts concrete function instances in namespaces (which is - allowed in DWARF since there is no strict separation between type - declarations and program scope entries in a DIE tree), the inline - parser didn't expect this and so skipped any DIE under a namespace - entry. This wasn't an issue before because "skipping" a DIE tree was - done by reading it, so it wasn't actually skipped. But now that we - really skip the DIE (sub)tree (which is faster than actually parsing - it) some entries were missed in the rustc case. - - https://bugs.kde.org/show_bug.cgi?id=445668 - -diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c -index 18eecea9f..5489f8d13 100644 ---- a/coregrind/m_debuginfo/readdwarf3.c -+++ b/coregrind/m_debuginfo/readdwarf3.c -@@ -3358,7 +3358,7 @@ static Bool parse_inl_DIE ( - // might maybe contain a DW_TAG_inlined_subroutine: - Bool ret = (unit_has_addrs - || dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram -- || dtag == DW_TAG_inlined_subroutine); -+ || dtag == DW_TAG_inlined_subroutine || dtag == DW_TAG_namespace); - return ret; - - bad_DIE: diff --git a/valgrind-3.18.1-dhat-tests-copy.patch b/valgrind-3.18.1-dhat-tests-copy.patch deleted file mode 100644 index 8e183b9..0000000 --- a/valgrind-3.18.1-dhat-tests-copy.patch +++ /dev/null @@ -1,20 +0,0 @@ -commit 33aba8eef68b1745d3de96b609ff8296b70d9a1c -Author: Paul Floyd -Date: Wed Oct 27 21:37:00 2021 +0200 - - Bug 444495 - dhat/tests/copy fails on s390x - - Add -fno-builtin to ensure that the copy functions get called and so dhat - can intercept and count them. - -diff --git a/dhat/tests/Makefile.am b/dhat/tests/Makefile.am -index 86a9b6d64..b86fc416d 100644 ---- a/dhat/tests/Makefile.am -+++ b/dhat/tests/Makefile.am -@@ -29,3 +29,6 @@ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) - # We don't care about uninitialized or unused malloc results - basic_CFLAGS = $(AM_CFLAGS) -Wno-uninitialized - big_CFLAGS = $(AM_CFLAGS) -Wno-unused-result -+ -+# Prevent the copying functions from being inlined -+copy_CFLAGS = $(AM_CFLAGS) -fno-builtin diff --git a/valgrind-3.18.1-gdbserver_tests-hwcap.patch b/valgrind-3.18.1-gdbserver_tests-hwcap.patch deleted file mode 100644 index 2d952cd..0000000 --- a/valgrind-3.18.1-gdbserver_tests-hwcap.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit 64ab89162906d5b9e2de6c3afe476fec861ef7ec -Author: Mark Wielaard -Date: Tue Nov 2 14:27:45 2021 +0100 - - gdbserver_tests: Filter out glibc hwcaps libc.so - - On some systems the gdbserver_tests would fail because the filter - for the optimized hwcaps subdir didn't match because the file is - called slightly differently, with the version number before .so - instead of after. For example: /lib64/glibc-hwcaps/power9/libc-2.28.so - - Add one extra filter for this pattern. - -diff --git a/gdbserver_tests/filter_gdb.in b/gdbserver_tests/filter_gdb.in -index d0c94f3f1..b753e0168 100755 ---- a/gdbserver_tests/filter_gdb.in -+++ b/gdbserver_tests/filter_gdb.in -@@ -134,6 +134,7 @@ s/in \(.__\)\{0,1\}select () from \/.*$/in syscall .../ - /^ from \/lib\/libc.so.*$/d - /^ from \/lib64\/libc.so.*$/d - /^ from \/lib64\/.*\/libc.so.*$/d -+/^ from \/lib64\/.*\/libc-.*.so/d - - # and yet another (gdb 7.0 way) to get a system call - s/in select ()$/in syscall .../ diff --git a/valgrind-3.18.1-ppc-hwcaps.patch b/valgrind-3.18.1-ppc-hwcaps.patch deleted file mode 100644 index 27f0439..0000000 --- a/valgrind-3.18.1-ppc-hwcaps.patch +++ /dev/null @@ -1,130 +0,0 @@ -commit 3ea8d4327003c3cefe8e82c59be8e92dcfe1a60f -Author: Carl Love -Date: Fri Jan 14 23:04:44 2022 +0000 - - Assorted changes to protect from side affects from the feature checking code. - - Patch contributed by Will Schmidt - - This problem was initially reported by Tulio, he assisted me in - identifying the underlying issue here. - - This was discovered on a Power10, and occurs since the ISA 3.1 support - check uses the brh instruction via a hardcoded ".long 0x7f1401b6" asm stanza. - That encoding writes to r20, and since the stanza does not contain a clobber - the compiler did not know to save or restore that register upon entry or exit. - The junk value remaining in r20 subsequently caused a segfault. - - This patch adds clobber masks to the instruction stanzas, as well as - updates the associated comments to clarify which registers are being - used. - As part of this change I've also - - updated the .long for the cnttzw instruction to write to r20, and - zeroed the reserved bits from that instruction so it is properly - decoded by the disassembler. - - updated the .long for the dadd instruction to write to f0. - - I've inspected the current codegen with these changes in place, and - confirm that r20 is now saved and restored on entry and exit from the - machine_get_hwcaps() function. - - bugzilla 447995 Valgrind segfault on power10 due to hwcap checking code - -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 0b60ecc0f..089acee64 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -1246,7 +1246,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_isa_3_0 = False; - } else { -- __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ -+ __asm__ __volatile__(".long 0x7f140434":::"r20"); /* cnttzw r20,r24 */ - } - - // ISA 3.1 not supported on 32-bit systems -@@ -1358,7 +1358,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_V = False; - } else { -- __asm__ __volatile__(".long 0x10000484"); /*vor 0,0,0*/ -+ __asm__ __volatile__(".long 0x10000484"); /* vor v0,v0,v0 */ - } - - /* General-Purpose optional (fsqrt, fsqrts) */ -@@ -1366,7 +1366,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_FX = False; - } else { -- __asm__ __volatile__(".long 0xFC00002C"); /*fsqrt 0,0*/ -+ __asm__ __volatile__(".long 0xFC00002C"); /* fsqrt f0,f0 */ - } - - /* Graphics optional (stfiwx, fres, frsqrte, fsel) */ -@@ -1374,7 +1374,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_GX = False; - } else { -- __asm__ __volatile__(".long 0xFC000034"); /*frsqrte 0,0*/ -+ __asm__ __volatile__(".long 0xFC000034"); /* frsqrte f0,f0 */ - } - - /* VSX support implies Power ISA 2.06 */ -@@ -1382,7 +1382,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_VX = False; - } else { -- __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp XT,XB */ -+ __asm__ __volatile__(".long 0xf0000564"); /* xsabsdp vs0,vs0 */ - } - - /* Check for Decimal Floating Point (DFP) support. */ -@@ -1390,7 +1390,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_DFP = False; - } else { -- __asm__ __volatile__(".long 0xee4e8005"); /* dadd FRT,FRA, FRB */ -+ __asm__ __volatile__(".long 0xec0e8005"); /* dadd f0,f14,f16 */ - } - - /* Check for ISA 2.07 support. */ -@@ -1398,7 +1398,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_isa_2_07 = False; - } else { -- __asm__ __volatile__(".long 0x7c000166"); /* mtvsrd XT,RA */ -+ __asm__ __volatile__(".long 0x7c000166"); /* mtvsrd f0,r0 */ - } - - /* Check for ISA 3.0 support. */ -@@ -1406,7 +1406,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_isa_3_0 = False; - } else { -- __asm__ __volatile__(".long 0x7d205434"); /* cnttzw RT, RB */ -+ __asm__ __volatile__(".long 0x7f140434":::"r20"); /* cnttzw r20,r24 */ - } - - /* Check for ISA 3.1 support. */ -@@ -1414,7 +1414,7 @@ Bool VG_(machine_get_hwcaps)( void ) - if (VG_MINIMAL_SETJMP(env_unsup_insn)) { - have_isa_3_1 = False; - } else { -- __asm__ __volatile__(".long 0x7f1401b6"); /* brh RA, RS */ -+ __asm__ __volatile__(".long 0x7f1401b6":::"r20"); /* brh r20,r24 */ - } - - /* Check if Host supports scv instruction */ -@@ -1424,9 +1424,9 @@ Bool VG_(machine_get_hwcaps)( void ) - } else { - /* Set r0 to 13 for the system time call. Don't want to make a random - system call. */ -- __asm__ __volatile__(".long 0x7c000278"); /* clear r0 */ -- __asm__ __volatile__(".long 0x6009000d"); /* set r0 to 13 */ -- __asm__ __volatile__(".long 0x44000001"); /* scv */ -+ __asm__ __volatile__(".long 0x7c000278"); /* clear r0 with xor r0,r0,r0 */ -+ __asm__ __volatile__(".long 0x6000000d"); /* set r0 to 13 with ori r0,r0,13 */ -+ __asm__ __volatile__(".long 0x44000001"); /* scv 0 */ - } - - /* determine dcbz/dcbzl sizes while we still have the signal diff --git a/valgrind-3.18.1-ppc-pstq-tests.patch b/valgrind-3.18.1-ppc-pstq-tests.patch deleted file mode 100644 index 58498f2..0000000 --- a/valgrind-3.18.1-ppc-pstq-tests.patch +++ /dev/null @@ -1,1876 +0,0 @@ -commit 3950c5d661ee09526cddcf24daf5fc22bc83f70c -Author: Carl Love -Date: Mon Nov 1 11:18:32 2021 -0500 - - Valgrind Add powerpc R=1 tests - - Contributed by Will Schmidt - - This includes updates and adjustments as suggested by Carl. - - Add tests that exercise PCRelative instructions. - These instructions are encoded with R==1, which indicate that - the memory accessed by the instruction is at a location - relative to the currently executing instruction. - - These tests are built using -Wl,-text and -Wl,-bss - options to ensure the location of the target array is at a - location with a specific offset from the currently - executing instruction. - - The write instructions are aimed at a large buffer in - the bss section; which is checked for updates at the - completion of each test. - - In order to ensure consistent output across assorted - systems, the tests have been padded with ori, nop instructions - and align directives. - - Detailed changes: - * Makefile.am: Add test_isa_3_1_R1_RT and test_isa_3_1_R1_XT tests. - * isa_3_1_helpers.h: Add identify_instruction_by_func_name() helper function - to indicate if the test is for R==1. - Add helpers to initialize and print changes to the pcrelative_write_target - array. - Add #define to help pad code with a series of eyecatcher ORI instructions. - * test_isa_3_1_R1_RT.c: New test. - * test_isa_3_1_R1_XT.c: New test. - * test_isa_3_1_R1_XT.stdout.exp: New expected output. - * test_isa_3_1_R1_XT.stdout.exp: New expected output. - * test_isa_3_1_R1_RT.stderr.exp: New expected output. - * test_isa_3_1_R1_RT.stderr.exp: New expected output. - - * test_isa_3_1_R1_RT.vgtest: New test handler. - * test_isa_3_1_R1_XT.vgtest: New test handler. - - * test_isa_3_1_common.c: Add indicators (updates_byte,updates_halfword, - updates_word) indicators to control the output from the R==1 tests. - Add helper check for "_R1" to indicate if instruction is coded with R==1. - Add init and print helpers for the pcrelative_write_target array. - -diff --git a/none/tests/ppc64/Makefile.am b/none/tests/ppc64/Makefile.am -index b709f3ef4..f8eab9fc0 100644 ---- a/none/tests/ppc64/Makefile.am -+++ b/none/tests/ppc64/Makefile.am -@@ -61,6 +61,8 @@ EXTRA_DIST = \ - test_isa_3_1_VRT.vgtest test_isa_3_1_VRT.stderr.exp test_isa_3_1_VRT.stdout.exp \ - test_isa_3_1_Misc.vgtest test_isa_3_1_Misc.stderr.exp test_isa_3_1_Misc.stdout.exp \ - test_isa_3_1_AT.vgtest test_isa_3_1_AT.stderr.exp test_isa_3_1_AT.stdout.exp \ -+ test_isa_3_1_R1_RT.vgtest test_isa_3_1_R1_RT.stderr.exp test_isa_3_1_R1_RT.stdout.exp \ -+ test_isa_3_1_R1_XT.vgtest test_isa_3_1_R1_XT.stderr.exp test_isa_3_1_R1_XT.stdout.exp \ - subnormal_test.stderr.exp subnormal_test.stdout.exp \ - subnormal_test.vgtest test_darn_inst.stderr.exp \ - test_darn_inst.stdout.exp test_darn_inst.vgtest \ -@@ -68,8 +70,8 @@ EXTRA_DIST = \ - test_copy_paste.stderr.exp test_copy_paste.stdout.exp \ - test_copy_paste.vgtest \ - test_mcrxrx.vgtest test_mcrxrx.stderr.exp test_mcrxrx.stdout.exp \ -- test_lxvx_stxvx.vgtest test_lxvx_stxvx.stderr.exp test_lxvx_stxvx.stdout.exp-p8 test_lxvx_stxvx.stdout.exp-p9 -- -+ test_lxvx_stxvx.vgtest test_lxvx_stxvx.stderr.exp \ -+ test_lxvx_stxvx.stdout.exp-p8 test_lxvx_stxvx.stdout.exp-p9 - - check_PROGRAMS = \ - allexec \ -@@ -80,11 +82,12 @@ check_PROGRAMS = \ - test_isa_3_0 test_mod_instructions \ - test_isa_3_1_RT test_isa_3_1_XT test_isa_3_1_VRT \ - test_isa_3_1_Misc test_isa_3_1_AT \ -+ test_isa_3_1_R1_RT test_isa_3_1_R1_XT \ - subnormal_test test_darn_inst test_copy_paste \ - test_tm test_touch_tm data-cache-instructions \ - std_reg_imm \ - twi_tdi tw_td power6_bcmp scv_test \ -- test_mcrxrx test_lxvx_stxvx -+ test_mcrxrx test_lxvx_stxvx - - # lmw, stmw, lswi, lswx, stswi, stswx compile (and run) only on big endian. - if VGCONF_PLATFORMS_INCLUDE_PPC64BE_LINUX -@@ -106,6 +109,8 @@ test_isa_3_1_RT_SOURCES = test_isa_3_1_RT.c test_isa_3_1_common.c - test_isa_3_1_VRT_SOURCES = test_isa_3_1_VRT.c test_isa_3_1_common.c - test_isa_3_1_Misc_SOURCES = test_isa_3_1_Misc.c test_isa_3_1_common.c - test_isa_3_1_AT_SOURCES = test_isa_3_1_AT.c test_isa_3_1_common.c -+test_isa_3_1_R1_XT_SOURCES = test_isa_3_1_R1_XT.c test_isa_3_1_common.c -+test_isa_3_1_R1_RT_SOURCES = test_isa_3_1_R1_RT.c test_isa_3_1_common.c - test_darn_inst_SOURCES = test_darn_inst.c - - if HAS_ALTIVEC -@@ -224,6 +229,11 @@ test_isa_3_1_VRT_CFLAGS = $(test_isa_3_1_CFLAGS) - test_isa_3_1_Misc_CFLAGS = $(test_isa_3_1_CFLAGS) - test_isa_3_1_AT_CFLAGS = $(test_isa_3_1_CFLAGS) - -+# The _R1_foo tests exercise pc-relative instructions, so require the bss and text sections -+# exist at known offsets with respect to each other. -+test_isa_3_1_R1_RT_CFLAGS = $(test_isa_3_1_CFLAGS) -Wl,-Tbss,0x20000 -Wl,-Ttext,0x40000 -+test_isa_3_1_R1_XT_CFLAGS = $(test_isa_3_1_CFLAGS) -Wl,-Tbss,0x20000 -Wl,-Ttext,0x40000 -+ - subnormal_test_CFLAGS = $(AM_CFLAGS) -Winline -Wall -O -g -mregnames $(VSX_FLAG) $(ISA_2_06_FLAG) \ - @FLAG_M64@ $(ALTIVEC_FLAG) $(BUILD_FLAG_VSX) $(BUILD_FLAGS_ISA_2_06) - -diff --git a/none/tests/ppc64/isa_3_1_helpers.h b/none/tests/ppc64/isa_3_1_helpers.h -index 338f55526..716a6277b 100644 ---- a/none/tests/ppc64/isa_3_1_helpers.h -+++ b/none/tests/ppc64/isa_3_1_helpers.h -@@ -43,6 +43,9 @@ extern void debug_show_current_iteration(); - extern void debug_dump_buffer(); - - extern void identify_form_components(const char *, const char *); -+extern void identify_instruction_by_func_name(const char *); -+extern void init_pcrelative_write_target(); -+extern void print_pcrelative_write_target(); - extern void dump_vsxargs(); - extern void generic_prologue(); - extern void build_args_table(); -@@ -58,6 +61,21 @@ extern void initialize_source_registers(); - extern void set_up_iterators(); - extern void initialize_buffer(int); - -+/* This (TEXT_BSS_DELTA) is the relative distance between those -+ sections as set by the linker options for the R==1 tests. */ -+#define TEXT_BSS_DELTA 0x20000 -+#define RELOC_BUFFER_SIZE 0x1000 -+extern unsigned long long pcrelative_buff_addr(int); -+#define PAD_ORI \ -+ __asm__ __volatile__ ("ori 21,21,21"); \ -+ __asm__ __volatile__ ("ori 22,22,22");\ -+ __asm__ __volatile__ ("ori 23,23,23");\ -+ __asm__ __volatile__ ("ori 24,24,24");\ -+ __asm__ __volatile__ ("ori 25,25,25");\ -+ __asm__ __volatile__ ("ori 26,26,26");\ -+ __asm__ __volatile__ ("ori 27,27,27");\ -+ __asm__ __volatile__ ("ori 28,28,28"); -+ - extern int verbose; - #define debug_printf(X) if (verbose>0) printf(X); - #define debug_show_labels (verbose>0) -diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.c b/none/tests/ppc64/test_isa_3_1_R1_RT.c -new file mode 100644 -index 000000000..d73b84b10 ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_RT.c -@@ -0,0 +1,624 @@ -+/* -+ * Valgrind testcase for PowerPC ISA 3.1 -+ * -+ * Copyright (C) 2019-2020 Will Schmidt -+ * -+ * 64bit build: -+ * gcc -Winline -Wall -g -O -mregnames -maltivec -m64 -+ */ -+ -+/* -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of the -+ * License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#include -+#ifdef HAS_ISA_3_1 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+/* Condition Register fields. -+ These are used to capture the condition register values immediately after -+ the instruction under test is executed. This is done to help prevent other -+ test overhead (switch statements, result compares, etc) from disturbing -+ the test case results. */ -+unsigned long current_cr; -+unsigned long current_fpscr; -+ -+struct test_list_t current_test; -+ -+#include "isa_3_1_helpers.h" -+ -+static void test_plxvp_off0_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plxvp 20, +0(0),1" ); -+ PAD_ORI -+} -+static void test_plxvp_off8_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plxvp 20, +8(0),1" ); -+ PAD_ORI -+} -+static void test_plxvp_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plxvp 20, +16(0),1" ); -+ PAD_ORI -+} -+static void test_plxvp_off24_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plxvp 20, +24(0),1" ); -+ PAD_ORI -+} -+static void test_plxvp_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plxvp 20, +32(0),1" ); -+ PAD_ORI -+} -+static void test_plbz_off0_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plbz %0, +0(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plbz_off8_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plbz %0, +8(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plbz_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plbz %0, +16(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plbz_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plbz %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plbz_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plbz %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plhz_off0_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plhz %0, +0(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plhz_off8_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plhz %0, +8(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plhz_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plhz %0, +16(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plhz_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plhz %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plhz_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plhz %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plha_off0_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plha %0, +0(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plha_off8_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plha %0, +8(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plha_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plha %0, +16(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plha_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plha %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plha_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plha %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plwz_off0_R1 (void) { -+ __asm__ __volatile__ ("plwz %0, +0(0), 1" : "=r" (rt) ); -+} -+static void test_plwz_off8_R1 (void) { -+ __asm__ __volatile__ ("plwz %0, +8(0), 1" : "=r" (rt) ); -+} -+static void test_plwz_off16_R1 (void) { -+ __asm__ __volatile__ ("plwz %0, +16(0), 1" : "=r" (rt) ); -+} -+static void test_plwz_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plwz %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plwz_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plwz %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plwa_off0_R1 (void) { -+ __asm__ __volatile__ ("plwa %0, +0(0), 1" : "=r" (rt) ); -+} -+static void test_plwa_off8_R1 (void) { -+ __asm__ __volatile__ ("plwa %0, +8(0), 1" : "=r" (rt) ); -+} -+static void test_plwa_off16_R1 (void) { -+ __asm__ __volatile__ ("plwa %0, +16(0), 1" : "=r" (rt) ); -+} -+static void test_plwa_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plwa %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_plwa_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plwa %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_pld_off0_R1 (void) { -+ __asm__ __volatile__ ("pld %0, +0(0), 1" : "=r" (rt) ); -+} -+static void test_pld_off8_R1 (void) { -+ __asm__ __volatile__ ("pld %0, +8(0), 1" : "=r" (rt) ); -+} -+static void test_pld_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("pld %0, +16(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_pld_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("pld %0, +32(0), 1" : "=r" (rt) ); -+ PAD_ORI -+} -+static void test_pld_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("pld %0, +64(0), 1" : "=r" (rt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_pstb_off0_R1 (void) { -+ __asm__ __volatile__ ("pstb %0, -0x1f400+0(0), 1" :: "r" (rs) ); -+} -+static void test_pstb_off8_R1 (void) { -+ __asm__ __volatile__ ("pstb %0, -0x1f400+8(0), 1" :: "r" (rs) ); -+} -+static void test_pstb_off16_R1 (void) { -+ __asm__ __volatile__ ("pstb %0, -0x1f400+16(0), 1" :: "r" (rs) ); -+} -+static void test_pstb_off32_R1 (void) { -+ __asm__ __volatile__ ("pstb %0, -0x1f400+32(0), 1" :: "r" (rs) ); -+} -+static void test_psth_off0_R1 (void) { -+ __asm__ __volatile__ ("psth %0, -0x1f400+0(0), 1" :: "r" (rs) ); -+} -+static void test_psth_off8_R1 (void) { -+ __asm__ __volatile__ ("psth %0, -0x1f400+8(0), 1" :: "r" (rs) ); -+} -+static void test_psth_off16_R1 (void) { -+ __asm__ __volatile__ ("psth %0, -0x1f400+16(0), 1" :: "r" (rs) ); -+} -+static void test_psth_off32_R1 (void) { -+ __asm__ __volatile__ ("psth %0, -0x1f400+32(0), 1" :: "r" (rs) ); -+} -+static void test_pstw_off0_R1 (void) { -+ __asm__ __volatile__ ("pstw %0, -0x1f400+0(0), 1" :: "r" (rs) ); -+} -+static void test_pstw_off8_R1 (void) { -+ __asm__ __volatile__ ("pstw %0, -0x1f400+8(0), 1" :: "r" (rs) ); -+} -+static void test_pstw_off16_R1 (void) { -+ __asm__ __volatile__ ("pstw %0, -0x1f400+16(0), 1" :: "r" (rs) ); -+} -+static void test_pstw_off32_R1 (void) { -+ __asm__ __volatile__ ("pstw %0, -0x1f400+32(0), 1" :: "r" (rs) ); -+} -+static void test_pstd_off0_R1 (void) { -+ __asm__ __volatile__ ("pstd %0, -0x1f400+0(0), 1" :: "r" (rs) ); -+} -+static void test_pstd_off8_R1 (void) { -+ __asm__ __volatile__ ("pstd %0, -0x1f400+8(0), 1" :: "r" (rs) ); -+} -+static void test_pstd_off16_R1 (void) { -+ __asm__ __volatile__ ("pstd %0, -0x1f400+16(0), 1" :: "r" (rs) ); -+} -+static void test_pstd_off32_R1 (void) { -+ __asm__ __volatile__ ("pstd %0, -0x1f400+32(0), 1" :: "r" (rs) ); -+} -+ /* For the paddi tests; although we can get close to a read/write target -+ due to forcing where the .text and .bss sections are placed, there is -+ still enough codegen variability that having a raw value in the exp -+ file will not be determinative for these instructions. -+ Thus, compromise and just ensure that the generated value is an -+ address that lands within the reloc buffer, and use quasi magic -+ eyecatcher values in the return to indicate success. */ -+static void test_paddi_0_R1 (void) { -+ __asm__ __volatile__ ("paddi %0, 0, 0+0, 1" : "=r" (rt) ); -+ rt = rt - TEXT_BSS_DELTA; -+ if (rt > pcrelative_buff_addr(0) && -+ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) -+ rt = 0xffff0000; -+} -+static void test_paddi_12_R1 (void) { -+ __asm__ __volatile__ ("paddi %0, 0, 0+12, 1" : "=r" (rt) ); -+ rt = rt - TEXT_BSS_DELTA; -+ if (rt > pcrelative_buff_addr(0) && -+ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) -+ rt = 0xffff0012; -+} -+static void test_paddi_48_R1 (void) { -+ __asm__ __volatile__ ("paddi %0, 0, 0+48, 1" : "=r" (rt) ); -+ rt = rt - TEXT_BSS_DELTA; -+ if (rt > pcrelative_buff_addr(0) && -+ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) -+ rt = 0xffff0048; -+} -+static void test_paddi_98_R1 (void) { -+ __asm__ __volatile__ ("paddi %0, 0, 0+98, 1" : "=r" (rt) ); -+ rt = rt - TEXT_BSS_DELTA; -+ if (rt > pcrelative_buff_addr(0) && -+ rt < pcrelative_buff_addr(RELOC_BUFFER_SIZE)) -+ rt = 0xffff0098; -+} -+static void test_plq_off0_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +0(0), 1" ); -+ PAD_ORI -+} -+static void test_plq_off8_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +8(0), 1" ); -+ PAD_ORI -+} -+static void test_plq_off16_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +16(0), 1" ); -+ PAD_ORI -+} -+static void test_plq_off32_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +32(0), 1" ); -+ PAD_ORI -+} -+static void test_plq_off48_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +48(0), 1" ); -+ PAD_ORI -+} -+static void test_plq_off64_R1 (void) { -+ PAD_ORI -+ __asm__ __volatile__ ("plq 26, +64(0), 1" ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_pstq_off0_R1 (void) { -+ __asm__ __volatile__ ("pstq 24, -0x1f400+0(0), 1" ); -+} -+static void test_pstq_off8_R1 (void) { -+ __asm__ __volatile__ ("pstq 24, -0x1f400+8(0), 1" ); -+} -+static void test_pstq_off16_R1 (void) { -+ __asm__ __volatile__ ("pstq 24, -0x1f400+16(0), 1" ); -+} -+static void test_pstq_off32_R1 (void) { -+ __asm__ __volatile__ ("pstq 24, -0x1f400+32(0), 1" ); -+} -+static void test_pstq_off64_R1 (void) { -+ __asm__ __volatile__ ("pstq 24, -0x1f400+64(0), 1" ); -+} -+ -+static test_list_t testgroup_generic[] = { -+ { &test_paddi_0_R1, "paddi 0_R1", "RT,RA,SI,R"}, /* bcwp */ -+ { &test_paddi_12_R1, "paddi 12_R1", "RT,RA,SI,R"}, /* bcwp */ -+ { &test_paddi_48_R1, "paddi 48_R1", "RT,RA,SI,R"}, /* bcwp */ -+ { &test_paddi_98_R1, "paddi 98_R1", "RT,RA,SI,R"}, /* bcwp */ -+ { &test_plbz_off0_R1, "plbz off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plbz_off8_R1, "plbz off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plbz_off16_R1, "plbz off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plbz_off32_R1, "plbz off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plbz_off64_R1, "plbz off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_pld_off0_R1, "pld off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_pld_off8_R1, "pld off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_pld_off16_R1, "pld off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_pld_off32_R1, "pld off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_pld_off64_R1, "pld off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plha_off0_R1, "plha off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plha_off8_R1, "plha off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plha_off16_R1, "plha off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plha_off32_R1, "plha off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plha_off64_R1, "plha off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plhz_off0_R1, "plhz off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plhz_off8_R1, "plhz off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plhz_off16_R1, "plhz off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plhz_off32_R1, "plhz off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plhz_off64_R1, "plhz off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plq_off0_R1, "plq off0_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plq_off8_R1, "plq off8_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plq_off16_R1, "plq off16_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plq_off32_R1, "plq off32_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plq_off48_R1, "plq off48_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plq_off64_R1, "plq off64_R1", "RTp,D(RA),R"}, /* bcwp */ -+ { &test_plwa_off0_R1, "plwa off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwa_off8_R1, "plwa off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwa_off16_R1, "plwa off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwa_off32_R1, "plwa off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwa_off64_R1, "plwa off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwz_off0_R1, "plwz off0_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwz_off8_R1, "plwz off8_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwz_off16_R1, "plwz off16_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwz_off32_R1, "plwz off32_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plwz_off64_R1, "plwz off64_R1", "RT,D(RA),R"}, /* bcwp */ -+ { &test_plxvp_off0_R1, "plxvp off0_R1", "XTp,D(RA),R"}, /* bcwp */ -+ { &test_plxvp_off8_R1, "plxvp off8_R1", "XTp,D(RA),R"}, /* bcwp */ -+ { &test_plxvp_off16_R1, "plxvp off16_R1", "XTp,D(RA),R"}, /* bcwp */ -+ { &test_plxvp_off24_R1, "plxvp off24_R1", "XTp,D(RA),R"}, /* bcwp */ -+ { &test_plxvp_off32_R1, "plxvp off32_R1", "XTp,D(RA),R"}, /* bcwp */ -+ { &test_pstb_off0_R1, "pstb off0_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstb_off8_R1, "pstb off8_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstb_off16_R1, "pstb off16_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstb_off32_R1, "pstb off32_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstd_off0_R1, "pstd off0_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstd_off8_R1, "pstd off8_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstd_off16_R1, "pstd off16_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstd_off32_R1, "pstd off32_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_psth_off0_R1, "psth off0_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_psth_off8_R1, "psth off8_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_psth_off16_R1, "psth off16_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_psth_off32_R1, "psth off32_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstq_off0_R1, "pstq off0_R1", "RSp,D(RA),R"}, /* bcwp */ -+ { &test_pstq_off8_R1, "pstq off8_R1", "RSp,D(RA),R"}, /* bcwp */ -+ { &test_pstq_off16_R1, "pstq off16_R1", "RSp,D(RA),R"}, /* bcwp */ -+ { &test_pstq_off32_R1, "pstq off32_R1", "RSp,D(RA),R"}, /* bcwp */ -+ { &test_pstq_off64_R1, "pstq off64_R1", "RSp,D(RA),R"}, /* bcwp */ -+ { &test_pstw_off0_R1, "pstw off0_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstw_off8_R1, "pstw off8_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstw_off16_R1, "pstw off16_R1", "RS,D(RA),R"}, /* bcwp */ -+ { &test_pstw_off32_R1, "pstw off32_R1", "RS,D(RA),R"}, /* bcwp */ -+ { NULL, NULL }, -+}; -+ -+/* Allow skipping of tests. */ -+unsigned long test_count=0xffff; -+unsigned long skip_count=0; -+unsigned long setup_only=0; -+ -+/* Set up a setjmp/longjmp to gently handle our SIGILLs and SIGSEGVs. */ -+static jmp_buf mybuf; -+ -+/* This (testfunction_generic) is meant to handle all of the instruction -+ variations. The helpers set up the register and iterator values -+ as is appropriate for the instruction being tested. */ -+static void testfunction_generic (const char* instruction_name, -+ test_func_t test_function, -+ unsigned int ignore_flags, -+ char * cur_form) { -+ -+ identify_form_components (instruction_name , cur_form); -+ debug_show_form (instruction_name, cur_form); -+ set_up_iterators (); -+ debug_show_iter_ranges (); -+ initialize_buffer (0); -+ init_pcrelative_write_target (); -+ debug_dump_buffer (); -+ -+ for (vrai = a_start; vrai < a_iters ; vrai+=a_inc) { -+ for (vrbi = b_start; vrbi < b_iters ; vrbi+=b_inc) { -+ for (vrci = c_start; vrci < c_iters ; vrci+=c_inc) { -+ for (vrmi = m_start; (vrmi < m_iters) ; vrmi+=m_inc) { -+ CHECK_OVERRIDES -+ debug_show_current_iteration (); -+ // Be sure to initialize the target registers first. -+ initialize_target_registers (); -+ initialize_source_registers (); -+ printf ("%s", instruction_name); -+ print_register_header (); -+ printf( " =>"); fflush (stdout); -+ if (!setup_only) { -+ if (enable_setjmp) { -+ if ( setjmp ( mybuf ) ) { -+ printf("signal tripped. (FIXME)\n"); -+ continue; -+ } -+ } -+ (*test_function) (); -+ } -+ print_register_footer (); -+ print_result_buffer (); -+ print_pcrelative_write_target (); -+ printf ("\n"); -+ } -+ } -+ } -+ } -+} -+ -+void mykillhandler ( int x ) { longjmp (mybuf, 1); } -+void mysegvhandler ( int x ) { longjmp (mybuf, 1); } -+ -+static void do_tests ( void ) -+{ -+ int groupcount; -+ char * cur_form; -+ test_group_t group_function = &testfunction_generic; -+ test_list_t *tests = testgroup_generic; -+ -+ struct sigaction kill_action, segv_action; -+ struct sigaction old_kill_action, old_segv_action; -+ if (enable_setjmp) { -+ kill_action.sa_handler = mykillhandler; -+ segv_action.sa_handler = mysegvhandler; -+ sigemptyset ( &kill_action.sa_mask ); -+ sigemptyset ( &segv_action.sa_mask ); -+ kill_action.sa_flags = SA_NODEFER; -+ segv_action.sa_flags = SA_NODEFER; -+ sigaction ( SIGILL, &kill_action, &old_kill_action); -+ sigaction ( SIGSEGV, &segv_action, &old_segv_action); -+ } -+ -+ for (groupcount = 0; tests[groupcount].name != NULL; groupcount++) { -+ cur_form = strdup(tests[groupcount].form); -+ current_test = tests[groupcount]; -+ identify_instruction_by_func_name (current_test.name); -+ if (groupcount < skip_count) continue; -+ if (verbose) printf("Test #%d ,", groupcount); -+ if (verbose > 1) printf(" instruction %s (v=%d)", current_test.name, verbose); -+ (*group_function) (current_test.name, current_test.func, 0, cur_form ); -+ printf ("\n"); -+ if (groupcount >= (skip_count+test_count)) break; -+ } -+ if (debug_show_labels) printf("\n"); -+ printf ("All done. Tested %d different instruction groups\n", groupcount); -+} -+ -+static void usage (void) -+{ -+ fprintf(stderr, -+ "Usage: test_isa_XXX [OPTIONS]\n" -+ "\t-h: display this help and exit\n" -+ "\t-v: increase verbosity\n" -+ "\t-a : limit number of a-iterations to \n" -+ "\t-b : limit number of b-iterations to \n" -+ "\t-c : limit number of c-iterations to \n" -+ "\t-n : limit to this number of tests.\n" -+ "\t-r : run only test # \n" -+ "\t\n" -+ "\t-j :enable setjmp to recover from illegal insns. \n" -+ "\t-m :(dev only?) lock VRM value to zero.\n" -+ "\t-z :(dev only?) lock MC value to zero.\n" -+ "\t-p :(dev only?) disable prefix instructions\n" -+ "\t-s : skip tests \n" -+ "\t-c : stop after running # of tests \n" -+ "\t-f : Do the test setup but do not actually execute the test instruction. \n" -+ ); -+} -+ -+int main (int argc, char **argv) -+{ -+ int c; -+ while ((c = getopt(argc, argv, "dhjvmpfzs:a:b:c:n:r:")) != -1) { -+ switch (c) { -+ case 'h': -+ usage(); -+ return 0; -+ -+ case 'v': -+ verbose++; -+ break; -+ -+ /* Options related to limiting the test iterations. */ -+ case 'a': -+ a_limit=atoi (optarg); -+ printf ("limiting a-iters to %ld.\n", a_limit); -+ break; -+ case 'b': -+ b_limit=atoi (optarg); -+ printf ("limiting b-iters to %ld.\n", b_limit); -+ break; -+ case 'c': -+ c_limit=atoi (optarg); -+ printf ("limiting c-iters to %ld.\n", c_limit); -+ break; -+ case 'n': // run this number of tests. -+ test_count=atoi (optarg); -+ printf ("limiting to %ld tests\n", test_count); -+ break; -+ case 'r': // run just test #. -+ skip_count=atoi (optarg); -+ test_count=0; -+ if (verbose) printf("Running test number %ld\n", skip_count); -+ break; -+ case 's': // skip this number of tests. -+ skip_count=atoi (optarg); -+ printf ("skipping %ld tests\n", skip_count); -+ break; -+ -+ /* debug options. */ -+ case 'd': -+ dump_tables=1; -+ printf("DEBUG:dump_tables.\n"); -+ break; -+ case 'f': -+ setup_only=1; -+ printf("DEBUG:setup_only.\n"); -+ break; -+ case 'j': -+ enable_setjmp=1; -+ printf ("DEBUG:setjmp enabled.\n"); -+ break; -+ case 'm': -+ vrm_override=1; -+ printf ("DEBUG:vrm override enabled.\n"); -+ break; -+ case 'p': -+ prefix_override=1; -+ printf ("DEBUG:prefix override enabled.\n"); -+ break; -+ case 'z': -+ mc_override=1; -+ printf ("DEBUG:MC override enabled.\n"); -+ break; -+ default: -+ usage(); -+ fprintf(stderr, "Unknown argument: '%c'\n", c); -+ } -+ } -+ -+ generic_prologue (); -+ build_vsx_table (); -+ build_args_table (); -+ build_float_vsx_tables (); -+ -+ if (dump_tables) { -+ dump_float_vsx_tables (); -+ dump_vsxargs (); -+ } -+ -+ do_tests (); -+ -+ return 0; -+} -+ -+#else // HAS_ISA_3_1 -+int main (int argc, char **argv) -+{ -+ printf("NO ISA 3.1 SUPPORT\n"); -+ return 0; -+} -+#endif -diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp b/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_RT.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp b/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp -new file mode 100644 -index 000000000..87594748f ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_RT.stdout.exp -@@ -0,0 +1,138 @@ -+paddi 0_R1 => ffff0000 -+ -+paddi 12_R1 => ffff0012 -+ -+paddi 48_R1 => ffff0048 -+ -+paddi 98_R1 => ffff0098 -+ -+plbz off0_R1 => 1a -+ -+plbz off8_R1 => 1f -+ -+plbz off16_R1 => 1f -+ -+plbz off32_R1 => 1b -+ -+plbz off64_R1 => 1b -+ -+pld off0_R1 => e740000004100000 -+ -+pld off8_R1 => 4e800020 -+ -+pld off16_R1 => 6318001862f7001f -+ -+pld off32_R1 => 639c001c637b001b -+ -+pld off64_R1 => 639c001c637b001b -+ -+plha off0_R1 => 1a -+ -+plha off8_R1 => 1f -+ -+plha off16_R1 => 1f -+ -+plha off32_R1 => 1b -+ -+plha off64_R1 => 1b -+ -+plhz off0_R1 => 1a -+ -+plhz off8_R1 => 1f -+ -+plhz off16_R1 => 1f -+ -+plhz off32_R1 => 1b -+ -+plhz off64_R1 => 1b -+ -+plq off0_R1 => e34000000410001a 62d6001662b5001f -+ -+plq off8_R1 => 62d6001662b5001f 6318001862f7001f -+ -+plq off16_R1 => 6318001862f7001f 635a001a6339001b -+ -+plq off32_R1 => 639c001c637b001b 4e80003b -+ -+plq off48_R1 => 1a 62d6001662b5001f -+ -+plq off64_R1 => 639c001c637b001b 4e80003b -+ -+plwa off0_R1 => 4100000 -+ -+plwa off8_R1 => 4e800020 -+ -+plwa off16_R1 => 0 -+ -+plwa off32_R1 => 637b001b -+ -+plwa off64_R1 => 637b001b -+ -+plwz off0_R1 => 6100000 -+ -+plwz off8_R1 => 4e800020 -+ -+plwz off16_R1 => 0 -+ -+plwz off32_R1 => 637b001b -+ -+plwz off64_R1 => 637b001b -+ -+plxvp off0_R1 => 6318001862f70017 635a001a63390019 ea80000004100000 62d6001662b50015 -+ -+plxvp off8_R1 => 635a001a63390019 639c001c637b001b 62d6001662b50015 6318001862f70017 -+ -+plxvp off16_R1 => 639c001c637b001b 000000004e800020 6318001862f70017 635a001a63390019 -+ -+plxvp off24_R1 => 000000004e800020 0000000000000000 635a001a63390019 639c001c637b001b -+ -+plxvp off32_R1 => 0000000000000000 62d6001662b50015 639c001c637b001b 000000004e800020 -+ -+pstb off0_R1 102030405060708 => 08 -+ -+pstb off8_R1 102030405060708 => 08 -+ -+pstb off16_R1 102030405060708 => 08 -+ -+pstb off32_R1 102030405060708 => 08 -+ -+pstd off0_R1 102030405060708 => 0102030405060708 -+ -+pstd off8_R1 102030405060708 => 0102030405060708 -+ -+pstd off16_R1 102030405060708 => 0102030405060708 -+ -+pstd off32_R1 102030405060708 => 0102030405060708 -+ -+psth off0_R1 102030405060708 => 0708 -+ -+psth off8_R1 102030405060708 => 0708 -+ -+psth off16_R1 102030405060708 => 0708 -+ -+psth off32_R1 102030405060708 => 0708 -+ -+pstq off0_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+pstq off0_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+ -+pstq off8_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+pstq off8_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+ -+pstq off16_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+pstq off16_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+ -+pstq off32_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+pstq off32_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+ -+pstq off64_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+pstq off64_R1 102030405060708 a5b4c3d2e1f00918 => 0102030405060708 a5b4c3d2e1f00918 -+ -+pstw off0_R1 102030405060708 => 05060708 -+ -+pstw off8_R1 102030405060708 => 05060708 -+ -+pstw off16_R1 102030405060708 => 05060708 -+ -+pstw off32_R1 102030405060708 => 05060708 -+ -+All done. Tested 66 different instruction groups -diff --git a/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest b/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest -new file mode 100644 -index 000000000..61d7f65a1 ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_RT.vgtest -@@ -0,0 +1,2 @@ -+prereq: ../../../tests/check_ppc64_auxv_cap arch_3_1 -+prog: test_isa_3_1_R1_RT -diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.c b/none/tests/ppc64/test_isa_3_1_R1_XT.c -new file mode 100644 -index 000000000..58885b8d3 ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_XT.c -@@ -0,0 +1,534 @@ -+/* -+ * Valgrind testcase for PowerPC ISA 3.1 -+ * -+ * Copyright (C) 2019-2020 Will Schmidt -+ * -+ * 64bit build: -+ * gcc -Winline -Wall -g -O -mregnames -maltivec -m64 -+ */ -+ -+/* -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of the -+ * License, or (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+ -+#include -+#ifdef HAS_ISA_3_1 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+/* Condition Register fields. -+ These are used to capture the condition register values immediately after -+ the instruction under test is executed. This is done to help prevent other -+ test overhead (switch statements, result compares, etc) from disturbing -+ the test case results. */ -+unsigned long current_cr; -+unsigned long current_fpscr; -+ -+struct test_list_t current_test; -+ -+#include "isa_3_1_helpers.h" -+static void test_pstxvp_off0_R1 (void) { -+ __asm__ __volatile__ ("pstxvp 20, -0x1f400+0(0),1"); -+} -+static void test_pstxvp_off16_R1 (void) { -+ __asm__ __volatile__ ("pstxvp 20, -0x1f400+16(0),1"); -+} -+static void test_pstxvp_off32_R1 (void) { -+ __asm__ __volatile__ ("pstxvp 20, -0x1f400+32(0),1"); -+} -+static void test_pstxvp_off48_R1 (void) { -+ __asm__ __volatile__ ("pstxvp 20, -0x1f400+48(0),1"); -+} -+static void test_plfd_64_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +64(0), 1"); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plfd_32_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +32(0), 1"); -+ PAD_ORI -+} -+static void test_plfd_16_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +16(0), 1"); -+ PAD_ORI -+} -+static void test_plfd_8_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +8(0), 1"); -+ PAD_ORI -+} -+static void test_plfd_4_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +4(0), 1"); -+ PAD_ORI -+} -+static void test_plfd_0_R1 (void) { -+ __asm__ __volatile__ ("plfd 28, +0(0), 1"); -+ PAD_ORI -+} -+static void test_plfs_64_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +64(0), 1"); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plfs_32_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +32(0), 1"); -+ PAD_ORI -+} -+static void test_plfs_16_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +16(0), 1"); -+ PAD_ORI -+} -+static void test_plfs_8_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +8(0), 1"); -+ PAD_ORI -+} -+static void test_plfs_4_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +4(0), 1"); -+ PAD_ORI -+} -+static void test_plfs_0_R1 (void) { -+ __asm__ __volatile__ ("plfs 28, +0(0), 1"); -+ PAD_ORI -+} -+static void test_pstfd_32_R1 (void) { -+ __asm__ __volatile__ ("pstfd 26, -0x1f400+32(0), 1"); -+} -+static void test_pstfd_16_R1 (void) { -+ __asm__ __volatile__ ("pstfd 26, -0x1f400+16(0), 1"); -+} -+static void test_pstfd_8_R1 (void) { -+ __asm__ __volatile__ ("pstfd 26, -0x1f400+8(0), 1"); -+} -+static void test_pstfd_4_R1 (void) { -+ __asm__ __volatile__ ("pstfd 26, -0x1f400+4(0), 1"); -+} -+static void test_pstfd_0_R1 (void) { -+ __asm__ __volatile__ ("pstfd 26, -0x1f400+0(0), 1"); -+} -+static void test_pstfs_32_R1 (void) { -+ __asm__ __volatile__ ("pstfs 26, -0x1f400+32(0), 1"); -+} -+static void test_pstfs_16_R1 (void) { -+ __asm__ __volatile__ ("pstfs 26, -0x1f400+16(0), 1"); -+} -+static void test_pstfs_8_R1 (void) { -+ __asm__ __volatile__ ("pstfs 26, -0x1f400+8(0), 1"); -+} -+static void test_pstfs_4_R1 (void) { -+ __asm__ __volatile__ ("pstfs 26, -0x1f400+4(0), 1"); -+} -+static void test_pstfs_0_R1 (void) { -+ __asm__ __volatile__ ("pstfs 26, -0x1f400+0(0), 1"); -+} -+static void test_plxsd_64_R1 (void) { -+ __asm__ __volatile__ ("plxsd %0, +64(0), 1" : "=v" (vrt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plxsd_32_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; plxsd %0, +32(0), 1" : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxsd_16_R1 (void) { -+ __asm__ __volatile__ ("plxsd %0, +16(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxsd_8_R1 (void) { -+ __asm__ __volatile__ ("plxsd %0, +8(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxsd_4_R1 (void) { -+ __asm__ __volatile__ ("plxsd %0, +4(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxsd_0_R1 (void) { -+ __asm__ __volatile__ ("plxsd %0, +0(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxssp_64_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +64(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+ PAD_ORI -+} -+static void test_plxssp_32_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +32(0), 1; pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxssp_16_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +16(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxssp_8_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +8(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxssp_4_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +4(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+static void test_plxssp_0_R1 (void) { -+ __asm__ __volatile__ ("plxssp %0, +0(0), 1; pnop;pnop;pnop; " : "=v" (vrt) ); -+ PAD_ORI -+} -+/* Follow the short-range plxv instructions with nop in order to -+ pad out subsequent instructions. When written there are found -+ to be fluctuations in the instructions to store the result back -+ into the target variable. (pla,pstxv...). -+ */ -+static void test_plxv_16_R1 (void) { -+ __asm__ __volatile__ ("plxv %x0, +16(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); -+ PAD_ORI -+} -+static void test_plxv_8_R1 (void) { -+ __asm__ __volatile__ ("plxv %x0, +8(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); -+ PAD_ORI -+} -+static void test_plxv_4_R1 (void) { -+ __asm__ __volatile__ ("plxv %x0, +4(0), 1; pnop;pnop;pnop;" : "=wa" (vec_xt) ); -+ PAD_ORI -+} -+static void test_plxv_0_R1 (void) { -+ __asm__ __volatile__ ("plxv %x0, +0(0), 1; pnop;pnop;pnop; " : "=wa" (vec_xt) ); -+ PAD_ORI -+} -+static void test_pstxsd_64_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+64(0), 1" ); -+} -+static void test_pstxsd_32_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+32(0), 1" ); -+} -+static void test_pstxsd_16_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+16(0), 1" ); -+} -+static void test_pstxsd_8_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+8(0), 1" ); -+} -+static void test_pstxsd_4_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+4(0), 1" ); -+} -+static void test_pstxsd_0_R1 (void) { -+ __asm__ __volatile__ (".align 2 ; pstxsd 22, -0x1f400+0(0), 1" ); -+} -+static void test_pstxssp_64_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+64(0), 1" ); -+} -+static void test_pstxssp_32_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+32(0), 1"); -+} -+static void test_pstxssp_16_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+16(0), 1"); -+} -+static void test_pstxssp_8_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+8(0), 1"); -+} -+static void test_pstxssp_4_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+4(0), 1"); -+} -+static void test_pstxssp_0_R1 (void) { -+ __asm__ __volatile__ ("pstxssp 22, -0x1f400+0(0), 1"); -+} -+static void test_pstxv_16_R1 (void) { -+ __asm__ __volatile__ ("pstxv %x0, -0x1f400+16(0), 1" :: "wa" (vec_xs)); -+} -+static void test_pstxv_8_R1 (void) { -+ __asm__ __volatile__ ("pstxv %x0, -0x1f400+8(0), 1" :: "wa" (vec_xs)); -+} -+static void test_pstxv_4_R1 (void) { -+ __asm__ __volatile__ ("pstxv %x0, -0x1f400+4(0), 1" :: "wa" (vec_xs)); -+} -+static void test_pstxv_0_R1 (void) { -+ __asm__ __volatile__ ("pstxv %x0, -0x1f400+0(0), 1" :: "wa" (vec_xs)); -+} -+ -+static test_list_t testgroup_generic[] = { -+ { &test_plfd_0_R1, "plfd 0_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfd_4_R1, "plfd 4_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfd_8_R1, "plfd 8_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfd_16_R1, "plfd 16_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfd_32_R1, "plfd 32_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfd_64_R1, "plfd 64_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_0_R1, "plfs 0_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_4_R1, "plfs 4_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_8_R1, "plfs 8_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_16_R1, "plfs 16_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_32_R1, "plfs 32_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plfs_64_R1, "plfs 64_R1", "FRT,D(RA),R"}, /* bcwp */ -+ { &test_plxsd_0_R1, "plxsd 0_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxsd_4_R1, "plxsd 4_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxsd_8_R1, "plxsd 8_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxsd_16_R1, "plxsd 16_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxsd_32_R1, "plxsd 32_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxsd_64_R1, "plxsd 64_R1", "VRT,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_plxssp_0_R1, "plxssp 0_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxssp_4_R1, "plxssp 4_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxssp_8_R1, "plxssp 8_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxssp_16_R1, "plxssp 16_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxssp_32_R1, "plxssp 32_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxssp_64_R1, "plxssp 64_R1", "VRT,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_plxv_0_R1, "plxv 0_R1", "XT,D(RA),R"}, /* bcwp */ -+ { &test_plxv_4_R1, "plxv 4_R1", "XT,D(RA),R"}, /* bcwp */ -+ { &test_plxv_8_R1, "plxv 8_R1", "XT,D(RA),R"}, /* bcwp */ -+ { &test_plxv_16_R1, "plxv 16_R1", "XT,D(RA),R"}, /* bcwp */ -+ { &test_pstfd_0_R1, "pstfd 0_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_pstfd_4_R1, "pstfd 4_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_pstfd_8_R1, "pstfd 8_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_pstfd_16_R1, "pstfd 16_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_pstfd_32_R1, "pstfd 32_R1", "FRS,D(RA),R", 0b00110000}, /* bcwp */ -+ { &test_pstfs_0_R1, "pstfs 0_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_pstfs_4_R1, "pstfs 4_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_pstfs_8_R1, "pstfs 8_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_pstfs_16_R1, "pstfs 16_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_pstfs_32_R1, "pstfs 32_R1", "FRS,D(RA),R", 0b00001111}, /* bcwp */ -+ { &test_pstxsd_0_R1, "pstxsd 0_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxsd_4_R1, "pstxsd 4_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxsd_8_R1, "pstxsd 8_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxsd_16_R1, "pstxsd 16_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxsd_32_R1, "pstxsd 32_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxsd_64_R1, "pstxsd 64_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_0_R1, "pstxssp 0_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_4_R1, "pstxssp 4_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_8_R1, "pstxssp 8_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_16_R1, "pstxssp 16_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_32_R1, "pstxssp 32_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxssp_64_R1, "pstxssp 64_R1", "VRS,D(RA),R"}, /* bcwp */ -+ { &test_pstxvp_off0_R1, "pstxvp off0_R1", "XSp,D(RA),R"}, /* bcwp */ -+ { &test_pstxvp_off16_R1, "pstxvp off16_R1", "XSp,D(RA),R"}, /* bcwp */ -+ { &test_pstxvp_off32_R1, "pstxvp off32_R1", "XSp,D(RA),R"}, /* bcwp */ -+ { &test_pstxvp_off48_R1, "pstxvp off48_R1", "XSp,D(RA),R"}, /* bcwp */ -+ { &test_pstxv_0_R1, "pstxv 0_R1", "XS,D(RA),R"}, /* bcwp */ -+ { &test_pstxv_4_R1, "pstxv 4_R1", "XS,D(RA),R"}, /* bcwp */ -+ { &test_pstxv_8_R1, "pstxv 8_R1", "XS,D(RA),R"}, /* bcwp */ -+ { &test_pstxv_16_R1, "pstxv 16_R1", "XS,D(RA),R"}, /* bcwp */ -+ { NULL, NULL }, -+}; -+ -+/* Allow skipping of tests. */ -+unsigned long test_count=0xffff; -+unsigned long skip_count=0; -+unsigned long setup_only=0; -+ -+/* Set up a setjmp/longjmp to gently handle our SIGILLs and SIGSEGVs. */ -+static jmp_buf mybuf; -+ -+/* This (testfunction_generic) is meant to handle all of the instruction -+ variations. The helpers set up the register and iterator values -+ as is appropriate for the instruction being tested. */ -+static void testfunction_generic (const char* instruction_name, -+ test_func_t test_function, -+ unsigned int ignore_flags, -+ char * cur_form) { -+ -+ identify_form_components (instruction_name , cur_form); -+ debug_show_form (instruction_name, cur_form); -+ set_up_iterators (); -+ debug_show_iter_ranges (); -+ initialize_buffer (0); -+ init_pcrelative_write_target (); -+ debug_dump_buffer (); -+ -+ for (vrai = a_start; vrai < a_iters ; vrai+=a_inc) { -+ for (vrbi = b_start; vrbi < b_iters ; vrbi+=b_inc) { -+ for (vrci = c_start; vrci < c_iters ; vrci+=c_inc) { -+ for (vrmi = m_start; (vrmi < m_iters) ; vrmi+=m_inc) { -+ CHECK_OVERRIDES -+ debug_show_current_iteration (); -+ // Be sure to initialize the target registers first. -+ initialize_target_registers (); -+ initialize_source_registers (); -+ vec_xa[0]=0x1234; -+ vec_xa[1]=0x4567; -+ printf ("%s", instruction_name); -+ print_register_header (); -+ printf( " =>"); fflush (stdout); -+ if (!setup_only) { -+ if (enable_setjmp) { -+ if ( setjmp ( mybuf ) ) { -+ printf("signal tripped. (FIXME)\n"); -+ continue; -+ } -+ } -+ (*test_function) (); -+ } -+ print_register_footer (); -+ print_result_buffer (); -+ print_pcrelative_write_target (); -+ printf ("\n"); -+ } -+ } -+ } -+ } -+} -+ -+void mykillhandler ( int x ) { longjmp (mybuf, 1); } -+void mysegvhandler ( int x ) { longjmp (mybuf, 1); } -+ -+static void do_tests ( void ) -+{ -+ int groupcount; -+ char * cur_form; -+ test_group_t group_function = &testfunction_generic; -+ test_list_t *tests = testgroup_generic; -+ -+ struct sigaction kill_action, segv_action; -+ struct sigaction old_kill_action, old_segv_action; -+ if (enable_setjmp) { -+ kill_action.sa_handler = mykillhandler; -+ segv_action.sa_handler = mysegvhandler; -+ sigemptyset ( &kill_action.sa_mask ); -+ sigemptyset ( &segv_action.sa_mask ); -+ kill_action.sa_flags = SA_NODEFER; -+ segv_action.sa_flags = SA_NODEFER; -+ sigaction ( SIGILL, &kill_action, &old_kill_action); -+ sigaction ( SIGSEGV, &segv_action, &old_segv_action); -+ } -+ -+ for (groupcount = 0; tests[groupcount].name != NULL; groupcount++) { -+ cur_form = strdup(tests[groupcount].form); -+ current_test = tests[groupcount]; -+ identify_instruction_by_func_name (current_test.name); -+ if (groupcount < skip_count) continue; -+ if (verbose) printf("Test #%d ,", groupcount); -+ if (verbose > 1) printf(" instruction %s (v=%d)", current_test.name, verbose); -+ (*group_function) (current_test.name, current_test.func, 0, cur_form ); -+ printf ("\n"); -+ if (groupcount >= (skip_count+test_count)) break; -+ } -+ if (debug_show_labels) printf("\n"); -+ printf ("All done. Tested %d different instruction groups\n", groupcount); -+} -+ -+static void usage (void) -+{ -+ fprintf(stderr, -+ "Usage: test_isa_XXX [OPTIONS]\n" -+ "\t-h: display this help and exit\n" -+ "\t-v: increase verbosity\n" -+ "\t-a : limit number of a-iterations to \n" -+ "\t-b : limit number of b-iterations to \n" -+ "\t-c : limit number of c-iterations to \n" -+ "\t-n : limit to this number of tests.\n" -+ "\t-r : run only test # \n" -+ "\t\n" -+ "\t-j :enable setjmp to recover from illegal insns. \n" -+ "\t-m :(dev only?) lock VRM value to zero.\n" -+ "\t-z :(dev only?) lock MC value to zero.\n" -+ "\t-p :(dev only?) disable prefix instructions\n" -+ "\t-s : skip tests \n" -+ "\t-c : stop after running # of tests \n" -+ "\t-f : Do the test setup but do not actually execute the test instruction. \n" -+ ); -+} -+ -+int main (int argc, char **argv) -+{ -+ int c; -+ while ((c = getopt(argc, argv, "dhjvmpfzs:a:b:c:n:r:")) != -1) { -+ switch (c) { -+ case 'h': -+ usage(); -+ return 0; -+ -+ case 'v': -+ verbose++; -+ break; -+ -+ /* Options related to limiting the test iterations. */ -+ case 'a': -+ a_limit=atoi (optarg); -+ printf ("limiting a-iters to %ld.\n", a_limit); -+ break; -+ case 'b': -+ b_limit=atoi (optarg); -+ printf ("limiting b-iters to %ld.\n", b_limit); -+ break; -+ case 'c': -+ c_limit=atoi (optarg); -+ printf ("limiting c-iters to %ld.\n", c_limit); -+ break; -+ case 'n': // run this number of tests. -+ test_count=atoi (optarg); -+ printf ("limiting to %ld tests\n", test_count); -+ break; -+ case 'r': // run just test #. -+ skip_count=atoi (optarg); -+ test_count=0; -+ if (verbose) printf("Running test number %ld\n", skip_count); -+ break; -+ case 's': // skip this number of tests. -+ skip_count=atoi (optarg); -+ printf ("skipping %ld tests\n", skip_count); -+ break; -+ -+ /* debug options. */ -+ case 'd': -+ dump_tables=1; -+ printf("DEBUG:dump_tables.\n"); -+ break; -+ case 'f': -+ setup_only=1; -+ printf("DEBUG:setup_only.\n"); -+ break; -+ case 'j': -+ enable_setjmp=1; -+ printf ("DEBUG:setjmp enabled.\n"); -+ break; -+ case 'm': -+ vrm_override=1; -+ printf ("DEBUG:vrm override enabled.\n"); -+ break; -+ case 'p': -+ prefix_override=1; -+ printf ("DEBUG:prefix override enabled.\n"); -+ break; -+ case 'z': -+ mc_override=1; -+ printf ("DEBUG:MC override enabled.\n"); -+ break; -+ default: -+ usage(); -+ fprintf(stderr, "Unknown argument: '%c'\n", c); -+ } -+ } -+ -+ generic_prologue (); -+ build_vsx_table (); -+ build_args_table (); -+ build_float_vsx_tables (); -+ -+ if (dump_tables) { -+ dump_float_vsx_tables (); -+ dump_vsxargs (); -+ } -+ -+ do_tests (); -+ -+ return 0; -+} -+ -+#else // HAS_ISA_3_1 -+int main (int argc, char **argv) -+{ -+ printf("NO ISA 3.1 SUPPORT\n"); -+ return 0; -+} -+#endif -diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp b/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp -new file mode 100644 -index 000000000..139597f9c ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_XT.stderr.exp -@@ -0,0 +1,2 @@ -+ -+ -diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp b/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp -new file mode 100644 -index 000000000..48d591f4d ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_XT.stdout.exp -@@ -0,0 +1,127 @@ -+plfd 0_R1 =>_ -4.903986e+55 _ cb80000006100000, 0 -+ -+plfd 4_R1 =>_ 3.095878e+167 _ 62b50015cb800004, 0 -+ -+plfd 8_R1 =>_ 1.297320e+168 _ 62d6001662b50015, 0 -+ -+plfd 16_R1 =>_ 2.264413e+169 _ 6318001862f70017, 0 -+ -+plfd 32_R1 =>_ 6.763045e+171 _ 639c001c637b001b, 0 -+ -+plfd 64_R1 =>_ 6.763045e+171 _ 639c001c637b001b, 0 -+ -+plfs 0_R1 =>_ 2.708339e-35 _ 38c2000000000000, 0 -+ -+plfs 4_R1 =>_ -2.560001e+02 _ c070000080000000, 0 -+ -+plfs 8_R1 =>_ 1.669433e+21 _ 4456a002a0000000, 0 -+ -+plfs 16_R1 =>_ 2.278176e+21 _ 445ee002e0000000, 0 -+ -+plfs 32_R1 =>_ 4.630140e+21 _ 446f600360000000, 0 -+ -+plfs 64_R1 =>_ 4.630140e+21 _ 446f600360000000, 0 -+ -+plxsd 0_R1 => a800000004100000,0000000000000000 -5.07588375e-116 +Zero -+ -+plxsd 4_R1 => 7000000a8000004,0000000000000000 5.77662562e-275 +Zero -+ -+plxsd 8_R1 => 700000060000000,0000000000000000 5.77662407e-275 +Zero -+ -+plxsd 16_R1 => 7000000,0000000000000000 +Den +Zero -+ -+plxsd 32_R1 => 6339001963180018,0000000000000000 9.43505226e+169 +Zero -+ -+plxsd 64_R1 => 6339001963180018,0000000000000000 9.43505226e+169 +Zero -+ -+plxssp 0_R1 => 3882000000000000,0000000000000000 6.19888e-05 +Zero +Zero +Zero -+ -+plxssp 4_R1 => bd80000080000000,0000000000000000 -6.25000e-02 -Zero +Zero +Zero -+ -+plxssp 8_R1 => 38e0000000000000,0000000000000000 1.06812e-04 +Zero +Zero +Zero -+ -+plxssp 16_R1 => 38e0000000000000,0000000000000000 1.06812e-04 +Zero +Zero +Zero -+ -+plxssp 32_R1 => 445ac002c0000000,0000000000000000 8.75000e+02 -2.00000e+00 +Zero +Zero -+ -+plxssp 64_R1 => 446b400340000000,0000000000000000 9.41000e+02 2.00000e+00 +Zero +Zero -+ -+plxv 0_R1 => c800000004100000 7000000 -+ -+plxv 4_R1 => 7000000c8000004 700000000000000 -+ -+plxv 8_R1 => 7000000 7000000 -+ -+plxv 16_R1 => 7000000 7000000 -+ -+pstfd 0_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df -+pstfd 0_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef -+ -+pstfd 4_R1 43dfe000003fe000 43eff000000ff000 => e000003f e00043df -+pstfd 4_R1 43eff000000ff000 43efefffffcff000 => f000000f f00043ef -+ -+pstfd 8_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df -+pstfd 8_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef -+ -+pstfd 16_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df -+pstfd 16_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef -+ -+pstfd 32_R1 43dfe000003fe000 43eff000000ff000 => e000003fe00043df -+pstfd 32_R1 43eff000000ff000 43efefffffcff000 => f000000ff00043ef -+ -+pstfs 0_R1 000000005eff0000 000000005f7f8000 => 00005eff -+pstfs 0_R1 000000005f7f8000 000000005f7f8000 => 80005f7f -+ -+pstfs 4_R1 000000005eff0000 000000005f7f8000 => 00005eff -+pstfs 4_R1 000000005f7f8000 000000005f7f8000 => 80005f7f -+ -+pstfs 8_R1 000000005eff0000 000000005f7f8000 => 00005eff -+pstfs 8_R1 000000005f7f8000 000000005f7f8000 => 80005f7f -+ -+pstfs 16_R1 000000005eff0000 000000005f7f8000 => 00005eff -+pstfs 16_R1 000000005f7f8000 000000005f7f8000 => 80005f7f -+ -+pstfs 32_R1 000000005eff0000 000000005f7f8000 => 00005eff -+pstfs 32_R1 000000005f7f8000 000000005f7f8000 => 80005f7f -+ -+pstxsd 0_R1 => 0000000000000000 -+ -+pstxsd 4_R1 => 00000000 00000000 -+ -+pstxsd 8_R1 => 0000000000000000 -+ -+pstxsd 16_R1 => 0000000000000000 -+ -+pstxsd 32_R1 => 0000000000000000 -+ -+pstxsd 64_R1 => 0000000000000000 -+ -+pstxssp 0_R1 => 00000000 -+ -+pstxssp 4_R1 => 00000000 -+ -+pstxssp 8_R1 => 00000000 -+ -+pstxssp 16_R1 => 00000000 -+ -+pstxssp 32_R1 => 00000000 -+ -+pstxssp 64_R1 => 00000000 -+ -+pstxvp off0_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 -+ -+pstxvp off16_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 -+ -+pstxvp off32_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 -+ -+pstxvp off48_R1 0180055e0180077e 0080000e8080000e ff7ffffe7f7ffffe ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 077e0180055e0180 000e8080000e0080 -+ -+pstxv 0_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 -+ -+pstxv 4_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 -+ -+pstxv 8_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7ffffeff7f 00007f800000ff80 -+ -+pstxv 16_R1 ff7ffffe7f7ffffe,ff8000007f800000 => fffe7f7f fffeff7f00007f80 0000ff80 -+ -+All done. Tested 58 different instruction groups -diff --git a/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest b/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest -new file mode 100644 -index 000000000..7331aafad ---- /dev/null -+++ b/none/tests/ppc64/test_isa_3_1_R1_XT.vgtest -@@ -0,0 +1,2 @@ -+prereq: ../../../tests/check_ppc64_auxv_cap arch_3_1 -+prog: test_isa_3_1_R1_XT -diff --git a/none/tests/ppc64/test_isa_3_1_common.c b/none/tests/ppc64/test_isa_3_1_common.c -index 7c3dc6f00..b3320277b 100644 ---- a/none/tests/ppc64/test_isa_3_1_common.c -+++ b/none/tests/ppc64/test_isa_3_1_common.c -@@ -134,11 +134,13 @@ bool uses_acc_vsrs; - bool uses_pmsk; - bool uses_buffer; // Buffer related. - bool uses_load_buffer, uses_store_buffer, uses_any_buffer; -+bool updates_byte, updates_halfword, updates_word; // output helpers. - bool uses_quad; - unsigned long output_mask; // Output field special handling. - bool instruction_is_sp, instruction_is_sp_estimate; - bool instruction_is_dp, instruction_is_dp_estimate; - bool instruction_is_b16; -+bool instruction_is_relative; - - unsigned long long min (unsigned long long a, unsigned long long b) { - if ( a < b ) -@@ -236,6 +238,18 @@ void identify_form_components (const char *instruction_name, - (strncmp (instruction_name, "pmst", 4) == 0) || - (strncmp (instruction_name, "pst", 3) == 0) || - (strncmp (instruction_name, "st", 2) == 0)); -+ updates_byte = ( -+ (strncmp (instruction_name, "pstb", 4) == 0) ); -+ updates_halfword = ( -+ (strncmp (instruction_name, "psth", 4) == 0) || -+ (strncmp (instruction_name, "pstfs", 4) == 0) || -+ (strncmp (instruction_name, "pstxsd", 4) == 0) || -+ (strncmp (instruction_name, "pstxssp", 4) == 0) || -+ (strncmp (instruction_name, "pstxv", 4) == 0) || -+ (strncmp (instruction_name, "psfs", 4) == 0) ); -+ updates_word = ( -+ (strncmp (instruction_name, "pstw", 4) == 0) ); -+ - uses_any_buffer = (strstr (cur_form, "(RA)") != NULL); - uses_buffer = uses_any_buffer||uses_load_buffer||uses_store_buffer; - -@@ -268,6 +282,15 @@ void identify_form_components (const char *instruction_name, - instruction_is_b16 = ( current_test.mask & B16_MASK ); - } - -+/* Parse the provided function name to set assorted values. -+ In particular, set an indicator when the instruction test has -+ indicated it will run with R==1 that indicates it is a PC-relative -+ instruction. Those tests should all have "_R1" as part of -+ the function name. */ -+void identify_instruction_by_func_name(const char * function_name) { -+ instruction_is_relative = ( (strstr (function_name, "R1") != NULL)); -+} -+ - void display_form_components (char * cur_form) { - printf (" %s\n", cur_form); - printf ("Instruction form elements: "); -@@ -288,7 +311,7 @@ void display_form_components (char * cur_form) { - if (has_frbp) printf ("frbp "); - if (has_frs) printf ("frs "); - if (has_frsp) printf ("frsp "); -- if (has_frt) printf ("frt "); -+ if (has_frt) printf ("frt%s ",(instruction_is_relative)?"-raw":""); - if (has_frtp) printf ("frtp "); - if (has_xa) printf ("xa "); - if (has_xap) printf ("xap "); -@@ -298,6 +321,7 @@ void display_form_components (char * cur_form) { - if (has_xsp) printf ("xsp "); - if (has_xt) printf ("xt "); - if (has_xtp) printf ("xtp "); -+ if (instruction_is_relative) printf ("R==1 "); - if (uses_acc_src) printf ("AS "); - if (uses_acc_dest) printf ("AT "); - printf ("\n"); -@@ -991,6 +1015,107 @@ if (debug_show_values) printf (" buffer:"); - } - } - -+/* **** Reloc Buffer **************************************** */ -+/* Create a large buffer to be the destination for pc-relative -+ * writes. This test is built with linker hints in order -+ * to ensure our buffer, stored in the .bss section, is at a -+ * mostly known offset from the instructions being exercised, -+ * so a hardcoded offset from the PC (pc-relative) will be -+ * on-target. -+ * If there are significant reworks to the code, the bss or -+ * text sections, or the offsets used may need to change. -+ * -+ * The linker hints are specifically -Tbss and -Ttext. -+ * gcc foo.c test_isa_3_1_common.c -I../../../ -Wl,-Tbss 0x20000 -Wl,-Ttext 0x40000 -+ */ -+ /* RELOC_BUFFER_SIZE is defined to 0x1000 in isa_3_1_helpers.h */ -+#define RELOC_BUFFER_PATTERN 0x0001000100010001 -+volatile unsigned long long pcrelative_write_target[RELOC_BUFFER_SIZE]; -+ -+/* Initialize the buffer to known values. */ -+void init_pcrelative_write_target() { -+ int i; -+ for (i=0;i %llx\n",i,ref_value,curr_value); -+ if (updates_byte) { -+ for (z=0;z<8;z++) { -+ rshift=z*8; -+ if (verbose) printf("z:%d ",z); -+ init_token = (ref_value>>rshift) & 0xff; -+ curr_token = (curr_value>>rshift) & 0xff; -+ if (verbose) -+ printf("wms byte:: %llx -> %llx \n",init_token,curr_token); -+ if (init_token == curr_token && (updates_byte||updates_halfword||updates_word) ) { -+ printf("%2s"," "); -+ } else { -+ printf("%02llx",curr_token); -+ } -+ } -+ } -+ else if (updates_halfword) { -+ for (z=0;z<4;z++) { -+ rshift=z*16; -+ if (verbose) printf("z:%d ",z); -+ init_token = (ref_value>>rshift) & 0xffff; -+ curr_token = (curr_value>>rshift) & 0xffff; -+ if (verbose) -+ printf("wms half:: %llx -> %llx \n",init_token,curr_token); -+ if (init_token == curr_token) { -+ printf("%2s"," "); -+ } else { -+ printf("%04llx",curr_token); -+ } -+ } -+ } -+ else if (updates_word) { -+ for (z=0;z<2;z++) { -+ rshift=z*32; -+ if (verbose) printf("z:%d ",z); -+ init_token = (ref_value>>rshift) & 0xffffffff; -+ curr_token = (curr_value>>rshift) & 0xffffffff; -+ if (verbose) -+ printf("wms word:: %llx -> %llx \n",init_token,curr_token); -+ if (init_token == curr_token ) { -+ printf("%2s"," "); -+ } else { -+ printf("%08llx",curr_token); -+ } -+ } -+ } -+ else { -+ printf("%016llx ",curr_value); -+ } -+ } -+ } -+} -+ -+/* Helper that returns the address of the pcrelative_write_target buffer. -+ Due to variances in where the sections land in memory, this value is -+ used to normalize the results. (see paddi tests for usage). */ -+unsigned long long pcrelative_buff_addr(int x) { -+ /* Return the base address of the array. The base address will be -+ a function of the code load address. */ -+ return (unsigned long long) &pcrelative_write_target[x]; -+} -+ - void print_undefined () { - if (debug_show_values) - printf (" [Undef]"); -@@ -1339,7 +1464,7 @@ void print_frt () { - /* If the result is a dfp128 value, the dfp128 value is - contained in the frt, frtp values which are split across - a pair of VSRs. */ -- if (uses_dfp128_output) { -+ if (!instruction_is_relative && uses_dfp128_output) { - if (verbose) print_vsr (28); - if (verbose) print_vsr (29); - value1 = get_vsrhd_vs28 (); -@@ -1347,7 +1472,12 @@ void print_frt () { - dissect_dfp128_float (value1, value3); - } else { - if (debug_show_raw_values) generic_print_float_as_hex (frt); -- printf (" %e", frt); -+ if (instruction_is_relative) { -+ printf ("_ %e _ ", frt); -+ print_vsr (28); -+ } else { -+ printf (" %e", frt); -+ } - if (has_frtp) { - if (debug_show_raw_values) generic_print_float_as_hex (frtp); - printf (" %e", frtp); -@@ -1652,7 +1782,15 @@ void print_all() { - void print_register_header () { - post_test = 0; - if (debug_show_all_regs) print_all(); -- if (has_ra) print_ra (); -+ -+ if (has_ra) { -+ /* Suppress the print of RA if the instruction has -+ R==1, since the ra value must be zero for the -+ instruction to be valid. */ -+ if (!instruction_is_relative) -+ print_ra(); -+ } -+ - if (has_rb) print_rb (); - if (has_rc) print_rc (); - if (has_rs) print_rs(); -@@ -1894,6 +2032,11 @@ void set_up_iterators () { - } else { - a_start=0; b_start=0; c_start=0; m_start=0; - } -+ /* Special casing for R==1 tests. */ -+ if (instruction_is_relative) { -+ a_iters = 1; -+ m_start=3; m_iters=4; -+ } - if ((has_vra+has_vrb+has_vrc+has_vrm+has_xa+has_xb+uses_MC > 2) && - (!debug_enable_all_iters)) { - /* Instruction tests using multiple fields will generate a lot of -@@ -2196,15 +2339,12 @@ void initialize_source_registers () { - vrb[0] = vsxargs[ (vrbi ) % isr_modulo]; - vrb[1] = vsxargs[ (vrbi+1) % isr_modulo]; - } -- -- if (has_xa) { -- vec_xa[0] = vsxargs[ (vrai ) % isr_modulo]; -- vec_xa[1] = vsxargs[ (vrai+1) % isr_modulo]; -- } -- if (has_xb) { -- vec_xb[0] = vsxargs[ (vrbi ) % isr_modulo]; -- vec_xb[1] = vsxargs[ (vrbi+1) % isr_modulo]; -- } -+ -+ if (instruction_is_relative) { -+ /* for pstxsd and friends using R=1 */ -+ vec_xa[0] = vsxargs[ (vrai+2 ) % isr_modulo]; -+ vec_xa[1] = vsxargs[ (vrai+3 ) % isr_modulo]; -+ } - - // xap 'shares' with the second half of an xa-pair. - if (has_xap ) { diff --git a/valgrind-3.18.1-ppc-pstq.patch b/valgrind-3.18.1-ppc-pstq.patch deleted file mode 100644 index 2e23d18..0000000 --- a/valgrind-3.18.1-ppc-pstq.patch +++ /dev/null @@ -1,47 +0,0 @@ -commit ae8c6de01417023e78763de145b1c0e6ddd87277 -Author: Carl Love -Date: Wed Oct 20 20:40:13 2021 +0000 - - Fix for the prefixed stq instruction in PC relative mode. - - The pstq instruction for R=1, was not using the correct effective address. - The EA_hi and EA_lo should have been based on the value of EA as calculated - by the function calculate_prefix_EA. Unfortuanely, the EA_hi and EA_lo - addresses were still using the previous code (not PC relative) to calculate - the address from the contants of RA plus the offset. - -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index 8afd77490..543fa9574 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -9838,23 +9838,24 @@ static Bool dis_int_store_ds_prefix ( UInt prefix, - if (host_endness == VexEndnessBE) { - - /* upper 64-bits */ -- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val ) ); -+ assign( EA_hi, mkexpr(EA)); - - /* lower 64-bits */ -- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val+8 ) ); -+ assign( EA_lo, binop(Iop_Add64, mkexpr(EA), mkU64(8))); -+ - } else { - /* upper 64-bits */ -- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val+8 ) ); -+ assign( EA_hi, binop(Iop_Add64, mkexpr(EA), mkU64(8))); - - /* lower 64-bits */ -- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val ) ); -+ assign( EA_lo, mkexpr(EA)); - } - } else { - /* upper half of upper 64-bits */ -- assign( EA_hi, ea_rAor0_simm( rA_addr, immediate_val+4 ) ); -+ assign( EA_hi, binop(Iop_Add32, mkexpr(EA), mkU32(4))); - - /* lower half of upper 64-bits */ -- assign( EA_lo, ea_rAor0_simm( rA_addr, immediate_val+12 ) ); -+ assign( EA_lo, binop(Iop_Add32, mkexpr(EA), mkU32(12))); - } - - /* Note, the store order for stq instruction is the same for BE diff --git a/valgrind-3.18.1-ppc64-cmov.patch b/valgrind-3.18.1-ppc64-cmov.patch deleted file mode 100644 index 9e5ee62..0000000 --- a/valgrind-3.18.1-ppc64-cmov.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit fb6a77ed78876083e8ba4c2f92384db5c2e41be8 -Author: Mark Wielaard -Date: Tue Feb 8 16:36:08 2022 +0100 - - ppc64 --track-origins=yes failure because of bad cmov addHRegUse - - For Pin_CMov getRegUsage_PPCInstr called addHRegUse for the dst - register with HRmWrite, but since this is a conditional move the - register could be both read and written (read + write = modify). - This matches the dst of Pin_FpCMov and Pin_AvCMov. - - In a very rare case, and only with --track-origins=yes, this - could cause bad code generation. - - This is slightly amazing, this code is from 2005 and as far as - I know we never seen an issue with --track-origins=yes on power - before. And I have been unable to come up simple reproducer. - - https://bugs.kde.org/show_bug.cgi?id=449672 - -diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c -index 3ae0f6e08..4222b4786 100644 ---- a/VEX/priv/host_ppc_defs.c -+++ b/VEX/priv/host_ppc_defs.c -@@ -2590,7 +2590,7 @@ void getRegUsage_PPCInstr ( HRegUsage* u, const PPCInstr* i, Bool mode64 ) - return; - case Pin_CMov: - addRegUsage_PPCRI(u, i->Pin.CMov.src); -- addHRegUse(u, HRmWrite, i->Pin.CMov.dst); -+ addHRegUse(u, HRmModify, i->Pin.CMov.dst); - return; - case Pin_Load: - addRegUsage_PPCAMode(u, i->Pin.Load.src); diff --git a/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch b/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch deleted file mode 100644 index bb36c80..0000000 --- a/valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch +++ /dev/null @@ -1,60 +0,0 @@ -commit 6e08ee95f7f1b1c3fd434fa380cc5b2cc3e3f7c7 -Author: Carl Love -Date: Fri Oct 29 16:30:33 2021 -0500 - - Bug 444571 - PPC, fix the lxsibzx and lxsihzx so they only load their respective sized data. - - The lxsibzx was doing a 64-bit load. The result was initializing - additional bytes in the register that should not have been initialized. - The memcheck/tests/linux/dlclose_leak test detected the issue. The - code generation uses lxsibzx and stxsibx with -mcpu=power9. Previously - the lbz and stb instructions were generated. - - The same issue was noted and fixed with the lxsihzx instruction. The - memcheck/tests/linux/badrw test now passes as well. - - https://bugs.kde.org/show_bug.cgi?id=444571 - -diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c -index d90d566ed..8afd77490 100644 ---- a/VEX/priv/guest_ppc_toIR.c -+++ b/VEX/priv/guest_ppc_toIR.c -@@ -25359,19 +25359,17 @@ dis_vx_load ( UInt prefix, UInt theInstr ) - - else - irx_addr = mkexpr( EA ); -- -- byte = load( Ity_I64, irx_addr ); -+ /* byte load */ -+ byte = load( Ity_I8, irx_addr ); - putVSReg( XT, binop( Iop_64HLtoV128, -- binop( Iop_And64, -- byte, -- mkU64( 0xFF ) ), -+ unop( Iop_8Uto64, byte ), - mkU64( 0 ) ) ); - break; - } - - case 0x32D: // lxsihzx - { -- IRExpr *byte; -+ IRExpr *hword; - IRExpr* irx_addr; - - DIP("lxsihzx %u,r%u,r%u\n", (UInt)XT, rA_addr, rB_addr); -@@ -25382,11 +25380,10 @@ dis_vx_load ( UInt prefix, UInt theInstr ) - else - irx_addr = mkexpr( EA ); - -- byte = load( Ity_I64, irx_addr ); -+ hword = load( Ity_I16, irx_addr ); - putVSReg( XT, binop( Iop_64HLtoV128, -- binop( Iop_And64, -- byte, -- mkU64( 0xFFFF ) ), -+ unop( Iop_16Uto64, -+ hword ), - mkU64( 0 ) ) ); - break; - } diff --git a/valgrind-3.18.1-rseq-enosys.patch b/valgrind-3.18.1-rseq-enosys.patch deleted file mode 100644 index 40664c3..0000000 --- a/valgrind-3.18.1-rseq-enosys.patch +++ /dev/null @@ -1,180 +0,0 @@ -commit 67e7b20eb256baec225b3d7df1f03d731bf5e939 -Author: Mark Wielaard -Date: Fri Dec 10 17:41:59 2021 +0100 - - Implement linux rseq syscall as ENOSYS - - This implements rseq for amd64, arm, arm64, ppc32, ppc64, - s390x and x86 linux as ENOSYS (without warning). - - glibc will start using rseq to accelerate sched_getcpu, if - available. This would cause a warning from valgrind every - time a new thread is started. - - Real rseq (restartable sequences) support is pretty hard, so - for now just explicitly return ENOSYS (just like we do for clone3). - - https://sourceware.org/pipermail/libc-alpha/2021-December/133656.html - -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 5062324a1..18b25f80a 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -862,6 +862,8 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_statx, sys_statx), // 332 - -+ GENX_(__NR_rseq, sys_ni_syscall), // 334 -+ - LINX_(__NR_membarrier, sys_membarrier), // 324 - - LINX_(__NR_copy_file_range, sys_copy_file_range), // 326 -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 556dd844b..d583cef0c 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1024,6 +1024,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_pwritev2, sys_pwritev2), // 393 - - LINXY(__NR_statx, sys_statx), // 397 -+ GENX_(__NR_rseq, sys_ni_syscall), // 398 - - LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 - LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index b87107727..2066a38ea 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -823,8 +823,9 @@ static SyscallTableEntry syscall_main_table[] = { - // (__NR_pkey_mprotect, sys_ni_syscall), // 288 - // (__NR_pkey_alloc, sys_ni_syscall), // 289 - // (__NR_pkey_free, sys_ni_syscall), // 290 -+ LINXY(__NR_statx, sys_statx), // 291 - -- LINXY(__NR_statx, sys_statx), // 397 -+ GENX_(__NR_rseq, sys_ni_syscall), // 293 - - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index 6263ab845..637b2504e 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1028,6 +1028,8 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_statx, sys_statx), // 383 - -+ GENX_(__NR_rseq, sys_ni_syscall), // 387 -+ - LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 - LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 - -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index a26b41c32..93956d3cc 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1019,6 +1019,8 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_statx, sys_statx), // 383 - -+ GENX_(__NR_rseq, sys_ni_syscall), // 387 -+ - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index 5c9209859..73f9684c4 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -860,6 +860,8 @@ static SyscallTableEntry syscall_table[] = { - - LINXY(__NR_statx, sys_statx), // 379 - -+ GENX_(__NR_rseq, sys_ni_syscall), // 381 -+ - LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 - LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 - LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index 1d8f45d33..8662ff501 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1619,6 +1619,8 @@ static SyscallTableEntry syscall_table[] = { - /* Explicitly not supported on i386 yet. */ - GENX_(__NR_arch_prctl, sys_ni_syscall), // 384 - -+ GENX_(__NR_rseq, sys_ni_syscall), // 386 -+ - LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 - LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 - -diff --git a/include/vki/vki-scnums-arm-linux.h b/include/vki/vki-scnums-arm-linux.h -index ff560e19d..485db8b26 100644 ---- a/include/vki/vki-scnums-arm-linux.h -+++ b/include/vki/vki-scnums-arm-linux.h -@@ -432,6 +432,7 @@ - #define __NR_pkey_alloc 395 - #define __NR_pkey_free 396 - #define __NR_statx 397 -+#define __NR_rseq 398 - - - -diff --git a/include/vki/vki-scnums-arm64-linux.h b/include/vki/vki-scnums-arm64-linux.h -index 9aa3b2b5f..acdfb39c6 100644 ---- a/include/vki/vki-scnums-arm64-linux.h -+++ b/include/vki/vki-scnums-arm64-linux.h -@@ -323,9 +323,11 @@ - #define __NR_pkey_alloc 289 - #define __NR_pkey_free 290 - #define __NR_statx 291 -+#define __NR_io_pgetevents 291 -+#define __NR_rseq 293 - - #undef __NR_syscalls --#define __NR_syscalls 292 -+#define __NR_syscalls 294 - - ///* - // * All syscalls below here should go away really, -diff --git a/include/vki/vki-scnums-ppc32-linux.h b/include/vki/vki-scnums-ppc32-linux.h -index 6987ad941..08fa77df0 100644 ---- a/include/vki/vki-scnums-ppc32-linux.h -+++ b/include/vki/vki-scnums-ppc32-linux.h -@@ -415,6 +415,7 @@ - #define __NR_pkey_alloc 384 - #define __NR_pkey_free 385 - #define __NR_pkey_mprotect 386 -+#define __NR_rseq 387 - - #endif /* __VKI_SCNUMS_PPC32_LINUX_H */ - -diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h -index 6827964fd..a76fa6d32 100644 ---- a/include/vki/vki-scnums-ppc64-linux.h -+++ b/include/vki/vki-scnums-ppc64-linux.h -@@ -407,6 +407,7 @@ - #define __NR_pkey_alloc 384 - #define __NR_pkey_free 385 - #define __NR_pkey_mprotect 386 -+#define __NR_rseq 387 - - #endif /* __VKI_SCNUMS_PPC64_LINUX_H */ - -diff --git a/include/vki/vki-scnums-s390x-linux.h b/include/vki/vki-scnums-s390x-linux.h -index 6487e20c9..869c04584 100644 ---- a/include/vki/vki-scnums-s390x-linux.h -+++ b/include/vki/vki-scnums-s390x-linux.h -@@ -342,8 +342,11 @@ - #define __NR_s390_guarded_storage 378 - #define __NR_statx 379 - #define __NR_s390_sthyi 380 -+#define __NR_kexec_file_load 381 -+#define __NR_io_pgetevents 382 -+#define __NR_rseq 383 - --#define NR_syscalls 381 -+#define NR_syscalls 384 - - /* - * There are some system calls that are not present on 64 bit, some diff --git a/valgrind-3.18.1-rust-demangle-suffix.patch b/valgrind-3.18.1-rust-demangle-suffix.patch deleted file mode 100644 index 58de409..0000000 --- a/valgrind-3.18.1-rust-demangle-suffix.patch +++ /dev/null @@ -1,370 +0,0 @@ -commit e0b62fe05559003b731b4d786f3b71e9a66fb94d -Author: Mark Wielaard -Date: Thu Feb 17 18:35:38 2022 +0100 - - Update libiberty demangler - - Update the libiberty demangler using the auxprogs/update-demangler - script to gcc git commit d3b2ead595467166c849950ecd3710501a5094d9. - - This update includes: - - - libiberty rust-demangle, ignore .suffix - - libiberty: Fix infinite recursion in rust demangler - - Update copyright years - - libiberty: support digits in cpp mangled clone names - - d-demangle: properly skip anonymous symbols - - d-demangle: remove parenthesis where it is not needed - -diff --git a/auxprogs/update-demangler b/auxprogs/update-demangler -index 00c090467..307a0ea36 100755 ---- a/auxprogs/update-demangler -+++ b/auxprogs/update-demangler -@@ -17,8 +17,8 @@ set -e - #--------------------------------------------------------------------- - - # You need to modify these revision numbers for your update. --old_gcc_revision=01d92cfd79872e4cffc78bf233bb9b767336beb8 # the revision of the previous update --new_gcc_revision=b3585c0836e729bed56b9afd4292177673a25ca0 # the revision for this update -+old_gcc_revision=b3585c0836e729bed56b9afd4292177673a25ca0 # the revision of the previous update -+new_gcc_revision=d3b2ead595467166c849950ecd3710501a5094d9 # the revision for this update - - # Unless the organization of demangler related files has changed, no - # changes below this line should be necessary. -diff --git a/coregrind/m_demangle/ansidecl.h b/coregrind/m_demangle/ansidecl.h -index 2329c8655..4275c9b9c 100644 ---- a/coregrind/m_demangle/ansidecl.h -+++ b/coregrind/m_demangle/ansidecl.h -@@ -1,5 +1,5 @@ --/* ANSI and traditional C compatibility macros -- Copyright (C) 1991-2021 Free Software Foundation, Inc. -+/* ANSI and traditional C compatability macros -+ Copyright (C) 1991-2022 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify -diff --git a/coregrind/m_demangle/cp-demangle.c b/coregrind/m_demangle/cp-demangle.c -index 1f4cd3d28..ca82c330d 100644 ---- a/coregrind/m_demangle/cp-demangle.c -+++ b/coregrind/m_demangle/cp-demangle.c -@@ -1,5 +1,5 @@ - /* Demangler for g++ V3 ABI. -- Copyright (C) 2003-2021 Free Software Foundation, Inc. -+ Copyright (C) 2003-2022 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - - This file is part of the libiberty library, which is part of GCC. -@@ -3901,10 +3901,11 @@ d_clone_suffix (struct d_info *di, struct demangle_component *encoding) - const char *pend = suffix; - struct demangle_component *n; - -- if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_')) -+ if (*pend == '.' && (IS_LOWER (pend[1]) || IS_DIGIT (pend[1]) -+ || pend[1] == '_')) - { - pend += 2; -- while (IS_LOWER (*pend) || *pend == '_') -+ while (IS_LOWER (*pend) || IS_DIGIT (*pend) || *pend == '_') - ++pend; - } - while (*pend == '.' && IS_DIGIT (pend[1])) -diff --git a/coregrind/m_demangle/cp-demangle.h b/coregrind/m_demangle/cp-demangle.h -index cb47bdf0d..c6445036d 100644 ---- a/coregrind/m_demangle/cp-demangle.h -+++ b/coregrind/m_demangle/cp-demangle.h -@@ -1,5 +1,5 @@ - /* Internal demangler interface for g++ V3 ABI. -- Copyright (C) 2003-2021 Free Software Foundation, Inc. -+ Copyright (C) 2003-2022 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - - This file is part of the libiberty library, which is part of GCC. -diff --git a/coregrind/m_demangle/cplus-dem.c b/coregrind/m_demangle/cplus-dem.c -index bf4379054..5d6e04d96 100644 ---- a/coregrind/m_demangle/cplus-dem.c -+++ b/coregrind/m_demangle/cplus-dem.c -@@ -1,5 +1,5 @@ - /* Demangler for GNU C++ -- Copyright (C) 1989-2021 Free Software Foundation, Inc. -+ Copyright (C) 1989-2022 Free Software Foundation, Inc. - Written by James Clark (jjc@jclark.uucp) - Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling - Modified by Satish Pai (pai@apollo.hp.com) for HP demangling -diff --git a/coregrind/m_demangle/d-demangle.c b/coregrind/m_demangle/d-demangle.c -index 4525c48d4..c2c3e08c8 100644 ---- a/coregrind/m_demangle/d-demangle.c -+++ b/coregrind/m_demangle/d-demangle.c -@@ -1,5 +1,5 @@ - /* Demangler for the D programming language -- Copyright (C) 2014-2021 Free Software Foundation, Inc. -+ Copyright (C) 2014-2022 Free Software Foundation, Inc. - Written by Iain Buclaw (ibuclaw@gdcproject.org) - - This file is part of the libiberty library. -@@ -269,15 +269,15 @@ dlang_hexdigit (const char *mangled, char *ret) - - c = mangled[0]; - if (!ISDIGIT (c)) -- (*ret) = (c - (ISUPPER (c) ? 'A' : 'a') + 10); -+ *ret = c - (ISUPPER (c) ? 'A' : 'a') + 10; - else -- (*ret) = (c - '0'); -+ *ret = c - '0'; - - c = mangled[1]; - if (!ISDIGIT (c)) -- (*ret) = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10); -+ *ret = (*ret << 4) | (c - (ISUPPER (c) ? 'A' : 'a') + 10); - else -- (*ret) = (*ret << 4) | (c - '0'); -+ *ret = (*ret << 4) | (c - '0'); - - mangled += 2; - -@@ -354,7 +354,7 @@ dlang_decode_backref (const char *mangled, long *ret) - static const char * - dlang_backref (const char *mangled, const char **ret, struct dlang_info *info) - { -- (*ret) = NULL; -+ *ret = NULL; - - if (mangled == NULL || *mangled != 'Q') - return NULL; -@@ -372,7 +372,7 @@ dlang_backref (const char *mangled, const char **ret, struct dlang_info *info) - return NULL; - - /* Set the position of the back reference. */ -- (*ret) = qpos - refpos; -+ *ret = qpos - refpos; - - return mangled; - } -@@ -1666,13 +1666,19 @@ dlang_parse_qualified (string *decl, const char *mangled, - size_t n = 0; - do - { -+ /* Skip over anonymous symbols. */ -+ if (*mangled == '0') -+ { -+ do -+ mangled++; -+ while (*mangled == '0'); -+ -+ continue; -+ } -+ - if (n++) - string_append (decl, "."); - -- /* Skip over anonymous symbols. */ -- while (*mangled == '0') -- mangled++; -- - mangled = dlang_identifier (decl, mangled, info); - - /* Consume the encoded arguments. However if this is not followed by the -diff --git a/coregrind/m_demangle/demangle.h b/coregrind/m_demangle/demangle.h -index 2acb3bd4e..bbce948c5 100644 ---- a/coregrind/m_demangle/demangle.h -+++ b/coregrind/m_demangle/demangle.h -@@ -1,5 +1,5 @@ - /* Defs for interface to demanglers. -- Copyright (C) 1992-2021 Free Software Foundation, Inc. -+ Copyright (C) 1992-2022 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License -diff --git a/coregrind/m_demangle/dyn-string.c b/coregrind/m_demangle/dyn-string.c -index 66948debf..89ce8e12c 100644 ---- a/coregrind/m_demangle/dyn-string.c -+++ b/coregrind/m_demangle/dyn-string.c -@@ -1,5 +1,5 @@ - /* An abstract string datatype. -- Copyright (C) 1998-2021 Free Software Foundation, Inc. -+ Copyright (C) 1998-2022 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - - This file is part of GNU CC. -diff --git a/coregrind/m_demangle/dyn-string.h b/coregrind/m_demangle/dyn-string.h -index 6c5e66012..be2184aa9 100644 ---- a/coregrind/m_demangle/dyn-string.h -+++ b/coregrind/m_demangle/dyn-string.h -@@ -1,5 +1,5 @@ - /* An abstract string datatype. -- Copyright (C) 1998-2021 Free Software Foundation, Inc. -+ Copyright (C) 1998-2022 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - - This file is part of GCC. -diff --git a/coregrind/m_demangle/rust-demangle.c b/coregrind/m_demangle/rust-demangle.c -index 0cafa3df9..0a9331ac2 100644 ---- a/coregrind/m_demangle/rust-demangle.c -+++ b/coregrind/m_demangle/rust-demangle.c -@@ -1,5 +1,5 @@ - /* Demangler for the Rust programming language -- Copyright (C) 2016-2021 Free Software Foundation, Inc. -+ Copyright (C) 2016-2022 Free Software Foundation, Inc. - Written by David Tolnay (dtolnay@gmail.com). - Rewritten by Eduard-Mihai Burtescu (eddyb@lyken.rs) for v0 support. - -@@ -101,6 +101,12 @@ struct rust_demangler - /* Rust mangling version, with legacy mangling being -1. */ - int version; - -+ /* Recursion depth. */ -+ unsigned int recursion; -+ /* Maximum number of times demangle_path may be called recursively. */ -+#define RUST_MAX_RECURSION_COUNT 1024 -+#define RUST_NO_RECURSION_LIMIT ((unsigned int) -1) -+ - uint64_t bound_lifetime_depth; - }; - -@@ -698,6 +704,15 @@ demangle_path (struct rust_demangler *rdm, int in_value) - if (rdm->errored) - return; - -+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) -+ { -+ ++ rdm->recursion; -+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) -+ /* FIXME: There ought to be a way to report -+ that the recursion limit has been reached. */ -+ goto fail_return; -+ } -+ - switch (tag = next (rdm)) - { - case 'C': -@@ -715,10 +730,7 @@ demangle_path (struct rust_demangler *rdm, int in_value) - case 'N': - ns = next (rdm); - if (!ISLOWER (ns) && !ISUPPER (ns)) -- { -- rdm->errored = 1; -- return; -- } -+ goto fail_return; - - demangle_path (rdm, in_value); - -@@ -803,9 +815,15 @@ demangle_path (struct rust_demangler *rdm, int in_value) - } - break; - default: -- rdm->errored = 1; -- return; -+ goto fail_return; - } -+ goto pass_return; -+ -+ fail_return: -+ rdm->errored = 1; -+ pass_return: -+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) -+ -- rdm->recursion; - } - - static void -@@ -897,6 +915,19 @@ demangle_type (struct rust_demangler *rdm) - return; - } - -+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) -+ { -+ ++ rdm->recursion; -+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT) -+ /* FIXME: There ought to be a way to report -+ that the recursion limit has been reached. */ -+ { -+ rdm->errored = 1; -+ -- rdm->recursion; -+ return; -+ } -+ } -+ - switch (tag) - { - case 'R': -@@ -1057,6 +1088,9 @@ demangle_type (struct rust_demangler *rdm) - rdm->next--; - demangle_path (rdm, 0); - } -+ -+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT) -+ -- rdm->recursion; - } - - /* A trait in a trait object may have some "existential projections" -@@ -1347,6 +1381,7 @@ rust_demangle_callback (const char *mangled, int options, - rdm.skipping_printing = 0; - rdm.verbose = (options & DMGL_VERBOSE) != 0; - rdm.version = 0; -+ rdm.recursion = (options & DMGL_NO_RECURSE_LIMIT) ? RUST_NO_RECURSION_LIMIT : 0; - rdm.bound_lifetime_depth = 0; - - /* Rust symbols always start with _R (v0) or _ZN (legacy). */ -@@ -1367,13 +1402,19 @@ rust_demangle_callback (const char *mangled, int options, - /* Rust symbols (v0) use only [_0-9a-zA-Z] characters. */ - for (p = rdm.sym; *p; p++) - { -+ /* Rust v0 symbols can have '.' suffixes, ignore those. */ -+ if (rdm.version == 0 && *p == '.') -+ break; -+ - rdm.sym_len++; - - if (*p == '_' || ISALNUM (*p)) - continue; - -- /* Legacy Rust symbols can also contain [.:$] characters. */ -- if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':')) -+ /* Legacy Rust symbols can also contain [.:$] characters. -+ Or @ in the .suffix (which will be skipped, see below). */ -+ if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':' -+ || *p == '@')) - continue; - - return 0; -@@ -1382,7 +1423,16 @@ rust_demangle_callback (const char *mangled, int options, - /* Legacy Rust symbols need to be handled separately. */ - if (rdm.version == -1) - { -- /* Legacy Rust symbols always end with E. */ -+ /* Legacy Rust symbols always end with E. But can be followed by a -+ .suffix (which we want to ignore). */ -+ int dot_suffix = 1; -+ while (rdm.sym_len > 0 && -+ !(dot_suffix && rdm.sym[rdm.sym_len - 1] == 'E')) -+ { -+ dot_suffix = rdm.sym[rdm.sym_len - 1] == '.'; -+ rdm.sym_len--; -+ } -+ - if (!(rdm.sym_len > 0 && rdm.sym[rdm.sym_len - 1] == 'E')) - return 0; - rdm.sym_len--; -diff --git a/coregrind/m_demangle/safe-ctype.c b/coregrind/m_demangle/safe-ctype.c -index 14da11918..97bc43667 100644 ---- a/coregrind/m_demangle/safe-ctype.c -+++ b/coregrind/m_demangle/safe-ctype.c -@@ -1,6 +1,6 @@ - /* replacement macros. - -- Copyright (C) 2000-2021 Free Software Foundation, Inc. -+ Copyright (C) 2000-2022 Free Software Foundation, Inc. - Contributed by Zack Weinberg . - - This file is part of the libiberty library. -diff --git a/coregrind/m_demangle/safe-ctype.h b/coregrind/m_demangle/safe-ctype.h -index a7389c32e..86157ed4b 100644 ---- a/coregrind/m_demangle/safe-ctype.h -+++ b/coregrind/m_demangle/safe-ctype.h -@@ -1,6 +1,6 @@ - /* replacement macros. - -- Copyright (C) 2000-2021 Free Software Foundation, Inc. -+ Copyright (C) 2000-2022 Free Software Foundation, Inc. - Contributed by Zack Weinberg . - - This file is part of the libiberty library. diff --git a/valgrind-3.18.1-rust-v0-demangle.patch b/valgrind-3.18.1-rust-v0-demangle.patch deleted file mode 100644 index e48a106..0000000 --- a/valgrind-3.18.1-rust-v0-demangle.patch +++ /dev/null @@ -1,137 +0,0 @@ -commit 4831385c6706b377851284adc4c4545fff4c6564 -Author: Nicholas Nethercote -Date: Tue Nov 9 12:30:07 2021 +1100 - - Fix Rust v0 demangling. - - It's currently broken due to a silly test that prevents the v0 - demangling code from even running. - - The commit also adds a test, to avoid such problems in the future. - -diff --git a/coregrind/m_demangle/demangle.c b/coregrind/m_demangle/demangle.c -index 16161da2a..3fd7cb75f 100644 ---- a/coregrind/m_demangle/demangle.c -+++ b/coregrind/m_demangle/demangle.c -@@ -118,8 +118,13 @@ void VG_(demangle) ( Bool do_cxx_demangling, Bool do_z_demangling, - } - - /* Possibly undo (1) */ -+ // - C++ mangled symbols start with "_Z" (possibly with exceptions?) -+ // - Rust "legacy" mangled symbols start with "_Z". -+ // - Rust "v0" mangled symbols start with "_R". -+ // XXX: the Java/Rust/Ada demangling here probably doesn't work. See -+ // https://bugs.kde.org/show_bug.cgi?id=445235 for details. - if (do_cxx_demangling && VG_(clo_demangle) -- && orig != NULL && orig[0] == '_' && orig[1] == 'Z') { -+ && orig != NULL && orig[0] == '_' && (orig[1] == 'Z' || orig[1] == 'R')) { - /* !!! vvv STATIC vvv !!! */ - static HChar* demangled = NULL; - /* !!! ^^^ STATIC ^^^ !!! */ -diff --git a/memcheck/tests/demangle-rust.c b/memcheck/tests/demangle-rust.c -new file mode 100644 -index 000000000..f2a458b2a ---- /dev/null -+++ b/memcheck/tests/demangle-rust.c -@@ -0,0 +1,31 @@ -+// Valgrind supports demangling Rust symbols (both the "v0" and "legacy" -+// mangling schemes), but we don't want to add a dependency on the Rust -+// compiler for a single test. So this is a C program with function names that -+// are mangled Rust symbols. In the output, they become demangled Rust names. -+// It's a hack, but a useful one. -+ -+#include -+ -+// A v0 symbol that demangles to: ::fold_with:: -+int _RINvYNtNtCs4uGc65yWeeX_12rustc_middle2ty13PredicateKindNtNtB5_4fold12TypeFoldable9fold_withNtNtNtCsgI90OQiJWEs_11rustc_infer5infer7resolve24OpportunisticVarResolverECsdozMG8X9FIu_21rustc_trait_selection(int *p) -+{ -+ return *p ? 1 : 2; -+} -+ -+// A v0 symbol that demangles to: rustc_expand::mbe::macro_parser::parse_tt -+int _RNvNtNtCsaqSe1lZGvEL_12rustc_expand3mbe12macro_parser8parse_tt(int* p) -+{ -+ return _RINvYNtNtCs4uGc65yWeeX_12rustc_middle2ty13PredicateKindNtNtB5_4fold12TypeFoldable9fold_withNtNtNtCsgI90OQiJWEs_11rustc_infer5infer7resolve24OpportunisticVarResolverECsdozMG8X9FIu_21rustc_trait_selection(p); -+} -+ -+// A legacy symbol that demangles to: core::str::lossy::Utf8Lossy::from_bytes -+int _ZN4core3str5lossy9Utf8Lossy10from_bytes17heb1677c8cb728b0bE(int* p) -+{ -+ return _RNvNtNtCsaqSe1lZGvEL_12rustc_expand3mbe12macro_parser8parse_tt(p); -+} -+ -+int main(void) -+{ -+ return _ZN4core3str5lossy9Utf8Lossy10from_bytes17heb1677c8cb728b0bE(malloc(sizeof(int))); -+} -+ -diff --git a/memcheck/tests/demangle-rust.stderr.exp b/memcheck/tests/demangle-rust.stderr.exp -new file mode 100644 -index 000000000..f04bb625b ---- /dev/null -+++ b/memcheck/tests/demangle-rust.stderr.exp -@@ -0,0 +1,6 @@ -+Conditional jump or move depends on uninitialised value(s) -+ at 0x........: ::fold_with:: (demangle-rust.c:12) -+ by 0x........: rustc_expand::mbe::macro_parser::parse_tt (demangle-rust.c:18) -+ by 0x........: core::str::lossy::Utf8Lossy::from_bytes (demangle-rust.c:24) -+ by 0x........: main (demangle-rust.c:29) -+ -diff --git a/memcheck/tests/demangle-rust.vgtest b/memcheck/tests/demangle-rust.vgtest -new file mode 100644 -index 000000000..d726c6b2e ---- /dev/null -+++ b/memcheck/tests/demangle-rust.vgtest -@@ -0,0 +1,2 @@ -+prog: demangle-rust -+vgopts: -q - -commit c1bfa115f985633722f25922d2996c231e8c9d8d -Author: Mark Wielaard -Date: Wed Nov 10 09:02:36 2021 +0100 - - Add demangle-rust.vgtest demangle-rust.stderr.exp to EXTRA_DIST - -diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am -index 4d0476e2d..7837d87c7 100644 ---- a/memcheck/tests/Makefile.am -+++ b/memcheck/tests/Makefile.am -@@ -281,6 +281,7 @@ EXTRA_DIST = \ - realloc3.stderr.exp realloc3.vgtest \ - recursive-merge.stderr.exp recursive-merge.vgtest \ - resvn_stack.stderr.exp resvn_stack.vgtest \ -+ demangle-rust.vgtest demangle-rust.stderr.exp \ - sbfragment.stdout.exp sbfragment.stderr.exp sbfragment.vgtest \ - sem.stderr.exp sem.vgtest \ - sendmsg.stderr.exp sendmsg.stderr.exp-solaris sendmsg.vgtest \ - -commit d151907e5d8ff393f4fef126c8ae445ea8813661 -Author: Mark Wielaard -Date: Thu Nov 11 18:02:09 2021 +0100 - - Add demangle-rust to check_PROGRAMS - - The demangle-rust.vgtest would fail because the demangle-rust binary - wasn't build by default. Add it to check_PROGRAMS and define - demangle_rust_SOURCES to make sure it is always build. - -diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am -index 7837d87c7..449710020 100644 ---- a/memcheck/tests/Makefile.am -+++ b/memcheck/tests/Makefile.am -@@ -392,6 +392,7 @@ check_PROGRAMS = \ - custom_alloc \ - custom-overlap \ - demangle \ -+ demangle-rust \ - big_debuginfo_symbol \ - deep-backtrace \ - describe-block \ -@@ -505,6 +506,7 @@ endif - leak_cpp_interior_SOURCES = leak_cpp_interior.cpp - - demangle_SOURCES = demangle.cpp -+demangle_rust_SOURCES = demangle-rust.c - - # Suppress various gcc warnings which are correct, but for things - # we are actually testing for at runtime. diff --git a/valgrind-3.18.1-s390x-EXRL.patch b/valgrind-3.18.1-s390x-EXRL.patch deleted file mode 100644 index 6927cc3..0000000 --- a/valgrind-3.18.1-s390x-EXRL.patch +++ /dev/null @@ -1,549 +0,0 @@ -commit b77dbefe72e4a5c7bcf1576a02c909010bd56991 -Author: Andreas Arnez -Date: Fri Oct 22 19:55:12 2021 +0200 - - Bug 444242 - s390x: Sign-extend "relative long" offset in EXRL - - In s390_irgen_EXRL, the offset is zero-extended instead of sign-extended, - typically causing Valgrind to crash when a negative offset occurs. - - Fix this with a new helper function that calculates a "relative long" - address from a 32-bit offset. Replace other calculations of "relative - long" addresses by invocations of this function as well. And for - consistency, do the same with "relative" (short) addresses. - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 72222ab04..fffc563d4 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -399,6 +399,22 @@ mkF64i(ULong value) - return IRExpr_Const(IRConst_F64i(value)); - } - -+/* Return the 64-bit address with the given 32-bit "relative long" offset from -+ the current guest instruction being translated. */ -+static __inline__ Addr64 -+addr_rel_long(UInt offset) -+{ -+ return guest_IA_curr_instr + ((Addr64)(Long)(Int)offset << 1); -+} -+ -+/* Return the 64-bit address with the given 16-bit "relative" offset from the -+ current guest instruction being translated. */ -+static __inline__ Addr64 -+addr_relative(UShort offset) -+{ -+ return guest_IA_curr_instr + ((Addr64)(Long)(Short)offset << 1); -+} -+ - /* Little helper function for my sanity. ITE = if-then-else */ - static IRExpr * - mkite(IRExpr *condition, IRExpr *iftrue, IRExpr *iffalse) -@@ -5516,7 +5532,7 @@ static const HChar * - s390_irgen_BRAS(UChar r1, UShort i2) - { - put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 4ULL)); -- call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ call_function_and_chase(addr_relative(i2)); - - return "bras"; - } -@@ -5525,7 +5541,7 @@ static const HChar * - s390_irgen_BRASL(UChar r1, UInt i2) - { - put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + 6ULL)); -- call_function_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); -+ call_function_and_chase(addr_rel_long(i2)); - - return "brasl"; - } -@@ -5538,12 +5554,11 @@ s390_irgen_BRC(UChar r1, UShort i2) - if (r1 == 0) { - } else { - if (r1 == 15) { -- always_goto_and_chase( -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ always_goto_and_chase(addr_relative(i2)); - } else { - assign(cond, s390_call_calculate_cond(r1)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - } - } -@@ -5561,11 +5576,11 @@ s390_irgen_BRCL(UChar r1, UInt i2) - if (r1 == 0) { - } else { - if (r1 == 15) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); -+ always_goto_and_chase(addr_rel_long(i2)); - } else { - assign(cond, s390_call_calculate_cond(r1)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)); -+ addr_rel_long(i2)); - } - } - if (UNLIKELY(vex_traceflags & VEX_TRACE_FE)) -@@ -5579,7 +5594,7 @@ s390_irgen_BRCT(UChar r1, UShort i2) - { - put_gpr_w1(r1, binop(Iop_Sub32, get_gpr_w1(r1), mkU32(1))); - if_condition_goto(binop(Iop_CmpNE32, get_gpr_w1(r1), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brct"; - } -@@ -5589,7 +5604,7 @@ s390_irgen_BRCTH(UChar r1, UInt i2) - { - put_gpr_w0(r1, binop(Iop_Sub32, get_gpr_w0(r1), mkU32(1))); - if_condition_goto(binop(Iop_CmpNE32, get_gpr_w0(r1), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brcth"; - } -@@ -5599,7 +5614,7 @@ s390_irgen_BRCTG(UChar r1, UShort i2) - { - put_gpr_dw0(r1, binop(Iop_Sub64, get_gpr_dw0(r1), mkU64(1))); - if_condition_goto(binop(Iop_CmpNE64, get_gpr_dw0(r1), mkU64(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brctg"; - } -@@ -5612,7 +5627,7 @@ s390_irgen_BRXH(UChar r1, UChar r3, UShort i2) - assign(value, get_gpr_w1(r3 | 1)); - put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3))); - if_condition_goto(binop(Iop_CmpLT32S, mkexpr(value), get_gpr_w1(r1)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brxh"; - } -@@ -5625,7 +5640,7 @@ s390_irgen_BRXHG(UChar r1, UChar r3, UShort i2) - assign(value, get_gpr_dw0(r3 | 1)); - put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3))); - if_condition_goto(binop(Iop_CmpLT64S, mkexpr(value), get_gpr_dw0(r1)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brxhg"; - } -@@ -5638,7 +5653,7 @@ s390_irgen_BRXLE(UChar r1, UChar r3, UShort i2) - assign(value, get_gpr_w1(r3 | 1)); - put_gpr_w1(r1, binop(Iop_Add32, get_gpr_w1(r1), get_gpr_w1(r3))); - if_condition_goto(binop(Iop_CmpLE32S, get_gpr_w1(r1), mkexpr(value)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brxle"; - } -@@ -5651,7 +5666,7 @@ s390_irgen_BRXLG(UChar r1, UChar r3, UShort i2) - assign(value, get_gpr_dw0(r3 | 1)); - put_gpr_dw0(r1, binop(Iop_Add64, get_gpr_dw0(r1), get_gpr_dw0(r3))); - if_condition_goto(binop(Iop_CmpLE64S, get_gpr_dw0(r1), mkexpr(value)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i2 << 1)); -+ addr_relative(i2)); - - return "brxlg"; - } -@@ -5782,8 +5797,7 @@ s390_irgen_CRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I32); - - assign(op1, get_gpr_w1(r1)); -- assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ assign(op2, load(Ity_I32, mkU64(addr_rel_long(i2)))); - s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); - - return "crl"; -@@ -5796,8 +5810,7 @@ s390_irgen_CGRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ assign(op2, load(Ity_I64, mkU64(addr_rel_long(i2)))); - s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); - - return "cgrl"; -@@ -5810,8 +5823,7 @@ s390_irgen_CGFRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_32Sto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); - - return "cgfrl"; -@@ -5875,15 +5887,14 @@ s390_irgen_CRJ(UChar r1, UChar r2, UShort i4, UChar m3) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase( -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_w1(r1)); - assign(op2, get_gpr_w1(r2)); - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, - op1, op2)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -5901,15 +5912,14 @@ s390_irgen_CGRJ(UChar r1, UChar r2, UShort i4, UChar m3) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase( -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_dw0(r1)); - assign(op2, get_gpr_dw0(r2)); - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, - op1, op2)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -5975,14 +5985,14 @@ s390_irgen_CIJ(UChar r1, UChar m3, UShort i4, UChar i2) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_w1(r1)); - op2 = (Int)(Char)i2; - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, op1, - mktemp(Ity_I32, mkU32((UInt)op2)))); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -6000,14 +6010,14 @@ s390_irgen_CGIJ(UChar r1, UChar m3, UShort i4, UChar i2) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_dw0(r1)); - op2 = (Long)(Char)i2; - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_SIGNED_COMPARE, op1, - mktemp(Ity_I64, mkU64((ULong)op2)))); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -6131,8 +6141,7 @@ s390_irgen_CHRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I32); - - assign(op1, get_gpr_w1(r1)); -- assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_16Sto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); - - return "chrl"; -@@ -6145,8 +6154,7 @@ s390_irgen_CGHRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_16Sto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putSS(S390_CC_OP_SIGNED_COMPARE, op1, op2); - - return "cghrl"; -@@ -6401,8 +6409,7 @@ s390_irgen_CLRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I32); - - assign(op1, get_gpr_w1(r1)); -- assign(op2, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ assign(op2, load(Ity_I32, mkU64(addr_rel_long(i2)))); - s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); - - return "clrl"; -@@ -6415,8 +6422,7 @@ s390_irgen_CLGRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ assign(op2, load(Ity_I64, mkU64(addr_rel_long(i2)))); - s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); - - return "clgrl"; -@@ -6429,8 +6435,7 @@ s390_irgen_CLGFRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_32Uto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); - - return "clgfrl"; -@@ -6443,8 +6448,7 @@ s390_irgen_CLHRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I32); - - assign(op1, get_gpr_w1(r1)); -- assign(op2, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_16Uto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); - - return "clhrl"; -@@ -6457,8 +6461,7 @@ s390_irgen_CLGHRL(UChar r1, UInt i2) - IRTemp op2 = newTemp(Ity_I64); - - assign(op1, get_gpr_dw0(r1)); -- assign(op2, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ assign(op2, unop(Iop_16Uto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); - s390_cc_thunk_putZZ(S390_CC_OP_UNSIGNED_COMPARE, op1, op2); - - return "clghrl"; -@@ -6730,14 +6733,14 @@ s390_irgen_CLRJ(UChar r1, UChar r2, UShort i4, UChar m3) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_w1(r1)); - assign(op2, get_gpr_w1(r2)); - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, - op1, op2)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -6755,14 +6758,14 @@ s390_irgen_CLGRJ(UChar r1, UChar r2, UShort i4, UChar m3) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_dw0(r1)); - assign(op2, get_gpr_dw0(r2)); - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, - op1, op2)); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -6828,14 +6831,14 @@ s390_irgen_CLIJ(UChar r1, UChar m3, UShort i4, UChar i2) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_w1(r1)); - op2 = (UInt)i2; - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, op1, - mktemp(Ity_I32, mkU32(op2)))); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -6853,14 +6856,14 @@ s390_irgen_CLGIJ(UChar r1, UChar m3, UShort i4, UChar i2) - if (m3 == 0) { - } else { - if (m3 == 14) { -- always_goto_and_chase(guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ always_goto_and_chase(addr_relative(i4)); - } else { - assign(op1, get_gpr_dw0(r1)); - op2 = (ULong)i2; - assign(cond, s390_call_calculate_icc(m3, S390_CC_OP_UNSIGNED_COMPARE, op1, - mktemp(Ity_I64, mkU64(op2)))); - if_condition_goto(binop(Iop_CmpNE32, mkexpr(cond), mkU32(0)), -- guest_IA_curr_instr + ((ULong)(Long)(Short)i4 << 1)); -+ addr_relative(i4)); - - } - } -@@ -7539,8 +7542,7 @@ s390_irgen_LGFI(UChar r1, UInt i2) - static const HChar * - s390_irgen_LRL(UChar r1, UInt i2) - { -- put_gpr_w1(r1, load(Ity_I32, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ put_gpr_w1(r1, load(Ity_I32, mkU64(addr_rel_long(i2)))); - - return "lrl"; - } -@@ -7548,8 +7550,7 @@ s390_irgen_LRL(UChar r1, UInt i2) - static const HChar * - s390_irgen_LGRL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, load(Ity_I64, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int) -- i2 << 1)))); -+ put_gpr_dw0(r1, load(Ity_I64, mkU64(addr_rel_long(i2)))); - - return "lgrl"; - } -@@ -7557,8 +7558,7 @@ s390_irgen_LGRL(UChar r1, UInt i2) - static const HChar * - s390_irgen_LGFRL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_dw0(r1, unop(Iop_32Sto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); - - return "lgfrl"; - } -@@ -7598,7 +7598,7 @@ s390_irgen_LAEY(UChar r1, IRTemp op2addr) - static const HChar * - s390_irgen_LARL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1))); -+ put_gpr_dw0(r1, mkU64(addr_rel_long(i2))); - - return "larl"; - } -@@ -8038,8 +8038,7 @@ s390_irgen_LGHI(UChar r1, UShort i2) - static const HChar * - s390_irgen_LHRL(UChar r1, UInt i2) - { -- put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_w1(r1, unop(Iop_16Sto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); - - return "lhrl"; - } -@@ -8047,8 +8046,7 @@ s390_irgen_LHRL(UChar r1, UInt i2) - static const HChar * - s390_irgen_LGHRL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_dw0(r1, unop(Iop_16Sto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); - - return "lghrl"; - } -@@ -8088,8 +8086,7 @@ s390_irgen_LLGF(UChar r1, IRTemp op2addr) - static const HChar * - s390_irgen_LLGFRL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_dw0(r1, unop(Iop_32Uto64, load(Ity_I32, mkU64(addr_rel_long(i2))))); - - return "llgfrl"; - } -@@ -8169,8 +8166,7 @@ s390_irgen_LLGH(UChar r1, IRTemp op2addr) - static const HChar * - s390_irgen_LLHRL(UChar r1, UInt i2) - { -- put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_w1(r1, unop(Iop_16Uto32, load(Ity_I16, mkU64(addr_rel_long(i2))))); - - return "llhrl"; - } -@@ -8178,8 +8174,7 @@ s390_irgen_LLHRL(UChar r1, UInt i2) - static const HChar * - s390_irgen_LLGHRL(UChar r1, UInt i2) - { -- put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkU64(guest_IA_curr_instr + -- ((ULong)(Long)(Int)i2 << 1))))); -+ put_gpr_dw0(r1, unop(Iop_16Uto64, load(Ity_I16, mkU64(addr_rel_long(i2))))); - - return "llghrl"; - } -@@ -10064,8 +10059,7 @@ s390_irgen_STG(UChar r1, IRTemp op2addr) - static const HChar * - s390_irgen_STRL(UChar r1, UInt i2) - { -- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), -- get_gpr_w1(r1)); -+ store(mkU64(addr_rel_long(i2)), get_gpr_w1(r1)); - - return "strl"; - } -@@ -10073,8 +10067,7 @@ s390_irgen_STRL(UChar r1, UInt i2) - static const HChar * - s390_irgen_STGRL(UChar r1, UInt i2) - { -- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), -- get_gpr_dw0(r1)); -+ store(mkU64(addr_rel_long(i2)), get_gpr_dw0(r1)); - - return "stgrl"; - } -@@ -10203,8 +10196,7 @@ s390_irgen_STHY(UChar r1, IRTemp op2addr) - static const HChar * - s390_irgen_STHRL(UChar r1, UInt i2) - { -- store(mkU64(guest_IA_curr_instr + ((ULong)(Long)(Int)i2 << 1)), -- get_gpr_hw3(r1)); -+ store(mkU64(addr_rel_long(i2)), get_gpr_hw3(r1)); - - return "sthrl"; - } -@@ -13282,7 +13274,7 @@ static const HChar * - s390_irgen_EXRL(UChar r1, UInt offset) - { - IRTemp addr = newTemp(Ity_I64); -- Addr64 bytes_addr = guest_IA_curr_instr + offset * 2UL; -+ Addr64 bytes_addr = addr_rel_long(offset); - UChar *bytes = (UChar *)(HWord)bytes_addr; - /* we might save one round trip because we know the target */ - if (!last_execute_target) -diff --git a/none/tests/s390x/exrl.c b/none/tests/s390x/exrl.c -index 2c99602d8..e669e484f 100644 ---- a/none/tests/s390x/exrl.c -+++ b/none/tests/s390x/exrl.c -@@ -54,6 +54,17 @@ int main(void) - printf("|\n"); - printf("\n"); - -+ printf("------- EXRL with negative offset\n"); -+ asm volatile( "j 2f\n\t" -+ "1:\n\t" -+ "mvc 2(1,%0),0(%0)\n\t" -+ "2:\n\t" -+ "lghi 1,8\n\t" -+ ".insn ril,0xc60000000000,1,1b\n\t" // exrl 1, 1b -+ : : "a" (target) -+ : "1", "2", "3", "4"); -+ printf(" target = |%s|\n", target); -+ - return 0; - } - -diff --git a/none/tests/s390x/exrl.stdout.exp b/none/tests/s390x/exrl.stdout.exp -index 520919e92..30dcde829 100644 ---- a/none/tests/s390x/exrl.stdout.exp -+++ b/none/tests/s390x/exrl.stdout.exp -@@ -11,3 +11,5 @@ after: target = |0123456789aXXXXX| - ------- EXRL to OR in the syscall number (writes out target) - target = |0123456789aXXXXX| - -+------- EXRL with negative offset -+ target = |01010101010XXXXX| diff --git a/valgrind-3.18.1-s390x-vdso.patch b/valgrind-3.18.1-s390x-vdso.patch deleted file mode 100644 index 501fc56..0000000 --- a/valgrind-3.18.1-s390x-vdso.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 99bf5dabf7865aaea7f2192373633e026c6fb16e -Author: Andreas Arnez -Date: Thu Dec 9 15:27:41 2021 +0100 - - Bug 444481 - Don't unmap the vDSO on s390x - - Newer Linux kernels on s390x may use the vDSO as a "trampoline" for - syscall restart. This means that the vDSO is no longer optional, and - unmapping it may lead to a segmentation fault when a system call restart - is performed. - - So far Valgrind has been unmapping the vDSO on s390x. Just don't do this - anymore. - -diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c -index 7d02d5567..95508ad1e 100644 ---- a/coregrind/m_initimg/initimg-linux.c -+++ b/coregrind/m_initimg/initimg-linux.c -@@ -892,7 +892,8 @@ Addr setup_client_stack( void* init_sp, - # if !defined(VGP_ppc32_linux) && !defined(VGP_ppc64be_linux) \ - && !defined(VGP_ppc64le_linux) \ - && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) \ -- && !defined(VGP_nanomips_linux) -+ && !defined(VGP_nanomips_linux) \ -+ && !defined(VGP_s390x_linux) - case AT_SYSINFO_EHDR: { - /* Trash this, because we don't reproduce it */ - const NSegment* ehdrseg = VG_(am_find_nsegment)((Addr)auxv->u.a_ptr); diff --git a/valgrind-3.18.1-s390x-wflrx.patch b/valgrind-3.18.1-s390x-wflrx.patch deleted file mode 100644 index 6639756..0000000 --- a/valgrind-3.18.1-s390x-wflrx.patch +++ /dev/null @@ -1,33 +0,0 @@ -From da3b331c63a6aec0ec3206b1d9ca0df9bced3338 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Mon, 3 Jan 2022 18:15:05 +0100 -Subject: [PATCH] s390: Fix VFLRX and WFLRX instructions - -Due to a typo in s390_irgen_VFLR, the VFLR instruction behaves incorrectly -when its m3 field contains 4, meaning extended format. In that case VFLR -is also written as VFLRX (or WFLRX) and supposed to round down from the -extended 128-bit format to the long 64-bit format. However, the typo -checks for m3 == 2 instead, so the value of 4 is unhandled, causing -Valgrind to throw a specification exception. - -This fixes the typo. ---- - VEX/priv/guest_s390_toIR.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index fffc563d4..3ef104fcd 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -19008,7 +19008,7 @@ s390_irgen_VFLL(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - static const HChar * - s390_irgen_VFLR(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5) - { -- s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 2)); -+ s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 4)); - - if (m3 == 3) - s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, True, --- -2.31.1 - diff --git a/valgrind.spec b/valgrind.spec index 6bbee75..fdf40bd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -1,12 +1,12 @@ %{?scl:%scl_package valgrind} -Summary: Tool for finding memory management bugs in programs +Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.18.1 -Release: 9%{?dist} +Version: 3.19.0 +Release: 1%{?dist} Epoch: 1 License: GPLv2+ -URL: http://www.valgrind.org/ +URL: https://www.valgrind.org/ # Only necessary for RHEL, will be ignored on Fedora @@ -77,77 +77,13 @@ Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 Patch1: valgrind-3.9.0-cachegrind-improvements.patch # Make ld.so supressions slightly less specific. -Patch3: valgrind-3.9.0-ldso-supp.patch +Patch2: valgrind-3.9.0-ldso-supp.patch # Add some stack-protector -Patch4: valgrind-3.16.0-some-stack-protector.patch +Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. -Patch5: valgrind-3.16.0-some-Wl-z-now.patch - -# KDE#444495 dhat/tests/copy fails on s390x -Patch6: valgrind-3.18.1-dhat-tests-copy.patch - -# KDE#444242 s390x: Sign-extend "relative long" offset in EXRL -Patch7: valgrind-3.18.1-s390x-EXRL.patch - -# KDE#444571 - PPC, fix lxsibzx and lxsihzx -Patch8: valgrind-3.18.1-ppc64-lxsibzx-lxsihzx.patch - -# commit ae8c6de01417023e78763de145b1c0e6ddd87277 -# commit 3950c5d661ee09526cddcf24daf5fc22bc83f70c -# Fix for the prefixed stq instruction in PC relative mode. -# KDE#444836 pstq instruction for R=1 is not storing to the correct address -Patch9: valgrind-3.18.1-ppc-pstq.patch -Patch10: valgrind-3.18.1-ppc-pstq-tests.patch - -# commit 64ab89162906d5b9e2de6c3afe476fec861ef7ec -# gdbserver_tests: Filter out glibc hwcaps libc.so -Patch11: valgrind-3.18.1-gdbserver_tests-hwcap.patch - -# KDE#445184 Rust v0 symbol demangling is broken -Patch12: valgrind-3.18.1-rust-v0-demangle.patch - -# KDE#445354 arm64 backend: incorrect code emitted for doubleword CAS -Patch13: valgrind-3.18.1-arm64-doubleword-cas.patch - -# KDE#444399 arm64: unhandled instruction LD{,A}XP and ST{,L}XP -Patch14: valgrind-3.18.1-arm64-ldaxp-stlxp.patch - -# KDE#445415 arm64 front end: alignment checks missing for atomic instructions. -Patch15: valgrind-3.18.1-arm64-atomic-align.patch - -# commit 595341b150312d2407bd43304449bf39ec3e1fa8 -# amd64 front end: add more spec rules -Patch16: valgrind-3.18.1-amd64-more-spec-rules.patch - -# KDE#445504 Using C++ condition_variable results in bogus -# "mutex is locked simultaneously by two threads" warning -Patch17: valgrind-3.18.1-condvar.patch - -# KDE#445668 Inline stack frame generation is broken for Rust binaries -Patch18: valgrind-3.18.1-demangle-namespace.patch - -# KDE#405377 Handle new Linux kernel feature: Restartable Sequences ("rseq") -Patch19: valgrind-3.18.1-rseq-enosys.patch - -# KDE#444481 gdb_server test failures on s390x -Patch20: valgrind-3.18.1-s390x-vdso.patch - -# KDE#447995 Valgrind segfault on power10 due to hwcap checking code -Patch21: valgrind-3.18.1-ppc-hwcaps.patch - -# KDE#447991 s390x: Valgrind indicates illegal instruction on wflrx -Patch22: valgrind-3.18.1-s390x-wflrx.patch - -# KDE#449672 ppc64 --track-origins=yes failure because of bad cmov addHRegUse -Patch23: valgrind-3.18.1-ppc64-cmov.patch - -# KDE#449494 arm64: Mismatch detected between RDMA and atomics features -Patch24: valgrind-3.18.1-arm64-atomics-rdm.patch - -# KDE#445916 Demangle Rust v0 symbols with .llvm suffix -Patch25: valgrind-3.18.1-rust-demangle-suffix.patch +Patch4: valgrind-3.16.0-some-Wl-z-now.patch BuildRequires: make BuildRequires: glibc-devel @@ -278,34 +214,14 @@ Valgrind User Manual for details. %setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 -%patch3 -p1 +%patch2 -p1 # Old rhel gcc doesn't have -fstack-protector-strong. %if 0%{?fedora} || 0%{?rhel} >= 7 +%patch3 -p1 %patch4 -p1 -%patch5 -p1 %endif -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -535,6 +451,9 @@ fi %endif %changelog +* Tue Apr 12 2022 Mark Wielaard - 3.19.0-1 +- Upgrade to valgrind 3.19.0. Drop old patches. + * Tue Feb 8 2022 Mark Wielaard - Add valgrind-3.18.1-ppc64-cmov.patch - Add valgrind-3.18.1-arm64-atomics-rdm.patch From 089ce2c919f4a647b0d5d8baebcc17e23afda08e Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Tue, 12 Apr 2022 17:07:11 +0200 Subject: [PATCH 106/196] Fix annocheck setup in rpminspect.yaml 'hardened' flags need to be inside a 'jobs' section after this change in rpminspect: https://github.com/rpminspect/rpminspect/commit/56041870ce437bac53407608be6d196d71e46c0e --- rpminspect.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpminspect.yaml b/rpminspect.yaml index 5b6857a..c883d35 100644 --- a/rpminspect.yaml +++ b/rpminspect.yaml @@ -10,7 +10,8 @@ annocheck: # Note that all (default fedora) flags need to be repeated here, if # you override some config flags it will completely overwrite the # defaults (--ignore-unknown --verbose). - - hardened: --ignore-unknown --verbose --skip-lto + jobs: + - hardened: --ignore-unknown --verbose --skip-lto # Ignore files built specially without hardening flags ignore: # Valgrind tools themselves (memcheck, cachegrind, massif, etc) are From 17fcd94e047c3f0839d5ed4b6bc3bc5bb041eb6b Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Wed, 13 Apr 2022 10:01:16 +0200 Subject: [PATCH 107/196] Run tests from https://src.fedoraproject.org/tests/valgrind --- plans/ci.fmf | 4 +- .../Makefile | 65 ---------- .../PURPOSE | 7 -- .../error.gdb | 5 - .../main.fmf | 20 --- .../noerror.gdb | 6 - .../runtest.sh | 116 ------------------ .../something.c | 21 ---- .../Makefile | 69 ----------- .../PURPOSE | 3 - .../main.fmf | 14 --- .../munich.jpg | Bin 118966 -> 0 bytes .../runtest.sh | 97 --------------- .../Makefile | 57 --------- .../main.fmf | 17 --- .../runtest.sh | 69 ----------- tests/quick-valgrind-sanity/Makefile | 64 ---------- tests/quick-valgrind-sanity/PURPOSE | 3 - tests/quick-valgrind-sanity/alloc.c | 10 -- tests/quick-valgrind-sanity/main.fmf | 16 --- tests/quick-valgrind-sanity/runtest.sh | 104 ---------------- tests/quick-valgrind-sanity/rv.c | 12 -- tests/quick-valgrind-sanity/unitialized.c | 30 ----- 23 files changed, 2 insertions(+), 807 deletions(-) delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb delete mode 100755 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh delete mode 100644 tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/something.c delete mode 100644 tests/does-Image-Magick-works-under-valgrind/Makefile delete mode 100644 tests/does-Image-Magick-works-under-valgrind/PURPOSE delete mode 100644 tests/does-Image-Magick-works-under-valgrind/main.fmf delete mode 100644 tests/does-Image-Magick-works-under-valgrind/munich.jpg delete mode 100755 tests/does-Image-Magick-works-under-valgrind/runtest.sh delete mode 100644 tests/does-hunspell-works-under-valgrind/Makefile delete mode 100644 tests/does-hunspell-works-under-valgrind/main.fmf delete mode 100755 tests/does-hunspell-works-under-valgrind/runtest.sh delete mode 100644 tests/quick-valgrind-sanity/Makefile delete mode 100644 tests/quick-valgrind-sanity/PURPOSE delete mode 100644 tests/quick-valgrind-sanity/alloc.c delete mode 100644 tests/quick-valgrind-sanity/main.fmf delete mode 100755 tests/quick-valgrind-sanity/runtest.sh delete mode 100644 tests/quick-valgrind-sanity/rv.c delete mode 100644 tests/quick-valgrind-sanity/unitialized.c diff --git a/plans/ci.fmf b/plans/ci.fmf index 85710d6..fc00c44 100644 --- a/plans/ci.fmf +++ b/plans/ci.fmf @@ -1,6 +1,6 @@ -summary: CI Gating Plan +summary: CI test plan, runs all tests from tests repo. discover: how: fmf - directory: tests + url: https://src.fedoraproject.org/tests/valgrind execute: how: tmt diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile deleted file mode 100644 index 6f2afaf..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through -# Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE something.c error.gdb noerror.gdb - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - test -x runtest.sh || chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Miroslav Franc " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through)" >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 30m" >> $(METADATA) - @echo "RunFor: valgrind" >> $(METADATA) - @echo "Requires: valgrind gcc gdb glibc-debuginfo" >> $(METADATA) - @echo "Requires: glibc-devel" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - @echo "Bug: 672959" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE deleted file mode 100644 index 6d2c0bf..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/PURPOSE +++ /dev/null @@ -1,7 +0,0 @@ -PURPOSE of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through -Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) -Author: Miroslav Franc -Bug summary: [RFE] Integrate valgrind with gdb possibly through gdbserver. -Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=672959 - -This is small sanity test to make sure gdb works with valgrind gdb server. diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb deleted file mode 100644 index 199cc5c..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/error.gdb +++ /dev/null @@ -1,5 +0,0 @@ -target remote | vgdb -c -p var -c -q diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf deleted file mode 100644 index c7989c5..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/main.fmf +++ /dev/null @@ -1,20 +0,0 @@ -summary: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) -description: | - Bug summary: [RFE] Integrate valgrind with gdb possibly through gdbserver. - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=672959 - - This is small sanity test to make sure gdb works with valgrind gdb server. -contact: Miroslav Franc -component: -- valgrind -test: ./runtest.sh -framework: beakerlib -recommend: -- valgrind -- gcc -- gdb -- glibc-debuginfo -- glibc-devel -duration: 30m -extra-summary: /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through -extra-task: /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb deleted file mode 100644 index 147ed30..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/noerror.gdb +++ /dev/null @@ -1,6 +0,0 @@ -target remote | vgdb -b something.c:10 -c -set (a=5) -c -q diff --git a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh b/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh deleted file mode 100755 index 4e025fa..0000000 --- a/tests/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through/runtest.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/valgrind/Sanity/bz672959-RFE-Integrate-valgrind-with-gdb-possibly-through -# Description: Test for BZ#672959 ([RFE] Integrate valgrind with gdb possibly through) -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh - -PACKAGE=$(rpm --qf "%{name}\n" -qf $(which valgrind) | head -1) -PACKAGES=(valgrind gcc gdb) - -# Expect 1th argument as a path to binary to test with -_test_routine() -{ - local binary=$1 - - rlPhaseStartTest "$binary error" - rlAssertExists "$binary" - rlLog "valgrind gdb server..." - valgrind --vex-iropt-register-updates=allregs-at-mem-access --vgdb-error=0 ./$binary > vloge 2>&1 & - vpid=$! - sleep 5 - rlRun "gdb -x error.gdb ./$binary > gloge 2>&1" - [[ -d /proc/$vpid ]] && { kill -9 $vpid; rlFail "oops: valgrind still running..."; } - rlRun "wait $vpid" - rlAssertGrep '19.*if(x)' gloge - rlAssertGrep '$1 = 42' gloge - # there should be exactly one error - rlAssertGrep 'ERROR SUMMARY: 1 errors from 1 contexts' vloge - rlLog "> gdb output <" - rlLog "$( valgrind output <" - rlLog "$( vlogn 2>&1 & - vpid=$! - sleep 5 - rlRun "gdb -x noerror.gdb ./$binary > glogn 2>&1" - [[ -d /proc/$vpid ]] && { kill -9 $vpid; rlFail "oops: valgrind still running..."; } - rlRun "wait $vpid" - rlAssertGrep '10.*f(a);' glogn - # this time, no errors - rlAssertGrep 'ERROR SUMMARY: 0 errors from 0 contexts' vlogn - rlAssertGrep 'hello, world' vlogn - rlLog "> gdb output <" - rlLog "$( valgrind output <" - rlLog "$( - -void f (int x); - -int -main (int argc, char *argv[]) -{ - int a; - - f(a); - - return 0; -} - -void -f (int x) -{ - static int var __attribute__ ((used)) = 42; - if(x) - puts("hello, world"); -} diff --git a/tests/does-Image-Magick-works-under-valgrind/Makefile b/tests/does-Image-Magick-works-under-valgrind/Makefile deleted file mode 100644 index 67799aa..0000000 --- a/tests/does-Image-Magick-works-under-valgrind/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind -# Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2011 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2 or later. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# The image munich.jpg used in this test is from: -# https://en.wikipedia.org/wiki/File:Frauenkirche_and_Neues_Rathaus_Munich_March_2013.JPG. -# munich.jpg file is distributed under the Creative Commons -# Attribution-Share Alike 3.0 Unported license -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE munich.jpg - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Miroslav Franc " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind." >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 3h" >> $(METADATA) - @echo "RunFor: valgrind" >> $(METADATA) - @echo "Requires: valgrind ImageMagick" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - @echo "Releases: RHEL6 RHEL7" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/does-Image-Magick-works-under-valgrind/PURPOSE b/tests/does-Image-Magick-works-under-valgrind/PURPOSE deleted file mode 100644 index fd23e2c..0000000 --- a/tests/does-Image-Magick-works-under-valgrind/PURPOSE +++ /dev/null @@ -1,3 +0,0 @@ -PURPOSE of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind -Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. -Author: Miroslav Franc diff --git a/tests/does-Image-Magick-works-under-valgrind/main.fmf b/tests/does-Image-Magick-works-under-valgrind/main.fmf deleted file mode 100644 index 042dd60..0000000 --- a/tests/does-Image-Magick-works-under-valgrind/main.fmf +++ /dev/null @@ -1,14 +0,0 @@ -summary: Testing sanity of valgrind by comparing outputs of ImageMagick utilities - with/without valgrind. -description: '' -contact: Alexandra Hajkova -component: -- valgrind -test: ./runtest.sh -framework: beakerlib -recommend: -- valgrind -- ImageMagick -duration: 3h -extra-summary: /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind -extra-task: /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind diff --git a/tests/does-Image-Magick-works-under-valgrind/munich.jpg b/tests/does-Image-Magick-works-under-valgrind/munich.jpg deleted file mode 100644 index 6250ed603b92955525d5a9559cd6d8624d2beb0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118966 zcmb@s2T)Yq)-Af5Op~F(CL^(lN|KyuqU0PzXmZY3Bnd*3K~SPJIY^S6L1}_WMnHlf zIZ6(q!YlmF`Op7e-MaPuTX$A(hdlvI@f5C{aa09gRQ z?JA+Zs)E8(ZCx!T)yHrE1Ofm;MFRx|4GdWTaCP(X(p8pcGBz<~!kq%J04(6ISy_8~ zXy_^F-+fV#)6_D3_)zShEC05O831(WPx0Pe|M%?wPb2oy*Hr)j5Dx(05!(MZAMxLO zFJlu^0KgXo003hDkN^12NBrYk-uc!JRyF{D?*jk;kF|%F4*=lj0{|dvC0|4;K-^arT0Ki9gYkh339RPsf?uiL)Y`v}j9ph{5stN!EqyPXCvi9}z z`{$Yd9t;+M4-f+s02H7Hm;nxe2jB-D0TO^L00-0nEkGYI0W1J(zyWXtyZ}ES7zhKR z03?tEyaFtgw=;NiS-@p5bFk;2%8q03tJ3Z1=|?g9@`H) z8ao}k7`qW0jr|3C1N$5Y8;1&q9Y+L51;-f25hn;I4ks6<8mAj)0%r~93>OC%ipzy7 ziK~Tch3kzQjhl&EiQ9!cfxC`-g-3wLfG2KfC=ssh!JQLI1q#p zydkJ17$jIB_(@1c$VDhmXh!Hmm_S%U*hBc0@Pvqvh@D85$dt&3D3Pd)=p)e*(G@WT zF(0uiu?=x3aTakC@dWV!2|fuMi5$rjl0cFSlJ_KIB>SZJr0k>$q?V*1q}imcq%)*v zWaMNI$u!Aa$>PW=$Og%_$Z^Qo$Q8+L$Ro)M$v=>6fG^7lm%%be1T&BXHVxv-_a;8e6dQbI*>gPTBdvf<|@5SD$ zx;J_60!j;&h1x=q&>HA8^qQKH8cyv@okHDAy+nga!$qS_<4==EgQnT1rJ$9dMbIK? z>uA5yf#^8tbm@ZV3h9RF&gkjsmFV5+GwDCj?=w&_$S^oEq%m|cY%@|YN-;VxrZILg z?l4g@$uhYxy=MBzba6XP_pg~bnDv>%nQNFAS->nJEVe9ZEFV~oSQ%I~ zSf8<0uzqF3V-sbwXM4@o&vwDi&Thya&ECwu#R26|M~ugnr+{acmw;E6*O#}FcZH9NPn|EE zubJ=Q0m}o^2gwfx9^5<>e(3VB@Zmf^IlmfzIDaeuu>h9C>SWLA_yR7*5obWjXiOit{%Si9Iy z@kip`;&tMO61)=566F$GlI)VUl0}khQp{3TQu$IV(oE8p()rRWGE6d7GANlf~}&alB_bLN~elYEmu8Md!!bk)~8OOuB)D<{{1oMW6#H}8Ws>PO^Z#>&ERI~W*g?h=27M|PdJ|VKN+&1 zv2eENd`kS(^67g^EK4KHa?9UVT2=*C=Li)maeUCWNyxGeeU$` z{_YbV+#XRL%bwz%uRIUE)VzwlLEh%xEj|=J?mnM=VZJYXzxzr1W&2(E8~E1;kOsH~ zd=BIaj0xNdf(I1^V+JFFd!OBZ7XEA{L^dS zM5IKVMH)r6zMy*%_F^qcDXJoxINB?E=B4<{w=q~T4lyIKg0XL6Z;;l=p|}Te>2bf~ z5%EI_4-;M|+$7p1jwA^u3i;|R-6DM`Log%n zHU4Yg*DG%xziG~7$xO=pmF1B2C0j1LI)^qVHs>POCU-JVHm~|E-P^dgKl2^(XHiP1 zrUJHt^g`@H-@=U|!=nCTk>auv>XNvU-=%J)D`mQ6edUkJ%PZ(A5-Tw(eJi)$nZFya zQmksJ=BY;2P}U%8ZfkvNck7hF}4ZR6wq|k?9jZ@V%##( zs@nRYO`@%#owvQT<9$$D3E?6)eM+ zYgQhubbeR-KD?^8I=_Zk+gq#*K~Jd&wcNDKk9(= zAm<0ikNQKI!{H<2qxECYs0QTbT?I{NU;3fmWpVZsiUj?_fe+mHra}fY~Jbi2f?)n)(!QCU! z%hBG!hY4oQ$t3Xbp&$>Ff|Z-Q81F;J z!GGfanE(JVpa56_Zh$-B1~37tfE!>9@B#m;$o~`jZ}+C~zH2P~`1u6+nP7i^2j{9G~U-OI|y-7D~azORC+ro#Vx)&I^;_5XQN zsiE~0nh2#<=24G--Ffp(&@%|kH!XU#Wzt4{)N5QOP z<%v4Nh6seG)b&oV2+DsyrqsQi2M94i00tQ*86X23`oNCiW{*MIg{a3ED5N+Sf&jv= zEdS=kY8<2jT5?~spjca|M}vxU=$>;eefVk`l7d3sp**0V5nV6Xuvr9M9?HFSM-Um{=MdV(Kh_GW z?BP3}5Z;0en}={F{5=2TkVrB(ogoy{k&q~qd7!d%IP%C#Ob^~JwTmY2w9f703qF?&ItMyd$t;ui=bVsV+i)~m2bfm0P}!Kse={JP9cNN6!4>LJ2KSdI?jHIhfik^{o8h9>-HL?L;wR^uS= zbXId?lwgQ-B($JM^Zzv#TT>wa?t|g^&wd!5^8X2YS>Z(L*d!t%_|VFoI=xVr;DCOR zevEowic26B*`&trPuEIyi0w@h2$B8r~SNOGP%iUEdr z6M?4U)aRVj&VmG>G|}=7x@F~aWn5eal>E3Htc<>p9Nnair!7U};ZaD44`)~wkM4FE zX^xKWwq7j?!f9MkipVdkQ)7;U7?*Kz-5nD0#dsl_P#dH@La3dOk+0QBPsJI-B1@+; zp$GIr-c9nuk@{3(ZL!%~D)|oi)6`C?VkjiERK7NWb#kx(&5vJjmkDF-zh@0CwUXyo zfK>44AW)(O=m!waxiTe~2BOcPe8j;53#{U5s-23~a#FR{oGZuYR&Zq$((j|f21{zAfq%*Zqav{o zNk-XuKKu|l*pbjc?lIhOB=J-ISv|4^tuQlO9T)oj$2Ut4j8tN^x29uXig_rsCSIQ{ z*d+v|hY*!$l=y74bPzW;8@IJ6G41;)J}G2)Bm4Y36j`&=9^e|}ts4DBQdD=8zB1MG z71rg?G(*u!&tfPma`T5qZ5oy#uWFKX}W>TD{Bk-vsijVBF<9__@9@9t!Dg z%g}qMuFH_R2QeYz;{H1gqHrhwh$=j-=d2Hi5C1VQ3@oF?lBzchvBIR ze*m#kEkG*-6riPGh_7Nn|%Gm)#59M5dO1# z7HDA~W3>-a=lbW-;b9HIT8%0M7sYtDfLdZ*8JXWN zB(30l@jhl3EKF7~TscODFs?pF=Za&#NHBk&lih;^BSCkc2GL4;<&D&ChMv;tKJJ?& zXp|9T@laS5edRyG+F-dwH-(k9IDyD|S&1v7C~c1!wVEwRaj3Bx%~@8!=c1F6z?2%| zaI8Sd8?!+E+=tT`h4i~Gic&*U!Rp41??z5zYz2r9tZqC<8_g9BtJBWW*DzIz(|9ug z*5J0XCVpq|bRtm#bU0tKnw9>;aC1_^H>Pm#aa1@5INsyo^PA2}j;CC`EJn(-BjhiS zZl2N>`gHch7RD$)NDmVrzFHchOAPjBNJpXVWk@V8H1p6`FT_AT& zdK!ICUxS-i>pA=-HcH#{f2xy<$LEd-QShk0%%WqRAFgj9Npayp1~1&A?zL9uqeyeC`@rP-rFs56en zAb=PbYu^D0wyk4H1*=mlDEN!sXwJF61OS%>==>p7t7%9c9Yd<|t=O|d@@G5mw9&k< zpf?vkf+y>Bexg!29U1CQ;H)`*LNgjv8Z-*VJE?JfI9VtyHL502bDe-!NNA}_VhPWu z5KeZ(v!c~#&Pk%j*mD!)A=}4rq>XFrKU{MM^MAzRKV8UV0?<)Ej9)=v-eQh{4{fLx#al|K&iCJ{rCf?xiXDASl#IsA_;@-e#WB*Gi;zG*F|%>d0E;KsO1{Q9?2EM~GwJlm?RGf$s5Yf{5H)#6p6E0~E6kF1C zQo}Eu7pxbhmzJKYJQ_4}XZH)K>9<`=@h=MoS*<&1-sEUUV3Z>~fFbEGFWSu<+I}qD z(66U*KAhrbg8wR~_0y_`dP(H=%&d%b2|fDGCO}H@py5$)&gq=}S+!5OWQc7E+Vhye z+28Z~d&^fagiAoC%o{t&kiZeIoAIfnYsReK9`236*tI|`2`Pq|mqh72hXj)umLAMjqT{LyfUKTH!U+_o4mM1wO5 zgxJFiQA+uflvJGh`sd(?J0Sg6x&Ol#6n7o8UY)k_U-qCtLVT=L_lamCRk9#;6mP!^ zNpf5inw~Sf+!m3~J<6ViNb>j#HRd19eF5t{)?U!krOIHAf>jZfB*+!V78D;`7OW=7 z6=~dwH;ju*96IL21LK0!(K4!O$CG^ic%W`d6G?-L2nGiaO5qnQC(c0{uSw*8^x!!7DE(ppbfSAXJS9Hs++el>2Djj3D%?(yT1q#{Vl_DaSLbpDvbO@^7uu zjB^F%fBPD|6R9GkdhbN8@!jhEC(8GzSgVcsclWwL(&_ILcMcmWCyTZ{4tR%faI}zdWQg9K;zyjD5$n<{y;@^W`@F zV2^gTu?>8NWBx8&X{rY+*qU+zt&?8J0Iv`l9jvQ6D~?Gj$4Dr$T`6ZYWnrONs8EvP zm%9?BW}UKq-VkUlyZK_-kBH*~4(_*T7-5z+;Ex(~VirS19%$N-IPtDcK^l{kTfRyA zJd{!?M09hxr08l6HY&7gON<`_C0?+4rB~>3)Ed(mB#k|UvtxXOM%&5u=I#}jGJ50{ zJ2G897x^y*`3nkt_9!l793?(VS^iFnqwbUi;-kN>PYD+1;(^`0TuM-4!;uDHKQ3}O z6{o&&X_>zMx%^gXO~>ahxzx^{!4c0TZk^Qg21_R6ZU@yz{)-e%LR(@B!*AU_ervyH zIB2yqyo14A5%rBYl+%O6y~-PkcptW)>};8mZ5|{4)s3LNOJHfNJ81LVH6Xis`Rn+O z-qFSRO`?Y9vzhCvMNUEln=S-M7Wa^@2$Onoz|QhxNlCK1}YsM{=f7KT|JwVj>jF?M9?}QH->2wpEG<48Ztswuk#G{03|Q;F`5XpL{s zD^KzL5%hMX|I^{g?53!~NWGNfzt&RyOx$UQ*#W)LiW~ptO=yB25n{kt-PNPH{h z9Gd1T9(=fv(Sw_D$#Pz8#g^N@7(ac-{Lx9k)`I%gtojUz2*WD}Ce+-fCRR#q1?TnYdJ~;Aq&kJ$?CH83=l< z{q+YNqwi8kzbY{~zw(qlLnH|3Hg#^q=)2B(oa#tm8DdVON_RQJ{!$1}hml`Z#*_=P zuYnN-hV1KuAut_8zBWoh=v_uKBASSBe1unFGNQL|KBUYpdN=5eqZ}f&7x_?We(rl+ zPDpv+P=D|=ZRIkFdP|#b;m4()?}3l5XCq3w=KTE+UMYML_Zv0KmA>ge2{voxyKh2{ zZ_L6SE$TB$;uU~asr{2)<9Ip#v0ObA%l4os{$tFdYj2Os1__H)EKX%3cR9Rh@B>>c zB0QX=wV8e|=VD(*&;0Pn%y@Z5JWE}wwkd1Iq3_xL3wgj3%DQiUz$3WHA)UT?CMGvL z{$qD?dtlhw%5}Q#?7SM~!_HstYTQfOj}OLQ>OJU}w(oR2)8M*Zdw1qa7WC5a3Hzet zr0M*i<Ce(|~d!hosK}WyF;n^q{s0L<5VH4mybZ%V*mZa5y{)hlpWK z6{QmVGK*&%6?p)U!W0rzbkMOXnj9}IsP@g?=7RWe&Xs9^#ku?-R4| zxS#fhK9X4U%nG*eV!F@N5NNp)rx12w#q5Ln54vFI-(%?f2G7{r?AJ`bPRvZw(PyQ1 zhvt2^@Y|IP?WAet!oM;JAUN=*-j_~)%|oTye)b5F7AN4=omKJQ5Zndzm{aW=xCx=A$xRMRhUzW@s0A zHU{8sdf&9x@SK4N${dI_>6~iqH*Nva#_iC)KYKG->Pp0GrB8vc`*4NwTfj`=L)u`b z341+pVd-wAt4Lzg4yzXiV7|}6lBhg2ZNzU)@gPnnZdD``Y?(-mTS{NyuDEv(TbMvd zg$f`0GqKvnpt?=6_rj?lWA~?Wn(tjyfbnyqA2J=D24@opu%bwz*U>irhD|1s&U0?Ghdp)^83tzG%JKI@h@v z2_iTOjPwy81#W@Fwo#cq%0?IKtOi$yGVM}ZQ+bp!T=PRXTp6y3mMuWjQ&MqJHUu@2 z!1e{tizamIkjshF@Esxj3j#!(j$N93Zj9vk2z#{ST$!OmxsV_{PUYQ%j$O3loFj=) z4S7ly&!kU(6>+9iIok+xoRBVkomo;R;iSVK2_!Gs_P|o;>8oJ2P!7f#U%At0W zTZmJvV1ye?nMGZ+8SPMuGC^f2ISkCi(GwU94l#iRYl(jf#fP63@Lm+VrWQq!!`d$j zMi^s4IKR?#!C$Q9apI&J|C+E%b#dkUP!G@InXt=EL7AXbM+m2CQ6>Y-_2LN|jZNv^ zww%W{B3}K>0$#f{8Ftcfc{ioC>odt&1H*{-r8JrBiL6ovSKnub86EpcfwuUP*A8$LHo-URK-3V&k&}$5+uwXeBFOjkMZ20$s0g zxEqqKndqLUe=SJlRoh8j%A*}tT;jgqrR5WO(6xARVSQ3<#g|!Z;=9ye#aBUwYWI6| zgGpyY*}o!zT;937m~=k*Dp%XxOIz#ljfD@i=sjm?&5(alHTA7*gubV z?X$KstLp5;YGk){?BayE@5`5!-DL)5=wO$YMO`o;w;AmyhWa~UFWnG7KEh28zDwAI zl~M&V+QCSCXZyZXa3an|)JMKHi?mzGU#UamG7?|id1b-}z|Bzltc zYtLNwaL$bRiQ~MFb1!Xz!5fB>FOnfo^#fj!HX{$V2B~pp%1l>Og<@gcEgt%jduY?W zV|9kQ^6dP2>`Ve~&{#>p^%s3XH02s2K8=9)ck9z2d*;Tq-&{zJpiHZ&$!C0>#Y!TF z;<+7B9uEb@)8c8)npcA)d=p=k=T4d}D|YLOQf@4H`2;&YgN@Yl*py41;3(i6-U9QT z+|x#N7QRn4Oct+_SZPdhK23VFNV25uZEJnbs;mfI91M$Or9Lg$HDk9Wbm7+Q_t$%j#KNESxpT2R`jv#;J{#&n;l2% z#3?+BXM98nEjM12rXaKrlN=x65E6tVqwL~@awhEJz?AZ7S=6P7NqRC=7SDuLksw?_ z$fOi835LMx;nB%D+9TjQgbSm*#P4PCObRLp z8Ebcpv!}F0@AAMb9PG01LKHG943SD%H=o!OQmQS!=f25U)btEb6utiP;#l<&mcO2? z7Ii%5)^f^Co!0Ijen(%I<>RcV&i=_U;hX{rZZCpIG9vDc-fdrpgw4Ev(*_y$=N|TE zhiGo%@$@_;Dtra~>Y2LBINn^2=vYg|eo$cJ;H!gOU9`_+SFsuQ5R2%V=y}D?%wWT~+yv6$3Fs!OF8=>b|8WEF>4~bx*IS@`h~>a&&8-)neLA>e^0T5$_p#I&UHrB5OZ45OV-JCeP?{VKg@Kb#QG;=yU2p~cVOmoHpD zx5t>gW(sGz;dzMr)+*lc*$8{KkhMmCO1}(*muc#{z0Ae>H817o$B=SD(v--t9g|M* zSHA0rPfM``Lc8%E-tnjN4V?iKPEvZ6V?Ou#a|`W~Q#}Mq&o=9^5+sZw%p56^WL%Pg z)RJ`mX9sAP4^v3ap`c9LnkSC)vzmMI^Pj%Wn6X~PIik}16Np#htNA}h$Zc&c&sOb{ zKfVQG=%puJup3nT-o%PAkZq+bcT*1ej%fBc+?$yXdC^o;CYri+`O>{aK1tSdVO>he zIUwr=#p2o0;!NU3LmA-^kihJ|)P&Eo7foNQ?77^iQ1K0`Ry?I5xHN+rGRzr@=l=9z zzfOA)-P)A!Cq4z<^i0}UKgZnV>q66g;N2QALvId4lyI~mF%;i(CAW`;-19KMDZQS`yf`??hgmq(tFp%lVgFrRF!B%;h{|$l zq}m0%g+%ns%G~mCz2R-yOYkhfU&y576y6p_$BUHA3DmC}0Q08}xH+*cej_UGYaMt= z(Y;+X*^vFZwW+SXF~Pj%1wGp?<-OhUv}S*P*?^>H}|aiwDEkEALV%7n3+uAsBt zLMNhJMr$Z~sIvj-;k1MC0}EV6j}$=Xgmu8&ndKen;<*c#M64bnk~ z(a|L3qP=H51H$>g1=F7knjNhK$i8`jD>_f3up5X#&*g1Bm%{cgDXjE1Xvn3*G@qs@ zIcta7#5~>A!zS(DSA#7lk&StI%`t54m@#BFXvlw1&#$3lXCzm*7sHcV2vbs_wpy4H z9&PLQPkNW{U}@w#^&&!E>`B>S_)dIHlb0Nn$?(_Fo8eoazB2BOWi)+n0e_SWs55q9 z7oWdwJ@0&WaL2_4S=ap`hPROcxlKJ==uHo=F$Xf)5&tzX-|lM>9xEpKg*St z@EBkGC>gEA=y2jXs^>UFy_V+{Y@I{0(&8H_P-a5INgu{g{PGIXNYl8qdc(AxtT^*w z&aCU`S2O*u@O{tUER3U#)r5y>Puk*yzU?wQrqC_PHi~5NP6L~}wB=RPg0jSJsJ5&n z#Zd$5upzJt!xe-O-?MGkSnYd?!LLhQ6#PKI2TRR{MeJ$>{dQ2v^&p@w{W|eMY1w;(?GSK|cYGAx~{rNo| zfaqTVmj!%MXiMAKAI$eH;1b<1x-8o^4k>zMJmcZZG6ccS&eg4eW7>u&v? zC#Vj4YK+$6#F{|xTSz;Q@M~a*$zJl$*l8(=wnYLuU)r2(RN_QXIqC<^r?-7^KYjQ5 zr>ZTv?X6{EScq{>B#Y{;XQev3O~=&Bmo!$)6?i|qvyF`$#6qRNzvb^NuG1sZ0CX0 zZ>s?u`uA<3lp4%}Q8Bo>f9o zO1$@J#kT9U?O7me#^j`Pr88W;{GcGE#AM78vNn?Ag$vzmIk+@D$7HTK7}4Tg%+5Ht zo{r<|+O1S~e;H}oN|tQIQ!x_1{xgQX{)&ie+M+ll;TwvxEhnxyOV!qT?W%Q{98Yv$ zm~NWDxUjJy`r9LEn!d`{LmUiSGqnfPK@Euv>K}d(drg#|4Kz32J2+4&!&$e6-U1oj z8)k;aMRp;Q+3N?lK=c&Xd2S4w{M&mQNlU^$-PC4g^}T?orowu zY!S0)3gAiS^?gZu&V24%%Uk`}n3yCA%5n>2pg2qRQ+KxXgBH*VDJ`Cg_VNC{jCvO8 zp?#Xwsj?$A=2QUiO!Nw{3?-5vS+zImD@N=}G@7sfWS0ChS=pe~ld=cmqO*D_RTfbG z2X#H0TJ&3f_iL8YYl}9!(IUQD8}#=AOL)5S}4QH=EA1_q?VBK~eS~te=29-})BNFkbLY(&3>sv*^e)UjH#~ z#KO`f-AHZwLf!LBj04T^CiMbuja-#UUn;2+pHI({zeS9iHt_7CMmV%fN-l!9&bPUX zcrjEhNV;uTJM3fi(!T9N&ttNKg_M(un^T6Nj9cJTAoTjF%=Vd$|Ha8ef(IUfk|eX= zUJl6m9i&5LfFDqXpBFWv!!v(0B>E@!jQF%&pM1(8Tu&O-88h6|;|p~h{Qj(Tu)Eah z^*1YX0h!;Qn?L=`OHbX$i&U;p>+xGi$)OQ@z?{%y4>w=QaPi);aIh$!B@=)2@IVrv@3*xVNf71Q)!P~PS&c-DvyQAOF@)llh{5;k8I6d!Z z`FQjV%jx|agRPp&B%||bJL$Z)8*<_=4FV-8r%R6U={$Em^QJ>i84KBNfuZ4BVCUJG z+>Uteiy$>guL4B|^Z1;|)$UO9=~pv6HjHg;FY+XEg4SkQWK_;yr0&*~n!lNs_+ZnJ z5;nvZ<1jSHfOsc&$r^-QRw!R$RcY#Rd=4mZ-S{6+6U3P6nE4xH=!IggI4M5L-PT5_+)4YeB z40?tLp=EzGVRM|>Vr_|NVp1*6o7K?F66;-B_KsuLV}w#XM{bCJsHU?BLje=Eb;d-l zVB=S#v|GUNa5AdDNSZOE-L$ALJk5hKp1~vFg6`L|ou4iV;*YG2YAySoe2hBGK=bjc zjk;VJX-i9CMbzFCab96j2{3R))$vY(XIzcQ8WQCs0{e zB&fQC7yOQ$(>(ria9~+bZkaVjD}Lm~by~Tsh<**0VkS$9k%OOfmavdXq4x1IvJPB)|2aRE`MCgJ^JufKnR4(?8eTGO(*0;^Y_~=U_ z@=9^$Z~3V{Z-kV@9z}cvg=_cRM87^xCWolCO1&(9r=R+m&BWqj@{uh_(P71NZY6Sz zBg?k>kVY}!kjnVuy$1p zp2UsKw@x|TTlHt4o0K3nWtC97K8^q5Nal1&4l^{cp*vtD$Ibr}!WGg?p3s??%E!Xd zNxsNJ$ESK2ZobKD>Z6o|j_1T>If*=B4brvgPKG5a(8E7Gj$jjKFf~z+%o^0s{{eXkJwFXQ_ZaQKlR==u?3pTPe2RkY&;u+ zPBgVX<$Wm3&z@^aOAB92nNRj5ct+7-X(ZM9#lCgZ(Nt+{15R*>rda-j5taPDBJr~T z-Wl|!fjxRB<~-OZE1_;R)Nx88D83Pry@ z0+R$1C8MV}VFAbTC-2*S`AUEyL+tEKs(kNdnIyFob=O<%h^2IUcf4lAZ<5(YW+~m7 zP#*GF^9a9zO;Lu%WSaC%*2Dk>Qm^gfNlz!Muf^Do?H$*S@@q0}Obq#pPT z?q#dx!@2Ur=I;l6>eGzg(@cveP9AEtMlXsTTUkPn#BPBmr|zRIv!>}F7PaP<=uK7L zvrY1V=UwErgG`azTm@#$8o1v-%vbL`>1a8YJ$-JqEuh8GJ(>BNvB7h~-%HCQxqn9B zjZK1=5!x%;EOPJU{HMOaMuPgv>mQ_jUqXUt+i6=|U8@l`>577b_*OZmIhWEa24g0C z!wK{xud<8i|EvXV1)aT_6()1+^7=7H^osk%QjTXHXl=4t%H5~3V*6nvwSO)x)(Jmt z{7orkTDgj^#ZK+8jb}sP9EPl%n!H_t-Jt#qcRD z-5>oX`ll~v7XF(R$$1M9SW=h`dDyh1=*r?y-1vW{Teoj+^zJH({n2(!V4Kb&A|B9e z^c*6g_%ZEdk-PScK50KOazbc0JDP%R@sN3d3NwjlRF*02WBJM-{wL-q>ehTh_T7X_ zJdspVGrmoY7hT>6}y?`U_{UT(w7p{ZJk23ruOlo$6idj zKsAQju`oOYQ|9XpuRn*QBk!-QSU)u3E zstF|TFZQa))*SB(lUUEn{-r5{kP=(_?Mzv*J5qISb3M}e?zmS7k5av|OVKkeFSJYI z^lhGlT-gYQxLK1)qNhMUef#N+&v!25IWB=~cEDkVzBP1+@E&gK2*pz?e^;z6S~==J z+>qv3UhKXxtoXj~#mWYl(%B);zi`b=83arm+-I}ZR+p^HAJy6*?s;2wiI#GBPSsz% zdf5}3Iqgn(&+bTz=~oCRnG=Re%0(E|{uGRsTH2>bZ%Ie^JQH}I+;h4uJLXyb#O7jzEvkY!~B9}CO1yGygK6+u<>j|x&G`YaiPA9p$t8si>e1ozQ40( z@-woM6WplHockZe8n3J*_8bLX|2diemOIUfNiFn8CpP9KIYtk;*SC^d?RlrVB{{Bz zB~ENr7s`1MuB0C&-&{L)fTx*){?TdFIOoLJGbnhTH&sc~9jSW`&(`$`+5=r}^wX%BMCPVS!eRAI+cZttRZFVw#h*0b?SHPeZwC4O*4A6zmi1Uo4-~1s*l&Fku@8~ zej|9eoGPWHg^_sq#QBM^&w1>6?A!k1(!lqeKmRE#?%MreFs^ucldoT*N@K&U%Kp3BgS6H4K*fZ-kJQ&|lzh(WQO#Mj^k!N) z;+zghA+L1ZK&*Vx(E!}K%|t0Jw|Gf23B@v+~}egbfBD%zjwTXT?DNbs<3h z0j?9@IEemu+28wZu1Srq%2Ch72!^EUdxEI+ocqWI2EL{ z)4`e1%V7YCU0#D*n~lsMWtG(%#mmOu7SACUq#x<{8{3lW*k^d&8K3SXFaE(+{Zr^k z@i;7s@DXqVV+$A@KphOeV^OV;Zav=Mcyz-~7)uk)`QbGS#z_y6EY}3F{?{`FKz}ekKzYUAzF7qJ~^29d#B{LuIVW! zfqV0l3A(o<4c5jjY_;>eiued`oqXL$oWXB$Xid`d2j9*bRG8bQ%5e zz-b3R=f!B~_EgHchMwbB7YUN8Sg-(}FQM)ID!F9;0E>|Gf~Wi_+D4FJk}yc_Umws@ z5;DaYU;&kZ8-pBo?geh_W?Ye`%(D~52Lrt*20z*TO#~PMoE1}Mn8Ya6lwbw^bfCU% z+-~>Dr3w_Ro{+}l>L}GVleYss`_NtuDwUE^uweU&3cE%Z0B1CzQXsXGZdGu<+C8c+ zRmnAt$?QhPcsL{4r)k!TMr4eIAD1JFnGKvV43oXbIX<6ik^nsV`--A@?NT-3=_%ZS zu}Iq3DeAbuqJ|jZjbn%^Anc%0w{USsoB~H5TF&I?*0HOx464}-11bI!o_|9^I93>y zA_|DS1s;^Jc%me*#xYA<;BOkc2n>u8Fnf#|L{{k#D+(lPPDmN=?@t18&wpwqVq463 z`BAO#9um7@Z6NmoiaU7Xk>rjvR(u9*u_yJVgWukVAa|v$kHc4Dz-$f|-?^yrEOv`= zc@#*qEN9P>Nhg8d=0!*xe-ZbnI?EGl3;>+mO_TosN)PjI<3YKSQuHsja;cJRU+Gha9sZY5XY~4j8wbD*Dv); z%N+@9uAy9bb3t&q8$bq3llAO9O;h)dr(2CBMzzxPej1aLZI@OvS~e?&CL6jGE|>Yw&oOD9i7do8T?vPX0`E2~c1jt@NZnquwr*FN2b*hpjFI(5}{LrHbsdVDD6k;kthqP6~^Hj_Ptxr)lxW4Vznk|tx@X>U+}PJJszELs$)wzK)`1kO5_9Ff`3X*5`TdWO)tcB9-_2lgW>EZX$iJz{u>&uv?hA)Oe4#$o&h~z$O zH=86Ldvn^f8h=|BSR~Y%<|%>|k~?cinlkJkvkthW7!mf6c>DZsvm1m_}>Qj$~)`ZK$Y=cc>uxB1( z2h%2^d=8l&oD^yiu(&O8kA@;amgMd1AWTG>IZ$R`9pdg z!`7RZURIo3rh{n}>Sq@bU4R+E$aah_*2k#qe$|R;Z<1D(ek3xqgbZL~860D_YgKL2 zI*Qt$mPGNqF(C3t<$)O;l>Y!cRgM^=_@6%F@pDUs@*9To@@e2_o?tf}(FxmV$s8sJ zA24{Ww?tgM{l&~vT-;3YOA4$ro$*Hqla)-8eKCvxE1hbw+1Onpz1#(%ebNZ`7g4** zyRaM#eDh0!+9|Jv-KM!`V{m}TlYa0O1cC_Kxdy4thB+=N*5Ape7J0%J)$jZl+B;ZY zMR>Q7PWOW4A$Bc*ODm9g^ZnK>rk1;vze24vsTbWf zeW}G_^F;Q_R_04+gQIVBT(T}p1Kj4MY1+m0j;F51vs=ky7)c7TV%y}}4$P9fa(KsK znx*Q`gVprO?`$s~I}5AyW{AloGD9MRpW!8&p5PHw(tF=O*=6liWg?qVvWq~whSJhSn^b#uQ!8a{)=0w0R{$2_ z{rJW+&205sTbSjAAtpcC=@pDGzi)!YJF1Lx+6p+fk%yuJ|ksbPv$uo9nNa!HzvP7 z?5?QeT{6ji)ah@j2%{Qw2^)BXVGhB&)N_-xA5Lo%acGwIup5aT-aAEBkd+>D{CM{4 zG54)MT;0WK)EARLTg9H@@uYZBPWFknlr8AMsNnmW&kat^-@=kC@oKx61At;O{)Bpa z*G?D9G0V{%8}R$6Ewuifl-*nE6F@<08MMZ3+3tke?ikU^}m%b;4gUAF&_b)WXZ`q7aLn70&$U_O5e}Y+8nl~ z8=WoZwj>ggOwPY9H&i8&D_2CL9vvKx&rRv+3q^CO-ds$8m7c-{*g}!P{O55bk(_ag ztJJ6I`*}PId!&{*OO zJthM%QQeC%P^0QI>+8i}6Y)MMBxzej(iTIE9jZHa&lx?>ty>7RsTIm;yJi0XOlwwu z?*uktW|m8U_R%Da4~AR6m(YRqKAyF_)o)|e^h?O>gTlLfFw8K*K`27NbH{QIdcx>k ze`~HVN3heZ!tNsOJ7ppkP*@gnJfVmKzD{b>Tk3rh(%$aVLB063lh7N2Q!23zr}GKQ^yxtZA`bX+IFFJ>+(qr^=DI{%mueIr;pn zmTrz|wKcXZB(;&Da_BH}alow|rnP0ISz6o04Z>T&bhkq?iJ6&r0PwtV=rdU_iL$mD zox*AesdFin#EL^_J%Av8jZdZN<%!88>$iUW$CD&xliS?WHSsL+}>i4(cosva5q<8=YQ_e;)jt6X4YI>r!Mi{t0O54k^47W0cVuiQy>+XL_ za&1=9?MQ}Xl2pW>n*fXq=k=@-X^1>-LwpUdl6xV!z&JPk9y2% zhT`W>ie|}JkMA?zb}&!rini#RW|G$CNXr%63j)8Cj^jT=nv`2_NSaAmF5YP`bo*JC z%fcS{;k=AM`kH%F(?#S76})~W_Raedc#H#*T>k(F?m0Q_fl;BhmrT>=v$=GL2@6}O zebRVs&nxIXc|NrwEna9eqhT1^9IVnyAW^fVFsqTAfPQ>pt4ShmP4aGyl#}M#?q3dJ$dE4*sP$5N9@$?{nC7QNrZjLQ2J+;@ zhaxuHfPO<2gt@qu?l7~KbwB`CkmLILR;x(Yt-oiaZk`dhRYxU(TxT1zoZxUzw|dcw z!@ZRm=c>6ZrqONY3*t+3O7`0^PuBve^?fC+rnPHUo>*AAG%`-jmd4;zjzPd~J#kl- z_vt(-B4BS&!;o?B$l%p=rl^|4cec+ScgW~rw^so5>eDk2jm?b!bSm!9FV z{5i-zs(Bn_R!2~`eLDFp?<9gN!dD1O?&OSeR4HGcaal5{$Ct6A9+$@>@Wo>GjI5~5 zE_TSRl7x&X9Q*hARJ}7#-K7}IPTn#Fby$fU9mJ+_-vc~zU2Xb=+c_stmKgWr45$DY z`gZoGpz52ZQWI2T!tUJ?pI&`C{Jkp*&ik6YBaF95UXEh7kg4o^FEKwsnsGW-{?Yt- z?B{6X1h4K{KyO2wbIv#&>!o$Zr*V64r?12_i0=VD3hlruMshuddHL1@sHG80v?k^7 z=00WIK~)5I?rQkt)~u#b(#uYs>AhcE)XtY4>vw3{ZxZEQQ-VD}JoDPR4wcYa6}F!e zYWh4kTAW0So3w8%j;v1Lck#wO27N_xAH$BKy0GhgGG*Mu5&*J(QtGq=lU!Oob%3n*}tx?Go9wx!WJLfhLtjm6Vk$SuSc(X*4D zNgRyhjzJ_2DXl{1q4fJjYg=9MEY4(&S(Z-}Y}^j>+$cO}8T*>&Jym_F={-nBoqHr_ z;ng?zah3yf0u+_t5&<~xOu;U(tLP@{P@K;YmO~RvR2{w>s}M2UAXKr&FB+1QwnrkI zWYbGyuvln4Id=)vwCS#5Tg6w6)<4R2?cAZ1fY{s%a(OsCs>0_+(=Kh`j(u9`+6Y83 zOEloP1Ne#KarY;_DxaW1o1-*_wl|Nu95IhjC<6%?U?}bUy{ggmyA+*}>o?JbcU--| zT$})Ku0c3C0~}<0>m;1DHD&Quu8tkAMwWeLtwk9R95Xl)HVI_~NGIQbD{FQp7chJ` zf+O*WxDJ4pk85x}j_tqBvi)6eJM~t%e38v9oRT?9f>pP60FpR4KGmeVnnby`7U=}B zyya(SJjR<_%((U4w0#Mxv%8~4G^yD^*U%)EHf5Cw@tA&5{fgz<@I=>V3X8{vM;?YW zKjU3%tYDITG7)bR%*i%cVqL@nhtO9h>Rs_`^KXr#DzJhZf(VH-TDm7|^(pF6Sv-73HzU`|)JPKLzi~-Ng&;a{mk6NNr)a{!gjlon%*2y|aJ6w2Vy9{hO01x$=k-4_v z6-xnt3BWXCB%GR81HMjusxp#nag36yBHJwSnT^OmS@NMLe1q0+qfKhe!qHnA2+UjsYDERQTC!F1CzHO zN*hhsqZvh4*X%}!-27~hECx8XVSK=xli!b^sUZ68p@r?==qX!Q2P;IHVF=19x%&7K zXZWv)x7lp|4*au{03Z)eeb4f#`SRlenpH;r4*b%Bpw3hfesvj1Iwcs%HvN9R2)cvZ zj|@X^BS*Y$kYi{a&-BOMn!bJ7!(=&INN_@o`LVe0K4cHIS;UZ*QtCW4^EW5*j!*Ix zOQwS|%W~oO%OQU&5%b6Nt8p~bexJ#oI+moH=YP}x07H&Ti>P&o7Ad|R;W8nSN`=@} zfjR6vtx;^Pl08BO7g22mWLW~7VD@F_Iq#2{=drC0mR)X^-DH$SaN;=>wnKMOoaeVE z?^%0oUr~xE)o#j^7$3V&DfP#fjMkh|ZuIP8&kZ%JbE`lOuczDU@#Y)*KP=~v>QwoN z!TjIEzi>0fXd2&Gn%dzK{_^6|;X{;_d{H1Q24a~ zIR^oAo^lOS+Kp0WVPh4u+Y)>ik;?^8at7W=82xI>^QR@Uo*P%1+U_GRW;QXiOK#h@ z6>vZx;Ep-`*``jLaSrRdI~)6EZK7Wj!(Ia%pG*zChCW=?>&34r5Affb$f32=G6x$!}^Wwz->e_>$o_B7$&84o?S?quQyQ zb4~8I_AHKEP}&@O(GGplU4CmTXyI(6Q#!lKK{zBI;oy&%A8On6-TweeN2FZ-$hgwe zQiP!q+QyMOjm^I;&fhLZGuU=DkJD}=z0%;hXq`mSgms!A8vvXFImf?#GhFjgx{53N zm{KVu@Ge}T2!AliQd>DZk~#O!t}1V)$tgxn@I`0GPBqE7v(Y-9dr5UQjuE9W4DSrf zakeHS%y7dejQUf$eYm>1Sl%hl=Ob#iPJKJ@20QoUj(cY(p>-7T$u*+GGFjYi1wxRc zBO{MN!5AENtIa=1n^c`HbvdmYY7nZ?KjkO#vXT^@***BHT(ZN>GL1N-^rLC2-s)5I z+*$>kTizK|?I;#NyMqD0BR`wB&Z6j=W|o~l73Q;jsGI2BqLK?~V{8SG6*@Z=;B znB1zB2R!%3KJ-E5a7}H0UZZiuogJBV?JD`^lG8>EigL^FF>p%}ft+>?pQ3!QK$6L( zV)`sHE?n$u2yn$2MsgeYhH;-ldsikF{{RSWpx1P$qrG%giA<3yDLzKsmN^6vFi0R$ zH7kuODK0GKj?Nho-Z_XdK2Kw{)xB^&L<*u>;_FSCV~R3O>Pz!AnvR=i@v}u`1hQMJ z5TX+vV+WT{GY&J3ImRk&*GJe~=_`G1n#IiO=+eUogcZujm%GklNbZ-d@ZjR}sjOO&B2HWw0=Do(IpLO1s9% zOJbMP!uh|@lOCO;S2^`S4gy3l%}6G)RHp?@}iXX z(;)I`xpm9bis4sO)=`$*DK*3qv~h*xFO{+m3CZWRUnp|Zzs$~^?Dh`bG_@BFI%ZAbm!wwm2udn*eVqn>Mda~zil2tb>&oMhyT56lm>Q2aKl ztVIpg&FswR781rN-)YG^bF^o^dH1Zy7WcC}jnt8)?hI^HGjJPm1o7>j2c|n!Njbga z$GZN@lhMSN=>GtrtyaP{)F-w}Yw{x@QsGodo->T&k?HmItyY86Z)tBW+@d78o#WZQ zWe>Ci{3{?J1Ifwt?NILYyK7M-TBfP+*KsIkSuB}lVtG>ApRor#0iG&?JBtv`E}Ozo zhYnRjyMGQd&OQFWDueNo@~yrmy6LihC%>&f?!HG+(d||UZe+N)w-VfMjBS*#*^)PM zNe4T)KA5FTVI8kQYPLax+r56Ztbr~R!NxTaZY7&W9V%>`ay~8#KDmWaT58kS7 z{{TX&Xo;)X!upNuNe;z*QrV{_8&Mn+3Gm;`FGuczt=i`DSD@;nn>h**K%rJ zA!gbp1}q!{$nuUjA1cwUCbsn|lwBMnsG*!{ms?+I&8zCI^257&cFqaUxVh z#^Zm6zFZx#+JFfDnE6)YShbFATH-0$9zTn@Y#`cl%*33ZomPI#S9sV)>aOW49^B&u zkGFd2V@`}RdyQ$ZTfME9#2arOG*U~4B>8yfJP-~tDpku}TFDsFwHYjghhvL#Cm^>3 zoac{IO+#w;`sDT+QJ&)Ta4n&>X&CXI3E=QSJn`#Nwa$;~MQd+}()BxVjp7X1vu|ZQ zC@4=SoCDsYsb9m}{)==;FORzZ$Fwb1U6$DvJzr3T7jW~>A_WS2oE`!0E2w@Ii;K~$ zE~kE)ia&(vtt-p3UY!orBnr%vbuYU7*(f_DymYY*BAQ^O?%zq0o&!l~PTGQ+3^g}sz;XfBp^ z@-sY#Pn5z70gggrC+2IL^zOFT7nc4sFAOj^kTjRAI)k6=umBV9T?<6%_SVhaoEP2~ zfg1RROKBrvybuUi0Qw&I`_@zOU!)`Hu9?JF5D1+KRR~5|O7|q5PDNqqx@@iz#~D5N zcK-l9ujTA$o>)Rra!YP@{SAhz(%M$E!b|CI?oj^mRj!+2=bjh0^35}E(mgw++DQKZ z4Fqwrm1(X{;sbH{nDBYy9MU>psdTyYOD~AjY~s4`6g)3D+=reG4zhIB`ci9cGFUFA zcZ7wGR3w1vPjWp6y>VeKv1C~1DJ6B^)ZHbAOOz6SpxSgNP0t!UcBv#qaD`-cTziZ+ z^Q!$rqx9VeP1Nu7_PY%YyUVgi4-1jmSx$00AMvdhNhq@Etv=f1q*Fy6*NvTWrzhB- z>ruMu;xy=9pphM0Wt^miApZbLYpUv@n?lIy>zC>e7AZp9SIFWzOb|(b5u9(hnM}@9 z1w)Ky$T;;Cw`;uzPO?V6(4m+!gxzk7;$;5-)t}@=a&DKux3q%d_IVjm-JnL=NF@?Qsor$ z=^C8Sv_kIIXq=MKtf6!EU@D^K+UrL_46@5-ERVJ@u2(t62*-Zi>rpeLaJ;h|Mu4*u z=m&FL`ttGSzgxKw661J7$W_U}A3=)W)AbX`{M;P=qosx=<>bC1bxU&BEX^k+k0iIL zClwZ1nF#SFm(ArFIM4GH3AK~9ARzw$mUGMZ{#6F{=-q_gp+b^I4tv(iMkNR6TgX>w zGKn^U&i3p+=8g!VmL2F5oD>JM4t;$)cB-jw4+jo!#7vs~bj(CBeCHpzt^(k;eqqmj3`q=*jTUb#H9UahSCXaqdAZ z2WqN)YlO74%OTP!D@_^1)^&)BESjW>#fudu02ANK+voQ*riSi!jQFc{;pLf|W@8|5 z0~~E1-5gQh=shsZTGy)}h!S?BswLa^TpG^a>9(+w;A+}s;9u;CQ2nx){&d$;r?&q9 zG5y)Z-RXMzCYtvbj5kI~s52u-03aL0D_+C{fP63u$hqgttDGNt ztiI# zYi}EQ*;zL`aNH0$#s}+E38-I15J+Y!tHObf2kB2Pr>e&*{2r}%fT&&Nil3hY=kuiu zY7WrlDNR#F=8tot>6Y+bsMQ}^^7s+5g}2LO6Q1N1+lsn9VPSA3KL>qr6z6P_lB>=R zK;-e381<@XHN7!!7Uu54>gG_Yg_=amg;2bcp7_sh^y_PVK3$6R^~%N~5u|B$k*Xcc zON=2To!B|{6&ajYPH~@o;dA+J|(-fk(L}v-j>XO{N)4ve)Eib0z(roPX^?{^g@eZtIUBnWg zh65ZQPg7F#tw!Sd*T=mdzGI&%9Anee)+gccyGxz9-HdwGm8PY4YJ?<#$^P1c2hd`a zlwRn!8k9R4i}~8?_KmAam`XZG8XM)2JUV;&~o5%#d#k6sDmg>b0CN?iqj$S0>Jm$0n^BY*gn1l#4}VHZ3<{rX)7qWX%wo5U$a%+zfd2q9 zRx8o^>xEz0;e&C^(cu38^H#aFWq7F~k~6pxJ7*cE0J4U=Sgski5WZQMi%vzsowpzCuW#0*q=+Z@ zbin~P5Wbw?RotC5)Jib@H>@r{{utClplUYqvyB5$h1&p;X8AwJ)h=4OX2{Ah`~*Rq za68c?o28O9BPgJfK7GH&q_u_k;!QJDUr+x42QU8st5MR&;pBE*I`$psExOuM{Y6HL zUR7#^0muc76ml!cA`a*Var4e8GD@llm1Rtha~V_o>O2o)ZzQG{C?svn8Hqp6mYYL) zH&w^xO;jLuu%+Xx`0L^Tl5>Ui@ z4Ds5MgK5~_N@*?$jB-iI#UTo`th|;3B!92HBjRCi%W)sshZNPk5W_UGCB%|=m>zOF z52xStrl9HArIlJpme~h^_oNq9V1LYCZH*O9Lb_#S<0&Jo@p+A6kloZizgKD%RoZb1Zs9 z?4@%sSXUmqxj+1>e_C$MJUe(sGC&8va(Vu{YA&gkI&Fz{%Bhi$rNUl{3vUZ!U?ERIjIOZj4=lmfEG+$jtQZ*O1ZYKvKjL9FT# z0fkxJlzS^3!}&0&HZjX=n_63UMkgb8^gpd9s8ma-#Vkb_&ut5wF#Nz2KYXY2tFbDZ zNXyhqRy8NFRu61&ed@-__FGBT@)Zohi%6#=I+5pB9g300eKVSlG|T6fG)s4F{fJUQ zTX>KmBG<%!4OM@&?LnH2svkm~k8P0xKJQ~>;%Jw5`b{)9y7Zg$4n%3@GK9agY~|7=zeTe-6^Ccxsa`h$2=+C1l9_%aNVG zGm4|C!8~%*p3H^`$0DyncjA0A*i6l9)DuICnJ2k$?CUP(%yC2)2LNOceSK<^O}2ac zrq!jpy@Dg34%wdz8vM>M+0T4^>JMM6nqHeVt4SD{<&8@~`5)WwfzOmzP5dQ){iAel zrv=`Fr^l;W;@oPF0B9$DyO(@GjJP37af}_@6N*lGBZ)M^P>Yd=xas>jk`;~a;b_pt z8Y#+`1d?|i?cemks_in<{vHu;t?DA)-r>qZRUJmw#&dvha61~$>-zUq+v^t=nuI3L zP_*4<@k3?@h5;n1oD;N?SRC>QH5*FT@75bgXO=t}1T5@AG-?kehCbQ!=B!Z4qs@?7 zb$N@)^h?*jHx~MTC;@$>AGC0D>6qSfOnEh0y5*%fuBG-nx>y#*WDaRVKWBx zOLgOncNwJh6~wo_Cbu#~V`DN%h{FsJk`$j}M?ZS5(sdHaZkmF+c%yW3o;*d)KU|Dv zrv#jJX+$LyrB=sp^^Hi(pB<-83gh!d$QblHeW|<1V$>punoFdOGqGJbO!pWkinm5F zvL@*fw{36%8%}YId)G(Qe+_5TH8r)m>Khp{z(^ww?u+Y{I2raCrt@}4eiB@>jgFa= z0wY-hpLDk{E~r?i~0` zNF*;KA-Lpr2aMK>sI(idpVOqiy1ufO$TA{HZ!2Cwi%pwf)ohk6jDlSyn1ZT695EiXS<`pAPM@Wvk^PmZGz#+XmrI$SZc8ygy$i;B z?HqTmdw+W8sPL161co9&?-XVtE?JyQHb90o~e@)ZHO3y&!$zD^Gn zoaHP8$T|u>hUies69F&o$4*) zt#$8C+TAs#k<$>&RoNt(WRw8;$L`cmf<3zf?OgWrsP(JMi99(3AfF7!ZwH2_Cjb>B z;GWp4tA3lmvROrxHY3FWT+49nfC(cWUOw2Vv-Gvbsd+5-x`vTuEW|vrL@uN9+v1^QXXioE~Z~LUT1!N#xY6Px_75%((NSaxE{{( zX$V;3jRQu=M$*doARl~+z2(G~(_gA6@N-`9YvP&BVb&fuSY-H#E>*DQqw@@QTwvh+ zX}ifSZtv3O=Gtfjg0taR0&&B3@92KUwO6opHk$+L8kOTMtafHuWrB4oH!(pT6!R$< zBh&&p$gM?{)S};g#2bg!P*)!qAz15m=VCpkkjBbu= z4ThVAdwaJSISjKdLHgq$*M0myu!TPbP}K=U&3~XEQ;fR#G&$`;lUv(ci*0A4uh!1$Yllotl($QDF07@LCfpuQaz{0f zKT#RdQnK&6WX7&=aTO5@tLm09ta!B+{{WepoNtH|l26F~rmQU_lGfl%jT+0eqi)YD zoRRss9lt~GQ1r_Sn_KIvi{_F`tBryDWl+khxIo)L1pNMBdQ|@a1{aQNjYn)YC|Wg@ zkM6?`3pc+!DC|i3S1M9^>L!$ujmT~FX=HESO>9bFiBPy*!AL!c1C#o3>rYP7Y8Fc! z!>s7a!0efTeB*=1BZI;DRW;XAn6K=W?5<=GB0ljtsbIk43xWa04hi<~#9 z99Ck>P_?8mzCFspfCzU|WPG1NfsA{a zsJM~?6bWGyLw9b*7Lg=7q-}ys{JGw^{^+ko6;U})lXal#`ln24H%OMYlg)H)>?Huf z7N=tD5kLb7>cElebMI3R;>Na8GH+~Rbp$cDfTF*A5(zjw`X5T-ao>2?GBw!UxaV*f zQTFTwPqaE$#l+f_6U}3v-bZgMN0I%YMgb$+*XvVQFJ{W8nMLl7fpPe^tLYaPdX1!l z?&5TfE}lpelDmSoGB5xja4Q+rKZ^S2Q%h$0wYHlxS}O>5L~yL#-)K8aa5={xb5gax z!)1GQ)H*)$d%Jl?<$^#m$b0ONkQ@G%=hHc^d#LHxnskX3<+PBrx!4?exHuyoj6GMl z{S93nm%>}Grb1mp%ewlbQD^vtsv|O9TIu(8YydXv0>h7(Wf{-cKWdu4iQ1fZNMo_n z(#kWBhuA|E9-F-mIN)NiWh4Zv`B?T--H)IEbDy9%pH^1<-J;aGbylO+AI@~dgT5hvZDK$^!{x7Fmf)vOXLCo8f$T|i3`F#{V}8HpYE2frUGwYStX zdn;YOJ*+Uf+IJ?v$JBB;`Wna8Wya&YHT)I+rp}L~%c|uy502OHEMhl1qby;S3psW} zjAQbuuYN{3KE|4k=t{%36zuxru~Z zGT{#vx?kXMEO*AlFn6E*O)yTxa6**9G$6|Y8xmKSlj-trUb<}r;>eVgnH%SYD zEYc#96*J}iNGI)CYsLoW3PB2pJLl56{+|WEPib@9+`htbCB&$t>4obgk1E{_*+3(Mhj)-%E+gxIF!2FE_edlTd=h;qA@~QCXI^@U| zbmWtpKn2tB#SAADC!u+**ZI(j?C)RNX! z)MQ6ixCAspG+>)qxEU?T=Ca@KRk1o`Hv?-At4x_Asx1i=NPDN>W1>tzUEpR zd%5x8Tg@OR17uFX{(_{PA6Hfi+Fkf#*-f+L{jpm(`liV9WS^)O>Z z)Kv@IM;)q;=Hf*{Kl0?CEqj^XcFSzT?RnVZe|w@Bm$&(n&E zn~w5V@GO)Rw#Mt-nVEE(*SeK7`+J+XkvvV}FbG_7SOP+k?VqM<1QG@r+|{JNz3Hi( zJXZS1kT7hSW7RRJl z>_bfA_uS2&`kVDMtN;Kk-2VW2pVc(sW7HE`T*i>ZiXA-1Y=a%a@6SAX9x5zSMv=+B zGaQ8GG%L;zY-f{FaA32?(0{>i4|rB9?hOd-CYCMf9u>bSEIIv6KLzYUHNzlrfa4hB zJ?c|lAskFFqbD7^R4IyCQ{bkVB(!jsNUFqS9yuRsNs=v$e4UTdTde6OLTMzwGR_Un$FS$S6fo4`?cGEgV#N{Z`4)A z<%YF0CyLgL@kk_2#H#>6Bip&Gm5~A|l?mJ6NO}JN`AzHgu8n>to=aD^xbRgj73LVv zi5?p(_a#r-xtU&uk)|UN7=3RFCwSy!PM-&oU zL=Yli0fM||<_&e8vwUeWIpZ_;|b&~JyfhE1mo67n)f)MkdF_-Ijhx75FLP@jo_ zIE|vz^2FdSpbh{Bj#uycRF?cpUx%JGhgC!08|F=9wWPTdDUFND^t0KOSs<7p7PL z07>_yw_0dM#^njLmhJK3Ji1D#kCW&-{{Rki=ntu`Q#PL@cL_U1c^j&2A>(Xh_c+HM zpQQn~ap%wf0Ly>!q2jIrF~rvGudjjB->AA?XKnugvT#`7Hj=<&&4I>w{{WZzH8^!1 ziI&#z%Latgcx1pn0oR{4GnMc8K3(gP&kkmWLvbP$Ib~%beqG1c^`}L`VE*R_O-}8q=gV76E^EB7!h8oTu0MREtYaiI!Fu7Tq$j;1w}W!H?zi zAY;4#0O=m}$Sy-l(7bmjyI*rJ9FICShf$mI@Bk)X}nVrvsl&*#7{^YnD3hR|<>2 zX~u9eeYyATLc}?OG`mGY24rwJ1Gzt8{V6y~ulX8>n@+!$-?^~revGrz_4|afd#k6$ z(iU|kc7+>8eF!`rIOd}cm?A(5PMPO(Tp%6)0PGLb6^yc#ZXV+Dc%$7rWCjBvM*x5H zuh`Uy-9%@>w~klA17^X4gMxF83D4LH*Se^)BE=@0_3inZk<*9}GbPX@WUs|0M;^TW zzO>BJTxgfE$8R+D=fh?38d!)6yq+0><0RuBKWfZaO5Os;cW)4I04@si$8tV`k*`L# zI(4JOithx?7S$O$U3c~##ZT)}$12E`5zB?k6K+@R%`BZucmPRt*)|5}cBXh9{!{#_ zEWJY;k?D%=urfWwhNc_FI%_VTE2M4h6wgRwJFHH*j&ttE(QHk5GB#zA@=? zG_2nZ12l-LPC!5d5Ic+$>06SNy-sUTk8#Mgt61JEeKI#ChzT4KtSSljcJ1}xRsN^c zomZpia6X~ZI#d>spoCo9+OtX9%Fb2CC)|t@Dn^GUnbI*C>@^wgA~^WVc~b$`lf4PX z7<+bM$9z=#Zl%&R`#XfwW6h=MGyF7w-0fBv+9Mc9(BnH9_|9+#6?AYxuRAE7R-cg^ zqW=I`ztpy^?A|C2T~sImNf^K$gXL4SZDXl)*d?>kbq!v|8IOx3Hj_Ld&H&s%#&`gJ zm1A$y`d+1fad4@t+SrBwTiM!tLzCR${IQ_z##oPfPN8F|s~x5R6kd4lZ>LD*+mbTK ztlat^L;WWh16)tExrRxjf-*N? z?H*!Jt^hoHQd?%u^9Zlvzqi>pWv>Ge{g2k z`ht6}4Gc{7tT|=!fVfeRxaElMG0qKW?7s^C01mX^hCL5Zyp;}oS?83K{J{QIOOu!3 zi)G11KZ;25@zm}=XI|SowARJRP<+_I1O+~yN}ByMe%BWez*6O51eu^4qbfk!!M#TI z2yvVon)SesMS>A;W767WXa*Gw3Zv!NXYby)&Y`9Chf>Kjb~>GJ-L=0_5k~l8#0H01$J={{ZFn`juThd2^@e-wA*4w@M@u1iFI`7y$q{vCpSZ zT{B-(l08#SDWb~zrLN=CD#IQxDGf5E6GDrXr4}R53qIltzES~UPCCOZ? z4470ODNsobxB&k@0Kj(i?OKk5>Bs6T`@4%v+uI4_O}`i*mE(~C9C*8c9D#-P#%oD; z_%Ls-B$n@4ws~YeX$%ZloL~}j@*ckCv`Q{~BO;fE{{RuD>E4{Y(ql7SU5P}tu!6Ao ztmaX_aoR^2S5bg_si>V&wt74_x7vlor+vfQK^j6p-OGYbaz@k1?Vi;qLF#+UtNYzK z?ljxRv1N$K3{t^@6}UV3W91pgrcX7J{6W^G>K#tcr(`y>rdct``xKU)RP)&w0>CvjkPYnZ90gBuNy`KLxvf>idVozj zTL>+$W0_docvp%%0uLA@dGa~q?}JoP{uT8NoS=wfxJ|=%g>x7rdf=Ylp{pUQ#nZk$ zg~p8bGg~N;q49&W!KkUnGcO+`xHHJAnk?{PXF}HDb3{dX43iY4YfW-(f=FzNCcZ)ACtN4P@U0BewwZN7PrA zZKS)JLj)HRESD$4Ih26qjy&Ib^>^W(n|GsFHMQ_`2_@5^TobUYAP_w{1cCl_PF|5< z-u}N(%h$`Pj*5RT=^7aXQd}!EtGVzM8yO&A06FKjDyLYGH&4Bhx|m31WALhgaFkF`rt?b&bf6 z1!iXa!vor=#+u#m%X3qX$Bm_E#=#0X1S=@X;GNNqt7S>i5|xt zjsp$|&l#$VEh^gYSe?^R8u zY8te;(JVCq2m^@$g?ZB$Yt&#U!3l@)52Sew8<;{{TPis^rQ25wF~Iy_?Lc_f{7&GRbc5 z`^9w!%%jtu2<&PnSoM|nQ;6)E!V7pjRAZksxfug3#yxv}wVD_4q-Y_5nb!v_FuY)& z=bEh5AiA`$_$`x1Q1E~KKZ4tN;*^6G)GpWbe9^KwYPY#Gs7`n85O694I}3I5_%H)GkH+ z)5T!3ExGe5%tOf79F{5o`+r)Y$-S((MRJR1HElZ9ckv;b_aBv%s>k+HIs4R=>Pr=y z#EQ~LTR9{Fp2M*Nj>ENMlB~&Vuk!?GsUs{`tCk zSZ^(+m9G37lIX{FGuZxa2chl7U@YyCuOp5*)<@^~2wac9HNEMZsVpsSFE2CTqX^mK zC4v*qNCP7|?~2JNEO4U#025s88g7=cx#}B@TT0aQtGgx|bo+$6WJ1iP7i)Tu+>HBX zyxz&J!eb! zn5^MT$7E@F$~%IgN2$YuQR!rqq=PzcnV!-trqs0yzn@bmV=53EUG0c(pvY=Hf+joNJ*NkSi-8uM! zrCuyhO5(~u0<2d!RRfcSkPWy14p=XKD!#8I?i z3=b|nvD+2Se-}SyS?OtQ61-Z3J3(V%ZcJwknSxj?NnbulkM$UdMs0O)V4_3)#QeqEm;NbCwUB# zT--dHHV0`~uwP(v#YYjK?x6FYdFG{f5qOG*`pYLDk)BWfm8QSpfb(BM4`Mtw;QMy2 z#^)_*^!W{hK*542Vc38&DamD$M`xN@Byw`iBNin5$*UV6y zIXDN9KIGHT9X+($t!5hsx3RUFD`shLU5S!KVxd(O9>_`NhaYixiFPTsWOw3|xe#N@ zqwFf$4NzQ90_pm8jXmsys#=jG(ss#gGhp%a&mF4P*4L|<$+XfetoL_l?Vv(O{$gm- zmn=MQt1^Bn5yPqa8ZdW$T(|urHMYCy{-(LO-F2y3#|Q%kc8OoNBg&+GDvMsS*EDFu zO@3yz7$NO${Hyg)K_6UVl^|J@`u_l;1-6%{-cJ-Z_ID+vV4;jm6lC`&90A;#-tbnnLN|7wT=3T1Q2*R_sONkVlp@8BLo7c893w9 z-kB;u1$&B|)+)%7TTF`_hzT>Ysm=y)J+q(En%s<&k0Wb_MFbuWeB6pX>w-cl`i}Jc zb~eC%_f)b%JwSFp$W(}9(QU(gP1{}M0HQb@Fmf{8#(2o3z$<(jU)vgQ>`8tZEY|2+ z$r_hw1C|l8jyn=-Qx?6dh@p3|wwriF3k;i%;twaD2ORxtA*XbtI<|`s?4xh-2ys2k z*Gwci2ZIR#Q{{qtcd5FDk9ViNsz|cD_Y6`Pp#hpg21yuhz;`EsSSJipdUY!{Mp;tS z;^~@gLr{CmM~hg~CAW-u)so>xSOPf6_9XK~rD|ygrEO_!vWRU^%8xTE5?oJ_fH91U zqp)76i%ZsRQ%uLk>GE4ByKux3R|Rv0M#g!`s?9PTS4_RRd$B6Z6kIREnS4S6;Q>s5 zaQ*vd=}=fA(@CO!ER(jGAMpPDq1IrW%`b^~?2_@F#fk6FxXx=?sOl41U3C@6f8NDv zOiji^ZB@vuo$ik{q*iOwGI&$M-WxQ^W14q3Asq#jGvg#@#_O zq_d-*z!0UjkTbO44*4GSbnz*@YwL2jWN}(qZTM$6w|Om6aU@ei;}r17JIC>7-y9mc z>g`5tKTFpxE!~n~Z2~KfHWqhWip%s|FQ?u@_p(C_X5FJDq!|aEG2hy)`qjQGMATN) zmog=?Cm?PM#}ZlW-K{HL0J418A>wzM8A@YD8YMLVt4}GD#i&WYRwo%SY2%hj2yY4c{O5W~z8&9OtBz@ zHt4%^pW+Ag9M#mCK9Fysg|xc`R!JF%i*7dU=OFyeVSf)UfA{X55o1EoNt_(#$lp5J z>oSoY;Zk>e9nl!{@-0U`Hw?OB=@Y{>C|gE*K%b^H{Zj7M9SSI*Q;TbZD}MZp?(*l3 z*&i>pSn54HqQk1`utTRpvD`UV%efpC?a#9x(y)CGbXN07NaF#G!Xa$;8`S>*TIkxV zxBJhbga)ChD0CQ`ZZArCr^xM?=(cXw7GG*9CuhEO!J)3z3yZIN*`` zdeXY5q_m4|66LL6yM|M>2{$FU+%gCww-ti%k+m&mONfii*G^fBkTae;dl6knt0s2o z(IE}YQIbzSgSn?TOBCTv?hu;E8Cu}y5ovIEDp@AM;0^1Z-%5pdCYNh6Lnn^zPn%-` z6C>A(zjarQT!mr@?eZ0Z4VRUUGFge|{;!p9gjBA~lADUy)(tiW3Q=cZ+=2+f2eAhf z-QJb55DLz*%0}_x1kdC=%21wH9lmv( zMm{uo{?PQTNX+Wdp|^z{CB$%t3y^#zKh}lZ#@_c#flgy9lD?dP2l&!$8_6#NJ8_zg zsy=lsIPeHn=kG!swkBWdcQ*G1-X@GjrDOo0BptzrKUEa&mDO5?nRylMy4(2ChXA~O zj98rW?!?sC^uu|jU))7+ZFhKOjvHi=keHNm?Xt&I;fvny|M$K#Iu>twm^UN>bwsHsrvmvH|8%WX<9JM6ub ze~nT^!Z%%nD=#1p{8HhSqFGiqAj*Xfc{ug@eQIftaKEH!A?n-z05o&zTJW}DRpMLr z8^IXI^Pvx3bzQBUymtES_T(NL2W2X%xBw_1@sFiugSg;3{4Fw2iXa;AAhTsmb`Y)bTXyE#8#oGz^8TvEqD( z&bjQ~GC&B}SRChQ;QpT~-e_GF7O|n}8jhs*5?ss~o*C|Tr-sMK#HX2ZppozL#Y@I~ z*-WsdwH9-JFYD1mXK^*QlXAvFs7RGIH*Lf#;EWSfW&BgsBo>lMqv`hx6PXv`E~be* zxgKu$UtAt5p7qY0y(@hky{~{oNg`PV!prATk{x)#1P(LapeN$DRjygDETr0eqDvGx zA8b}5SC%%^B}j(YpjC-RbJ%6S`HNI=$7b>fL&!L&xyims#t}<&b^ep;d+w@zOzIZ; zOcx*^HxSwFX$eUH-gyTA9A_M4dsO{%@gq&pZtv|adU&Ry(YTKFd>{*MWy>$-z+l;2 z`__N(jg>U3sSKtTxo;83j6ac5MNUr(<_>d%ow)U?9=)-Wez|)%Bv+KiU7kn4T+1sG zN$duDdsibAAfc_rwCzl$he$>vdwgOJ^U;;lL%;yW1bk9S!4tI zY<)*;5PtQmk!_^tJz8iYfuoY@APjL0&Qa8E7#yf9KtB1cnR?k?hP(d&Cq5lKDajnd zdZZKJ}V?HHTkB$6bM5FSNn%4Ck*k?BnS9oybrLDZI-jE@N# z)G(BaLJ+bfizdPk8D+s>amn_q@arcy_>xIA@&3)dM@bBG@Z#G~zQDOt}KUP}ebMsFsL+|24Q z8dm@_W9E4{6#9IgG^y>g9df0b&llJ?p) zMZBGvrYYh{Y_0%Nlb#0$J?lOAq^?ezaHcrXWQ?kMp~DmW>qQQ&bv4DEw~rItS=tHi zNni;q6cM+%!jjE_>Y(E_%96Zs{LM+!nFm+ZH4Pr(+6(KA9xsVFgte@pPjUk?z7*h8 zu`Z~QJIimQj5tI4=|)Kej&Og+y=VUb6(wYwPq&yO-8_kKs0Z+>lw_Cy!5+Q~okJpQaCu46#CxO66njNRCBO z^gbuh@mgQQNhW@l)8d+65n_kIPCIQF{+Ow_{{W3wsTVEXo<^5d7M41snnjQio05{P z=n`)JB0`P`{_j1i6qDc0e`IwV#<-5;G%Xsi5&6aj0OPUkk4lm)BQeV8k}bTl7D)Gg zQdb|~d7*J7t9%OwfGP-z86O*48%G~D&*@$Cb6BbGu4BPTrf?N7AmfcSBa z#N__~)ls~88Z*4(CnOFBtrtiHn^=?TGvXBR@PKaY zbNRawT0I9}T|=lf+aC%|`gEQHO7g3Cilvkdp+?>_-#zOyawd85-Zo`J3gloo+PU@b z`q9n4dF8l}hLTKgY-2oQ?ZtIlX}=GybSU*^>D#M2ceplyLn8(Z6gTj`Hu5Ug^P@T{ z4PGq}$*Wr4U8r=5DcO~WIP)@)50v`)RJDa1R^u~C3%Fg;Mk8Et$E8oR(XKC{z*1u_ z80}%{&MTtX^e;zhx@`J}nbh~oWomZIGlVM<@8&F{9mPtu{6B$G88p7MwPd(c;P{X! z5{%<3hx2pC6s0}398ynn4{oB_%&xIXw5SV=j#w{a^{pO(uf&kuMHR<|9n54jQv&In za7R0rzo8@LS*vLwOQ)9VBXJ0eZ-Pz%CD#l-VxIk%XL?lW7g%sd{597M2OIIUJBwjF2hl?xWOt>}y(;lUz-I5)rY2 zI5DQ#K0|iV$id?S8LWNB#8}w1rQC8PjVFpyQM-`1%AZl&wQ00y>?eI7*xt33(A^rw zz%m21jHhYz$nT!Vii5_T`;v^@X|Bg((JvC=R$V-?@lIL^qw{2MByBts=WLO{6@}}L zkhH(Ew>DM++W1KtvqO!Ji)|cuIsB>&dC$!7Y1?f|O$^5R)uKJI4wF1!yd_RBbHgFy zJp6`EYWMLH-cR>dZBt9vE(8rCph@BJiwAc_0f7X5Ly|`yYQZRE#WbSs__K5}-18wEZgTcDT}_yGd`hql+60QrkOE|Rgyh2L_o}5MUQbkh(g4WdBMl0dMmZo zHS5;Wx<=o|ymBL-QtYNPevxw{j?1*toKUAq|$s$P@R zwNHe#&{p$TBq_6nt$#7Pd7y9=KZ9!nrFb4O~s~WX8fR$<|jEIWAEOVd!=d?NE+(G>J{1IZg|K6 zbBv#Fy)4<^}YW9q&!$~=JU?C?6&^^)?uf(*L2v7gGN=gAUL4G#H~rX>FgO7QG3F@xf$M}f( z0CG>v4&+u-UbMRD%TE&Ts4Xt+o5^o-ZKGS4eoom-`Gy8g?6!Cq6}O@49N(HL7<$f{ z81{sjMEb6a@%Kkhy3@WHt+qh0>GDkJHa|J?asl+sTWk78rzcO{-25J{bgf3l6@aFn zwiG#B$-6ujBeP(P(|Vs#bZS`<{`hqj+>#*$ZGna3KKKJ~Zhdp?D=E}nQKLQO*wJn^ zNuarpYfCgf1i8wQxFhV4aov|Wu7u|JiH0%tD|9}Yxzwk)f@|G3NSZ7Sx}?V3NZ;8E zM$mE3n2$z6_`?>yAR-MbWvw8SqV{d2F4SjKOr?un} zk!1weq9Y{krB|@pz=B6ExIVcUs}8!4r#0!c*!o)D#kFZ(M7oaI*;{yG6cX$d`3HQQ z;<;+-*QyAN#S)+4NWcT>NS5~YNY`}p1oSKAA7TYB56!4rogFGK!wo^BEj`wgZgM!2 zQHnMm`3!vl_wU70>%B5`dmEWsR?+ncEM-znyxAl%{GMEndyFyeYZGTJl*55<8yV0%Yl52RbJo5k)NXeDXF^>DV2hyx@?u4ZHWT-T4 zUhx&}bgSl##`xc83xn8(Vl(xt2zpbfjBcjd7?MIfK_uzs!N}|h9Q%9Ke@*LpzKXYv zr^5HTWK#HYM8L8mw&JC6lB9)W#zDc)y==7W?xCJGj_GY+m2hP@C}C)G*fNvA^#`2i zy;%rCyO5qq-(n24-(5nh;T`JG-XxA#`F8|7la4!ZD)QQ|$+q%<8H?;EECE0;PCMZCtjAf+X<#jemo)b_SDUbA zBr@%65!hsQ?geL-I+NRPb3`*I6>guhCfW79^`!U4MK5lVZimEj%CEC0C%NQ~GAicV zuXO_!jE@Lsxi9e>S-hK66SZ^OB=_dI@`&zcn`8ztV;P!IW+X|@e4zF@^!2IZQi>~k zIpnof_~6ADZES#f-Rs}D^{m-COj7>>KNllI-!mED}XBbsQHp_O?N zsbWcBc_3Aib$*uK6t6y}q+C6@D{mZ(2tg;66|!=tgPusnJ!?PG{aK`1z5VswwV}DR zM+)HpU|W*G2<}NFk>9p3D#u;6)BY0OEP85LHCPF{5fO@7z4`1^Eg z+q6dUycT>WNE@6J#|O1%EbUhM<5RfSr?#@RONBR9(J5He#ra~+INES9PI#-R^sb(@ zzp}f%mN{F(ju=JE!54-kou?Tjx6pC#Rc4MjJ(RE7%{V2Nb*;v|=)+%KHRh$LAiWC= zay!C|?}twifDm>k1RNZ3Rm*zj8EtpWu*w7AJ{5}c2^jC~O4Wi5PVI}Bk4@fm{vc}UZMPCZCC{#DR(hB#}R*%)+Ab9msl`uP{1 zhBHrheW)x^ODh{?1Z~_ixO(G{rfXr;og;O5ZMRxkH0u*{9l)Oo`3n{b@J`-+O*vt# z^rnMqbjv%Kt)qrhn5P7I%%jSMz`+do+}^_#U-*S{67)6XwwLkUTU;f)OC(^gj9J6H zr;K2p03DS;u6DQLER9vy*B_ay!%i<8Ul;HE`s_pLtGyFJ)U`RU*kbt@?KOY3`! zh$50`R7IaBh(XQSC9M%I=%eZS;LznBPY2EDab_A`k4~F`I85ve3TgnLM2Lu8#25SrWqi55x4M$Ya zl33x?tQO%J@*^+5Vc0Q&orjE{Tvlj1$>!zP?rBk%hT7wDlkok3*L2=wE8&oMIOSjG zTg_dMfjQ@Cv%4L!k07pf&@9QVX@!AYjAZ`+(i?Dwwp0DfiluEVLzyIauYApZc)Ve;<3ty$J8$e*(#((ecP9Hp|luCP2v z!52<2P7mfa)cT440R4``kaG+~W1mr6qIV0f>q8_Tij%kfM!J5wNBfN#Amwc$`hN{R zr&#n?>yM^H^29*XB6RL9^1V~%CSKI0L;K2nZL%i<5gyC zosIWPAN|J({J>mXW1sIWFR7nqo}QR>{=KR%Oga6D3V=>-ZZI+PPAgksr=Stbb`jl3 zDyNXG=zg__HfZ6Nr|NI%`gvzsW9iA1x#^8U{{Ty3jc**Xk1TT*R>ud>9DORP{{W&j zYkA=|Vk_A2uFQ-Osr6hj$;ZE~b>z8l*2^kKELOy_#={D7!JBqDJFo#hzzQgCQS}Kg zFC$5rq-kC6VSQZ=`QWM}f0hs%tP4lsTH09w%gC_u1Y>C;A$j}{3c zbFg!U2l^V!>AIGiZFZAtFX~$_T(4AA#GoXXnzyw-8-pXYSxx^)@*LBBv@io zBJ;U|gWrLZ&2Me3^h>L2C}Xn4qzbdf&Q!G7lW~ps2Od$*LBa2uxYHxIgRCUh;kSkh zYg^`9J9dna&;yVdmN+LT2Pcu=iq86&r0l=LovJw&p{HG2Ocq-y;xIEp@3$()cfVs! zM{6*(n&mC!mKaCxWkfhZ-;?RVtzGtutlwR|)z`tTxt>WDFNi3h5>J(g8WTO4iY z2iRh^onxZQH$rr-nKTy>&2MiLppHH6UO?QO^&G}(x{*56T*8=LzJ zDdSPGVQ^Ui?nno*IRdI3Bo|&Sn2Oa)@9?9DZSTPE>HZZi#uvHKZSuPkA#r$~By6oB zVjvuRv7gZQs|L|7S_F97-e{zZIol{01a>*?{{U*1x+0?v=6d5tR*l*j+YCwl=)?EP z&NwINX#W6a{^_DwR|H@m4YEJ2YX?tXMQ%)xKG?vv z6=>s(M5ybG`I|mocwoHZlybR#5>Fgs$+G-6(jWdQZSJLwXNuY+iZyiDs*DC$_sJ}H z#u)vo-&p)E>Rnf=ZuN~G{{Tz0b`J_I!b-ypxSukH{@;9Y?O7g={6mvPp5EH$Pqw*< zN~|y?!SM@cxn@=z@z?=fRu9CBO(`e;0C{?QsdP4310<4LEU;jK$A|#i>UrY1&j(Wu zqFI!7e_p1a8xz4CH}!u3-nuY zURqdwA54%-=7+%XA2}H=9F+&q7h074Wz$;K%r_3RT^m@kmqdaBmkd+{eD?tRaZ3DJ zVW?@HQKVeM1UH@yjl>sD5mh(bA~tXX7Re->;}{tCstTr@x&HvMxl6-v>|yj766!As zMEHqT!t}C7knHO5n83lvRsj8QMQ^nG3;4QsrLMJ)3OniMSCOsYD;NrdnFt^CV0(oG za>lcoFHTu$mK{lRrfGK;mv-N?eBU#`Roq31?Bs1S=ln71P>j7owq-OfmnYW`4w-w^QtO(YiZ9D`3|eWHDcKqY44YksaM))YW3W8dr(CeopH$HF=~7F3G`5Xn zhA9r^SXew`c5{GJ>&0JAv5u`eQMHCEE454ML})ViCC(j>%fepW{c5OWP^TN?`3Xh7 zPZ0GSQpeRgqTHg1CAyG5hsuWBNydJB*QS5jwjU4h^4G-O#J9)E`H0?wisjMtjpUk@ z$538s8hUB>7Wa4M72CyVyfVAOk@vJ|3xXiTcs|`ZqP+O*QG<68@ZsJ2SLoXlnl2^;_Gw)bFh0vw9c=cAeXVm7K zGF-638QX9|2;`|_f({4fCnFWp{{Rqgd~GRhjEy9a-NBjjfZ_cy^aOpY4W>yItHkq3 z98g7bYFW2sMqTn-jt}0j$M8|1^JUlK9+`ir>b*5BlgDdiX>Byui~u`_h8RYpjEu1z z@(BkVRtKUrZFf@DTUr`~mZ{~4M$%#!5p(5{NygoyBp$%==4$EvXQ@XAPIUA$vk^6_ z7?D6Lzi7jg-yWFxgXvuBNDexEgi!c_;aQmu0A}%%*Vpe;UxJADv!L~ssduS#bQYFY zcWrm6Y40piBxQ=YWF8iAg#ZZ%&v3sgw)_}bm!=)=A(|VBT*&JvDhMbxmCwuh)f?Z- zZTLfPsz{^aBZnK+gFpQF7ic-hAd&Yy>t)b4Nqf^alBCj1ejP!LhCDI>2OlmCQ8v_S zyOUJYXN@D)B=||~+9;dGjg@2r&Esb{A2Jw^y+Y6})@^gZyD_p_s8)_d$d?6|A0y^8 ztJ&gx6HAg91UFF6w|a~#XU&p*dt>Zq^jTT@mRZb6wd4VWX8}RaBD?1~lJ9NAnw6x0 z=i!dV1y69q_xfU?%@IKoi4ZVgKl+dO)G6<#T|!5b!<)j9)dY)>pfTWJihkbu#kQ>W zULFYZMI+<+lTvPhM#ZUBVA&qaL_KJAYqm8p;7QD0 zp`P89r-I@z4?ZLgGm2;t7|E4(jsRnVPuymu$r_`quD5rh^v6scI?*n^Dm1pZJ6VKl zg$2B)j2!pkuR43EziMl}M`7@B!TT|uAuu^Jjn9I3AKCf$tOlFa*1C0_gc@X#$B-ku zGN~hPloGf5I;nw!Xa3 zHrP*m*6D1Bjka+b{_}zdVma?x{YvXaPP)^r?$%S(eh_O%0ru?*`2>Tv(ff+XFH-2& znpL#7x#`x6Qwgt;Gm1UB~8CO^=bdHalMrMb8!cL(|$U&C>5{tj5cwjn*Kv zY;KpvEs$~v=ZvVP^u0T#zuc`-(@r-w+6~jE#5)%ZrGjS#fg|{R`_dul%@E!6ys&Dd zHjtoL#O#FJCyd8D;GTHM9+WUS9-AyNU9{Ix8<@;wFk_ZEBLsa7TAN62*_TV3#o+$x zUI@lV=I%Rs)?`RlU9tj4bA#zqV^T(KWM_O6f#s1-7-W0$-(D*6wqEL2*DqwY*MdT0 zl(1QcnMa?o^&P$aDcvDs_}wY==kX*`0g71w-76thP)|6?&(f;ywI{uSA-W<}R$?Rr z5+U3`2jx!bF{-_d-MsB8TgbA?xIQA5@{kk^o^eNTI$ocwydXvdkjgg}wzwE5&NxH!?F@wi6?z?MsE|sV)oYCCHGLHyJ7^J0`>~)jy*iWozj}_8#rz5t<;7r zU&3*aOO^l(dwSH^6V0ExxXy%@LWKstm#Z?!z_-Jjf zRpX6OV_79l$mHbX-y;NbQ7$@e7lbu~ENI+~pS(uN;|I9ooc89bd9lmOHATJ**P17F z=^neZ)R;b*sytF7?OR=Gd`0Aue6$##IJ1wvlCy_0Q#q zI-cbE9lePs0N0tV^vz30v@0}Vp~SJYE+qwA?#bKc1MGckanf+<+O~xp*C}ylaRbPz z7DjB5w{(L8xelYuJ9aqDQ;{ff!E7#E@{1X^EVAF-gc^jvZMU{i(b~tmg&)}jouk#; zE!bBY{8iTf0BZFo!YN;e)0DyhIR;bAhwN~<{_S>5;4wmz~h>`ri5Rb%JWW3V+xj%{4`fn zLo(UQ<}{mW3dDB-yBcYtWh}){h9oE@Anhb`jP}k5IIWJgsA_uU)QPEF#>FBJ;Kv7r z6k|Cgd!9d)PwC#3eR9Sy`i0l*e;CdqJJvGz!DR#toN>FgUy~#;tCQHT9y#QCVz)5% zkvU-@I}>Z|W>beDPD1;hdsjlxe+?$P=&OBh`(277cNj#o5f*s&6OHA&6SQL;f&F$T zq`GyiqO=-tjUfaivC6_gPjkCH&(5p*hft0-v(oHuB!w;4_qUe^Cd^?+G82ZBr~y~_ ze=+A3g>|bds9H8;=%Jo*n$y->ccht{0K%kUxl|_wy<5_9CaE)u7i-na=IB1-Ta@-ul9LnC5Q|;{`xDC(NR)?X;e+ zwtX8=wx3Zk*ha$2<{Pc?z`64Xn>bO(7#{T^4vf?^kvN+ABxwkU4dqhc9xxwn5dQ#m zh(6h?xb>}PMM*U4n;lBm7V|==C0QGDZRBkru=0*DaqeoV#z_;5lVxn32i6w??i=f9 zMEc#xSuSp_qYNZx-0t`%fLvsZocdGu-4wH?kv-n4r#+kyt20`&OPsf(ZT1}G0zIou zt84Pjb!RQC*1~txZr&v^sFAl7Xn_O+jlkm|4|~(s#yyTHM-#~&XnrckBt6quZ1LGuF+LWk>x~V{#6g9 zI;QKYI*H)btS#ofb(&|mNQ%w-y`UTbGm+{Bc&9bZO5dm~{{Us17=9|!_0|D&+f%3 ze=ZIObDq^a^-NMtDS-%496~kRp?7T?$pB}QpI$3m;@-&=c$;!`F1)a|)wS(QsWst^ zGBDGuDLVKuBJGU1Vax7ps^AUSJ3#=NZ%oy?YA6g^Y%t8jYkWP0xSm2kw9AliIOjR8 zRn!{Jp{l@^$jXr!NN8gvgBAR)bK3ymVy-$VXVFAg2@qtRo+72T?%Dw)pFlFCpVKC= z^&KvyskYkTT_bl()U>oxN%yONK1=I+T|Z0CpKiC;7gHd*xSrx43NX1Us>)7r#|zHl zIX&=D>N4ELBvU)d91kQavaogV$t|;Qwn^i+JYtb^c=NkFk~6a$mTos6PoM*UJqO&? zZME8{xs0)AH&_UWS&3jUIOOK6QEz_#09+biqm6m^f0yg-KL(c`pQy!uq{i%G8Cw;7 zxNdn?!xmf<K@Hz=T;{G)PkAlZb0%yWcf|I6hx$XK zthIeYEjC!j=n>WKBX(0I!1Kw-?umgI^dvF$tGlk8o(`I_*YsP-BYS8C#PCZYDhY6> zZyaM8UOU{qcI)g;&%S*J>bz56zvbIzK zBZrpDu|4@9fszW5S(ZuUohRwHw{XddIFeoK=4EZH4czy$+iJ)>Ml#CN+OozNoS!%+ z)cbv_WvyzqY0$AE%w$sn#vU{~a-;%z0ONK*IP^7==%`0j^^TRJ-a1>^O6}wg;h+kI zw&&A0#(6ao{yw1BwNLkBPqb^h-{@Y-Eo9wcIECHnv?&{1`OrTX=2YNi_4Sj~Y45 zNMsGUvOMhA9CkjKru3eJ8ddb~rs;QYaugPGAi5BS&IsGvI6U{`y;nZ2IPE0w<@%Ol z={#y~NiUB70HGH^>BFH~_&Hmb5;HWsVvb_-KWG0 zxhIlCCA{k#ig$3x*z)m?M{H-mH4fuPBVV!9bsL>h;MvU_@vn@hcZOAp?hFAu4ClY= zR=g9bU2op3sdaF;z4lyPBMsM9+P0UZY4`eFjn(|qP2kB1w{WoeNiDo^J9a*psCTlx zmrLAhQ=<5ADQRF<%kXi4*unl)KddfdvC*fxnY9}OZ+8rVbr?mu+&F&|Vz-D?ovMC+ zTI_mXSM)x+)ArVoYg#?w*#r#{nLI(3Rl(0a{b{a~6H3;|gZo1=x_h(ApNJE#r=V!p zp&r>y!yyx?1p_Cq%gf%f43TMijB-mX^4p9PwjI7F8D$&2jyd%l*M0m+=}wutxV+J& z>RUY$V{}>w?%|k)0mxDux%F zv1V`?0%U@C=i7>_YjXo!+PumpjzbfO-y7`Vl7uNc6xTJc_fylXTE{ zv8y(^RHIhZ1)NhrFHjdY=`)4o>>#K;^23aG^sbZCrWOb$xQbM_hB%o)!)L;Aj2?T* z82kLIkaSeGy;rJPEX82g1n{l&ncMN!%Obg#kfvR1xj@4kX z4A}-ew7v2MGtM*A3=`$OM)EB4Vx@C z5xDN|_%bq){gdzVs;xKi0`AjOY5xFaX`ck+!O`w7IoQ9VY(9<&~zlzO@qqM{TW;%l0+7&^p_uzjTQQQFO$B=YEf^ zN?`j(C~ybM`c<9&hoycY%N^dGZ*CzViEnLPW4g6$0;@D9hZ)Go`C!&Jss8{Cb&Uc! zE*fiF%M2ghM<7W(fN0y0Ng#2MGwoBHWmcZVAt<*^67N3{?k^*~v6oM=zKZQxBD}t` ziDv@y34a=-DI$QO!~h6D_rHXIi~s|JUW@!w(yrDntkq=;1*=$ES*u0neakdb z9uFADu5p}-=JkDDHWbgq@;NT3NIj(j-o_U+o*_vmOLXQ0_*xl>x zdwSO5+RD-6xVV=Q#SDe`3daLGLubDS=TwvaBy_}`O$=H}O{(2&ZyM&`^2Z!%&4k_g z&QGTt=R8-LI)kY-o~5}G>$;WI^Dii}zwXoilo(O=6}S8Xh3@|V66`=w@WF3!B*P#L zrZR*1u&q+)d^l>Gx+z(;J&jLNTj^<{TS9FvBh<9ZJFOYnJ4rPgspcBFiSLw zHcPR?E(zz$o_>Ey=2{k`7fxx6x_p6RypBs#D5^>f zy;o+M{mKh_>sDJ=@uIg9#;(!?zzh!~l4`c^@bpV%EG@1)CRK~Y5!(huWNpU>IXV2i z`ewQ7X{o5{7rK<8+H$+Xj5g%q02t@WdGFhwN`lEGhouplNqsNy(@)cN zt0@ksmQ8NfkO3ml zV$z>t6X@Du=iu3LGnAcx`)4&%uIbkH5kWPF#3C0c;pE+dMpS|T_CKX)nfW*w_o!OJ zM<$g#bFf{?N@U~CIUnU#W632YY_53YrP4D{Y8Q~9jvL#QiLgp6r)kG*j^2axtu#8G zpq)Doth(bqrE5B@F~|!Tp~>=sS8jKm*!HYGaC@4)uqIxdk`uV*V*7rTvP$U0njzdW zEMU^3HPR=n*mKgz3Sf$goHRE}jx<=Y}kn_e~^EKm&VlIXSHPmOF^xok3O^#yBIkf2BPY%f}$`KxGU($~nN3xgNi2O$@fV zXfMCv;&)3bAWN~}e=ET)2G%{+}7aDxXwsFfefJD+GZ98^u zCmyH20FPR$>5W~qok~=*o?9!aflmhD5~Q(EI3yl+jAo=Q{e}LUcO(npP2iVgBWWzr zHV3ieJ-w>3S>*9#g@jiyEUk#AUFtu3H*Zz!y@>5n!xYm=Q4Gzdot-mQ{6WxLLey=i zzKt$tC`5Z$Fkx`=F(3>d&PGS}MPO&@+Y7fg_K9&U(q&K>!iGOmY6O~fz2&gGSc;J5 z5~t7n2>c!nJpQ>O9qU=rT{&lIVEUExD~wF0^Q9L!p0U@d^}|C?YN!?9)Ntk>nYZ{R-2~WSxa<(XgWe6v#=Rexo}Gt zknnsY+%wxa`GHuxe0iRkt2OvJaBmk#vb@%f^}UV1PAk5tsKet$tuYcH|(VaV~+e0nhxqSC`bASqN$|eqQJrAcNgO5--)cibyu_Cj& zPvRDfs>=!`*X-lD_a)j5z8bD_UprLiuo>-Io2^dH*48=RRdtm^#IcZCMI#`A?T&JA z0IbNR%&{X$~Vp>U~N14`0%;eOIeq>Gsw(xe|KUQ(Ro8pD=>NVmph}&m%YyL+X3?^*<`K)AX$~MzjfT ziyk=30lAOY*1C8gx_J7@^ZgvIqa*4i=@rNJXLPQeu}gOvqy~AP%+mO*k^}z$P(Rcf zwCTMf!$#Ic^}X%Li^Fs=PJywJ-+JSL^ICG|Qk?1 zmp}4B{?Yy~)6nNin~#~9WgGILT8^aMX{@00Cr{bFV^jYC=42nlN4K!{`qs|USmKN+ z3$%J;kJ6E4qTAU;Zw;EJ?g9Zw&xkg*FU9K zIjoOzQH#c@7AbZRg@#9qjCoJbzB?L;s%!rM4XRqna%XKVBW0B#RSq2E50mZBY-c}e z%k-g_Pl`)>+lj93#70Sg48q;XTt~aHV5cN|@#t$otyx%IPaE3&K(pN%{`{$VCLrZh zE_|Z|=RSn+1y4+Icie@`EA}mH`i9cw+BI2Zh@GLPi~%bD0C;nZ`(yN^Xj&uLSa>kC zgs2(Yc!j5LGZy|Q3&wCfov}^YSw#ThamVXY(RaAO^Jk0>Y74KNUfYxVoLb*vX^Ea0 zA(DB#C&7533vR8B*%7LfkC`;o8g8EfCMz3NVsco-7?bWv$WLgWj?(Gj=fb&B-Qv%;svcM7Ij)u&tcfDQgPsDq%YoS}ow6hDy_Necjty&`VhGk)fRd10QtDJ37N|ie? z{U_8Kg`L&4^m=sX!6SQ{Vn#N3l#)h1pyICWb%}KgyN8-PU^is6R{}-^p3DHi{{Yl# zPPSya(e)TpFD%y5#-luzWFU9?);mJcwc7}v#1qYEi(j z&eyuN?aXC783v!Hn8Pa(I_wy@J9lOYz`F}ZP!gPz^TaamhC`9$)Imu72;4BOc9T=&n`v(Fmdxi(?T zEm3XkXs&O(G$e9ripJ%xF8=^}g$(yd2xV|e`i1M2OvsJc@F?@K?}QS3t4-r*m;{;;c^4j7Zry1+kvsdR6D+Zi%OLO@^5!r{h=~d#?^1Mj*Eg>fnZH z@W%c<4ox#fxsvkhY|>fUxeBVTGF{kbf^)Zmdmnny^jAu1IxAntuj-I%a5+Y_XGh-v z8?wG)NZ^jg(z%*EJg+Rd?eH$1N0B6O)6*IsM&3aroja(SaXBgly!5JhR z2H^cGL8bL<+CsnV>rS8P>4O;-<_M*}xGZ*t+~Vr0BIqpYImA#mAXxH z9lYxzM;v>$?vE|o<_FW#xuxEntW790rLC8UPTz{S0Gte*DCF_Yb@8P*sWS|u;^?sI z{;ZN+J5&>2++WReAh?p|Xk)i_AOKSd+z=FV+XLxaUYpi*&Z7J}dltHm$Es~$S#9r$ z@MMvYmqike{CP^ZeCLx~e^SzIWVQz9RQQ%@Ak+xxx1Hh;QuK9$pT_-u9VoSM?+Rd45m&K_r25og%t?r}Kt|qjK`K=?rkHQT3M^-9wc7|^weJRa9Rg&)8!j>r)#e_`B zbn5OAfx*Ei9ghU_ScmA|roCT?4Q;5wZECjBJ&ciEhD4CEsVd6(!>}E|1Lsh0G&?yi zqHdtJ)NOAq;TFws>m)69rhlK>q~MySP7!h3=yxBBddk5pMMp{L*J*S7lsST!gFa|R8!3`Q5QJdAxgu1egB&~(RC-E{gR*jYr< z0#kgp;nb3IfW(e|N9|5H;}n!t1lzq)kd@L9F7ruyQ7n8>f{TMumNiLx+#m$R8UP#0-#UA|jJCyqN0Q%N))h~{rdv9`%mhP8w z8L_u;5wTeNj{8>!+z*~|xi^uw%Kpj!0L6Qinuo#I!EDl&DRHKlWJwof%lKvPir4a!kF~Cq^f#7lj0mgsns&2lzxLbV==Fal+Z-QiYe?6%I1)5_`K~2td{l{;6-O!t_F@k>3&20a&o#0zs%1BAntqhkwH+qq zuEb{U7%kMu!1!$>nZqX_0#BwnB#!*luB;ZFSE~5-`Xsijv3RX{@hXjWFh6&(LCb%8 zxC7=YE}gF5-6U^0YlvfV=`GrCX%9YS^ij`xytC>EBfndVt2o@CTzEKE3=16R{{S-a z^7&MJNkKTp6L8klnVE*qRMWK|gtkj?&PqfNBq;2o=}d#q1Y)mc(c`rit$33pP^tKrF|vs= zPSU5_81x)t-l`_BX1B62Tma^8_>3RP5yl%Ie}3$v-mcdKsSwj9L}}4vG3U%NpO$N^ z{{XW#*ZfJBcm#gWlwkV#lDP%mlXPR6>f8xhIm7`Ff@M-j4lsT8jy+Gv*JJ+xX2@u$=GUO5H#QTC&mP?!L?pQj6vqGnNdtGMy(d?* zS-LY&xd|tY7K3!Kry%ZofCrb<@qzW?s+XD5Ws74;sP$!y%=)GM`>mT||(ZSU_f)MO9Lq z{{W8|u5Y7SCY$)77LgB#Y^S)mMu|H{7F+@e$pie&OARiM(>)`-D4{!i!Bv>xpX~AmJ#*T)XW|Z* zr?*tJw~lNq?N`Bg%0nyKht9`BhAI3$PtVQ*Isn-+D~m~zqF0FmM;t*^VL)Or{HbB&QOrb~cMJ_; z?X@erYzU@pzu9jv{S8~&bpjKMmU#z7obcIGK{Yk4At;PBpc+QGcRa!D*R@)ds(@MB1evzX8?o4Esw)Fi2U zlY_T?g?Q1C$>&qMqVgi9AW1vwZz3AnkxyedrAO zH|i@yAfv&aSseKzUKWmjDZnElrC8iZwioWmvL}WR5>Jtd$YJy1qhBd8s~$)=&-(k+ zc-V_+Kqm}9Jk`9Sm$N#ii58uxK+;-9u(~JjVLzTT@AF?~{cvj1*3~WNNv%w%=y-K* z)y(6+xfjOfIgEEry_#eLdlIK4vE-BM?^+!u?mO!kt}nGKSP+tr9Fj47jAVt!sN{3a zMoGQ~sd98pPe#ys=HJ1dIP|?`2H569v1C5n@N@l>-_VNZ8oxnx2A6Yj3AU11p&~_i zkdQ#neD>gQ5A&@R?Z%yFEPn{sH*hp>dX;#G18e=k`!sO{cmTCyrgn&{r)?#gpLOQA(9th_@$km|J zuMuFnL=(d%$vmH#a_HD2K-T#(DyycP#cw6^~Mh>GSJZdO>OkC4bCjdFf|T>a}o zJ+sBH+7%}ZMwSnbWtjG2ZTJDYVtcLTk* z6Q6L(Mk^cBT9ley)x3(Kqm?8sgOKAOsd4f@PpxN`Hx+Q~UE;ZIHg38{Op*w6h;J@p zo@;BHo2$K^Xorh#(S%jTNen^%0195Ep+R{qwY9_;Tj{jDKH-&*nOz@pvwmO$qUAvY zlkZY2ptHD!811*gBdkh>+?Q8pR%{hMU^1ti)Tr+7tdc8$67mFZ5iVeGaM;S@w%ifi z{{V$^A5oD@b^IL|boiwdlcsV$r_dt2)pRR+OH^q!Rcra?zydf`%xe;$;SdEQ+~jjn z=dk#w&Acd@HiXPW93L9z2OQ^}ym6nEZ*6sLKUTPsZ8akB?33VQc*b`Omu`JV<|98U z(|#ZLI-0JLb!BUNrrggglL=tow+L{`-@(WOKRj1SWSYlkI#7zqrS5Ztyh~ejw$tMg zz=LYzwKE(>>r##>f8vgp@w&Cmg{9S#wt)%w`OA@$BY*;cyr}Yy{1!RKdX6lylhYMMrxumB zWQ|u+_)CS;dU{wcHH)9!$Kf5{3_p%nZ|!>zKr`RIkEZlUG;KCJTXVae(#U(r{;X>S z(;YKDi+2s~vZ)QT46YqdhzQ8Q2bDY=_QiA!GhEZJX83zc_$0Z;L?Oc;pKSK+$sZv` zWY-&@#U%OUwNcMtDyOLLrCWs2^rD}(E|3S1jEh)D8{6hGa6QgF>TUhx&|9+Dv@3ka z3hp;7Bl~1}x3c^4c<)K4S}vGncwR{^Cn2YvX58|hnf`!qD!9u|{mUF&w(MQ#_K|3| zDQjR}H3~s(+_^p3y~(E)0wO3-s-p@3>?$l*hd;eqyM*cS^ySs<#l&*nPrlyT1zpV( z?IbfVa5&EHzzk<66-_qxENw*<#{wDVVip)9GRoxehzJ=!atF+sjc~GF-5oB~-ZQi{ z+~{y%i1t-K{72*uVV3r;ebJitRBBSg3~aYeaQKbx7rDonar_JUnEeNG1$2ED^GLPv zbn87z3#-`VEpkhb5?N2?WAE*OouC2fTd;JOE0+k%o2jVM?p(yF1Tn*J8pRA~5fKIg zs2BhbY*cMZ#@|!4_W# zoX~X*+*4Uf6jn^hs(E| zsN=VPO2O%IYnl$D;lmxwPJ!fWSpzyU|GQb@oX@xblJYKJl~N!iqR(a0lY9P^I&6&Ae<6un8BKB4e8yY{OG0T>>Ch!On2 zuC1U;gZLa#)P53uE7h1X-59Uxu z8T%UTeqeA(HRVp0nUk(B0<$hJ=OBaYk9zC!>$;O5-FYc0Lj#^c1K<5-vgYYr+Hqx& z%%jPV{{Uz^sjWJTMr4*qpnJ=4Gb1wPcJ^#{QgPqfxki;Dd~Ld@^Cq=@8*%FK5IL@k z_`9sF1 zKAn#q^`{DPf{QAfP1-1Dx@XfY)*+WVZKD9bW0>b*{W56u-3EB|NVRvG6|=UyiRBKg ztQ5*IfsSc%&wYEP+AJbg64}J+kVX*;_{VkvfS~Oiy{gATu)DR>^(ZeTA`7Wvcwt!! zZ3!mwaoIt@8KW*$jyK=__b%zWXP#8kt@rn>zGO`UO4Y4;w@#AcH#S1`6`V-2MybD? zobWlT55V1PUDNvi06^1iwJl1{)_Z`G+W5{Rb=t(`50w6uan{pX-i;39KwD`qAi6S3 z2Ee<(3RRo7MnN18THpQ{N3SnXTIyH*J$7s%+*O9eMBFi)%Y%i>4h~Npt3TeOEN#n| z*uN)3I8LIr{EBXw>t?;zwEJ$LT_Sr|iZ{5sn$cmNIKVz5c(H9D4h~PfTj-yOZ*wG8 zj+)Je=%X?`H@_Kg5Pm$-%#7Ij9Q#xc#Qj4@gF=!$4?)u|E+vH7$$w{bzql^Hm7`4g znRjEb;PaZq>X)~6S{9VI_aFYwYK*rJrdbz(p9%;*EABZM7$-GUVHx{h0I|wD^IZH5 zA58U?u9emOQ#VxW`h>PN=VhYG`B{`XRoaT9ouPXHiqKpBFiQ@WqTi>l<*-IzlFw+& zk>!ri;1l0C;~#p;XnKc7>6-1ftEFoiy!Y2+MA}`=s?Q{jM$nBZ0YL<*+z+R%c14m& z5nse(>6LxhBf8{q!Qj^Q_Iz@yli%3QF0;XtQI5~l;m@h-adrNqa+g**7OJWyOHECR zBf-mowVu<#WG<83PO&aMi9f~2{lc(S6dZoO#T9hUjr<8beg;HZiC3g3~8*+VW zm+-a=SicUVO+(^gfb~2KjTAY5K0mTNavo_Gee5yzZQCd{1PGfEkz@LC!mlX~+7^;@Sdhxc_|Ld zOG?8G-!G8%scJYNdt-{tl6s!Th(ea(#VpYn{2A`y3Hf|Ehzak2c=z=7_MziWP$aVn z)MS;qwn+lHMlkGG7(ONd#_k44;mgwE}R)weO-2txI+}qC-_cpBq-7@4bc>&rx z-~-$5?^z$i-h$CCvg3`h%W`^Iz+vbt~0C-LY2*Fjs`PV)& zmxm{P%eHbvtB#bK#?%c5Rl0z^&9dZbESq6iB;SqL8Q#h=Mot0rK$6j z1dP*Krn5eor}UMMVj9+=DO;)MiI5nh2-0O&7-PQ~=NRqHSFUOBpZykTOm@#v>Z>d3 zF>zs}Vta`YZ;0EzMYPWBRSpN0a0fUI^Q^{~)EZ^2o8Ko!#{>K{GBmbxhLj}z=Y+m)v$4}|ZqQ=tQ4D+=6$dW`2fE$gwNC$8Is-DZK^xbQvwVh5#%z8GT zCe{<%M#APe+!)?57+mG{jk)jN){haTyhBR6MRk^~X>He1YgabRW!5PrWZmDH0bQR%%E4vBGU&^?Z$Y-PKUTk>thYIeQ}^Sa~!PAcxhSLYmj%WC_V|iMdd`Tj?d5=HRTvDG~-;uHD~J+wJLHj+RPMPq~9CX|yWCPq))U-0E{J&ZiOH z=p@Kl2^)7fKE1K}(^ofbbE3>)wM#J5q$ESm?itQG1PtRo`KU0>BgB@aBZe6yClM34 zo)|MXcEQFyxu`ccDI5wFr%S;oP1}!|0-W*abGEeFTGZUHhbN9%$qv8h;i7W?cPG2e7g%X81%;~WrZ{i*n%xS1tbrLv!A0z)t^I8K|C)07LXeFr96o=u$w}xREQmjWA_8#8& zsQXoAMv7q)p#B9VhtE0Ae&VT;_Faw%ZR~h(+XWJ)zPjxBTyGj`P)pqB0Gr3_enT<%}0B4 z6BmwWR`ut&`HsivX%V!sta3xC2)dny0D5;!)UItOUxb~Lb1vlWr#=WgACWx#>e>3Ld&O8fsv)UF{3XNV z#K1VpIT&G)Qd39M^&53X1Z;PbJ+OO*?v(lE>ee$_&`;No10%IVi-?I1}2 zbRo-Qf~bQ(eD~wprS$Jo$#tq)THnAVn2C}(`xMF?_Waq}DvHcT)`+KQbwi!Ltm6Q4 z#yfWRsJQx${SKqkdd;MoGfN>N;>5*p%B(W*sq%n31Lq%O@~T}^sqaO z-)fe6+_GNVuA_RTOj9uq>{~2YC1kgywmMso_CN~$^jBcqIlbp`B-BoDgl)qTzQFBDo`i z0~SD8uzi5Q04Ajvzu=P7DI;w@nQ?29@$X)I$aA0ZsH2gb4AzR_pWyW?i#f|q?yqkb zb_=z$&H(SXjEvNo^wggBRf^&$V>U2}*pr5JE)&XBkb8scpL)fq^U12~W@QdZ^7p8h zw;mA?K%O=1s!AwexKa6>w`4);$B(Jvt$KR<>Ybh1AMVt87@$d4c-Z&Trp`QDi<7r zg9H4WK7 zoo7bZ>|x(&)V9)+c#i7DQP0S2$nD9_G4iVmo~zUBp(ZfND9Oz1BUK~RvB@W#&5!f=bhVzKm)fN=BwXav$rc9 z{LroGBzz^Ko0bRL$}^mM;;ez(sPcI?epO?FNgvGos!t|Fnog{-LJjd`{YvLf)1|l2 z?RDGPHGNHl zY-VX>kl^jAfLU8HAl80Q|;eM|VC ztMvo4mwIl69Ebk^5-UGHZ|!HAx4hAGfoCX7C{UCjGUp@aK6T2VS!V!3k0ax^ah~0eBx8;$&OVdVVb%1@b-1*S8?O;&kXry@AbED+ z0K+-&$gHyKVyz_hFNaQ_GC1E)==!~gXBNY%sxV;-e@{qqTFgag^bs_hr>n@OS~(1!Y5emhoiwwDyq&x;Wai zMDG)F17U{V+lM&E>shqcWa^D#JIkFi=GyMw4+`8_Z!YT1$k;RLMFys| zwVpefA=?~nDqIXH@sEyAjX1BY(?kI$N&*OnSp<^KSS(Z3EY4C3o*OEWV{(XQoE%g!5c&Uw!R6&lm2 z^t(+GYa3pi)8)T=fhWhVQGzHqPzWd2pRdyt)AdHNatv|Kw(E>+i9!Y*!1o5O{{SVB zj4>o@Ep6wv{3E&3FCa@>$uH5Mf@etBp^`pS6YLxL@mKw3G#w_z<<_)I$gUh1BbE)n zy>P$8LyUSHFs?ByzC4X2%*`ttvrCrG)c319jbiTq07r*Syt;XywsP?-gcBY{I6cbX zcJ!>zrSm6!+kcs%XWFZ=ueAJ3*DZ9rYi%CiO0t?LQ6;&G*-X;77%ol#89d+)D?6z5 zCabP)ZFf?_1A+oURKVf3&>k{OQuig7|gE3=cnJ>-06MIH3n|MJ{re zEW5SUZgkBydwn`zhK@^!ZbXrcJTgVQVHR-3wK0m{)pywvl*ONR0>_N~dx^ z-j3H))pYo7S4`EfA&%hUWQyU3iN-R1exCI0t>o5Z`Ibv_`H_ZK?ma%EiczwH@>4FJ zF#iCVt@DGA?)nk_u~Sl_4mZhElQCHqQMshYoT{3v{c2i>=p%$iz}m4&Jx2=P(6P^e-`DdTjr7nr?B!5W*u#KWSNo@lNH* zm~h9~fO`tVOBqO(OcJh7n2Z8_aqso3E}XwQeZ$=n)Oy=#+-b*Vm4vm|bew^!*9Z?>|A2gQTQZY`sbAUQme zFnHr2S2DNM=8Zzz%Pdh2RS~g+?tRU4ezw;{5^9$!=^{xakt+ldJcoA&j>p&ST#7Pl zsfFr^mnFrPjXO&tJdRn|n1-eG_T)AtWj_T{= zgb8&mLR~nK*+FRZ%n;X7K}pha~aB%6wc&Tu&3)dr~w-Tn+~ z*2;2Z>IoEuJgFr}{{RYq@Jc4U=zDvc$MGjNL5#B+|P|=K9{NK92fUp{Cv3O6>Pqgij-88--?#fFPWZLXbOPky^WMrjjf9(@=EZ zCG>MM#zOve7#tjWf$Q3|coT|JOoTd!&t{E1{{T;3-dt!h$u!>ur+DAFbywZLZwx&E z3&G^)7{zaOj-t~v`zWKnCC#L;+9KgvNhFpq$^g#?8SY2rCbIfg$>O(pj@8_(U&F~L zaDOtKXBnkmG*_K{bpReIx4yNzwqu>&{tiMx=aIJ~7(be+i`k~jX17#w-}ZsI({8%b z+TKqI{x-_ppk_>|&PXTQ>s)(Ljw^e+h@p=U3HWjV&m)73cjqjFp7vEYQp;|w98Na?PbVzLC+}U}kybeT4sLJ6%a|bvb9{a; z;o2K@{p5-_kVxQmz`@7fv;9LglWPRpM#&OK8szbo*f%yZdz_!WH8uNUcALbKNh3rI z&6AKpC#65kO$fyA3jH|O23gVE%u~<9oh1O#}!H`#K`T% z06x&MSX4S;dxCMFHhpVYWI33JY#pHPUe%FTd}DE`5!}w7mRBEhNuh@-k*hSWj7j5x z+spnnKcdRPE$IL=csVDwK9vb)mv(o!_2G~7sW#WrLLVc3<=f5%KS4v>W!|wnMW)Ct z$+uvL6_o8G2fjr+_ZU5LAjYc+ztnI*wT)MllRasOJps{1$j!7n~w1$Q;F$9Sjv6%?v zM{lY3r!~0*#Ut?}Sg;wFBo;oNo|RXHzLMpUC8(s5(ntUTK>fdjZ{*rSmfa$$Qh$dX z>EWkb7TPfKWbR1gX*T}==I#0#8iHNv_e~RcF#>Y3MHm464ha6_7{aVk)BOX>#J+Nt8 zOC7C+Z zJkZeMSv3=z?XNO=q)|9IQq{ zR3Gj?arACJbVECc>^9BzY2f3=rB3E6c?NP`BwrXvzm8;t--rKB@s*q!lHqw9TBaS|G9WSst z?lGgex9V*^DWQ@Jg}8NOe2(behwDt)5#dAPN4W&71_%V740`wDirT@{*7qrIZ`K-e zPcU%ndjU~%9ytY+f7qI1Qs|fXNc9Z@?k!VIiTquo$uj4-b>genPNlIm9kw#@%<%|{ zyE*Wc_Ys4=n;pGyeMh}1+80+5jiiQ+cAg2&NpI#Un}kT@NC)oZRY;CT(4-vXgU(J3 zHqW&Yi1eJsz~kl{-@m;uHhmRy6mZWQO5n|ZByq_YIV@vFQS>-H^IBVdMmvb$j&BZe za|<%6k-V>F7#tjSI6rF1bWO~5w)bjO6*o#lVRE^Nc>weJas^+-XKL#NmW%`uMKo%I zEEvi8vQKVFG{~^}iDOMNdz%?p+(NLdR^)IVIRhqC^PVx!rE`0R-=`Z_iQ}G2q?iWs zfENL)S=0$}4v7_%{{WROU`BN%gl;BPIC1V9-<*7_4w{LQ*5!31d43u|i?sQGIRxk5 zf%?>1+>~C$oOv;6&=xXVHLOhW6O>}9J90j%D}SqWy_vk8JwEfmkuv)(08q=2G8?fO zAaXnU*Eqa_-E{fqvYthA7V#4ik-%NR=i4LhYpz^r5nSBOsA+cz<4p;-3pQkpImq(* z4D*ju>q1YI5@^f3n%;o>W{yCfndMvPdwzt~hM(7I3{uB-uM#?hl@uH>&UTgVdE^gz zm1g>eoi>-J&Ky82-YMj`VDPh|fP-kyAe@s`7xublyP&PjwZDNa!?Y1g5^jNxb5^cuq(jGzNaCzpkT2E5zT}!IOv46m6h~cF00cUUs^6xy8^vA6$ ztaWS6X6H+?)@|pESj!}gXM#pjSPYl<17QCEEDmN^YqML%tu35a7V+>UvTUjknvPfQ z1vQSNZCeXX`W-8%Eo|@q02(@T#E#bFPo>ITt%@DQF(I;`fWfoL8RMQSIR{Vw0KFRT zSjBy)TwgAcaz&gM_cAnX7*=4OOk;%u&>Z}!y&GM$dD8CE{H@@|!W(3Yenfix5B={n zTjtX*HJiyT80)pLX&H3>Y5%Zbk_HwN9x+ZVRbM;^vZ zDg*tLQQZ8=!20%osdbgpY?8xI0y&*_CeQpN_a8p^`=3hP8j{$~)f%LcAzuzWft->~ zNj~KInyl*GN^2gQ_?sCFcRv`A@5Vqvj!zx4l@&$OI)1CG-Yu*e-0&zu#qJPJpaJR* z54Sn1&ZOxsss8|VZlIDIJwicy6tVmR67LvU0}~ry@Jjx*Mp?!$N_*^R#f`n%*vj;t zp>=W8$tB&)(=$UROSvO}F~@4xUfpt>{{RrKZDn=)8&_7;QhRodSsf&dtAa=NP7P@y zyOU9Cai?2c+`P^Eps^9ZZ|2%g0mrTn6=!Q@ZCj*`ZRV2{y&HF|!!)96K_j#$1sp35 zGu&`%8D%=drv`G726sL1Gracqt(}A2$l zt+)7+^euX8O$Nc58+dJFMGn_@0VI)ka$}5S@D6;~&Nvk(R_iSy+(&kX>gIcQk~D%C z!36&RXp@X77&-al8LC?yCqmQ1$nlBhI3@1CdEpP37zMw(^yaeNXjOG{C6q!4o(S9| zi?Fw$?Z7-{lomYG*)Yk|O9Xt)S+?o_0K^!zOGUBPUh71^Nl%5TTe7+ZCn~Hq<#F3^ z(OMxmLU;ZOoYAMX0+a^+ z`F&|udVSTD$l8REY0bBAOPK(WfN{)2FQ0BX#Y>LXJBPSBZMDV8jR;%GU*TdoAO;Ef z+k@LY`(RUhZpiChw<=))&^5VM41Xv+{{ZRs`gSz!#AefAnFYK4WJmHpd~m;*9Q$!r zc0D&DG8>DHgpdG_$fxML-Gw>_-4pS0sWH zJCSe+#(sSIcQmgM28>S5oAN>&?{8XxHS5XY_+Pq#*zQmUNWlX%l47x>iZz+x62cxu z#>kM8GDoNV>XPb6%-0*jhA!Ch?qT%L1M5$^$pSLS_$-9*{%jIGy(%lk;$2LCzJIM< z6|qZXX=G^~oy##NIb)Oh)SCn3m}Cs?KcS|lRSA_Kj@bt_Z_xS`$5LwVr&>=Hyq*i( zG_vj?QZ+8zC?uQ?)a25Qu#WDI{{Z-Ni8>RY%!oGr*t;N+$jr^$)mKI7B7VAYcEOY4 zt|C~1kO>eL&PN@`1Kzrq;J$%vchI&Lcl&RbNz`r<30o*tmST7rI2`+)D<{zQk^ca_ zaq4CrPsNeta|ZPARG8TdQ`2x2UyOk6=RDLkPK>AfO{V2 z6#^f_8!bvd7f98mx5>h#{kZ_+znEkC8lR}?qW0FtElbC_6I^($CB()_8JTgGCp_aG zzLkv8b)jP#f$=bmGPlFsOAbct9swh;u9g{8JxsYHay1<}_*btDO=s0K_}fLd@eR$= zOpg+%jfigG<2y&zqDRphjg)~kh;A(#X@3mB>UR1zO5<;Sf0Hpe#T27SGu8aoi*=*8zWlceM7?nK5mPG?RWZ-~4 zg0oMn-S+HX9-aF>{)Ym#uvifyf;3e0$8-1fH1tqOB#8>A?-<|$K*{=^E6|#kQE6J; zoN;wdjU!nA&a&ND8Dn02rDcS$qnOiaof0LJ5T zs{W6Q=joF-U#kIIze)b~Gn-q?N@OQ_h{YZ_j!XLc`b z)>chH8r<7w^95j~NDYyk0&!W6q|mRraKtscb8M4t5X!PFu}QS^hEw!7I5;5UruK9w zyD7c?xXl6eq_nC-_)WhY;CH3#Pw+ad`g|xQxQ+JVpCcFqlE7ehBOc;~yB*ge)c&6_ zTMxq9M84}gdsbY$&`%nB0#Nhz8><|zkUviSt4Gi}iPJjEOSn)AG=>G^IB683oM)UC z2klkQbkQVq?O&&o9+>J_VYRc9OgD#8wrH-mNM$adsZcv$XOo5uA;wdkE(>Hh!`d3vi6c|@_m#RQ=L0L*pH;0{L6INnhi=#8&Vn-y`HS1$_ppAWh!Gg8FgKNFdJB4 zaz;7GtlSqDGJYr9#i$mZAKEcmT*WaMF*#J-yU>6}54wX|ZjtE=%}(D`)NP*D;pJG? zAlMHc#w78{Q^zL>s)SJ+o^k<%b6(kS%muH8`-4JCSoRfq4 z)*}2dm2Hp$*j#h-Z}YCJ_?^>Nmw$?O2H)Y{*6q@3X$0Vxi)P?Ys5Q?zy45th=q>iE zTq^j6W#b@|g~zT4Jl9vI{1INpOy7x_d*x`vX&_+vJA-;-1N!Eo=AOOcd>%*xJo=u0 z#+enQpjy+4DGN>t09uN44rvN0z$pw;idY7SQoy80FezYrP>osLRTQ%mfTOvq18v|i zf;KWnGQw=o4!A$YU580Hk~4BXasHL4ANoo-zPkG>~osi zMguRoN^D__epVmj@}tZCM<*VKKkJH-dv6`HDlOf;&}`twNo4x^bMmHHi7Jv4w`jo} zVvxWW%mk#23@aXg(5o8@>uX2^GTOVjCoX3@K=)Mx{A#vEDddy4aDU2_xQ&O16_D~h zL7)qkiD$&Ql2F3~5(AUzlHQdQ&u?(a6p@J(;exnue&d5oCG?R?xmF<`_7OIz`+L;? z03JK2qmLIJ4(-H85|R(EJQ99c#V{SWxk*5dK&suaPC=>327mEYLGPNRnH6PpB<;_Y zpBu61kT}gb6~wTDtn61D5!`(Z0Y^g9`d-TB%`PIlyuZlhEu!0l>IuQY`5aX1o{0F3 zFiT;l-9s{s!^OH*-aUx)KXF-3nd%>eSyJ-qSZzhD>aPxR(l7;CvHg;x9C4HMtarp} zx}wD#*HVsJa3l~A?0G+6YcYMRke*;#_Jk{Ll_l)j@A{h9<%$vTO0nhZQmiETVLf7!vjyqml1Ow-^Hc#nR*STGy&N$L-unCcy z1!E3JljaUaKAFWk3f)=DGr@N(LM|M5p$T8FVm|r#QxbI@q;Qy{xJ5=ntsRx2WjXFc zKHMMHp=&)?KBuEYrlfM9TaO>&9z_n=7z?#VFgy3oXp&Xx5p3RDYkfJ?5yxxPwszuW zPcETtfwf0DW5V(BKWeMix+>z^P8yDldvB`ga;rwO#_EhS$;c7uX~$;dlXTXk0Q}7@gV3 z#D#_iGJOa>x%Bp~d!uRxPnR1c@ZX%mLb{Rd=ts!$TFo%aw2-d>4ir;+$3`)%ZQVb5EriI?5+qPIj^o^ukD;z_4fVCqoKGi#G|+C2IXe~^ z&JVw8-u}vKn{>Ull*MyBib1@w0Zzr*cpjNK?t4(1VCc}nc=Frsf=KS;lM)P&k`bJC z?0XT;DlN{DrfQcFEPL(dx0qbV86{5ql6<7#`tmXcPAf5E4c(pYiE66RK@<kI zfK!v`GT8qBwN25wk#2PBN$(apt){*BX#8f&vX=^n>x`51qWwtMp$n&(E^jRyDQMe3 zNLae<%M5l0zX0+$p{8ngnlD1>clvG1q>V6&M1MSNz9CbUJZB!YXVRM1kta;(`bM;h zj+Sav&YPoj?YJ=fz3_92v(|b^Z*++4^y|M4%sR-CN#|38oGXq%{{YoPi@OBqtLuKC zlIu;?w2R9@@fNWq$HYY5MorlKr;u~)#dBLpQ^memi^nqCv#Y7vc=jWj-|N~{&Cau^ zzM~YDa9!HRZm07stRx3$bv$P$*zs9=o|KBvm+&PE&zw1R{YO8jq`2IY2>4UsXX9JGo8PBJBqcLjY zD|CkFJ+us36p>WM4lq2VZEpU#t6SYwWVyGvxEEkR_Rk_d0P;vl3F)-sIP|4fJE2DY zO(#b|fByhFFhNpzW;q}aKtG@rk%6VYzI%zAGDvbs9f#7U>pFw$+M``uffPC0982gs z52@f})mz@l50(`Q*~V49znxC|5=*($`a4t8bPFev{ft*r<7qLsl?QBK9Gvs|dm7S1 z)|!0sDkIKF8@!-KGCKfr$B+BxHP8B02B1VU$j>Url7yYSum|bfWBh7jXb@c6!*OXd zTQrCq#{U465;Ncb0JUMw40q;q*|QE-wyQ|k-|J~LqR(^iYYb|J^k!`%!${+D$Mhe>{{ZXjN7uIB5iOs)MCibru=55PKK^2B zR~&N4s^i0kFi4MfHYNs1&+#|8^vzOrylUDtrqar7?l!UKcrK*nkGU(HdVe~PW?vA`g3+yH7^hIl}Y z+?DQ2On;@V3*Eh0o@+BZqC76a$W=z9fR9NcdNug zuqpol3vHfv4a`g9=odWHoLb$Lys`DNy6g8BM%v|aub9&$MK0**Z_nFHM1MFt2f6@szYM{G#skbYvPMQ?9yD@_~`$20P7 zCu1ay^W5LzRXos6xn!#(mGFv-xNO$U$zYnL!)(ctc#_&BIOMKNGjomxJJqeNo}oIf z!3LbI{5DZ-lkY3#^Xb7JwD2A*jVnKjOmMopXE-y*j`XgYcYS74B$7zp0-rMu30R5X zcIA&BI+Bx;x}uqE>AM)ythC5){0Kmj?TKc57CGl6vE-bqeZ@}r`J&WT$`J}c*Bc}_ z-0id>@9F;lF#dv?w}If);<;d14)78(9lt!MJ4bBq9FtR{(9#OMbR8ST1*1c`G6q46%IiE0GP*t^d7(Ky&&EDm1>V~mzfC8TO@8IXV6qz^?03? z+qo^bKA$>ttfzZRxU()dKLfp3Yql{%q(O1JGEE{eJ-oY5818EL@KVZjZ}>ldG3{Mn z@E<|ewC=RA)!xoX?4;AK<&JR3!2bZlxl@dsbB^QIxjoxPB#|LQ9AVDYEu0UnbY6(+ zZlCE(OH0i(-p{DMZSQSmVpWmUERLK60D{10%sqYTyvevUyOM|Ev(XxUrKo93dvjwf zY|=p``EfZUI=X@x6m92rO5h$ob&Ig-JBtYJuI!Q{EH)n)k-HM4GXO?$p3F~gO4Dmv zo`q+iO?#xtBn8o+Fyu0pF#rR0#@(EOl1~}+u2X3inR%x&FH&gcb8KVXEKH1~$G14n zG7mWP9DM7Yg=&j!Y-^s^L z;O>tkmpbL;+)zto_E!-F_=OH+Mob?MA@QEa7~t1yivIviUXj$S?WTe@{fBl^0Nmrj zVnFvJoYy(g?d~*fLh|6~k=tAyKK*_cJeHL2iJ8%)$;a<8!2sanH3LX8Iy{!r`~}AQ zyLi##c4ZHefDj6Y49A0jMg}k{yp@ru_D;#h;GBJob%vm}7ST0?mzJ`4QLg(*%ws+u zbBttt>sir#OKqw3X>!`F&B4=dWdcium89_EIUAh|WPo|xN4PZ=w4&Oy`laj^R~GkC z+Q+u%gBvhAj@U>la>zGh7$%?mFwj=RsO7l6wZBW%x76c{EUO5FLd%V;H=oU&z?}N~ z(`qW%-0n4BTN+=(y<1Sd>KlCuX1KPO;jSc-Yg_k@SXou12+@`*RFXj2sxj$S*8NKs zvu6e5y+Gw>vk36tSVt^uuAGKwz$A>EH-6d8WBPtrbYH~P*W^W&*xXt?WnCFF0UNgw zw2xmep+3g2F-57_oi|Rm@#MHMsa3W8@MZGuAfY^AN$d_Px#GRx>63;+qcfGdalDzz3LrK{>s`niJcjm2Jw)CoMpfO za4-SE;OnA~FWUE?96!1Xh2klJ8FZRMPD~YU%>!^HgOL+sa~4 z7Ja)M56rt%4sv_)Y8diPP*<}hB^5toAkke$T)a#IjIm!q{&i#1Qp+Dz=*c3LAG9r$ zk~?Nq#awl-QEK+ziXBa99-#x-L8vmNmCdS3stT#{lBA51dl6A)>KKE;aQY+?Pib=v z!nLK$kf?Ma^3k2Zu17t%>_th+ae8G;X+}}hlQ+ML_RT$);)66%o$y-5tPTzYk@x%6 zuS>@a9S;-{Lljc9t-E53;6?xhdw#UXU99&VHP@GSHlZwTV6dLvZT|rC0r1KH0MbFv z+uo&Iq-)VuhT1q%?1Ld^f6gZNO@-tBEz79l zwy7ddG|+0HrjjY0N<_llfiZ!|CucwQu65GgS)g3$(Z_dXsAyLRkp+?xvcoB5&QAc0 z<0SFl9FtZ?PI2PWqdM}tTN>VwxwC@F(i?_~8Pa2KCE*JplqW5-kQcBW&Oq;6ukkBK z(zNYoN4j-sQb{K_cBn$`2$fx+o;}`?J zYo7Im)5)q`K{Sy;urBD*ateYyw*Y&BPp=-;E}G?$$#*QxkvPSA9S88$&~;{^aTE%X zypZh+HVPqzBC0do4&A*gsQxJRT6ETpaj07CCeGbcT8LP6aG|_lD*u*tl>q zGN9-A;=27Z{{R|m(HOISCRN=(iFGsQIb(`Iq^Q6YwXG#0)KjW5X$lT0~Iu%(m>{=T2Cx0=>SnAm{8z(fc75LnJBMPY$$CH z!`gu*`;0S=(GO5Qe>%I;tP;{Q{8KmQbL&G(uoh5ZwzQ3(5wlZVuK|kj&uYgx-pJbs zR_sfH4}MR2Pz#OU#oHsj2T}+lKKybhWQF$QwN_ely9rDa#~|AKBt|IY?Q#8<`Blu8 zIyjPBl!|$6q}tZ-w7_f_^C@po4+D&vto_{AZTmjTWq^>(k*RZ$>_|8tB56};>;tpB zQ0I`c%B%i0)Hws!Yo?o4_;T@G2jVd)l{WiijtKgie@fG=?~jExqa;!h>2KvEdqULl~5qJ=R&+ec>>Fz-^n*u$&a|r`lBisYq z!;H8;E-K-T!YD6o;GAUqM5z!T`iMWut7MXSjwQIBKt^!VF(0OJOr!{+GO?&9)CyL> zwrQ;%JX~EtpW;ZjOV7xK#Y9Og;VqWBxLT zm75u3EX0GxKPoDUP}Hu_6^G&A<3GEBf0pdjaHDe%b)_iW!{(F)iI(Q-Kljw4@ew=}3+yO7u$m(Ww7vEk)nf3m>+kALx} zP{$m_ri{pls?WI`lWKcCzXct3hntk*7OhUR3D z4>63Ast3G%*XlP9r4;)UPt1ZRPt?R<_Z%S^hnxwy7AH)cIjJ0*mXm0lEM2ON-3 zJ^uieMK-~tZlbxjyNt4sPbER&hoR&36$<00t*4gFAzg`YaxM`N1RSu);C28U59e78 zGJCs3(Ja~$utO^u=LlHx4iukEoyX^ok*x-o)M~L!cFbDVJFf;dl;Pw|fC%?F^rva^ zEiG_U^wC-8(6*J3L18R206{2Ac|jjM8gEC`uC$Jvp65)uc&CC_-5KUL9w8WIJRUyu zT7IEobX!Xc^;oW8SsL1N`g#PTP#&-g84t=v&JFQOU%URb2tn37L0fG~i z%SeFmeZe(trO0IJWM|4edVH`va(P@faxf2Zf$5x7En`Nuy_Z;;-d_$@*kzD6h&KjS zAgJX}lzJXHrSTd;uCHe~k*}><8B!SLY3;q4V<#)?%%48hP1O)1U0Q6GN#LH`yiy`z zSO+1v9=)=7@5U)wg@x^(?FW)Q_U6JhNfhKU0s-mow2_)#pz^+t(~oVDJ6T--IR60R z4mtT!dvHl}xlanTWED_RMm&SJ+N4B~O(yc8+#F<%K=#1&sjTTO?Uk+FxHC-#{mQ@) zdC24bpL%FpE$nG?Yd?%LfCwRnw>TW*6<)7W^z77hpM&uT0RI4r8`;j$`B|d?XTKYN zpB<{pOp-$u$98l<7S$wqM#kVC;BY^}v)wB1Z>k7pnnYa$9!a_q{)f&!3BX9M58OO0MO3dE$UiU{L_x8=oQ z&xR^GvAwRnxHRF*EmbAGerBS6h>KB2yy^W;8>C^81CItl&*krf`u(bo<3`kU$5J%m>)@E?+C1BE<1EddScBTSg~VMguNGP3pGUl5`InU^80_ER zYagz31f_v~g){H$=a^zO&uEUdzF|}Ox_c-B`%i)l$ zWFQ0IdGsGzztA)eqP3DeO3fQghCIpf7jg(t0pGtQe2B$crm=f#zu>g(4?$Mi(fAR3 zMZy8AS2BM%x>;?T+0|NL*R3P zj@)}wj8LqITf_!g3C0`BLC4G2wMJN*w>NcPz~hpsK~>nOvzUs71Y8u%ZJriQr<2EE zX*R<))@7W7jm4Ss>+VPW=owtGJBs<)!OlqBN$>aeq>Ouyt2g+XPb4F>H{5F+HvAnMib!2%Spy zAk7{P4FXqvY4^Jy_;7K!91skKEuhrk_^52{qYAF)swp2M7XrmU^y8k`e(85U`?i3=44r6WFo zd50b8QX~gk&eGEf_m)seT!rA1z#dW9ed*Fbt&w$vf7+AH;ju)x8GWDum5+>`eLX() z2o&1V+v0HqD)Nn+6>w9G=O^;h+RTd|QAa8ecCr>m83m8{cKs@_u@57hAe@GLH+;JH z^z}3=>`QLrces+$#nD2vlS!0C#@{M{pnU+RE=dMb9Sg~o+H;+_=AquN{5`nbc$xd3 z{{Tk5wJJdrQAplpMqCmXB%fhTqBb(*y7{n3UAtF>U-PKb+(xntW#lJlh2XrqOQ5yYcvj>iMJKJ{uVAecPtPn8Ea&P_cOPb&y*p?M^1 zZA4Pc$K(elkWUBxj^34j&|!bx%NChbppI4nyJSSzKdlddM@753md8*{C0beD?ipG= zq(-R2EwnFSeq`s0#aPT{)rFkV!1pSpo)(9K6?Y#usl{sHW2p6Bg>@uyEPo3ujU-Vs zE=m$qU>|?bR!^s-PyM6B6t31TfIl7Kz|CijD$8{i-7}}@nxvYy`_XYFrj>0tSQ**O zR;Ap4yGC|{w{LDST}!6)8+%(x7pC=fyt0vo63*f|^MEoLbCNxLyH6QD^~WSIJ*QDb zB#R)K2F4{x@iI9*%~sl7LoZL>GulTSmiJc9WwUPzMqRQg8RrL{4nD@H&4O7tk#;<> zk0|YZNvrGjIxW&#YOzAmM9nK)Kx28M+@Qugs-8hCNCy>7(cMNaI#xU1dmFl=*?+5 zfAIe6SDwZ@`7U)Jl3T+uib&&SZ!)$B{J;PXe$}2aejANjzkzdUPVZx592z9?cp7EP zEY2cSVHs<1sud;40JiTa zJm=?Bjn=(4c>>*P34f=lli|y1R*Nu3z-(_{FyP}j;-ubab~@)tYC}h!JG*G@=9LDW zbVOb}YvN&)jP}oyfJypQ3C=BRw28EudPelUHu)Y&ZtN!1NYo;bTy2uxGDKX+rF^?a zcCa1z?}JqnSy&cR3rcTo?C!1Mk`duYCM1x6S#U!E9ykQ>bIn2M3$1!9%~WW*jm3&v z&$(^2C*KZFDx{|>z;ThsZ>4W8Z?2@bxm`~{_{5eY8cA!iNeZ@i;I0@0`kedmR^-W| zZCMCMRBnvYTYM)_U21U8Y|>9Hg3E6#W@(~O`(2-U@;4O0410a5)A0rrezd&1UT3vy zi;GFc!$wt-c6Q)!+z@&8$2DdydV1vD$KcDS5i}-wU0JtB3#^165OM%q3>Y zQH*Hh4dXZ@o;#X;DtwJat`4dAuepB*^$T#nznTBL}l7+t51^_kRJP~AX{h-2|gYvLT0 z$=VKma68s1O0lT>*=99zZ`d7Ui>)Hbfe$2>lCe{O*)YlLfxzVbjd`y?yb03!qg+9~ zrH;}Sc8h?>#06e*PTj|j*zL`F3#s~zb)K@k=#!;G1EWW0Yjm@=S)_+0opFu0bHL|{ z=lULlrdw$@7CQZqo8c}?i@Rn3lsSz|v9|?*Qay3U%C+HZ8fsp~SvH=eM(JCkS6qSXiReTG^+!mfk6!#BHl0?QAaY3CRQuXEl@R{bJScwY@!6VriNQ+DP$$ zQGX*4PER?`>3eTV-5tp1ftpw6GLx+WBz(UVRgqjqIE1xIWUM;^VZ&+$J0 z0OCIe?_eY!_^To|;EryWJ-&5~?VTE-{-ch5KiI)-_@S+U(Sr06^;sD;!*1iknsgvR@~?N%6UZR9udKP=Ha z6F}IWDI)aqp0z7@)Wq8BaLH42#PQOsXA-Hajfa~5_rY$CrCoTo7@7x76Z2#&pv?GN#vCF zHbWd?yAK#R=eM;fPaVc6T*dJB*HD=^q*AnKCVh3Ehqe$Ed2BqSWnJ zWQ^m}`p^oXU@xwC9q9P>BZ>?NQO`cUlmUWx+D1+TLd#+0~c8RR-qWCqW(5&Dn&QaA0{{np3YfE1_x zSw5?_lm7sR8TA=TZKhC22P8H|DYu{V05Ox0NyPvdjP5wV8?lmbIi)J?ZQGa1amH!2 zGE1GHkbkm2$F)g^PP(`w5tEb7NhkSG0$OB2`G!^V$FZaMouPIqJ6N80;MI&BHFY5K zvc-nr;~afE=B%wcPSBQnnPrm)81(H-bY|met}r1P^Bip%{&hc0(q*`0l4+jbAD7kp z{{VF5Yf|?5W|?YcnH6D-fLVcHGH^H*Uw72j*381f*{20m?@|&m^3TgYlm?PqdUS;D zhs9Sa0e4Wj`uaEAR1HGRS!xy%Mq`dr+k(ct5};>~Kt~mGr{2Bhmj%;d8dVHYI}UM- z_o|Mpm0-ECkwFdT0k?fA$Z1x@x4sh_w`?o;r9flmLx4y0BkxkREh^gLHCt>(>nNRK zKo<@Do_z*$>VI0r4-q4X0vJ1z(sFsp_4)kj%EMEfKZqIRjt}D}k?)iKyHqdKm3j(- zXv7gmDO|(jrcWWf#~JqL-kQ^{rqgAf=E$s5rcmzWZ11-p<%+B`7LmM1WSFy^z;`>( zAI_X>ml3daNdtL_@0Rr^{?sr!8g)gb^|RUE*`nO6Z8T1!d}ADp9_mIv?^wI*&;9YL zT-wUvI+j@HpW`AD=D}oXG2H-@lfgh7(t!=fCR68aB171^XUCPiyJha7253sC-Zw!YS7lq(c0YFTwKD4 zuN3|s;zD6NA1+VdwO8Eejx@;Pw2=&HKa8?Rmi`+Y5)r6aLm(=@4ns!69Qn8+ zg^r~)zMBk-DS|OLQiw9AjQv3QRXSSWveV?h(j=e#!N-2h{sy90-;0ask?q88s0y%PNgI@$(dqYbco8GV0GO}>OqFt=pDqs# zP?}F0O%67vvo3A!7F8@!;{dQeCIH~~&umoa-H~?ZE9~5X^s0zsj4sHfj#ih%c14V< zCU)>a@AdVktQ5lxQM_g*R7}Rvl)>BBucy+n=D`@;vA*|#d@M`OtC^Z8WB z-wawd80Lrgn>+Sl8nPsj;x{b6#5*6#c<1X?sW8}z$b>FPWdI+)y-&~<3s|m{T(cPwi4yQZ zIXry1tKmF3rsv;k_4g>8a$pu6=$qmt6p2Q54od7Ia9_%gMxjy=M`NRV}dw?VmOy-{XMhX*11X%=bI~pWh$;H zdifEexQEH+l4ZjT0g~Oo=hmZvBS&`=ENdK+yP;0|TRq2Y^Yf(~M-h?6$iOUFh6Vu1 zKcy46_<5y6pADG~@!Fbl&t-MHk>Wb25tSQ!FhCxsx#!lEItZ<9VQ{e-CUy$R zju`+1sOKMEO%Drp=I*E#WT`<_i)KC(vMEDrDgnC#0rd`d}nb#4Tw zoyUQIJNi_2lsd?YfU8RGJVgUL$vE0L_o?gaNzf!`*B(hEX(VV{EX|Xguh>-5ZEjZUf=pMCzPN}C(#U3!HlowA(lZBT!jcQ0RTnc)c$7w09c`IZz$E)X5kj%W0Rf%EsSUD*a~*xVj7#a z&F$i=liLRXXFbnhPh=L^4_43ZOST1hk}M4Ja5>}dJJc}w4kF4mtXX31&T=~sPDMSe z&9__eAp|@{3vrNG=LG$S@~X*8IWoHfWy>6U_?YkZqjo)zi^-&t($&-lv!aQQRJb5-Nv5mQA?ic6jSowA-B&OEv5ql4*tNxR>nRSaf;+oM( zN5{l|Kn!i2+4*{Q=8nL0Yb#WPqa?VszImsP292PQv?F*JB^$B&`h!&(PM3FSeQAE_ zZ{Vz=M`d`~m}B2L6g16Y^xN$&1T1XtZKg+1z^P(5lLQb*s(mi*N9ri_`AmKuckdAm z+$Q18RZnt5sQ0(`dWFw|v%u>dOdpTSy8wkC_C4uIXJ`99h#OHIQ!$l=e9up4HpG3vMNw@W${e+QcW+uF^wnn{$hG89Z>_ zWBjWdCYP!$i8pq3n#@l>i1D(P+<`#{d}JKwu|2U}GodBZ*P(B%wCfS3xx9Dq9rv;Q z*$hD=I3NL&&lQ)gf8*I2I(Ks2oa3QxudF`~`m49brqPB{bWr($gB^X$NSa5)lK@BcDin(r9}*SeeLL2+j6zg@r;X%f#Qr1xW+g* z$Ef0_*y}pTK+@UUU6-7^^C8}QV})V3k-;H*`egB3f1+;M$EdBXZMDr>#YU?gqg$_< z2?II8FPq8;7$+QNuR4FLdY0zttfh}g)nHq{hd&V_#dd+4ZcYm1@yBv;P@V}Zw|^p0 zl66S*Z&zHgho@i(mzH>?RAG#j+Au-w`LR^D*3-%^V4l&%$PA`8Aom#qzpiUD__fs< z_KDX0KW$|WpDmNk;XrO;W-GVA+(-;PUmpBb)%RCv>oB?2w3wCKY;SjMAydf;xebq8 zcP6UKA1r;y;%!;Y?c%tD@h48#;JJs*sEEjyBWQ{hQ;^(~xv}!&zH0v0W&Vc^+^r*A zFuI;djjKN)u-})_a!DsVX05u~T^m)n(_z&lfZ4p$M)O`dk7*JpRV+CNf(O1vX+2@5 zbl#Px!)z~Q3v)2CvW^Lqu#!w1i8Hl|?aAMq0yErI?t0oy6u8lkywmOGo;H0oWt9q; zUN>R^^uo8Med>#>p3_XaOFb#0ftvV3d4y3c$nkGwaz=5MBOhwV>N=lMX?<6zSzie! zon`SJ-uz|AK4m!s6(lhHryj!TL^0)n3^}%%Vr0C2tx>Sl?=$talz2M;r|L zX0-S(9XUOU)YIV`jXrz3{U@VuKtRyg-9hD#03u2iGCfW>tsbACTI>2Ar>5O_-wI)l zM=DCPylf>ygYL*j8Q`AP$huz-={csNZOvB@|(IoJDHI?K{sGdM(99^y_%fB9?0dCR9n zgHW?zuE7g$z$a+uzst3H1O2LR8tq;xD&Z`wC!Q;mGq6x2 zP0HYIm)j{cafGn$U& zQHztKo7w6&R^W&(t|JTR9OLvk73d9W^4=f8zJb%Fnk&ZFl*Yjo6)+sMx!M5?t+7cT z-p@Rqd8mFFG3&dX6HB?C3kaYxo4e%=hExnx?Dr%9Yi-tAJ;s62Uxiv_(?K=OvuX@{ z5?x#|Rt0zj@Y$^MoMhuq-{e}OB$;iLD$Q)l zPm5!zLwpJK1vqv4jMTn>>D!w=qti88;~pZo@k+RnW%B2cHse0H&0;V77Pqu!(;|jv zj5(Gaz$xCt7|9qo_sw*F_ISCt)Vj*=N^M&CEq)4FQqau)8%m?fan1+?obmVVQJt(# zhgChu8iY5Gb0n{4D-FSSM!uwE0G+_*pgqiX?jxME5B-^j)A}0d+IFR3efV?KJxh0> zo2%PBTHXt3uO)vHOLi$5sF6bQ7u0jkNcV{!R_I!L&3GGK((a|VjLnFnza7{V3o;%T zB$K#gA70f|rqrpT$Ts7*V-lALz!4(0eW_B)v5d1SsP$uk{Oat*(@x1Ai>&n8UyX#v zs@uzF;voToKMaI7mprM*sI0u2b=IpZ!uA$+E^DH%ovb<@w4ymL06DR&-zq`i5g>; zY!RGi=S?t;BSt69o=G$S*xQa;o`G>8$YGJjMIq*mLxJi&1r(PgxFJdM`td*#P~l zXCL{EH+Mho$c;*<_v86cJtk5}Zg=5>ZYT1u%ifl{UDU;VIMvDIoy6n$R)0F_>i_#shL1B?^?R1S=lzfN3`4a;C~Fb>iFb#ZOe7EyCMZY25-@ifMv zsa+ko|gs}*@2M6A+d{SC6SpHyZ0eSxb<8Fs=CV&2;Obv#Geqg_otx2Cnk^GHnNJKH0%^s6qAd|F-(Hu&I@PxnPqX<3g}uwlU$3yyj3iVzyU zw2}V+U|x~sz>65;_=R(Hc6D;ZvuC>;*FoxX8>jACP+aUxobr6b*17u6gNR^2N%q`- zohJ7Kp>+I?bQ={I1HgicyvS-7FcS13MJ9foQ>7y!Wwt?eq!B`N>kK-hF zs?M}`TYDlEMkaO~`ruG9jU**ZYV5#sw>YPEiBmB!QbO*HK^~p{e2o1~S2TgH^cQ1ppl&8^3)ieqnW&;J4nVz#}zJVl4(DB!LYdJ zh5lW=2Q&zlx}4GFPw!(8c5V(a$PM3|RGYiwaJoFop|(80B#+Nv2_$_us*wY;p9O~h z00ozCzXX4cJ31B9tdW$5-*LG}?Umw_8ZT|{Ba+~9tv&}6sV<}Yuj}+Q+_oXC&w64@|OVBfIEC=3s_52Zwrbz*jP z9ou#$5%27^VQC0x%+HrnQa!9V#^e0zyHCAVa~gQjrqVn%0IB1;`ihfjc159up(Ez4qUtdjw{LRLM_%8$-e0giiv&MFm;QOPat>xm|qA=t&+upDFU zQ(dEy+T0|OI3dF*Jg?>8gH_VnLoK4PKqL^WZW#wVdGF8bP@G}Ad|5b3PLkx=TuosG zrG&PZQp}eq?#kIa7_cM`J7v34mNJ*}NYOA1PzNy(4macn_3zmG*Etbg+esO>m6|N% z1{paAp4@tUYjtm^G6siy{u$XLMx?Ufo(?{~)lO*CrzO3jc-_V+_GOi<(>=_oD{fHa zDe$(OVSk8l-OtXhI(FhKrn(9kj}4ThiL~*@(2tm^SR}VTc;a-Kqzxm9OCcD>N}tMj z0wotX+qjzZ-#{661*tr|tL zDC1r2iCAETVgkvI-M9n!WYQd=jiXgb6u#rZRUoJYd!F6txu1HIAYG#^wHFFIlYl<- zrIIPMx8Rg<$)w)H$k?@I&Rs1?Z!l~S>FPK?ZYq7I$nRW77#QB6iOI(7;C#N7SrcxC zcH<3h{D0<)h|3yFM2c+o;fgP-j=$E`W3s;l5(K$`umwhRLrTgd_K0^E-C`0Lm&s?i_F8)47;R=? z(+Pm=RAX_dGD^;JKntD#>?jjpl&k(vDvwj#(Ib!uiz7e9>S|`20Dn7xW69u;&GPzl zO45?mt}X@Kh9!;%bio62kIFgs`DD<+5o5Gz2sr^yb6S|R>#N?Jv5!xIt|o?QOz^-$ z%OqoHQ@6VegV-EZRjUJaG+QvKgS+0XR((6dXm7lGWK+Hw?btJ*BxGX)Jb-(TUwU9_ zKV@IfsOk3_B+*;Ikd%MFFWT-npRV9b91CPBq zadi|O2Nmv{wk!B<6=yC3We6d61CfqMCj%vD?Vz+?h}2j>!)4?|EbI==%z)v&Mga5_ zLr;?9@bcxX;WEu}btGaq$zio5$UJvGnf9vo`I8{oYjUE;cO)hWnqdi>PME+!BRR(^ zf0b-Hf2s9@ZrX$>`n{YCV|Bc@Rdiy6y)^LSY%7+&KYn}s#@ z^Q~|7YuW8mC$_kTF)GOf>?4;92PoOW$IlgKplW)oy?LqX(j6x51$K^U5IV39Gm=*- zxaCj%B>d~1@y{EUy|y)}Mrmm?ItND?b^8nLGpKB?gu1L3rWFjVh^$E)TL;wS;~5oC zYtuTVjSyFDtB4v+FR+Cek#Qa3%J@Z6U({Lyg;DfZZ39YACj}WMm@&9f&)KZG;ow9QMsQsai{?NBC}+DiTX=KI7sLN=6Uni~gU~ddp9PP}LJfk`g4hkzo#(A+iWC;+%nP)G=MR#X&JaNbxXk^*sAn?h^<2~!hkl0*Z>KdKY%EhhXTbGVD46y$B zcPIk`Xdka8y+NY%!ak@=+|Tf?lAX%iA7PB(Zu{0gw;qQCjTj}VNwbFjEz5nYbZ0}u zBvZVw*~v7ivA4(jvi+<9FH!jIo9Hw2c`#z4nFHaRqD38ML`P2vg49K7V$RsPklC=g^FC zkaNKxfHSBZGVn?q9C}wl=q|A89U4{At#yY>OP0)W-lvNiNPfJ4M+A<0QJybNpvBEI zsjiU~nLHP1qZO9^P*oL$y5<}c=8zTj81IkDO=ddI{(Fv<{4u@N9i^U28@VIE z++B=l3vqzBz&@blp82g+hg@snB#!?8PqUT=Qy5qoWc zVAQmiw6(IZCfYlF(X>k_8^KUEjyCq}2+wg?Ft6Vn!du|c z$v1dtq(I=|Sbp$ur_|*7)jq4G=)F^-THjtc(`85;__1lEEzIj8t48jCZ2%F5CmH6h z`ZD9EZ@*<78&_c^nyh{V?4n|*+qSXqjFX+C%rFlXsOg&v-7`WDRdwsWQREfVR4a=XRXEWwSU-@Q(JdA?^Setlv*_3?)8P_Hzwtv7NYmXi8cl# zVYwa72JUru&(=y9-wce5`I^oQ^&=cnx~uWqlN@*AKbP2N#5kUqOmpOz~Fu4{UXb~YB8z@Elg zY{XE>G)5=zkmfg2*yQeA-ngxYK`;@A@pXF~W_yD-P@8*| zwYs%sKsUsU`@AqqXM@i^rmD3IXl-Ug6fwkDEQMpq2uSP+B-c*2=-m?IUAeduCG$PA zO!jdGv-oLD>lq5mfK@>pfw#@gQ}vhO-NYSJXd6Zj1vQ;~qAs8T)q z9%^uDG_SB^lap=wvz++yI6)c~#b5r*xYevgu|T%B$U-t;Mw5CBf^xDS(BqsOX3)G5 zE+U9yw+Y|%rCr@M{0f&6DoP2CIUJ8M;{rzX7~mh*j@=e>(lM`XIdZ;cb--^n04AP? zNV=7P5vft?xo`5Va$6<1!$L%$0LoL9IOjR+epItNczc2l+4CRrr(s0|Jv!w)aB;N>^!KZQI;?~i87H=L=~?Xv zhMx2ue{!e!nz|4B!~?ePLGm<&XEk!eU9}_-L4^6g>a8x~T!wBKoZw=!T|jfLL9jC% zM%YkK0lBRkv3WsNI0W+CQvqrh#BJQ;7~FG;#NV=}p>{}L`OnLL)N5fOVC0qn5!pxh zny(SrLeDXRH=W&yJ9jZT`Szgz$4Nfe?wbvRB9KD&P29=`QRFD=LhINljB31v7?dHM1v#FMNZuX3((rb#yB1!I*X1bm3}qm9X2XTM>Z^j5v2 z=sja#x0;2ZX{Lwb67t-HoCiOI$dcKy^K9RRsv{F|wF4@-uC--^D z$GYaSHQ;ViOSh01OiByfAw$S;;r{{Rr21GjMZ`hS%~ zmdulAEpwN0mubGJBZIGpRH4q9?wZ^C%V*6iDFlWWQy#;w<(WlQ<2Bd>sA)-7W!Dg zMI^?=t9gh!xFg#m(yHwqMsGS5QhdKLinX`7c@d%A8>nzdU<)VEj(dC6GoG1GUvya* zDJbad$yQ{~do#`e{rYWWf62!@cNqk6+lEHXI<)O`EY+Ki;+yHQt~F;Qkisrj1Q zbA?eGo;W1rU<2u#)hu!<+brse9Sfb!oMbC~`--~iJelnRt21G+6+<7)zV%Z%7-W#R zZx&74Bo4q5*de=iBk5WiNjLBP6{hxIUBvii-Wk-EDw8^{QyBo9A9MBfrM6Z%41uE$ zBC>`}xl)P9Uik0do+&RWc6L$W26G|95_c1vJG6&!bnZ)IC(G-K zfY-v+qmh>`vZDoKf=1Ep+t!nDsT+c_x`Zxp2Rsa8?s%(I6mGqW+?=Y(Q@&E*j{g7; zH~#=orP;J!wWe6mpA5*VK)_H~mM8l;>^*zpiW6;&>Ns2L!o&>1gE;>1^{UL7plDG;6b|k4 z1p9jTs|`{lZAB&C2~ZiM11FE<2h7!V{n(6?3}C#uY({uLR`vP}P#h6ux{(VDg;|}B zaKL3x+xk;e-4q)Yd_3^TjCTF%SXfixnm{)hm6+{2LhU&fTP#vfcO-BrZ#L`>*vBTN zTb18oiFbpUKQaDwVP{|&H{B^1!0qyd8S@U+HrhyJ@>`I0fJ%-rnmdPB zLKY5Ku;E5=MGR)f4XD!jibf=9pUNI~iMDv2~tk{wj1lpHW&p5xn!a@p<$+;ORM5pcV6l_wps zMAp%wyA~@V1}X^PkMsVNJ8flh$Q60>a z2~sWS9Fi~&bGIJis;*{u4Dc+Dtj*yP(gIY0gWJ>m>XckbYh@z9g8!3jNsY{mz-dUsBS#bCM`UavK!<-tQ5&J0R~9&$$nk;gQ* zRxzH0y`Ct#l1(%RyK8mu$82TP7Wx2lR$ql3M|+{_&l8d(x`m--e!*XXocit{`<&H> zOeUvksob`q6mIfcNFupd#^O+Ck~kwc?m6R{q5M0zlJ{M|X&O^3T6Xmg#hA9`&wkvK z!0k|)Qclq*y)973;oZ_$bq$@O-Co*WKAsKgIgMu;Nzcst*Zl}D}GJ zeDKRH+adkeATYrVyMQ?dHP3WiI!LvfYlto_Z$X$jSSHI1kaM(vNZ{mwRy`jXUcS(6 z?h%kps;*R_0|r5l>r`gL8Q-aPJdGZh>N|@)XI1Irr?W^Smvg4m<@2TqA8+MXy4}v3 zXK|)lY7)9jb9b9ifRbD*4^Lpn*?ZcVUbIc%HtsZ`8_?VS6kSsbr(uY z6i(7x-^V5yn`lDYc_83^VaLt1z=G=6j6=ia?Em;Fa`tn0dMhllX-TFLNMZjqH{j$*2;Bqc~HtUZ7#a4Qe4 zTU*)4&D7lwVC+c^abzD)VT0ykQ+!7ro>811rF5|7(zG))@!y#kpTlS)_`932;&{yB?Zji}w0*N%KgUfR=%icBRb)#&mZH}o402qvg^)4GB^2b3UNM83g${?(`kllw zX`1Eki8?wjhks~}xn>wo9^CRs{?hh5;g80f;2R^?IA74$xjJ^{ z8@&kuMoH4o46HVv`CK>58u2Eh3rl%-adS1SmlBqmQD{p5<+4US7d!)A(df5^ew?+L zB=Hc~WDoxU)rvaH@+bAdUKFZL9&h|%Is7*0SCS-(M}d`n*%mYa{W&$o;u~$DKH-mV zopry(D|e6Zo+VYuM^xvgCryjyy|+^eZoIvmth1;P$T z92GsP=TE)6)3i%F+beFk;I+21(ulp)BV0i~Fyr~1_?0&SL z$LR|}qQWFC3cQj8AP^gBf_rzyE0G$9R-(SPIui5XwlASNJZqgdr^$Mjw^z3?Gh3FK zW1ng`QU(gK0OJRo99HgqKUcAr#khu2shCnJ|CFPq- zae1cQ$8RmP8}__AW>TcS;mN_s^z=Ec_N#2#m7TBbySq1m^*bw~>Z=)O;7yN~LA8!B zKo|og0mX7|kF~wlI=<6Qx`GD+CRVqS)-_haEwzRR@pGKydK&5WT^$~kzUNQ0z0=l6 zNh=%pkjc+*4;#DS=dm@jshn}o+@lO-DEk@?qtbpSN7cSE)h9%-xsuK(Jnx;XL6OzG z*=@T5k3y_HYcZmDaNFq@MIdXtC@f=+Ic}x5Xv1YfpG*vXQvqQMfLLU9IL{vVsc>IOX=<=vTis6r7j~7@N(L}Pah?d|9A}JTv#h&PWzG)w zIRxaD9{Z{d#EuscfLJ&<#!q566(oSgw;Yh)#A?Suz0>r_=bn8+2qbpK#RZ%%&;ofi z-IJtpkRnNiq!LdYtGPhTfPzjr?@TMGi)nA+#W#7Y!>a1xY~`9uXrabr1#;x&h#X*W zDRHP0fC8urcmp2PARE1xb(O-XJi^|eBkx&7-I&}f6<0!A91cgVYi`86Mf3AaR|chd3ng4gsfi$Wwe92vJ(?Rr2{`<@Y|+{;O`*tgy6e69qX{ zDo;N9PY31Rs@ne6HzlTr9OQ1vIUTSnB$~dQFqXEr5JWie$|{m^$>V|An6GlcoDJQ( z8hRPLDV5c`1IQWlsutEzk|DO>db`stt6Vp&+vUNy9`HS2w zqb1kHYL{_~7%{n~w|Qe`V0Nz1IV1)?-cwjbIc6l}lTSse-q>161*OAB6zs1m?F2DU zLY{rHX>c5u*WEz@nr{Z!j~SVQsZ>=NIN){_23>mPvLlWt&OjLjzsOZ0Tr{p;S1%#X zNu>w#8e%5RsNKw}USpC+ zpq|_e)R--9Zc{e)w-TrsVv#Wb0m&yFs?c=+wivaN7y#oo)`*1v0Olh<&YRRag64a6 zNvFG!SY!9IkU9S7;+2k>R56}0f(9s$D1P*f;E{p|$E6ydDf!b7zfnc%XlIHn^FRt7 zhtPMZY}>Nl=QSom1U&x$5yeK&CqA@<&cXOSuB_T~>6aO1vtxFop7ALBzh*i6*G5H_ zL@~#`t`ap*FL5NTl6dsv{Hx9VEvdeftXtioBt+o4kK;`Fm+mXN+-TZPvodOvTgf%k zTlld}6!J#ndu9+eFz1qfwaMzSC{I^rZ^1Vx*K|ng4xZC`isUY-V+G0?L}@5v4A4Y? zi66utoaY!)F~xIjU-0Wtw23Y{es79}kiWuR#vr=elj?YEfJngvj&WUsQ?P@lHGlU_ zW{ykSdl*8P$#LPk9mSaP9FR^ABw>eqQF$kwU7|-aPn0a6?T$VV&=Ng6=h)S8&65kF zQiO7DdEVz&yS1K3u2%BS_9gJzHV(3=AHqrVW9wCos?B*K!0vn}ak$CmBj@rzI`lrJ zq3N34q!H_J3%C{;Bo8i4#C~k46AT<<_;HRsaf;^px8a7NXCybe2>9KiIZci7s$4|P z*$+Eh=Zs_?+*bU3WF@q=GfStGcaG*heLib=FPTdeK$?N;6GZ?yC=M;y?Q@r}$v@;7HJd;F?Bq!C@iB+#^%5sU%?kt!38 zLV|q2=Yzo=j&qF*Wo?yRx}pRuR{V^Rz8N_Cf1Midj24bY1(=egWn0XD%CDbEyt1)d ziQqbhmcw_&S~!$jk~zWdr_hD~AJEl2h^rKa8IpL_vAqs6$vG-{9r5*}g}8FZp}uYL zrO5D)Cw4rif&O)5uNLK4)f8<~HufhckyQl)Ng9#mEJu8f!}O(F$Kkh$5D41=0P+W~ zAFW1PCQ3V+WqiSEV^G;HKly3st&3c}!jfNTRpaOWLa3s@b1W+~B_$-1!+?CeAJo>r zOGze-Bq_MYyUU@-&M~z68mlu(GH=n7#G7$T)e!9El3SVLAxa|!PB6zlp2yRlooae! zcQ+R?i?YDSNblO6`h6jn;(3* zELZ{`ou|$1j18ySvPs2cdOf~n{%4J9_c^yxIykhEA965q8BRe59^LAh9C$mBd3o$I zduO-Wt@?-o@XDhA2LLJCfyW;zsgwg8f+a(`SwISKz1(9aw#yoKC+++cM8 zIWa}t;AG;gL`!c0cms(dB}2H}P6+28e$?1P*76SS;Xx(&$%%WPLr+Lk!gX+=8JUU6 z0|XCV`QoD4BuS8;0!_t<@GiMylfgLtl(?2#d79=?wiS5@85w=dNWdRn=Ag>UB1w`0 zcoQ%Kfs&;E05i=!e}1vtvfV`)5`~r|*bf^| z+x%-vG`ZnH;av$M!17K%qYi&u(x=p5($Gn%;?Y9z7={mzMaO^8RFXs+GB2d+Rtfw2 zXEBfBLAZT*swi)~JHqkXp$j83ke+54;2iKVj@YZu_l{{E;WWu^qKZbznt6B1f9V~Q z?VqhdTr@K_^70T%vmCKMGwV*mhHdPcHDMzt4BNJ^ApL#mYXdB^zR)~RW61-Gov`Gd zN3BJj>jIq)}jIG@k+@Opapp?&IfN# zwrLtf@io@TFj8dN-TkqT_3uhZ+BMV1j1)#&hf)FVf1hu?K(n{_yQ^5IaSU=XLip@6 z{{VUz7wupkCy)OC7_6Jnkf%MDIrpiWf<}!Lx`n$R8U>8Cv*W@F0M6D0PdWDOP1#${ zEaZ-P%-fa3W<}k%2LxxmXsj$mwpJ0!sFAI*NM!u08jvz~eY;g!kt#EALjvBLn``K% zX3k@pGj83z8zp@|wO1bz2r2Q=vPeHK#3o0}4mdpa4&}hMRdbO6C(S*4(hk8<*j&cs zAUos*cIW%Uk4k(2nYq(0?JWNQ;$!ghI>rG!l2;&)m0TNwle8#_ACVv>Se?KVmd|YW z9je!;roGhcEfRZ2{nVhW@#0AR2Mjacj^?ZGto%EjjtJq7eF0EkH|?PWW%LX`k>fKEX*m(lzyJu=zkMp-vJ*=aW`VNMrd?di$SdWiP% z#ee&jR${=mKfIY?_Bp7yr^wT0+6U?OyoPzAy|VD#Tq5E~&JJ;&<3B37>4AM`u4#7= zYRP}5d}LBii!pPwI48*2Ac6Gsu0vyYG&c&7+{mMNQj9XEG!fsd?;>&WJm)n zf$^2+l6V-$Imf1Jm)&YAx~00aAYT=fI3M5RpVp`Ay3~7WZf}#`Ycx6efwr&k;SJ&G2V_98K@vhFs z=-JxoH?!Hh4bEm%F1f}+kbj@@qx@QuTU}34Snekg$kQas@0_S*0AtX3LH__OS0-%+ z<58JjC(AC-pnGRL)bZhtNXA(`2PwF=pn6|Gu<72gu@{zFeWl!S$oY|5z@FZ3;#LFr z_|G{9xXp6^0L7^0)OEzQzVX)5C=6Dx#1QUS*eG^99F@=WsK0_;K`xQ_fq9om>~5}1 zR|*%*L%suN*J&JkZf|Ew#!kM<8s6 z8yFGC83&Aa6?a_IjjmHg9XfYU+~;46JsmEU(ETuFxl7|{Wm)5ium)mWh58lyjMoIW zmJNuLLhb=1?O>;$V~&3H=^w|GHoYHZ98yfNNq2{d`N$Em1RuYqE6o6H1b4x!x)1dJ zY=>3&%R5_pD}p08J`0nN->wJi+P57qrF9a`YPtlH+{&)Nh&E2Hm>235fz5Mi zCYl#f6ATf^Zbe#YnzLzgTj~*{kzAyiSGSPH;{*}N?ma6+(`#a=?DsuO_;Wq=pHST$ zOG#TzkbZFwfJojzP^;w6VsY>3T)*+{vNT>!NRZ)R6{bP5sQ%TgGLU z#`+S)S3F_I1ZUgmhaJGum!ZCuJ1vbIh}eR&3{>vH&&Bw5qJ!)AHM@Gs%lt={Tb(e4B7 zh@RlK;7Ix6vpPnxtLb<5>!Ni%){xMbWw&ON!rBPu)kl0|6}A5WXUixrwf$Si&TZf~ z2yve>lm2yxn?lwtZZ%o&ba!ZHiNs~lsg&h^FCmJNo_QQsLA3HsKVv%lF@F=MYu$OR zXgxF0w^vrWe!n)WYct#_k7;&EwxNxq0QO&)HF42hXQy?hzM41e9Y;;n%w}iY>gb37 z&v2{jCV3ZFJTg*7y|k@@_{SL$=0@UF{8F*+Z!)MT-_XN3`%uHQCs{Hj}P zm(t*dia+`j{PR@^rJNJ%QdMw%)g*|wY>?MiGi1v=jB(p{AIh5|wstkUXvRGzAF9 z3-+Tq=NxfL#|xj87#VDH+r0op1O@HQCRQ%E1e%m>*A44}X+k9km>isDl0$4}H6t1C zigj1WPu7%1AGf78(y0MrW@i2`DZu?|M0gxNpIQKAxTJzk(tBi4o(U(g8K7fRHs%U3 zS-@7BKUb4c#z^x9PKKba!vqJ>&`GZtod<8Jym6}o2t4tUlnFzH+Ql= zpJy+IyRHzA2?h=y8QYVQ>*-0J^4{H6dzn%wWR<38bAVMiP(AtE{)KX`uj|Nl9a{eY zP}1#~OEiK|ldkatk;-H8g$D-RAxH36MDnXfDNL*z1 z@A9pky`HZu>$WIjZ%_2RtskaJQQ+l4oNsQwM?O9=_ zIch7@`J&0&$8Gxm00%wlc@bLMcnlewZN_uOXYMZ@-zwQ+!LXPe&&z?_)!$XBmA8@5 zy2R2sRqjAj$KIe_TCKdz0xE$Vh9%l@k&Nf$d9JT!VqJ=>t6AgRD>XwKa^mfUtaV# zX@cbo)c{iq5;!9#Ki)N68f=LWcxM3t12`L32cKF)YEo)fN|B+KH6*hr+KKf40KFWu zD%#I9IG@5HN}=GB^Y!~ua&7E}l1p(iNcr%s;oQielZ+~iV1Gb4s5kS)YWr@t+)hSz zX9zRM$@TkFHycz0?t(hX5w#Ba#I*>csD|EHwMc zZ*6V_g-Z}sBR~``Rfa#MS=sc|a^5}0rgJQ=Ss)MT=ntu^jij-xGAy5zk?ER{x0g0^ z?J~!697hV00_u6l$Ef$<)YT9=jkbklG-a7uIU_g^6KpCm?lJu8EVIXAl1uUSve^vb z=Q~*A84AE1$DY{q?^Iv!+>u#29X%HAQ;fTAix}kX?tYoa^sIf<^IqI6)5s-a*!-X< z7#sy051^?x=qmL!Jww&WsiIqH)|uD|6Hm)$9N`BZoz8yMm6h&qCKKH}lglRPiE&d{hh?}EbRzT%)mePNIZT1RU*O!kr|5R!(d>Ja5<c3ymLUZA@LG6e&Zk=*(c;b&X~Wmc2otIbGtE7 z=t%YcRV88FqfH&WEQ;j5<~hj7DggJusah*F&7o_Ua?0B`zwuxJ{Hgm0YAD@p;V76u zgLAnf(xa-2r@4($6+(@ySCgLSinhD7GALA#s*}jcBlM+Au}Z-qjKz$SF^^IJ=bV3q zItvkGWRv1INtok9v46F=oc{nyo3CmzuT0ok`H>0@>UiwD3WH*;6|KWCWc;U}VY?&0 z&YRX^iF8dIBLOs!?vMlDxCGQBl`8t&lpD8yTO&LmXML-Tmd8Iz)O5bA?`!)u;qs#< z)rsX;a#Q}3{EbjsNT%giARiE5{i!xn8&hv0s)EdbDd5I;G*aghZ&#;+Z_5FchAC zx$RF?I%2Ec2(zBiWsz;K=CGND8av1Yv9=HP&}4nquC%>h!f=-sQA$UZWwk>rO@rSn zl0M?8q`uHWXm0ful(x_d!dVcHpXS9%pGk%&BDl1Y<^+E{Q(MR+N9Ve>K?fs|o;|5* zPmws4-A0D{s4hMVBk+u|JSz}8cM<^y+qvVv9jYbSowX>EJ5w4G5@k`l%yY;+!NpkJ z!Kk&wMr4}%a&Kk~*^*Tt9C91VfMlOh>rUHhk#H`qZ!Kp+cAJQV>*&ardo_j;(PFA%j7C z3wL{F@xJ9aar#zoOVNVrtux%Ctd|QQ5QZB-aKthk5!imTt@je5*QCy=HS)(5{P2dj zDJW97;mFS**GrKlnp;>WyYUzXCD8&9Sa3!-H~@X?1)#)X)F(bXh=%3&1v^2^gmQlM zztZJajV@vT0FaDiK-?DrbIA1iRdYnFXQ<_|FzSErd`IBE83Hwog=ITJhkUZ0TXs)y zar$JexA5++oSD|57VtxmtauUhWXc@in3NqiSkA}&`f zaB>IRip$+)S{7<;D)TRc^kc)7yHDV4oYC~P z{H<`(t2rPpK@GQYAa>4A@~=K<8f22+Si~d?dvJUuR>S49*dIbc+n=3!ukhPS{f*OK z4>Vp4!QUj2mK=F-J0D?F>h#7seg!zL+c|IhMaKUC?oOWJ_bOj%?4ALU+BXqD#7QVpzfyZp7M?Ee7u74dv*h{hnvc z2qe>@1H*!7)Ba;Q06rWN%l`mC&*tJ!`#)%UWwp+=jaCgx+fuPuniCU5*vZIbZgG>0 zjy`nN=9yvBmbRDnH@A>I#=N$1+oFxLdC_Eu;AAQ)3>^8rg>ka!mT6ZfOC6{y7x=NS zTy*}S({S|GpKX6-sMr~eo%Oeh({F5po*XvbI6rEv(7K}1_TO5#yU}%B3gbt&OR1j1 z?T+OxvH4?=cgy?pj`dUi(AHnG^*akmq}>ud!>gi_RT@@c31j9tC)9fm)W=N8G@U>A zi4)#QGzp~J?TD7dd7du7@H3A?Q-&zZ99myigyz$g{cQgLqoimbh*9208fg7xq+fx+ zvesiZk~gyMZ!UlHR-O%MZzjL8>Z=(oWLsuuXc$TXBXQfeoL<3Ztd={!3Yv%+KamZCuxSSpaJCRg% z7?fm`Rg;9a-JE;yKG#UH>Z|ga_L||8tai^SStLRmkVpXc=hPq8w^mvgRM_YiP+VMJ zT+Xq0b4e7!>JCGwrFUDIbeiGHLpm?KHOQ=~3AyNo(qskbb zcVr$#W%Lil4xAoas5PAm=tcv*q{8A5c;{&$fakY0DaKi5Q0}7P@DEtmocPLygv>SSKK!87~zh0XC$5~$MD}p&~%=?7k1EG+Fr|M_To3ht0Lif z4xUh|0{RZ%Q`VhXdE!}{O>all*7_Bm-YragG_u8#GNw#tka!2}R~Gu+u8}**f74oy zktDISLVINKVJc2@?cbgaROKZaC8aia<-&k4*({;B^yG|xFXvFCIh=qhSx{9Et}#&) z%^@PaA;u*_qdX5vdmNff0ASLy5 z%|UR?NbSWKI953ICV&z+jGvLEFvijIpg;(tx!_Tg=Un{h07vuvs4wPkY|zeJ{Q#l| z%1_MD0T%)=G0FEd6~nN{xu8(&LafSo92`-i1t1S&Oa)|aIrgILjgHwgf5hKvPyQME z&;pyXgYGEP^PGE8H+A~ZPtJanh8q4;^)zGh$MqCT`A^i){sj9|5Ntntj{H(oU^mFq zjgdFl(g%0?kLf@O{uTRDZZH$L1-R$iy)Pa``%^bZbh}6JkLO4j&v0nIbYz9@e$E$TPThY;ZH)qr+`=a;nzwyt|uffyw*Y|MNX2eWFmHmk!qRKCcDG&eaD~Cbf%W%2fbU%|@g0)u@Rz0y z#e{ZKd~~2&qjHE4c}expbMvO*Hg>`&?PazSMBW)_P&9U&c2xe~&A;tbx}KwPuIO5R zmv?O|+G)C!qF0QV!6jdEw5&NKrb)oSU_GlWrsX)g*%#@kv~&0tTY_!uqR1=*GN~YA z(;lau->qzVd!}9(gqIN!B%Fqkuv;JCKS5WzM7Ea}P`;Nfu!Iv5M;v4XApTRFXXpn# z$*a3tW{P6-9~$JGV2pw654ry6;D0K%SsU3EQbe5|7qW*lg`Q9|`>}ur-?#OtcR##b z+z`x07Cyiar=b34`O;$^9_B0yfLYkE!U5cq+mC+2x$jkV+_yJBv${omOOMLe%DkVH zS?&J-S?Ajw%o1{Yh1Uhi>U}e!Y$Je1ml~|4UG1YklpJ#_cK`#x?s)B-)>gvvspppa zSijWgvzGG7tV3?tL`{q$pzOX;@_mL$sVO!(NTRywfDehK&Eu3KC|hKkyWk(n$Lb3wgXNOVqhB z-E1TNSd{@*0N{e_z{ts|Q}~+dTgu-PajC-o6U@*EwIpHA2#xbRWCAx};Eznx`>rXs zJa2uzL>_F3X`0)AnM2gdWQ|ckV%{o%TWC2`#(gTcQMylvc@fe@@jODuAwa+wC)c-n zv(zTjWw^M9Qn~nV0b`OkbG4YbIU5E~81?6x$6hsp%-gRd)W|1dEM_G7oYdS{lSG;I z39m?w&OaQW+AzCgPxbCu19yW80`Ty$zvCYscwg2hQSD19q@2Z z(w7;Q*H5{(bdov2PcLTY1b(8KXi{6*fej-uED|OMIX$z_@~JN^<>sd)%;>UNF0;?6fQKPk${R%Jdw>_>DCWxZjrm=9N-L$ z{d>~c-8HLwWeOm8OR>jdGwb#rtuQk}(tikoK}7}f_!!6isU{|G09#-%%df8^6}FPn zCsVyfKAEaLVkfq~vo@+TFlfsa66`I;h ziIf7eV2}n0@0@+Cyo@N%^TkTk)V7fX_E|ApKZZ9S&&MMj z#yHItnkf|_gOGANjAQl1LWjmFX=^mdmXXS2jf_~_FnQhI2W~#}a2s|sjEirv zU3}evPcX<8S#c9Bv5Fgr#Eo;}uJ+moJC5&QKi8!}y44yjMs`Bp0~I{+$QU^Ht1Pw5 z1S~4*21l1Af&TzHcVZK5dXp{dq1~5lzME7ptwhuACKpx6?Gf&U=r|q}?-K6d zkUn%Y13Jvex`Ims;gJ!zI2p%3%nC+}xAuqc7$A02jN`i!2Q>~!1h>wUCz-(VvBpPW zbL*Ozx^kS7fD$_%Y6>KrwxSR0=J=@1q=_S`Esx0R!Hxk3>FHWsenxwXls~(SlRT@R z&E-x%Q<|uIM-Z|CNyix*@$}Cl>}u;;k`Su`p=mB`5;kJlSmg4ONIdh5d(>o`dxTp? zD(N>AkSK8ZY-hOsMz1C2Di&`UEy;c1+gr$1^D-JPa?>A&=U)+_5{p;4(gSwfsQU+g#TqXxNw(ghlk) zqX6UF@@lRPH8-kAuN#~Y$av?}gTWPKX&~K~KZpHEELx?$kEysw@3eZAIp?=>Y8qCn9lE0C!fR<|iPth)`Eshbi@mu~jE=0Ox_+_O6@Kn$y`{+RY28xIh~L zc7hK(e@@kxs=?wS>{)a$zYw)c*Xho%d&@<@*A_FD%1MajQ?z&VJpC)qO5-mQG1v}N zu;(8-?VV|Ioj0Dh7KU^}>T?fgI#j-6UFtG8yYu#H(BB zttCGXJg^UCIbYE6{HsS{tVU4{_L-+@3hXxpUj{-wa7O_Bs~0noDgI)dk@FN}lDwQB zYS7VAXQclC3AHYmDRXhALw{p>#chmIe(@DlmjPRrB;@jO+qFsR`)PG;H$qEMY|;MM zv%gk}xY`w!$A-RRAt!Ob_a_y~KL#%(Jx491w+-;KTeC8;<8qO-pXu~9qx?bZ8`!!F zLWT+Bw!cf60az1bTJ4px5ce1$f^*J(b<36sc>8^9Z;n;rt2%Guj5cr7_N#fJrmGy* zZ8UNRbultXSAsme?>)!sSy*7vA42OGp)y!UaRgCGB+-^tRJcISS$nSGv;YA;=(=OC z^$kMS*vGBgMXJdNGFacR0oY^>h5W1zGk|h4O?B5&-P`o+_S&yc!)tA-y2Ez%z@y5l zca5jFetk_*juVWQH?u61lZ&4vE{FJidu=9(CYh;2cB!aCaVy(CM1#qY6?w)Ko=2}Z zuF3eX(U$u6TIg5P$g^8Ck{hTlANPI&f#d*lhIUeM&#$FqI%dPAFD!J6jUQEOU>Em_ z?9nvJSQh6v&jbVMpRI5Dzg1XuPMEy3vzttX)S5tZw^>sYnB*{qcss!b0{MW$NM zbeevHZEZ8E23VMQpPj!bIpYNS)|dUBtz}Qd9-?_HjA694RG0&aNpt{r$ET({RHoCz zv-SPO8&Ykrs%M{H)96h^x9^-(iJJ)LKf{V*+OC_<{{R!{D1YJ)kS2_B?0$lP61~{`=!X$~sYCLgsiBYE51^n0Hv%#J z>L2)@K}su^LGz#xmpJ~<_|q7GId7=`lvw@G)Kc=Je&z!W>S+Pc#sZQ~2LMtKrx|4* zKk%TV&VH0~$+eV}Ba`{aUrK1)sAGvE2LO3;-_n2`RXbbiXu_WkGI$r5o9?hypc z&ihmV6cTtGn%GW^kl0(>329>D?yIC-_Y=&NkX`%Lpyo+~n3j zTD17>K1(Zj#FIMgQ~WWKJx{;LbMmT|TkK8a_c@ilw~b|eGdWKI6@sYmmd7TveLvEd z7nTq4@x7cAy0m1bWsnTyBKPNxP6w@Ox^t#2v{NH9i<`U+?ek@p<&I6n7JMGeFgE&QBL=dw&u?K0O3ou*Rx=vpoOf7M_df1$ z2dVU~h5pW0H#Z$!s|gT6Y-~Sw3Y_!e46!6-+ue>mfX60*P0J4Z}UQ%L?NjDI1KQe|V00Ymt?Y9ls4}4cD zxa#`|)c6Klo0#$y$lDxC*zE_`(>&+gjw@z-ZPt@MDemlr)7nhB4Dm^-NN!k1;al6s z5Lp85EL%AQV3Xg_;N!Jy^$lxG(yboid${6+d04NSMsNNasO)}Re8?5awM|y?`bQz; zPZVNFnDR&VS069*DS*BtFxr6Zh<7Ae?%lF|2m0?vgzno1B>NVfLDZMMQ0;CcT{lHi z4}?xknCxF4nEMU@{$)^JSm}1gEh;w(K=Cdm8)TGwDDJ=O>rt$dbqwKIX9ZpNN+eYwM)g>Fa2y zLc82@;0?S49#!Du*0oxl*3T3JfC&`qaxI-Z@Zw87M#^m)RE9f?JG39We%pZb^#>lK zkU*|;_^tR)b)&qxo{uXvsbW4S9H1oOW&_jEN&5Wjlkjn%@SDrP-^ROXO zr_l0vJ?qn*KdM=E4vA~1*t*YSdmi=5@Kl@?ApG(O`Bix$)U9mELR(Yd@%7%Tpy}N; zYpmNu_A%a-2Fl%V@k|C-tC8kIu#Ye&oO9l}uT^yz*Dum*dsVe`;bc}Nv7C>P*zPOM*ERvr+}lSS1py9$k3X+t@~g1Q z<4lf4y`ujBK*D(*FR#7ct$E%;6NGks&0jD&PanB5s}0W|B*bS?{c) zVtySZD{%~)jsls`c}@uY$&B|kU8O;%-Jn*9jLHC5HwkBskA*M3{l_j$^wnzZd?K11&H+>z#_9+-JYLnQLHr! zSpq)q1Tkkna0>qbI@wt20uS9sD#ZZh#IP;JgAx6xqy!JD_V=nScSeWz+KgIpw}pbq z4BBJ(_Kd^0D#v;Pf4p(q9?x7Q?88Kt8>2O)ytX&+T|)~=;ef-=RQ5UKcB}Yc$S&$K z#FK-b^?#yiS_S>Fnf1s)afgZ}G0U7_f}|3DxW!oAbpD?#CVMSHJ8%X`x^E3g{{YR3 zu|e`z;wz&OstF@YV+m5eGKNxc$Jh_?q`Xi2YE~0M&1y<0!vN9a%yLKfhw1IjPPi8C z@&#xwOkDo}!@l94x6+_m{8_t?$CrGJ&g3d&GGG8cox9Xs*)&SjZr0aNYlvN4_XHb` zM?Rz8tyUtWshO2X!yo_xeg6RMR9BYzq}LoOi!=c3cM1vqxvR8_SxNBOqJ;J>g2(Ah zK$mPsYK$@L6P*3MDyLfu8p9;=Y>;kbiB}=9gN8nXAXT)M@j?_Qh$Zye-eXzLrCFtW zaUoW1vM&RZ#y~#*056>;2$?<1ap|J?#UaFATtAo1jtKoLJeQD-EudpA{rjCxJlu?o z`VJ3oTC~2q52Pdx=^kPcjo|ZuJ-(Gnk)_1)_(;I2v*)<^eJL@Q);4c#X(nY6Tt-U} zR4@TU6(2v%QuI5Ru5|dLx{+m^DJ+NkIpg|@fu~12no93uhgJ=^V1bf5{VFz{6G5yN zQt(8|`$KWLaxgRcb5DRRFXxShqh|<|crorOe8}8q?den(vOmCDz>{Vrk8z1ukVzz* z`(msu<&AoZ>AXmkI_*-&C{6&u_w0W3t7Vq@(%MV!4V6^I2?z`0ByGU&gOm3>(gM5p zGU&v)CS@d!PZ?pwTv_U?;rKyScKJzF?dkp$){}0t*hcq7aHUG{fM?Nx=8gcK&`E#0Y>JVb`sA998Ks)`&PdupZl_~9?;zxQ_rdh0 z>;%sD4+v~q zA2R)k`cfX|Lpe)=66J7roDkl``Vf5>QZH?MMlB!aJdnqdee!*NbsR~RTYJFBM=`lx zSNzAg`-;;S8Agg4lwGn^l94+)Z;C;Ykl8E8Y#&eiQ~G-aJ_nAC4&uRBoRWXFp8o(! zElN9BA=AV%FN-80orJbMyIBD*U{Wu zOT#w6RNxF_XvgbUi5QoXFi$yAilMifSlD<|GUJdBHEVCIY>8gs7n6aryL)5jO2r%c7BMgYLNSnDUzha-4Vh7Y> zp1#wX4Owpz8Fr{tI{;uo$R{26^8Wxjec_(~h_a*G{HiWC36kg2ydI8QQHt60RlS5$-AQ2&hbO{FCUG|Pk$dnD zEXEibR3pS#oT}#louuRCSp75ijRJ?-7_I^1BZ}2JnJuPJ%5fBmdCm^g$JV1ZMI)1> z0y~?DZpra>f|3RdciwYGRbV7 zBS^b^i@Q0_c~S0rpQTene`_?}HLJq1EQ-j519@_H4XioxpPp%U7xCOrEcXGBTDuvd zQb1)n0kQAt_4?F3$r=qZIHuJBc#>S90}65hHL%finJnQjLoD+!V}E?P z651hRNKrg%@B7H|SMCKnPk{;iBJniodV=ChQ{&s)B&f_eQmk8*$C!C}`c<5Fw>SMs zE#|7RJd#}9+DjC0lMoPq~ovhNCnWmn(5?G&zj65d&}KMt{4{1Mgd| zv(PX4+Q&h>vxGqe#Sx9KjiyPD%o(e(``&iXkSAdX}P36MD*%5cLcJg?rnwx0`hj9C$~7JLi<-e8p4LVO}Cp?_{xL@^9FK(m#rK52|aLHJyx8$8|i?AYj5-l&_o| z9#{Ftl-Mrl=JQmRlO+!lXkybIE6;(jO;GTE{<0FjZd)FM&dTM)(GCfOALnXsm z&o#tMn|qI9TGnK_U7F;fL!+PMu2LC-EFIxa~8v z3pN)4UwO9hfiKJx1 zINqQxM;YW2*cm)<2R?n&b;vYcw}Sri*5xK>PR12GhV?n^>vVTejDb(Rd&{BxZiU-WpcDdZ?waXm#jS2p>du7tP{rblwI#tPv zMGUe}BE$$hgURjmsJSJ`(r<#R07y#^IQ2NBtDq;%l24$`U26Rut!YrfE5QWMJcc!j z*fh>Cxyj=g=96jBolSHA_&H!x>okcM^6yPM;7#e|rVLCc5w~N>;8G=>LV>;!$o?#! zOrx+kCPRtB^B+U4!wg0n@s9^%uT_Im|}6rH4&x+L{%x(X|PKslzM`7xg$4;l|>Y z%Y(Z)2z!4*_Kl?}x?B zO90z1Ua5_>dteJ52+{WeJUweA$BzdsWZIqAiBE8?`|gIII-wE3=c&Z1LSLE_*>L= z{V~;%T}vB1z2bZ;+)2a9xq%xO&=)~tAC&edQR1N z<&@3}ZQCvL@DWc0MnA{4f3#{_h{knCU21(mX0hqmXM(^I9%Ki^kZ08Y002JS{{W?D zZM1uq7V%p^cdDtHNnChn$It=Xf$7b3DIm97MS=*L*G`CpL;(1+9AmeC@&5p%Qs&a) zZ7z8lHMW}73&bNlh1yQm!RI*i?epfeOQ^0&19+US-{@|iB4Ll^wnUlFQ&m3#fq zA5%_hHexFTI!&lanf4;cF}x6b-`XwmKKbBQTHB~uFYTo0g8m+M+sH2Jkb zbfV!D*#u`uM(>9W!nV`gWMHxFk$^KrK9h4Ei>7LJ5nj!2sMs~=x}DWrFeEkzILO+= zZqj)K5!$QzPgJ;pmr%1+vvUy&y~~a3zi>PdLBR(Ca91PZ%QoPA_?VfYmxo6?bz81di{{ZmP59wPw+sx+# z;~oD1?@*TVvPn{;SYBIx*wY|^B#6$t!a*S+XHvd&EI%&*5Pb+9_20h%HE_KzYoy$7 ziJ(&PtoRH(=W-vIAO0El z2iMc-=~d1;l?^&Q5of4d*yz^x7q=1H!W={5NZ4J?Aw?Pak^uRd;{O1Se}pjIyq!nV z(8ms>Tle;WVP-haSJ}8cdewhhbwt@kWMd*Ekpm>u@mNLO{=_HJZQtak{eT zn{69Q#pb03!TUz&ZjJz}f(JR3fzAo?_T{RW#%ZKjdHiWrNJ-oQwiG|RkJz#GKhM|-U99&J zUNcxtBi(0fG99p>^$a-;^yK@IQPMPq-Z$gA6P6bhF-8raCrtZ?`_N}%u zC08s**FC?LT}tJ!mjFum1udgKRUYhr#PRG6E;o`pfg&@t>iK|$$}D;Q(e?Y}pFk-s zQT!}!rOA@gCb~oFFe2+5`y6_){{TAA+c7sN>_ZiO=W*|jar~;|LDDaE<-C>~ zY2=m9l0oE*J8{dLD9OOaeQ9&R*99aowB{sv8)ET*2_PPLtKBnBD=W(!Y63>8OpU;C z`MLDLsHvmPXDN#D8XM^4T*CPT0o-FB&$TGQSGd3tZeRXE~R5NyzYp(z>tB*A3W7H%bS^Hk=Pc%0E`X9U}qmnuYyG9 zmT8UJSjxuO9HM8R&zyaECba7nzNcapF0x}~4#|U;P&xUG)X&5F9UAYa<+jyqp_Qb$ z-Y1oeOaP5Z5xDL~Nh_aG-l%jK9^TzAo=bPNorGml;ThsNd@H7R56Vt)j1kW@DixIz z>F#8dTJD{m;KGqc2``-Oz#YzW#dPR@4z&n$OJ|na6L66a8Yrd1q4qiQliMI34n=AI z01gLCByrta-9Y-YAl%YnOhJd`Pj6y-o=0lvWfkBkxY)pfj@6?c1l6*sAY63F=^6hXAPq6vdFV?59yEhVB zMv+ACP*3Q=0_CV=M5N^XOiIt z#R#5NP%^kaxyc=>{%t19P`tc*X__atoJ2zpDZunUT-9BQ8D_hlJ@TTU2*|uC=Nb0w zYMW%JZq{SqB(vpE3;~W@{{WZHo054Xe-W4{11W>s?fmK6h~>MwW+^L2*^UqLKPsCQ zs#@HInkBn29jXwK#yq5gKbOj!Rk{Y~b4*LyOOFmnnjp#lMi$9u&4$CqFU;Sy<^!c{h(b%Nr7QAOp(2gPN6TV;Jfin_H8MFsUS4K$JC&N!HF@j#F; zz#!v*JwWF*pf*t`#9MKm20MK!rpnP|ouxYx;B6^`wC)RooR3=3TiH5*&R85|8qdNf5La#g&T`hc;S2x!#gvH?)rCeZyZ1O&Y54Afsmv4HI$u3)N z9ydoLjt{4P!lT^Sn^>o4OFGDe`8#^1tj&M3ew+$vF1f2d}kro!eRX2Ox^kYTA*S&QK+lmULGt z%y>TEKGmEGT;x+2n!D*)47$`1H~#>b4FezT1{?$T$LUoDHpgSdZ?ry@T_>n?>(=?(|ue97v9D>=r(QwK~ZpXjUvpFxr+_Il0OI*|JCH#dw2O;{j`j)Xj^b4PW5epP1fXVoiwueb3d8wj(daO zAJU-W*94QkO_lz&sOfe(mE>0OTuj!hEMx17 zy1ZRFaUdxL#70C|&O~6kGP>jr{O9jhl3B}RB}AcJTPR zU7nK_)SAR9p9~{bJ}ju{?1(eBDy|90EOI&HoX%BRNfJcS2ok4 zqb@lP>Z}jT2DcH!3N~_2Jeu7Zy4cC3J=y17N*kRsQJTu?+BmMFICUp}2>|yTb~OHn zY}$sir`Sn5M-|NJ3p8p00getT-|;a-U3IG-*)e}Okkxlckb0X)aKM$lhqph*D)fqu zr)~Iep~c0*-d&J;&pF5Fpj8i9=(={3s@g+iV+0EJ`>+>0hhdzYpK9wYrKEkJx0v=H zI>G)R>C;~7mNLU}VFXb?=_B1;ELc181`bK%*i}(m?oNDca=8FH+mJE){ytpSptLj% zq3Mn9YZw0jNUk~iH%5l#q`c~DStc*P!_)1goc%IzD{*bsCeKQ?g2O}AZsUSAg=U>Z z0kAus{{YIRHDZIKMbtOedR%t57xyvSLE<`ZeBhFU1COOpuUTo1;dJOVElu-`S=uvm z^*E}_o~zcb%KrfFO)fC4xeeFvyf(%%0rmOSgjYR9c@q3rP`$D+<|`Xij1RfZP8O9S zxy3hZ*=erLq}j_nFKosT&m7)XjPt{1v8wHNR16x^|IoZ(-BV6|@WC#`pI?H*$FjK4;pd*}~Dm9C=^>>^oCB z+J5E;{Yw@(_8e5)b|D#VR!!7BQ8SiX%Nrm60LO!SFVL~#oi-O*iYsdR_O*6M1*7r& zB+t=lHnzq|0LOER(8p{8fC0v7!46EzYCS)tS}X?M!aos-Eb=jtkKCFoTVP!lG*ktE z@~$fPTVME?(0>en)Y5dwH%gxU>Mxoadk@C}EHX)|y>={L;~Xq%KdouufcT5;^s239 z-D1=xmiBnP<6~R!!*6NgRs4p!#A!NESE}*L<@@+o~A99xN8h7l?>J)iLpgrqD z_?4qvT-ia?+Dvy>8pJYqQb%YTCIGGCA;-vq8`CH4kg<~1P?nael3CoRjcIQbh27&P z0LtCLSxg}fL_gC*1cXZG8lPh^eS zjQ;@YKDeu1XV|S{UCxUwptbxm=%_;pHtF{*(n@~X%*o3kRRw{as3fc{K(mS>-?o&F}qTBjO(^2!t#4EM|Dsv|ah!*E8)^}mF6QL0{_cH0MfL`ba1ojU zVTkhgGIH~AEufs6`SE^XBL?YJMki1#Wt zaKp^JgON@WhOILcqdhkho;Ob3i-~P!WVePP}3dXROD5DH~ ztBn5u54CKy7}i)G-&1Vc_)8>r>nekiPC*`yFb}9X^sYs#&X%{+LUj>&5}z!YVi+Ip zp2yy-$%dah5QbY^ZfF*H9o`WvcX4Bsoac{i-TvJDDzfW9(=`aoKp#%H2OeRV&(!*T z@l+qSj1F4T5E~dJ{{YBTOT9|>QNmqZ$s!H_Ckj5*Ux!c1%REcv6Lgo4L)Vh(ShW2~ zEaWnLJ<>BnJ^|sEjF0PE&ZPWI(&n{<^!}MOu$t4sxU-#uLm!;Bzz3E^2av@>dK};y zxc>mzd>ZfJj*Zqr@I!NQuNBR+xbyg1qYoMMW8sXU$mfh#C)M;ev2+p1;wwaw6Waug zRoN4o>eHn;eGl*G2N#XKsm%A^p^Msc1q{c7h=j@IZx(RhW!GKD7vh~)9>-kG?& zh-#9+6iE4ED10?{&m{5`IN+Xh$R?_~lSaCN&rFWm2~099(nWrt8~{UsGpjw%d{9M#t{S z9mY7$YK|SZw;Ezb#ce=nofU}3Id9Yv{HmCVB$h)OkN_pI=)I~;EiHpa+cP2B;P1-q zBO^FH{{W>y$;sO##{==C(dlwY3pfVk4Y?kjkL!v}mEY{$N!ljzCRBhwIP3|dX~Su^ zNETTC0D2gD<2gA00Oh6*pLHBDTIrk|*q*z0=#08PiH+qCxbw}hlCEW8twfB_xP%hs_snoj*o;yiM# z2GeH8>#%I z2+Lr6`1+73$)~`QYmy&R*%NZ)@~Vp?I}%4Nv;p(LJXMrBt(C>C>@1K*imEM^WOCdB zG8h~K+k;9db-U3m%B)uD`C|kU2hZHpU4G8i&_pf6tGi^35y8;?j=a@ACBjqJvhz>Fq-C6k(F@0iC>-v z6_d5G@F!@aoHS{iNCz1AtyPAc{u&#ytb2xB@;%S5+Jq0(nAu~D%DCxww^rr5}9Mh?Xqxj_4fMKQu9+fh31=i8Zgt~xZ3XAg5)oC z{$0JOB1K&`-@uWFh{h=dXkW7_B!iEo8L&_RYjUHu`2PUPt#2T_GsPviPlXa8XyZ|m zJxM3mJ%IPAiMW6Q5HzOh7p4(5bBhrZ|=~TA_nv;Et?Lt>Km-eG` zB3w4W&609!nCqE+M(v2&Rze8x+lt#=>QesDySNJ3d0oFQG0kB$26w)^GA`C>7?3*x zO<5JN*n@$olQED1Auu0-HnsT{_%0XpTjj#b7z~-8~*6n(C zMAOV;;J^04ixZal9LWelBd*)) z?;I1^>Y^K~dxibsVVLKSf^tXDXX#7p{bx?S)ihU<>QZEv#W4jesH6Z%Vdlm{fsAkm zAlE$T>$t8YZ7%Xp+{!a<;Qs*1a5x`BTFp&v>@_OFa%=<jz_Vd zC!fh7C{I0uuhNRkt@XZ`xwO$bh+QSJ;Ox1F!ImISH-;Rr9sHz&Tb+J4v$lJi2_!|D zIKoSB7saAS8Zb?$!If|v`H$GuSK^o9+I1bGYkCdIOW0!(%L$N}q}m4m04Z7@S8H0cn|(Ctx-t6H zYZvVeb5gwV3Cj4M8jqk~tx^pp!3be$jOX~ICC~GrLWZ{l_BJ*#rL}BbMfc3bI@k$CAD%m7PKLAXbTCQH*w>LWpn^d!iP$KY0Rw2vXmAV!{=9 zP#(n4p-`73PX&~F_2Rc5!%`mdtKG502g3Y^G5Jt{C}LVmS<3XR`t6e&Z2&ytH+ zZ0dId+W>xor)W?KrhUYXvF_vRLWM)QKE%B;V|tAwU|XR$!t%%J$NVu>?Q0Fd)Zt~p zw(%}ve&tT(48KOmKO!^lLWM?L4m^@{7Up7kz#M+HqSJ3Aw3(eiVdV^`vjRXOg$jau z5|Z5C^yZe9`n}DvODBVOZ@XyY!z0Y3e8F6O4RQ~}T?!2s@fTXrblD`e({3$ST}WWU zcv3Mc@q^#PE#|<+Gmg|KRveOkA$$_jWJTi3qzy>Is}vEmi);^+g*YLPu5q7X=qk?d zbT0&sR$GZ>SkahyV%!PJuiM`z-_nH&vP*D7GwzD*E#hJ(nH}EYu+Bn}!1NvX^d8={ zi+IGBGg`(>QKF=hGM_w!hpTrTyZ8Bu6e>N22-R+kumurX!!uimlYrRuZ*kA%?eCh0 z8;hMeZ>C+*sx*lJ;a6^PpL54^!1NR-RDg4NTSUK`63B?J8Xgfh5HJVdzkisdbtU_B z=AH4W8eLvHh*jj_Q#m{V>BnG3eMzB0h;JmAp9Cw5QDg?Ac*g$#Q<I0qi2 z`u#s#(xJrKE9!F%(Z>@?mdnBn5CA^^0MpnG^e9xs_!W9e#MjQvB>RzY$I3SyybnRn zea<`4+(Il&EHN$2(g=K62ML_^9)pg|9Hn4!3kZYluJ1GYY0 zzO+&g2I?DF4%u!MqIfFA1haZ8O-TZwHH z7_FdWMp(`ao0mQP2h)@9LWMAnHC~2%GICq`n$N`h%gY;^PLZ~{ku=>V)oq3k{L(;?+>b)c z=lKdwjs}y{8V;#ytMQkA7PGr$yi|;gD*{L(k?F=LP^?o|6u!7NM{UP%bXzTFM2l07 z6|$dlt1KhSl1FU%bJ*wWSgB*!4&%HGjztO-`dK!beVFs4siCEXJRvFqhtp}t{lAqN zl2H_{t_fZ|>y!MkLWOBFl+wuWCg~WvdzveYsbz`?Wqt8N2#s(C(UM60NuffZ!346% ziyV=*##iHSq2rpDsm9P<-^aWY9J>nz#(6!xxfCc;C3INK-?@l^i7u69cggqQ4`4g} zPsm{rN@s5hZ)FxjP!j9rT!0j2Q zn^l@^3fg_BvP#UYfyM#!6ev;HJBYGWx6^NR84+bRswEK-fXq)BKEv9zLks~Ux(EGe zP^1its9cLlY}KO@3yYZGJnhEp^ZdJ4GSKWq+SQaTBLrz3xb)kT{P9AC0ykq#L~-EC z@wR)fZ_~9Eyu@7mJAg>wIOF+Hp-c(D1z9nlE&%7YMOkYX3wN)`iy4VoBEp9yQzL+& z_E4t)d*u4ip;17^7n&9E0vDi(S##Y*z9(VnG1*A3on&6e%!Vo9!1&heYa&n>d-~gZ5CE zc$nO*#R$lO&|3?x^PVc%c-WQCBsr467qTo+=&a>Nb!;9^YEi z^(EuOJU5C5ikef3J>o%sw^$oe>J~Qkj%CyCt`ZY$>~S9UK4d+? z&)EHWuTE)qa!M{@&KlY{?l)mh^kzT1JbGie=7kF5{iO)UEM%7NlYd7iENwo=|JlPZ BQndg8 diff --git a/tests/does-Image-Magick-works-under-valgrind/runtest.sh b/tests/does-Image-Magick-works-under-valgrind/runtest.sh deleted file mode 100755 index be62adf..0000000 --- a/tests/does-Image-Magick-works-under-valgrind/runtest.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/valgrind/Sanity/does-Image-Magick-works-under-valgrind -# Description: Testing sanity of valgrind by comparing outputs of ImageMagick utilities with/without valgrind. -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2011 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2 or later. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# The image munich.jpg used in this test is from: -# https://en.wikipedia.org/wiki/File:Frauenkirche_and_Neues_Rathaus_Munich_March_2013.JPG. -# munich.jpg file is distributed under the Creative Commons -# Attribution-Share Alike 3.0 Unported license -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -VALGRIND="${VALGRIND:-$(which valgrind)}" -PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" -REQUIRES="${REQUIRES:-ImageMagick}" - -Picture="munich.jpg" -Formats=(jpg gif) -Options=(-flop - -flip - -resize\ 160x100 - -resize\ 50\\\% - -sharpen\ 5x5 - -equalize - -motion-blur\ 20x5 - -paint\ 3x3 - -radial-blur\ 5 - -posterize\ 10 - ) - - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "VALGRIND=$VALGRIND" - rlLogInfo "PACKAGES=$PACKAGES" - rlLogInfo "REQUIRES=$REQUIRES" - rlLogInfo "COLLECTIONS=$COLLECTIONS" - rlLogInfo "$(type valgrind)" - - rlAssertRpm --all - - rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" - rlRun "cp $Picture $TmpDir" 0 "Copying $Picture to $TmpDir" - rlRun "pushd $TmpDir" - rlRun "mkdir out" 0 "Creating out directory" - rlPhaseEnd - - for f in "${Formats[@]}"; do - for o in "${Options[@]}"; do - rlPhaseStartTest "convert $o $Picture out/0${Picture%jpg}$f" - rlRun "convert $o $Picture out/0${Picture%jpg}$f" 0 "Converting $Picture to out/0${Picture%jpg}$f with ($o)" - rlLog "convert $o $Picture out/0${Picture%jpg}$f" - rlRun "valgrind convert $o $Picture out/1${Picture%jpg}$f" 0 "Converting $Picture to out/1${Picture%jpg}$f with ($o) [valgrind]" - rlLog "valgrind convert $o $Picture out/1${Picture%jpg}$f" - [[ $(arch) = i686 ]] || rlRun "echo \`md5sum out/[01]${Picture%jpg}$f\` | while read with nic without nic; do test \"\$with\" = \"\$without\";done" 0 "Output is the same with/without valgrind" - md5sum out/[01]${Picture%jpg}$f - rlPhaseEnd - rlPhaseStartCleanup "Cleaning for $f with $o" - rlRun "mkdir -p \"out-$o\"" - rlRun "cp -r out/* \"out-$o/\"" - rlRun "rm -f out/*" 0 "Removing the old pictures" - rlPhaseEnd - done - done - - rlPhaseStartCleanup - rlRun "rm -rf out" - rlRun "tar czf out.tgz $TmpDir/*" - rlFileSubmit "out.tgz" - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/does-hunspell-works-under-valgrind/Makefile b/tests/does-hunspell-works-under-valgrind/Makefile deleted file mode 100644 index 4a33045..0000000 --- a/tests/does-hunspell-works-under-valgrind/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2011 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2 or later. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Miroslav Franc " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind." >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 20m" >> $(METADATA) - @echo "RunFor: valgrind" >> $(METADATA) - @echo "Requires: valgrind hunspell" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/does-hunspell-works-under-valgrind/main.fmf b/tests/does-hunspell-works-under-valgrind/main.fmf deleted file mode 100644 index 11d22f7..0000000 --- a/tests/does-hunspell-works-under-valgrind/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind. -description: | - This test is simplified version of the older RHEL does-aspell-works-under-valgrind test. - - The test collects README files and try to run spellchecker on them with and without valgrind. The output should be the same. - -contact: Alexandra Petlanova -component: -- valgrind -test: ./runtest.sh -framework: beakerlib -recommend: -- valgrind -- hunspell -duration: 5m -extra-summary: /tools/valgrind/Sanity/does-hunspell-works-under-valgrind -extra-task: /tools/valgrind/Sanity/does-hunspell-works-under-valgrind diff --git a/tests/does-hunspell-works-under-valgrind/runtest.sh b/tests/does-hunspell-works-under-valgrind/runtest.sh deleted file mode 100755 index 91caef3..0000000 --- a/tests/does-hunspell-works-under-valgrind/runtest.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Description: Testing sanity of valgrind by comparing outputs of hunspell with/without valgrind. -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2011 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2 or later. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -SPELL_CHECKER="${SPELL_CHECKER:-hunspell}" - -VALGRIND="${VALGRIND:-$(which valgrind)}" -PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" -REQUIRES="${REQUIRES:-$SPELL_CHECKER}" - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "VALGRIND=$VALGRIND" - rlLogInfo "PACKAGES=$PACKAGES" - rlLogInfo "REQUIRES=$REQUIRES" - rlLogInfo "SPELL_CHECKER=$SPELL_CHECKER" - rlLogInfo "$(type valgrind)" - - rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - - rlRun "echo \"NEWSX\"|hunspell -a;echo -e '#include \nclock_t clock(void) { return 0; }'|gcc -o libclock.so -Wall -g -shared -fPIC -x c -;echo "NEWSX"|LD_PRELOAD=./libclock.so hunspell -a > out" - - rlRun "echo \"NEWSX\"|hunspell -a;echo -e '#include \nclock_t clock(void) { return 0; }'|gcc -o libclock.so -Wall -g -shared -fPIC -x c -;echo \"NEWSX\"|LD_PRELOAD=./libclock.so valgrind -q hunspell -a > valgrind_out" - - # Remove dictionary to avoid possibility of different results with - # already present dictionary. After this all commands start with - # the clean sheet. - rlRun "rm -f $HOME/.hunspell_en_US" - - rlAssertNotDiffer "out" "valgrind_out" - [ "$?" -ne 0 ] && rlLogWarning "$(diff out valgrind_out)" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" # $TmpDir - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/quick-valgrind-sanity/Makefile b/tests/quick-valgrind-sanity/Makefile deleted file mode 100644 index e708552..0000000 --- a/tests/quick-valgrind-sanity/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /tools/valgrind/Sanity/quick-valgrind-sanity -# Description: Very fast check that valgrind is working -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2013 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/tools/valgrind/Sanity/quick-valgrind-sanity -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE unitialized.c rv.c alloc.c - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - test -x runtest.sh || chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Miroslav Franc " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Very fast check that valgrind is working" >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 15m" >> $(METADATA) - @echo "RunFor: valgrind" >> $(METADATA) - @echo "Requires: gcc valgrind-devel" >> $(METADATA) - @echo "Requires: glibc-devel glibc-devel.ppc glibc-devel.s390 glibc-devel.i686" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/quick-valgrind-sanity/PURPOSE b/tests/quick-valgrind-sanity/PURPOSE deleted file mode 100644 index c87c6e6..0000000 --- a/tests/quick-valgrind-sanity/PURPOSE +++ /dev/null @@ -1,3 +0,0 @@ -PURPOSE of /tools/valgrind/Sanity/quick-valgrind-sanity -Description: Very fast check that valgrind is working -Author: Miroslav Franc diff --git a/tests/quick-valgrind-sanity/alloc.c b/tests/quick-valgrind-sanity/alloc.c deleted file mode 100644 index 3c03816..0000000 --- a/tests/quick-valgrind-sanity/alloc.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -int main(int argc, char *argv[]) -{ - void *buffer = malloc(atoi(argv[1])); - VALGRIND_DO_LEAK_CHECK; - free(buffer); - return 0; -} diff --git a/tests/quick-valgrind-sanity/main.fmf b/tests/quick-valgrind-sanity/main.fmf deleted file mode 100644 index c80e992..0000000 --- a/tests/quick-valgrind-sanity/main.fmf +++ /dev/null @@ -1,16 +0,0 @@ -summary: Basic smoke test. -description: 'Very fast check that valgrind is working' -contact: -- Alexandra Petlanova Hajkova -component: -- valgrind -test: ./runtest.sh -framework: beakerlib -recommend: -- valgrind -- valgrind-devel -- gcc -- make -duration: 15m -extra-summary: /tools/valgrind/Sanity/quick-valgrind-sanity -extra-task: /tools/valgrind/Sanity/quick-valgrind-sanity diff --git a/tests/quick-valgrind-sanity/runtest.sh b/tests/quick-valgrind-sanity/runtest.sh deleted file mode 100755 index bbbeab1..0000000 --- a/tests/quick-valgrind-sanity/runtest.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/valgrind/Sanity/quick-valgrind-sanity -# Description: Very fast check that valgrind is working -# Author: Miroslav Franc -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2013 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -VALGRIND="${VALGRIND:-$(which valgrind)}" -PACKAGES="${PACKAGES:-$(rpm --qf '%{name}\n' -qf $(which $VALGRIND) | head -1)}" - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "VALGRIND=$VALGRIND" - rlLogInfo "PACKAGES=$PACKAGES" - rlLogInfo "REQUIRES=$REQUIRES" - rlLogInfo "$(type valgrind)" - rlLogInfo "$(type gcc)" - - rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK" - - # We optionally need to skip checking for the presence of the metapackage - # because that would pull in all the dependent toolset subrpms. We do not - # always want that, especially in CI. - _COLLECTIONS="$COLLECTIONS" - if ! test -z $SKIP_COLLECTION_METAPACKAGE_CHECK; then - for c in $SKIP_COLLECTION_METAPACKAGE_CHECK; do - rlLogInfo "ignoring metapackage check for collection $c" - export COLLECTIONS=$(shopt -s extglob && echo ${COLLECTIONS//$c/}) - done - fi - - rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS" - - rlAssertRpm --all - - export COLLECTIONS="$_COLLECTIONS" - - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp unitialized.c rv.c alloc.c $TmpDir" - rlRun "pushd $TmpDir" - rlRun "gcc -g unitialized.c -o unitialized" - rlPhaseEnd - - rlPhaseStartTest "good" - rlRun "valgrind --log-file=./log0 ./unitialized 0" 42 - rlAssertNotGrep 'contains uninitialised byte' ./log0 - rlAssertGrep 'ERROR SUMMARY: 0' ./log0 - rlLog "$( with-valgrind" - rlAssertGrep "I'm running on valgrind" with-valgrind - rlLog "$( without-valgrind" - rlAssertGrep "I'm not running on valgrind" without-valgrind - rlLog "$( -#include - -int main() -{ - if(RUNNING_ON_VALGRIND) - puts("I'm running on valgrind \\o/"); - else - puts("I'm not running on valgrind /o\\"); - - return 0; -} diff --git a/tests/quick-valgrind-sanity/unitialized.c b/tests/quick-valgrind-sanity/unitialized.c deleted file mode 100644 index 99de47e..0000000 --- a/tests/quick-valgrind-sanity/unitialized.c +++ /dev/null @@ -1,30 +0,0 @@ -/* valgrind ./a.out 0 ~> no error */ -/* valgrind ./a.out 1 ~> error */ - -#include - -struct something { - char c; - int x; -}; -/* === 8 bytes === - * 42 - * garbage - * garbage - * garbage - * 42 - * 42 - * 42 - * 42 - */ - - -int main(int argc, char *argv[]) -{ - struct something st = { 0x2A, 0x2A2A2A2A }; - - struct something st_copy = st; - - return (int) *(&(st_copy.c)+atoi(argv[1])); -} -/* error generated after main returns */ From dafbb182441e42a5cc81b6eb43397e9266774851 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 19 Apr 2022 18:52:08 +0200 Subject: [PATCH 108/196] Update rpminspect.yaml comment about fedora/hardened flags --- rpminspect.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpminspect.yaml b/rpminspect.yaml index c883d35..e2816ea 100644 --- a/rpminspect.yaml +++ b/rpminspect.yaml @@ -7,7 +7,7 @@ inspections: annocheck: # Currently lto is disabled globally for valgrind, it should be able # to be enabled through upstream configure --enable-lto in the future. - # Note that all (default fedora) flags need to be repeated here, if + # Note that all (default hardened) flags need to be repeated here, if # you override some config flags it will completely overwrite the # defaults (--ignore-unknown --verbose). jobs: From 7ae6b1b7ad14a18d0925c019c4bf0b6dfe2d06eb Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 14 May 2022 00:50:33 +0200 Subject: [PATCH 109/196] 3.19.0-2 - Add valgrind-3.19.0-ld-so-strncmp.patch --- valgrind-3.19.0-ld-so-strncmp.patch | 25 +++++++++++++++++++++++++ valgrind.spec | 9 ++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.19.0-ld-so-strncmp.patch diff --git a/valgrind-3.19.0-ld-so-strncmp.patch b/valgrind-3.19.0-ld-so-strncmp.patch new file mode 100644 index 0000000..91007ef --- /dev/null +++ b/valgrind-3.19.0-ld-so-strncmp.patch @@ -0,0 +1,25 @@ +commit 947388eb043ea1c44b37df94046e1eee790ad776 +Author: Mike Crowe +Date: Mon Sep 9 14:16:16 2019 +0100 + + Intercept strncmp for glibc ld.so v2.28+ + + In glibc 5aad5f617892e75d91d4c8fb7594ff35b610c042 (first released in + v2.28) a call to strncmp was added to dl-load.c:is_dst. This causes + valgrind to complain about glibc's highly-optimised strncmp performing + sixteen-byte reads on short strings in ld.so. Let's intercept strncmp in + ld.so too so we use valgrind's simple version to avoid this problem. + +diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c +index 3b42b3a87..5396e83be 100644 +--- a/shared/vg_replace_strmem.c ++++ b/shared/vg_replace_strmem.c +@@ -710,6 +710,8 @@ static inline void my_exit ( int x ) + STRNCMP(VG_Z_LIBC_SONAME, __GI_strncmp) + STRNCMP(VG_Z_LIBC_SONAME, __strncmp_sse2) + STRNCMP(VG_Z_LIBC_SONAME, __strncmp_sse42) ++ STRNCMP(VG_Z_LD_LINUX_SO_2, strncmp) ++ STRNCMP(VG_Z_LD_LINUX_X86_64_SO_2, strncmp) + + #elif defined(VGO_freebsd) + STRNCMP(VG_Z_LIBC_SONAME, strncmp) diff --git a/valgrind.spec b/valgrind.spec index fdf40bd..f454f5c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.19.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -85,6 +85,9 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch +# KDE#434764 # iconv_open causes ld.so v2.28+ to execute optimised strncmp +Patch5: valgrind-3.19.0-ld-so-strncmp.patch + BuildRequires: make BuildRequires: glibc-devel @@ -222,6 +225,7 @@ Valgrind User Manual for details. %patch4 -p1 %endif +%patch5 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -451,6 +455,9 @@ fi %endif %changelog +* Fri May 13 2022 Mark Wielaard - 3.19.0-2 +- Add valgrind-3.19.0-ld-so-strncmp.patch + * Tue Apr 12 2022 Mark Wielaard - 3.19.0-1 - Upgrade to valgrind 3.19.0. Drop old patches. From acc558bbbe38a782bf305476997cff7d27a56a66 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 25 May 2022 18:16:40 +0200 Subject: [PATCH 110/196] 3.19.0-3 - Add valgrind-3.19.0-s390x-memmem.patch --- valgrind-3.19.0-s390x-memmem.patch | 231 +++++++++++++++++++++++++++++ valgrind.spec | 9 +- 2 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.19.0-s390x-memmem.patch diff --git a/valgrind-3.19.0-s390x-memmem.patch b/valgrind-3.19.0-s390x-memmem.patch new file mode 100644 index 0000000..669b78e --- /dev/null +++ b/valgrind-3.19.0-s390x-memmem.patch @@ -0,0 +1,231 @@ +From 42ca1c480a5bca408a54c6a24d2be2c081d121ac Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Thu, 19 May 2022 13:54:06 +0200 +Subject: [PATCH] Bug 454040 - Add intercept for memmem on s390x + +Since memcheck may report false positives in an optimized version of memmem on +s390x, add an intercept for memmem on s390x platforms. +--- + shared/vg_replace_strmem.c | 36 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + +diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c +index 5396e83be..d28e74206 100644 +--- a/shared/vg_replace_strmem.c ++++ b/shared/vg_replace_strmem.c +@@ -103,6 +103,7 @@ + 20430 WMEMCHR + 20440 WCSNLEN + 20450 WSTRNCMP ++ 20460 MEMMEM + */ + + #if defined(VGO_solaris) +@@ -1785,6 +1786,41 @@ static inline void my_exit ( int x ) + + #endif + ++/*---------------------- memmem ----------------------*/ ++ ++#define MEMMEM(soname, fnname) \ ++ void* VG_REPLACE_FUNCTION_EZU(20460,soname,fnname) \ ++ (const void* haystack, SizeT hlen, const void* needle, SizeT nlen); \ ++ void* VG_REPLACE_FUNCTION_EZU(20460,soname,fnname) \ ++ (const void* haystack, SizeT hlen, const void* needle, SizeT nlen) \ ++ { \ ++ const HChar* h = haystack; \ ++ const HChar* n = needle; \ ++ \ ++ /* If the needle is the empty string, match immediately. */ \ ++ if (nlen == 0) return CONST_CAST(void *,h); \ ++ \ ++ HChar n0 = n[0]; \ ++ \ ++ for (; hlen >= nlen; hlen--, h++) { \ ++ if (h[0] != n0) continue; \ ++ \ ++ UWord i; \ ++ for (i = 1; i < nlen; i++) { \ ++ if (n[i] != h[i]) \ ++ break; \ ++ } \ ++ if (i == nlen) \ ++ return CONST_CAST(HChar *,h); \ ++ \ ++ } \ ++ return NULL; \ ++ } ++ ++#if defined(VGP_s390x_linux) ++ MEMMEM(VG_Z_LIBC_SONAME, memmem) ++#endif ++ + + /*---------------------- strpbrk ----------------------*/ + +-- +2.31.1 + +From 4d675f309bcd2d4e9e2b9e6f4aba30f85116bb9b Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 19 May 2022 18:08:40 -0400 +Subject: [PATCH] Add memmem memcheck tests + +--- + memcheck/tests/Makefile.am | 3 ++ + memcheck/tests/filter_memmem | 5 ++ + memcheck/tests/memmem.c | 81 ++++++++++++++++++++++++++++++++ + memcheck/tests/memmem.stderr.exp | 2 + + memcheck/tests/memmem.vgtest | 3 ++ + 5 files changed, 94 insertions(+) + create mode 100755 memcheck/tests/filter_memmem + create mode 100644 memcheck/tests/memmem.c + create mode 100644 memcheck/tests/memmem.stderr.exp + create mode 100644 memcheck/tests/memmem.vgtest + +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index eb9487272..4d181c1ac 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -79,6 +79,7 @@ dist_noinst_SCRIPTS = \ + filter_strchr \ + filter_varinfo3 \ + filter_memcheck \ ++ filter_memmem \ + filter_overlaperror \ + filter_malloc_free \ + filter_sized_delete +@@ -220,6 +221,7 @@ EXTRA_DIST = \ + memalign2.stderr.exp memalign2.vgtest \ + memcmptest.stderr.exp memcmptest.stderr.exp2 \ + memcmptest.stdout.exp memcmptest.vgtest \ ++ memmem.stderr.exp memmem.vgtest \ + mempool.stderr.exp mempool.vgtest \ + mempool2.stderr.exp mempool2.vgtest \ + metadata.stderr.exp metadata.stdout.exp metadata.vgtest \ +@@ -417,6 +419,7 @@ check_PROGRAMS = \ + malloc_usable malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \ + match-overrun \ + memalign_test memalign2 memcmptest mempool mempool2 mmaptest \ ++ memmem \ + mismatches new_override metadata \ + nanoleak_supp nanoleak2 new_nothrow \ + noisy_child \ +diff --git a/memcheck/tests/filter_memmem b/memcheck/tests/filter_memmem +new file mode 100755 +index 000000000..f4a40b2d1 +--- /dev/null ++++ b/memcheck/tests/filter_memmem +@@ -0,0 +1,5 @@ ++#! /bin/sh ++ ++# Too many memmem implementations and overrides. ++# So just keep the main file lines. ++./filter_stderr "$@" | grep " main (memmem.c:" +diff --git a/memcheck/tests/memmem.c b/memcheck/tests/memmem.c +new file mode 100644 +index 000000000..d627076e3 +--- /dev/null ++++ b/memcheck/tests/memmem.c +@@ -0,0 +1,81 @@ ++#define _GNU_SOURCE ++#include ++#include ++#include ++ ++/* mallocs an mem block and fills it with A. A needs to be a zero ++ terminated string. The A string chars, minus the terminating zero ++ are copied into the returned mem block. */ ++static void * ++create_mem (const char *a) ++{ ++ size_t len = strlen (a); ++ void *mem = malloc (len); ++ memcpy (mem, a, len); ++ return mem; ++} ++ ++int ++main () ++{ ++ char *haystack; ++ char *needle; ++ ++ haystack = create_mem ("a"); ++ needle = create_mem ("a"); ++ assert (memmem (haystack, 0, needle, 0) == haystack); ++ assert (memmem (haystack, 1, needle, 0) == haystack); ++ assert (memmem (haystack, 0, needle, 1) == NULL); ++ assert (memmem (haystack, 1, needle, 1) == haystack); ++ free (haystack); ++ free (needle); ++ ++ haystack = create_mem ("abc"); ++ needle = create_mem ("bc"); ++ assert (memmem (haystack, 3, needle, 0) == haystack); ++ assert (memmem (haystack, 3, needle, 2) == haystack + 1); ++ assert (memmem (haystack + 1, 2, needle, 2) == haystack + 1); ++ assert (memmem (haystack + 2, 1, needle, 2) == NULL); ++ free (haystack); ++ free (needle); ++ ++ haystack = create_mem ("abcabcabc"); ++ needle = create_mem ("bca"); ++ assert (memmem (haystack, 9, needle, 3) == haystack + 1); ++ free (haystack); ++ free (needle); ++ ++ haystack = create_mem ("abcabcabc"); ++ needle = create_mem ("bcad"); ++ assert (memmem (haystack, 9, needle, 4) == NULL); ++ free (haystack); ++ free (needle); ++ ++ haystack = create_mem ("xxxxxxxxxxxxxxxxxABC"); ++ needle = create_mem ("ABCD"); ++ assert (memmem (haystack, 20, needle, 2) == haystack + 17); ++ assert (memmem (haystack + 3, 17, needle, 2) == haystack + 17); ++ assert (memmem (haystack + 15, 5, needle, 2) == haystack + 17); ++ assert (memmem (haystack, 20, needle, 3) == haystack + 17); ++ assert (memmem (haystack + 3, 17, needle, 3) == haystack + 17); ++ assert (memmem (haystack + 15, 5, needle, 3) == haystack + 17); ++ assert (memmem (haystack, 20, needle, 4) == NULL); ++ assert (memmem (haystack + 3, 5, needle, 4) == NULL); ++ assert (memmem (haystack + 15, 5, needle, 4) == NULL); ++ free (haystack); ++ free (needle); ++ ++ haystack = malloc (1); ++ needle = create_mem ("a"); ++ assert (memmem (haystack, 1, needle, 1) == NULL); ++ free (haystack); ++ free (needle); ++ ++ haystack = create_mem ("A"); ++ needle = malloc (1); ++ assert (memmem (haystack, 1, needle, 1) == NULL); ++ free (haystack); ++ free (needle); ++ ++ return 0; ++} +diff --git a/memcheck/tests/memmem.stderr.exp b/memcheck/tests/memmem.stderr.exp +new file mode 100644 +index 000000000..b4612fbd4 +--- /dev/null ++++ b/memcheck/tests/memmem.stderr.exp +@@ -0,0 +1,2 @@ ++ by 0x........: main (memmem.c:70) ++ by 0x........: main (memmem.c:76) +diff --git a/memcheck/tests/memmem.vgtest b/memcheck/tests/memmem.vgtest +new file mode 100644 +index 000000000..6d12895df +--- /dev/null ++++ b/memcheck/tests/memmem.vgtest +@@ -0,0 +1,3 @@ ++prog: memmem ++vgopts: -q ++stderr_filter: filter_memmem +-- +2.18.4 + diff --git a/valgrind.spec b/valgrind.spec index f454f5c..9f65414 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.19.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -88,6 +88,9 @@ Patch4: valgrind-3.16.0-some-Wl-z-now.patch # KDE#434764 # iconv_open causes ld.so v2.28+ to execute optimised strncmp Patch5: valgrind-3.19.0-ld-so-strncmp.patch +# KDE#454040 s390x: False-positive memcheck:cond in memmem on arch13 systems +Patch6: valgrind-3.19.0-s390x-memmem.patch + BuildRequires: make BuildRequires: glibc-devel @@ -226,6 +229,7 @@ Valgrind User Manual for details. %endif %patch5 -p1 +%patch6 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -455,6 +459,9 @@ fi %endif %changelog +* Wed May 25 2022 Mark Wielaard - 3.19.0-3 +- Add valgrind-3.19.0-s390x-memmem.patch + * Fri May 13 2022 Mark Wielaard - 3.19.0-2 - Add valgrind-3.19.0-ld-so-strncmp.patch From c26fba590e460951d4bc21fd4dcc4bed54f39d92 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 23 Jul 2022 11:40:25 +0000 Subject: [PATCH 111/196] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 9f65414..f69b91c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.19.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -459,6 +459,9 @@ fi %endif %changelog +* Sat Jul 23 2022 Fedora Release Engineering - 1:3.19.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Wed May 25 2022 Mark Wielaard - 3.19.0-3 - Add valgrind-3.19.0-s390x-memmem.patch From abb597e9d87a8f703daab782e297eff0aad8d5be Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 24 Oct 2022 22:43:27 +0200 Subject: [PATCH 112/196] 3.20.0-1 - Upgrade to valgrind 3.20.0. Drop old patches. --- .gitignore | 1 + sources | 2 +- valgrind-3.19.0-ld-so-strncmp.patch | 25 --- valgrind-3.19.0-s390x-memmem.patch | 231 ---------------------------- valgrind.spec | 18 +-- 5 files changed, 7 insertions(+), 270 deletions(-) delete mode 100644 valgrind-3.19.0-ld-so-strncmp.patch delete mode 100644 valgrind-3.19.0-s390x-memmem.patch diff --git a/.gitignore b/.gitignore index cbec41e..b20bb48 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ /valgrind-3.18.0.RC1.tar.bz2 /valgrind-3.18.1.tar.bz2 /valgrind-3.19.0.tar.bz2 +/valgrind-3.20.0.tar.bz2 diff --git a/sources b/sources index e93a40c..0ba4c2a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.19.0.tar.bz2) = f720a89dc4c4989cc5714bff9efe97529f71990bcfad7a92b889ce099c4326d6da07fa4d5fbab2e9125e20f352354f6178471e49e419b613a3c82c2a1c667ab2 +SHA512 (valgrind-3.20.0.tar.bz2) = d6bfb9284d0410134ee7e2a5975b13c01508dd5587b562947d8197b3c113b76fdfac88c4072948be68bbf0dbeb17b4d1acb1412ce898adaa83c30ae2c6a1c12b diff --git a/valgrind-3.19.0-ld-so-strncmp.patch b/valgrind-3.19.0-ld-so-strncmp.patch deleted file mode 100644 index 91007ef..0000000 --- a/valgrind-3.19.0-ld-so-strncmp.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit 947388eb043ea1c44b37df94046e1eee790ad776 -Author: Mike Crowe -Date: Mon Sep 9 14:16:16 2019 +0100 - - Intercept strncmp for glibc ld.so v2.28+ - - In glibc 5aad5f617892e75d91d4c8fb7594ff35b610c042 (first released in - v2.28) a call to strncmp was added to dl-load.c:is_dst. This causes - valgrind to complain about glibc's highly-optimised strncmp performing - sixteen-byte reads on short strings in ld.so. Let's intercept strncmp in - ld.so too so we use valgrind's simple version to avoid this problem. - -diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index 3b42b3a87..5396e83be 100644 ---- a/shared/vg_replace_strmem.c -+++ b/shared/vg_replace_strmem.c -@@ -710,6 +710,8 @@ static inline void my_exit ( int x ) - STRNCMP(VG_Z_LIBC_SONAME, __GI_strncmp) - STRNCMP(VG_Z_LIBC_SONAME, __strncmp_sse2) - STRNCMP(VG_Z_LIBC_SONAME, __strncmp_sse42) -+ STRNCMP(VG_Z_LD_LINUX_SO_2, strncmp) -+ STRNCMP(VG_Z_LD_LINUX_X86_64_SO_2, strncmp) - - #elif defined(VGO_freebsd) - STRNCMP(VG_Z_LIBC_SONAME, strncmp) diff --git a/valgrind-3.19.0-s390x-memmem.patch b/valgrind-3.19.0-s390x-memmem.patch deleted file mode 100644 index 669b78e..0000000 --- a/valgrind-3.19.0-s390x-memmem.patch +++ /dev/null @@ -1,231 +0,0 @@ -From 42ca1c480a5bca408a54c6a24d2be2c081d121ac Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Thu, 19 May 2022 13:54:06 +0200 -Subject: [PATCH] Bug 454040 - Add intercept for memmem on s390x - -Since memcheck may report false positives in an optimized version of memmem on -s390x, add an intercept for memmem on s390x platforms. ---- - shared/vg_replace_strmem.c | 36 ++++++++++++++++++++++++++++++++++++ - 1 file changed, 36 insertions(+) - -diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index 5396e83be..d28e74206 100644 ---- a/shared/vg_replace_strmem.c -+++ b/shared/vg_replace_strmem.c -@@ -103,6 +103,7 @@ - 20430 WMEMCHR - 20440 WCSNLEN - 20450 WSTRNCMP -+ 20460 MEMMEM - */ - - #if defined(VGO_solaris) -@@ -1785,6 +1786,41 @@ static inline void my_exit ( int x ) - - #endif - -+/*---------------------- memmem ----------------------*/ -+ -+#define MEMMEM(soname, fnname) \ -+ void* VG_REPLACE_FUNCTION_EZU(20460,soname,fnname) \ -+ (const void* haystack, SizeT hlen, const void* needle, SizeT nlen); \ -+ void* VG_REPLACE_FUNCTION_EZU(20460,soname,fnname) \ -+ (const void* haystack, SizeT hlen, const void* needle, SizeT nlen) \ -+ { \ -+ const HChar* h = haystack; \ -+ const HChar* n = needle; \ -+ \ -+ /* If the needle is the empty string, match immediately. */ \ -+ if (nlen == 0) return CONST_CAST(void *,h); \ -+ \ -+ HChar n0 = n[0]; \ -+ \ -+ for (; hlen >= nlen; hlen--, h++) { \ -+ if (h[0] != n0) continue; \ -+ \ -+ UWord i; \ -+ for (i = 1; i < nlen; i++) { \ -+ if (n[i] != h[i]) \ -+ break; \ -+ } \ -+ if (i == nlen) \ -+ return CONST_CAST(HChar *,h); \ -+ \ -+ } \ -+ return NULL; \ -+ } -+ -+#if defined(VGP_s390x_linux) -+ MEMMEM(VG_Z_LIBC_SONAME, memmem) -+#endif -+ - - /*---------------------- strpbrk ----------------------*/ - --- -2.31.1 - -From 4d675f309bcd2d4e9e2b9e6f4aba30f85116bb9b Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 19 May 2022 18:08:40 -0400 -Subject: [PATCH] Add memmem memcheck tests - ---- - memcheck/tests/Makefile.am | 3 ++ - memcheck/tests/filter_memmem | 5 ++ - memcheck/tests/memmem.c | 81 ++++++++++++++++++++++++++++++++ - memcheck/tests/memmem.stderr.exp | 2 + - memcheck/tests/memmem.vgtest | 3 ++ - 5 files changed, 94 insertions(+) - create mode 100755 memcheck/tests/filter_memmem - create mode 100644 memcheck/tests/memmem.c - create mode 100644 memcheck/tests/memmem.stderr.exp - create mode 100644 memcheck/tests/memmem.vgtest - -diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am -index eb9487272..4d181c1ac 100644 ---- a/memcheck/tests/Makefile.am -+++ b/memcheck/tests/Makefile.am -@@ -79,6 +79,7 @@ dist_noinst_SCRIPTS = \ - filter_strchr \ - filter_varinfo3 \ - filter_memcheck \ -+ filter_memmem \ - filter_overlaperror \ - filter_malloc_free \ - filter_sized_delete -@@ -220,6 +221,7 @@ EXTRA_DIST = \ - memalign2.stderr.exp memalign2.vgtest \ - memcmptest.stderr.exp memcmptest.stderr.exp2 \ - memcmptest.stdout.exp memcmptest.vgtest \ -+ memmem.stderr.exp memmem.vgtest \ - mempool.stderr.exp mempool.vgtest \ - mempool2.stderr.exp mempool2.vgtest \ - metadata.stderr.exp metadata.stdout.exp metadata.vgtest \ -@@ -417,6 +419,7 @@ check_PROGRAMS = \ - malloc_usable malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \ - match-overrun \ - memalign_test memalign2 memcmptest mempool mempool2 mmaptest \ -+ memmem \ - mismatches new_override metadata \ - nanoleak_supp nanoleak2 new_nothrow \ - noisy_child \ -diff --git a/memcheck/tests/filter_memmem b/memcheck/tests/filter_memmem -new file mode 100755 -index 000000000..f4a40b2d1 ---- /dev/null -+++ b/memcheck/tests/filter_memmem -@@ -0,0 +1,5 @@ -+#! /bin/sh -+ -+# Too many memmem implementations and overrides. -+# So just keep the main file lines. -+./filter_stderr "$@" | grep " main (memmem.c:" -diff --git a/memcheck/tests/memmem.c b/memcheck/tests/memmem.c -new file mode 100644 -index 000000000..d627076e3 ---- /dev/null -+++ b/memcheck/tests/memmem.c -@@ -0,0 +1,81 @@ -+#define _GNU_SOURCE -+#include -+#include -+#include -+ -+/* mallocs an mem block and fills it with A. A needs to be a zero -+ terminated string. The A string chars, minus the terminating zero -+ are copied into the returned mem block. */ -+static void * -+create_mem (const char *a) -+{ -+ size_t len = strlen (a); -+ void *mem = malloc (len); -+ memcpy (mem, a, len); -+ return mem; -+} -+ -+int -+main () -+{ -+ char *haystack; -+ char *needle; -+ -+ haystack = create_mem ("a"); -+ needle = create_mem ("a"); -+ assert (memmem (haystack, 0, needle, 0) == haystack); -+ assert (memmem (haystack, 1, needle, 0) == haystack); -+ assert (memmem (haystack, 0, needle, 1) == NULL); -+ assert (memmem (haystack, 1, needle, 1) == haystack); -+ free (haystack); -+ free (needle); -+ -+ haystack = create_mem ("abc"); -+ needle = create_mem ("bc"); -+ assert (memmem (haystack, 3, needle, 0) == haystack); -+ assert (memmem (haystack, 3, needle, 2) == haystack + 1); -+ assert (memmem (haystack + 1, 2, needle, 2) == haystack + 1); -+ assert (memmem (haystack + 2, 1, needle, 2) == NULL); -+ free (haystack); -+ free (needle); -+ -+ haystack = create_mem ("abcabcabc"); -+ needle = create_mem ("bca"); -+ assert (memmem (haystack, 9, needle, 3) == haystack + 1); -+ free (haystack); -+ free (needle); -+ -+ haystack = create_mem ("abcabcabc"); -+ needle = create_mem ("bcad"); -+ assert (memmem (haystack, 9, needle, 4) == NULL); -+ free (haystack); -+ free (needle); -+ -+ haystack = create_mem ("xxxxxxxxxxxxxxxxxABC"); -+ needle = create_mem ("ABCD"); -+ assert (memmem (haystack, 20, needle, 2) == haystack + 17); -+ assert (memmem (haystack + 3, 17, needle, 2) == haystack + 17); -+ assert (memmem (haystack + 15, 5, needle, 2) == haystack + 17); -+ assert (memmem (haystack, 20, needle, 3) == haystack + 17); -+ assert (memmem (haystack + 3, 17, needle, 3) == haystack + 17); -+ assert (memmem (haystack + 15, 5, needle, 3) == haystack + 17); -+ assert (memmem (haystack, 20, needle, 4) == NULL); -+ assert (memmem (haystack + 3, 5, needle, 4) == NULL); -+ assert (memmem (haystack + 15, 5, needle, 4) == NULL); -+ free (haystack); -+ free (needle); -+ -+ haystack = malloc (1); -+ needle = create_mem ("a"); -+ assert (memmem (haystack, 1, needle, 1) == NULL); -+ free (haystack); -+ free (needle); -+ -+ haystack = create_mem ("A"); -+ needle = malloc (1); -+ assert (memmem (haystack, 1, needle, 1) == NULL); -+ free (haystack); -+ free (needle); -+ -+ return 0; -+} -diff --git a/memcheck/tests/memmem.stderr.exp b/memcheck/tests/memmem.stderr.exp -new file mode 100644 -index 000000000..b4612fbd4 ---- /dev/null -+++ b/memcheck/tests/memmem.stderr.exp -@@ -0,0 +1,2 @@ -+ by 0x........: main (memmem.c:70) -+ by 0x........: main (memmem.c:76) -diff --git a/memcheck/tests/memmem.vgtest b/memcheck/tests/memmem.vgtest -new file mode 100644 -index 000000000..6d12895df ---- /dev/null -+++ b/memcheck/tests/memmem.vgtest -@@ -0,0 +1,3 @@ -+prog: memmem -+vgopts: -q -+stderr_filter: filter_memmem --- -2.18.4 - diff --git a/valgrind.spec b/valgrind.spec index f69b91c..7a4f63b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,14 +2,12 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.19.0 -Release: 4%{?dist} +Version: 3.20.0 +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ -# Only necessary for RHEL, will be ignored on Fedora - # Are we building for a Software Collection? %{?scl:%global is_scl 1} %{!?scl:%global is_scl 0} @@ -85,12 +83,6 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch -# KDE#434764 # iconv_open causes ld.so v2.28+ to execute optimised strncmp -Patch5: valgrind-3.19.0-ld-so-strncmp.patch - -# KDE#454040 s390x: False-positive memcheck:cond in memmem on arch13 systems -Patch6: valgrind-3.19.0-s390x-memmem.patch - BuildRequires: make BuildRequires: glibc-devel @@ -228,9 +220,6 @@ Valgrind User Manual for details. %patch4 -p1 %endif -%patch5 -p1 -%patch6 -p1 - %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -459,6 +448,9 @@ fi %endif %changelog +* Mon Oct 24 2022 Mark Wielaard - 3.20.0-1 +- Upgrade to valgrind 3.20.0. Drop old patches. + * Sat Jul 23 2022 Fedora Release Engineering - 1:3.19.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From d38884287b673917c51d2e9f84a3aa725894f6eb Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 18 Nov 2022 19:55:54 +0100 Subject: [PATCH 113/196] Avoid using implicit int C89 feature Related to: --- valgrind-faultstatus-implicit-int.patch | 17 +++++++++++++++++ valgrind.spec | 8 +++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 valgrind-faultstatus-implicit-int.patch diff --git a/valgrind-faultstatus-implicit-int.patch b/valgrind-faultstatus-implicit-int.patch new file mode 100644 index 0000000..d91a69b --- /dev/null +++ b/valgrind-faultstatus-implicit-int.patch @@ -0,0 +1,17 @@ +Add the missing int, to avoid a compilation failure in strict C99 mode. + +Submitted upstream: + +diff --git a/none/tests/faultstatus.c b/none/tests/faultstatus.c +index 458ea8264593af4e..92a8350ab2285092 100644 +--- a/none/tests/faultstatus.c ++++ b/none/tests/faultstatus.c +@@ -190,7 +190,7 @@ int main() + return 0; + } + +-static volatile s_zero; ++static volatile int s_zero; + + static int zero() + { diff --git a/valgrind.spec b/valgrind.spec index 7a4f63b..bbaab71 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.20.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -83,6 +83,8 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch +Patch5: valgrind-faultstatus-implicit-int.patch + BuildRequires: make BuildRequires: glibc-devel @@ -218,6 +220,7 @@ Valgrind User Manual for details. %if 0%{?fedora} || 0%{?rhel} >= 7 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %endif %build @@ -448,6 +451,9 @@ fi %endif %changelog +* Fri Nov 18 2022 Florian Weimer - 1:3.20.0-2 +- Avoid using implicit int C89 feature + * Mon Oct 24 2022 Mark Wielaard - 3.20.0-1 - Upgrade to valgrind 3.20.0. Drop old patches. From 068f90a1103e523bf4513b9ea53f9d1c27f90eb7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 21 Jan 2023 06:05:56 +0000 Subject: [PATCH 114/196] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index bbaab71..753134d 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.20.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -451,6 +451,9 @@ fi %endif %changelog +* Sat Jan 21 2023 Fedora Release Engineering - 1:3.20.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Fri Nov 18 2022 Florian Weimer - 1:3.20.0-2 - Avoid using implicit int C89 feature From a1bab0364cbca03ddbb9eba67334f88c6445bd8b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 21 Apr 2023 16:07:39 +0200 Subject: [PATCH 115/196] 3.21.0-0.1.RC1 --- .gitignore | 1 + sources | 2 +- valgrind-3.16.0-some-Wl-z-now.patch | 13 ------------- valgrind-3.16.0-some-stack-protector.patch | 13 ------------- valgrind-faultstatus-implicit-int.patch | 17 ----------------- valgrind.spec | 18 +++++++++--------- 6 files changed, 11 insertions(+), 53 deletions(-) delete mode 100644 valgrind-faultstatus-implicit-int.patch diff --git a/.gitignore b/.gitignore index b20bb48..2b388f1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ /valgrind-3.18.1.tar.bz2 /valgrind-3.19.0.tar.bz2 /valgrind-3.20.0.tar.bz2 +/valgrind-3.21.0.RC1.tar.bz2 diff --git a/sources b/sources index 0ba4c2a..3e00af5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.20.0.tar.bz2) = d6bfb9284d0410134ee7e2a5975b13c01508dd5587b562947d8197b3c113b76fdfac88c4072948be68bbf0dbeb17b4d1acb1412ce898adaa83c30ae2c6a1c12b +SHA512 (valgrind-3.21.0.RC1.tar.bz2) = 7c2a3ea34969a94ce221043007f14c7e5d40387dc2e44e28bdede59188a2d4b171e5ea4ce7c761007348bffe4e99265817dedd8cc932e8b94f5055786b418b58 diff --git a/valgrind-3.16.0-some-Wl-z-now.patch b/valgrind-3.16.0-some-Wl-z-now.patch index 79c3662..6231733 100644 --- a/valgrind-3.16.0-some-Wl-z-now.patch +++ b/valgrind-3.16.0-some-Wl-z-now.patch @@ -35,19 +35,6 @@ index 1b7842b..e211eec 100644 if HAVE_DLINFO_RTLD_DI_TLS_MODID getoff_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDADD = $(LDADD) -ldl endif -diff --git a/cachegrind/Makefile.am b/cachegrind/Makefile.am -index f572741..1c07e50 100644 ---- a/cachegrind/Makefile.am -+++ b/cachegrind/Makefile.am -@@ -27,7 +27,7 @@ cg_merge_SOURCES = cg_merge.c - cg_merge_CPPFLAGS = $(AM_CPPFLAGS_PRI) - cg_merge_CFLAGS = $(AM_CFLAGS_PRI) -fstack-protector-strong - cg_merge_CCASFLAGS = $(AM_CCASFLAGS_PRI) --cg_merge_LDFLAGS = $(AM_CFLAGS_PRI) -+cg_merge_LDFLAGS = $(AM_CFLAGS_PRI) -Wl,-z,now - # If there is no secondary platform, and the platforms include x86-darwin, - # then the primary platform must be x86-darwin. Hence: - if ! VGCONF_HAVE_PLATFORM_SEC diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am index 3c73210..fb6b7bb 100644 --- a/coregrind/Makefile.am diff --git a/valgrind-3.16.0-some-stack-protector.patch b/valgrind-3.16.0-some-stack-protector.patch index 324c7d3..b53c465 100644 --- a/valgrind-3.16.0-some-stack-protector.patch +++ b/valgrind-3.16.0-some-stack-protector.patch @@ -35,19 +35,6 @@ index 56cc5ef..1b7842b 100644 getoff_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CCASFLAGS = $(AM_CCASFLAGS_PRI) getoff_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@ if HAVE_DLINFO_RTLD_DI_TLS_MODID -diff --git a/cachegrind/Makefile.am b/cachegrind/Makefile.am -index f8447a1..f572741 100644 ---- a/cachegrind/Makefile.am -+++ b/cachegrind/Makefile.am -@@ -25,7 +25,7 @@ bin_PROGRAMS = cg_merge - - cg_merge_SOURCES = cg_merge.c - cg_merge_CPPFLAGS = $(AM_CPPFLAGS_PRI) --cg_merge_CFLAGS = $(AM_CFLAGS_PRI) -+cg_merge_CFLAGS = $(AM_CFLAGS_PRI) -fstack-protector-strong - cg_merge_CCASFLAGS = $(AM_CCASFLAGS_PRI) - cg_merge_LDFLAGS = $(AM_CFLAGS_PRI) - # If there is no secondary platform, and the platforms include x86-darwin, diff --git a/configure.ac b/configure.ac index f8c798b..ccc8f52 100755 --- a/configure.ac diff --git a/valgrind-faultstatus-implicit-int.patch b/valgrind-faultstatus-implicit-int.patch deleted file mode 100644 index d91a69b..0000000 --- a/valgrind-faultstatus-implicit-int.patch +++ /dev/null @@ -1,17 +0,0 @@ -Add the missing int, to avoid a compilation failure in strict C99 mode. - -Submitted upstream: - -diff --git a/none/tests/faultstatus.c b/none/tests/faultstatus.c -index 458ea8264593af4e..92a8350ab2285092 100644 ---- a/none/tests/faultstatus.c -+++ b/none/tests/faultstatus.c -@@ -190,7 +190,7 @@ int main() - return 0; - } - --static volatile s_zero; -+static volatile int s_zero; - - static int zero() - { diff --git a/valgrind.spec b/valgrind.spec index 753134d..6fbbe76 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.20.0 -Release: 3%{?dist} +Version: 3.21.0 +Release: 0.1.RC1%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -69,7 +69,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -83,8 +83,6 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch -Patch5: valgrind-faultstatus-implicit-int.patch - BuildRequires: make BuildRequires: glibc-devel @@ -211,7 +209,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 %patch1 -p1 %patch2 -p1 @@ -220,7 +218,6 @@ Valgrind User Manual for details. %if 0%{?fedora} || 0%{?rhel} >= 7 %patch3 -p1 %patch4 -p1 -%patch5 -p1 %endif %build @@ -451,8 +448,11 @@ fi %endif %changelog -* Sat Jan 21 2023 Fedora Release Engineering - 1:3.20.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild +* Fri Apr 21 2022 Mark Wielaard - 3.21.0-0.1.RC1 +- Upstream 3.21.0-RC1 +- Remove upstreamed valgrind-faultstatus-implicit-int.patch +- Adjust valgrind-3.16.0-some-{Wl-z-now,stack-protector}.patch + cg_merge is now a pything script. * Fri Nov 18 2022 Florian Weimer - 1:3.20.0-2 - Avoid using implicit int C89 feature From d8356c1fd874dd7b62336961c60013e12718874e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 21 Apr 2023 16:20:40 +0200 Subject: [PATCH 116/196] Fix changelog date --- valgrind.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 6fbbe76..d906ebc 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -448,7 +448,7 @@ fi %endif %changelog -* Fri Apr 21 2022 Mark Wielaard - 3.21.0-0.1.RC1 +* Fri Apr 21 2023 Mark Wielaard - 3.21.0-0.1.RC1 - Upstream 3.21.0-RC1 - Remove upstreamed valgrind-faultstatus-implicit-int.patch - Adjust valgrind-3.16.0-some-{Wl-z-now,stack-protector}.patch From 3ae60e7ef775157031abc548fa4210fb5e8e88eb Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 22 Apr 2023 20:03:04 +0200 Subject: [PATCH 117/196] Upstream 3.21.0-RC2 --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 2b388f1..710e60d 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ /valgrind-3.19.0.tar.bz2 /valgrind-3.20.0.tar.bz2 /valgrind-3.21.0.RC1.tar.bz2 +/valgrind-3.21.0.RC2.tar.bz2 diff --git a/sources b/sources index 3e00af5..5ff7d52 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.21.0.RC1.tar.bz2) = 7c2a3ea34969a94ce221043007f14c7e5d40387dc2e44e28bdede59188a2d4b171e5ea4ce7c761007348bffe4e99265817dedd8cc932e8b94f5055786b418b58 +SHA512 (valgrind-3.21.0.RC2.tar.bz2) = 950f6fafdf49585cade5d7676343158e8fa22d246c657236c8adc33335c1d6bd1b4906099b5969a3484a8261eac1b8dda3183fb98edfc10afd7c07cd3ad493fb diff --git a/valgrind.spec b/valgrind.spec index d906ebc..9ccd89c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 0.1.RC1%{?dist} +Release: 0.1.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -69,7 +69,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -209,7 +209,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 %patch1 -p1 %patch2 -p1 @@ -448,6 +448,9 @@ fi %endif %changelog +* Sat Apr 22 2023 Mark Wielaard - 3.21.0-0.1.RC2 +- Upstream 3.21.0-RC2 + * Fri Apr 21 2023 Mark Wielaard - 3.21.0-0.1.RC1 - Upstream 3.21.0-RC1 - Remove upstreamed valgrind-faultstatus-implicit-int.patch From e25ecae115d50d6e904d45e0bd247176e87cde06 Mon Sep 17 00:00:00 2001 From: Jesus Checa Hidalgo Date: Mon, 24 Apr 2023 16:06:05 +0200 Subject: [PATCH 118/196] rpminspect.yaml: Ignore vgpreload libs for debuginfo inspection --- rpminspect.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rpminspect.yaml b/rpminspect.yaml index e2816ea..0ebee4b 100644 --- a/rpminspect.yaml +++ b/rpminspect.yaml @@ -36,6 +36,14 @@ annocheck: # for the same reason as the standard tools (see above). - /usr/lib*/valgrind/*-*linux.a +debuginfo: + ignore: + # We add the debuginfo to vgpreload libraries because we want to show the + # user exactly where the issue is, which we cannot without always having + # the symtab around. The vgpreload libraries are really tiny, so it doesn't + # have a big impact on the package size. + - /usr/libexec/valgrind/vgpreload*.so + runpath: allowed_paths: # As described above, libmpiwrap is a wrapper against openmpi From a69d34e2871740c08038143007c0d1c2641f30ed Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 28 Apr 2023 18:14:52 +0200 Subject: [PATCH 119/196] Upstream 3.21.0 final --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 710e60d..85a4432 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ /valgrind-3.20.0.tar.bz2 /valgrind-3.21.0.RC1.tar.bz2 /valgrind-3.21.0.RC2.tar.bz2 +/valgrind-3.21.0.tar.bz2 diff --git a/sources b/sources index 5ff7d52..efed6a2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.21.0.RC2.tar.bz2) = 950f6fafdf49585cade5d7676343158e8fa22d246c657236c8adc33335c1d6bd1b4906099b5969a3484a8261eac1b8dda3183fb98edfc10afd7c07cd3ad493fb +SHA512 (valgrind-3.21.0.tar.bz2) = 3e86cda2f2d6cd30807fac7933ba2c46a97a2b4a868db989e6b0cceeadf029af7ee34ba900466a346948289aacb30f4399799bb83b97cc49a4d2d810441e5cfd diff --git a/valgrind.spec b/valgrind.spec index 9ccd89c..ddc7025 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 0.1.RC2%{?dist} +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -69,7 +69,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -209,7 +209,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch1 -p1 %patch2 -p1 @@ -448,6 +448,9 @@ fi %endif %changelog +* Fri Apr 28 2023 Mark Wielaard - 3.21.0-1 +- Upstream 3.21.0 final + * Sat Apr 22 2023 Mark Wielaard - 3.21.0-0.1.RC2 - Upstream 3.21.0-RC2 From 32d01947a3edab15402a35a712f66d9bad637921 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 5 May 2023 17:41:30 +0200 Subject: [PATCH 120/196] 3.21.0-2 - Add valgrind-3.21.0-no-memcpy-replace-check.patch --- valgrind-3.21.0-no-memcpy-replace-check.patch | 13 +++++++++++++ valgrind.spec | 11 ++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.21.0-no-memcpy-replace-check.patch diff --git a/valgrind-3.21.0-no-memcpy-replace-check.patch b/valgrind-3.21.0-no-memcpy-replace-check.patch new file mode 100644 index 0000000..cdb0c0a --- /dev/null +++ b/valgrind-3.21.0-no-memcpy-replace-check.patch @@ -0,0 +1,13 @@ +diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c +index b32f13f76..aa7f88ca2 100644 +--- a/shared/vg_replace_strmem.c ++++ b/shared/vg_replace_strmem.c +@@ -1128,7 +1128,7 @@ static inline void my_exit ( int x ) + MEMMOVE_OR_MEMCPY(20181, soname, fnname, 0) + + #define MEMCPY(soname, fnname) \ +- MEMMOVE_OR_MEMCPY(20180, soname, fnname, 1) ++ MEMMOVE_OR_MEMCPY(20180, soname, fnname, 0) /* See KDE bug #402833 */ + + #if defined(VGO_linux) + /* For older memcpy we have to use memmove-like semantics and skip diff --git a/valgrind.spec b/valgrind.spec index ddc7025..1b2a9ed 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -83,6 +83,10 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch +# Workaround https://bugs.kde.org/show_bug.cgi?id=402833 +# by disabling overlap checking for memcpy +Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch + BuildRequires: make BuildRequires: glibc-devel @@ -220,6 +224,8 @@ Valgrind User Manual for details. %patch4 -p1 %endif +%patch5 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -448,6 +454,9 @@ fi %endif %changelog +* Fri May 5 2023 Mark Wielaard - 3.21.0-2 +- Add valgrind-3.21.0-no-memcpy-replace-check.patch + * Fri Apr 28 2023 Mark Wielaard - 3.21.0-1 - Upstream 3.21.0 final From 7c6f24f04bbf75f029c35e2be2d72046c29a406e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Tue, 16 May 2023 12:54:04 +0200 Subject: [PATCH 121/196] 3.21.0-3 - Add valgrind-3.21.0-Add-with-gdbscripts-dir.patch --- valgrind-3.21.0-Add-with-gdbscripts-dir.patch | 123 ++++++++++++++++++ valgrind.spec | 19 ++- 2 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.21.0-Add-with-gdbscripts-dir.patch diff --git a/valgrind-3.21.0-Add-with-gdbscripts-dir.patch b/valgrind-3.21.0-Add-with-gdbscripts-dir.patch new file mode 100644 index 0000000..5f8b4f9 --- /dev/null +++ b/valgrind-3.21.0-Add-with-gdbscripts-dir.patch @@ -0,0 +1,123 @@ +From e97f7a6cf2315908fb0a9b900f1de87a155c9df1 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sun, 14 May 2023 23:34:05 +0200 +Subject: [PATCH] Add --with-gdbscripts-dir=PATH configure option + +Currently the gdb valgrind scripts are installed under VG_LIBDIR +which is normally pkglibexecdir which is likely not in the default +gdb safe-path (a list of directories from which it is safe to +auto-load files). So users will have to add the directory to their +.gdbinit file. + +This patch adds a --with-gdbscripts-dir=PATH configure option that +sets VG_GDBSCRIPTS_DIR to the given PATH (${libexecdir}/valgrind if +not given). + +Use VG_GDBSCRIPTS_DIR as gdbscriptsdir to install the valgrind-monitor +python files and pass it with CPPFLAGS when building vg_preloaded.c +and vgdb.c to use instead of VG_LIBDIR. +--- + configure.ac | 11 +++++++++++ + coregrind/Makefile.am | 15 ++++++++++----- + coregrind/vg_preloaded.c | 2 +- + coregrind/vgdb.c | 2 +- + 4 files changed, 23 insertions(+), 7 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 15fbf5ea2..223ab4529 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -1198,6 +1198,17 @@ AC_MSG_RESULT([$xcodedir]) + AC_DEFINE_UNQUOTED(XCODE_DIR, "$xcodedir", [xcode sdk include directory]) + AC_SUBST(XCODE_DIR, [$xcodedir])]) + ++#---------------------------------------------------------------------------- ++# Where to install gdb scripts, defaults to VG_LIBDIR (pkglibexecdir) ++#---------------------------------------------------------------------------- ++AC_MSG_CHECKING([where gdb scripts are installed]) ++AC_ARG_WITH(gdbscripts-dir, ++ [ --with-gdbscripts-dir=PATH Specify path to install gdb scripts], ++ [gdbscriptsdir=${withval}], ++ [gdbscriptsdir=${libexecdir}/valgrind]) ++AC_MSG_RESULT([$gdbscriptsdir]) ++AC_SUBST(VG_GDBSCRIPTS_DIR, [$gdbscriptsdir]) ++ + #---------------------------------------------------------------------------- + # Libc and suppressions + #---------------------------------------------------------------------------- +diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am +index 553211782..64d593b08 100644 +--- a/coregrind/Makefile.am ++++ b/coregrind/Makefile.am +@@ -101,7 +101,8 @@ + vgdb_SOURCES += vgdb-invoker-freebsd.c + endif + +-vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) ++vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) \ ++ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" + vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) -fstack-protector-strong + vgdb_CCASFLAGS = $(AM_CCASFLAGS_PRI) + vgdb_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@ -Wl,-z,now +@@ -626,7 +627,8 @@ + + vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c + vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CPPFLAGS = \ +- $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++ $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \ ++ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" + vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CFLAGS = \ + $(AM_CFLAGS_PSO_@VGCONF_PLATFORM_PRI_CAPS@) + vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS = \ +@@ -634,7 +636,8 @@ + if VGCONF_HAVE_PLATFORM_SEC + vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c + vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CPPFLAGS = \ +- $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) ++ $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) \ ++ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" + vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CFLAGS = \ + $(AM_CFLAGS_PSO_@VGCONF_PLATFORM_SEC_CAPS@) + vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS = \ +@@ -766,8 +769,10 @@ + # so as to make sure these get copied into the install tree + vglibdir = $(pkglibexecdir) + vglib_DATA = $(GDBSERVER_XML_FILES) +-vglib_DATA += m_gdbserver/valgrind-monitor.py +-vglib_DATA += m_gdbserver/valgrind-monitor-def.py ++ ++gdbscriptsdir = @VG_GDBSCRIPTS_DIR@ ++gdbscripts_DATA = m_gdbserver/valgrind-monitor.py ++gdbscripts_DATA += m_gdbserver/valgrind-monitor-def.py + + # so as to make sure these get copied into the tarball + EXTRA_DIST += $(GDBSERVER_XML_FILES) +diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c +index d6e05898c..bff76b81b 100644 +--- a/coregrind/vg_preloaded.c ++++ b/coregrind/vg_preloaded.c +@@ -61,7 +61,7 @@ + .popsection \n\ + "); + +-DEFINE_GDB_PY_SCRIPT(VG_LIBDIR "/valgrind-monitor.py") ++DEFINE_GDB_PY_SCRIPT(VG_GDBSCRIPTS_DIR "/valgrind-monitor.py") + #endif + + #if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd) +diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c +index 8ec424077..a449b86e0 100644 +--- a/coregrind/vgdb.c ++++ b/coregrind/vgdb.c +@@ -1984,7 +1984,7 @@ void usage(void) + " -h --help shows this message\n" + " The GDB python code defining GDB front end valgrind commands is:\n %s\n" + " To get help from the Valgrind gdbserver, use vgdb help\n" +-"\n", vgdb_prefix_default(), VG_LIBDIR "/valgrind-monitor.py" ++"\n", vgdb_prefix_default(), VG_GDBSCRIPTS_DIR "/valgrind-monitor.py" + ); + invoker_restrictions_msg(); + } +-- +2.40.0 + diff --git a/valgrind.spec b/valgrind.spec index 1b2a9ed..09b30ff 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -87,6 +87,13 @@ Patch4: valgrind-3.16.0-some-Wl-z-now.patch # by disabling overlap checking for memcpy Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch +# Add --with-gdbscripts-dir=PATH configure option +# https://bugs.kde.org/show_bug.cgi?id=469768 + %patch6 -p1 + + +Patch6: valgrind-3.21.0-Add-with-gdbscripts-dir.patch + BuildRequires: make BuildRequires: glibc-devel @@ -226,6 +233,8 @@ Valgrind User Manual for details. %patch5 -p1 +%patch6 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -294,7 +303,8 @@ export LDFLAGS %configure \ --with-mpicc=%{mpiccpath} \ %{only_arch} \ - GDB=%{_bindir}/gdb + GDB=%{_bindir}/gdb \ + --with-gdbscripts-dir=%{_datadir}/gdb/auto-load %make_build @@ -412,6 +422,8 @@ echo ===============END TESTING=============== # Was disabled in %%install to prevent debuginfo stripping. %attr(0755,root,root) %{_libexecdir}/valgrind/vgpreload*-%{valarch}-*so %{_mandir}/man1/* +%{_datadir}/gdb/auto-load/valgrind-monitor.py +%{_datadir}/gdb/auto-load/valgrind-monitor-def.py %files devel %dir %{_includedir}/valgrind @@ -454,6 +466,9 @@ fi %endif %changelog +* Tue May 16 2023 Alexandra Hájková - 3.21.0-3 +- Add valgrind-3.21.0-Add-with-gdbscripts-dir.patch + * Fri May 5 2023 Mark Wielaard - 3.21.0-2 - Add valgrind-3.21.0-no-memcpy-replace-check.patch From 7baa4ed285bff1b996247d00adb51c7a4a6dd5c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= Date: Tue, 16 May 2023 19:15:11 +0200 Subject: [PATCH 122/196] Fix typo in a spec --- valgrind.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 09b30ff..cc01b92 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -89,9 +89,6 @@ Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch # Add --with-gdbscripts-dir=PATH configure option # https://bugs.kde.org/show_bug.cgi?id=469768 - %patch6 -p1 - - Patch6: valgrind-3.21.0-Add-with-gdbscripts-dir.patch BuildRequires: make From 32e1d63ec37d102390d77c51d7c9cd0989ce7ba0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 May 2023 13:27:11 +0200 Subject: [PATCH 123/196] Add valgrind-3.21.0-epoll_pwait2.patch --- valgrind-3.21.0-epoll_pwait2.patch | 217 +++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 valgrind-3.21.0-epoll_pwait2.patch diff --git a/valgrind-3.21.0-epoll_pwait2.patch b/valgrind-3.21.0-epoll_pwait2.patch new file mode 100644 index 0000000..0a5dd67 --- /dev/null +++ b/valgrind-3.21.0-epoll_pwait2.patch @@ -0,0 +1,217 @@ +From 17f56ab4c4fce7b4778251e1fab2bc50e5c6dbda Mon Sep 17 00:00:00 2001 +From: Olli Vanhoja +Date: Mon, 10 Oct 2022 11:44:22 +0200 +Subject: [PATCH] Add epoll_pwait2 + +The only difference between epoll_pwait and epoll_pwait2 is the +timeout argument. For epoll_pwait2 this is a timespec (which is +always 64bit). + +https://bugs.kde.org/show_bug.cgi?id=460192 +--- + NEWS | 1 + + coregrind/m_syswrap/priv_syswrap-linux.h | 1 + + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-linux.c | 23 ++++++++++++++++++++ + coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + + coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + + coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ + include/vki/vki-scnums-shared-linux.h | 2 ++ + 14 files changed, 45 insertions(+) + +diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h +index a73b6247e..7c9decf5a 100644 +--- a/coregrind/m_syswrap/priv_syswrap-linux.h ++++ b/coregrind/m_syswrap/priv_syswrap-linux.h +@@ -105,6 +105,7 @@ DECL_TEMPLATE(linux, sys_epoll_create1); + DECL_TEMPLATE(linux, sys_epoll_ctl); + DECL_TEMPLATE(linux, sys_epoll_wait); + DECL_TEMPLATE(linux, sys_epoll_pwait); ++DECL_TEMPLATE(linux, sys_epoll_pwait2); + DECL_TEMPLATE(linux, sys_eventfd); + DECL_TEMPLATE(linux, sys_eventfd2); + +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 1aeebd274..008600798 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -883,6 +883,8 @@ static SyscallTableEntry syscall_table[] = { + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 + }; + +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index bca509589..9a7a1e0d2 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1057,6 +1057,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_close_range, sys_close_range), // 436 + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 ++ ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + }; + + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 953236000..6af7bab83 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -837,6 +837,8 @@ static SyscallTableEntry syscall_main_table[] = { + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 + }; + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 26f1fbee3..f8621f8f0 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -2165,6 +2165,29 @@ POST(sys_epoll_pwait) + epoll_post_helper (tid, arrghs, status); + } + ++PRE(sys_epoll_pwait2) ++{ ++ *flags |= SfMayBlock; ++ PRINT("sys_epoll_pwait2 ( %ld, %#" FMT_REGWORD "x, %ld, %#" ++ FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )", ++ SARG1, ARG2, SARG3, ARG4, ARG5, ARG6); ++ PRE_REG_READ6(long, "epoll_pwait2", ++ int, epfd, struct vki_epoll_event *, events, ++ int, maxevents, const struct timespec64 *, timeout, ++ vki_sigset_t *, sigmask, vki_size_t, sigsetsize); ++ /* Assume all (maxevents) events records should be (fully) writable. */ ++ PRE_MEM_WRITE( "epoll_pwait2(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); ++ /* epoll_pwait2 only supports 64bit timespec. */ ++ if (ARG4) ++ pre_read_timespec64(tid, "epoll_pwait2(timeout)", ARG4); ++ if (ARG5) ++ PRE_MEM_READ( "epoll_pwait2(sigmask)", ARG5, sizeof(vki_sigset_t) ); ++} ++POST(sys_epoll_pwait2) ++{ ++ epoll_post_helper (tid, arrghs, status); ++} ++ + PRE(sys_eventfd) + { + PRINT("sys_eventfd ( %" FMT_REGWORD "u )", ARG1); +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index de27998b3..6268a00dd 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1141,6 +1141,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_close_range, sys_close_range), // 436 + + LINX_ (__NR_faccessat2, sys_faccessat2), // 439 ++ ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index 67e7c2c2f..6cdf25893 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -819,6 +819,7 @@ static SyscallTableEntry syscall_main_table[] = { + GENX_ (__NR_clone3, sys_ni_syscall), + LINXY (__NR_close_range, sys_close_range), + LINX_ (__NR_faccessat2, sys_faccessat2), ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), + }; + + SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c +index 9c535c68e..d724cde74 100644 +--- a/coregrind/m_syswrap/syswrap-nanomips-linux.c ++++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c +@@ -828,6 +828,7 @@ static SyscallTableEntry syscall_main_table[] = { + GENX_ (__NR_clone3, sys_ni_syscall), + LINXY (__NR_close_range, sys_close_range), + LINX_ (__NR_faccessat2, sys_faccessat2), ++ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index 12c073027..c0cfef235 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1061,6 +1061,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_close_range, sys_close_range), // 436 + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 ++ ++ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 3c33d1267..f5976f30c 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1030,6 +1030,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_close_range, sys_close_range), // 436 + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 ++ ++ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index a377cb731..afba154e7 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -871,6 +871,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_close_range, sys_close_range), // 436 + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 ++ ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index a9ba15dfe..da4fd8fa2 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1655,6 +1655,8 @@ static SyscallTableEntry syscall_table[] = { + + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + ++ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 + }; + +diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h +index d90cdd312..542382b53 100644 +--- a/include/vki/vki-scnums-shared-linux.h ++++ b/include/vki/vki-scnums-shared-linux.h +@@ -46,6 +46,8 @@ + + #define __NR_faccessat2 439 + ++#define __NR_epoll_pwait2 441 ++ + #define __NR_memfd_secret 447 + + #endif +-- +2.40.1 + From 6f8aeb0d15cc4a6f78ab0ec38b7728245be0102d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 17 May 2023 13:30:49 +0200 Subject: [PATCH 124/196] 3.21.0-4 - Add valgrind-3.21.0-epoll_pwait2.patch --- valgrind.spec | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index cc01b92..49652d8 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -91,6 +91,10 @@ Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch # https://bugs.kde.org/show_bug.cgi?id=469768 Patch6: valgrind-3.21.0-Add-with-gdbscripts-dir.patch +# Add epoll_pwait2 +# https://bugs.kde.org/show_bug.cgi?id=460192 +Patch7: valgrind-3.21.0-epoll_pwait2.patch + BuildRequires: make BuildRequires: glibc-devel @@ -229,8 +233,9 @@ Valgrind User Manual for details. %endif %patch5 -p1 - %patch6 -p1 +%patch7 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -463,6 +468,9 @@ fi %endif %changelog +* Wed May 17 2023 Mark Wielaard - 3.21.0-4 +- Add valgrind-3.21.0-epoll_pwait2.patch + * Tue May 16 2023 Alexandra Hájková - 3.21.0-3 - Add valgrind-3.21.0-Add-with-gdbscripts-dir.patch From 0bfc408a6bee5f0e281f5238508d473df0609fae Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 30 May 2023 18:19:52 +0200 Subject: [PATCH 125/196] 3.21.0-5 - Update valgrind-3.21.0-no-memcpy-replace-check.patch (memcpy_chk) --- valgrind-3.21.0-no-memcpy-replace-check.patch | 11 ++++++++++- valgrind.spec | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/valgrind-3.21.0-no-memcpy-replace-check.patch b/valgrind-3.21.0-no-memcpy-replace-check.patch index cdb0c0a..6e26e04 100644 --- a/valgrind-3.21.0-no-memcpy-replace-check.patch +++ b/valgrind-3.21.0-no-memcpy-replace-check.patch @@ -1,5 +1,5 @@ diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index b32f13f76..aa7f88ca2 100644 +index b32f13f76..464e8d4ca 100644 --- a/shared/vg_replace_strmem.c +++ b/shared/vg_replace_strmem.c @@ -1128,7 +1128,7 @@ static inline void my_exit ( int x ) @@ -11,3 +11,12 @@ index b32f13f76..aa7f88ca2 100644 #if defined(VGO_linux) /* For older memcpy we have to use memmove-like semantics and skip +@@ -1714,8 +1714,6 @@ static inline void my_exit ( int x ) + RECORD_COPY(len); \ + if (len == 0) \ + return dst; \ +- if (is_overlap(dst, src, len, len)) \ +- RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \ + if ( dst > src ) { \ + d = (HChar *)dst + len - 1; \ + s = (const HChar *)src + len - 1; \ diff --git a/valgrind.spec b/valgrind.spec index 49652d8..72e590c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -468,6 +468,9 @@ fi %endif %changelog +* Tue May 30 2023 Mark Wielaard - 3.21.0-5 +- Update valgrind-3.21.0-no-memcpy-replace-check.patch (memcpy_chk) + * Wed May 17 2023 Mark Wielaard - 3.21.0-4 - Add valgrind-3.21.0-epoll_pwait2.patch From f579fefc7548e1c8b538307faff9907c20e90b3d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 1 Jun 2023 18:23:51 +0200 Subject: [PATCH 126/196] Add valgrind-3.21.0-callgrind_control-no-strict.patch --- valgrind-3.21.0-callgrind_control-no-strict.patch | 12 ++++++++++++ valgrind.spec | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 valgrind-3.21.0-callgrind_control-no-strict.patch diff --git a/valgrind-3.21.0-callgrind_control-no-strict.patch b/valgrind-3.21.0-callgrind_control-no-strict.patch new file mode 100644 index 0000000..2aaecd4 --- /dev/null +++ b/valgrind-3.21.0-callgrind_control-no-strict.patch @@ -0,0 +1,12 @@ +diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in +index 083ffa29f..eb50c16ad 100644 +--- a/callgrind/callgrind_control.in ++++ b/callgrind/callgrind_control.in +@@ -22,7 +22,6 @@ + # You should have received a copy of the GNU General Public License + # along with this program; if not, see . + +-use strict; + use warnings; + + use File::Basename; diff --git a/valgrind.spec b/valgrind.spec index 72e590c..83c2e69 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -95,6 +95,10 @@ Patch6: valgrind-3.21.0-Add-with-gdbscripts-dir.patch # https://bugs.kde.org/show_bug.cgi?id=460192 Patch7: valgrind-3.21.0-epoll_pwait2.patch +# Can't run callgrind_control with valgrind 3.21.0 because of perl errors +# https://bugs.kde.org/show_bug.cgi?id=470121 +Patch8: valgrind-3.21.0-callgrind_control-no-strict.patch + BuildRequires: make BuildRequires: glibc-devel @@ -235,6 +239,7 @@ Valgrind User Manual for details. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 %build @@ -468,6 +473,9 @@ fi %endif %changelog +* Thu Jun 1 2023 Mark Wielaard +- Add valgrind-3.21.0-callgrind_control-no-strict.patch + * Tue May 30 2023 Mark Wielaard - 3.21.0-5 - Update valgrind-3.21.0-no-memcpy-replace-check.patch (memcpy_chk) From 446a440b296325ea21dcd72b9909e27dca0138e3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 1 Jun 2023 18:26:07 +0200 Subject: [PATCH 127/196] 3.21.0-6 - Add valgrind-3.21.0-realloc-again.patch --- valgrind-3.21.0-realloc-again.patch | 167 ++++++++++++++++++++++++++++ valgrind.spec | 10 +- 2 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.21.0-realloc-again.patch diff --git a/valgrind-3.21.0-realloc-again.patch b/valgrind-3.21.0-realloc-again.patch new file mode 100644 index 0000000..7501cd2 --- /dev/null +++ b/valgrind-3.21.0-realloc-again.patch @@ -0,0 +1,167 @@ +From b904112d7084227f8d6fab322bc360a8a6240a51 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 1 Jun 2023 16:10:56 +0200 +Subject: [PATCH] memcheck: Handle Err_ReallocSizeZero in MC_(eq_Error) + +When an realloc size zero error is emitted MC_(eq_Error) is called to +see if the errors can be deduplicated. This crashed since +Err_ReallocSizeZero wasn't handled. Handle it like Err_Free. + +Also add a testcase for this case and test with both +--realloc-zero-bytes-frees=yes and +--realloc-zero-bytes-frees=no. +Which will report a different number of errors. + +https://bugs.kde.org/show_bug.cgi?id=470520 +--- + memcheck/mc_errors.c | 1 + + memcheck/tests/Makefile.am | 7 +++++++ + memcheck/tests/realloc_size_zero_again.c | 15 +++++++++++++++ + .../realloc_size_zero_again_no.stderr.exp | 18 ++++++++++++++++++ + .../realloc_size_zero_again_no.stdout.exp | 0 + .../tests/realloc_size_zero_again_no.vgtest | 2 ++ + .../realloc_size_zero_again_yes.stderr.exp | 18 ++++++++++++++++++ + .../realloc_size_zero_again_yes.stdout.exp | 0 + .../tests/realloc_size_zero_again_yes.vgtest | 2 ++ + 9 files changed, 63 insertions(+) + create mode 100644 memcheck/tests/realloc_size_zero_again.c + create mode 100644 memcheck/tests/realloc_size_zero_again_no.stderr.exp + create mode 100644 memcheck/tests/realloc_size_zero_again_no.stdout.exp + create mode 100644 memcheck/tests/realloc_size_zero_again_no.vgtest + create mode 100644 memcheck/tests/realloc_size_zero_again_yes.stderr.exp + create mode 100644 memcheck/tests/realloc_size_zero_again_yes.stdout.exp + create mode 100644 memcheck/tests/realloc_size_zero_again_yes.vgtest + +diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c +index 00d6ec301..65210a220 100644 +--- a/memcheck/mc_errors.c ++++ b/memcheck/mc_errors.c +@@ -1041,6 +1041,7 @@ Bool MC_(eq_Error) ( VgRes res, const Error* e1, const Error* e2 ) + case Err_IllegalMempool: + case Err_Overlap: + case Err_Cond: ++ case Err_ReallocSizeZero: + return True; + + case Err_FishyValue: +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 71c38acba..5a17fd35d 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -291,8 +291,14 @@ EXTRA_DIST = \ + realloc_size_zero.vgtest \ + realloc_size_zero_yes.stderr.exp realloc_size_zero_yes.stdout.exp \ + realloc_size_zero_yes.vgtest \ ++ realloc_size_zero_again_yes.stderr.exp \ ++ realloc_size_zero_again_yes.stdout.exp \ ++ realloc_size_zero_again_yes.vgtest \ + realloc_size_zero_no.stderr.exp realloc_size_zero_no.stdout.exp \ + realloc_size_zero_no.vgtest \ ++ realloc_size_zero_again_no.stderr.exp \ ++ realloc_size_zero_again_no.stdout.exp \ ++ realloc_size_zero_again_no.vgtest \ + realloc_size_zero_off.stderr.exp realloc_size_zero_off.stdout.exp \ + realloc_size_zero_off.vgtest \ + realloc_size_zero_mismatch.stderr.exp \ +@@ -459,6 +465,7 @@ check_PROGRAMS = \ + posix_memalign \ + post-syscall \ + realloc_size_zero realloc_size_zero_mismatch \ ++ realloc_size_zero_again \ + realloc1 realloc2 realloc3 \ + recursive-merge \ + resvn_stack \ +diff --git a/memcheck/tests/realloc_size_zero_again.c b/memcheck/tests/realloc_size_zero_again.c +new file mode 100644 +index 000000000..782d4bde5 +--- /dev/null ++++ b/memcheck/tests/realloc_size_zero_again.c +@@ -0,0 +1,15 @@ ++#include ++ ++int ++main () ++{ ++ char *p = malloc (1024); ++ for (int i = 3; i >= 0; i--) ++ for (int j = 0; j <= 3; j++) ++ { ++ char *q = realloc (p, i * j * 512); ++ p = q; ++ } ++ ++ free (p); ++} +diff --git a/memcheck/tests/realloc_size_zero_again_no.stderr.exp b/memcheck/tests/realloc_size_zero_again_no.stderr.exp +new file mode 100644 +index 000000000..b9c061d1a +--- /dev/null ++++ b/memcheck/tests/realloc_size_zero_again_no.stderr.exp +@@ -0,0 +1,18 @@ ++realloc() with size 0 ++ at 0x........: realloc (vg_replace_malloc.c:...) ++ ... ++ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ ... ++ ++ERROR SUMMARY: 7 errors from 1 contexts (suppressed: 0 from 0) ++ ++7 errors in context 1 of 1: ++realloc() with size 0 ++ at 0x........: realloc (vg_replace_malloc.c:...) ++ ... ++ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ ... ++ ++ERROR SUMMARY: 7 errors from 1 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/realloc_size_zero_again_no.stdout.exp b/memcheck/tests/realloc_size_zero_again_no.stdout.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/realloc_size_zero_again_no.vgtest b/memcheck/tests/realloc_size_zero_again_no.vgtest +new file mode 100644 +index 000000000..f1757b6c1 +--- /dev/null ++++ b/memcheck/tests/realloc_size_zero_again_no.vgtest +@@ -0,0 +1,2 @@ ++prog: realloc_size_zero_again ++vgopts: -q -s --realloc-zero-bytes-frees=no +diff --git a/memcheck/tests/realloc_size_zero_again_yes.stderr.exp b/memcheck/tests/realloc_size_zero_again_yes.stderr.exp +new file mode 100644 +index 000000000..d40aa2455 +--- /dev/null ++++ b/memcheck/tests/realloc_size_zero_again_yes.stderr.exp +@@ -0,0 +1,18 @@ ++realloc() with size 0 ++ at 0x........: realloc (vg_replace_malloc.c:...) ++ ... ++ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ ... ++ ++ERROR SUMMARY: 5 errors from 1 contexts (suppressed: 0 from 0) ++ ++5 errors in context 1 of 1: ++realloc() with size 0 ++ at 0x........: realloc (vg_replace_malloc.c:...) ++ ... ++ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd ++ at 0x........: malloc (vg_replace_malloc.c:...) ++ ... ++ ++ERROR SUMMARY: 5 errors from 1 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/realloc_size_zero_again_yes.stdout.exp b/memcheck/tests/realloc_size_zero_again_yes.stdout.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/realloc_size_zero_again_yes.vgtest b/memcheck/tests/realloc_size_zero_again_yes.vgtest +new file mode 100644 +index 000000000..215392ed6 +--- /dev/null ++++ b/memcheck/tests/realloc_size_zero_again_yes.vgtest +@@ -0,0 +1,2 @@ ++prog: realloc_size_zero_again ++vgopts: -q -s --realloc-zero-bytes-frees=yes +-- +2.40.1 + diff --git a/valgrind.spec b/valgrind.spec index 83c2e69..1d247d8 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -99,6 +99,10 @@ Patch7: valgrind-3.21.0-epoll_pwait2.patch # https://bugs.kde.org/show_bug.cgi?id=470121 Patch8: valgrind-3.21.0-callgrind_control-no-strict.patch +# Multiple realloc zero errors crash in MC_(eq_Error) +# https://bugs.kde.org/show_bug.cgi?id=470520 +Patch9: valgrind-3.21.0-realloc-again.patch + BuildRequires: make BuildRequires: glibc-devel @@ -240,6 +244,7 @@ Valgrind User Manual for details. %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 %build @@ -473,8 +478,9 @@ fi %endif %changelog -* Thu Jun 1 2023 Mark Wielaard +* Thu Jun 1 2023 Mark Wielaard - 3.21.0-6 - Add valgrind-3.21.0-callgrind_control-no-strict.patch +- Add valgrind-3.21.0-realloc-again.patch * Tue May 30 2023 Mark Wielaard - 3.21.0-5 - Update valgrind-3.21.0-no-memcpy-replace-check.patch (memcpy_chk) From f4018eb5a636428100cf472c0d570abc101f81c2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 22 Jun 2023 18:47:52 +0200 Subject: [PATCH 128/196] Add valgrind-3.21.0-vgm.patch and valgrind-3.21.0-vgm-tests.patch --- valgrind-3.21.0-vgm-tests.patch | 105 ++++++++++++++++++++++++++++++++ valgrind-3.21.0-vgm.patch | 99 ++++++++++++++++++++++++++++++ valgrind.spec | 10 +++ 3 files changed, 214 insertions(+) create mode 100644 valgrind-3.21.0-vgm-tests.patch create mode 100644 valgrind-3.21.0-vgm.patch diff --git a/valgrind-3.21.0-vgm-tests.patch b/valgrind-3.21.0-vgm-tests.patch new file mode 100644 index 0000000..8fa7712 --- /dev/null +++ b/valgrind-3.21.0-vgm-tests.patch @@ -0,0 +1,105 @@ +From 21f7a2af2805a02a144c81f12895c134f4a171a3 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 22 May 2023 19:49:08 +0200 +Subject: [PATCH 2/2] Bug 470132 - s390x: Increase test coverage for VGM + +Add more tests for the VGM instruction, to verify the fix for the VGM +wrap-around case. Also test setting unused bits in the I2 and I3 fields, +to check that Valgrind ignores them as it should. +--- + none/tests/s390x/vec2.c | 44 ++++++++++++++++++++++++++++++++ + none/tests/s390x/vec2.stdout.exp | 20 +++++++++++++++ + 2 files changed, 64 insertions(+) + +diff --git a/none/tests/s390x/vec2.c b/none/tests/s390x/vec2.c +index 73b04dee4..c473a2a9a 100644 +--- a/none/tests/s390x/vec2.c ++++ b/none/tests/s390x/vec2.c +@@ -301,6 +301,49 @@ static void test_all_fp_int_conversions() + #undef TEST_EXEC + #undef TEST_GENERATE + ++/* -- Vector generate mask -- */ ++ ++#define TEST_GENERATE(insn, i2, i3, m4) \ ++ static void test_vgm_##i2##_##i3##_##m4(void) \ ++ { \ ++ ulong_v out = vec_ini; \ ++ __asm__("vgm %[out]," #i2 "," #i3 "," #m4 : [out] "+v"(out) : :); \ ++ printf("\t%016lx %016lx\n", out[0], out[1]); \ ++ } ++ ++#define TEST_EXEC(insn, i2, i3, m4) \ ++ do { \ ++ puts(#insn " " #i2 "," #i3 "," #m4); \ ++ test_vgm_##i2##_##i3##_##m4(); \ ++ } while (0) ++ ++#define INSNS \ ++ XTEST(vgmb, 2, 1, 0); \ ++ XTEST(vgmb, 0xf7, 0x30, 0); \ ++ XTEST(vgmb, 0, 0, 0); \ ++ XTEST(vgmh, 3, 2, 1); \ ++ XTEST(vgmh, 15, 15, 1); \ ++ XTEST(vgmf, 4, 3, 2); \ ++ XTEST(vgmf, 16, 17, 2); \ ++ XTEST(vgmg, 55, 63, 3); \ ++ XTEST(vgmg, 43, 55, 3); \ ++ XTEST(vgmg, 63, 2, 3); ++ ++#define XTEST TEST_GENERATE ++INSNS ++#undef XTEST ++ ++static void test_all_generate_mask() ++{ ++#define XTEST TEST_EXEC ++ INSNS ++#undef XTEST ++} ++ ++#undef INSNS ++#undef TEST_EXEC ++#undef TEST_GENERATE ++ + + int main() + { +@@ -310,5 +353,6 @@ int main() + test_all_double_bitshifts(); + test_all_int_fp_conversions(); + test_all_fp_int_conversions(); ++ test_all_generate_mask(); + return 0; + } +diff --git a/none/tests/s390x/vec2.stdout.exp b/none/tests/s390x/vec2.stdout.exp +index b32cbe1bc..2c9ac21c1 100644 +--- a/none/tests/s390x/vec2.stdout.exp ++++ b/none/tests/s390x/vec2.stdout.exp +@@ -166,3 +166,23 @@ vcsfp 0 + vcsfp 8 + 00ffffff - - - + 00000004 - - - ++vgmb 2,1,0 ++ ffffffffffffffff ffffffffffffffff ++vgmb 0xf7,0x30,0 ++ 8181818181818181 8181818181818181 ++vgmb 0,0,0 ++ 8080808080808080 8080808080808080 ++vgmh 3,2,1 ++ ffffffffffffffff ffffffffffffffff ++vgmh 15,15,1 ++ 0001000100010001 0001000100010001 ++vgmf 4,3,2 ++ ffffffffffffffff ffffffffffffffff ++vgmf 16,17,2 ++ 0000c0000000c000 0000c0000000c000 ++vgmg 55,63,3 ++ 00000000000001ff 00000000000001ff ++vgmg 43,55,3 ++ 00000000001fff00 00000000001fff00 ++vgmg 63,2,3 ++ e000000000000001 e000000000000001 +-- +2.40.1 + diff --git a/valgrind-3.21.0-vgm.patch b/valgrind-3.21.0-vgm.patch new file mode 100644 index 0000000..422035f --- /dev/null +++ b/valgrind-3.21.0-vgm.patch @@ -0,0 +1,99 @@ +From 70ef4417837b690755feede0088331a28b102c65 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Mon, 22 May 2023 18:57:35 +0200 +Subject: [PATCH 1/2] Bug 470132 - s390x: Fix the wrap-around case in VGM + +Valgrind's implementation of VGM is incomplete: + +* It doesn't support generating a wrap-around bit mask. Such a mask + should result when the ending bit position is smaller than the starting + bit position. Valgrind runs into an assertion failure instead. + +* It doesn't ignore unused bits in the I2 and I3 fields of the + instruction, as it should. + +Fix this by re-implementing the main logic in s390_irgen_VGM(). +--- + VEX/priv/guest_s390_toIR.c | 57 +++++++++++++++----------------------- + 1 file changed, 22 insertions(+), 35 deletions(-) + +diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c +index 11dda41ef..d9d746c38 100644 +--- a/VEX/priv/guest_s390_toIR.c ++++ b/VEX/priv/guest_s390_toIR.c +@@ -16388,50 +16388,37 @@ s390_irgen_VGBM(UChar v1, UShort i2, UChar m3 __attribute__((unused))) + static const HChar * + s390_irgen_VGM(UChar v1, UShort i2, UChar m3) + { +- UChar from = (i2 & 0xff00) >> 8; +- UChar to = (i2 & 0x00ff); +- ULong value = 0UL; +- IRType type = s390_vr_get_type(m3); +- vassert(from <= to); +- +- UChar maxIndex = 0; +- switch (type) { +- case Ity_I8: +- maxIndex = 7; +- break; +- case Ity_I16: +- maxIndex = 15; +- break; +- case Ity_I32: +- maxIndex = 31; +- break; +- case Ity_I64: +- maxIndex = 63; +- break; +- default: +- vpanic("s390_irgen_VGM: unknown type"); +- } +- +- for(UChar index = from; index <= to; index++) { +- value |= (1ULL << (maxIndex - index)); +- } +- +- IRExpr *fillValue; +- switch (type) { +- case Ity_I8: ++ s390_insn_assert("vgm", m3 <= 3); ++ ++ UChar max_idx = (8 << m3) - 1; ++ UChar from = max_idx & (i2 >> 8); ++ UChar to = max_idx & i2; ++ ULong all_one = (1ULL << max_idx << 1) - 1; ++ ULong value = (all_one >> from) ^ (all_one >> to >> 1); ++ ++ /* In case of wrap-around we now have a value that needs inverting: ++ to from ++ V V ++ 00000111111111110000000000000000 */ ++ if (to < from) ++ value ^= all_one; ++ ++ IRExpr* fillValue; ++ switch (m3) { ++ case 0: + fillValue = mkU8(value); + break; +- case Ity_I16: ++ case 1: + fillValue = mkU16(value); + break; +- case Ity_I32: ++ case 2: + fillValue = mkU32(value); + break; +- case Ity_I64: ++ case 3: + fillValue = mkU64(value); + break; + default: +- vpanic("s390_irgen_VGM: unknown type"); ++ vpanic("s390_irgen_VGM: unknown element size"); + } + + s390_vr_fill(v1, fillValue); +-- +2.40.1 + diff --git a/valgrind.spec b/valgrind.spec index 1d247d8..4db5319 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -103,6 +103,11 @@ Patch8: valgrind-3.21.0-callgrind_control-no-strict.patch # https://bugs.kde.org/show_bug.cgi?id=470520 Patch9: valgrind-3.21.0-realloc-again.patch +# s390x: Assertion failure on VGM instruction +# https://bugs.kde.org/show_bug.cgi?id=470132 +Patch10: valgrind-3.21.0-vgm.patch +Patch11: valgrind-3.21.0-vgm-tests.patch + BuildRequires: make BuildRequires: glibc-devel @@ -245,6 +250,8 @@ Valgrind User Manual for details. %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 +%patch11 -p1 %build @@ -478,6 +485,9 @@ fi %endif %changelog +* Thu Jun 22 2023 Mark Wielaard +- Add valgrind-3.21.0-vgm.patch and valgrind-3.21.0-vgm-tests.patch + * Thu Jun 1 2023 Mark Wielaard - 3.21.0-6 - Add valgrind-3.21.0-callgrind_control-no-strict.patch - Add valgrind-3.21.0-realloc-again.patch From ff531b85fd73bb3177c6a36f1e1b654913ebf641 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 22 Jun 2023 18:53:12 +0200 Subject: [PATCH 129/196] 3.21.0-7 - Add valgrind-3.21.0-pgste.patch --- valgrind-3.21.0-pgste.patch | 73 +++++++++++++++++++++++++++++++++++++ valgrind.spec | 10 ++++- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.21.0-pgste.patch diff --git a/valgrind-3.21.0-pgste.patch b/valgrind-3.21.0-pgste.patch new file mode 100644 index 0000000..4646aa2 --- /dev/null +++ b/valgrind-3.21.0-pgste.patch @@ -0,0 +1,73 @@ +From 56f1bd12c92806fd18337ba4cd3c0a8d714d0e94 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Thu, 15 Jun 2023 17:24:53 +0200 +Subject: [PATCH] Bug 470978 - s390x: Link the tools with -Wl,--s390-pgste + +Programs that require the PGSTE mode to be enabled may currently fail +under Valgrind. In particular this affects qemu-kvm. + +While it is also possible to enable the PGSTE mode globally with + + sysctl vm.allocate_psgte=1 + +the problem can more easily be prevented by linking the Valgrind tools +with -Wl,--s390-pgste. Add a configure check if the linker supports this, +and activate the flag if it does. + +To verify the intended result, the following shell command can be used to +list the executables having this flag set: + + find . -type f -perm -u+x -execdir \ + /bin/sh -c 'readelf -lW $0 2>/dev/null | grep PGSTE' {} \; -print +--- + Makefile.tool.am | 2 +- + configure.ac | 20 ++++++++++++++++++++ + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/Makefile.tool.am b/Makefile.tool.am +index df9502913..4ce6d5ab0 100644 +--- a/Makefile.tool.am ++++ b/Makefile.tool.am +@@ -78,7 +78,7 @@ TOOL_LDFLAGS_ARM64_LINUX = \ + $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ + + TOOL_LDFLAGS_S390X_LINUX = \ +- $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ @FLAG_S390_PGSTE@ + + TOOL_LDFLAGS_X86_DARWIN = \ + $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 +diff --git a/configure.ac b/configure.ac +index 0cf84a1c0..1d4164a7d 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -3096,6 +3096,26 @@ AC_SUBST([FLAG_NO_BUILD_ID], [""]) + fi + CFLAGS=$safe_CFLAGS + ++# On s390x, if the linker supports -Wl,--s390-pgste, then we build the ++# tools with that flag. This enables running programs that need it, such ++# as qemu-kvm. ++if test x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX; then ++AC_MSG_CHECKING([if the linker accepts -Wl,--s390-pgste]) ++safe_CFLAGS=$CFLAGS ++CFLAGS="-Wl,--s390-pgste" ++ ++AC_LINK_IFELSE( ++[AC_LANG_PROGRAM([ ], [return 0;])], ++[ ++ AC_SUBST([FLAG_S390_PGSTE], ["-Wl,--s390-pgste"]) ++ AC_MSG_RESULT([yes]) ++], [ ++ AC_SUBST([FLAG_S390_PGSTE], [""]) ++ AC_MSG_RESULT([no]) ++]) ++CFLAGS=$safe_CFLAGS ++fi ++ + # does the ppc assembler support "mtocrf" et al? + AC_MSG_CHECKING([if ppc32/64 as supports mtocrf/mfocrf]) + +-- +2.40.1 + diff --git a/valgrind.spec b/valgrind.spec index 4db5319..8b7cce4 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -108,6 +108,10 @@ Patch9: valgrind-3.21.0-realloc-again.patch Patch10: valgrind-3.21.0-vgm.patch Patch11: valgrind-3.21.0-vgm-tests.patch +# s390x: Valgrind cannot start qemu-kvm when "sysctl vm.allocate_pgste=0" +# https://bugs.kde.org/show_bug.cgi?id=470978 +Patch12: valgrind-3.21.0-pgste.patch + BuildRequires: make BuildRequires: glibc-devel @@ -252,6 +256,7 @@ Valgrind User Manual for details. %patch9 -p1 %patch10 -p1 %patch11 -p1 +%patch12 -p1 %build @@ -485,8 +490,9 @@ fi %endif %changelog -* Thu Jun 22 2023 Mark Wielaard +* Thu Jun 22 2023 Mark Wielaard - 3.21.0-7 - Add valgrind-3.21.0-vgm.patch and valgrind-3.21.0-vgm-tests.patch +- Add valgrind-3.21.0-pgste.patch * Thu Jun 1 2023 Mark Wielaard - 3.21.0-6 - Add valgrind-3.21.0-callgrind_control-no-strict.patch From 2cb3825159a26b1a0290fefa0a48abee2a18de1e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jul 2023 17:24:46 +0000 Subject: [PATCH 130/196] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 8b7cce4..9a4afcc 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -490,6 +490,9 @@ fi %endif %changelog +* Sat Jul 22 2023 Fedora Release Engineering - 1:3.21.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Thu Jun 22 2023 Mark Wielaard - 3.21.0-7 - Add valgrind-3.21.0-vgm.patch and valgrind-3.21.0-vgm-tests.patch - Add valgrind-3.21.0-pgste.patch From d80baf58dc4b79afc1adbab9d132057b849c2a4d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 17 Aug 2023 16:17:56 +0200 Subject: [PATCH 131/196] Add valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch --- ...ti-mode-stdout-redirecting-to-stderr.patch | 85 +++++++++++++++++++ valgrind.spec | 8 ++ 2 files changed, 93 insertions(+) create mode 100644 valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch diff --git a/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch b/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch new file mode 100644 index 0000000..92d97d0 --- /dev/null +++ b/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch @@ -0,0 +1,85 @@ +From 449dd82becae6533a8e658e76f30f65434f6417f Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Thu, 17 Aug 2023 15:40:30 +0200 +Subject: [PATCH] gdb --multi mode stdout redirecting to stderr + +When in stdio mode (talking to gdb through stdin/stdout, not +through a socket), redirect stdout to stderr and close stdin +for the inferior. That way at least some output can be seen, +but there will be no input. + +This is workaround till we have real terminal handling. + + * coregrind/vgdb.c (main): Pass in_port to do_multi_mode. + (do_multi_mode): Pass in_port to fork_and_exec_valgrind. + (fork_and_exec_valgrind): Close stdin, redirect stdout to + stderr if in_port <= 0. + +https://bugs.kde.org/show_bug.cgi?id=471311 +--- + NEWS | 1 + + coregrind/vgdb.c | 20 +++++++++++++++++--- + 2 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c +index 56a969de7..c024ffca6 100644 +--- a/coregrind/vgdb.c ++++ b/coregrind/vgdb.c +@@ -1159,7 +1159,7 @@ static void gdb_relay(int pid, int send_noack_mode, char *q_buf); + or the errno from the child on failure. */ + static + int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, +- pid_t *pid) ++ int in_port, pid_t *pid) + { + int err = 0; + // We will use a pipe to track what the child does, +@@ -1243,6 +1243,19 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, + } + } + ++ /* When in stdio mode (talking to gdb through stdin/stdout, not ++ through a socket), redirect stdout to stderr and close stdin ++ for the inferior. That way at least some output can be seen, ++ but there will be no input. */ ++ if (in_port <= 0) { ++ /* close stdin */ ++ close (0); ++ /* open /dev/null as new stdin */ ++ open ("/dev/null", O_RDONLY); ++ /* redirect stdout as stderr */ ++ dup2 (2, 1); ++ } ++ + /* Try to launch valgrind. Add --vgdb-error=0 to stop immediately so we + can attach and --launched-with-multi to let valgrind know it doesn't + need to show a banner how to connect to gdb, we will do that +@@ -1309,7 +1322,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, + + /* Do multi stuff. */ + static +-void do_multi_mode(int check_trials) ++void do_multi_mode(int check_trials, int in_port) + { + char *buf = vmalloc(PBUFSIZ+1); + char *q_buf = vmalloc(PBUFSIZ+1); //save the qSupported packet sent by gdb +@@ -1459,6 +1472,7 @@ void do_multi_mode(int check_trials) + int res = fork_and_exec_valgrind (count, + decoded_string, + working_dir, ++ in_port, + &valgrind_pid); + + if (res == 0) { +@@ -2427,7 +2441,7 @@ int main(int argc, char** argv) + if (multi_mode) { + /* check_trails is the --wait argument in seconds, defaulting to 1 + * if not given. */ +- do_multi_mode (check_trials); ++ do_multi_mode (check_trials, in_port); + } else if (last_command >= 0) { + standalone_send_commands(pid, last_command, commands); + } else { +-- +2.41.0 + diff --git a/valgrind.spec b/valgrind.spec index 9a4afcc..51546bc 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -112,6 +112,10 @@ Patch11: valgrind-3.21.0-vgm-tests.patch # https://bugs.kde.org/show_bug.cgi?id=470978 Patch12: valgrind-3.21.0-pgste.patch +# gdb --multi mode stdout redirecting to stderr +# https://bugs.kde.org/show_bug.cgi?id=471311 +Patch13: valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch + BuildRequires: make BuildRequires: glibc-devel @@ -257,6 +261,7 @@ Valgrind User Manual for details. %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 %build @@ -490,6 +495,9 @@ fi %endif %changelog +* Thu Aug 17 2023 Mark Wielaard +- Add valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch + * Sat Jul 22 2023 Fedora Release Engineering - 1:3.21.0-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From d20757b5fd28e3ce84e64522c6e3a042e8a98bbc Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 17 Aug 2023 16:24:09 +0200 Subject: [PATCH 132/196] 3.21.0-9 - Use %%patch -Pn instead of deprecated %%patchn --- valgrind.spec | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 51546bc..c9b719f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 8%{?dist} +Release: 9%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -244,24 +244,24 @@ Valgrind User Manual for details. %prep %setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} -%patch1 -p1 -%patch2 -p1 +%patch -P1 -p1 +%patch -P2 -p1 # Old rhel gcc doesn't have -fstack-protector-strong. %if 0%{?fedora} || 0%{?rhel} >= 7 -%patch3 -p1 -%patch4 -p1 +%patch -P3 -p1 +%patch -P4 -p1 %endif -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P12 -p1 +%patch -P13 -p1 %build @@ -495,8 +495,9 @@ fi %endif %changelog -* Thu Aug 17 2023 Mark Wielaard +* Thu Aug 17 2023 Mark Wielaard - 3.21.0-9 - Add valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch +- Use %%patch -Pn instead of deprecated %%patchn * Sat Jul 22 2023 Fedora Release Engineering - 1:3.21.0-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From 35cf45d805b3c8e220f20c0b366c68e6cdb92bf0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 21 Aug 2023 14:19:00 +0200 Subject: [PATCH 133/196] 3.21.0-10 lazy debuginfo loading - Add valgrind-3.21.0-lazy-debuginfo.patch - Add valgrind-3.21.0-cleanup-read_elf_object.patch --- valgrind-3.21.0-cleanup-read_elf_object.patch | 58 ++ valgrind-3.21.0-lazy-debuginfo.patch | 850 ++++++++++++++++++ valgrind.spec | 14 +- 3 files changed, 921 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.21.0-cleanup-read_elf_object.patch create mode 100644 valgrind-3.21.0-lazy-debuginfo.patch diff --git a/valgrind-3.21.0-cleanup-read_elf_object.patch b/valgrind-3.21.0-cleanup-read_elf_object.patch new file mode 100644 index 0000000..c81ca94 --- /dev/null +++ b/valgrind-3.21.0-cleanup-read_elf_object.patch @@ -0,0 +1,58 @@ +From a0d555a0dfe078ef04ea49d991a8090ab14bd4a5 Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Sat, 19 Aug 2023 21:37:33 +0200 +Subject: [PATCH] Always cleanup on exit from ML_(read_elf_object) + +I'm still a but baffled as to why this wasn't seen earlier. +A FreeBSD testcase started failing with kernel 13.2 patch 2, +which is quite a minor change. The testcase gets an fd from +pdfork and the parent does a printf with the fd then zaps the +process with pdkill. Standalone the fd is 3, and that's what +the expected contains. However, when it started failing I saw +with lsof that fds 3 and 4 were associated with the guest exe +and ld-elf.so.1. +--- + coregrind/m_debuginfo/readelf.c | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index f99d3dfd2..ac72f98fb 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -1916,6 +1916,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) + Word i, j; + Bool dynbss_present = False; + Bool sdynbss_present = False; ++ Bool retval = False; + + /* Image for the main ELF file we're working with. */ + DiImage* mimg = NULL; +@@ -2944,19 +2945,16 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) + } + } + +- return True; ++ retval = True; + +- out: +- { +- /* Last, but not least, detach from the image. */ +- if (mimg) ML_(img_done)(mimg); ++ out: + +- if (svma_ranges) VG_(deleteXA)(svma_ranges); ++ /* Last, but not least, detach from the image. */ ++ if (mimg) ML_(img_done)(mimg); + +- return False; +- } /* out: */ ++ if (svma_ranges) VG_(deleteXA)(svma_ranges); + +- /* NOTREACHED */ ++ return retval; + } + + Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) +-- +2.41.0 + diff --git a/valgrind-3.21.0-lazy-debuginfo.patch b/valgrind-3.21.0-lazy-debuginfo.patch new file mode 100644 index 0000000..6500abc --- /dev/null +++ b/valgrind-3.21.0-lazy-debuginfo.patch @@ -0,0 +1,850 @@ +From 60f7e89ba32b54d73b9e36d49e28d0f559ade0b9 Mon Sep 17 00:00:00 2001 +From: Aaron Merey +Date: Fri, 30 Jun 2023 18:31:42 -0400 +Subject: [PATCH] Support lazy reading and downloading of DWARF debuginfo + +Currently valgrind attempts to read DWARF .debug_* sections as well +as separate debuginfo files for ELF binaries as soon as a shared library +is loaded. This might also result in the downloading of separate debuginfo +files via debuginfod. + +This is inefficient when some of this debuginfo never ends up being used +by valgrind while running the client process. + +This patch adds support for lazy reading and downloading of DWARF +debuginfo. When an ELF shared library is loaded, the reading of .debug_* +sections as well as separate or alternate debuginfo is deferred until +valgrind handles an instruction pointer corresponding to a text segment +of the shared library. At this point the deferred sections and separate +debug files are loaded. + +This feature is only supported on ELF platforms. + +https://bugs.kde.org/show_bug.cgi?id=471807 + +ChangeLog + * debuginfo.c (di_notify_ACHIEVE_ACCEPT_STATE): Replace + read_elf_debug_info with read_elf_object. + (addr_load_di): New function. Attempts to load deferred debuginfo + associated with a given address. + (load_di): New function. Attempts to load a given deferred + debuginfo associated with a given address. + (describe_IP): Add calls to load_di and addr_load_di. + (find_DiCfSI): Add call to load_di. + + * priv_readelf.h (read_elf_object): New declaration. + (read_elf_debug): Ditto. + + * priv_storage.h (struct _DebugInfo): New field 'bool deferred'. + + * readelf.c (read_elf_debug_info): Split into read_elf_object and + read_elf_debug. + (read_elf_object): Read non .debug_* section from an ELF binary. + (read_elf_debug): Read .debug_* sections from an ELF binary as + as well any separate/alternate debuginfo files. + + * storage.c (canonicaliseSymtab): Remove assert in order to support + canonicalization of deferred _DebugInfo. + (finish_CFSI_arrays): Add early return if _DebugInfo is + deferred in order to avoid freeing memory that will be needed + when reading debuginfo at a later time. + (canonicaliseTables): Ditto. + + * pub_core_debuginfo.h (addr_load_di): New declaration. + (load_di): New declaration. +--- + NEWS | 1 + + coregrind/m_debuginfo/debuginfo.c | 57 +++- + coregrind/m_debuginfo/priv_readelf.h | 24 +- + coregrind/m_debuginfo/priv_storage.h | 7 + + coregrind/m_debuginfo/readelf.c | 437 ++++++++++++++++++--------- + coregrind/m_debuginfo/storage.c | 13 +- + coregrind/pub_core_debuginfo.h | 4 + + 7 files changed, 379 insertions(+), 164 deletions(-) + +diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c +index 22b41def2..8d1fdc696 100644 +--- a/coregrind/m_debuginfo/debuginfo.c ++++ b/coregrind/m_debuginfo/debuginfo.c +@@ -959,14 +959,16 @@ static ULong di_notify_ACHIEVE_ACCEPT_STATE ( struct _DebugInfo* di ) + discard_DebugInfos_which_overlap_with( di ); + + /* The DebugInfoMappings that now exist in the FSM may involve +- overlaps. This confuses ML_(read_elf_debug_info), and may cause ++ overlaps. This confuses ML_(read_elf_*), and may cause + it to compute wrong biases. So de-overlap them now. + See http://bugzilla.mozilla.org/show_bug.cgi?id=788974 */ + truncate_DebugInfoMapping_overlaps( di, di->fsm.maps ); + + /* And acquire new info. */ + # if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd) +- ok = ML_(read_elf_debug_info)( di ); ++ ok = ML_(read_elf_object)( di ); ++ if (ok) ++ di->deferred = True; + # elif defined(VGO_darwin) + ok = ML_(read_macho_debug_info)( di ); + # else +@@ -1443,6 +1445,50 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd ) + } + } + ++/* Load DI if it has a text segment containing A and DI hasn't already ++ been loaded. */ ++ ++void VG_(load_di)( DebugInfo *di, Addr a) ++{ ++ if (!di->deferred ++ || !di->text_present ++ || di->text_size <= 0 ++ || di->text_avma > a ++ || a >= di->text_avma + di->text_size) ++ return; ++ ++ di->deferred = False; ++ ML_(read_elf_debug) (di); ++ ML_(canonicaliseTables)( di ); ++ ++ /* Check invariants listed in ++ Comment_on_IMPORTANT_REPRESENTATIONAL_INVARIANTS in ++ priv_storage.h. */ ++ check_CFSI_related_invariants(di); ++ ML_(finish_CFSI_arrays)(di); ++} ++ ++/* Attempt to load DebugInfo with a text segment containing A, ++ if such a debuginfo hasn't already been loaded. */ ++ ++void VG_(addr_load_di)( Addr a ) ++{ ++ DebugInfo *di; ++ ++ di = VG_(find_DebugInfo)(VG_(current_DiEpoch)(), a); ++ if (di != NULL) ++ if (di->deferred) { ++ di->deferred = False; ++ ML_(read_elf_debug) (di); ++ ML_(canonicaliseTables)( di ); ++ ++ /* Check invariants listed in ++ Comment_on_IMPORTANT_REPRESENTATIONAL_INVARIANTS in ++ priv_storage.h. */ ++ check_CFSI_related_invariants(di); ++ ML_(finish_CFSI_arrays)(di); ++ } ++} + + /* Unmap is simpler - throw away any SegInfos intersecting + [a, a+len). */ +@@ -2746,6 +2792,11 @@ const HChar* VG_(describe_IP)(DiEpoch ep, Addr eip, const InlIPCursor *iipc) + Bool know_objname; + Bool know_srcloc; + ++ if (iipc && iipc->di) ++ VG_(load_di) (iipc->di, eip); ++ else ++ VG_(addr_load_di) (eip); ++ + if (is_bottom(iipc)) { + // At the bottom (towards main), we describe the fn at eip. + know_fnname = VG_(clo_sym_offsets) +@@ -3090,6 +3141,8 @@ static void find_DiCfSI ( /*OUT*/DebugInfo** diP, + if (!is_DI_valid_for_epoch(di, curr_epoch)) + continue; + ++ VG_(load_di)(di, ip); ++ + /* Use the per-DebugInfo summary address ranges to skip + inapplicable DebugInfos quickly. */ + if (di->cfsi_used == 0) +diff --git a/coregrind/m_debuginfo/priv_readelf.h b/coregrind/m_debuginfo/priv_readelf.h +index 57aa0cc3f..7e0fa17c9 100644 +--- a/coregrind/m_debuginfo/priv_readelf.h ++++ b/coregrind/m_debuginfo/priv_readelf.h +@@ -44,13 +44,23 @@ + extern Bool ML_(is_elf_object_file)( const void* image, SizeT n_image, + Bool rel_ok ); + +-/* The central function for reading ELF debug info. For the +- object/exe specified by the SegInfo, find ELF sections, then read +- the symbols, line number info, file name info, CFA (stack-unwind +- info) and anything else we want, into the tables within the +- supplied SegInfo. +-*/ +-extern Bool ML_(read_elf_debug_info) ( DebugInfo* di ); ++/* Read the ELF binary specified by DI. For the object/exe specified ++ by the SegInfo, find ELF sections, then read the symbols, line number ++ info, file name info, CFA (stack-unwind info) and anything else we ++ want, into the tables within the supplied SegInfo. ++ ++ .debug_* sections as well as any separate debuginfo files are not ++ loaded by this function but instead by ML_(read_elf_debug). This ++ separation facilitates lazy loading of debuginfo. */ ++extern Bool ML_(read_elf_object) ( DebugInfo* di ); ++ ++/* Read .debug_* sections from the ELF binary specified by DI. Also ++ attempt to load any separate debuginfo files associated with the ++ object. ++ ++ ML_(read_elf_object) should be called on DI before calling this ++ function. */ ++extern Bool ML_(read_elf_debug) ( DebugInfo* di ); + + extern Bool ML_(check_elf_and_get_rw_loads) ( Int fd, const HChar* filename, Int * rw_load_count ); + +diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h +index a4b90d36b..b959873ab 100644 +--- a/coregrind/m_debuginfo/priv_storage.h ++++ b/coregrind/m_debuginfo/priv_storage.h +@@ -678,6 +678,13 @@ struct _DebugInfo { + invalid and should not be consulted. */ + Bool have_dinfo; /* initially False */ + ++ /* If true then the reading of .debug_* section has been deferred ++ until it this information is required (such as when printing ++ a stacktrace). Additionally, if true then the reading of any ++ separate debuginfo files associated with this object has also ++ been deferred. */ ++ Bool deferred; ++ + /* All the rest of the fields in this structure are filled in once + we have committed to reading the symbols and debug info (that + is, at the point where .have_dinfo is set to True). */ +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index ce7b7998d..f99d3dfd2 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -1836,6 +1836,44 @@ static HChar* readlink_path (const HChar *path) + return buf; + } + ++#define FINDX_MIMG(_sec_name, _sec_escn, _post_fx) \ ++ do { \ ++ ElfXX_Shdr a_shdr; \ ++ ML_(img_get)(&a_shdr, mimg, \ ++ INDEX_BIS(shdr_mioff, i, shdr_ment_szB), \ ++ sizeof(a_shdr)); \ ++ if (0 == ML_(img_strcmp_c)(mimg, shdr_strtab_mioff \ ++ + a_shdr.sh_name, _sec_name)) { \ ++ Bool nobits; \ ++ _sec_escn.img = mimg; \ ++ _sec_escn.ioff = (DiOffT)a_shdr.sh_offset; \ ++ _sec_escn.szB = a_shdr.sh_size; \ ++ if (!check_compression(&a_shdr, &_sec_escn)) { \ ++ ML_(symerr)(di, True, " Compression type is unsupported"); \ ++ goto out; \ ++ } \ ++ nobits = a_shdr.sh_type == SHT_NOBITS; \ ++ vg_assert(_sec_escn.img != NULL); \ ++ vg_assert(_sec_escn.ioff != DiOffT_INVALID); \ ++ TRACE_SYMTAB( "%-18s: ioff %llu .. %llu\n", \ ++ _sec_name, (ULong)a_shdr.sh_offset, \ ++ ((ULong)a_shdr.sh_offset) + a_shdr.sh_size - 1); \ ++ /* SHT_NOBITS sections have zero size in the file. */ \ ++ if (!nobits && \ ++ a_shdr.sh_offset + \ ++ a_shdr.sh_size > ML_(img_real_size)(mimg)) { \ ++ ML_(symerr)(di, True, \ ++ " section beyond image end?!"); \ ++ goto out; \ ++ } \ ++ _post_fx; \ ++ } \ ++ } while (0); ++ ++/* Version with no post-effects */ ++#define FIND_MIMG(_sec_name, _sec_escn) \ ++ FINDX_MIMG(_sec_name, _sec_escn, /**/) ++ + /* The central function for reading ELF debug info. For the + object/exe specified by the DebugInfo, find ELF sections, then read + the symbols, line number info, file name info, CFA (stack-unwind +@@ -1843,7 +1881,7 @@ static HChar* readlink_path (const HChar *path) + supplied DebugInfo. + */ + +-Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) ++Bool ML_(read_elf_object) ( struct _DebugInfo* di ) + { + /* This function is long and complex. That, and the presence of + nested scopes, means it's not always easy to see which parts are +@@ -1874,7 +1912,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + + + /* TOPLEVEL */ +- Bool res, ok; ++ Bool ok; + Word i, j; + Bool dynbss_present = False; + Bool sdynbss_present = False; +@@ -1882,12 +1920,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + /* Image for the main ELF file we're working with. */ + DiImage* mimg = NULL; + +- /* Ditto for any ELF debuginfo file that we might happen to load. */ +- DiImage* dimg = NULL; +- +- /* Ditto for alternate ELF debuginfo file that we might happen to load. */ +- DiImage* aimg = NULL; +- + /* ELF header offset for the main file. Should be zero since the + ELF header is at start of file. */ + DiOffT ehdr_mioff = 0; +@@ -1970,8 +2002,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + got, plt, and toc. + ---------------------------------------------------------- */ + +- res = False; +- + if (VG_(clo_verbosity) > 1 || VG_(clo_trace_redir)) + VG_(message)(Vg_DebugMsg, "Reading syms from %s\n", + di->fsm.filename ); +@@ -2056,7 +2086,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + shdr_strtab_mioff + = ehdr_mioff /* isn't this always zero? */ + a_shdr.sh_offset; + +- if (!ML_(img_valid)(mimg, shdr_strtab_mioff, ++ if (!ML_(img_valid)(mimg, shdr_strtab_mioff, + 1/*bogus, but we don't know the real size*/ )) { + ML_(symerr)(di, True, "Invalid ELF Section Header String Table"); + goto out; +@@ -2798,10 +2828,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + di->text_avma - di->text_bias, + di->text_avma ); + +- TRACE_SYMTAB("\n"); +- TRACE_SYMTAB("------ Finding image addresses " +- "for debug-info sections ------\n"); +- + /* TOPLEVEL */ + /* Find interesting sections, read the symbol table(s), read any + debug information. Each section is located either in the main, +@@ -2821,27 +2847,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + # if defined(VGO_solaris) + DiSlice ldynsym_escn = DiSlice_INVALID; // .SUNW_ldynsym + # endif +- DiSlice debuglink_escn = DiSlice_INVALID; // .gnu_debuglink +- DiSlice debugaltlink_escn = DiSlice_INVALID; // .gnu_debugaltlink +- DiSlice debug_line_escn = DiSlice_INVALID; // .debug_line (dwarf2) +- DiSlice debug_info_escn = DiSlice_INVALID; // .debug_info (dwarf2) +- DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) +- DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) +- DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) +- DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) +- DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) +- DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) +- DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) +- DiSlice debug_addr_escn = DiSlice_INVALID; // .debug_addr (dwarf5) +- DiSlice debug_str_offsets_escn = DiSlice_INVALID; // .debug_str_offsets (dwarf5) +- DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) +- DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) +- DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) +- DiSlice debug_info_alt_escn = DiSlice_INVALID; // .debug_info (alt) +- DiSlice debug_abbv_alt_escn = DiSlice_INVALID; // .debug_abbrev (alt) +- DiSlice debug_str_alt_escn = DiSlice_INVALID; // .debug_str (alt) +- DiSlice dwarf1d_escn = DiSlice_INVALID; // .debug (dwarf1) +- DiSlice dwarf1l_escn = DiSlice_INVALID; // .line (dwarf1) + DiSlice opd_escn = DiSlice_INVALID; // .opd (dwarf2, + // ppc64be-linux) + DiSlice ehframe_escn[N_EHFRAME_SECTS]; // .eh_frame (dwarf2) +@@ -2868,118 +2873,282 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + /* TOPLEVEL */ + /* Iterate over section headers (again) */ + for (i = 0; i < ehdr_m.e_shnum; i++) { ++ /* NAME ElfSec */ ++ FIND_MIMG( ".dynsym", dynsym_escn) ++ FIND_MIMG( ".dynstr", dynstr_escn) ++ FIND_MIMG( ".symtab", symtab_escn) ++ FIND_MIMG( ".strtab", strtab_escn) ++# if defined(VGO_solaris) ++ FIND_MIMG( ".SUNW_ldynsym", ldynsym_escn) ++# endif + +-# define FINDX(_sec_name, _sec_escn, _post_fx) \ +- do { \ +- ElfXX_Shdr a_shdr; \ +- ML_(img_get)(&a_shdr, mimg, \ +- INDEX_BIS(shdr_mioff, i, shdr_ment_szB), \ +- sizeof(a_shdr)); \ +- if (0 == ML_(img_strcmp_c)(mimg, shdr_strtab_mioff \ +- + a_shdr.sh_name, _sec_name)) { \ +- Bool nobits; \ +- _sec_escn.img = mimg; \ +- _sec_escn.ioff = (DiOffT)a_shdr.sh_offset; \ +- _sec_escn.szB = a_shdr.sh_size; \ +- if (!check_compression(&a_shdr, &_sec_escn)) { \ +- ML_(symerr)(di, True, " Compression type is unsupported"); \ +- goto out; \ +- } \ +- nobits = a_shdr.sh_type == SHT_NOBITS; \ +- vg_assert(_sec_escn.img != NULL); \ +- vg_assert(_sec_escn.ioff != DiOffT_INVALID); \ +- TRACE_SYMTAB( "%-18s: ioff %llu .. %llu\n", \ +- _sec_name, (ULong)a_shdr.sh_offset, \ +- ((ULong)a_shdr.sh_offset) + a_shdr.sh_size - 1); \ +- /* SHT_NOBITS sections have zero size in the file. */ \ +- if (!nobits && \ +- a_shdr.sh_offset + \ +- a_shdr.sh_size > ML_(img_real_size)(mimg)) { \ +- ML_(symerr)(di, True, \ +- " section beyond image end?!"); \ +- goto out; \ +- } \ +- _post_fx; \ +- } \ +- } while (0); ++ FINDX_MIMG( ".eh_frame", ehframe_escn[ehframe_mix], ++ do { ehframe_mix++; vg_assert(ehframe_mix <= N_EHFRAME_SECTS); ++ } while (0) ++ ) ++ /* Comment_on_EH_FRAME_MULTIPLE_INSTANCES: w.r.t. .eh_frame ++ multi-instance kludgery, how are we assured that the order ++ in which we fill in ehframe_escn[] is consistent with the ++ order in which we previously filled in di->ehframe_avma[] ++ and di->ehframe_size[] ? By the fact that in both cases, ++ these arrays were filled in by iterating over the section ++ headers top-to-bottom. So both loops (this one and the ++ previous one) encounter the .eh_frame entries in the same ++ order and so fill in these arrays in a consistent order. ++ */ ++ } /* Iterate over section headers (again) */ + +- /* Version with no post-effects */ +-# define FIND(_sec_name, _sec_escn) \ +- FINDX(_sec_name, _sec_escn, /**/) ++ /* Check some sizes */ ++ vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); ++ vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0); ++# if defined(VGO_solaris) ++ vg_assert((ldynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); ++# endif + +- /* NAME ElfSec */ +- FIND( ".dynsym", dynsym_escn) +- FIND( ".dynstr", dynstr_escn) +- FIND( ".symtab", symtab_escn) +- FIND( ".strtab", strtab_escn) ++ /* Read symbols */ ++ { ++ void (*read_elf_symtab)(struct _DebugInfo*, const HChar*, ++ DiSlice*, DiSlice*, DiSlice*, Bool); ++# if defined(VGP_ppc64be_linux) ++ read_elf_symtab = read_elf_symtab__ppc64be_linux; ++# else ++ read_elf_symtab = read_elf_symtab__normal; ++# endif ++ if (symtab_escn.img != NULL) ++ read_elf_symtab(di, "symbol table", ++ &symtab_escn, &strtab_escn, &opd_escn, ++ False); ++ read_elf_symtab(di, "dynamic symbol table", ++ &dynsym_escn, &dynstr_escn, &opd_escn, ++ False); + # if defined(VGO_solaris) +- FIND( ".SUNW_ldynsym", ldynsym_escn) ++ read_elf_symtab(di, "local dynamic symbol table", ++ &ldynsym_escn, &dynstr_escn, &opd_escn, ++ False); + # endif ++ } + +- FIND( ".gnu_debuglink", debuglink_escn) +- FIND( ".gnu_debugaltlink", debugaltlink_escn) ++ /* TOPLEVEL */ ++ /* Read .eh_frame and .debug_frame (call-frame-info) if any. Do ++ the .eh_frame section(s) first. */ ++ vg_assert(di->n_ehframe >= 0 && di->n_ehframe <= N_EHFRAME_SECTS); ++ for (i = 0; i < di->n_ehframe; i++) { ++ /* see Comment_on_EH_FRAME_MULTIPLE_INSTANCES above for why ++ this next assertion should hold. */ ++ vg_assert(ML_(sli_is_valid)(ehframe_escn[i])); ++ vg_assert(ehframe_escn[i].szB == di->ehframe_size[i]); ++ ML_(read_callframe_info_dwarf3)( di, ++ ehframe_escn[i], ++ di->ehframe_avma[i], ++ True/*is_ehframe*/ ); ++ } ++ } ++ ++ return True; ++ ++ out: ++ { ++ /* Last, but not least, detach from the image. */ ++ if (mimg) ML_(img_done)(mimg); ++ ++ if (svma_ranges) VG_(deleteXA)(svma_ranges); + +- FIND( ".debug_line", debug_line_escn) ++ return False; ++ } /* out: */ ++ ++ /* NOTREACHED */ ++} ++ ++Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) ++{ ++ Word i, j; ++ Bool res = True; ++ Bool ok; ++ ++ /* Image for the main ELF file we're working with. */ ++ DiImage* mimg = NULL; ++ ++ /* Ditto for any ELF debuginfo file that we might happen to load. */ ++ DiImage* dimg = NULL; ++ ++ /* Ditto for alternate ELF debuginfo file that we might happen to load. */ ++ DiImage* aimg = NULL; ++ ++ /* Section header image addr, # entries, entry size. Also the ++ associated string table. */ ++ DiOffT shdr_mioff = 0; ++ UWord shdr_mnent = 0; ++ UWord shdr_ment_szB = 0; ++ DiOffT shdr_strtab_mioff = 0; ++ ++ DiOffT ehdr_mioff = 0; ++ ++ /* Connect to the primary object image, so that we can read symbols ++ and line number info out of it. It will be disconnected ++ immediately thereafter; it is only connected transiently. */ ++ mimg = ML_(img_from_local_file)(di->fsm.filename); ++ if (mimg == NULL) { ++ VG_(message)(Vg_UserMsg, "warning: connection to image %s failed\n", ++ di->fsm.filename ); ++ VG_(message)(Vg_UserMsg, " no debug info loaded\n" ); ++ return False; ++ } ++ ++ /* Ok, the object image is available. Now verify that it is a ++ valid ELF .so or executable image. */ ++ ok = is_elf_object_file_by_DiImage(mimg, False); ++ if (!ok) { ++ ML_(symerr)(di, True, "Invalid ELF Header"); ++ goto out; ++ } ++ ++ /* Find where the program and section header tables are, and give ++ up if either is missing or outside the image (bogus). */ ++ ElfXX_Ehdr ehdr_m; ++ vg_assert(ehdr_mioff == 0); // ensured by its initialisation ++ ok = ML_(img_valid)(mimg, ehdr_mioff, sizeof(ehdr_m)); ++ vg_assert(ok); // ML_(is_elf_object_file) should ensure this ++ ML_(img_get)(&ehdr_m, mimg, ehdr_mioff, sizeof(ehdr_m)); ++ ++ shdr_mioff = ehdr_mioff + ehdr_m.e_shoff; ++ shdr_mnent = ehdr_m.e_shnum; ++ shdr_ment_szB = ehdr_m.e_shentsize; ++ ++ if (shdr_mnent == 0 ++ || !ML_(img_valid)(mimg, shdr_mioff, shdr_mnent * shdr_ment_szB)) { ++ ML_(symerr)(di, True, "Missing or invalid ELF Section Header Table"); ++ goto out; ++ } ++ ++ /* Also find the section header's string table, and validate. */ ++ /* checked previously by is_elf_object_file: */ ++ vg_assert(ehdr_m.e_shstrndx != SHN_UNDEF); ++ ++ // shdr_mioff is the offset of the section header table ++ // and we need the ehdr_m.e_shstrndx'th entry ++ { ElfXX_Shdr a_shdr; ++ ML_(img_get)(&a_shdr, mimg, ++ INDEX_BIS(shdr_mioff, ehdr_m.e_shstrndx, shdr_ment_szB), ++ sizeof(a_shdr)); ++ shdr_strtab_mioff ++ = ehdr_mioff /* isn't this always zero? */ + a_shdr.sh_offset; ++ ++ if (!ML_(img_valid)(mimg, shdr_strtab_mioff, ++ 1/*bogus, but we don't know the real size*/ )) { ++ ML_(symerr)(di, True, "Invalid ELF Section Header String Table"); ++ goto out; ++ } ++ } ++ ++ TRACE_SYMTAB("\n"); ++ TRACE_SYMTAB("------ Finding image addresses " ++ "for debug-info sections ------\n"); ++ /* TOPLEVEL */ ++ /* Find interesting sections, read the symbol table(s), read any ++ debug information. Each section is located either in the main, ++ debug or alt-debug files, but only in one. For each section, ++ |section_escn| records which of |mimg|, |dimg| or |aimg| we ++ found it in, along with the section's image offset and its size. ++ The triples (section_img, section_ioff, section_szB) are ++ consistent, in that they are always either (NULL, ++ DiOffT_INVALID, 0), or refer to the same image, and are all ++ assigned together. */ ++ ++ { ++ /* TOPLEVEL */ ++ DiSlice strtab_escn = DiSlice_INVALID; // .strtab ++ DiSlice symtab_escn = DiSlice_INVALID; // .symtab ++ DiSlice debuglink_escn = DiSlice_INVALID; // .gnu_debuglink ++ DiSlice debugaltlink_escn = DiSlice_INVALID; // .gnu_debugaltlink ++ DiSlice debug_line_escn = DiSlice_INVALID; // .debug_line (dwarf2) ++ DiSlice debug_info_escn = DiSlice_INVALID; // .debug_info (dwarf2) ++ DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) ++ DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) ++ DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) ++ DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) ++ DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) ++ DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) ++ DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) ++ DiSlice debug_addr_escn = DiSlice_INVALID; // .debug_addr (dwarf5) ++ DiSlice debug_str_offsets_escn = DiSlice_INVALID; // .debug_str_offsets (dwarf5) ++ DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) ++ DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) ++ DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) ++ DiSlice debug_info_alt_escn = DiSlice_INVALID; // .debug_info (alt) ++ DiSlice debug_abbv_alt_escn = DiSlice_INVALID; // .debug_abbrev (alt) ++ DiSlice debug_str_alt_escn = DiSlice_INVALID; // .debug_str (alt) ++ DiSlice dwarf1d_escn = DiSlice_INVALID; // .debug (dwarf1) ++ DiSlice dwarf1l_escn = DiSlice_INVALID; // .line (dwarf1) ++ DiSlice opd_escn = DiSlice_INVALID; // .opd (dwarf2, ++ // ppc64be-linux) ++ ++ /* TOPLEVEL */ ++ /* Iterate over section headers (again) */ ++ for (i = 0; i < ehdr_m.e_shnum; i++) { ++ ++ /* NAME ElfSec */ ++ FIND_MIMG( ".symtab", symtab_escn) ++ FIND_MIMG( ".strtab", strtab_escn) ++ FIND_MIMG( ".gnu_debuglink", debuglink_escn) ++ FIND_MIMG( ".gnu_debugaltlink", debugaltlink_escn) ++ ++ FIND_MIMG( ".debug_line", debug_line_escn) + if (!ML_(sli_is_valid)(debug_line_escn)) +- FIND(".zdebug_line", debug_line_escn) ++ FIND_MIMG(".zdebug_line", debug_line_escn) + +- FIND( ".debug_info", debug_info_escn) ++ FIND_MIMG( ".debug_info", debug_info_escn) + if (!ML_(sli_is_valid)(debug_info_escn)) +- FIND(".zdebug_info", debug_info_escn) ++ FIND_MIMG(".zdebug_info", debug_info_escn) + +- FIND( ".debug_types", debug_types_escn) ++ FIND_MIMG( ".debug_types", debug_types_escn) + if (!ML_(sli_is_valid)(debug_types_escn)) +- FIND(".zdebug_types", debug_types_escn) ++ FIND_MIMG(".zdebug_types", debug_types_escn) + +- FIND( ".debug_abbrev", debug_abbv_escn) ++ FIND_MIMG( ".debug_abbrev", debug_abbv_escn) + if (!ML_(sli_is_valid)(debug_abbv_escn)) +- FIND(".zdebug_abbrev", debug_abbv_escn) ++ FIND_MIMG(".zdebug_abbrev", debug_abbv_escn) + +- FIND( ".debug_str", debug_str_escn) ++ FIND_MIMG( ".debug_str", debug_str_escn) + if (!ML_(sli_is_valid)(debug_str_escn)) +- FIND(".zdebug_str", debug_str_escn) ++ FIND_MIMG(".zdebug_str", debug_str_escn) + +- FIND( ".debug_line_str", debug_line_str_escn) ++ FIND_MIMG( ".debug_line_str", debug_line_str_escn) + if (!ML_(sli_is_valid)(debug_line_str_escn)) +- FIND(".zdebug_str", debug_line_str_escn) ++ FIND_MIMG(".zdebug_str", debug_line_str_escn) + +- FIND( ".debug_ranges", debug_ranges_escn) ++ FIND_MIMG( ".debug_ranges", debug_ranges_escn) + if (!ML_(sli_is_valid)(debug_ranges_escn)) +- FIND(".zdebug_ranges", debug_ranges_escn) ++ FIND_MIMG(".zdebug_ranges", debug_ranges_escn) + +- FIND( ".debug_rnglists", debug_rnglists_escn) ++ FIND_MIMG( ".debug_rnglists", debug_rnglists_escn) + if (!ML_(sli_is_valid)(debug_rnglists_escn)) +- FIND(".zdebug_rnglists", debug_rnglists_escn) ++ FIND_MIMG(".zdebug_rnglists", debug_rnglists_escn) + +- FIND( ".debug_loclists", debug_loclists_escn) ++ FIND_MIMG( ".debug_loclists", debug_loclists_escn) + if (!ML_(sli_is_valid)(debug_loclists_escn)) +- FIND(".zdebug_loclists", debug_loclists_escn) ++ FIND_MIMG(".zdebug_loclists", debug_loclists_escn) + +- FIND( ".debug_loc", debug_loc_escn) ++ FIND_MIMG( ".debug_loc", debug_loc_escn) + if (!ML_(sli_is_valid)(debug_loc_escn)) +- FIND(".zdebug_loc", debug_loc_escn) ++ FIND_MIMG(".zdebug_loc", debug_loc_escn) + +- FIND( ".debug_frame", debug_frame_escn) ++ FIND_MIMG( ".debug_frame", debug_frame_escn) + if (!ML_(sli_is_valid)(debug_frame_escn)) +- FIND(".zdebug_frame", debug_frame_escn) ++ FIND_MIMG(".zdebug_frame", debug_frame_escn) + +- FIND( ".debug_addr", debug_addr_escn) ++ FIND_MIMG( ".debug_addr", debug_addr_escn) + if (!ML_(sli_is_valid)(debug_addr_escn)) +- FIND(".zdebug_addr", debug_addr_escn) ++ FIND_MIMG(".zdebug_addr", debug_addr_escn) + +- FIND( ".debug_str_offsets", debug_str_offsets_escn) ++ FIND_MIMG( ".debug_str_offsets", debug_str_offsets_escn) + if (!ML_(sli_is_valid)(debug_str_offsets_escn)) +- FIND(".zdebug_str_offsets", debug_str_offsets_escn) ++ FIND_MIMG(".zdebug_str_offsets", debug_str_offsets_escn) + +- FIND( ".debug", dwarf1d_escn) +- FIND( ".line", dwarf1l_escn) ++ FIND_MIMG( ".debug", dwarf1d_escn) ++ FIND_MIMG( ".line", dwarf1l_escn) + +- FIND( ".opd", opd_escn) ++ FIND_MIMG( ".opd", opd_escn) + +- FINDX( ".eh_frame", ehframe_escn[ehframe_mix], +- do { ehframe_mix++; vg_assert(ehframe_mix <= N_EHFRAME_SECTS); +- } while (0) +- ) + /* Comment_on_EH_FRAME_MULTIPLE_INSTANCES: w.r.t. .eh_frame + multi-instance kludgery, how are we assured that the order + in which we fill in ehframe_escn[] is consistent with the +@@ -2991,8 +3160,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + order and so fill in these arrays in a consistent order. + */ + +-# undef FINDX +-# undef FIND + } /* Iterate over section headers (again) */ + + /* TOPLEVEL */ +@@ -3465,53 +3632,23 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + } /* Find all interesting sections */ + } /* do we have a debug image? */ + +- + /* TOPLEVEL */ +- /* Check some sizes */ +- vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); + vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0); +-# if defined(VGO_solaris) +- vg_assert((ldynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); +-# endif + + /* TOPLEVEL */ + /* Read symbols */ + { + void (*read_elf_symtab)(struct _DebugInfo*, const HChar*, + DiSlice*, DiSlice*, DiSlice*, Bool); +- Bool symtab_in_debug; + # if defined(VGP_ppc64be_linux) + read_elf_symtab = read_elf_symtab__ppc64be_linux; + # else + read_elf_symtab = read_elf_symtab__normal; + # endif +- symtab_in_debug = symtab_escn.img == dimg; +- read_elf_symtab(di, "symbol table", +- &symtab_escn, &strtab_escn, &opd_escn, +- symtab_in_debug); +- read_elf_symtab(di, "dynamic symbol table", +- &dynsym_escn, &dynstr_escn, &opd_escn, +- False); +-# if defined(VGO_solaris) +- read_elf_symtab(di, "local dynamic symbol table", +- &ldynsym_escn, &dynstr_escn, &opd_escn, +- False); +-# endif +- } +- +- /* TOPLEVEL */ +- /* Read .eh_frame and .debug_frame (call-frame-info) if any. Do +- the .eh_frame section(s) first. */ +- vg_assert(di->n_ehframe >= 0 && di->n_ehframe <= N_EHFRAME_SECTS); +- for (i = 0; i < di->n_ehframe; i++) { +- /* see Comment_on_EH_FRAME_MULTIPLE_INSTANCES above for why +- this next assertion should hold. */ +- vg_assert(ML_(sli_is_valid)(ehframe_escn[i])); +- vg_assert(ehframe_escn[i].szB == di->ehframe_size[i]); +- ML_(read_callframe_info_dwarf3)( di, +- ehframe_escn[i], +- di->ehframe_avma[i], +- True/*is_ehframe*/ ); ++ if (symtab_escn.img != NULL) ++ read_elf_symtab(di, "symbol table", ++ &symtab_escn, &strtab_escn, &opd_escn, ++ True); + } + if (ML_(sli_is_valid)(debug_frame_escn)) { + ML_(read_callframe_info_dwarf3)( di, +@@ -3643,8 +3780,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + if (dimg) ML_(img_done)(dimg); + if (aimg) ML_(img_done)(aimg); + +- if (svma_ranges) VG_(deleteXA)(svma_ranges); +- + return res; + } /* out: */ + +diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c +index c3fa62e96..3ad114607 100644 +--- a/coregrind/m_debuginfo/storage.c ++++ b/coregrind/m_debuginfo/storage.c +@@ -1297,8 +1297,7 @@ void ML_(addVar)( struct _DebugInfo* di, + that those extra sections have the same bias as .text, but that + seems a reasonable assumption to me. */ + /* This is assured us by top level steering logic in debuginfo.c, +- and it is re-checked at the start of +- ML_(read_elf_debug_info). */ ++ and it is re-checked at the start of ML_(read_elf_object). */ + vg_assert(di->fsm.have_rx_map && di->fsm.rw_map_count); + if (level > 0 && ML_(find_rx_mapping)(di, aMin, aMax) == NULL) { + if (VG_(clo_verbosity) > 1) { +@@ -1725,7 +1724,6 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) + for (i = 0; i < di->symtab_used; i++) { + DiSym* sym = &di->symtab[i]; + vg_assert(sym->pri_name); +- vg_assert(!sym->sec_names); + } + + /* Sort by address. */ +@@ -2383,6 +2381,9 @@ void ML_(finish_CFSI_arrays) ( struct _DebugInfo* di ) + vg_assert (f_holes == n_holes); + vg_assert (pos == new_used); + ++ if (di->deferred) ++ return; ++ + di->cfsi_used = new_used; + di->cfsi_size = new_used; + ML_(dinfo_free) (di->cfsi_rd); +@@ -2398,9 +2399,13 @@ void ML_(canonicaliseTables) ( struct _DebugInfo* di ) + canonicaliseLoctab ( di ); + canonicaliseInltab ( di ); + ML_(canonicaliseCFI) ( di ); ++ canonicaliseVarInfo ( di ); ++ ++ if (di->deferred) ++ return; ++ + if (di->cfsi_m_pool) + VG_(freezeDedupPA) (di->cfsi_m_pool, ML_(dinfo_shrink_block)); +- canonicaliseVarInfo ( di ); + if (di->strpool) + VG_(freezeDedupPA) (di->strpool, ML_(dinfo_shrink_block)); + if (di->fndnpool) +diff --git a/coregrind/pub_core_debuginfo.h b/coregrind/pub_core_debuginfo.h +index 938ed00cc..ce7246217 100644 +--- a/coregrind/pub_core_debuginfo.h ++++ b/coregrind/pub_core_debuginfo.h +@@ -76,6 +76,10 @@ extern void VG_(di_notify_pdb_debuginfo)( Int fd, Addr avma, + extern void VG_(di_notify_vm_protect)( Addr a, SizeT len, UInt prot ); + #endif + ++extern void VG_(addr_load_di)( Addr a ); ++ ++extern void VG_(load_di)( DebugInfo *di, Addr a ); ++ + extern void VG_(di_discard_ALL_debuginfo)( void ); + + /* Like VG_(get_fnname), but it does not do C++ demangling nor Z-demangling +-- +2.41.0 + diff --git a/valgrind.spec b/valgrind.spec index c9b719f..d630003 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.21.0 -Release: 9%{?dist} +Release: 10%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -116,6 +116,12 @@ Patch12: valgrind-3.21.0-pgste.patch # https://bugs.kde.org/show_bug.cgi?id=471311 Patch13: valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch +# Add support for lazy reading and downloading of DWARF debuginfo +# https://bugs.kde.org/show_bug.cgi?id=471807 +# Plus fixup commit a0d555a0dfe078ef04ea49d991a8090ab14bd4a5 +Patch14: valgrind-3.21.0-lazy-debuginfo.patch +Patch15: valgrind-3.21.0-cleanup-read_elf_object.patch + BuildRequires: make BuildRequires: glibc-devel @@ -262,6 +268,8 @@ Valgrind User Manual for details. %patch -P11 -p1 %patch -P12 -p1 %patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 %build @@ -495,6 +503,10 @@ fi %endif %changelog +* Mon Aug 21 2023 Mark Wielaard - 3.21.0-10 +- Add valgrind-3.21.0-lazy-debuginfo.patch +- Add valgrind-3.21.0-cleanup-read_elf_object.patch + * Thu Aug 17 2023 Mark Wielaard - 3.21.0-9 - Add valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch - Use %%patch -Pn instead of deprecated %%patchn From e5b933a45435757357f5afde7f00469cae54e102 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 18 Oct 2023 01:44:53 +0200 Subject: [PATCH 134/196] 3.22.0-0.1.RC1 - Upstream 3.22.0-RC1 - Remove all upstreamed patches - Adjust valgrind-3.16.0-some-stack-protector.patch - Adjust valgrind-3.16.0-some-Wl-z-now.patch - Add cachegrind.h to valgrind-devel package --- .gitignore | 1 + sources | 2 +- valgrind-3.16.0-some-Wl-z-now.patch | 4 +- valgrind-3.16.0-some-stack-protector.patch | 4 +- valgrind-3.21.0-Add-with-gdbscripts-dir.patch | 123 --- ...d-3.21.0-callgrind_control-no-strict.patch | 12 - valgrind-3.21.0-cleanup-read_elf_object.patch | 58 -- valgrind-3.21.0-epoll_pwait2.patch | 217 ----- ...ti-mode-stdout-redirecting-to-stderr.patch | 85 -- valgrind-3.21.0-lazy-debuginfo.patch | 850 ------------------ valgrind-3.21.0-pgste.patch | 73 -- valgrind-3.21.0-realloc-again.patch | 167 ---- valgrind-3.21.0-vgm-tests.patch | 105 --- valgrind-3.21.0-vgm.patch | 99 -- valgrind.spec | 62 +- 15 files changed, 18 insertions(+), 1844 deletions(-) delete mode 100644 valgrind-3.21.0-Add-with-gdbscripts-dir.patch delete mode 100644 valgrind-3.21.0-callgrind_control-no-strict.patch delete mode 100644 valgrind-3.21.0-cleanup-read_elf_object.patch delete mode 100644 valgrind-3.21.0-epoll_pwait2.patch delete mode 100644 valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch delete mode 100644 valgrind-3.21.0-lazy-debuginfo.patch delete mode 100644 valgrind-3.21.0-pgste.patch delete mode 100644 valgrind-3.21.0-realloc-again.patch delete mode 100644 valgrind-3.21.0-vgm-tests.patch delete mode 100644 valgrind-3.21.0-vgm.patch diff --git a/.gitignore b/.gitignore index 85a4432..3f735f2 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ /valgrind-3.21.0.RC1.tar.bz2 /valgrind-3.21.0.RC2.tar.bz2 /valgrind-3.21.0.tar.bz2 +/valgrind-3.22.0.RC1.tar.bz2 diff --git a/sources b/sources index efed6a2..e2e8ed5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.21.0.tar.bz2) = 3e86cda2f2d6cd30807fac7933ba2c46a97a2b4a868db989e6b0cceeadf029af7ee34ba900466a346948289aacb30f4399799bb83b97cc49a4d2d810441e5cfd +SHA512 (valgrind-3.22.0.RC1.tar.bz2) = 0aa9e98a959808d20cce53575433f81973ef3de3acc313ef2700f58cf9b2b7ee951b5bc701ef8508f5c136cb14239bbe7d81ae4208679ba55150b3edfd6078f0 diff --git a/valgrind-3.16.0-some-Wl-z-now.patch b/valgrind-3.16.0-some-Wl-z-now.patch index 6231733..f6001d2 100644 --- a/valgrind-3.16.0-some-Wl-z-now.patch +++ b/valgrind-3.16.0-some-Wl-z-now.patch @@ -48,8 +48,8 @@ index 3c73210..fb6b7bb 100644 # If there is no secondary platform, and the platforms include x86-darwin, # then the primary platform must be x86-darwin. Hence: if ! VGCONF_HAVE_PLATFORM_SEC -@@ -96,7 +96,7 @@ endif - vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) +@@ -104,7 +104,7 @@ + vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) $(GDB_SCRIPTS_DIR) vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) -fstack-protector-strong vgdb_CCASFLAGS = $(AM_CCASFLAGS_PRI) -vgdb_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@ diff --git a/valgrind-3.16.0-some-stack-protector.patch b/valgrind-3.16.0-some-stack-protector.patch index b53c465..751cf39 100644 --- a/valgrind-3.16.0-some-stack-protector.patch +++ b/valgrind-3.16.0-some-stack-protector.patch @@ -94,10 +94,10 @@ index 94030fd..3c73210 100644 valgrind_CCASFLAGS = $(AM_CCASFLAGS_PRI) valgrind_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@ # If there is no secondary platform, and the platforms include x86-darwin, -@@ -94,7 +94,7 @@ vgdb_SOURCES += vgdb-invoker-solaris.c +@@ -102,7 +102,7 @@ endif - vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) + vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) $(GDB_SCRIPTS_DIR) -vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) +vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) -fstack-protector-strong vgdb_CCASFLAGS = $(AM_CCASFLAGS_PRI) diff --git a/valgrind-3.21.0-Add-with-gdbscripts-dir.patch b/valgrind-3.21.0-Add-with-gdbscripts-dir.patch deleted file mode 100644 index 5f8b4f9..0000000 --- a/valgrind-3.21.0-Add-with-gdbscripts-dir.patch +++ /dev/null @@ -1,123 +0,0 @@ -From e97f7a6cf2315908fb0a9b900f1de87a155c9df1 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sun, 14 May 2023 23:34:05 +0200 -Subject: [PATCH] Add --with-gdbscripts-dir=PATH configure option - -Currently the gdb valgrind scripts are installed under VG_LIBDIR -which is normally pkglibexecdir which is likely not in the default -gdb safe-path (a list of directories from which it is safe to -auto-load files). So users will have to add the directory to their -.gdbinit file. - -This patch adds a --with-gdbscripts-dir=PATH configure option that -sets VG_GDBSCRIPTS_DIR to the given PATH (${libexecdir}/valgrind if -not given). - -Use VG_GDBSCRIPTS_DIR as gdbscriptsdir to install the valgrind-monitor -python files and pass it with CPPFLAGS when building vg_preloaded.c -and vgdb.c to use instead of VG_LIBDIR. ---- - configure.ac | 11 +++++++++++ - coregrind/Makefile.am | 15 ++++++++++----- - coregrind/vg_preloaded.c | 2 +- - coregrind/vgdb.c | 2 +- - 4 files changed, 23 insertions(+), 7 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 15fbf5ea2..223ab4529 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -1198,6 +1198,17 @@ AC_MSG_RESULT([$xcodedir]) - AC_DEFINE_UNQUOTED(XCODE_DIR, "$xcodedir", [xcode sdk include directory]) - AC_SUBST(XCODE_DIR, [$xcodedir])]) - -+#---------------------------------------------------------------------------- -+# Where to install gdb scripts, defaults to VG_LIBDIR (pkglibexecdir) -+#---------------------------------------------------------------------------- -+AC_MSG_CHECKING([where gdb scripts are installed]) -+AC_ARG_WITH(gdbscripts-dir, -+ [ --with-gdbscripts-dir=PATH Specify path to install gdb scripts], -+ [gdbscriptsdir=${withval}], -+ [gdbscriptsdir=${libexecdir}/valgrind]) -+AC_MSG_RESULT([$gdbscriptsdir]) -+AC_SUBST(VG_GDBSCRIPTS_DIR, [$gdbscriptsdir]) -+ - #---------------------------------------------------------------------------- - # Libc and suppressions - #---------------------------------------------------------------------------- -diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am -index 553211782..64d593b08 100644 ---- a/coregrind/Makefile.am -+++ b/coregrind/Makefile.am -@@ -101,7 +101,8 @@ - vgdb_SOURCES += vgdb-invoker-freebsd.c - endif - --vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) -+vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI) \ -+ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" - vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS) -fstack-protector-strong - vgdb_CCASFLAGS = $(AM_CCASFLAGS_PRI) - vgdb_LDFLAGS = $(AM_CFLAGS_PRI) @LIB_UBSAN@ -Wl,-z,now -@@ -626,7 +627,8 @@ - - vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c - vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CPPFLAGS = \ -- $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) -+ $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) \ -+ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" - vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CFLAGS = \ - $(AM_CFLAGS_PSO_@VGCONF_PLATFORM_PRI_CAPS@) - vgpreload_core_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS = \ -@@ -634,7 +636,8 @@ - if VGCONF_HAVE_PLATFORM_SEC - vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_SOURCES = vg_preloaded.c - vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CPPFLAGS = \ -- $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) -+ $(AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@) \ -+ -DVG_GDBSCRIPTS_DIR="\"@VG_GDBSCRIPTS_DIR@\"" - vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CFLAGS = \ - $(AM_CFLAGS_PSO_@VGCONF_PLATFORM_SEC_CAPS@) - vgpreload_core_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS = \ -@@ -766,8 +769,10 @@ - # so as to make sure these get copied into the install tree - vglibdir = $(pkglibexecdir) - vglib_DATA = $(GDBSERVER_XML_FILES) --vglib_DATA += m_gdbserver/valgrind-monitor.py --vglib_DATA += m_gdbserver/valgrind-monitor-def.py -+ -+gdbscriptsdir = @VG_GDBSCRIPTS_DIR@ -+gdbscripts_DATA = m_gdbserver/valgrind-monitor.py -+gdbscripts_DATA += m_gdbserver/valgrind-monitor-def.py - - # so as to make sure these get copied into the tarball - EXTRA_DIST += $(GDBSERVER_XML_FILES) -diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c -index d6e05898c..bff76b81b 100644 ---- a/coregrind/vg_preloaded.c -+++ b/coregrind/vg_preloaded.c -@@ -61,7 +61,7 @@ - .popsection \n\ - "); - --DEFINE_GDB_PY_SCRIPT(VG_LIBDIR "/valgrind-monitor.py") -+DEFINE_GDB_PY_SCRIPT(VG_GDBSCRIPTS_DIR "/valgrind-monitor.py") - #endif - - #if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd) -diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c -index 8ec424077..a449b86e0 100644 ---- a/coregrind/vgdb.c -+++ b/coregrind/vgdb.c -@@ -1984,7 +1984,7 @@ void usage(void) - " -h --help shows this message\n" - " The GDB python code defining GDB front end valgrind commands is:\n %s\n" - " To get help from the Valgrind gdbserver, use vgdb help\n" --"\n", vgdb_prefix_default(), VG_LIBDIR "/valgrind-monitor.py" -+"\n", vgdb_prefix_default(), VG_GDBSCRIPTS_DIR "/valgrind-monitor.py" - ); - invoker_restrictions_msg(); - } --- -2.40.0 - diff --git a/valgrind-3.21.0-callgrind_control-no-strict.patch b/valgrind-3.21.0-callgrind_control-no-strict.patch deleted file mode 100644 index 2aaecd4..0000000 --- a/valgrind-3.21.0-callgrind_control-no-strict.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in -index 083ffa29f..eb50c16ad 100644 ---- a/callgrind/callgrind_control.in -+++ b/callgrind/callgrind_control.in -@@ -22,7 +22,6 @@ - # You should have received a copy of the GNU General Public License - # along with this program; if not, see . - --use strict; - use warnings; - - use File::Basename; diff --git a/valgrind-3.21.0-cleanup-read_elf_object.patch b/valgrind-3.21.0-cleanup-read_elf_object.patch deleted file mode 100644 index c81ca94..0000000 --- a/valgrind-3.21.0-cleanup-read_elf_object.patch +++ /dev/null @@ -1,58 +0,0 @@ -From a0d555a0dfe078ef04ea49d991a8090ab14bd4a5 Mon Sep 17 00:00:00 2001 -From: Paul Floyd -Date: Sat, 19 Aug 2023 21:37:33 +0200 -Subject: [PATCH] Always cleanup on exit from ML_(read_elf_object) - -I'm still a but baffled as to why this wasn't seen earlier. -A FreeBSD testcase started failing with kernel 13.2 patch 2, -which is quite a minor change. The testcase gets an fd from -pdfork and the parent does a printf with the fd then zaps the -process with pdkill. Standalone the fd is 3, and that's what -the expected contains. However, when it started failing I saw -with lsof that fds 3 and 4 were associated with the guest exe -and ld-elf.so.1. ---- - coregrind/m_debuginfo/readelf.c | 16 +++++++--------- - 1 file changed, 7 insertions(+), 9 deletions(-) - -diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c -index f99d3dfd2..ac72f98fb 100644 ---- a/coregrind/m_debuginfo/readelf.c -+++ b/coregrind/m_debuginfo/readelf.c -@@ -1916,6 +1916,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) - Word i, j; - Bool dynbss_present = False; - Bool sdynbss_present = False; -+ Bool retval = False; - - /* Image for the main ELF file we're working with. */ - DiImage* mimg = NULL; -@@ -2944,19 +2945,16 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) - } - } - -- return True; -+ retval = True; - -- out: -- { -- /* Last, but not least, detach from the image. */ -- if (mimg) ML_(img_done)(mimg); -+ out: - -- if (svma_ranges) VG_(deleteXA)(svma_ranges); -+ /* Last, but not least, detach from the image. */ -+ if (mimg) ML_(img_done)(mimg); - -- return False; -- } /* out: */ -+ if (svma_ranges) VG_(deleteXA)(svma_ranges); - -- /* NOTREACHED */ -+ return retval; - } - - Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) --- -2.41.0 - diff --git a/valgrind-3.21.0-epoll_pwait2.patch b/valgrind-3.21.0-epoll_pwait2.patch deleted file mode 100644 index 0a5dd67..0000000 --- a/valgrind-3.21.0-epoll_pwait2.patch +++ /dev/null @@ -1,217 +0,0 @@ -From 17f56ab4c4fce7b4778251e1fab2bc50e5c6dbda Mon Sep 17 00:00:00 2001 -From: Olli Vanhoja -Date: Mon, 10 Oct 2022 11:44:22 +0200 -Subject: [PATCH] Add epoll_pwait2 - -The only difference between epoll_pwait and epoll_pwait2 is the -timeout argument. For epoll_pwait2 this is a timespec (which is -always 64bit). - -https://bugs.kde.org/show_bug.cgi?id=460192 ---- - NEWS | 1 + - coregrind/m_syswrap/priv_syswrap-linux.h | 1 + - coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-linux.c | 23 ++++++++++++++++++++ - coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + - coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + - coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ - include/vki/vki-scnums-shared-linux.h | 2 ++ - 14 files changed, 45 insertions(+) - -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index a73b6247e..7c9decf5a 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -105,6 +105,7 @@ DECL_TEMPLATE(linux, sys_epoll_create1); - DECL_TEMPLATE(linux, sys_epoll_ctl); - DECL_TEMPLATE(linux, sys_epoll_wait); - DECL_TEMPLATE(linux, sys_epoll_pwait); -+DECL_TEMPLATE(linux, sys_epoll_pwait2); - DECL_TEMPLATE(linux, sys_eventfd); - DECL_TEMPLATE(linux, sys_eventfd2); - -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 1aeebd274..008600798 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -883,6 +883,8 @@ static SyscallTableEntry syscall_table[] = { - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - }; - -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index bca509589..9a7a1e0d2 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1057,6 +1057,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_close_range, sys_close_range), // 436 - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 -+ -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - }; - - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 953236000..6af7bab83 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -837,6 +837,8 @@ static SyscallTableEntry syscall_main_table[] = { - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - }; - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index 26f1fbee3..f8621f8f0 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -2165,6 +2165,29 @@ POST(sys_epoll_pwait) - epoll_post_helper (tid, arrghs, status); - } - -+PRE(sys_epoll_pwait2) -+{ -+ *flags |= SfMayBlock; -+ PRINT("sys_epoll_pwait2 ( %ld, %#" FMT_REGWORD "x, %ld, %#" -+ FMT_REGWORD "x, %#" FMT_REGWORD "x, %" FMT_REGWORD "u )", -+ SARG1, ARG2, SARG3, ARG4, ARG5, ARG6); -+ PRE_REG_READ6(long, "epoll_pwait2", -+ int, epfd, struct vki_epoll_event *, events, -+ int, maxevents, const struct timespec64 *, timeout, -+ vki_sigset_t *, sigmask, vki_size_t, sigsetsize); -+ /* Assume all (maxevents) events records should be (fully) writable. */ -+ PRE_MEM_WRITE( "epoll_pwait2(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3); -+ /* epoll_pwait2 only supports 64bit timespec. */ -+ if (ARG4) -+ pre_read_timespec64(tid, "epoll_pwait2(timeout)", ARG4); -+ if (ARG5) -+ PRE_MEM_READ( "epoll_pwait2(sigmask)", ARG5, sizeof(vki_sigset_t) ); -+} -+POST(sys_epoll_pwait2) -+{ -+ epoll_post_helper (tid, arrghs, status); -+} -+ - PRE(sys_eventfd) - { - PRINT("sys_eventfd ( %" FMT_REGWORD "u )", ARG1); -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index de27998b3..6268a00dd 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1141,6 +1141,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_close_range, sys_close_range), // 436 - - LINX_ (__NR_faccessat2, sys_faccessat2), // 439 -+ -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index 67e7c2c2f..6cdf25893 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -819,6 +819,7 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_ (__NR_clone3, sys_ni_syscall), - LINXY (__NR_close_range, sys_close_range), - LINX_ (__NR_faccessat2, sys_faccessat2), -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), - }; - - SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index 9c535c68e..d724cde74 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -828,6 +828,7 @@ static SyscallTableEntry syscall_main_table[] = { - GENX_ (__NR_clone3, sys_ni_syscall), - LINXY (__NR_close_range, sys_close_range), - LINX_ (__NR_faccessat2, sys_faccessat2), -+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index 12c073027..c0cfef235 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1061,6 +1061,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_close_range, sys_close_range), // 436 - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 -+ -+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index 3c33d1267..f5976f30c 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1030,6 +1030,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_close_range, sys_close_range), // 436 - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 -+ -+ LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index a377cb731..afba154e7 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -871,6 +871,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_close_range, sys_close_range), // 436 - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 -+ -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index a9ba15dfe..da4fd8fa2 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1655,6 +1655,8 @@ static SyscallTableEntry syscall_table[] = { - - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - -+ LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 - }; - -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -index d90cdd312..542382b53 100644 ---- a/include/vki/vki-scnums-shared-linux.h -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -46,6 +46,8 @@ - - #define __NR_faccessat2 439 - -+#define __NR_epoll_pwait2 441 -+ - #define __NR_memfd_secret 447 - - #endif --- -2.40.1 - diff --git a/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch b/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch deleted file mode 100644 index 92d97d0..0000000 --- a/valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 449dd82becae6533a8e658e76f30f65434f6417f Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 17 Aug 2023 15:40:30 +0200 -Subject: [PATCH] gdb --multi mode stdout redirecting to stderr - -When in stdio mode (talking to gdb through stdin/stdout, not -through a socket), redirect stdout to stderr and close stdin -for the inferior. That way at least some output can be seen, -but there will be no input. - -This is workaround till we have real terminal handling. - - * coregrind/vgdb.c (main): Pass in_port to do_multi_mode. - (do_multi_mode): Pass in_port to fork_and_exec_valgrind. - (fork_and_exec_valgrind): Close stdin, redirect stdout to - stderr if in_port <= 0. - -https://bugs.kde.org/show_bug.cgi?id=471311 ---- - NEWS | 1 + - coregrind/vgdb.c | 20 +++++++++++++++++--- - 2 files changed, 18 insertions(+), 3 deletions(-) - -diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c -index 56a969de7..c024ffca6 100644 ---- a/coregrind/vgdb.c -+++ b/coregrind/vgdb.c -@@ -1159,7 +1159,7 @@ static void gdb_relay(int pid, int send_noack_mode, char *q_buf); - or the errno from the child on failure. */ - static - int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, -- pid_t *pid) -+ int in_port, pid_t *pid) - { - int err = 0; - // We will use a pipe to track what the child does, -@@ -1243,6 +1243,19 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, - } - } - -+ /* When in stdio mode (talking to gdb through stdin/stdout, not -+ through a socket), redirect stdout to stderr and close stdin -+ for the inferior. That way at least some output can be seen, -+ but there will be no input. */ -+ if (in_port <= 0) { -+ /* close stdin */ -+ close (0); -+ /* open /dev/null as new stdin */ -+ open ("/dev/null", O_RDONLY); -+ /* redirect stdout as stderr */ -+ dup2 (2, 1); -+ } -+ - /* Try to launch valgrind. Add --vgdb-error=0 to stop immediately so we - can attach and --launched-with-multi to let valgrind know it doesn't - need to show a banner how to connect to gdb, we will do that -@@ -1309,7 +1322,7 @@ int fork_and_exec_valgrind (int argc, char **argv, const char *working_dir, - - /* Do multi stuff. */ - static --void do_multi_mode(int check_trials) -+void do_multi_mode(int check_trials, int in_port) - { - char *buf = vmalloc(PBUFSIZ+1); - char *q_buf = vmalloc(PBUFSIZ+1); //save the qSupported packet sent by gdb -@@ -1459,6 +1472,7 @@ void do_multi_mode(int check_trials) - int res = fork_and_exec_valgrind (count, - decoded_string, - working_dir, -+ in_port, - &valgrind_pid); - - if (res == 0) { -@@ -2427,7 +2441,7 @@ int main(int argc, char** argv) - if (multi_mode) { - /* check_trails is the --wait argument in seconds, defaulting to 1 - * if not given. */ -- do_multi_mode (check_trials); -+ do_multi_mode (check_trials, in_port); - } else if (last_command >= 0) { - standalone_send_commands(pid, last_command, commands); - } else { --- -2.41.0 - diff --git a/valgrind-3.21.0-lazy-debuginfo.patch b/valgrind-3.21.0-lazy-debuginfo.patch deleted file mode 100644 index 6500abc..0000000 --- a/valgrind-3.21.0-lazy-debuginfo.patch +++ /dev/null @@ -1,850 +0,0 @@ -From 60f7e89ba32b54d73b9e36d49e28d0f559ade0b9 Mon Sep 17 00:00:00 2001 -From: Aaron Merey -Date: Fri, 30 Jun 2023 18:31:42 -0400 -Subject: [PATCH] Support lazy reading and downloading of DWARF debuginfo - -Currently valgrind attempts to read DWARF .debug_* sections as well -as separate debuginfo files for ELF binaries as soon as a shared library -is loaded. This might also result in the downloading of separate debuginfo -files via debuginfod. - -This is inefficient when some of this debuginfo never ends up being used -by valgrind while running the client process. - -This patch adds support for lazy reading and downloading of DWARF -debuginfo. When an ELF shared library is loaded, the reading of .debug_* -sections as well as separate or alternate debuginfo is deferred until -valgrind handles an instruction pointer corresponding to a text segment -of the shared library. At this point the deferred sections and separate -debug files are loaded. - -This feature is only supported on ELF platforms. - -https://bugs.kde.org/show_bug.cgi?id=471807 - -ChangeLog - * debuginfo.c (di_notify_ACHIEVE_ACCEPT_STATE): Replace - read_elf_debug_info with read_elf_object. - (addr_load_di): New function. Attempts to load deferred debuginfo - associated with a given address. - (load_di): New function. Attempts to load a given deferred - debuginfo associated with a given address. - (describe_IP): Add calls to load_di and addr_load_di. - (find_DiCfSI): Add call to load_di. - - * priv_readelf.h (read_elf_object): New declaration. - (read_elf_debug): Ditto. - - * priv_storage.h (struct _DebugInfo): New field 'bool deferred'. - - * readelf.c (read_elf_debug_info): Split into read_elf_object and - read_elf_debug. - (read_elf_object): Read non .debug_* section from an ELF binary. - (read_elf_debug): Read .debug_* sections from an ELF binary as - as well any separate/alternate debuginfo files. - - * storage.c (canonicaliseSymtab): Remove assert in order to support - canonicalization of deferred _DebugInfo. - (finish_CFSI_arrays): Add early return if _DebugInfo is - deferred in order to avoid freeing memory that will be needed - when reading debuginfo at a later time. - (canonicaliseTables): Ditto. - - * pub_core_debuginfo.h (addr_load_di): New declaration. - (load_di): New declaration. ---- - NEWS | 1 + - coregrind/m_debuginfo/debuginfo.c | 57 +++- - coregrind/m_debuginfo/priv_readelf.h | 24 +- - coregrind/m_debuginfo/priv_storage.h | 7 + - coregrind/m_debuginfo/readelf.c | 437 ++++++++++++++++++--------- - coregrind/m_debuginfo/storage.c | 13 +- - coregrind/pub_core_debuginfo.h | 4 + - 7 files changed, 379 insertions(+), 164 deletions(-) - -diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c -index 22b41def2..8d1fdc696 100644 ---- a/coregrind/m_debuginfo/debuginfo.c -+++ b/coregrind/m_debuginfo/debuginfo.c -@@ -959,14 +959,16 @@ static ULong di_notify_ACHIEVE_ACCEPT_STATE ( struct _DebugInfo* di ) - discard_DebugInfos_which_overlap_with( di ); - - /* The DebugInfoMappings that now exist in the FSM may involve -- overlaps. This confuses ML_(read_elf_debug_info), and may cause -+ overlaps. This confuses ML_(read_elf_*), and may cause - it to compute wrong biases. So de-overlap them now. - See http://bugzilla.mozilla.org/show_bug.cgi?id=788974 */ - truncate_DebugInfoMapping_overlaps( di, di->fsm.maps ); - - /* And acquire new info. */ - # if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd) -- ok = ML_(read_elf_debug_info)( di ); -+ ok = ML_(read_elf_object)( di ); -+ if (ok) -+ di->deferred = True; - # elif defined(VGO_darwin) - ok = ML_(read_macho_debug_info)( di ); - # else -@@ -1443,6 +1445,50 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd ) - } - } - -+/* Load DI if it has a text segment containing A and DI hasn't already -+ been loaded. */ -+ -+void VG_(load_di)( DebugInfo *di, Addr a) -+{ -+ if (!di->deferred -+ || !di->text_present -+ || di->text_size <= 0 -+ || di->text_avma > a -+ || a >= di->text_avma + di->text_size) -+ return; -+ -+ di->deferred = False; -+ ML_(read_elf_debug) (di); -+ ML_(canonicaliseTables)( di ); -+ -+ /* Check invariants listed in -+ Comment_on_IMPORTANT_REPRESENTATIONAL_INVARIANTS in -+ priv_storage.h. */ -+ check_CFSI_related_invariants(di); -+ ML_(finish_CFSI_arrays)(di); -+} -+ -+/* Attempt to load DebugInfo with a text segment containing A, -+ if such a debuginfo hasn't already been loaded. */ -+ -+void VG_(addr_load_di)( Addr a ) -+{ -+ DebugInfo *di; -+ -+ di = VG_(find_DebugInfo)(VG_(current_DiEpoch)(), a); -+ if (di != NULL) -+ if (di->deferred) { -+ di->deferred = False; -+ ML_(read_elf_debug) (di); -+ ML_(canonicaliseTables)( di ); -+ -+ /* Check invariants listed in -+ Comment_on_IMPORTANT_REPRESENTATIONAL_INVARIANTS in -+ priv_storage.h. */ -+ check_CFSI_related_invariants(di); -+ ML_(finish_CFSI_arrays)(di); -+ } -+} - - /* Unmap is simpler - throw away any SegInfos intersecting - [a, a+len). */ -@@ -2746,6 +2792,11 @@ const HChar* VG_(describe_IP)(DiEpoch ep, Addr eip, const InlIPCursor *iipc) - Bool know_objname; - Bool know_srcloc; - -+ if (iipc && iipc->di) -+ VG_(load_di) (iipc->di, eip); -+ else -+ VG_(addr_load_di) (eip); -+ - if (is_bottom(iipc)) { - // At the bottom (towards main), we describe the fn at eip. - know_fnname = VG_(clo_sym_offsets) -@@ -3090,6 +3141,8 @@ static void find_DiCfSI ( /*OUT*/DebugInfo** diP, - if (!is_DI_valid_for_epoch(di, curr_epoch)) - continue; - -+ VG_(load_di)(di, ip); -+ - /* Use the per-DebugInfo summary address ranges to skip - inapplicable DebugInfos quickly. */ - if (di->cfsi_used == 0) -diff --git a/coregrind/m_debuginfo/priv_readelf.h b/coregrind/m_debuginfo/priv_readelf.h -index 57aa0cc3f..7e0fa17c9 100644 ---- a/coregrind/m_debuginfo/priv_readelf.h -+++ b/coregrind/m_debuginfo/priv_readelf.h -@@ -44,13 +44,23 @@ - extern Bool ML_(is_elf_object_file)( const void* image, SizeT n_image, - Bool rel_ok ); - --/* The central function for reading ELF debug info. For the -- object/exe specified by the SegInfo, find ELF sections, then read -- the symbols, line number info, file name info, CFA (stack-unwind -- info) and anything else we want, into the tables within the -- supplied SegInfo. --*/ --extern Bool ML_(read_elf_debug_info) ( DebugInfo* di ); -+/* Read the ELF binary specified by DI. For the object/exe specified -+ by the SegInfo, find ELF sections, then read the symbols, line number -+ info, file name info, CFA (stack-unwind info) and anything else we -+ want, into the tables within the supplied SegInfo. -+ -+ .debug_* sections as well as any separate debuginfo files are not -+ loaded by this function but instead by ML_(read_elf_debug). This -+ separation facilitates lazy loading of debuginfo. */ -+extern Bool ML_(read_elf_object) ( DebugInfo* di ); -+ -+/* Read .debug_* sections from the ELF binary specified by DI. Also -+ attempt to load any separate debuginfo files associated with the -+ object. -+ -+ ML_(read_elf_object) should be called on DI before calling this -+ function. */ -+extern Bool ML_(read_elf_debug) ( DebugInfo* di ); - - extern Bool ML_(check_elf_and_get_rw_loads) ( Int fd, const HChar* filename, Int * rw_load_count ); - -diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h -index a4b90d36b..b959873ab 100644 ---- a/coregrind/m_debuginfo/priv_storage.h -+++ b/coregrind/m_debuginfo/priv_storage.h -@@ -678,6 +678,13 @@ struct _DebugInfo { - invalid and should not be consulted. */ - Bool have_dinfo; /* initially False */ - -+ /* If true then the reading of .debug_* section has been deferred -+ until it this information is required (such as when printing -+ a stacktrace). Additionally, if true then the reading of any -+ separate debuginfo files associated with this object has also -+ been deferred. */ -+ Bool deferred; -+ - /* All the rest of the fields in this structure are filled in once - we have committed to reading the symbols and debug info (that - is, at the point where .have_dinfo is set to True). */ -diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c -index ce7b7998d..f99d3dfd2 100644 ---- a/coregrind/m_debuginfo/readelf.c -+++ b/coregrind/m_debuginfo/readelf.c -@@ -1836,6 +1836,44 @@ static HChar* readlink_path (const HChar *path) - return buf; - } - -+#define FINDX_MIMG(_sec_name, _sec_escn, _post_fx) \ -+ do { \ -+ ElfXX_Shdr a_shdr; \ -+ ML_(img_get)(&a_shdr, mimg, \ -+ INDEX_BIS(shdr_mioff, i, shdr_ment_szB), \ -+ sizeof(a_shdr)); \ -+ if (0 == ML_(img_strcmp_c)(mimg, shdr_strtab_mioff \ -+ + a_shdr.sh_name, _sec_name)) { \ -+ Bool nobits; \ -+ _sec_escn.img = mimg; \ -+ _sec_escn.ioff = (DiOffT)a_shdr.sh_offset; \ -+ _sec_escn.szB = a_shdr.sh_size; \ -+ if (!check_compression(&a_shdr, &_sec_escn)) { \ -+ ML_(symerr)(di, True, " Compression type is unsupported"); \ -+ goto out; \ -+ } \ -+ nobits = a_shdr.sh_type == SHT_NOBITS; \ -+ vg_assert(_sec_escn.img != NULL); \ -+ vg_assert(_sec_escn.ioff != DiOffT_INVALID); \ -+ TRACE_SYMTAB( "%-18s: ioff %llu .. %llu\n", \ -+ _sec_name, (ULong)a_shdr.sh_offset, \ -+ ((ULong)a_shdr.sh_offset) + a_shdr.sh_size - 1); \ -+ /* SHT_NOBITS sections have zero size in the file. */ \ -+ if (!nobits && \ -+ a_shdr.sh_offset + \ -+ a_shdr.sh_size > ML_(img_real_size)(mimg)) { \ -+ ML_(symerr)(di, True, \ -+ " section beyond image end?!"); \ -+ goto out; \ -+ } \ -+ _post_fx; \ -+ } \ -+ } while (0); -+ -+/* Version with no post-effects */ -+#define FIND_MIMG(_sec_name, _sec_escn) \ -+ FINDX_MIMG(_sec_name, _sec_escn, /**/) -+ - /* The central function for reading ELF debug info. For the - object/exe specified by the DebugInfo, find ELF sections, then read - the symbols, line number info, file name info, CFA (stack-unwind -@@ -1843,7 +1881,7 @@ static HChar* readlink_path (const HChar *path) - supplied DebugInfo. - */ - --Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) -+Bool ML_(read_elf_object) ( struct _DebugInfo* di ) - { - /* This function is long and complex. That, and the presence of - nested scopes, means it's not always easy to see which parts are -@@ -1874,7 +1912,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - - - /* TOPLEVEL */ -- Bool res, ok; -+ Bool ok; - Word i, j; - Bool dynbss_present = False; - Bool sdynbss_present = False; -@@ -1882,12 +1920,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - /* Image for the main ELF file we're working with. */ - DiImage* mimg = NULL; - -- /* Ditto for any ELF debuginfo file that we might happen to load. */ -- DiImage* dimg = NULL; -- -- /* Ditto for alternate ELF debuginfo file that we might happen to load. */ -- DiImage* aimg = NULL; -- - /* ELF header offset for the main file. Should be zero since the - ELF header is at start of file. */ - DiOffT ehdr_mioff = 0; -@@ -1970,8 +2002,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - got, plt, and toc. - ---------------------------------------------------------- */ - -- res = False; -- - if (VG_(clo_verbosity) > 1 || VG_(clo_trace_redir)) - VG_(message)(Vg_DebugMsg, "Reading syms from %s\n", - di->fsm.filename ); -@@ -2056,7 +2086,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - shdr_strtab_mioff - = ehdr_mioff /* isn't this always zero? */ + a_shdr.sh_offset; - -- if (!ML_(img_valid)(mimg, shdr_strtab_mioff, -+ if (!ML_(img_valid)(mimg, shdr_strtab_mioff, - 1/*bogus, but we don't know the real size*/ )) { - ML_(symerr)(di, True, "Invalid ELF Section Header String Table"); - goto out; -@@ -2798,10 +2828,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - di->text_avma - di->text_bias, - di->text_avma ); - -- TRACE_SYMTAB("\n"); -- TRACE_SYMTAB("------ Finding image addresses " -- "for debug-info sections ------\n"); -- - /* TOPLEVEL */ - /* Find interesting sections, read the symbol table(s), read any - debug information. Each section is located either in the main, -@@ -2821,27 +2847,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - # if defined(VGO_solaris) - DiSlice ldynsym_escn = DiSlice_INVALID; // .SUNW_ldynsym - # endif -- DiSlice debuglink_escn = DiSlice_INVALID; // .gnu_debuglink -- DiSlice debugaltlink_escn = DiSlice_INVALID; // .gnu_debugaltlink -- DiSlice debug_line_escn = DiSlice_INVALID; // .debug_line (dwarf2) -- DiSlice debug_info_escn = DiSlice_INVALID; // .debug_info (dwarf2) -- DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) -- DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) -- DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) -- DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) -- DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) -- DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) -- DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) -- DiSlice debug_addr_escn = DiSlice_INVALID; // .debug_addr (dwarf5) -- DiSlice debug_str_offsets_escn = DiSlice_INVALID; // .debug_str_offsets (dwarf5) -- DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) -- DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) -- DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) -- DiSlice debug_info_alt_escn = DiSlice_INVALID; // .debug_info (alt) -- DiSlice debug_abbv_alt_escn = DiSlice_INVALID; // .debug_abbrev (alt) -- DiSlice debug_str_alt_escn = DiSlice_INVALID; // .debug_str (alt) -- DiSlice dwarf1d_escn = DiSlice_INVALID; // .debug (dwarf1) -- DiSlice dwarf1l_escn = DiSlice_INVALID; // .line (dwarf1) - DiSlice opd_escn = DiSlice_INVALID; // .opd (dwarf2, - // ppc64be-linux) - DiSlice ehframe_escn[N_EHFRAME_SECTS]; // .eh_frame (dwarf2) -@@ -2868,118 +2873,282 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - /* TOPLEVEL */ - /* Iterate over section headers (again) */ - for (i = 0; i < ehdr_m.e_shnum; i++) { -+ /* NAME ElfSec */ -+ FIND_MIMG( ".dynsym", dynsym_escn) -+ FIND_MIMG( ".dynstr", dynstr_escn) -+ FIND_MIMG( ".symtab", symtab_escn) -+ FIND_MIMG( ".strtab", strtab_escn) -+# if defined(VGO_solaris) -+ FIND_MIMG( ".SUNW_ldynsym", ldynsym_escn) -+# endif - --# define FINDX(_sec_name, _sec_escn, _post_fx) \ -- do { \ -- ElfXX_Shdr a_shdr; \ -- ML_(img_get)(&a_shdr, mimg, \ -- INDEX_BIS(shdr_mioff, i, shdr_ment_szB), \ -- sizeof(a_shdr)); \ -- if (0 == ML_(img_strcmp_c)(mimg, shdr_strtab_mioff \ -- + a_shdr.sh_name, _sec_name)) { \ -- Bool nobits; \ -- _sec_escn.img = mimg; \ -- _sec_escn.ioff = (DiOffT)a_shdr.sh_offset; \ -- _sec_escn.szB = a_shdr.sh_size; \ -- if (!check_compression(&a_shdr, &_sec_escn)) { \ -- ML_(symerr)(di, True, " Compression type is unsupported"); \ -- goto out; \ -- } \ -- nobits = a_shdr.sh_type == SHT_NOBITS; \ -- vg_assert(_sec_escn.img != NULL); \ -- vg_assert(_sec_escn.ioff != DiOffT_INVALID); \ -- TRACE_SYMTAB( "%-18s: ioff %llu .. %llu\n", \ -- _sec_name, (ULong)a_shdr.sh_offset, \ -- ((ULong)a_shdr.sh_offset) + a_shdr.sh_size - 1); \ -- /* SHT_NOBITS sections have zero size in the file. */ \ -- if (!nobits && \ -- a_shdr.sh_offset + \ -- a_shdr.sh_size > ML_(img_real_size)(mimg)) { \ -- ML_(symerr)(di, True, \ -- " section beyond image end?!"); \ -- goto out; \ -- } \ -- _post_fx; \ -- } \ -- } while (0); -+ FINDX_MIMG( ".eh_frame", ehframe_escn[ehframe_mix], -+ do { ehframe_mix++; vg_assert(ehframe_mix <= N_EHFRAME_SECTS); -+ } while (0) -+ ) -+ /* Comment_on_EH_FRAME_MULTIPLE_INSTANCES: w.r.t. .eh_frame -+ multi-instance kludgery, how are we assured that the order -+ in which we fill in ehframe_escn[] is consistent with the -+ order in which we previously filled in di->ehframe_avma[] -+ and di->ehframe_size[] ? By the fact that in both cases, -+ these arrays were filled in by iterating over the section -+ headers top-to-bottom. So both loops (this one and the -+ previous one) encounter the .eh_frame entries in the same -+ order and so fill in these arrays in a consistent order. -+ */ -+ } /* Iterate over section headers (again) */ - -- /* Version with no post-effects */ --# define FIND(_sec_name, _sec_escn) \ -- FINDX(_sec_name, _sec_escn, /**/) -+ /* Check some sizes */ -+ vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); -+ vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0); -+# if defined(VGO_solaris) -+ vg_assert((ldynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); -+# endif - -- /* NAME ElfSec */ -- FIND( ".dynsym", dynsym_escn) -- FIND( ".dynstr", dynstr_escn) -- FIND( ".symtab", symtab_escn) -- FIND( ".strtab", strtab_escn) -+ /* Read symbols */ -+ { -+ void (*read_elf_symtab)(struct _DebugInfo*, const HChar*, -+ DiSlice*, DiSlice*, DiSlice*, Bool); -+# if defined(VGP_ppc64be_linux) -+ read_elf_symtab = read_elf_symtab__ppc64be_linux; -+# else -+ read_elf_symtab = read_elf_symtab__normal; -+# endif -+ if (symtab_escn.img != NULL) -+ read_elf_symtab(di, "symbol table", -+ &symtab_escn, &strtab_escn, &opd_escn, -+ False); -+ read_elf_symtab(di, "dynamic symbol table", -+ &dynsym_escn, &dynstr_escn, &opd_escn, -+ False); - # if defined(VGO_solaris) -- FIND( ".SUNW_ldynsym", ldynsym_escn) -+ read_elf_symtab(di, "local dynamic symbol table", -+ &ldynsym_escn, &dynstr_escn, &opd_escn, -+ False); - # endif -+ } - -- FIND( ".gnu_debuglink", debuglink_escn) -- FIND( ".gnu_debugaltlink", debugaltlink_escn) -+ /* TOPLEVEL */ -+ /* Read .eh_frame and .debug_frame (call-frame-info) if any. Do -+ the .eh_frame section(s) first. */ -+ vg_assert(di->n_ehframe >= 0 && di->n_ehframe <= N_EHFRAME_SECTS); -+ for (i = 0; i < di->n_ehframe; i++) { -+ /* see Comment_on_EH_FRAME_MULTIPLE_INSTANCES above for why -+ this next assertion should hold. */ -+ vg_assert(ML_(sli_is_valid)(ehframe_escn[i])); -+ vg_assert(ehframe_escn[i].szB == di->ehframe_size[i]); -+ ML_(read_callframe_info_dwarf3)( di, -+ ehframe_escn[i], -+ di->ehframe_avma[i], -+ True/*is_ehframe*/ ); -+ } -+ } -+ -+ return True; -+ -+ out: -+ { -+ /* Last, but not least, detach from the image. */ -+ if (mimg) ML_(img_done)(mimg); -+ -+ if (svma_ranges) VG_(deleteXA)(svma_ranges); - -- FIND( ".debug_line", debug_line_escn) -+ return False; -+ } /* out: */ -+ -+ /* NOTREACHED */ -+} -+ -+Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) -+{ -+ Word i, j; -+ Bool res = True; -+ Bool ok; -+ -+ /* Image for the main ELF file we're working with. */ -+ DiImage* mimg = NULL; -+ -+ /* Ditto for any ELF debuginfo file that we might happen to load. */ -+ DiImage* dimg = NULL; -+ -+ /* Ditto for alternate ELF debuginfo file that we might happen to load. */ -+ DiImage* aimg = NULL; -+ -+ /* Section header image addr, # entries, entry size. Also the -+ associated string table. */ -+ DiOffT shdr_mioff = 0; -+ UWord shdr_mnent = 0; -+ UWord shdr_ment_szB = 0; -+ DiOffT shdr_strtab_mioff = 0; -+ -+ DiOffT ehdr_mioff = 0; -+ -+ /* Connect to the primary object image, so that we can read symbols -+ and line number info out of it. It will be disconnected -+ immediately thereafter; it is only connected transiently. */ -+ mimg = ML_(img_from_local_file)(di->fsm.filename); -+ if (mimg == NULL) { -+ VG_(message)(Vg_UserMsg, "warning: connection to image %s failed\n", -+ di->fsm.filename ); -+ VG_(message)(Vg_UserMsg, " no debug info loaded\n" ); -+ return False; -+ } -+ -+ /* Ok, the object image is available. Now verify that it is a -+ valid ELF .so or executable image. */ -+ ok = is_elf_object_file_by_DiImage(mimg, False); -+ if (!ok) { -+ ML_(symerr)(di, True, "Invalid ELF Header"); -+ goto out; -+ } -+ -+ /* Find where the program and section header tables are, and give -+ up if either is missing or outside the image (bogus). */ -+ ElfXX_Ehdr ehdr_m; -+ vg_assert(ehdr_mioff == 0); // ensured by its initialisation -+ ok = ML_(img_valid)(mimg, ehdr_mioff, sizeof(ehdr_m)); -+ vg_assert(ok); // ML_(is_elf_object_file) should ensure this -+ ML_(img_get)(&ehdr_m, mimg, ehdr_mioff, sizeof(ehdr_m)); -+ -+ shdr_mioff = ehdr_mioff + ehdr_m.e_shoff; -+ shdr_mnent = ehdr_m.e_shnum; -+ shdr_ment_szB = ehdr_m.e_shentsize; -+ -+ if (shdr_mnent == 0 -+ || !ML_(img_valid)(mimg, shdr_mioff, shdr_mnent * shdr_ment_szB)) { -+ ML_(symerr)(di, True, "Missing or invalid ELF Section Header Table"); -+ goto out; -+ } -+ -+ /* Also find the section header's string table, and validate. */ -+ /* checked previously by is_elf_object_file: */ -+ vg_assert(ehdr_m.e_shstrndx != SHN_UNDEF); -+ -+ // shdr_mioff is the offset of the section header table -+ // and we need the ehdr_m.e_shstrndx'th entry -+ { ElfXX_Shdr a_shdr; -+ ML_(img_get)(&a_shdr, mimg, -+ INDEX_BIS(shdr_mioff, ehdr_m.e_shstrndx, shdr_ment_szB), -+ sizeof(a_shdr)); -+ shdr_strtab_mioff -+ = ehdr_mioff /* isn't this always zero? */ + a_shdr.sh_offset; -+ -+ if (!ML_(img_valid)(mimg, shdr_strtab_mioff, -+ 1/*bogus, but we don't know the real size*/ )) { -+ ML_(symerr)(di, True, "Invalid ELF Section Header String Table"); -+ goto out; -+ } -+ } -+ -+ TRACE_SYMTAB("\n"); -+ TRACE_SYMTAB("------ Finding image addresses " -+ "for debug-info sections ------\n"); -+ /* TOPLEVEL */ -+ /* Find interesting sections, read the symbol table(s), read any -+ debug information. Each section is located either in the main, -+ debug or alt-debug files, but only in one. For each section, -+ |section_escn| records which of |mimg|, |dimg| or |aimg| we -+ found it in, along with the section's image offset and its size. -+ The triples (section_img, section_ioff, section_szB) are -+ consistent, in that they are always either (NULL, -+ DiOffT_INVALID, 0), or refer to the same image, and are all -+ assigned together. */ -+ -+ { -+ /* TOPLEVEL */ -+ DiSlice strtab_escn = DiSlice_INVALID; // .strtab -+ DiSlice symtab_escn = DiSlice_INVALID; // .symtab -+ DiSlice debuglink_escn = DiSlice_INVALID; // .gnu_debuglink -+ DiSlice debugaltlink_escn = DiSlice_INVALID; // .gnu_debugaltlink -+ DiSlice debug_line_escn = DiSlice_INVALID; // .debug_line (dwarf2) -+ DiSlice debug_info_escn = DiSlice_INVALID; // .debug_info (dwarf2) -+ DiSlice debug_types_escn = DiSlice_INVALID; // .debug_types (dwarf4) -+ DiSlice debug_abbv_escn = DiSlice_INVALID; // .debug_abbrev (dwarf2) -+ DiSlice debug_str_escn = DiSlice_INVALID; // .debug_str (dwarf2) -+ DiSlice debug_line_str_escn = DiSlice_INVALID; // .debug_line_str(dwarf5) -+ DiSlice debug_ranges_escn = DiSlice_INVALID; // .debug_ranges (dwarf2) -+ DiSlice debug_rnglists_escn = DiSlice_INVALID; // .debug_rnglists(dwarf5) -+ DiSlice debug_loclists_escn = DiSlice_INVALID; // .debug_loclists(dwarf5) -+ DiSlice debug_addr_escn = DiSlice_INVALID; // .debug_addr (dwarf5) -+ DiSlice debug_str_offsets_escn = DiSlice_INVALID; // .debug_str_offsets (dwarf5) -+ DiSlice debug_loc_escn = DiSlice_INVALID; // .debug_loc (dwarf2) -+ DiSlice debug_frame_escn = DiSlice_INVALID; // .debug_frame (dwarf2) -+ DiSlice debug_line_alt_escn = DiSlice_INVALID; // .debug_line (alt) -+ DiSlice debug_info_alt_escn = DiSlice_INVALID; // .debug_info (alt) -+ DiSlice debug_abbv_alt_escn = DiSlice_INVALID; // .debug_abbrev (alt) -+ DiSlice debug_str_alt_escn = DiSlice_INVALID; // .debug_str (alt) -+ DiSlice dwarf1d_escn = DiSlice_INVALID; // .debug (dwarf1) -+ DiSlice dwarf1l_escn = DiSlice_INVALID; // .line (dwarf1) -+ DiSlice opd_escn = DiSlice_INVALID; // .opd (dwarf2, -+ // ppc64be-linux) -+ -+ /* TOPLEVEL */ -+ /* Iterate over section headers (again) */ -+ for (i = 0; i < ehdr_m.e_shnum; i++) { -+ -+ /* NAME ElfSec */ -+ FIND_MIMG( ".symtab", symtab_escn) -+ FIND_MIMG( ".strtab", strtab_escn) -+ FIND_MIMG( ".gnu_debuglink", debuglink_escn) -+ FIND_MIMG( ".gnu_debugaltlink", debugaltlink_escn) -+ -+ FIND_MIMG( ".debug_line", debug_line_escn) - if (!ML_(sli_is_valid)(debug_line_escn)) -- FIND(".zdebug_line", debug_line_escn) -+ FIND_MIMG(".zdebug_line", debug_line_escn) - -- FIND( ".debug_info", debug_info_escn) -+ FIND_MIMG( ".debug_info", debug_info_escn) - if (!ML_(sli_is_valid)(debug_info_escn)) -- FIND(".zdebug_info", debug_info_escn) -+ FIND_MIMG(".zdebug_info", debug_info_escn) - -- FIND( ".debug_types", debug_types_escn) -+ FIND_MIMG( ".debug_types", debug_types_escn) - if (!ML_(sli_is_valid)(debug_types_escn)) -- FIND(".zdebug_types", debug_types_escn) -+ FIND_MIMG(".zdebug_types", debug_types_escn) - -- FIND( ".debug_abbrev", debug_abbv_escn) -+ FIND_MIMG( ".debug_abbrev", debug_abbv_escn) - if (!ML_(sli_is_valid)(debug_abbv_escn)) -- FIND(".zdebug_abbrev", debug_abbv_escn) -+ FIND_MIMG(".zdebug_abbrev", debug_abbv_escn) - -- FIND( ".debug_str", debug_str_escn) -+ FIND_MIMG( ".debug_str", debug_str_escn) - if (!ML_(sli_is_valid)(debug_str_escn)) -- FIND(".zdebug_str", debug_str_escn) -+ FIND_MIMG(".zdebug_str", debug_str_escn) - -- FIND( ".debug_line_str", debug_line_str_escn) -+ FIND_MIMG( ".debug_line_str", debug_line_str_escn) - if (!ML_(sli_is_valid)(debug_line_str_escn)) -- FIND(".zdebug_str", debug_line_str_escn) -+ FIND_MIMG(".zdebug_str", debug_line_str_escn) - -- FIND( ".debug_ranges", debug_ranges_escn) -+ FIND_MIMG( ".debug_ranges", debug_ranges_escn) - if (!ML_(sli_is_valid)(debug_ranges_escn)) -- FIND(".zdebug_ranges", debug_ranges_escn) -+ FIND_MIMG(".zdebug_ranges", debug_ranges_escn) - -- FIND( ".debug_rnglists", debug_rnglists_escn) -+ FIND_MIMG( ".debug_rnglists", debug_rnglists_escn) - if (!ML_(sli_is_valid)(debug_rnglists_escn)) -- FIND(".zdebug_rnglists", debug_rnglists_escn) -+ FIND_MIMG(".zdebug_rnglists", debug_rnglists_escn) - -- FIND( ".debug_loclists", debug_loclists_escn) -+ FIND_MIMG( ".debug_loclists", debug_loclists_escn) - if (!ML_(sli_is_valid)(debug_loclists_escn)) -- FIND(".zdebug_loclists", debug_loclists_escn) -+ FIND_MIMG(".zdebug_loclists", debug_loclists_escn) - -- FIND( ".debug_loc", debug_loc_escn) -+ FIND_MIMG( ".debug_loc", debug_loc_escn) - if (!ML_(sli_is_valid)(debug_loc_escn)) -- FIND(".zdebug_loc", debug_loc_escn) -+ FIND_MIMG(".zdebug_loc", debug_loc_escn) - -- FIND( ".debug_frame", debug_frame_escn) -+ FIND_MIMG( ".debug_frame", debug_frame_escn) - if (!ML_(sli_is_valid)(debug_frame_escn)) -- FIND(".zdebug_frame", debug_frame_escn) -+ FIND_MIMG(".zdebug_frame", debug_frame_escn) - -- FIND( ".debug_addr", debug_addr_escn) -+ FIND_MIMG( ".debug_addr", debug_addr_escn) - if (!ML_(sli_is_valid)(debug_addr_escn)) -- FIND(".zdebug_addr", debug_addr_escn) -+ FIND_MIMG(".zdebug_addr", debug_addr_escn) - -- FIND( ".debug_str_offsets", debug_str_offsets_escn) -+ FIND_MIMG( ".debug_str_offsets", debug_str_offsets_escn) - if (!ML_(sli_is_valid)(debug_str_offsets_escn)) -- FIND(".zdebug_str_offsets", debug_str_offsets_escn) -+ FIND_MIMG(".zdebug_str_offsets", debug_str_offsets_escn) - -- FIND( ".debug", dwarf1d_escn) -- FIND( ".line", dwarf1l_escn) -+ FIND_MIMG( ".debug", dwarf1d_escn) -+ FIND_MIMG( ".line", dwarf1l_escn) - -- FIND( ".opd", opd_escn) -+ FIND_MIMG( ".opd", opd_escn) - -- FINDX( ".eh_frame", ehframe_escn[ehframe_mix], -- do { ehframe_mix++; vg_assert(ehframe_mix <= N_EHFRAME_SECTS); -- } while (0) -- ) - /* Comment_on_EH_FRAME_MULTIPLE_INSTANCES: w.r.t. .eh_frame - multi-instance kludgery, how are we assured that the order - in which we fill in ehframe_escn[] is consistent with the -@@ -2991,8 +3160,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - order and so fill in these arrays in a consistent order. - */ - --# undef FINDX --# undef FIND - } /* Iterate over section headers (again) */ - - /* TOPLEVEL */ -@@ -3465,53 +3632,23 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - } /* Find all interesting sections */ - } /* do we have a debug image? */ - -- - /* TOPLEVEL */ -- /* Check some sizes */ -- vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); - vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0); --# if defined(VGO_solaris) -- vg_assert((ldynsym_escn.szB % sizeof(ElfXX_Sym)) == 0); --# endif - - /* TOPLEVEL */ - /* Read symbols */ - { - void (*read_elf_symtab)(struct _DebugInfo*, const HChar*, - DiSlice*, DiSlice*, DiSlice*, Bool); -- Bool symtab_in_debug; - # if defined(VGP_ppc64be_linux) - read_elf_symtab = read_elf_symtab__ppc64be_linux; - # else - read_elf_symtab = read_elf_symtab__normal; - # endif -- symtab_in_debug = symtab_escn.img == dimg; -- read_elf_symtab(di, "symbol table", -- &symtab_escn, &strtab_escn, &opd_escn, -- symtab_in_debug); -- read_elf_symtab(di, "dynamic symbol table", -- &dynsym_escn, &dynstr_escn, &opd_escn, -- False); --# if defined(VGO_solaris) -- read_elf_symtab(di, "local dynamic symbol table", -- &ldynsym_escn, &dynstr_escn, &opd_escn, -- False); --# endif -- } -- -- /* TOPLEVEL */ -- /* Read .eh_frame and .debug_frame (call-frame-info) if any. Do -- the .eh_frame section(s) first. */ -- vg_assert(di->n_ehframe >= 0 && di->n_ehframe <= N_EHFRAME_SECTS); -- for (i = 0; i < di->n_ehframe; i++) { -- /* see Comment_on_EH_FRAME_MULTIPLE_INSTANCES above for why -- this next assertion should hold. */ -- vg_assert(ML_(sli_is_valid)(ehframe_escn[i])); -- vg_assert(ehframe_escn[i].szB == di->ehframe_size[i]); -- ML_(read_callframe_info_dwarf3)( di, -- ehframe_escn[i], -- di->ehframe_avma[i], -- True/*is_ehframe*/ ); -+ if (symtab_escn.img != NULL) -+ read_elf_symtab(di, "symbol table", -+ &symtab_escn, &strtab_escn, &opd_escn, -+ True); - } - if (ML_(sli_is_valid)(debug_frame_escn)) { - ML_(read_callframe_info_dwarf3)( di, -@@ -3643,8 +3780,6 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) - if (dimg) ML_(img_done)(dimg); - if (aimg) ML_(img_done)(aimg); - -- if (svma_ranges) VG_(deleteXA)(svma_ranges); -- - return res; - } /* out: */ - -diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c -index c3fa62e96..3ad114607 100644 ---- a/coregrind/m_debuginfo/storage.c -+++ b/coregrind/m_debuginfo/storage.c -@@ -1297,8 +1297,7 @@ void ML_(addVar)( struct _DebugInfo* di, - that those extra sections have the same bias as .text, but that - seems a reasonable assumption to me. */ - /* This is assured us by top level steering logic in debuginfo.c, -- and it is re-checked at the start of -- ML_(read_elf_debug_info). */ -+ and it is re-checked at the start of ML_(read_elf_object). */ - vg_assert(di->fsm.have_rx_map && di->fsm.rw_map_count); - if (level > 0 && ML_(find_rx_mapping)(di, aMin, aMax) == NULL) { - if (VG_(clo_verbosity) > 1) { -@@ -1725,7 +1724,6 @@ static void canonicaliseSymtab ( struct _DebugInfo* di ) - for (i = 0; i < di->symtab_used; i++) { - DiSym* sym = &di->symtab[i]; - vg_assert(sym->pri_name); -- vg_assert(!sym->sec_names); - } - - /* Sort by address. */ -@@ -2383,6 +2381,9 @@ void ML_(finish_CFSI_arrays) ( struct _DebugInfo* di ) - vg_assert (f_holes == n_holes); - vg_assert (pos == new_used); - -+ if (di->deferred) -+ return; -+ - di->cfsi_used = new_used; - di->cfsi_size = new_used; - ML_(dinfo_free) (di->cfsi_rd); -@@ -2398,9 +2399,13 @@ void ML_(canonicaliseTables) ( struct _DebugInfo* di ) - canonicaliseLoctab ( di ); - canonicaliseInltab ( di ); - ML_(canonicaliseCFI) ( di ); -+ canonicaliseVarInfo ( di ); -+ -+ if (di->deferred) -+ return; -+ - if (di->cfsi_m_pool) - VG_(freezeDedupPA) (di->cfsi_m_pool, ML_(dinfo_shrink_block)); -- canonicaliseVarInfo ( di ); - if (di->strpool) - VG_(freezeDedupPA) (di->strpool, ML_(dinfo_shrink_block)); - if (di->fndnpool) -diff --git a/coregrind/pub_core_debuginfo.h b/coregrind/pub_core_debuginfo.h -index 938ed00cc..ce7246217 100644 ---- a/coregrind/pub_core_debuginfo.h -+++ b/coregrind/pub_core_debuginfo.h -@@ -76,6 +76,10 @@ extern void VG_(di_notify_pdb_debuginfo)( Int fd, Addr avma, - extern void VG_(di_notify_vm_protect)( Addr a, SizeT len, UInt prot ); - #endif - -+extern void VG_(addr_load_di)( Addr a ); -+ -+extern void VG_(load_di)( DebugInfo *di, Addr a ); -+ - extern void VG_(di_discard_ALL_debuginfo)( void ); - - /* Like VG_(get_fnname), but it does not do C++ demangling nor Z-demangling --- -2.41.0 - diff --git a/valgrind-3.21.0-pgste.patch b/valgrind-3.21.0-pgste.patch deleted file mode 100644 index 4646aa2..0000000 --- a/valgrind-3.21.0-pgste.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 56f1bd12c92806fd18337ba4cd3c0a8d714d0e94 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Thu, 15 Jun 2023 17:24:53 +0200 -Subject: [PATCH] Bug 470978 - s390x: Link the tools with -Wl,--s390-pgste - -Programs that require the PGSTE mode to be enabled may currently fail -under Valgrind. In particular this affects qemu-kvm. - -While it is also possible to enable the PGSTE mode globally with - - sysctl vm.allocate_psgte=1 - -the problem can more easily be prevented by linking the Valgrind tools -with -Wl,--s390-pgste. Add a configure check if the linker supports this, -and activate the flag if it does. - -To verify the intended result, the following shell command can be used to -list the executables having this flag set: - - find . -type f -perm -u+x -execdir \ - /bin/sh -c 'readelf -lW $0 2>/dev/null | grep PGSTE' {} \; -print ---- - Makefile.tool.am | 2 +- - configure.ac | 20 ++++++++++++++++++++ - 2 files changed, 21 insertions(+), 1 deletion(-) - -diff --git a/Makefile.tool.am b/Makefile.tool.am -index df9502913..4ce6d5ab0 100644 ---- a/Makefile.tool.am -+++ b/Makefile.tool.am -@@ -78,7 +78,7 @@ TOOL_LDFLAGS_ARM64_LINUX = \ - $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ - - TOOL_LDFLAGS_S390X_LINUX = \ -- $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ -+ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ @FLAG_S390_PGSTE@ - - TOOL_LDFLAGS_X86_DARWIN = \ - $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 -diff --git a/configure.ac b/configure.ac -index 0cf84a1c0..1d4164a7d 100755 ---- a/configure.ac -+++ b/configure.ac -@@ -3096,6 +3096,26 @@ AC_SUBST([FLAG_NO_BUILD_ID], [""]) - fi - CFLAGS=$safe_CFLAGS - -+# On s390x, if the linker supports -Wl,--s390-pgste, then we build the -+# tools with that flag. This enables running programs that need it, such -+# as qemu-kvm. -+if test x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX; then -+AC_MSG_CHECKING([if the linker accepts -Wl,--s390-pgste]) -+safe_CFLAGS=$CFLAGS -+CFLAGS="-Wl,--s390-pgste" -+ -+AC_LINK_IFELSE( -+[AC_LANG_PROGRAM([ ], [return 0;])], -+[ -+ AC_SUBST([FLAG_S390_PGSTE], ["-Wl,--s390-pgste"]) -+ AC_MSG_RESULT([yes]) -+], [ -+ AC_SUBST([FLAG_S390_PGSTE], [""]) -+ AC_MSG_RESULT([no]) -+]) -+CFLAGS=$safe_CFLAGS -+fi -+ - # does the ppc assembler support "mtocrf" et al? - AC_MSG_CHECKING([if ppc32/64 as supports mtocrf/mfocrf]) - --- -2.40.1 - diff --git a/valgrind-3.21.0-realloc-again.patch b/valgrind-3.21.0-realloc-again.patch deleted file mode 100644 index 7501cd2..0000000 --- a/valgrind-3.21.0-realloc-again.patch +++ /dev/null @@ -1,167 +0,0 @@ -From b904112d7084227f8d6fab322bc360a8a6240a51 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Thu, 1 Jun 2023 16:10:56 +0200 -Subject: [PATCH] memcheck: Handle Err_ReallocSizeZero in MC_(eq_Error) - -When an realloc size zero error is emitted MC_(eq_Error) is called to -see if the errors can be deduplicated. This crashed since -Err_ReallocSizeZero wasn't handled. Handle it like Err_Free. - -Also add a testcase for this case and test with both ---realloc-zero-bytes-frees=yes and ---realloc-zero-bytes-frees=no. -Which will report a different number of errors. - -https://bugs.kde.org/show_bug.cgi?id=470520 ---- - memcheck/mc_errors.c | 1 + - memcheck/tests/Makefile.am | 7 +++++++ - memcheck/tests/realloc_size_zero_again.c | 15 +++++++++++++++ - .../realloc_size_zero_again_no.stderr.exp | 18 ++++++++++++++++++ - .../realloc_size_zero_again_no.stdout.exp | 0 - .../tests/realloc_size_zero_again_no.vgtest | 2 ++ - .../realloc_size_zero_again_yes.stderr.exp | 18 ++++++++++++++++++ - .../realloc_size_zero_again_yes.stdout.exp | 0 - .../tests/realloc_size_zero_again_yes.vgtest | 2 ++ - 9 files changed, 63 insertions(+) - create mode 100644 memcheck/tests/realloc_size_zero_again.c - create mode 100644 memcheck/tests/realloc_size_zero_again_no.stderr.exp - create mode 100644 memcheck/tests/realloc_size_zero_again_no.stdout.exp - create mode 100644 memcheck/tests/realloc_size_zero_again_no.vgtest - create mode 100644 memcheck/tests/realloc_size_zero_again_yes.stderr.exp - create mode 100644 memcheck/tests/realloc_size_zero_again_yes.stdout.exp - create mode 100644 memcheck/tests/realloc_size_zero_again_yes.vgtest - -diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c -index 00d6ec301..65210a220 100644 ---- a/memcheck/mc_errors.c -+++ b/memcheck/mc_errors.c -@@ -1041,6 +1041,7 @@ Bool MC_(eq_Error) ( VgRes res, const Error* e1, const Error* e2 ) - case Err_IllegalMempool: - case Err_Overlap: - case Err_Cond: -+ case Err_ReallocSizeZero: - return True; - - case Err_FishyValue: -diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am -index 71c38acba..5a17fd35d 100644 ---- a/memcheck/tests/Makefile.am -+++ b/memcheck/tests/Makefile.am -@@ -291,8 +291,14 @@ EXTRA_DIST = \ - realloc_size_zero.vgtest \ - realloc_size_zero_yes.stderr.exp realloc_size_zero_yes.stdout.exp \ - realloc_size_zero_yes.vgtest \ -+ realloc_size_zero_again_yes.stderr.exp \ -+ realloc_size_zero_again_yes.stdout.exp \ -+ realloc_size_zero_again_yes.vgtest \ - realloc_size_zero_no.stderr.exp realloc_size_zero_no.stdout.exp \ - realloc_size_zero_no.vgtest \ -+ realloc_size_zero_again_no.stderr.exp \ -+ realloc_size_zero_again_no.stdout.exp \ -+ realloc_size_zero_again_no.vgtest \ - realloc_size_zero_off.stderr.exp realloc_size_zero_off.stdout.exp \ - realloc_size_zero_off.vgtest \ - realloc_size_zero_mismatch.stderr.exp \ -@@ -459,6 +465,7 @@ check_PROGRAMS = \ - posix_memalign \ - post-syscall \ - realloc_size_zero realloc_size_zero_mismatch \ -+ realloc_size_zero_again \ - realloc1 realloc2 realloc3 \ - recursive-merge \ - resvn_stack \ -diff --git a/memcheck/tests/realloc_size_zero_again.c b/memcheck/tests/realloc_size_zero_again.c -new file mode 100644 -index 000000000..782d4bde5 ---- /dev/null -+++ b/memcheck/tests/realloc_size_zero_again.c -@@ -0,0 +1,15 @@ -+#include -+ -+int -+main () -+{ -+ char *p = malloc (1024); -+ for (int i = 3; i >= 0; i--) -+ for (int j = 0; j <= 3; j++) -+ { -+ char *q = realloc (p, i * j * 512); -+ p = q; -+ } -+ -+ free (p); -+} -diff --git a/memcheck/tests/realloc_size_zero_again_no.stderr.exp b/memcheck/tests/realloc_size_zero_again_no.stderr.exp -new file mode 100644 -index 000000000..b9c061d1a ---- /dev/null -+++ b/memcheck/tests/realloc_size_zero_again_no.stderr.exp -@@ -0,0 +1,18 @@ -+realloc() with size 0 -+ at 0x........: realloc (vg_replace_malloc.c:...) -+ ... -+ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ ... -+ -+ERROR SUMMARY: 7 errors from 1 contexts (suppressed: 0 from 0) -+ -+7 errors in context 1 of 1: -+realloc() with size 0 -+ at 0x........: realloc (vg_replace_malloc.c:...) -+ ... -+ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ ... -+ -+ERROR SUMMARY: 7 errors from 1 contexts (suppressed: 0 from 0) -diff --git a/memcheck/tests/realloc_size_zero_again_no.stdout.exp b/memcheck/tests/realloc_size_zero_again_no.stdout.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/realloc_size_zero_again_no.vgtest b/memcheck/tests/realloc_size_zero_again_no.vgtest -new file mode 100644 -index 000000000..f1757b6c1 ---- /dev/null -+++ b/memcheck/tests/realloc_size_zero_again_no.vgtest -@@ -0,0 +1,2 @@ -+prog: realloc_size_zero_again -+vgopts: -q -s --realloc-zero-bytes-frees=no -diff --git a/memcheck/tests/realloc_size_zero_again_yes.stderr.exp b/memcheck/tests/realloc_size_zero_again_yes.stderr.exp -new file mode 100644 -index 000000000..d40aa2455 ---- /dev/null -+++ b/memcheck/tests/realloc_size_zero_again_yes.stderr.exp -@@ -0,0 +1,18 @@ -+realloc() with size 0 -+ at 0x........: realloc (vg_replace_malloc.c:...) -+ ... -+ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ ... -+ -+ERROR SUMMARY: 5 errors from 1 contexts (suppressed: 0 from 0) -+ -+5 errors in context 1 of 1: -+realloc() with size 0 -+ at 0x........: realloc (vg_replace_malloc.c:...) -+ ... -+ Address 0x........ is 0 bytes inside a block of size 1,024 alloc'd -+ at 0x........: malloc (vg_replace_malloc.c:...) -+ ... -+ -+ERROR SUMMARY: 5 errors from 1 contexts (suppressed: 0 from 0) -diff --git a/memcheck/tests/realloc_size_zero_again_yes.stdout.exp b/memcheck/tests/realloc_size_zero_again_yes.stdout.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/realloc_size_zero_again_yes.vgtest b/memcheck/tests/realloc_size_zero_again_yes.vgtest -new file mode 100644 -index 000000000..215392ed6 ---- /dev/null -+++ b/memcheck/tests/realloc_size_zero_again_yes.vgtest -@@ -0,0 +1,2 @@ -+prog: realloc_size_zero_again -+vgopts: -q -s --realloc-zero-bytes-frees=yes --- -2.40.1 - diff --git a/valgrind-3.21.0-vgm-tests.patch b/valgrind-3.21.0-vgm-tests.patch deleted file mode 100644 index 8fa7712..0000000 --- a/valgrind-3.21.0-vgm-tests.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 21f7a2af2805a02a144c81f12895c134f4a171a3 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Mon, 22 May 2023 19:49:08 +0200 -Subject: [PATCH 2/2] Bug 470132 - s390x: Increase test coverage for VGM - -Add more tests for the VGM instruction, to verify the fix for the VGM -wrap-around case. Also test setting unused bits in the I2 and I3 fields, -to check that Valgrind ignores them as it should. ---- - none/tests/s390x/vec2.c | 44 ++++++++++++++++++++++++++++++++ - none/tests/s390x/vec2.stdout.exp | 20 +++++++++++++++ - 2 files changed, 64 insertions(+) - -diff --git a/none/tests/s390x/vec2.c b/none/tests/s390x/vec2.c -index 73b04dee4..c473a2a9a 100644 ---- a/none/tests/s390x/vec2.c -+++ b/none/tests/s390x/vec2.c -@@ -301,6 +301,49 @@ static void test_all_fp_int_conversions() - #undef TEST_EXEC - #undef TEST_GENERATE - -+/* -- Vector generate mask -- */ -+ -+#define TEST_GENERATE(insn, i2, i3, m4) \ -+ static void test_vgm_##i2##_##i3##_##m4(void) \ -+ { \ -+ ulong_v out = vec_ini; \ -+ __asm__("vgm %[out]," #i2 "," #i3 "," #m4 : [out] "+v"(out) : :); \ -+ printf("\t%016lx %016lx\n", out[0], out[1]); \ -+ } -+ -+#define TEST_EXEC(insn, i2, i3, m4) \ -+ do { \ -+ puts(#insn " " #i2 "," #i3 "," #m4); \ -+ test_vgm_##i2##_##i3##_##m4(); \ -+ } while (0) -+ -+#define INSNS \ -+ XTEST(vgmb, 2, 1, 0); \ -+ XTEST(vgmb, 0xf7, 0x30, 0); \ -+ XTEST(vgmb, 0, 0, 0); \ -+ XTEST(vgmh, 3, 2, 1); \ -+ XTEST(vgmh, 15, 15, 1); \ -+ XTEST(vgmf, 4, 3, 2); \ -+ XTEST(vgmf, 16, 17, 2); \ -+ XTEST(vgmg, 55, 63, 3); \ -+ XTEST(vgmg, 43, 55, 3); \ -+ XTEST(vgmg, 63, 2, 3); -+ -+#define XTEST TEST_GENERATE -+INSNS -+#undef XTEST -+ -+static void test_all_generate_mask() -+{ -+#define XTEST TEST_EXEC -+ INSNS -+#undef XTEST -+} -+ -+#undef INSNS -+#undef TEST_EXEC -+#undef TEST_GENERATE -+ - - int main() - { -@@ -310,5 +353,6 @@ int main() - test_all_double_bitshifts(); - test_all_int_fp_conversions(); - test_all_fp_int_conversions(); -+ test_all_generate_mask(); - return 0; - } -diff --git a/none/tests/s390x/vec2.stdout.exp b/none/tests/s390x/vec2.stdout.exp -index b32cbe1bc..2c9ac21c1 100644 ---- a/none/tests/s390x/vec2.stdout.exp -+++ b/none/tests/s390x/vec2.stdout.exp -@@ -166,3 +166,23 @@ vcsfp 0 - vcsfp 8 - 00ffffff - - - - 00000004 - - - -+vgmb 2,1,0 -+ ffffffffffffffff ffffffffffffffff -+vgmb 0xf7,0x30,0 -+ 8181818181818181 8181818181818181 -+vgmb 0,0,0 -+ 8080808080808080 8080808080808080 -+vgmh 3,2,1 -+ ffffffffffffffff ffffffffffffffff -+vgmh 15,15,1 -+ 0001000100010001 0001000100010001 -+vgmf 4,3,2 -+ ffffffffffffffff ffffffffffffffff -+vgmf 16,17,2 -+ 0000c0000000c000 0000c0000000c000 -+vgmg 55,63,3 -+ 00000000000001ff 00000000000001ff -+vgmg 43,55,3 -+ 00000000001fff00 00000000001fff00 -+vgmg 63,2,3 -+ e000000000000001 e000000000000001 --- -2.40.1 - diff --git a/valgrind-3.21.0-vgm.patch b/valgrind-3.21.0-vgm.patch deleted file mode 100644 index 422035f..0000000 --- a/valgrind-3.21.0-vgm.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 70ef4417837b690755feede0088331a28b102c65 Mon Sep 17 00:00:00 2001 -From: Andreas Arnez -Date: Mon, 22 May 2023 18:57:35 +0200 -Subject: [PATCH 1/2] Bug 470132 - s390x: Fix the wrap-around case in VGM - -Valgrind's implementation of VGM is incomplete: - -* It doesn't support generating a wrap-around bit mask. Such a mask - should result when the ending bit position is smaller than the starting - bit position. Valgrind runs into an assertion failure instead. - -* It doesn't ignore unused bits in the I2 and I3 fields of the - instruction, as it should. - -Fix this by re-implementing the main logic in s390_irgen_VGM(). ---- - VEX/priv/guest_s390_toIR.c | 57 +++++++++++++++----------------------- - 1 file changed, 22 insertions(+), 35 deletions(-) - -diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c -index 11dda41ef..d9d746c38 100644 ---- a/VEX/priv/guest_s390_toIR.c -+++ b/VEX/priv/guest_s390_toIR.c -@@ -16388,50 +16388,37 @@ s390_irgen_VGBM(UChar v1, UShort i2, UChar m3 __attribute__((unused))) - static const HChar * - s390_irgen_VGM(UChar v1, UShort i2, UChar m3) - { -- UChar from = (i2 & 0xff00) >> 8; -- UChar to = (i2 & 0x00ff); -- ULong value = 0UL; -- IRType type = s390_vr_get_type(m3); -- vassert(from <= to); -- -- UChar maxIndex = 0; -- switch (type) { -- case Ity_I8: -- maxIndex = 7; -- break; -- case Ity_I16: -- maxIndex = 15; -- break; -- case Ity_I32: -- maxIndex = 31; -- break; -- case Ity_I64: -- maxIndex = 63; -- break; -- default: -- vpanic("s390_irgen_VGM: unknown type"); -- } -- -- for(UChar index = from; index <= to; index++) { -- value |= (1ULL << (maxIndex - index)); -- } -- -- IRExpr *fillValue; -- switch (type) { -- case Ity_I8: -+ s390_insn_assert("vgm", m3 <= 3); -+ -+ UChar max_idx = (8 << m3) - 1; -+ UChar from = max_idx & (i2 >> 8); -+ UChar to = max_idx & i2; -+ ULong all_one = (1ULL << max_idx << 1) - 1; -+ ULong value = (all_one >> from) ^ (all_one >> to >> 1); -+ -+ /* In case of wrap-around we now have a value that needs inverting: -+ to from -+ V V -+ 00000111111111110000000000000000 */ -+ if (to < from) -+ value ^= all_one; -+ -+ IRExpr* fillValue; -+ switch (m3) { -+ case 0: - fillValue = mkU8(value); - break; -- case Ity_I16: -+ case 1: - fillValue = mkU16(value); - break; -- case Ity_I32: -+ case 2: - fillValue = mkU32(value); - break; -- case Ity_I64: -+ case 3: - fillValue = mkU64(value); - break; - default: -- vpanic("s390_irgen_VGM: unknown type"); -+ vpanic("s390_irgen_VGM: unknown element size"); - } - - s390_vr_fill(v1, fillValue); --- -2.40.1 - diff --git a/valgrind.spec b/valgrind.spec index d630003..ab1816f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.21.0 -Release: 10%{?dist} +Version: 3.22.0 +Release: 0.1.RC1%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -69,7 +69,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -87,41 +87,6 @@ Patch4: valgrind-3.16.0-some-Wl-z-now.patch # by disabling overlap checking for memcpy Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch -# Add --with-gdbscripts-dir=PATH configure option -# https://bugs.kde.org/show_bug.cgi?id=469768 -Patch6: valgrind-3.21.0-Add-with-gdbscripts-dir.patch - -# Add epoll_pwait2 -# https://bugs.kde.org/show_bug.cgi?id=460192 -Patch7: valgrind-3.21.0-epoll_pwait2.patch - -# Can't run callgrind_control with valgrind 3.21.0 because of perl errors -# https://bugs.kde.org/show_bug.cgi?id=470121 -Patch8: valgrind-3.21.0-callgrind_control-no-strict.patch - -# Multiple realloc zero errors crash in MC_(eq_Error) -# https://bugs.kde.org/show_bug.cgi?id=470520 -Patch9: valgrind-3.21.0-realloc-again.patch - -# s390x: Assertion failure on VGM instruction -# https://bugs.kde.org/show_bug.cgi?id=470132 -Patch10: valgrind-3.21.0-vgm.patch -Patch11: valgrind-3.21.0-vgm-tests.patch - -# s390x: Valgrind cannot start qemu-kvm when "sysctl vm.allocate_pgste=0" -# https://bugs.kde.org/show_bug.cgi?id=470978 -Patch12: valgrind-3.21.0-pgste.patch - -# gdb --multi mode stdout redirecting to stderr -# https://bugs.kde.org/show_bug.cgi?id=471311 -Patch13: valgrind-3.21.0-gdb-multi-mode-stdout-redirecting-to-stderr.patch - -# Add support for lazy reading and downloading of DWARF debuginfo -# https://bugs.kde.org/show_bug.cgi?id=471807 -# Plus fixup commit a0d555a0dfe078ef04ea49d991a8090ab14bd4a5 -Patch14: valgrind-3.21.0-lazy-debuginfo.patch -Patch15: valgrind-3.21.0-cleanup-read_elf_object.patch - BuildRequires: make BuildRequires: glibc-devel @@ -248,7 +213,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 %patch -P1 -p1 %patch -P2 -p1 @@ -260,17 +225,6 @@ Valgrind User Manual for details. %endif %patch -P5 -p1 -%patch -P6 -p1 -%patch -P7 -p1 -%patch -P8 -p1 -%patch -P9 -p1 -%patch -P10 -p1 -%patch -P11 -p1 -%patch -P12 -p1 -%patch -P13 -p1 -%patch -P14 -p1 -%patch -P15 -p1 - %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -465,6 +419,7 @@ echo ===============END TESTING=============== %files devel %dir %{_includedir}/valgrind %{_includedir}/valgrind/valgrind.h +%{_includedir}/valgrind/cachegrind.h %{_includedir}/valgrind/callgrind.h %{_includedir}/valgrind/drd.h %{_includedir}/valgrind/helgrind.h @@ -503,6 +458,13 @@ fi %endif %changelog +* Tue Oct 17 2023 Mark Wielaard - 3.22.0-0.1.RC1 +- Upstream 3.22.0-RC1 +- Remove all upstreamed patches +- Adjust valgrind-3.16.0-some-stack-protector.patch +- Adjust valgrind-3.16.0-some-Wl-z-now.patch +- Add cachegrind.h to valgrind-devel package + * Mon Aug 21 2023 Mark Wielaard - 3.21.0-10 - Add valgrind-3.21.0-lazy-debuginfo.patch - Add valgrind-3.21.0-cleanup-read_elf_object.patch From ebfba02e334d174208f50c928e95f22a0d4b78ea Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 26 Oct 2023 14:53:15 +0200 Subject: [PATCH 135/196] 3.22.0-0.1.RC2 - Upstream 3.22.0-RC2 --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 3f735f2..8398eb2 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ /valgrind-3.21.0.RC2.tar.bz2 /valgrind-3.21.0.tar.bz2 /valgrind-3.22.0.RC1.tar.bz2 +/valgrind-3.22.0.RC2.tar.bz2 diff --git a/sources b/sources index e2e8ed5..e14d456 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.22.0.RC1.tar.bz2) = 0aa9e98a959808d20cce53575433f81973ef3de3acc313ef2700f58cf9b2b7ee951b5bc701ef8508f5c136cb14239bbe7d81ae4208679ba55150b3edfd6078f0 +SHA512 (valgrind-3.22.0.RC2.tar.bz2) = 6a15101f4b92454856850fc35b9c38fd7fb294bee422274a803331465f347a732dc71e52c28e2d489c8d08ec7c677c1041bd32aeb4f43dd91ee404d4f6fa1208 diff --git a/valgrind.spec b/valgrind.spec index ab1816f..80231ec 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 0.1.RC1%{?dist} +Release: 0.1.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -69,7 +69,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -213,7 +213,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 %patch -P1 -p1 %patch -P2 -p1 @@ -458,6 +458,9 @@ fi %endif %changelog +* Thu Oct 26 2023 Mark Wielaard - 3.22.0-0.1.RC2 +- Upstream 3.22.0-RC2 + * Tue Oct 17 2023 Mark Wielaard - 3.22.0-0.1.RC1 - Upstream 3.22.0-RC1 - Remove all upstreamed patches From 79f7a0b69f360048736c7eb4da31473a42146726 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 30 Oct 2023 20:37:03 +0100 Subject: [PATCH 136/196] 3.22.0-0.2.RC2 - Update valgrind-3.21.0-no-memcpy-replace-check.patch --- valgrind-3.21.0-no-memcpy-replace-check.patch | 48 +++++++++++++++---- valgrind.spec | 5 +- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/valgrind-3.21.0-no-memcpy-replace-check.patch b/valgrind-3.21.0-no-memcpy-replace-check.patch index 6e26e04..1f59a90 100644 --- a/valgrind-3.21.0-no-memcpy-replace-check.patch +++ b/valgrind-3.21.0-no-memcpy-replace-check.patch @@ -1,22 +1,54 @@ +diff --git a/memcheck/tests/overlap.vgtest b/memcheck/tests/overlap.vgtest +index 54a0baacf..eba65897c 100644 +--- a/memcheck/tests/overlap.vgtest ++++ b/memcheck/tests/overlap.vgtest +@@ -1,2 +1,4 @@ + prog: overlap + vgopts: -q ++# https://bugs.kde.org/show_bug.cgi?id=402833 ++prereq: ! ../../tests/arch_test amd64 diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index b32f13f76..464e8d4ca 100644 +index 8de6a0698..79e640189 100644 --- a/shared/vg_replace_strmem.c +++ b/shared/vg_replace_strmem.c -@@ -1128,7 +1128,7 @@ static inline void my_exit ( int x ) +@@ -1128,8 +1128,15 @@ static inline void my_exit ( int x ) + #define MEMMOVE(soname, fnname) \ MEMMOVE_OR_MEMCPY(20181, soname, fnname, 0) - #define MEMCPY(soname, fnname) \ -- MEMMOVE_OR_MEMCPY(20180, soname, fnname, 1) -+ MEMMOVE_OR_MEMCPY(20180, soname, fnname, 0) /* See KDE bug #402833 */ +-#define MEMCPY(soname, fnname) \ ++/* See https://bugs.kde.org/show_bug.cgi?id=402833 ++ why we disable the overlap check on x86_64. */ ++#if defined(VGP_amd64_linux) ++ #define MEMCPY(soname, fnname) \ ++ MEMMOVE_OR_MEMCPY(20180, soname, fnname, 0) ++#else ++ #define MEMCPY(soname, fnname) \ + MEMMOVE_OR_MEMCPY(20180, soname, fnname, 1) ++#endif #if defined(VGO_linux) /* For older memcpy we have to use memmove-like semantics and skip -@@ -1714,8 +1714,6 @@ static inline void my_exit ( int x ) +@@ -1704,6 +1711,14 @@ static inline void my_exit ( int x ) + + /*-------------------- memcpy_chk --------------------*/ + ++/* See https://bugs.kde.org/show_bug.cgi?id=402833 ++ why we disable the overlap check on x86_64. */ ++#if defined(VGP_amd64_linux) ++ #define CHECK_OVERLAP 0 ++#else ++ #define CHECK_OVERLAP 1 ++#endif ++ + #define GLIBC26___MEMCPY_CHK(soname, fnname) \ + void* VG_REPLACE_FUNCTION_EZU(20300,soname,fnname) \ + (void* dst, const void* src, SizeT len, SizeT dstlen ); \ +@@ -1717,7 +1732,7 @@ static inline void my_exit ( int x ) RECORD_COPY(len); \ if (len == 0) \ return dst; \ - if (is_overlap(dst, src, len, len)) \ -- RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \ ++ if (CHECK_OVERLAP && is_overlap(dst, src, len, len)) \ + RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \ if ( dst > src ) { \ d = (HChar *)dst + len - 1; \ - s = (const HChar *)src + len - 1; \ diff --git a/valgrind.spec b/valgrind.spec index 80231ec..277bf90 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 0.1.RC2%{?dist} +Release: 0.2.RC2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -458,6 +458,9 @@ fi %endif %changelog +* Mon Oct 30 2023 Mark Wielaard - 3.22.0-0.2.RC2 +- Update valgrind-3.21.0-no-memcpy-replace-check.patch + * Thu Oct 26 2023 Mark Wielaard - 3.22.0-0.1.RC2 - Upstream 3.22.0-RC2 From 3fdfb3c05f54634b056caca8f9d0c8743e4238de Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 30 Oct 2023 21:06:00 +0100 Subject: [PATCH 137/196] Fedora 40 dropped openmpi support on i386 --- valgrind.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 277bf90..b3421cd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -15,11 +15,16 @@ URL: https://www.valgrind.org/ # We never want the openmpi subpackage when building a software collecton. # We always want it for fedora. # We only want it for older rhel. But not s390x for too old rhel. +# And on fedora > 39 i386 dropped openmpi. %if %{is_scl} %global build_openmpi 0 %else %if 0%{?fedora} - %global build_openmpi 1 + %ifarch %{ix86} + %global build_openmpi (%{?fedora} < 40) + %else + %global build_openmpi 1 + %endif %endif %if 0%{?rhel} %if 0%{?rhel} > 7 @@ -460,6 +465,7 @@ fi %changelog * Mon Oct 30 2023 Mark Wielaard - 3.22.0-0.2.RC2 - Update valgrind-3.21.0-no-memcpy-replace-check.patch +- Fedora 40 dropped openmpi support on i386 * Thu Oct 26 2023 Mark Wielaard - 3.22.0-0.1.RC2 - Upstream 3.22.0-RC2 From b62216ce3ab95d68b7e195e0f29c04c6b032aa3e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 31 Oct 2023 19:02:21 +0100 Subject: [PATCH 138/196] 3.22.0-1 - Upstream 3.22.0 final --- .gitignore | 1 + sources | 2 +- valgrind.spec | 15 ++++++--------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 8398eb2..4ddb7e4 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ /valgrind-3.21.0.tar.bz2 /valgrind-3.22.0.RC1.tar.bz2 /valgrind-3.22.0.RC2.tar.bz2 +/valgrind-3.22.0.tar.bz2 diff --git a/sources b/sources index e14d456..9965f6f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.22.0.RC2.tar.bz2) = 6a15101f4b92454856850fc35b9c38fd7fb294bee422274a803331465f347a732dc71e52c28e2d489c8d08ec7c677c1041bd32aeb4f43dd91ee404d4f6fa1208 +SHA512 (valgrind-3.22.0.tar.bz2) = 2904c13f68245bbafcea70998c6bd20725271300a7e94b6751ca00916943595fc3fac8557da7ea8db31b54a43f092823a0a947bc142829da811d074e1fe49777 diff --git a/valgrind.spec b/valgrind.spec index b3421cd..c637884 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 0.2.RC2%{?dist} +Release: 1%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -74,7 +74,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -88,10 +88,6 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch -# Workaround https://bugs.kde.org/show_bug.cgi?id=402833 -# by disabling overlap checking for memcpy -Patch5: valgrind-3.21.0-no-memcpy-replace-check.patch - BuildRequires: make BuildRequires: glibc-devel @@ -218,7 +214,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch -P1 -p1 %patch -P2 -p1 @@ -229,8 +225,6 @@ Valgrind User Manual for details. %patch -P4 -p1 %endif -%patch -P5 -p1 - %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -463,6 +457,9 @@ fi %endif %changelog +* Tue Oct 31 2023 Mark Wielaard - 3.22.0-1 +- Upstream 3.22.0 final + * Mon Oct 30 2023 Mark Wielaard - 3.22.0-0.2.RC2 - Update valgrind-3.21.0-no-memcpy-replace-check.patch - Fedora 40 dropped openmpi support on i386 From 4295b515b73f046fd41117d98b7aa3b8697f687f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 30 Oct 2023 21:23:54 +0100 Subject: [PATCH 139/196] BuildRequires elfutils-debuginfod for testing --- valgrind.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/valgrind.spec b/valgrind.spec index c637884..fd14ef0 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -120,6 +120,7 @@ BuildRequires: docbook-dtds # For testing debuginfod-find %if 0%{?fedora} > 29 || 0%{?rhel} > 7 +BuildRequires: elfutils-debuginfod BuildRequires: elfutils-debuginfod-client # For using debuginfod at runtime Recommends: elfutils-debuginfod-client @@ -459,6 +460,7 @@ fi %changelog * Tue Oct 31 2023 Mark Wielaard - 3.22.0-1 - Upstream 3.22.0 final +- BuildRequires elfutils-debuginfod for testing * Mon Oct 30 2023 Mark Wielaard - 3.22.0-0.2.RC2 - Update valgrind-3.21.0-no-memcpy-replace-check.patch From b0b6accc1282a11a37e5d0bac0e8826ca7a5d597 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Nov 2023 03:28:23 +0100 Subject: [PATCH 140/196] delete valgrind-3.21.0-no-memcpy-replace-check.patch --- valgrind-3.21.0-no-memcpy-replace-check.patch | 54 ------------------- 1 file changed, 54 deletions(-) delete mode 100644 valgrind-3.21.0-no-memcpy-replace-check.patch diff --git a/valgrind-3.21.0-no-memcpy-replace-check.patch b/valgrind-3.21.0-no-memcpy-replace-check.patch deleted file mode 100644 index 1f59a90..0000000 --- a/valgrind-3.21.0-no-memcpy-replace-check.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/memcheck/tests/overlap.vgtest b/memcheck/tests/overlap.vgtest -index 54a0baacf..eba65897c 100644 ---- a/memcheck/tests/overlap.vgtest -+++ b/memcheck/tests/overlap.vgtest -@@ -1,2 +1,4 @@ - prog: overlap - vgopts: -q -+# https://bugs.kde.org/show_bug.cgi?id=402833 -+prereq: ! ../../tests/arch_test amd64 -diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c -index 8de6a0698..79e640189 100644 ---- a/shared/vg_replace_strmem.c -+++ b/shared/vg_replace_strmem.c -@@ -1128,8 +1128,15 @@ static inline void my_exit ( int x ) - #define MEMMOVE(soname, fnname) \ - MEMMOVE_OR_MEMCPY(20181, soname, fnname, 0) - --#define MEMCPY(soname, fnname) \ -+/* See https://bugs.kde.org/show_bug.cgi?id=402833 -+ why we disable the overlap check on x86_64. */ -+#if defined(VGP_amd64_linux) -+ #define MEMCPY(soname, fnname) \ -+ MEMMOVE_OR_MEMCPY(20180, soname, fnname, 0) -+#else -+ #define MEMCPY(soname, fnname) \ - MEMMOVE_OR_MEMCPY(20180, soname, fnname, 1) -+#endif - - #if defined(VGO_linux) - /* For older memcpy we have to use memmove-like semantics and skip -@@ -1704,6 +1711,14 @@ static inline void my_exit ( int x ) - - /*-------------------- memcpy_chk --------------------*/ - -+/* See https://bugs.kde.org/show_bug.cgi?id=402833 -+ why we disable the overlap check on x86_64. */ -+#if defined(VGP_amd64_linux) -+ #define CHECK_OVERLAP 0 -+#else -+ #define CHECK_OVERLAP 1 -+#endif -+ - #define GLIBC26___MEMCPY_CHK(soname, fnname) \ - void* VG_REPLACE_FUNCTION_EZU(20300,soname,fnname) \ - (void* dst, const void* src, SizeT len, SizeT dstlen ); \ -@@ -1717,7 +1732,7 @@ static inline void my_exit ( int x ) - RECORD_COPY(len); \ - if (len == 0) \ - return dst; \ -- if (is_overlap(dst, src, len, len)) \ -+ if (CHECK_OVERLAP && is_overlap(dst, src, len, len)) \ - RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \ - if ( dst > src ) { \ - d = (HChar *)dst + len - 1; \ From b86a6d3e9f0f1d06ac064ac7599f327e565579bf Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Nov 2023 13:49:17 +0100 Subject: [PATCH 141/196] Add valgrind-3.22.0-valgrind-monitor-python-re.patch --- ...nd-3.22.0-valgrind-monitor-python-re.patch | 32 +++++++++++++++++++ valgrind.spec | 11 ++++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.22.0-valgrind-monitor-python-re.patch diff --git a/valgrind-3.22.0-valgrind-monitor-python-re.patch b/valgrind-3.22.0-valgrind-monitor-python-re.patch new file mode 100644 index 0000000..61d26cd --- /dev/null +++ b/valgrind-3.22.0-valgrind-monitor-python-re.patch @@ -0,0 +1,32 @@ +commit 0fbfbe05028ad18efda786a256a2738d2c231ed4 +Author: Mark Wielaard +Date: Fri Nov 17 13:31:52 2023 +0100 + + valgrind-monitor.py regular expressions should use raw strings + + With python 3.12 gdb will produce the following SyntaxWarning when + loading valgrind-monitor-def.py: + + /usr/share/gdb/auto-load/valgrind-monitor-def.py:214: + SyntaxWarning: invalid escape sequence '\[' + if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): + + In a future python version this will become an SyntaxError. + + Use a raw strings for the regular expression. + + https://bugs.kde.org/show_bug.cgi?id=476708 + +diff --git a/coregrind/m_gdbserver/valgrind-monitor-def.py b/coregrind/m_gdbserver/valgrind-monitor-def.py +index b4e7b992d..d74b1590c 100644 +--- a/coregrind/m_gdbserver/valgrind-monitor-def.py ++++ b/coregrind/m_gdbserver/valgrind-monitor-def.py +@@ -211,7 +211,7 @@ class Valgrind_ADDR_LEN_opt(Valgrind_Command): + For compatibility reason with the Valgrind gdbserver monitor command, + we detect and accept usages such as 0x1234ABCD[10].""" + def invoke(self, arg_str : str, from_tty : bool) -> None: +- if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): ++ if re.fullmatch(r"^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): + arg_str = arg_str.replace("[", " ") + arg_str = arg_str.replace("]", " ") + eval_execute_2(self, arg_str, diff --git a/valgrind.spec b/valgrind.spec index fd14ef0..c658948 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -88,6 +88,10 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch +# valgrind-monitor.py regular expressions should use raw strings +# https://bugs.kde.org/show_bug.cgi?id=476708 +Patch5: valgrind-3.22.0-valgrind-monitor-python-re.patch + BuildRequires: make BuildRequires: glibc-devel @@ -226,6 +230,8 @@ Valgrind User Manual for details. %patch -P4 -p1 %endif +%patch -P5 -p1 + %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto # configure time option, but that doesn't seem to help. @@ -458,6 +464,9 @@ fi %endif %changelog +* Fri Nov 17 2023 Mark Wielaard - 3.22.0-2 +- Add valgrind-3.22.0-valgrind-monitor-python-re.patch + * Tue Oct 31 2023 Mark Wielaard - 3.22.0-1 - Upstream 3.22.0 final - BuildRequires elfutils-debuginfod for testing From 9c3fb46e674e0ff1105e0658ceb840f8336bec05 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Nov 2023 15:04:55 +0100 Subject: [PATCH 142/196] 3.22.0-2 - Drop support for rhel6 --- valgrind.spec | 47 +++++------------------------------------------ 1 file changed, 5 insertions(+), 42 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index c658948..abef8fd 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -14,7 +14,7 @@ URL: https://www.valgrind.org/ # We never want the openmpi subpackage when building a software collecton. # We always want it for fedora. -# We only want it for older rhel. But not s390x for too old rhel. +# We only want it for older rhel. # And on fedora > 39 i386 dropped openmpi. %if %{is_scl} %global build_openmpi 0 @@ -30,11 +30,7 @@ URL: https://www.valgrind.org/ %if 0%{?rhel} > 7 %global build_openmpi 0 %else - %ifarch s390x - %global build_openmpi (%{?rhel} > 6) - %else - %global build_openmpi 1 - %endif + %global build_openmpi 1 %endif %endif %endif @@ -54,17 +50,11 @@ URL: https://www.valgrind.org/ # Whether to run the full regtest or only a limited set # The full regtest includes gdb_server integration tests # and experimental tools. -# Only run full regtests on fedora, but not on older rhel -# or when creating scl, the gdb_server tests might hang. +# Don't run them when creating scl, the gdb_server tests might hang. %if %{is_scl} %global run_full_regtest 0 %else - %if 0%{?fedora} - %global run_full_regtest 1 - %endif - %if 0%{?rhel} - %global run_full_regtest (%rhel >= 7) - %endif + %global run_full_regtest 1 %endif # Generating minisymtabs doesn't really work for the staticly linked @@ -132,13 +122,6 @@ Recommends: elfutils-debuginfod-client %{?scl:Requires:%scl_runtime} -# We need to fixup selinux file context when doing a scl build. -# In RHEL6 we might need to fix up the labels even though the -# meta package sets up a fs equivalence. See post. -%if 0%{?rhel} == 6 -%{?scl:Requires(post): /sbin/restorecon} -%endif - # We could use %%valgrind_arches as defined in redhat-rpm-config # But that is really for programs using valgrind, it defines the # set of architectures that valgrind works correctly on. @@ -223,12 +206,8 @@ Valgrind User Manual for details. %patch -P1 -p1 %patch -P2 -p1 - -# Old rhel gcc doesn't have -fstack-protector-strong. -%if 0%{?fedora} || 0%{?rhel} >= 7 %patch -P3 -p1 %patch -P4 -p1 -%endif %patch -P5 -p1 @@ -242,14 +221,9 @@ Valgrind User Manual for details. # Just always autoreconf so we don't need patches to prebuild files. ./autogen.sh -# Old openmpi-devel has version depended paths for mpicc. %if %{build_openmpi} -%if 0%{?fedora} >= 13 || 0%{?rhel} >= 6 %define mpiccpath %{!?scl:%{_libdir}}%{?scl:%{_root_libdir}}/openmpi/bin/mpicc %else -%define mpiccpath %{!?scl:%{_libdir}}%{?scl:%{_root_libdir}}/openmpi/*/bin/mpicc -%endif -%else # We explicitly don't want the libmpi wrapper. So make sure that configure # doesn't pick some random mpi compiler that happens to be installed. %define mpiccpath /bin/false @@ -451,21 +425,10 @@ echo ===============END TESTING=============== %{_libdir}/valgrind/libmpiwrap*.so %endif -%if 0%{?rhel} == 6 -%post -# There is a bug in rpm (rhbz#214737) that might cause post to be run -# even thought the binary isn't installed when installing two multilib -# versions at the same time. -if [ -x %{_bindir}/valgrind ]; then -# On RHEL6 the fs equivalency should be setup by the devtoolset meta -# package, but because of a rpm bug (rhbz#924044) it might not work. -%{?scl:/sbin/restorecon %{_bindir}/valgrind}%{!?scl:true} -fi -%endif - %changelog * Fri Nov 17 2023 Mark Wielaard - 3.22.0-2 - Add valgrind-3.22.0-valgrind-monitor-python-re.patch +- Drop support for rhel6 * Tue Oct 31 2023 Mark Wielaard - 3.22.0-1 - Upstream 3.22.0 final From ae4f286130200ae1085da61d4a8347ed94a1f20d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 5 Dec 2023 23:09:25 +0100 Subject: [PATCH 143/196] 3.22.0-3 - Add valgrind-3.22.0-rodata.patch --- valgrind-3.22.0-rodata.patch | 122 +++++++++++++++++++++++++++++++++++ valgrind.spec | 10 ++- 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.22.0-rodata.patch diff --git a/valgrind-3.22.0-rodata.patch b/valgrind-3.22.0-rodata.patch new file mode 100644 index 0000000..47f31ed --- /dev/null +++ b/valgrind-3.22.0-rodata.patch @@ -0,0 +1,122 @@ +commit 1d00e5ce0fb069911c4b525ec38289fb5d9021b0 +Author: Paul Floyd +Date: Sat Nov 18 08:49:34 2023 +0100 + + Bug 476548 - valgrind 3.22.0 fails on assertion when loading debuginfo file produced by mold + + (cherry picked from commit 9ea4ae66707a4dcc6f4328e11911652e4418c585) + +diff --git a/coregrind/m_debuginfo/image.c b/coregrind/m_debuginfo/image.c +index 02e509071..445f95555 100644 +--- a/coregrind/m_debuginfo/image.c ++++ b/coregrind/m_debuginfo/image.c +@@ -1221,6 +1221,20 @@ Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2) + } + } + ++Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n) ++{ ++ ensure_valid(img, off1, 1, "ML_(img_strcmp_c)"); ++ while (n) { ++ UChar c1 = get(img, off1); ++ UChar c2 = *(const UChar*)str2; ++ if (c1 < c2) return -1; ++ if (c1 > c2) return 1; ++ if (c1 == 0) return 0; ++ off1++; str2++; --n; ++ } ++ return 0; ++} ++ + UChar ML_(img_get_UChar)(DiImage* img, DiOffT offset) + { + ensure_valid(img, offset, 1, "ML_(img_get_UChar)"); +diff --git a/coregrind/m_debuginfo/priv_image.h b/coregrind/m_debuginfo/priv_image.h +index a49846f14..c91e49f01 100644 +--- a/coregrind/m_debuginfo/priv_image.h ++++ b/coregrind/m_debuginfo/priv_image.h +@@ -115,6 +115,10 @@ Int ML_(img_strcmp)(DiImage* img, DiOffT off1, DiOffT off2); + cast to HChar before comparison. */ + Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2); + ++/* Do strncmp of a C string in the image vs a normal one. Chars are ++ cast to HChar before comparison. */ ++Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n); ++ + /* Do strlen of a C string in the image. */ + SizeT ML_(img_strlen)(DiImage* img, DiOffT off); + +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index fb64ed976..46f8c8343 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -2501,8 +2501,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) + di->rodata_avma += inrw1->bias; + di->rodata_bias = inrw1->bias; + di->rodata_debug_bias = inrw1->bias; +- } +- else { ++ } else { + BAD(".rodata"); /* should not happen? */ + } + di->rodata_present = True; +@@ -2977,6 +2976,46 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) + return retval; + } + ++static void find_rodata(Word i, Word shnum, DiImage* dimg, struct _DebugInfo* di, DiOffT shdr_dioff, ++ UWord shdr_dent_szB, DiOffT shdr_strtab_dioff, PtrdiffT rw_dbias) ++{ ++ ElfXX_Shdr a_shdr; ++ ElfXX_Shdr a_extra_shdr; ++ ML_(img_get)(&a_shdr, dimg, ++ INDEX_BIS(shdr_dioff, i, shdr_dent_szB), ++ sizeof(a_shdr)); ++ if (di->rodata_present && ++ 0 == ML_(img_strcmp_c)(dimg, shdr_strtab_dioff ++ + a_shdr.sh_name, ".rodata")) { ++ Word sh_size = a_shdr.sh_size; ++ Word j; ++ Word next_addr = a_shdr.sh_addr + a_shdr.sh_size; ++ for (j = i + 1; j < shnum; ++j) { ++ ML_(img_get)(&a_extra_shdr, dimg, ++ INDEX_BIS(shdr_dioff, j, shdr_dent_szB), ++ sizeof(a_shdr)); ++ if (0 == ML_(img_strcmp_n)(dimg, shdr_strtab_dioff ++ + a_extra_shdr.sh_name, ".rodata", 7)) { ++ if (a_extra_shdr.sh_addr == ++ VG_ROUNDUP(next_addr, a_extra_shdr.sh_addralign)) { ++ sh_size = VG_ROUNDUP(sh_size, a_extra_shdr.sh_addralign) + a_extra_shdr.sh_size; ++ } ++ next_addr = a_extra_shdr.sh_addr + a_extra_shdr.sh_size; ++ } else { ++ break; ++ } ++ } ++ vg_assert(di->rodata_size == sh_size); ++ vg_assert(di->rodata_avma + a_shdr.sh_addr + rw_dbias); ++ di->rodata_debug_svma = a_shdr.sh_addr; ++ di->rodata_debug_bias = di->rodata_bias + ++ di->rodata_svma - di->rodata_debug_svma; ++ TRACE_SYMTAB("acquiring .rodata debug svma = %#lx .. %#lx\n", ++ di->rodata_debug_svma, ++ di->rodata_debug_svma + di->rodata_size - 1); ++ TRACE_SYMTAB("acquiring .rodata debug bias = %#lx\n", (UWord)di->rodata_debug_bias); ++ } ++} + Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) + { + Word i, j; +@@ -3391,7 +3430,11 @@ Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) + FIND(text, rx) + FIND(data, rw) + FIND(sdata, rw) +- FIND(rodata, rw) ++ // https://bugs.kde.org/show_bug.cgi?id=476548 ++ // special handling for rodata as adjacent ++ // rodata sections may have been merged in ML_(read_elf_object) ++ //FIND(rodata, rw) ++ find_rodata(i, ehdr_dimg.e_shnum, dimg, di, shdr_dioff, shdr_dent_szB, shdr_strtab_dioff, rw_dbias); + FIND(bss, rw) + FIND(sbss, rw) + diff --git a/valgrind.spec b/valgrind.spec index abef8fd..e607f68 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv2+ URL: https://www.valgrind.org/ @@ -82,6 +82,10 @@ Patch4: valgrind-3.16.0-some-Wl-z-now.patch # https://bugs.kde.org/show_bug.cgi?id=476708 Patch5: valgrind-3.22.0-valgrind-monitor-python-re.patch +# valgrind 3.22.0 fails on assertion when loading debuginfo +# https://bugs.kde.org/show_bug.cgi?id=476548 +Patch6: valgrind-3.22.0-rodata.patch + BuildRequires: make BuildRequires: glibc-devel @@ -210,6 +214,7 @@ Valgrind User Manual for details. %patch -P4 -p1 %patch -P5 -p1 +%patch -P6 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -426,6 +431,9 @@ echo ===============END TESTING=============== %endif %changelog +* Tue Dec 5 2023 Mark Wielaard - 3.22.0-3 +- Add valgrind-3.22.0-rodata.patch + * Fri Nov 17 2023 Mark Wielaard - 3.22.0-2 - Add valgrind-3.22.0-valgrind-monitor-python-re.patch - Drop support for rhel6 From 70f76aaabfd8f926f6b3528289939f9fcdb54461 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 9 Dec 2023 22:29:05 +0100 Subject: [PATCH 144/196] Add valgrind-3.22.0-fchmodat2.patch --- valgrind-3.22.0-fchmodat2.patch | 206 ++++++++++++++++++++++++++++++++ valgrind.spec | 8 ++ 2 files changed, 214 insertions(+) create mode 100644 valgrind-3.22.0-fchmodat2.patch diff --git a/valgrind-3.22.0-fchmodat2.patch b/valgrind-3.22.0-fchmodat2.patch new file mode 100644 index 0000000..b1ba313 --- /dev/null +++ b/valgrind-3.22.0-fchmodat2.patch @@ -0,0 +1,206 @@ +From a43e62dddcf51ec6578a90c5988a41e856b44b05 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sat, 18 Nov 2023 21:17:02 +0100 +Subject: [PATCH] Add fchmodat2 syscall on linux + +fchmodat2 is a new syscall on linux 6.6. It is a variant of fchmodat +that takes an extra flags argument. + +https://bugs.kde.org/show_bug.cgi?id=477198 + +(cherry picked from commit 372d09fd9a8d76847c81092ebff71c80fd6c145d) +--- + NEWS | 1 + + coregrind/m_syswrap/priv_syswrap-linux.h | 3 +++ + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-linux.c | 11 +++++++++++ + coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + + coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + + coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ + coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ + include/vki/vki-scnums-shared-linux.h | 2 ++ + 14 files changed, 35 insertions(+) + +diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h +index 7c9decf5a..798c456c9 100644 +--- a/coregrind/m_syswrap/priv_syswrap-linux.h ++++ b/coregrind/m_syswrap/priv_syswrap-linux.h +@@ -331,6 +331,9 @@ DECL_TEMPLATE(linux, sys_openat2); + // Linux-specific (new in Linux 5.14) + DECL_TEMPLATE(linux, sys_memfd_secret); + ++// Since Linux 6.6 ++DECL_TEMPLATE(linux, sys_fchmodat2); ++ + /* --------------------------------------------------------------------- + Wrappers for sockets and ipc-ery. These are split into standalone + procedures because x86-linux hides them inside multiplexors +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index 008600798..fe17d118b 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -886,6 +886,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 ++ ++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 9a7a1e0d2..811931d3b 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -1059,6 +1059,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ ++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + +diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c +index 6af7bab83..3307bc2ca 100644 +--- a/coregrind/m_syswrap/syswrap-arm64-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm64-linux.c +@@ -840,6 +840,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 ++ ++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index d571fc327..efa47f2e6 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -6059,6 +6059,17 @@ PRE(sys_fchmodat) + PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 ); + } + ++PRE(sys_fchmodat2) ++{ ++ PRINT("sys_fchmodat2 ( %ld, %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u, %" ++ FMT_REGWORD "u )", ++ SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4); ++ PRE_REG_READ4(long, "fchmodat2", ++ int, dfd, const char *, path, vki_mode_t, mode, ++ unsigned int, flags); ++ PRE_MEM_RASCIIZ( "fchmodat2(pathname)", ARG2 ); ++} ++ + PRE(sys_faccessat) + { + PRINT("sys_faccessat ( %ld, %#" FMT_REGWORD "x(%s), %ld )", +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index 6268a00dd..74a1f6eac 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1143,6 +1143,8 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_ (__NR_faccessat2, sys_faccessat2), // 439 + + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ ++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index 6cdf25893..4e8508b7a 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -820,6 +820,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY (__NR_close_range, sys_close_range), + LINX_ (__NR_faccessat2, sys_faccessat2), + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), ++ LINX_ (__NR_fchmodat2, sys_fchmodat2), + }; + + SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c +index d724cde74..7859900c1 100644 +--- a/coregrind/m_syswrap/syswrap-nanomips-linux.c ++++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c +@@ -829,6 +829,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY (__NR_close_range, sys_close_range), + LINX_ (__NR_faccessat2, sys_faccessat2), + LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), ++ LINX_ (__NR_fchmodat2, sys_fchmodat2), + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index c0cfef235..1e19116ee 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -1063,6 +1063,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + + LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ ++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index f5976f30c..1097212a4 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -1032,6 +1032,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + + LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ ++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index afba154e7..3588672c7 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -873,6 +873,8 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_faccessat2, sys_faccessat2), // 439 + + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 ++ ++ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index da4fd8fa2..58badc6b0 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1658,6 +1658,8 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 + + LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 ++ ++ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 + }; + + SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) +diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h +index 542382b53..a4cd87149 100644 +--- a/include/vki/vki-scnums-shared-linux.h ++++ b/include/vki/vki-scnums-shared-linux.h +@@ -50,4 +50,6 @@ + + #define __NR_memfd_secret 447 + ++#define __NR_fchmodat2 452 ++ + #endif +-- +2.39.3 + diff --git a/valgrind.spec b/valgrind.spec index e607f68..e511b7f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -86,6 +86,10 @@ Patch5: valgrind-3.22.0-valgrind-monitor-python-re.patch # https://bugs.kde.org/show_bug.cgi?id=476548 Patch6: valgrind-3.22.0-rodata.patch +# Add fchmodat2 syscall on linux +# https://bugs.kde.org/show_bug.cgi?id=477198 +Patch7: valgrind-3.22.0-fchmodat2.patch + BuildRequires: make BuildRequires: glibc-devel @@ -215,6 +219,7 @@ Valgrind User Manual for details. %patch -P5 -p1 %patch -P6 -p1 +%patch -P7 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -431,6 +436,9 @@ echo ===============END TESTING=============== %endif %changelog +* Sat Dec 9 2023 Mark Wielaard +- Add valgrind-3.22.0-fchmodat2.patch + * Tue Dec 5 2023 Mark Wielaard - 3.22.0-3 - Add valgrind-3.22.0-rodata.patch From ebfe3bd913aecefa5162a004532d37d8315a1712 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 10 Dec 2023 00:03:53 +0100 Subject: [PATCH 145/196] 3.22.0-4 - Prep for migration to SPDX identifiers --- valgrind.spec | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index e511b7f..25feea8 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,9 +3,9 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 -License: GPLv2+ +License: GPLv2+ AND BSD URL: https://www.valgrind.org/ # Are we building for a Software Collection? @@ -183,6 +183,11 @@ profiler (callgrind), and a heap profiler (massif). %package devel Summary: Development files for valgrind aware programs +# This is really Hybrid-BSD +# https://fedoraproject.org/wiki/Licensing:BSD#Hybrid_BSD_(half_BSD,_half_zlib) +# But that doesnt have a SPDX identifier yet +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/422 +License: BSD Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} %description devel @@ -201,6 +206,7 @@ Header files and libraries for development of valgrind tools. %if %{build_openmpi} %package openmpi Summary: OpenMPI support for valgrind +License: BSD Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} %description openmpi @@ -436,8 +442,9 @@ echo ===============END TESTING=============== %endif %changelog -* Sat Dec 9 2023 Mark Wielaard +* Sat Dec 9 2023 Mark Wielaard - 3.22.0-4 - Add valgrind-3.22.0-fchmodat2.patch +- Prep for migration to SPDX identifiers * Tue Dec 5 2023 Mark Wielaard - 3.22.0-3 - Add valgrind-3.22.0-rodata.patch From fc6a1192e439b035e1d8c978e61b8943c4941ea3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 22 Jan 2024 13:51:09 +0100 Subject: [PATCH 146/196] 3.22.0-5 - Add valgrind-3.22.0-x86-nop.patch --- valgrind-3.22.0-x86-nop.patch | 136 ++++++++++++++++++++++++++++++++++ valgrind.spec | 11 ++- 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.22.0-x86-nop.patch diff --git a/valgrind-3.22.0-x86-nop.patch b/valgrind-3.22.0-x86-nop.patch new file mode 100644 index 0000000..421b291 --- /dev/null +++ b/valgrind-3.22.0-x86-nop.patch @@ -0,0 +1,136 @@ +From d35005cef8ad8207542738812705ceabf137d7e0 Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Sun, 17 Dec 2023 14:18:51 +0100 +Subject: [PATCH] Bug 478624 - Valgrind incompatibility with binutils-2.42 on + x86 with new nop patterns (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26) + +It was a bit of a struggle to get the testcase to build +with both clang and gcc (oddly enough gcc was more difficult) so +I just resorted to using .byte arrays. +--- + .gitignore | 1 + + NEWS | 2 ++ + VEX/priv/guest_x86_toIR.c | 22 +++++++++++++- + none/tests/x86/Makefile.am | 2 ++ + none/tests/x86/gnu_binutils_nop.c | 34 ++++++++++++++++++++++ + none/tests/x86/gnu_binutils_nop.stderr.exp | 0 + none/tests/x86/gnu_binutils_nop.vgtest | 2 ++ + 7 files changed, 62 insertions(+), 1 deletion(-) + create mode 100644 none/tests/x86/gnu_binutils_nop.c + create mode 100644 none/tests/x86/gnu_binutils_nop.stderr.exp + create mode 100644 none/tests/x86/gnu_binutils_nop.vgtest + +diff --git a/VEX/priv/guest_x86_toIR.c b/VEX/priv/guest_x86_toIR.c +index 5d6e6dc64..3b6efb387 100644 +--- a/VEX/priv/guest_x86_toIR.c ++++ b/VEX/priv/guest_x86_toIR.c +@@ -8198,7 +8198,7 @@ DisResult disInstr_X86_WRK ( + delta += 5; + goto decode_success; + } +- /* Don't barf on recent binutils padding, ++ /* Don't barf on recent (2010) binutils padding, + all variants of which are: nopw %cs:0x0(%eax,%eax,1) + 66 2e 0f 1f 84 00 00 00 00 00 + 66 66 2e 0f 1f 84 00 00 00 00 00 +@@ -8223,6 +8223,26 @@ DisResult disInstr_X86_WRK ( + } + } + ++ /* bug478624 GNU binutils uses a leal of esi into itself with ++ a zero offset and CS prefix as an 8 byte no-op (Dec 2023). ++ Since the CS prefix is hardly ever used we don't do much ++ to decode it, just a few cases for conditional branches. ++ So add handling here with other pseudo-no-ops. ++ */ ++ if (code[0] == 0x2E && code[1] == 0x8D) { ++ if (code[2] == 0x74 && code[3] == 0x26 && code[4] == 0x00) { ++ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n"); ++ delta += 5; ++ goto decode_success; ++ } ++ if (code[2] == 0xB4 && code[3] == 0x26 && code[4] == 0x00 ++ && code[5] == 0x00 && code[6] == 0x00 && code[7] == 0x00) { ++ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n"); ++ delta += 8; ++ goto decode_success; ++ } ++ } ++ + // Intel CET requires the following opcodes to be treated as NOPs + // with any prefix and ModRM, SIB and disp combination: + // "0F 19", "0F 1C", "0F 1D", "0F 1E", "0F 1F" +diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am +index 3ecd1ad3c..dbae86571 100644 +--- a/none/tests/x86/Makefile.am ++++ b/none/tests/x86/Makefile.am +@@ -52,6 +52,7 @@ EXTRA_DIST = \ + fxtract.stdout.exp fxtract.stderr.exp fxtract.vgtest \ + fxtract.stdout.exp-older-glibc \ + getseg.stdout.exp getseg.stderr.exp getseg.vgtest \ ++ gnu_binutils_nop.stderr.exp gnu_binutils_nop.vgtest \ + incdec_alt.stdout.exp incdec_alt.stderr.exp incdec_alt.vgtest \ + int.stderr.exp int.stdout.exp int.disabled \ + $(addsuffix .stderr.exp,$(INSN_TESTS)) \ +@@ -100,6 +101,7 @@ check_PROGRAMS = \ + fpu_lazy_eflags \ + fxtract \ + getseg \ ++ gnu_binutils_nop \ + incdec_alt \ + $(INSN_TESTS) \ + int \ +diff --git a/none/tests/x86/gnu_binutils_nop.c b/none/tests/x86/gnu_binutils_nop.c +new file mode 100644 +index 000000000..412a4c2cb +--- /dev/null ++++ b/none/tests/x86/gnu_binutils_nop.c +@@ -0,0 +1,34 @@ ++int main(void) ++{ ++ // GNU binutils uses various opcodes as alternatives for nop ++ // the idea is that it is faster to execute one large opcode ++ // with no side-effects than multiple repetitions of the ++ // single byte 'nop'. This gives more choice when code ++ // needs to be padded. ++ ++ // the following is based on ++ // https://sourceware.org/cgit/binutils-gdb/tree/gas/config/tc-i386.c#n1256 ++ ++ // one byte ++ __asm__ __volatile__("nop"); ++ // two bytes ++ __asm__ __volatile__("xchg %ax,%ax"); ++ // three bytes ++ //__asm__ __volatile__("leal 0(%esi),%esi"); ++ __asm__ __volatile__(".byte 0x8d,0x76,0x00"); ++ // four bytes ++ //__asm__ __volatile__("leal 0(%esi,%eiz),%esi"); ++ __asm__ __volatile__(".byte 0x8d,0x74,0x26,0x00"); ++ // five bytes ++ //__asm__ __volatile__("leal %cs:0(%esi,%eiz),%esi"); ++ __asm__ __volatile__(".byte 0x2e,0x8d,0x74,0x26,0x00"); ++ // six bytes ++ //__asm__ __volatile__("leal 0L(%esi),%esi"); ++ __asm__ __volatile__(".byte 0x8d,0xb6,0x00,0x00,0x00,0x00"); ++ // seven bytes ++ //__asm__ __volatile__("leal 0L(%esi,%eiz),%esi"); ++ __asm__ __volatile__(".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00"); ++ // eight bytes ++ //__asm__ __volatile__("leal %cs:0L(%esi,%eiz),%esi"); ++ __asm__ __volatile__(".byte 0x2e,0x8d,0xb4,0x26,0x00,0x00,0x00,0x00"); ++} +diff --git a/none/tests/x86/gnu_binutils_nop.stderr.exp b/none/tests/x86/gnu_binutils_nop.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/x86/gnu_binutils_nop.vgtest b/none/tests/x86/gnu_binutils_nop.vgtest +new file mode 100644 +index 000000000..7f378dd53 +--- /dev/null ++++ b/none/tests/x86/gnu_binutils_nop.vgtest +@@ -0,0 +1,2 @@ ++prog: gnu_binutils_nop ++vgopts: -q +-- +2.43.0 + diff --git a/valgrind.spec b/valgrind.spec index 25feea8..b81a407 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv2+ AND BSD URL: https://www.valgrind.org/ @@ -90,6 +90,11 @@ Patch6: valgrind-3.22.0-rodata.patch # https://bugs.kde.org/show_bug.cgi?id=477198 Patch7: valgrind-3.22.0-fchmodat2.patch +# Valgrind incompatibility with binutils-2.42 on x86 with new nop patterns +# (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26) +# https://bugs.kde.org/show_bug.cgi?id=478624 +Patch8: valgrind-3.22.0-x86-nop.patch + BuildRequires: make BuildRequires: glibc-devel @@ -226,6 +231,7 @@ Valgrind User Manual for details. %patch -P5 -p1 %patch -P6 -p1 %patch -P7 -p1 +%patch -P8 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -442,6 +448,9 @@ echo ===============END TESTING=============== %endif %changelog +* Mon Jan 22 2023 Mark Wielaard - 3.22.0-5 +- Add valgrind-3.22.0-x86-nop.patch + * Sat Dec 9 2023 Mark Wielaard - 3.22.0-4 - Add valgrind-3.22.0-fchmodat2.patch - Prep for migration to SPDX identifiers From 0e24fe58be57fa4cfeee421b3d03866f49d8ac95 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 22 Jan 2024 14:23:53 +0100 Subject: [PATCH 147/196] Fix date in changelog, it is 2024 already --- valgrind.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index b81a407..a38f0af 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -448,7 +448,7 @@ echo ===============END TESTING=============== %endif %changelog -* Mon Jan 22 2023 Mark Wielaard - 3.22.0-5 +* Mon Jan 22 2024 Mark Wielaard - 3.22.0-5 - Add valgrind-3.22.0-x86-nop.patch * Sat Dec 9 2023 Mark Wielaard - 3.22.0-4 From fedf3d4030dbad87b04085dbbec5e2666f50b36d Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 27 Jan 2024 07:28:38 +0000 Subject: [PATCH 148/196] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- valgrind.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index a38f0af..c0dcfbc 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv2+ AND BSD URL: https://www.valgrind.org/ @@ -448,6 +448,9 @@ echo ===============END TESTING=============== %endif %changelog +* Sat Jan 27 2024 Fedora Release Engineering - 1:3.22.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Mon Jan 22 2024 Mark Wielaard - 3.22.0-5 - Add valgrind-3.22.0-x86-nop.patch From 5ef9ac5930c3bddd1a27572694cf327abc109a72 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 4 Mar 2024 16:34:58 +0100 Subject: [PATCH 149/196] Update Fedora license tags to spdx license tags --- valgrind.spec | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index c0dcfbc..7401c3b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -5,7 +5,14 @@ Name: %{?scl_prefix}valgrind Version: 3.22.0 Release: 6%{?dist} Epoch: 1 -License: GPLv2+ AND BSD + +# This ignores licenses that are only found in the test or perf sources +# we only care about those license statements found in sources that end +# up in the binary packages. One piece of code for which we don't have +# a license specifier is in coregrind/m_main.c for some Hacker's Delight +# public domain code, which is only compiled into Darwin binaries, which +# we don't create. Also some subpackages have their own license tags. +License: GPL-2.0-or-later AND bzip2-1.0.6 AND GFDL-1.2-or-later AND (GPL-2.0-or-later AND LGPL-2.0-or-later) AND (GPL-2.0-or-later AND ISC) AND (GPL-2.0-or-later AND Unlicense) AND (GPL-2.0-or-later AND Zlib) AND (GPL-2.0-or-later WITH GCC-exception-2.0) AND (LGPL-2.0-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later AND BSD-3-Clause) AND (GPL-2.0-or-later AND (MIT OR NCSA)) AND CMU-Mach AND (GPL-2.0-or-later AND X11 AND BSD-3-Clause) AND X11 AND (GPL-2.0-or-later AND LGPL-2.0-or-later) AND (GPL-2.0-or-later AND (GPL-2.0-or-later OR MPL-2.0)) AND (GPL-2.0-or-later WITH Autoconf-exception-generic) AND (GPL-3.0-or-later WITH Autoconf-exception-generic-3.0) AND FSFULLR AND FSFAP AND FSFUL AND FSFULLRWD URL: https://www.valgrind.org/ # Are we building for a Software Collection? @@ -192,7 +199,7 @@ Summary: Development files for valgrind aware programs # https://fedoraproject.org/wiki/Licensing:BSD#Hybrid_BSD_(half_BSD,_half_zlib) # But that doesnt have a SPDX identifier yet # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/422 -License: BSD +License: bzip2-1.0.6 Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} %description devel @@ -211,7 +218,8 @@ Header files and libraries for development of valgrind tools. %if %{build_openmpi} %package openmpi Summary: OpenMPI support for valgrind -License: BSD +# See above, Hybrid-BSD like. +License: bzip2-1.0.6 Requires: %{?scl_prefix}valgrind = %{epoch}:%{version}-%{release} %description openmpi @@ -448,6 +456,9 @@ echo ===============END TESTING=============== %endif %changelog +* Mon Mar 4 2024 Mark Wielaard +- Update Fedora license tags to spdx license tags + * Sat Jan 27 2024 Fedora Release Engineering - 1:3.22.0-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 489c705d3f7f77c0e8319eb48533d6794dc53933 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 11 Mar 2024 21:18:28 +0100 Subject: [PATCH 150/196] 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch Handle gcc __builtin_strcmp using 128/256 bit vectors with sse4.1, avx/avx2 https://bugzilla.redhat.com/show_bug.cgi?id=2257546 --- ...cc-builtin_strcmp-128-256-bit-vector.patch | 355 ++++++++++++++++++ valgrind.spec | 10 +- 2 files changed, 364 insertions(+), 1 deletion(-) create mode 100644 valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch diff --git a/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch b/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch new file mode 100644 index 0000000..cbcf6e0 --- /dev/null +++ b/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch @@ -0,0 +1,355 @@ +From 316ef0d22b6f41722cc71316a6b59e60e7c9576c Mon Sep 17 00:00:00 2001 +From: Julian Seward +Date: Mon, 11 Mar 2024 17:53:14 +0100 +Subject: [PATCH] Handle gcc __builtin_strcmp using 128/256 bit vectors with + sse4.1, avx/avx2 + +* amd64 front end: redo the translation into IR for PTEST, so as to + use only IROps which we know Memcheck can do exact instrumentation + for. Handling for both the 128- and 256-bit cases is has been + changed. + +* ir_opt.c: add some constant folding rules to support the above. In + particular, for the case `ptest %reg, %reg` (the same reg twice), we + want rflags.C to be set to a defined-1 even if %reg is completely + undefined. Doing that requires folding `x and not(x)` to zero when + x has type V128 or V256. + +* memcheck/tests/amd64/rh2257546_{128,256}.c: new test cases + +https://bugzilla.redhat.com/show_bug.cgi?id=2257546 +--- + VEX/priv/guest_amd64_toIR.c | 64 +++++++++---------- + VEX/priv/ir_opt.c | 34 ++++++++++ + memcheck/tests/amd64/Makefile.am | 7 +- + memcheck/tests/amd64/rh2257546_128.c | 32 ++++++++++ + memcheck/tests/amd64/rh2257546_128.stderr.exp | 0 + memcheck/tests/amd64/rh2257546_128.stdout.exp | 1 + + memcheck/tests/amd64/rh2257546_128.vgtest | 2 + + memcheck/tests/amd64/rh2257546_256.c | 32 ++++++++++ + memcheck/tests/amd64/rh2257546_256.stderr.exp | 0 + memcheck/tests/amd64/rh2257546_256.stdout.exp | 1 + + memcheck/tests/amd64/rh2257546_256.vgtest | 3 + + 11 files changed, 141 insertions(+), 35 deletions(-) + create mode 100644 memcheck/tests/amd64/rh2257546_128.c + create mode 100644 memcheck/tests/amd64/rh2257546_128.stderr.exp + create mode 100644 memcheck/tests/amd64/rh2257546_128.stdout.exp + create mode 100644 memcheck/tests/amd64/rh2257546_128.vgtest + create mode 100644 memcheck/tests/amd64/rh2257546_256.c + create mode 100644 memcheck/tests/amd64/rh2257546_256.stderr.exp + create mode 100644 memcheck/tests/amd64/rh2257546_256.stdout.exp + create mode 100644 memcheck/tests/amd64/rh2257546_256.vgtest + +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index 0414aa5c5..d7c25042d 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -16826,13 +16826,18 @@ static Long dis_VBLENDV_256 ( const VexAbiInfo* vbi, Prefix pfx, Long delta, + + static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) + { +- /* Set Z=1 iff (vecE & vecG) == 0 +- Set C=1 iff (vecE & not vecG) == 0 ++ /* Set Z=1 iff (vecE & vecG) == 0--(128)--0 ++ Set C=1 iff (vecE & not vecG) == 0--(128)--0 ++ ++ For the case `sign == 0`, be careful to use only IROps that can be ++ instrumented exactly by memcheck. This is because PTEST is used for ++ __builtin_strcmp in gcc14. See ++ https://bugzilla.redhat.com/show_bug.cgi?id=2257546 + */ + + /* andV, andnV: vecE & vecG, vecE and not(vecG) */ + +- /* andV resp. andnV, reduced to 64-bit values, by or-ing the top ++ /* andV resp. andnV, are reduced to 64-bit values by or-ing the top + and bottom 64-bits together. It relies on this trick: + + InterleaveLO64x2([a,b],[c,d]) == [b,d] hence +@@ -16862,11 +16867,13 @@ static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) + binop(Iop_InterleaveHI64x2, + mkexpr(andnV), mkexpr(andnV))))); + ++ // Make z64 and c64 be either all-0s or all-1s + IRTemp z64 = newTemp(Ity_I64); + IRTemp c64 = newTemp(Ity_I64); ++ + if (sign == 64) { +- /* When only interested in the most significant bit, just shift +- arithmetically right and negate. */ ++ /* When only interested in the most significant bit, just copy bit 63 ++ into all bit positions, then invert. */ + assign(z64, + unop(Iop_Not64, + binop(Iop_Sar64, mkexpr(and64), mkU8(63)))); +@@ -16874,37 +16881,28 @@ static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) + assign(c64, + unop(Iop_Not64, + binop(Iop_Sar64, mkexpr(andn64), mkU8(63)))); +- } else { +- if (sign == 32) { +- /* When interested in bit 31 and bit 63, mask those bits and +- fallthrough into the PTEST handling. */ +- IRTemp t0 = newTemp(Ity_I64); +- IRTemp t1 = newTemp(Ity_I64); +- IRTemp t2 = newTemp(Ity_I64); +- assign(t0, mkU64(0x8000000080000000ULL)); +- assign(t1, binop(Iop_And64, mkexpr(and64), mkexpr(t0))); +- assign(t2, binop(Iop_And64, mkexpr(andn64), mkexpr(t0))); +- and64 = t1; +- andn64 = t2; +- } +- /* Now convert and64, andn64 to all-zeroes or all-1s, so we can +- slice out the Z and C bits conveniently. We use the standard +- trick all-zeroes -> all-zeroes, anything-else -> all-ones +- done by "(x | -x) >>s (word-size - 1)". +- */ ++ } else if (sign == 32) { ++ /* If we're interested into bits 63 and 31, OR bit 31 into bit 63, copy ++ bit 63 into all bit positions, then invert. */ ++ IRTemp and3264 = newTemp(Ity_I64); ++ assign(and3264, binop(Iop_Or64, mkexpr(and64), ++ binop(Iop_Shl64, mkexpr(and64), mkU8(32)))); + assign(z64, + unop(Iop_Not64, +- binop(Iop_Sar64, +- binop(Iop_Or64, +- binop(Iop_Sub64, mkU64(0), mkexpr(and64)), +- mkexpr(and64)), mkU8(63)))); ++ binop(Iop_Sar64, mkexpr(and3264), mkU8(63)))); + ++ IRTemp andn3264 = newTemp(Ity_I64); ++ assign(andn3264, binop(Iop_Or64, mkexpr(andn64), ++ binop(Iop_Shl64, mkexpr(andn64), mkU8(32)))); + assign(c64, + unop(Iop_Not64, +- binop(Iop_Sar64, +- binop(Iop_Or64, +- binop(Iop_Sub64, mkU64(0), mkexpr(andn64)), +- mkexpr(andn64)), mkU8(63)))); ++ binop(Iop_Sar64, mkexpr(andn3264), mkU8(63)))); ++ } else { ++ vassert(sign == 0); ++ assign(z64, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(and64), mkU64(0)), ++ mkU64(~0ULL), mkU64(0ULL))); ++ assign(c64, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(andn64), mkU64(0)), ++ mkU64(~0ULL), mkU64(0ULL))); + } + + /* And finally, slice out the Z and C flags and set the flags +@@ -16966,9 +16964,7 @@ static Long dis_xTESTy_128 ( const VexAbiInfo* vbi, Prefix pfx, + IRTemp andnV = newTemp(Ity_V128); + assign(andV, binop(Iop_AndV128, mkexpr(vecE), mkexpr(vecG))); + assign(andnV, binop(Iop_AndV128, +- mkexpr(vecE), +- binop(Iop_XorV128, mkexpr(vecG), +- mkV128(0xFFFF)))); ++ mkexpr(vecE), unop(Iop_NotV128, mkexpr(vecG)))); + + finish_xTESTy ( andV, andnV, sign ); + return delta; +diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c +index f918e9f85..6453f4fdf 100644 +--- a/VEX/priv/ir_opt.c ++++ b/VEX/priv/ir_opt.c +@@ -1693,6 +1693,17 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) + break; + } + ++ /* Similarly .. */ ++ case Iop_V256toV128_0: case Iop_V256toV128_1: { ++ UInt v256 = e->Iex.Unop.arg->Iex.Const.con->Ico.V256; ++ if (v256 == 0x00000000) { ++ e2 = IRExpr_Const(IRConst_V128(0x0000)); ++ } else { ++ goto unhandled; ++ } ++ break; ++ } ++ + case Iop_ZeroHI64ofV128: { + /* Could do better here -- only need to look at the bottom 64 bits + of the argument, really. */ +@@ -2129,6 +2140,8 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) + } + + /* -- V128 stuff -- */ ++ case Iop_InterleaveLO64x2: // This, and the HI64, are created ++ case Iop_InterleaveHI64x2: // by the amd64 PTEST translation + case Iop_InterleaveLO8x16: { + /* This turns up a lot in Memcheck instrumentation of + Icc generated code. I don't know why. */ +@@ -2321,6 +2334,27 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) + break; + } + } ++ /* AndV128( x, NotV128( x ) ) ==> 0...0 and ++ AndV256( x, NotV256( x ) ) ==> 0...0 ++ This is generated by amd64 `ptest %xmmReg, %xmmReg` ++ (the same reg both times) ++ See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 */ ++ if (e->Iex.Binop.op == Iop_AndV128 ++ || e->Iex.Binop.op == Iop_AndV256) { ++ Bool isV256 = e->Iex.Binop.op == Iop_AndV256; ++ IRExpr* x1 = chase(env, e->Iex.Binop.arg1); ++ IRExpr* rhs = chase(env, e->Iex.Binop.arg2); ++ if (x1 && rhs ++ && rhs->tag == Iex_Unop ++ && rhs->Iex.Unop.op == (isV256 ? Iop_NotV256 ++ : Iop_NotV128)) { ++ IRExpr* x2 = chase(env, rhs->Iex.Unop.arg); ++ if (x2 && sameIRExprs(env, x1, x2)) { ++ e2 = mkZeroOfPrimopResultType(e->Iex.Binop.op); ++ break; ++ } ++ } ++ } + break; + + case Iop_OrV128: +diff --git a/memcheck/tests/amd64/Makefile.am b/memcheck/tests/amd64/Makefile.am +index 0d2812dd8..906b8f393 100644 +--- a/memcheck/tests/amd64/Makefile.am ++++ b/memcheck/tests/amd64/Makefile.am +@@ -20,6 +20,10 @@ EXTRA_DIST = \ + insn-pmovmskb.stderr.exp-clang \ + more_x87_fp.stderr.exp more_x87_fp.stdout.exp more_x87_fp.vgtest \ + pcmpgt.stderr.exp pcmpgt.vgtest \ ++ rh2257546_128.vgtest \ ++ rh2257546_128.stderr.exp rh2257546_128.stdout.exp \ ++ rh2257546_256.vgtest \ ++ rh2257546_256.stderr.exp rh2257546_256.stdout.exp \ + sh-mem-vec128-plo-no.vgtest \ + sh-mem-vec128-plo-no.stderr.exp \ + sh-mem-vec128-plo-no.stdout.exp \ +@@ -46,12 +50,13 @@ check_PROGRAMS = \ + insn-bsfl \ + insn-pmovmskb \ + pcmpgt \ ++ rh2257546_128 \ + sh-mem-vec128 \ + sse_memory \ + xor-undef-amd64 + + if BUILD_AVX_TESTS +- check_PROGRAMS += sh-mem-vec256 xsave-avx ++ check_PROGRAMS += rh2257546_256 sh-mem-vec256 xsave-avx + endif + if HAVE_ASM_CONSTRAINT_P + check_PROGRAMS += insn-pcmpistri +diff --git a/memcheck/tests/amd64/rh2257546_128.c b/memcheck/tests/amd64/rh2257546_128.c +new file mode 100644 +index 000000000..a405aa775 +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_128.c +@@ -0,0 +1,32 @@ ++ ++// This should run on memcheck without reporting an undef-value error. ++// See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 ++ ++#include ++#include ++ ++int main ( void ) ++{ ++ char* c1 = malloc(16); ++ c1[0] = 'x'; c1[1] = 'y'; c1[2] = 'x'; c1[3] = 0; ++ ++ char* c2 = "foobarxyzzyfoobarzyzzy"; // strlen > 16 ++ ++ long long int res; ++ __asm__ __volatile__( ++ "movdqu (%1), %%xmm4" "\n\t" ++ "movdqu (%2), %%xmm5" "\n\t" ++ "pxor %%xmm4, %%xmm5" "\n\t" ++ "ptest %%xmm5, %%xmm5" "\n\t" ++ "je zzz1f" "\n\t" ++ "mov $99, %0" "\n\t" ++ "jmp zzzafter" "\n" ++ "zzz1f:" "\n\t" ++ "mov $88, %0" "\n" ++ "zzzafter:" "\n\t" ++ : /*OUT*/"=r"(res) : /*IN*/"r"(c1),"r"(c2) : /*TRASH*/"xmm4","xmm5","cc" ++ ); ++ printf("res = %lld\n", res); ++ free(c1); ++ return 0; ++} +diff --git a/memcheck/tests/amd64/rh2257546_128.stderr.exp b/memcheck/tests/amd64/rh2257546_128.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/amd64/rh2257546_128.stdout.exp b/memcheck/tests/amd64/rh2257546_128.stdout.exp +new file mode 100644 +index 000000000..454131089 +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_128.stdout.exp +@@ -0,0 +1 @@ ++res = 99 +diff --git a/memcheck/tests/amd64/rh2257546_128.vgtest b/memcheck/tests/amd64/rh2257546_128.vgtest +new file mode 100644 +index 000000000..94414cd6f +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_128.vgtest +@@ -0,0 +1,2 @@ ++prog: rh2257546_128 ++vgopts: -q +diff --git a/memcheck/tests/amd64/rh2257546_256.c b/memcheck/tests/amd64/rh2257546_256.c +new file mode 100644 +index 000000000..235005ca6 +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_256.c +@@ -0,0 +1,32 @@ ++ ++// This should run on memcheck without reporting an undef-value error. ++// See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 ++ ++#include ++#include ++ ++int main ( void ) ++{ ++ char* c1 = malloc(32); ++ c1[0] = 'x'; c1[1] = 'y'; c1[2] = 'x'; c1[3] = 0; ++ ++ char* c2 = "foobarxyzzyfoobarzyzzyandawholelotmoretoo"; // strlen > 32 ++ ++ long long int res; ++ __asm__ __volatile__( ++ "vmovdqu (%1), %%ymm4" "\n\t" ++ "vmovdqu (%2), %%ymm5" "\n\t" ++ "vpxor %%ymm4, %%ymm5, %%ymm5" "\n\t" ++ "vptest %%ymm5, %%ymm5" "\n\t" ++ "je zzz1f" "\n\t" ++ "mov $99, %0" "\n\t" ++ "jmp zzzafter" "\n" ++ "zzz1f:" "\n\t" ++ "mov $88, %0" "\n" ++ "zzzafter:" "\n\t" ++ : /*OUT*/"=r"(res) : /*IN*/"r"(c1),"r"(c2) : /*TRASH*/"ymm4","ymm5","cc" ++ ); ++ printf("res = %lld\n", res); ++ free(c1); ++ return 0; ++} +diff --git a/memcheck/tests/amd64/rh2257546_256.stderr.exp b/memcheck/tests/amd64/rh2257546_256.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/memcheck/tests/amd64/rh2257546_256.stdout.exp b/memcheck/tests/amd64/rh2257546_256.stdout.exp +new file mode 100644 +index 000000000..454131089 +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_256.stdout.exp +@@ -0,0 +1 @@ ++res = 99 +diff --git a/memcheck/tests/amd64/rh2257546_256.vgtest b/memcheck/tests/amd64/rh2257546_256.vgtest +new file mode 100644 +index 000000000..86eef8fe2 +--- /dev/null ++++ b/memcheck/tests/amd64/rh2257546_256.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e rh2257546_256 ++prog: rh2257546_256 ++vgopts: -q +-- +2.43.0 + diff --git a/valgrind.spec b/valgrind.spec index 7401c3b..54c0a3c 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -102,6 +102,10 @@ Patch7: valgrind-3.22.0-fchmodat2.patch # https://bugs.kde.org/show_bug.cgi?id=478624 Patch8: valgrind-3.22.0-x86-nop.patch +# Handle gcc __builtin_strcmp using 128/256 bit vectors with sse4.1, avx/avx2 +# https://bugzilla.redhat.com/show_bug.cgi?id=2257546 +Patch9: valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch + BuildRequires: make BuildRequires: glibc-devel @@ -240,6 +244,7 @@ Valgrind User Manual for details. %patch -P6 -p1 %patch -P7 -p1 %patch -P8 -p1 +%patch -P9 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -456,6 +461,9 @@ echo ===============END TESTING=============== %endif %changelog +* Mon Mar 11 2024 Mark Wielaard +- Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch + * Mon Mar 4 2024 Mark Wielaard - Update Fedora license tags to spdx license tags From 1cabfb854f3ba203673a27e673dfc63b6291bbf6 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 16:59:09 +0200 Subject: [PATCH 151/196] Add BuildRequires: python3-devel For running the testsuite. Some of the python scripts require python 3.9+ https://bugzilla.redhat.com/show_bug.cgi?id=2274913 --- valgrind.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/valgrind.spec b/valgrind.spec index 54c0a3c..3a90a7b 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -144,6 +144,10 @@ BuildRequires: elfutils-debuginfod-client Recommends: elfutils-debuginfod-client %endif +# For running the testsuite. +# Some of the python scripts require python 3.9+ +BuildRequires: python3-devel + %{?scl:Requires:%scl_runtime} # We could use %%valgrind_arches as defined in redhat-rpm-config @@ -461,7 +465,10 @@ echo ===============END TESTING=============== %endif %changelog -* Mon Mar 11 2024 Mark Wielaard +* Sat Apr 13 2024 Mark Wielaard +- Add BuildRequires: python3-devel for running testsuite. + +* Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch * Mon Mar 4 2024 Mark Wielaard From acc33b04c9d1ae81d0ee8a0a336903e0ac7add8a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 17:24:37 +0200 Subject: [PATCH 152/196] Add valgrind-3.22.0-gdb-thread-exited.patch --- valgrind-3.22.0-gdb-thread-exited.patch | 23 +++++++++++++++++++++++ valgrind.spec | 6 ++++++ 2 files changed, 29 insertions(+) create mode 100644 valgrind-3.22.0-gdb-thread-exited.patch diff --git a/valgrind-3.22.0-gdb-thread-exited.patch b/valgrind-3.22.0-gdb-thread-exited.patch new file mode 100644 index 0000000..4a4d451 --- /dev/null +++ b/valgrind-3.22.0-gdb-thread-exited.patch @@ -0,0 +1,23 @@ +commit 7aa63de01a3cda2a346f90be16bd29fd7b410c63 +Author: Mark Wielaard +Date: Mon Jan 22 14:08:30 2024 +0100 + + gdbserver_tests/filter_gdb.in: delete thread exiting + + The hginfo testcase would fail with GDB 14.1 because it would output + an extra line saying: [Thread .... exited] + +diff --git a/gdbserver_tests/filter_gdb.in b/gdbserver_tests/filter_gdb.in +index 16186dfe2c9b..6c85284b7531 100755 +--- a/gdbserver_tests/filter_gdb.in ++++ b/gdbserver_tests/filter_gdb.in +@@ -65,6 +65,9 @@ s/Thread [0-9][0-9]*/Thread ..../g + # delete thread switches + /\[Switching to Thread ....\]/d + ++# delete thread exiting ++/\[Thread .... exited\]/d ++ + # ??? Probably we had a 'Switching ' message in front of + # a frame line ? + s/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/ diff --git a/valgrind.spec b/valgrind.spec index 3a90a7b..ceb9109 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -106,6 +106,10 @@ Patch8: valgrind-3.22.0-x86-nop.patch # https://bugzilla.redhat.com/show_bug.cgi?id=2257546 Patch9: valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch +# Upstream commit 7aa63de01a3cda2a346f90be16bd29fd7b410c63 +# Testsuite fix gdbserver_tests/filter_gdb.in: delete thread exiting +Patch10: valgrind-3.22.0-gdb-thread-exited.patch + BuildRequires: make BuildRequires: glibc-devel @@ -249,6 +253,7 @@ Valgrind User Manual for details. %patch -P7 -p1 %patch -P8 -p1 %patch -P9 -p1 +%patch -P10 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -467,6 +472,7 @@ echo ===============END TESTING=============== %changelog * Sat Apr 13 2024 Mark Wielaard - Add BuildRequires: python3-devel for running testsuite. +- Add valgrind-3.22.0-gdb-thread-exited.patch * Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch From 554fc90612394901d1bf9456026d65fd47d3e611 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 17:28:25 +0200 Subject: [PATCH 153/196] Add valgrind-3.22.0-set_vma_name-supp.patch --- valgrind-3.22.0-set_vma_name-supp.patch | 24 ++++++++++++++++++++++++ valgrind.spec | 6 ++++++ 2 files changed, 30 insertions(+) create mode 100644 valgrind-3.22.0-set_vma_name-supp.patch diff --git a/valgrind-3.22.0-set_vma_name-supp.patch b/valgrind-3.22.0-set_vma_name-supp.patch new file mode 100644 index 0000000..42b39a0 --- /dev/null +++ b/valgrind-3.22.0-set_vma_name-supp.patch @@ -0,0 +1,24 @@ +commit 5505e7b371f26f9f9588f4aa3a156dfa6856b90a +Author: Mark Wielaard +Date: Thu Apr 11 19:48:22 2024 +0200 + + Add __set_vma_name suppression to drd/tests/std_thread2.supp + + glibc uses a atomic var to set whether the kernel supports + PR_SET_VMA_ANON_NAME. This looks like a conflicting access to drd. + Suppress it for this testcase. + +diff --git a/drd/tests/std_thread2.supp b/drd/tests/std_thread2.supp +index 4f30560cb924..22052cf2c935 100644 +--- a/drd/tests/std_thread2.supp ++++ b/drd/tests/std_thread2.supp +@@ -44,4 +44,9 @@ + drd:ConflictingAccess + obj:/libexec/ld-elf*.so.1 + } ++{ ++ drd-glibc-set-vma-name ++ drd:ConflictingAccess ++ fun:__set_vma_name ++} + diff --git a/valgrind.spec b/valgrind.spec index ceb9109..91e9ca1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -110,6 +110,10 @@ Patch9: valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch # Testsuite fix gdbserver_tests/filter_gdb.in: delete thread exiting Patch10: valgrind-3.22.0-gdb-thread-exited.patch +# Upstream commit 5505e7b371f26f9f9588f4aa3a156dfa6856b90a +# Add __set_vma_name suppression to drd/tests/std_thread2.supp +Patch11: valgrind-3.22.0-set_vma_name-supp.patch + BuildRequires: make BuildRequires: glibc-devel @@ -254,6 +258,7 @@ Valgrind User Manual for details. %patch -P8 -p1 %patch -P9 -p1 %patch -P10 -p1 +%patch -P11 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -473,6 +478,7 @@ echo ===============END TESTING=============== * Sat Apr 13 2024 Mark Wielaard - Add BuildRequires: python3-devel for running testsuite. - Add valgrind-3.22.0-gdb-thread-exited.patch +- Add valgrind-3.22.0-set_vma_name-supp.patch * Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch From e2bd2af70cd989b69972c358831362d40d90420c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 17:32:46 +0200 Subject: [PATCH 154/196] Add valgrind-3.22.0-pth_mempcpy_false_races.patch --- valgrind-3.22.0-pth_mempcpy_false_races.patch | 33 +++++++++++++++++++ valgrind.spec | 6 ++++ 2 files changed, 39 insertions(+) create mode 100644 valgrind-3.22.0-pth_mempcpy_false_races.patch diff --git a/valgrind-3.22.0-pth_mempcpy_false_races.patch b/valgrind-3.22.0-pth_mempcpy_false_races.patch new file mode 100644 index 0000000..d1d426d --- /dev/null +++ b/valgrind-3.22.0-pth_mempcpy_false_races.patch @@ -0,0 +1,33 @@ +commit f47109d30ca319a3bcd4288803e30a473d1506d2 +Author: Mark Wielaard +Date: Fri Apr 12 15:18:51 2024 +0200 + + Add new helgrind race suppression for pth_mempcpy_false_races + + In glibc 2.39+ the internal __printf_buffer_write might use memmove + instead of a memcpy variant. Add an extra suppression variant using + memmove. + + This makes pth_mempcpy_false_races pass again. + + See also https://bugs.kde.org/show_bug.cgi?id=450962 + +diff --git a/glibc-2.X-helgrind.supp.in b/glibc-2.X-helgrind.supp.in +index 2b576b982e42..dce611a09e38 100644 +--- a/glibc-2.X-helgrind.supp.in ++++ b/glibc-2.X-helgrind.supp.in +@@ -63,6 +63,14 @@ + fun:__printf_buffer_write + } + ++{ ++ helgrind-glibc-__printf_buffer_write2 ++ Helgrind:Race ++ fun:*memmove* ++ ... ++ fun:__printf_buffer_write ++} ++ + { + helgrind-glibc2X-005 + Helgrind:Race diff --git a/valgrind.spec b/valgrind.spec index 91e9ca1..c0659c4 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -114,6 +114,10 @@ Patch10: valgrind-3.22.0-gdb-thread-exited.patch # Add __set_vma_name suppression to drd/tests/std_thread2.supp Patch11: valgrind-3.22.0-set_vma_name-supp.patch +# Upstream commit f47109d30ca319a3bcd4288803e30a473d1506d2 +# Add new helgrind race suppression for pth_mempcpy_false_races +Patch12: valgrind-3.22.0-pth_mempcpy_false_races.patch + BuildRequires: make BuildRequires: glibc-devel @@ -259,6 +263,7 @@ Valgrind User Manual for details. %patch -P9 -p1 %patch -P10 -p1 %patch -P11 -p1 +%patch -P12 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -479,6 +484,7 @@ echo ===============END TESTING=============== - Add BuildRequires: python3-devel for running testsuite. - Add valgrind-3.22.0-gdb-thread-exited.patch - Add valgrind-3.22.0-set_vma_name-supp.patch +- Add valgrind-3.22.0-pth_mempcpy_false_races.patch * Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch From 8f2edbfc2a0084c4cc5f675134ef11f84646861f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 20:21:52 +0200 Subject: [PATCH 155/196] Add valgrind-3.22.0-amd64-VFMADD213.patch amd64: Implement VFMADD213 for Iop_MAddF32 and Iop_MAddF64 https://bugs.kde.org/show_bug.cgi?id=481127 --- valgrind-3.22.0-amd64-VFMADD213.patch | 530 ++++++++++++++++++++++++++ valgrind.spec | 6 + 2 files changed, 536 insertions(+) create mode 100644 valgrind-3.22.0-amd64-VFMADD213.patch diff --git a/valgrind-3.22.0-amd64-VFMADD213.patch b/valgrind-3.22.0-amd64-VFMADD213.patch new file mode 100644 index 0000000..1b58b3d --- /dev/null +++ b/valgrind-3.22.0-amd64-VFMADD213.patch @@ -0,0 +1,530 @@ +commit a5693c1203c3a26443af13182a8082c2e9152f6c +Author: Mark Wielaard +Date: Sat Apr 13 14:33:19 2024 +0200 + + amd64: Implement VFMADD213 for Iop_MAddF32 and Iop_MAddF64 + + Speed up F32 and F64 FMA on amd64. Add priv/host_amd64_maddf.c + implementing h_amd64_calc_MAddF32_fma4 and h_amd64_calc_MAddF64_fma4 + to be used instead of the generic variants h_generic_calc_MAddF32 + and h_generic_calc_MAddF64 when host has VEX_HWCAPS_AMD64_FMA4. + Add fma3 and fma4 detection m_machine.c (machine_get_hwcaps). + + This patch also fixes the memcheck/tests/vcpu_fnfns and + none/tests/amd64/fma testcases when run on a x86-64-v3 system. + + Patch contributed by Grazvydas Ignotas and + Bruno Lathuilière + + https://bugs.kde.org/show_bug.cgi?id=481127 + https://bugs.kde.org/show_bug.cgi?id=463463 + https://bugs.kde.org/show_bug.cgi?id=463458 + +diff --git a/Makefile.vex.am b/Makefile.vex.am +index 98d84835946b..c1244a69d25c 100644 +--- a/Makefile.vex.am ++++ b/Makefile.vex.am +@@ -54,6 +54,7 @@ noinst_HEADERS = \ + priv/host_generic_simd128.h \ + priv/host_generic_simd256.h \ + priv/host_generic_maddf.h \ ++ priv/host_amd64_maddf.h \ + priv/host_x86_defs.h \ + priv/host_amd64_defs.h \ + priv/host_ppc_defs.h \ +@@ -156,6 +157,7 @@ LIBVEX_SOURCES_COMMON = \ + priv/host_generic_simd128.c \ + priv/host_generic_simd256.c \ + priv/host_generic_maddf.c \ ++ priv/host_amd64_maddf.c \ + priv/host_generic_reg_alloc2.c \ + priv/host_generic_reg_alloc3.c \ + priv/host_x86_defs.c \ +diff --git a/VEX/priv/host_amd64_defs.c b/VEX/priv/host_amd64_defs.c +index 69afab739ce8..253ed65150e5 100644 +--- a/VEX/priv/host_amd64_defs.c ++++ b/VEX/priv/host_amd64_defs.c +@@ -590,6 +590,7 @@ const HChar* showAMD64SseOp ( AMD64SseOp op ) { + case Asse_PMADDUBSW: return "pmaddubsw"; + case Asse_F32toF16: return "vcvtps2ph(rm_field=$0x4)."; + case Asse_F16toF32: return "vcvtph2ps."; ++ case Asse_VFMADD213: return "vfmadd213"; + default: vpanic("showAMD64SseOp"); + } + } +@@ -1056,6 +1057,28 @@ AMD64Instr* AMD64Instr_SseMOVQ ( HReg gpr, HReg xmm, Bool toXMM ) { + //uu i->Ain.AvxReRg.dst = rg; + //uu return i; + //uu } ++AMD64Instr* AMD64Instr_Avx32FLo ( AMD64SseOp op, HReg src1, HReg src2, HReg dst ) { ++ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); ++ i->tag = Ain_Avx32FLo; ++ i->Ain.Avx32FLo.op = op; ++ i->Ain.Avx32FLo.src1 = src1; ++ i->Ain.Avx32FLo.src2 = src2; ++ i->Ain.Avx32FLo.dst = dst; ++ vassert(op != Asse_MOV); ++ return i; ++} ++ ++AMD64Instr* AMD64Instr_Avx64FLo ( AMD64SseOp op, HReg src1, HReg src2, HReg dst ) { ++ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); ++ i->tag = Ain_Avx64FLo; ++ i->Ain.Avx64FLo.op = op; ++ i->Ain.Avx64FLo.src1 = src1; ++ i->Ain.Avx64FLo.src2 = src2; ++ i->Ain.Avx64FLo.dst = dst; ++ vassert(op != Asse_MOV); ++ return i; ++} ++ + AMD64Instr* AMD64Instr_EvCheck ( AMD64AMode* amCounter, + AMD64AMode* amFailAddr ) { + AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); +@@ -1434,6 +1457,22 @@ void ppAMD64Instr ( const AMD64Instr* i, Bool mode64 ) + //uu vex_printf(","); + //uu ppHRegAMD64(i->Ain.AvxReRg.dst); + //uu return; ++ case Ain_Avx32FLo: ++ vex_printf("%sss ", showAMD64SseOp(i->Ain.Avx32FLo.op)); ++ ppHRegAMD64(i->Ain.Avx32FLo.src2); ++ vex_printf(","); ++ ppHRegAMD64(i->Ain.Avx32FLo.src1); ++ vex_printf(","); ++ ppHRegAMD64(i->Ain.Avx32FLo.dst); ++ return; ++ case Ain_Avx64FLo: ++ vex_printf("%ssd ", showAMD64SseOp(i->Ain.Avx64FLo.op)); ++ ppHRegAMD64(i->Ain.Avx64FLo.src2); ++ vex_printf(","); ++ ppHRegAMD64(i->Ain.Avx64FLo.src1); ++ vex_printf(","); ++ ppHRegAMD64(i->Ain.Avx64FLo.dst); ++ return; + case Ain_EvCheck: + vex_printf("(evCheck) decl "); + ppAMD64AMode(i->Ain.EvCheck.amCounter); +@@ -1790,6 +1829,18 @@ void getRegUsage_AMD64Instr ( HRegUsage* u, const AMD64Instr* i, Bool mode64 ) + //uu } + //uu } + //uu return; ++ case Ain_Avx32FLo: ++ vassert(i->Ain.Avx32FLo.op != Asse_MOV); ++ addHRegUse(u, HRmRead, i->Ain.Avx32FLo.src1); ++ addHRegUse(u, HRmRead, i->Ain.Avx32FLo.src2); ++ addHRegUse(u, HRmModify, i->Ain.Avx32FLo.dst); ++ return; ++ case Ain_Avx64FLo: ++ vassert(i->Ain.Avx64FLo.op != Asse_MOV); ++ addHRegUse(u, HRmRead, i->Ain.Avx64FLo.src1); ++ addHRegUse(u, HRmRead, i->Ain.Avx64FLo.src2); ++ addHRegUse(u, HRmModify, i->Ain.Avx64FLo.dst); ++ return; + case Ain_EvCheck: + /* We expect both amodes only to mention %rbp, so this is in + fact pointless, since %rbp isn't allocatable, but anyway.. */ +@@ -1999,6 +2050,16 @@ void mapRegs_AMD64Instr ( HRegRemap* m, AMD64Instr* i, Bool mode64 ) + //uu mapReg(m, &i->Ain.AvxReRg.src); + //uu mapReg(m, &i->Ain.AvxReRg.dst); + //uu return; ++ case Ain_Avx32FLo: ++ mapReg(m, &i->Ain.Avx32FLo.src1); ++ mapReg(m, &i->Ain.Avx32FLo.src2); ++ mapReg(m, &i->Ain.Avx32FLo.dst); ++ return; ++ case Ain_Avx64FLo: ++ mapReg(m, &i->Ain.Avx64FLo.src1); ++ mapReg(m, &i->Ain.Avx64FLo.src2); ++ mapReg(m, &i->Ain.Avx64FLo.dst); ++ return; + case Ain_EvCheck: + /* We expect both amodes only to mention %rbp, so this is in + fact pointless, since %rbp isn't allocatable, but anyway.. */ +@@ -4061,6 +4122,53 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, + //uu goto done; + //uu } + ++ case Ain_Avx32FLo: { ++ UInt d = vregEnc3210(i->Ain.Avx32FLo.dst); ++ UInt v = vregEnc3210(i->Ain.Avx32FLo.src1); ++ UInt s = vregEnc3210(i->Ain.Avx32FLo.src2); ++ UInt m = 2, pp = 1; ++ UInt opcode; ++ switch (i->Ain.Avx32FLo.op) { ++ case Asse_VFMADD213: ++ // VFMADD213SS %xmmS2, %xmmS1, %xmmD (xmm regs range 0 .. 15) ++ opcode = 0xa9; ++ break; ++ default: ++ goto bad; ++ } ++ // 0xC4 : ~d3 1 ~s3 o4 o3 o2 o1 o0 : 0 ~v3 ~v2 ~v1 ~v0 0 p1 p0 : opcode_byte ++ // : 1 1 d2 d1 d0 s2 s1 s0 ++ *p++ = 0xC4; // 3-byte VEX ++ *p++ = ((((~d)>>3)&1)<<7) | (1<<6) | ((((~s)>>3)&1)<<5) | m; ++ *p++ = ((~v&0x0f) << 3) | pp; ++ *p++ = opcode; ++ *p++ = (1<<7) | (1<<6) | ((d&7) << 3) | ((s&7) << 0); ++ goto done; ++ } ++ case Ain_Avx64FLo: { ++ UInt d = vregEnc3210(i->Ain.Avx64FLo.dst); ++ UInt v = vregEnc3210(i->Ain.Avx64FLo.src1); ++ UInt s = vregEnc3210(i->Ain.Avx64FLo.src2); ++ UInt m = 2, pp = 1; ++ UInt opcode; ++ switch (i->Ain.Avx64FLo.op) { ++ case Asse_VFMADD213: ++ // VFMADD213SD %xmmS2, %xmmS1, %xmmD (xmm regs range 0 .. 15) ++ opcode = 0xa9; ++ break; ++ default: ++ goto bad; ++ } ++ // 0xC4 : ~d3 1 ~s3 o4 o3 o2 o1 o0 : 1 ~v3 ~v2 ~v1 ~v0 0 p1 p0 : opcode_byte ++ // : 1 1 d2 d1 d0 s2 s1 s0 ++ *p++ = 0xC4; // 3-byte VEX ++ *p++ = ((((~d)>>3)&1)<<7) | (1<<6) | ((((~s)>>3)&1)<<5) | m; ++ *p++ = (1<<7)|((~v&0x0f) << 3) | pp; ++ *p++ = opcode; ++ *p++ = (1<<7) | (1<<6) | ((d&7) << 3) | ((s&7) << 0); ++ goto done; ++ } ++ + case Ain_EvCheck: { + /* We generate: + (3 bytes) decl 8(%rbp) 8 == offsetof(host_EvC_COUNTER) +diff --git a/VEX/priv/host_amd64_defs.h b/VEX/priv/host_amd64_defs.h +index e2ed2613bf67..eae878e312d7 100644 +--- a/VEX/priv/host_amd64_defs.h ++++ b/VEX/priv/host_amd64_defs.h +@@ -347,6 +347,8 @@ typedef + // Only for F16C capable hosts: + Asse_F32toF16, // F32 to F16 conversion, aka vcvtps2ph + Asse_F16toF32, // F16 to F32 conversion, aka vcvtph2ps ++ // Only for FMA (FMA3) capable hosts: ++ Asse_VFMADD213, // Fused Multiply-Add, aka vfmadd213ss + } + AMD64SseOp; + +@@ -412,6 +414,8 @@ typedef + //uu Ain_AvxLdSt, /* AVX load/store 256 bits, + //uu no alignment constraints */ + //uu Ain_AvxReRg, /* AVX binary general reg-reg, Re, Rg */ ++ Ain_Avx32FLo, /* AVX binary 3 operand, 32F in lowest lane only */ ++ Ain_Avx64FLo, /* AVX binary 3 operand, 64F in lowest lane only */ + Ain_EvCheck, /* Event check */ + Ain_ProfInc /* 64-bit profile counter increment */ + } +@@ -729,6 +733,18 @@ typedef + //uu HReg src; + //uu HReg dst; + //uu } AvxReRg; ++ struct { ++ AMD64SseOp op; ++ HReg src1; ++ HReg src2; ++ HReg dst; ++ } Avx32FLo; ++ struct { ++ AMD64SseOp op; ++ HReg src1; ++ HReg src2; ++ HReg dst; ++ } Avx64FLo; + struct { + AMD64AMode* amCounter; + AMD64AMode* amFailAddr; +@@ -803,6 +819,8 @@ extern AMD64Instr* AMD64Instr_SseShiftN ( AMD64SseOp, + extern AMD64Instr* AMD64Instr_SseMOVQ ( HReg gpr, HReg xmm, Bool toXMM ); + //uu extern AMD64Instr* AMD64Instr_AvxLdSt ( Bool isLoad, HReg, AMD64AMode* ); + //uu extern AMD64Instr* AMD64Instr_AvxReRg ( AMD64SseOp, HReg, HReg ); ++extern AMD64Instr* AMD64Instr_Avx32FLo ( AMD64SseOp, HReg, HReg, HReg ); ++extern AMD64Instr* AMD64Instr_Avx64FLo ( AMD64SseOp, HReg, HReg, HReg ); + extern AMD64Instr* AMD64Instr_EvCheck ( AMD64AMode* amCounter, + AMD64AMode* amFailAddr ); + extern AMD64Instr* AMD64Instr_ProfInc ( void ); +diff --git a/VEX/priv/host_amd64_isel.c b/VEX/priv/host_amd64_isel.c +index e15e1e60fb85..21d20c77f090 100644 +--- a/VEX/priv/host_amd64_isel.c ++++ b/VEX/priv/host_amd64_isel.c +@@ -42,6 +42,7 @@ + #include "host_generic_simd64.h" + #include "host_generic_simd128.h" + #include "host_generic_simd256.h" ++#include "host_amd64_maddf.h" + #include "host_generic_maddf.h" + #include "host_amd64_defs.h" + +@@ -2832,6 +2833,13 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, const IRExpr* e ) + HReg argX = iselFltExpr(env, qop->arg2); + HReg argY = iselFltExpr(env, qop->arg3); + HReg argZ = iselFltExpr(env, qop->arg4); ++ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA3) { ++ vassert(dst.u32 != argY.u32 && dst.u32 != argZ.u32); ++ if (dst.u32 != argX.u32) ++ addInstr(env, AMD64Instr_SseReRg(Asse_MOV, argX, dst)); ++ addInstr(env, AMD64Instr_Avx32FLo(Asse_VFMADD213, argY, argZ, dst)); ++ return dst; ++ } + /* XXXROUNDINGFIXME */ + /* set roundingmode here */ + /* subq $16, %rsp -- make a space*/ +@@ -2861,10 +2869,22 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, const IRExpr* e ) + AMD64AMode_IR(0, hregAMD64_RDX()))); + addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 4, argZ, + AMD64AMode_IR(0, hregAMD64_RCX()))); +- /* call the helper */ +- addInstr(env, AMD64Instr_Call( Acc_ALWAYS, +- (ULong)(HWord)h_generic_calc_MAddF32, +- 4, mk_RetLoc_simple(RLPri_None) )); ++ ++ /* call the helper with priority order : fma4 -> fallback generic ++ remark: the fma3 case is handled before without helper*/ ++#if defined(VGA_amd64) ++ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA4) { ++ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, ++ (ULong)(HWord)h_amd64_calc_MAddF32_fma4, ++ 4, mk_RetLoc_simple(RLPri_None) )); ++ }else ++#endif ++ { ++ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, ++ (ULong)(HWord)h_generic_calc_MAddF32, ++ 4, mk_RetLoc_simple(RLPri_None) )); ++ } ++ + /* fetch the result from memory, using %r_argp, which the + register allocator will keep alive across the call. */ + addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 4, dst, +@@ -3024,6 +3044,14 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, const IRExpr* e ) + HReg argX = iselDblExpr(env, qop->arg2); + HReg argY = iselDblExpr(env, qop->arg3); + HReg argZ = iselDblExpr(env, qop->arg4); ++ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA3) { ++ vassert(dst.u32 != argY.u32 && dst.u32 != argZ.u32); ++ if (dst.u32 != argX.u32) ++ addInstr(env, AMD64Instr_SseReRg(Asse_MOV, argX, dst)); ++ addInstr(env, AMD64Instr_Avx64FLo(Asse_VFMADD213, argY, argZ, dst)); ++ return dst; ++ } ++ + /* XXXROUNDINGFIXME */ + /* set roundingmode here */ + /* subq $32, %rsp -- make a space*/ +@@ -3053,10 +3081,22 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, const IRExpr* e ) + AMD64AMode_IR(0, hregAMD64_RDX()))); + addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 8, argZ, + AMD64AMode_IR(0, hregAMD64_RCX()))); +- /* call the helper */ +- addInstr(env, AMD64Instr_Call( Acc_ALWAYS, +- (ULong)(HWord)h_generic_calc_MAddF64, +- 4, mk_RetLoc_simple(RLPri_None) )); ++ ++ /* call the helper with priority order : fma4 -> fallback generic ++ remark: the fma3 case is handled before without helper*/ ++#if defined(VGA_amd64) ++ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA4) { ++ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, ++ (ULong)(HWord)h_amd64_calc_MAddF64_fma4, ++ 4, mk_RetLoc_simple(RLPri_None) )); ++ }else ++#endif ++ { ++ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, ++ (ULong)(HWord)h_generic_calc_MAddF64, ++ 4, mk_RetLoc_simple(RLPri_None) )); ++ } ++ + /* fetch the result from memory, using %r_argp, which the + register allocator will keep alive across the call. */ + addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 8, dst, +@@ -5372,7 +5412,9 @@ HInstrArray* iselSB_AMD64 ( const IRSB* bb, + | VEX_HWCAPS_AMD64_AVX2 + | VEX_HWCAPS_AMD64_F16C + | VEX_HWCAPS_AMD64_RDRAND +- | VEX_HWCAPS_AMD64_RDSEED))); ++ | VEX_HWCAPS_AMD64_RDSEED ++ | VEX_HWCAPS_AMD64_FMA3 ++ | VEX_HWCAPS_AMD64_FMA4))); + + /* Check that the host's endianness is as expected. */ + vassert(archinfo_host->endness == VexEndnessLE); +diff --git a/VEX/priv/host_amd64_maddf.c b/VEX/priv/host_amd64_maddf.c +new file mode 100644 +index 000000000000..579abb4389ac +--- /dev/null ++++ b/VEX/priv/host_amd64_maddf.c +@@ -0,0 +1,35 @@ ++ ++/*---------------------------------------------------------------*/ ++/*--- begin host_amd64_maddf.c ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ Compute x * y + z as ternary operation with intrinsics. ++*/ ++ ++ ++#include "libvex_basictypes.h" ++#include "host_amd64_maddf.h" ++ ++#if defined(VGA_amd64) ++void VEX_REGPARM(3) ++ h_amd64_calc_MAddF32_fma4 ( /*OUT*/Float* res, ++ Float* argX, Float* argY, Float* argZ ) ++{ ++ __asm__ ("vfmaddss %3,%2,%1,%0;" : ++ "=x"(*res): "x"(*argX),"x"(*argY), "x"(*argZ)); ++ return ; ++} ++ ++void VEX_REGPARM(3) ++ h_amd64_calc_MAddF64_fma4 ( /*OUT*/Double* res, ++ Double* argX, Double* argY, Double* argZ ) ++{ ++ __asm__ ("vfmaddsd %3,%2,%1,%0;" : ++ "=x"(*res): "x"(*argX),"x"(*argY), "x"(*argZ)); ++ return; ++} ++#endif ++/*---------------------------------------------------------------*/ ++/*--- end host_amd64_maddf.c --*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/priv/host_amd64_maddf.h b/VEX/priv/host_amd64_maddf.h +new file mode 100644 +index 000000000000..b592a44e17d7 +--- /dev/null ++++ b/VEX/priv/host_amd64_maddf.h +@@ -0,0 +1,32 @@ ++ ++/*---------------------------------------------------------------*/ ++/*--- begin host_amd64_maddf.h ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ Compute x * y + z as ternary operation with intrinsics ++*/ ++ ++/* Generic helper functions for doing FMA, i.e. compute x * y + z ++ as ternary operation. ++ These are purely back-end entities and cannot be seen/referenced ++ from IR. */ ++ ++#ifndef __VEX_HOST_AMD64_MADDF_H ++#define __VEX_HOST_AMD64_MADDF_H ++ ++#include "libvex_basictypes.h" ++ ++#if defined(VGA_amd64) ++extern VEX_REGPARM(3) ++ void h_amd64_calc_MAddF32_fma4 ( /*OUT*/Float*, Float*, Float*, Float* ); ++ ++extern VEX_REGPARM(3) ++ void h_amd64_calc_MAddF64_fma4 ( /*OUT*/Double*, Double*, Double*, ++ Double* ); ++#endif ++#endif /* ndef __VEX_HOST_AMD64_MADDF_H */ ++ ++/*---------------------------------------------------------------*/ ++/*--- end host_amd64_maddf.h --*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c +index 482047c7aa1a..eda2fe6eeecd 100644 +--- a/VEX/priv/main_main.c ++++ b/VEX/priv/main_main.c +@@ -1650,6 +1650,8 @@ static const HChar* show_hwcaps_amd64 ( UInt hwcaps ) + { VEX_HWCAPS_AMD64_F16C, "f16c" }, + { VEX_HWCAPS_AMD64_RDRAND, "rdrand" }, + { VEX_HWCAPS_AMD64_RDSEED, "rdseed" }, ++ { VEX_HWCAPS_AMD64_FMA3, "fma" }, /*fma to keep the same naming as /proc/cpuinfo*/ ++ { VEX_HWCAPS_AMD64_FMA4, "fma4" }, + }; + /* Allocate a large enough buffer */ + static HChar buf[sizeof prefix + +diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h +index 42c013c1ece6..15e2d39deb10 100644 +--- a/VEX/pub/libvex.h ++++ b/VEX/pub/libvex.h +@@ -101,6 +101,8 @@ typedef + #define VEX_HWCAPS_AMD64_RDRAND (1<<13) /* RDRAND instructions */ + #define VEX_HWCAPS_AMD64_F16C (1<<14) /* F16C instructions */ + #define VEX_HWCAPS_AMD64_RDSEED (1<<15) /* RDSEED instructions */ ++#define VEX_HWCAPS_AMD64_FMA3 (1<<16) /* FMA3 instructions */ ++#define VEX_HWCAPS_AMD64_FMA4 (1<<17) /* FMA4 instructions */ + + /* ppc32: baseline capability is integer only */ + #define VEX_HWCAPS_PPC32_F (1<<8) /* basic (non-optional) FP */ +diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c +index 079383651226..81fb810643cf 100644 +--- a/coregrind/m_machine.c ++++ b/coregrind/m_machine.c +@@ -984,6 +984,7 @@ Bool VG_(machine_get_hwcaps)( void ) + #elif defined(VGA_amd64) + { Bool have_sse3, have_ssse3, have_cx8, have_cx16; + Bool have_lzcnt, have_avx, have_bmi, have_avx2; ++ Bool have_fma3, have_fma4; + Bool have_rdtscp, have_rdrand, have_f16c, have_rdseed; + UInt eax, ebx, ecx, edx, max_basic, max_extended; + ULong xgetbv_0 = 0; +@@ -992,7 +993,8 @@ Bool VG_(machine_get_hwcaps)( void ) + + have_sse3 = have_ssse3 = have_cx8 = have_cx16 + = have_lzcnt = have_avx = have_bmi = have_avx2 +- = have_rdtscp = have_rdrand = have_f16c = have_rdseed = False; ++ = have_rdtscp = have_rdrand = have_f16c = have_rdseed ++ = have_fma3 = have_fma4 = False; + + eax = ebx = ecx = edx = max_basic = max_extended = 0; + +@@ -1022,7 +1024,7 @@ Bool VG_(machine_get_hwcaps)( void ) + // we assume that SSE1 and SSE2 are available by default + have_sse3 = (ecx & (1<<0)) != 0; /* True => have sse3 insns */ + have_ssse3 = (ecx & (1<<9)) != 0; /* True => have Sup SSE3 insns */ +- // fma is ecx:12 ++ have_fma3 = (ecx & (1<<12))!= 0; /* True => have fma3 insns */ + // sse41 is ecx:19 + // sse42 is ecx:20 + // xsave is ecx:26 +@@ -1032,7 +1034,7 @@ Bool VG_(machine_get_hwcaps)( void ) + have_rdrand = (ecx & (1<<30)) != 0; /* True => have RDRAND insns */ + + have_avx = False; +- /* have_fma = False; */ ++ + if ( (ecx & ((1<<28)|(1<<27)|(1<<26))) == ((1<<28)|(1<<27)|(1<<26)) ) { + /* Processor supports AVX instructions and XGETBV is enabled + by OS and AVX instructions are enabled by the OS. */ +@@ -1059,9 +1061,6 @@ Bool VG_(machine_get_hwcaps)( void ) + if (ebx2 == 576 && eax2 == 256) { + have_avx = True; + } +- /* have_fma = (ecx & (1<<12)) != 0; */ +- /* have_fma: Probably correct, but gcc complains due to +- unusedness. */ + } + } + +@@ -1089,6 +1088,11 @@ Bool VG_(machine_get_hwcaps)( void ) + have_rdtscp = (edx & (1<<27)) != 0; /* True => have RDTSVCP */ + } + ++ if (max_extended >= 0x80000001) { ++ VG_(cpuid)(0x80000001, 0, &eax, &ebx, &ecx, &edx); ++ have_fma4= (ecx & (1<<16)) != 0; /* True => have fma4 */ ++ } ++ + /* Check for BMI1 and AVX2. If we have AVX1 (plus OS support). */ + have_bmi = False; + have_avx2 = False; +@@ -1120,7 +1124,9 @@ Bool VG_(machine_get_hwcaps)( void ) + | (have_rdtscp ? VEX_HWCAPS_AMD64_RDTSCP : 0) + | (have_f16c ? VEX_HWCAPS_AMD64_F16C : 0) + | (have_rdrand ? VEX_HWCAPS_AMD64_RDRAND : 0) +- | (have_rdseed ? VEX_HWCAPS_AMD64_RDSEED : 0); ++ | (have_rdseed ? VEX_HWCAPS_AMD64_RDSEED : 0) ++ | (have_fma3 ? VEX_HWCAPS_AMD64_FMA3 : 0) ++ | (have_fma4 ? VEX_HWCAPS_AMD64_FMA4 : 0); + + VG_(machine_get_cache_info)(&vai); + diff --git a/valgrind.spec b/valgrind.spec index c0659c4..1f7d7a7 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -118,6 +118,10 @@ Patch11: valgrind-3.22.0-set_vma_name-supp.patch # Add new helgrind race suppression for pth_mempcpy_false_races Patch12: valgrind-3.22.0-pth_mempcpy_false_races.patch +# amd64: Implement VFMADD213 for Iop_MAddF32 and Iop_MAddF64 +# https://bugs.kde.org/show_bug.cgi?id=481127 +Patch13: valgrind-3.22.0-amd64-VFMADD213.patch + BuildRequires: make BuildRequires: glibc-devel @@ -264,6 +268,7 @@ Valgrind User Manual for details. %patch -P10 -p1 %patch -P11 -p1 %patch -P12 -p1 +%patch -P13 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -485,6 +490,7 @@ echo ===============END TESTING=============== - Add valgrind-3.22.0-gdb-thread-exited.patch - Add valgrind-3.22.0-set_vma_name-supp.patch - Add valgrind-3.22.0-pth_mempcpy_false_races.patch +- Add valgrind-3.22.0-amd64-VFMADD213.patch * Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch From fbb97f2a3f7291529db11c5326bb98e130f95da1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 13 Apr 2024 20:25:56 +0200 Subject: [PATCH 156/196] 3.22.0-8 - Add valgrind-3.22.0-amd64-redir-strcmp.patch glibc built with -march=x86-64-v3 does not work due to ld.so strcmp https://bugs.kde.org/show_bug.cgi?id=485487 --- valgrind-3.22.0-amd64-redir-strcmp.patch | 66 ++++++++++++++++++++++++ valgrind.spec | 10 +++- 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 valgrind-3.22.0-amd64-redir-strcmp.patch diff --git a/valgrind-3.22.0-amd64-redir-strcmp.patch b/valgrind-3.22.0-amd64-redir-strcmp.patch new file mode 100644 index 0000000..6e37ba1 --- /dev/null +++ b/valgrind-3.22.0-amd64-redir-strcmp.patch @@ -0,0 +1,66 @@ +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index cef241b4f85aad23..ce6073a62190a639 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -1410,6 +1410,15 @@ void VG_(redir_initialise) ( void ) + complain_about_stripped_glibc_ldso + # endif + ); ++ add_hardwired_spec( ++ "ld-linux-x86-64.so.2", "strcmp", ++ (Addr)&VG_(amd64_linux_REDIR_FOR_strcmp), ++# ifndef GLIBC_MANDATORY_STRLEN_REDIRECT ++ NULL ++# else ++ complain_about_stripped_glibc_ldso ++# endif ++ ); + } + + # elif defined(VGP_ppc32_linux) +diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S +index da96972323824bdb..716afb2121b84b57 100644 +--- a/coregrind/m_trampoline.S ++++ b/coregrind/m_trampoline.S +@@ -218,6 +218,29 @@ VG_(amd64_linux_REDIR_FOR_strlen): + .LfnE5: + .size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen) + ++/* There's no particular reason that this needs to be handwritten ++ assembly, but since that's what this file contains, here's a ++ simple strcmp.) ++*/ ++.global VG_(amd64_linux_REDIR_FOR_strcmp) ++.type VG_(amd64_linux_REDIR_FOR_strcmp), @function ++VG_(amd64_linux_REDIR_FOR_strcmp): ++ xorl %ecx, %ecx ++1: ++ movzbl (%rdi, %rcx), %eax ++ movzbl (%rsi, %rcx), %edx ++ testb %al, %al ++ jne 2f ++ movl %edx, %eax ++ negl %eax ++ ret ++2: ++ incq %rcx ++ subl %edx, %eax ++ je 1b ++ ret ++.size VG_(amd64_linux_REDIR_FOR_strcmp), .-VG_(amd64_linux_REDIR_FOR_strcmp) ++ + .global VG_(amd64_linux_REDIR_FOR_index) + .type VG_(amd64_linux_REDIR_FOR_index), @function + VG_(amd64_linux_REDIR_FOR_index): +diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h +index 54c575a7233a9451..c11060139e576616 100644 +--- a/coregrind/pub_core_trampoline.h ++++ b/coregrind/pub_core_trampoline.h +@@ -77,6 +77,7 @@ extern Addr VG_(amd64_linux_REDIR_FOR_vgettimeofday); + extern Addr VG_(amd64_linux_REDIR_FOR_vtime); + extern Addr VG_(amd64_linux_REDIR_FOR_vgetcpu); + extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* ); ++extern UInt VG_(amd64_linux_REDIR_FOR_strcmp)( void*, void* ); + extern Char* VG_(amd64_linux_REDIR_FOR_index) ( const Char*, Int ); + #endif + diff --git a/valgrind.spec b/valgrind.spec index 1f7d7a7..766d77f 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.22.0 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -122,6 +122,10 @@ Patch12: valgrind-3.22.0-pth_mempcpy_false_races.patch # https://bugs.kde.org/show_bug.cgi?id=481127 Patch13: valgrind-3.22.0-amd64-VFMADD213.patch +# glibc built with -march=x86-64-v3 does not work due to ld.so strcmp +# https://bugs.kde.org/show_bug.cgi?id=485487 +Patch14: valgrind-3.22.0-amd64-redir-strcmp.patch + BuildRequires: make BuildRequires: glibc-devel @@ -269,6 +273,7 @@ Valgrind User Manual for details. %patch -P11 -p1 %patch -P12 -p1 %patch -P13 -p1 +%patch -P14 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -485,12 +490,13 @@ echo ===============END TESTING=============== %endif %changelog -* Sat Apr 13 2024 Mark Wielaard +* Sat Apr 13 2024 Mark Wielaard - 3.22.0-8 - Add BuildRequires: python3-devel for running testsuite. - Add valgrind-3.22.0-gdb-thread-exited.patch - Add valgrind-3.22.0-set_vma_name-supp.patch - Add valgrind-3.22.0-pth_mempcpy_false_races.patch - Add valgrind-3.22.0-amd64-VFMADD213.patch +- Add valgrind-3.22.0-amd64-redir-strcmp.patch * Mon Mar 11 2024 Mark Wielaard - 3.22.0-7 - Add valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch From 1b1cdf661126b581e948de3a0c2051b654f51543 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 20 Apr 2024 20:14:33 +0200 Subject: [PATCH 157/196] 3.23.0-0.1.RC1 - Upstream 3.23.0-RC1 - Remove all upstreamed patches --- .gitignore | 1 + sources | 2 +- valgrind-3.22.0-amd64-VFMADD213.patch | 530 ------------------ valgrind-3.22.0-amd64-redir-strcmp.patch | 66 --- valgrind-3.22.0-fchmodat2.patch | 206 ------- ...cc-builtin_strcmp-128-256-bit-vector.patch | 355 ------------ valgrind-3.22.0-gdb-thread-exited.patch | 23 - valgrind-3.22.0-pth_mempcpy_false_races.patch | 33 -- valgrind-3.22.0-rodata.patch | 122 ---- valgrind-3.22.0-set_vma_name-supp.patch | 24 - ...nd-3.22.0-valgrind-monitor-python-re.patch | 32 -- valgrind-3.22.0-x86-nop.patch | 136 ----- valgrind.spec | 63 +-- 13 files changed, 10 insertions(+), 1583 deletions(-) delete mode 100644 valgrind-3.22.0-amd64-VFMADD213.patch delete mode 100644 valgrind-3.22.0-amd64-redir-strcmp.patch delete mode 100644 valgrind-3.22.0-fchmodat2.patch delete mode 100644 valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch delete mode 100644 valgrind-3.22.0-gdb-thread-exited.patch delete mode 100644 valgrind-3.22.0-pth_mempcpy_false_races.patch delete mode 100644 valgrind-3.22.0-rodata.patch delete mode 100644 valgrind-3.22.0-set_vma_name-supp.patch delete mode 100644 valgrind-3.22.0-valgrind-monitor-python-re.patch delete mode 100644 valgrind-3.22.0-x86-nop.patch diff --git a/.gitignore b/.gitignore index 4ddb7e4..27bdf5b 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ /valgrind-3.22.0.RC1.tar.bz2 /valgrind-3.22.0.RC2.tar.bz2 /valgrind-3.22.0.tar.bz2 +/valgrind-3.23.0.RC1.tar.bz2 diff --git a/sources b/sources index 9965f6f..b1c83bf 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.22.0.tar.bz2) = 2904c13f68245bbafcea70998c6bd20725271300a7e94b6751ca00916943595fc3fac8557da7ea8db31b54a43f092823a0a947bc142829da811d074e1fe49777 +SHA512 (valgrind-3.23.0.RC1.tar.bz2) = 6d9b95ce919ffa1993265c2972b407beb2879b87f84efd61ada4e75f334b332917a726b053c5dbc64b970a55334189c48ccae9231934c9474b65eb6ec1e2c18f diff --git a/valgrind-3.22.0-amd64-VFMADD213.patch b/valgrind-3.22.0-amd64-VFMADD213.patch deleted file mode 100644 index 1b58b3d..0000000 --- a/valgrind-3.22.0-amd64-VFMADD213.patch +++ /dev/null @@ -1,530 +0,0 @@ -commit a5693c1203c3a26443af13182a8082c2e9152f6c -Author: Mark Wielaard -Date: Sat Apr 13 14:33:19 2024 +0200 - - amd64: Implement VFMADD213 for Iop_MAddF32 and Iop_MAddF64 - - Speed up F32 and F64 FMA on amd64. Add priv/host_amd64_maddf.c - implementing h_amd64_calc_MAddF32_fma4 and h_amd64_calc_MAddF64_fma4 - to be used instead of the generic variants h_generic_calc_MAddF32 - and h_generic_calc_MAddF64 when host has VEX_HWCAPS_AMD64_FMA4. - Add fma3 and fma4 detection m_machine.c (machine_get_hwcaps). - - This patch also fixes the memcheck/tests/vcpu_fnfns and - none/tests/amd64/fma testcases when run on a x86-64-v3 system. - - Patch contributed by Grazvydas Ignotas and - Bruno Lathuilière - - https://bugs.kde.org/show_bug.cgi?id=481127 - https://bugs.kde.org/show_bug.cgi?id=463463 - https://bugs.kde.org/show_bug.cgi?id=463458 - -diff --git a/Makefile.vex.am b/Makefile.vex.am -index 98d84835946b..c1244a69d25c 100644 ---- a/Makefile.vex.am -+++ b/Makefile.vex.am -@@ -54,6 +54,7 @@ noinst_HEADERS = \ - priv/host_generic_simd128.h \ - priv/host_generic_simd256.h \ - priv/host_generic_maddf.h \ -+ priv/host_amd64_maddf.h \ - priv/host_x86_defs.h \ - priv/host_amd64_defs.h \ - priv/host_ppc_defs.h \ -@@ -156,6 +157,7 @@ LIBVEX_SOURCES_COMMON = \ - priv/host_generic_simd128.c \ - priv/host_generic_simd256.c \ - priv/host_generic_maddf.c \ -+ priv/host_amd64_maddf.c \ - priv/host_generic_reg_alloc2.c \ - priv/host_generic_reg_alloc3.c \ - priv/host_x86_defs.c \ -diff --git a/VEX/priv/host_amd64_defs.c b/VEX/priv/host_amd64_defs.c -index 69afab739ce8..253ed65150e5 100644 ---- a/VEX/priv/host_amd64_defs.c -+++ b/VEX/priv/host_amd64_defs.c -@@ -590,6 +590,7 @@ const HChar* showAMD64SseOp ( AMD64SseOp op ) { - case Asse_PMADDUBSW: return "pmaddubsw"; - case Asse_F32toF16: return "vcvtps2ph(rm_field=$0x4)."; - case Asse_F16toF32: return "vcvtph2ps."; -+ case Asse_VFMADD213: return "vfmadd213"; - default: vpanic("showAMD64SseOp"); - } - } -@@ -1056,6 +1057,28 @@ AMD64Instr* AMD64Instr_SseMOVQ ( HReg gpr, HReg xmm, Bool toXMM ) { - //uu i->Ain.AvxReRg.dst = rg; - //uu return i; - //uu } -+AMD64Instr* AMD64Instr_Avx32FLo ( AMD64SseOp op, HReg src1, HReg src2, HReg dst ) { -+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); -+ i->tag = Ain_Avx32FLo; -+ i->Ain.Avx32FLo.op = op; -+ i->Ain.Avx32FLo.src1 = src1; -+ i->Ain.Avx32FLo.src2 = src2; -+ i->Ain.Avx32FLo.dst = dst; -+ vassert(op != Asse_MOV); -+ return i; -+} -+ -+AMD64Instr* AMD64Instr_Avx64FLo ( AMD64SseOp op, HReg src1, HReg src2, HReg dst ) { -+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); -+ i->tag = Ain_Avx64FLo; -+ i->Ain.Avx64FLo.op = op; -+ i->Ain.Avx64FLo.src1 = src1; -+ i->Ain.Avx64FLo.src2 = src2; -+ i->Ain.Avx64FLo.dst = dst; -+ vassert(op != Asse_MOV); -+ return i; -+} -+ - AMD64Instr* AMD64Instr_EvCheck ( AMD64AMode* amCounter, - AMD64AMode* amFailAddr ) { - AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr)); -@@ -1434,6 +1457,22 @@ void ppAMD64Instr ( const AMD64Instr* i, Bool mode64 ) - //uu vex_printf(","); - //uu ppHRegAMD64(i->Ain.AvxReRg.dst); - //uu return; -+ case Ain_Avx32FLo: -+ vex_printf("%sss ", showAMD64SseOp(i->Ain.Avx32FLo.op)); -+ ppHRegAMD64(i->Ain.Avx32FLo.src2); -+ vex_printf(","); -+ ppHRegAMD64(i->Ain.Avx32FLo.src1); -+ vex_printf(","); -+ ppHRegAMD64(i->Ain.Avx32FLo.dst); -+ return; -+ case Ain_Avx64FLo: -+ vex_printf("%ssd ", showAMD64SseOp(i->Ain.Avx64FLo.op)); -+ ppHRegAMD64(i->Ain.Avx64FLo.src2); -+ vex_printf(","); -+ ppHRegAMD64(i->Ain.Avx64FLo.src1); -+ vex_printf(","); -+ ppHRegAMD64(i->Ain.Avx64FLo.dst); -+ return; - case Ain_EvCheck: - vex_printf("(evCheck) decl "); - ppAMD64AMode(i->Ain.EvCheck.amCounter); -@@ -1790,6 +1829,18 @@ void getRegUsage_AMD64Instr ( HRegUsage* u, const AMD64Instr* i, Bool mode64 ) - //uu } - //uu } - //uu return; -+ case Ain_Avx32FLo: -+ vassert(i->Ain.Avx32FLo.op != Asse_MOV); -+ addHRegUse(u, HRmRead, i->Ain.Avx32FLo.src1); -+ addHRegUse(u, HRmRead, i->Ain.Avx32FLo.src2); -+ addHRegUse(u, HRmModify, i->Ain.Avx32FLo.dst); -+ return; -+ case Ain_Avx64FLo: -+ vassert(i->Ain.Avx64FLo.op != Asse_MOV); -+ addHRegUse(u, HRmRead, i->Ain.Avx64FLo.src1); -+ addHRegUse(u, HRmRead, i->Ain.Avx64FLo.src2); -+ addHRegUse(u, HRmModify, i->Ain.Avx64FLo.dst); -+ return; - case Ain_EvCheck: - /* We expect both amodes only to mention %rbp, so this is in - fact pointless, since %rbp isn't allocatable, but anyway.. */ -@@ -1999,6 +2050,16 @@ void mapRegs_AMD64Instr ( HRegRemap* m, AMD64Instr* i, Bool mode64 ) - //uu mapReg(m, &i->Ain.AvxReRg.src); - //uu mapReg(m, &i->Ain.AvxReRg.dst); - //uu return; -+ case Ain_Avx32FLo: -+ mapReg(m, &i->Ain.Avx32FLo.src1); -+ mapReg(m, &i->Ain.Avx32FLo.src2); -+ mapReg(m, &i->Ain.Avx32FLo.dst); -+ return; -+ case Ain_Avx64FLo: -+ mapReg(m, &i->Ain.Avx64FLo.src1); -+ mapReg(m, &i->Ain.Avx64FLo.src2); -+ mapReg(m, &i->Ain.Avx64FLo.dst); -+ return; - case Ain_EvCheck: - /* We expect both amodes only to mention %rbp, so this is in - fact pointless, since %rbp isn't allocatable, but anyway.. */ -@@ -4061,6 +4122,53 @@ Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, - //uu goto done; - //uu } - -+ case Ain_Avx32FLo: { -+ UInt d = vregEnc3210(i->Ain.Avx32FLo.dst); -+ UInt v = vregEnc3210(i->Ain.Avx32FLo.src1); -+ UInt s = vregEnc3210(i->Ain.Avx32FLo.src2); -+ UInt m = 2, pp = 1; -+ UInt opcode; -+ switch (i->Ain.Avx32FLo.op) { -+ case Asse_VFMADD213: -+ // VFMADD213SS %xmmS2, %xmmS1, %xmmD (xmm regs range 0 .. 15) -+ opcode = 0xa9; -+ break; -+ default: -+ goto bad; -+ } -+ // 0xC4 : ~d3 1 ~s3 o4 o3 o2 o1 o0 : 0 ~v3 ~v2 ~v1 ~v0 0 p1 p0 : opcode_byte -+ // : 1 1 d2 d1 d0 s2 s1 s0 -+ *p++ = 0xC4; // 3-byte VEX -+ *p++ = ((((~d)>>3)&1)<<7) | (1<<6) | ((((~s)>>3)&1)<<5) | m; -+ *p++ = ((~v&0x0f) << 3) | pp; -+ *p++ = opcode; -+ *p++ = (1<<7) | (1<<6) | ((d&7) << 3) | ((s&7) << 0); -+ goto done; -+ } -+ case Ain_Avx64FLo: { -+ UInt d = vregEnc3210(i->Ain.Avx64FLo.dst); -+ UInt v = vregEnc3210(i->Ain.Avx64FLo.src1); -+ UInt s = vregEnc3210(i->Ain.Avx64FLo.src2); -+ UInt m = 2, pp = 1; -+ UInt opcode; -+ switch (i->Ain.Avx64FLo.op) { -+ case Asse_VFMADD213: -+ // VFMADD213SD %xmmS2, %xmmS1, %xmmD (xmm regs range 0 .. 15) -+ opcode = 0xa9; -+ break; -+ default: -+ goto bad; -+ } -+ // 0xC4 : ~d3 1 ~s3 o4 o3 o2 o1 o0 : 1 ~v3 ~v2 ~v1 ~v0 0 p1 p0 : opcode_byte -+ // : 1 1 d2 d1 d0 s2 s1 s0 -+ *p++ = 0xC4; // 3-byte VEX -+ *p++ = ((((~d)>>3)&1)<<7) | (1<<6) | ((((~s)>>3)&1)<<5) | m; -+ *p++ = (1<<7)|((~v&0x0f) << 3) | pp; -+ *p++ = opcode; -+ *p++ = (1<<7) | (1<<6) | ((d&7) << 3) | ((s&7) << 0); -+ goto done; -+ } -+ - case Ain_EvCheck: { - /* We generate: - (3 bytes) decl 8(%rbp) 8 == offsetof(host_EvC_COUNTER) -diff --git a/VEX/priv/host_amd64_defs.h b/VEX/priv/host_amd64_defs.h -index e2ed2613bf67..eae878e312d7 100644 ---- a/VEX/priv/host_amd64_defs.h -+++ b/VEX/priv/host_amd64_defs.h -@@ -347,6 +347,8 @@ typedef - // Only for F16C capable hosts: - Asse_F32toF16, // F32 to F16 conversion, aka vcvtps2ph - Asse_F16toF32, // F16 to F32 conversion, aka vcvtph2ps -+ // Only for FMA (FMA3) capable hosts: -+ Asse_VFMADD213, // Fused Multiply-Add, aka vfmadd213ss - } - AMD64SseOp; - -@@ -412,6 +414,8 @@ typedef - //uu Ain_AvxLdSt, /* AVX load/store 256 bits, - //uu no alignment constraints */ - //uu Ain_AvxReRg, /* AVX binary general reg-reg, Re, Rg */ -+ Ain_Avx32FLo, /* AVX binary 3 operand, 32F in lowest lane only */ -+ Ain_Avx64FLo, /* AVX binary 3 operand, 64F in lowest lane only */ - Ain_EvCheck, /* Event check */ - Ain_ProfInc /* 64-bit profile counter increment */ - } -@@ -729,6 +733,18 @@ typedef - //uu HReg src; - //uu HReg dst; - //uu } AvxReRg; -+ struct { -+ AMD64SseOp op; -+ HReg src1; -+ HReg src2; -+ HReg dst; -+ } Avx32FLo; -+ struct { -+ AMD64SseOp op; -+ HReg src1; -+ HReg src2; -+ HReg dst; -+ } Avx64FLo; - struct { - AMD64AMode* amCounter; - AMD64AMode* amFailAddr; -@@ -803,6 +819,8 @@ extern AMD64Instr* AMD64Instr_SseShiftN ( AMD64SseOp, - extern AMD64Instr* AMD64Instr_SseMOVQ ( HReg gpr, HReg xmm, Bool toXMM ); - //uu extern AMD64Instr* AMD64Instr_AvxLdSt ( Bool isLoad, HReg, AMD64AMode* ); - //uu extern AMD64Instr* AMD64Instr_AvxReRg ( AMD64SseOp, HReg, HReg ); -+extern AMD64Instr* AMD64Instr_Avx32FLo ( AMD64SseOp, HReg, HReg, HReg ); -+extern AMD64Instr* AMD64Instr_Avx64FLo ( AMD64SseOp, HReg, HReg, HReg ); - extern AMD64Instr* AMD64Instr_EvCheck ( AMD64AMode* amCounter, - AMD64AMode* amFailAddr ); - extern AMD64Instr* AMD64Instr_ProfInc ( void ); -diff --git a/VEX/priv/host_amd64_isel.c b/VEX/priv/host_amd64_isel.c -index e15e1e60fb85..21d20c77f090 100644 ---- a/VEX/priv/host_amd64_isel.c -+++ b/VEX/priv/host_amd64_isel.c -@@ -42,6 +42,7 @@ - #include "host_generic_simd64.h" - #include "host_generic_simd128.h" - #include "host_generic_simd256.h" -+#include "host_amd64_maddf.h" - #include "host_generic_maddf.h" - #include "host_amd64_defs.h" - -@@ -2832,6 +2833,13 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, const IRExpr* e ) - HReg argX = iselFltExpr(env, qop->arg2); - HReg argY = iselFltExpr(env, qop->arg3); - HReg argZ = iselFltExpr(env, qop->arg4); -+ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA3) { -+ vassert(dst.u32 != argY.u32 && dst.u32 != argZ.u32); -+ if (dst.u32 != argX.u32) -+ addInstr(env, AMD64Instr_SseReRg(Asse_MOV, argX, dst)); -+ addInstr(env, AMD64Instr_Avx32FLo(Asse_VFMADD213, argY, argZ, dst)); -+ return dst; -+ } - /* XXXROUNDINGFIXME */ - /* set roundingmode here */ - /* subq $16, %rsp -- make a space*/ -@@ -2861,10 +2869,22 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, const IRExpr* e ) - AMD64AMode_IR(0, hregAMD64_RDX()))); - addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 4, argZ, - AMD64AMode_IR(0, hregAMD64_RCX()))); -- /* call the helper */ -- addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -- (ULong)(HWord)h_generic_calc_MAddF32, -- 4, mk_RetLoc_simple(RLPri_None) )); -+ -+ /* call the helper with priority order : fma4 -> fallback generic -+ remark: the fma3 case is handled before without helper*/ -+#if defined(VGA_amd64) -+ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA4) { -+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -+ (ULong)(HWord)h_amd64_calc_MAddF32_fma4, -+ 4, mk_RetLoc_simple(RLPri_None) )); -+ }else -+#endif -+ { -+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -+ (ULong)(HWord)h_generic_calc_MAddF32, -+ 4, mk_RetLoc_simple(RLPri_None) )); -+ } -+ - /* fetch the result from memory, using %r_argp, which the - register allocator will keep alive across the call. */ - addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 4, dst, -@@ -3024,6 +3044,14 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, const IRExpr* e ) - HReg argX = iselDblExpr(env, qop->arg2); - HReg argY = iselDblExpr(env, qop->arg3); - HReg argZ = iselDblExpr(env, qop->arg4); -+ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA3) { -+ vassert(dst.u32 != argY.u32 && dst.u32 != argZ.u32); -+ if (dst.u32 != argX.u32) -+ addInstr(env, AMD64Instr_SseReRg(Asse_MOV, argX, dst)); -+ addInstr(env, AMD64Instr_Avx64FLo(Asse_VFMADD213, argY, argZ, dst)); -+ return dst; -+ } -+ - /* XXXROUNDINGFIXME */ - /* set roundingmode here */ - /* subq $32, %rsp -- make a space*/ -@@ -3053,10 +3081,22 @@ static HReg iselDblExpr_wrk ( ISelEnv* env, const IRExpr* e ) - AMD64AMode_IR(0, hregAMD64_RDX()))); - addInstr(env, AMD64Instr_SseLdSt(False/*!isLoad*/, 8, argZ, - AMD64AMode_IR(0, hregAMD64_RCX()))); -- /* call the helper */ -- addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -- (ULong)(HWord)h_generic_calc_MAddF64, -- 4, mk_RetLoc_simple(RLPri_None) )); -+ -+ /* call the helper with priority order : fma4 -> fallback generic -+ remark: the fma3 case is handled before without helper*/ -+#if defined(VGA_amd64) -+ if (env->hwcaps & VEX_HWCAPS_AMD64_FMA4) { -+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -+ (ULong)(HWord)h_amd64_calc_MAddF64_fma4, -+ 4, mk_RetLoc_simple(RLPri_None) )); -+ }else -+#endif -+ { -+ addInstr(env, AMD64Instr_Call( Acc_ALWAYS, -+ (ULong)(HWord)h_generic_calc_MAddF64, -+ 4, mk_RetLoc_simple(RLPri_None) )); -+ } -+ - /* fetch the result from memory, using %r_argp, which the - register allocator will keep alive across the call. */ - addInstr(env, AMD64Instr_SseLdSt(True/*isLoad*/, 8, dst, -@@ -5372,7 +5412,9 @@ HInstrArray* iselSB_AMD64 ( const IRSB* bb, - | VEX_HWCAPS_AMD64_AVX2 - | VEX_HWCAPS_AMD64_F16C - | VEX_HWCAPS_AMD64_RDRAND -- | VEX_HWCAPS_AMD64_RDSEED))); -+ | VEX_HWCAPS_AMD64_RDSEED -+ | VEX_HWCAPS_AMD64_FMA3 -+ | VEX_HWCAPS_AMD64_FMA4))); - - /* Check that the host's endianness is as expected. */ - vassert(archinfo_host->endness == VexEndnessLE); -diff --git a/VEX/priv/host_amd64_maddf.c b/VEX/priv/host_amd64_maddf.c -new file mode 100644 -index 000000000000..579abb4389ac ---- /dev/null -+++ b/VEX/priv/host_amd64_maddf.c -@@ -0,0 +1,35 @@ -+ -+/*---------------------------------------------------------------*/ -+/*--- begin host_amd64_maddf.c ---*/ -+/*---------------------------------------------------------------*/ -+ -+/* -+ Compute x * y + z as ternary operation with intrinsics. -+*/ -+ -+ -+#include "libvex_basictypes.h" -+#include "host_amd64_maddf.h" -+ -+#if defined(VGA_amd64) -+void VEX_REGPARM(3) -+ h_amd64_calc_MAddF32_fma4 ( /*OUT*/Float* res, -+ Float* argX, Float* argY, Float* argZ ) -+{ -+ __asm__ ("vfmaddss %3,%2,%1,%0;" : -+ "=x"(*res): "x"(*argX),"x"(*argY), "x"(*argZ)); -+ return ; -+} -+ -+void VEX_REGPARM(3) -+ h_amd64_calc_MAddF64_fma4 ( /*OUT*/Double* res, -+ Double* argX, Double* argY, Double* argZ ) -+{ -+ __asm__ ("vfmaddsd %3,%2,%1,%0;" : -+ "=x"(*res): "x"(*argX),"x"(*argY), "x"(*argZ)); -+ return; -+} -+#endif -+/*---------------------------------------------------------------*/ -+/*--- end host_amd64_maddf.c --*/ -+/*---------------------------------------------------------------*/ -diff --git a/VEX/priv/host_amd64_maddf.h b/VEX/priv/host_amd64_maddf.h -new file mode 100644 -index 000000000000..b592a44e17d7 ---- /dev/null -+++ b/VEX/priv/host_amd64_maddf.h -@@ -0,0 +1,32 @@ -+ -+/*---------------------------------------------------------------*/ -+/*--- begin host_amd64_maddf.h ---*/ -+/*---------------------------------------------------------------*/ -+ -+/* -+ Compute x * y + z as ternary operation with intrinsics -+*/ -+ -+/* Generic helper functions for doing FMA, i.e. compute x * y + z -+ as ternary operation. -+ These are purely back-end entities and cannot be seen/referenced -+ from IR. */ -+ -+#ifndef __VEX_HOST_AMD64_MADDF_H -+#define __VEX_HOST_AMD64_MADDF_H -+ -+#include "libvex_basictypes.h" -+ -+#if defined(VGA_amd64) -+extern VEX_REGPARM(3) -+ void h_amd64_calc_MAddF32_fma4 ( /*OUT*/Float*, Float*, Float*, Float* ); -+ -+extern VEX_REGPARM(3) -+ void h_amd64_calc_MAddF64_fma4 ( /*OUT*/Double*, Double*, Double*, -+ Double* ); -+#endif -+#endif /* ndef __VEX_HOST_AMD64_MADDF_H */ -+ -+/*---------------------------------------------------------------*/ -+/*--- end host_amd64_maddf.h --*/ -+/*---------------------------------------------------------------*/ -diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c -index 482047c7aa1a..eda2fe6eeecd 100644 ---- a/VEX/priv/main_main.c -+++ b/VEX/priv/main_main.c -@@ -1650,6 +1650,8 @@ static const HChar* show_hwcaps_amd64 ( UInt hwcaps ) - { VEX_HWCAPS_AMD64_F16C, "f16c" }, - { VEX_HWCAPS_AMD64_RDRAND, "rdrand" }, - { VEX_HWCAPS_AMD64_RDSEED, "rdseed" }, -+ { VEX_HWCAPS_AMD64_FMA3, "fma" }, /*fma to keep the same naming as /proc/cpuinfo*/ -+ { VEX_HWCAPS_AMD64_FMA4, "fma4" }, - }; - /* Allocate a large enough buffer */ - static HChar buf[sizeof prefix + -diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h -index 42c013c1ece6..15e2d39deb10 100644 ---- a/VEX/pub/libvex.h -+++ b/VEX/pub/libvex.h -@@ -101,6 +101,8 @@ typedef - #define VEX_HWCAPS_AMD64_RDRAND (1<<13) /* RDRAND instructions */ - #define VEX_HWCAPS_AMD64_F16C (1<<14) /* F16C instructions */ - #define VEX_HWCAPS_AMD64_RDSEED (1<<15) /* RDSEED instructions */ -+#define VEX_HWCAPS_AMD64_FMA3 (1<<16) /* FMA3 instructions */ -+#define VEX_HWCAPS_AMD64_FMA4 (1<<17) /* FMA4 instructions */ - - /* ppc32: baseline capability is integer only */ - #define VEX_HWCAPS_PPC32_F (1<<8) /* basic (non-optional) FP */ -diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c -index 079383651226..81fb810643cf 100644 ---- a/coregrind/m_machine.c -+++ b/coregrind/m_machine.c -@@ -984,6 +984,7 @@ Bool VG_(machine_get_hwcaps)( void ) - #elif defined(VGA_amd64) - { Bool have_sse3, have_ssse3, have_cx8, have_cx16; - Bool have_lzcnt, have_avx, have_bmi, have_avx2; -+ Bool have_fma3, have_fma4; - Bool have_rdtscp, have_rdrand, have_f16c, have_rdseed; - UInt eax, ebx, ecx, edx, max_basic, max_extended; - ULong xgetbv_0 = 0; -@@ -992,7 +993,8 @@ Bool VG_(machine_get_hwcaps)( void ) - - have_sse3 = have_ssse3 = have_cx8 = have_cx16 - = have_lzcnt = have_avx = have_bmi = have_avx2 -- = have_rdtscp = have_rdrand = have_f16c = have_rdseed = False; -+ = have_rdtscp = have_rdrand = have_f16c = have_rdseed -+ = have_fma3 = have_fma4 = False; - - eax = ebx = ecx = edx = max_basic = max_extended = 0; - -@@ -1022,7 +1024,7 @@ Bool VG_(machine_get_hwcaps)( void ) - // we assume that SSE1 and SSE2 are available by default - have_sse3 = (ecx & (1<<0)) != 0; /* True => have sse3 insns */ - have_ssse3 = (ecx & (1<<9)) != 0; /* True => have Sup SSE3 insns */ -- // fma is ecx:12 -+ have_fma3 = (ecx & (1<<12))!= 0; /* True => have fma3 insns */ - // sse41 is ecx:19 - // sse42 is ecx:20 - // xsave is ecx:26 -@@ -1032,7 +1034,7 @@ Bool VG_(machine_get_hwcaps)( void ) - have_rdrand = (ecx & (1<<30)) != 0; /* True => have RDRAND insns */ - - have_avx = False; -- /* have_fma = False; */ -+ - if ( (ecx & ((1<<28)|(1<<27)|(1<<26))) == ((1<<28)|(1<<27)|(1<<26)) ) { - /* Processor supports AVX instructions and XGETBV is enabled - by OS and AVX instructions are enabled by the OS. */ -@@ -1059,9 +1061,6 @@ Bool VG_(machine_get_hwcaps)( void ) - if (ebx2 == 576 && eax2 == 256) { - have_avx = True; - } -- /* have_fma = (ecx & (1<<12)) != 0; */ -- /* have_fma: Probably correct, but gcc complains due to -- unusedness. */ - } - } - -@@ -1089,6 +1088,11 @@ Bool VG_(machine_get_hwcaps)( void ) - have_rdtscp = (edx & (1<<27)) != 0; /* True => have RDTSVCP */ - } - -+ if (max_extended >= 0x80000001) { -+ VG_(cpuid)(0x80000001, 0, &eax, &ebx, &ecx, &edx); -+ have_fma4= (ecx & (1<<16)) != 0; /* True => have fma4 */ -+ } -+ - /* Check for BMI1 and AVX2. If we have AVX1 (plus OS support). */ - have_bmi = False; - have_avx2 = False; -@@ -1120,7 +1124,9 @@ Bool VG_(machine_get_hwcaps)( void ) - | (have_rdtscp ? VEX_HWCAPS_AMD64_RDTSCP : 0) - | (have_f16c ? VEX_HWCAPS_AMD64_F16C : 0) - | (have_rdrand ? VEX_HWCAPS_AMD64_RDRAND : 0) -- | (have_rdseed ? VEX_HWCAPS_AMD64_RDSEED : 0); -+ | (have_rdseed ? VEX_HWCAPS_AMD64_RDSEED : 0) -+ | (have_fma3 ? VEX_HWCAPS_AMD64_FMA3 : 0) -+ | (have_fma4 ? VEX_HWCAPS_AMD64_FMA4 : 0); - - VG_(machine_get_cache_info)(&vai); - diff --git a/valgrind-3.22.0-amd64-redir-strcmp.patch b/valgrind-3.22.0-amd64-redir-strcmp.patch deleted file mode 100644 index 6e37ba1..0000000 --- a/valgrind-3.22.0-amd64-redir-strcmp.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c -index cef241b4f85aad23..ce6073a62190a639 100644 ---- a/coregrind/m_redir.c -+++ b/coregrind/m_redir.c -@@ -1410,6 +1410,15 @@ void VG_(redir_initialise) ( void ) - complain_about_stripped_glibc_ldso - # endif - ); -+ add_hardwired_spec( -+ "ld-linux-x86-64.so.2", "strcmp", -+ (Addr)&VG_(amd64_linux_REDIR_FOR_strcmp), -+# ifndef GLIBC_MANDATORY_STRLEN_REDIRECT -+ NULL -+# else -+ complain_about_stripped_glibc_ldso -+# endif -+ ); - } - - # elif defined(VGP_ppc32_linux) -diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S -index da96972323824bdb..716afb2121b84b57 100644 ---- a/coregrind/m_trampoline.S -+++ b/coregrind/m_trampoline.S -@@ -218,6 +218,29 @@ VG_(amd64_linux_REDIR_FOR_strlen): - .LfnE5: - .size VG_(amd64_linux_REDIR_FOR_strlen), .-VG_(amd64_linux_REDIR_FOR_strlen) - -+/* There's no particular reason that this needs to be handwritten -+ assembly, but since that's what this file contains, here's a -+ simple strcmp.) -+*/ -+.global VG_(amd64_linux_REDIR_FOR_strcmp) -+.type VG_(amd64_linux_REDIR_FOR_strcmp), @function -+VG_(amd64_linux_REDIR_FOR_strcmp): -+ xorl %ecx, %ecx -+1: -+ movzbl (%rdi, %rcx), %eax -+ movzbl (%rsi, %rcx), %edx -+ testb %al, %al -+ jne 2f -+ movl %edx, %eax -+ negl %eax -+ ret -+2: -+ incq %rcx -+ subl %edx, %eax -+ je 1b -+ ret -+.size VG_(amd64_linux_REDIR_FOR_strcmp), .-VG_(amd64_linux_REDIR_FOR_strcmp) -+ - .global VG_(amd64_linux_REDIR_FOR_index) - .type VG_(amd64_linux_REDIR_FOR_index), @function - VG_(amd64_linux_REDIR_FOR_index): -diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h -index 54c575a7233a9451..c11060139e576616 100644 ---- a/coregrind/pub_core_trampoline.h -+++ b/coregrind/pub_core_trampoline.h -@@ -77,6 +77,7 @@ extern Addr VG_(amd64_linux_REDIR_FOR_vgettimeofday); - extern Addr VG_(amd64_linux_REDIR_FOR_vtime); - extern Addr VG_(amd64_linux_REDIR_FOR_vgetcpu); - extern UInt VG_(amd64_linux_REDIR_FOR_strlen)( void* ); -+extern UInt VG_(amd64_linux_REDIR_FOR_strcmp)( void*, void* ); - extern Char* VG_(amd64_linux_REDIR_FOR_index) ( const Char*, Int ); - #endif - diff --git a/valgrind-3.22.0-fchmodat2.patch b/valgrind-3.22.0-fchmodat2.patch deleted file mode 100644 index b1ba313..0000000 --- a/valgrind-3.22.0-fchmodat2.patch +++ /dev/null @@ -1,206 +0,0 @@ -From a43e62dddcf51ec6578a90c5988a41e856b44b05 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Sat, 18 Nov 2023 21:17:02 +0100 -Subject: [PATCH] Add fchmodat2 syscall on linux - -fchmodat2 is a new syscall on linux 6.6. It is a variant of fchmodat -that takes an extra flags argument. - -https://bugs.kde.org/show_bug.cgi?id=477198 - -(cherry picked from commit 372d09fd9a8d76847c81092ebff71c80fd6c145d) ---- - NEWS | 1 + - coregrind/m_syswrap/priv_syswrap-linux.h | 3 +++ - coregrind/m_syswrap/syswrap-amd64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-linux.c | 11 +++++++++++ - coregrind/m_syswrap/syswrap-mips32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + - coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + - coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-s390x-linux.c | 2 ++ - coregrind/m_syswrap/syswrap-x86-linux.c | 2 ++ - include/vki/vki-scnums-shared-linux.h | 2 ++ - 14 files changed, 35 insertions(+) - -diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h -index 7c9decf5a..798c456c9 100644 ---- a/coregrind/m_syswrap/priv_syswrap-linux.h -+++ b/coregrind/m_syswrap/priv_syswrap-linux.h -@@ -331,6 +331,9 @@ DECL_TEMPLATE(linux, sys_openat2); - // Linux-specific (new in Linux 5.14) - DECL_TEMPLATE(linux, sys_memfd_secret); - -+// Since Linux 6.6 -+DECL_TEMPLATE(linux, sys_fchmodat2); -+ - /* --------------------------------------------------------------------- - Wrappers for sockets and ipc-ery. These are split into standalone - procedures because x86-linux hides them inside multiplexors -diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c -index 008600798..fe17d118b 100644 ---- a/coregrind/m_syswrap/syswrap-amd64-linux.c -+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c -@@ -886,6 +886,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 -+ -+ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c -index 9a7a1e0d2..811931d3b 100644 ---- a/coregrind/m_syswrap/syswrap-arm-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm-linux.c -@@ -1059,6 +1059,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ -+ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - -diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c -index 6af7bab83..3307bc2ca 100644 ---- a/coregrind/m_syswrap/syswrap-arm64-linux.c -+++ b/coregrind/m_syswrap/syswrap-arm64-linux.c -@@ -840,6 +840,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 -+ -+ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - -diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c -index d571fc327..efa47f2e6 100644 ---- a/coregrind/m_syswrap/syswrap-linux.c -+++ b/coregrind/m_syswrap/syswrap-linux.c -@@ -6059,6 +6059,17 @@ PRE(sys_fchmodat) - PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 ); - } - -+PRE(sys_fchmodat2) -+{ -+ PRINT("sys_fchmodat2 ( %ld, %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u, %" -+ FMT_REGWORD "u )", -+ SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4); -+ PRE_REG_READ4(long, "fchmodat2", -+ int, dfd, const char *, path, vki_mode_t, mode, -+ unsigned int, flags); -+ PRE_MEM_RASCIIZ( "fchmodat2(pathname)", ARG2 ); -+} -+ - PRE(sys_faccessat) - { - PRINT("sys_faccessat ( %ld, %#" FMT_REGWORD "x(%s), %ld )", -diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c -index 6268a00dd..74a1f6eac 100644 ---- a/coregrind/m_syswrap/syswrap-mips32-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips32-linux.c -@@ -1143,6 +1143,8 @@ static SyscallTableEntry syscall_main_table[] = { - LINX_ (__NR_faccessat2, sys_faccessat2), // 439 - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ -+ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c -index 6cdf25893..4e8508b7a 100644 ---- a/coregrind/m_syswrap/syswrap-mips64-linux.c -+++ b/coregrind/m_syswrap/syswrap-mips64-linux.c -@@ -820,6 +820,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_close_range, sys_close_range), - LINX_ (__NR_faccessat2, sys_faccessat2), - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), -+ LINX_ (__NR_fchmodat2, sys_fchmodat2), - }; - - SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c -index d724cde74..7859900c1 100644 ---- a/coregrind/m_syswrap/syswrap-nanomips-linux.c -+++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c -@@ -829,6 +829,7 @@ static SyscallTableEntry syscall_main_table[] = { - LINXY (__NR_close_range, sys_close_range), - LINX_ (__NR_faccessat2, sys_faccessat2), - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), -+ LINX_ (__NR_fchmodat2, sys_fchmodat2), - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) -diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c -index c0cfef235..1e19116ee 100644 ---- a/coregrind/m_syswrap/syswrap-ppc32-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c -@@ -1063,6 +1063,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ -+ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c -index f5976f30c..1097212a4 100644 ---- a/coregrind/m_syswrap/syswrap-ppc64-linux.c -+++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c -@@ -1032,6 +1032,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - - LINXY (__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ -+ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c -index afba154e7..3588672c7 100644 ---- a/coregrind/m_syswrap/syswrap-s390x-linux.c -+++ b/coregrind/m_syswrap/syswrap-s390x-linux.c -@@ -873,6 +873,8 @@ static SyscallTableEntry syscall_table[] = { - LINX_(__NR_faccessat2, sys_faccessat2), // 439 - - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 -+ -+ LINX_ (__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c -index da4fd8fa2..58badc6b0 100644 ---- a/coregrind/m_syswrap/syswrap-x86-linux.c -+++ b/coregrind/m_syswrap/syswrap-x86-linux.c -@@ -1658,6 +1658,8 @@ static SyscallTableEntry syscall_table[] = { - LINXY(__NR_epoll_pwait2, sys_epoll_pwait2), // 441 - - LINXY(__NR_memfd_secret, sys_memfd_secret), // 447 -+ -+ LINX_(__NR_fchmodat2, sys_fchmodat2), // 452 - }; - - SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) -diff --git a/include/vki/vki-scnums-shared-linux.h b/include/vki/vki-scnums-shared-linux.h -index 542382b53..a4cd87149 100644 ---- a/include/vki/vki-scnums-shared-linux.h -+++ b/include/vki/vki-scnums-shared-linux.h -@@ -50,4 +50,6 @@ - - #define __NR_memfd_secret 447 - -+#define __NR_fchmodat2 452 -+ - #endif --- -2.39.3 - diff --git a/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch b/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch deleted file mode 100644 index cbcf6e0..0000000 --- a/valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch +++ /dev/null @@ -1,355 +0,0 @@ -From 316ef0d22b6f41722cc71316a6b59e60e7c9576c Mon Sep 17 00:00:00 2001 -From: Julian Seward -Date: Mon, 11 Mar 2024 17:53:14 +0100 -Subject: [PATCH] Handle gcc __builtin_strcmp using 128/256 bit vectors with - sse4.1, avx/avx2 - -* amd64 front end: redo the translation into IR for PTEST, so as to - use only IROps which we know Memcheck can do exact instrumentation - for. Handling for both the 128- and 256-bit cases is has been - changed. - -* ir_opt.c: add some constant folding rules to support the above. In - particular, for the case `ptest %reg, %reg` (the same reg twice), we - want rflags.C to be set to a defined-1 even if %reg is completely - undefined. Doing that requires folding `x and not(x)` to zero when - x has type V128 or V256. - -* memcheck/tests/amd64/rh2257546_{128,256}.c: new test cases - -https://bugzilla.redhat.com/show_bug.cgi?id=2257546 ---- - VEX/priv/guest_amd64_toIR.c | 64 +++++++++---------- - VEX/priv/ir_opt.c | 34 ++++++++++ - memcheck/tests/amd64/Makefile.am | 7 +- - memcheck/tests/amd64/rh2257546_128.c | 32 ++++++++++ - memcheck/tests/amd64/rh2257546_128.stderr.exp | 0 - memcheck/tests/amd64/rh2257546_128.stdout.exp | 1 + - memcheck/tests/amd64/rh2257546_128.vgtest | 2 + - memcheck/tests/amd64/rh2257546_256.c | 32 ++++++++++ - memcheck/tests/amd64/rh2257546_256.stderr.exp | 0 - memcheck/tests/amd64/rh2257546_256.stdout.exp | 1 + - memcheck/tests/amd64/rh2257546_256.vgtest | 3 + - 11 files changed, 141 insertions(+), 35 deletions(-) - create mode 100644 memcheck/tests/amd64/rh2257546_128.c - create mode 100644 memcheck/tests/amd64/rh2257546_128.stderr.exp - create mode 100644 memcheck/tests/amd64/rh2257546_128.stdout.exp - create mode 100644 memcheck/tests/amd64/rh2257546_128.vgtest - create mode 100644 memcheck/tests/amd64/rh2257546_256.c - create mode 100644 memcheck/tests/amd64/rh2257546_256.stderr.exp - create mode 100644 memcheck/tests/amd64/rh2257546_256.stdout.exp - create mode 100644 memcheck/tests/amd64/rh2257546_256.vgtest - -diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c -index 0414aa5c5..d7c25042d 100644 ---- a/VEX/priv/guest_amd64_toIR.c -+++ b/VEX/priv/guest_amd64_toIR.c -@@ -16826,13 +16826,18 @@ static Long dis_VBLENDV_256 ( const VexAbiInfo* vbi, Prefix pfx, Long delta, - - static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) - { -- /* Set Z=1 iff (vecE & vecG) == 0 -- Set C=1 iff (vecE & not vecG) == 0 -+ /* Set Z=1 iff (vecE & vecG) == 0--(128)--0 -+ Set C=1 iff (vecE & not vecG) == 0--(128)--0 -+ -+ For the case `sign == 0`, be careful to use only IROps that can be -+ instrumented exactly by memcheck. This is because PTEST is used for -+ __builtin_strcmp in gcc14. See -+ https://bugzilla.redhat.com/show_bug.cgi?id=2257546 - */ - - /* andV, andnV: vecE & vecG, vecE and not(vecG) */ - -- /* andV resp. andnV, reduced to 64-bit values, by or-ing the top -+ /* andV resp. andnV, are reduced to 64-bit values by or-ing the top - and bottom 64-bits together. It relies on this trick: - - InterleaveLO64x2([a,b],[c,d]) == [b,d] hence -@@ -16862,11 +16867,13 @@ static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) - binop(Iop_InterleaveHI64x2, - mkexpr(andnV), mkexpr(andnV))))); - -+ // Make z64 and c64 be either all-0s or all-1s - IRTemp z64 = newTemp(Ity_I64); - IRTemp c64 = newTemp(Ity_I64); -+ - if (sign == 64) { -- /* When only interested in the most significant bit, just shift -- arithmetically right and negate. */ -+ /* When only interested in the most significant bit, just copy bit 63 -+ into all bit positions, then invert. */ - assign(z64, - unop(Iop_Not64, - binop(Iop_Sar64, mkexpr(and64), mkU8(63)))); -@@ -16874,37 +16881,28 @@ static void finish_xTESTy ( IRTemp andV, IRTemp andnV, Int sign ) - assign(c64, - unop(Iop_Not64, - binop(Iop_Sar64, mkexpr(andn64), mkU8(63)))); -- } else { -- if (sign == 32) { -- /* When interested in bit 31 and bit 63, mask those bits and -- fallthrough into the PTEST handling. */ -- IRTemp t0 = newTemp(Ity_I64); -- IRTemp t1 = newTemp(Ity_I64); -- IRTemp t2 = newTemp(Ity_I64); -- assign(t0, mkU64(0x8000000080000000ULL)); -- assign(t1, binop(Iop_And64, mkexpr(and64), mkexpr(t0))); -- assign(t2, binop(Iop_And64, mkexpr(andn64), mkexpr(t0))); -- and64 = t1; -- andn64 = t2; -- } -- /* Now convert and64, andn64 to all-zeroes or all-1s, so we can -- slice out the Z and C bits conveniently. We use the standard -- trick all-zeroes -> all-zeroes, anything-else -> all-ones -- done by "(x | -x) >>s (word-size - 1)". -- */ -+ } else if (sign == 32) { -+ /* If we're interested into bits 63 and 31, OR bit 31 into bit 63, copy -+ bit 63 into all bit positions, then invert. */ -+ IRTemp and3264 = newTemp(Ity_I64); -+ assign(and3264, binop(Iop_Or64, mkexpr(and64), -+ binop(Iop_Shl64, mkexpr(and64), mkU8(32)))); - assign(z64, - unop(Iop_Not64, -- binop(Iop_Sar64, -- binop(Iop_Or64, -- binop(Iop_Sub64, mkU64(0), mkexpr(and64)), -- mkexpr(and64)), mkU8(63)))); -+ binop(Iop_Sar64, mkexpr(and3264), mkU8(63)))); - -+ IRTemp andn3264 = newTemp(Ity_I64); -+ assign(andn3264, binop(Iop_Or64, mkexpr(andn64), -+ binop(Iop_Shl64, mkexpr(andn64), mkU8(32)))); - assign(c64, - unop(Iop_Not64, -- binop(Iop_Sar64, -- binop(Iop_Or64, -- binop(Iop_Sub64, mkU64(0), mkexpr(andn64)), -- mkexpr(andn64)), mkU8(63)))); -+ binop(Iop_Sar64, mkexpr(andn3264), mkU8(63)))); -+ } else { -+ vassert(sign == 0); -+ assign(z64, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(and64), mkU64(0)), -+ mkU64(~0ULL), mkU64(0ULL))); -+ assign(c64, IRExpr_ITE(binop(Iop_CmpEQ64, mkexpr(andn64), mkU64(0)), -+ mkU64(~0ULL), mkU64(0ULL))); - } - - /* And finally, slice out the Z and C flags and set the flags -@@ -16966,9 +16964,7 @@ static Long dis_xTESTy_128 ( const VexAbiInfo* vbi, Prefix pfx, - IRTemp andnV = newTemp(Ity_V128); - assign(andV, binop(Iop_AndV128, mkexpr(vecE), mkexpr(vecG))); - assign(andnV, binop(Iop_AndV128, -- mkexpr(vecE), -- binop(Iop_XorV128, mkexpr(vecG), -- mkV128(0xFFFF)))); -+ mkexpr(vecE), unop(Iop_NotV128, mkexpr(vecG)))); - - finish_xTESTy ( andV, andnV, sign ); - return delta; -diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c -index f918e9f85..6453f4fdf 100644 ---- a/VEX/priv/ir_opt.c -+++ b/VEX/priv/ir_opt.c -@@ -1693,6 +1693,17 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) - break; - } - -+ /* Similarly .. */ -+ case Iop_V256toV128_0: case Iop_V256toV128_1: { -+ UInt v256 = e->Iex.Unop.arg->Iex.Const.con->Ico.V256; -+ if (v256 == 0x00000000) { -+ e2 = IRExpr_Const(IRConst_V128(0x0000)); -+ } else { -+ goto unhandled; -+ } -+ break; -+ } -+ - case Iop_ZeroHI64ofV128: { - /* Could do better here -- only need to look at the bottom 64 bits - of the argument, really. */ -@@ -2129,6 +2140,8 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) - } - - /* -- V128 stuff -- */ -+ case Iop_InterleaveLO64x2: // This, and the HI64, are created -+ case Iop_InterleaveHI64x2: // by the amd64 PTEST translation - case Iop_InterleaveLO8x16: { - /* This turns up a lot in Memcheck instrumentation of - Icc generated code. I don't know why. */ -@@ -2321,6 +2334,27 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) - break; - } - } -+ /* AndV128( x, NotV128( x ) ) ==> 0...0 and -+ AndV256( x, NotV256( x ) ) ==> 0...0 -+ This is generated by amd64 `ptest %xmmReg, %xmmReg` -+ (the same reg both times) -+ See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 */ -+ if (e->Iex.Binop.op == Iop_AndV128 -+ || e->Iex.Binop.op == Iop_AndV256) { -+ Bool isV256 = e->Iex.Binop.op == Iop_AndV256; -+ IRExpr* x1 = chase(env, e->Iex.Binop.arg1); -+ IRExpr* rhs = chase(env, e->Iex.Binop.arg2); -+ if (x1 && rhs -+ && rhs->tag == Iex_Unop -+ && rhs->Iex.Unop.op == (isV256 ? Iop_NotV256 -+ : Iop_NotV128)) { -+ IRExpr* x2 = chase(env, rhs->Iex.Unop.arg); -+ if (x2 && sameIRExprs(env, x1, x2)) { -+ e2 = mkZeroOfPrimopResultType(e->Iex.Binop.op); -+ break; -+ } -+ } -+ } - break; - - case Iop_OrV128: -diff --git a/memcheck/tests/amd64/Makefile.am b/memcheck/tests/amd64/Makefile.am -index 0d2812dd8..906b8f393 100644 ---- a/memcheck/tests/amd64/Makefile.am -+++ b/memcheck/tests/amd64/Makefile.am -@@ -20,6 +20,10 @@ EXTRA_DIST = \ - insn-pmovmskb.stderr.exp-clang \ - more_x87_fp.stderr.exp more_x87_fp.stdout.exp more_x87_fp.vgtest \ - pcmpgt.stderr.exp pcmpgt.vgtest \ -+ rh2257546_128.vgtest \ -+ rh2257546_128.stderr.exp rh2257546_128.stdout.exp \ -+ rh2257546_256.vgtest \ -+ rh2257546_256.stderr.exp rh2257546_256.stdout.exp \ - sh-mem-vec128-plo-no.vgtest \ - sh-mem-vec128-plo-no.stderr.exp \ - sh-mem-vec128-plo-no.stdout.exp \ -@@ -46,12 +50,13 @@ check_PROGRAMS = \ - insn-bsfl \ - insn-pmovmskb \ - pcmpgt \ -+ rh2257546_128 \ - sh-mem-vec128 \ - sse_memory \ - xor-undef-amd64 - - if BUILD_AVX_TESTS -- check_PROGRAMS += sh-mem-vec256 xsave-avx -+ check_PROGRAMS += rh2257546_256 sh-mem-vec256 xsave-avx - endif - if HAVE_ASM_CONSTRAINT_P - check_PROGRAMS += insn-pcmpistri -diff --git a/memcheck/tests/amd64/rh2257546_128.c b/memcheck/tests/amd64/rh2257546_128.c -new file mode 100644 -index 000000000..a405aa775 ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_128.c -@@ -0,0 +1,32 @@ -+ -+// This should run on memcheck without reporting an undef-value error. -+// See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 -+ -+#include -+#include -+ -+int main ( void ) -+{ -+ char* c1 = malloc(16); -+ c1[0] = 'x'; c1[1] = 'y'; c1[2] = 'x'; c1[3] = 0; -+ -+ char* c2 = "foobarxyzzyfoobarzyzzy"; // strlen > 16 -+ -+ long long int res; -+ __asm__ __volatile__( -+ "movdqu (%1), %%xmm4" "\n\t" -+ "movdqu (%2), %%xmm5" "\n\t" -+ "pxor %%xmm4, %%xmm5" "\n\t" -+ "ptest %%xmm5, %%xmm5" "\n\t" -+ "je zzz1f" "\n\t" -+ "mov $99, %0" "\n\t" -+ "jmp zzzafter" "\n" -+ "zzz1f:" "\n\t" -+ "mov $88, %0" "\n" -+ "zzzafter:" "\n\t" -+ : /*OUT*/"=r"(res) : /*IN*/"r"(c1),"r"(c2) : /*TRASH*/"xmm4","xmm5","cc" -+ ); -+ printf("res = %lld\n", res); -+ free(c1); -+ return 0; -+} -diff --git a/memcheck/tests/amd64/rh2257546_128.stderr.exp b/memcheck/tests/amd64/rh2257546_128.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/amd64/rh2257546_128.stdout.exp b/memcheck/tests/amd64/rh2257546_128.stdout.exp -new file mode 100644 -index 000000000..454131089 ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_128.stdout.exp -@@ -0,0 +1 @@ -+res = 99 -diff --git a/memcheck/tests/amd64/rh2257546_128.vgtest b/memcheck/tests/amd64/rh2257546_128.vgtest -new file mode 100644 -index 000000000..94414cd6f ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_128.vgtest -@@ -0,0 +1,2 @@ -+prog: rh2257546_128 -+vgopts: -q -diff --git a/memcheck/tests/amd64/rh2257546_256.c b/memcheck/tests/amd64/rh2257546_256.c -new file mode 100644 -index 000000000..235005ca6 ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_256.c -@@ -0,0 +1,32 @@ -+ -+// This should run on memcheck without reporting an undef-value error. -+// See https://bugzilla.redhat.com/show_bug.cgi?id=2257546 -+ -+#include -+#include -+ -+int main ( void ) -+{ -+ char* c1 = malloc(32); -+ c1[0] = 'x'; c1[1] = 'y'; c1[2] = 'x'; c1[3] = 0; -+ -+ char* c2 = "foobarxyzzyfoobarzyzzyandawholelotmoretoo"; // strlen > 32 -+ -+ long long int res; -+ __asm__ __volatile__( -+ "vmovdqu (%1), %%ymm4" "\n\t" -+ "vmovdqu (%2), %%ymm5" "\n\t" -+ "vpxor %%ymm4, %%ymm5, %%ymm5" "\n\t" -+ "vptest %%ymm5, %%ymm5" "\n\t" -+ "je zzz1f" "\n\t" -+ "mov $99, %0" "\n\t" -+ "jmp zzzafter" "\n" -+ "zzz1f:" "\n\t" -+ "mov $88, %0" "\n" -+ "zzzafter:" "\n\t" -+ : /*OUT*/"=r"(res) : /*IN*/"r"(c1),"r"(c2) : /*TRASH*/"ymm4","ymm5","cc" -+ ); -+ printf("res = %lld\n", res); -+ free(c1); -+ return 0; -+} -diff --git a/memcheck/tests/amd64/rh2257546_256.stderr.exp b/memcheck/tests/amd64/rh2257546_256.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/memcheck/tests/amd64/rh2257546_256.stdout.exp b/memcheck/tests/amd64/rh2257546_256.stdout.exp -new file mode 100644 -index 000000000..454131089 ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_256.stdout.exp -@@ -0,0 +1 @@ -+res = 99 -diff --git a/memcheck/tests/amd64/rh2257546_256.vgtest b/memcheck/tests/amd64/rh2257546_256.vgtest -new file mode 100644 -index 000000000..86eef8fe2 ---- /dev/null -+++ b/memcheck/tests/amd64/rh2257546_256.vgtest -@@ -0,0 +1,3 @@ -+prereq: test -e rh2257546_256 -+prog: rh2257546_256 -+vgopts: -q --- -2.43.0 - diff --git a/valgrind-3.22.0-gdb-thread-exited.patch b/valgrind-3.22.0-gdb-thread-exited.patch deleted file mode 100644 index 4a4d451..0000000 --- a/valgrind-3.22.0-gdb-thread-exited.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit 7aa63de01a3cda2a346f90be16bd29fd7b410c63 -Author: Mark Wielaard -Date: Mon Jan 22 14:08:30 2024 +0100 - - gdbserver_tests/filter_gdb.in: delete thread exiting - - The hginfo testcase would fail with GDB 14.1 because it would output - an extra line saying: [Thread .... exited] - -diff --git a/gdbserver_tests/filter_gdb.in b/gdbserver_tests/filter_gdb.in -index 16186dfe2c9b..6c85284b7531 100755 ---- a/gdbserver_tests/filter_gdb.in -+++ b/gdbserver_tests/filter_gdb.in -@@ -65,6 +65,9 @@ s/Thread [0-9][0-9]*/Thread ..../g - # delete thread switches - /\[Switching to Thread ....\]/d - -+# delete thread exiting -+/\[Thread .... exited\]/d -+ - # ??? Probably we had a 'Switching ' message in front of - # a frame line ? - s/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/ diff --git a/valgrind-3.22.0-pth_mempcpy_false_races.patch b/valgrind-3.22.0-pth_mempcpy_false_races.patch deleted file mode 100644 index d1d426d..0000000 --- a/valgrind-3.22.0-pth_mempcpy_false_races.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit f47109d30ca319a3bcd4288803e30a473d1506d2 -Author: Mark Wielaard -Date: Fri Apr 12 15:18:51 2024 +0200 - - Add new helgrind race suppression for pth_mempcpy_false_races - - In glibc 2.39+ the internal __printf_buffer_write might use memmove - instead of a memcpy variant. Add an extra suppression variant using - memmove. - - This makes pth_mempcpy_false_races pass again. - - See also https://bugs.kde.org/show_bug.cgi?id=450962 - -diff --git a/glibc-2.X-helgrind.supp.in b/glibc-2.X-helgrind.supp.in -index 2b576b982e42..dce611a09e38 100644 ---- a/glibc-2.X-helgrind.supp.in -+++ b/glibc-2.X-helgrind.supp.in -@@ -63,6 +63,14 @@ - fun:__printf_buffer_write - } - -+{ -+ helgrind-glibc-__printf_buffer_write2 -+ Helgrind:Race -+ fun:*memmove* -+ ... -+ fun:__printf_buffer_write -+} -+ - { - helgrind-glibc2X-005 - Helgrind:Race diff --git a/valgrind-3.22.0-rodata.patch b/valgrind-3.22.0-rodata.patch deleted file mode 100644 index 47f31ed..0000000 --- a/valgrind-3.22.0-rodata.patch +++ /dev/null @@ -1,122 +0,0 @@ -commit 1d00e5ce0fb069911c4b525ec38289fb5d9021b0 -Author: Paul Floyd -Date: Sat Nov 18 08:49:34 2023 +0100 - - Bug 476548 - valgrind 3.22.0 fails on assertion when loading debuginfo file produced by mold - - (cherry picked from commit 9ea4ae66707a4dcc6f4328e11911652e4418c585) - -diff --git a/coregrind/m_debuginfo/image.c b/coregrind/m_debuginfo/image.c -index 02e509071..445f95555 100644 ---- a/coregrind/m_debuginfo/image.c -+++ b/coregrind/m_debuginfo/image.c -@@ -1221,6 +1221,20 @@ Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2) - } - } - -+Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n) -+{ -+ ensure_valid(img, off1, 1, "ML_(img_strcmp_c)"); -+ while (n) { -+ UChar c1 = get(img, off1); -+ UChar c2 = *(const UChar*)str2; -+ if (c1 < c2) return -1; -+ if (c1 > c2) return 1; -+ if (c1 == 0) return 0; -+ off1++; str2++; --n; -+ } -+ return 0; -+} -+ - UChar ML_(img_get_UChar)(DiImage* img, DiOffT offset) - { - ensure_valid(img, offset, 1, "ML_(img_get_UChar)"); -diff --git a/coregrind/m_debuginfo/priv_image.h b/coregrind/m_debuginfo/priv_image.h -index a49846f14..c91e49f01 100644 ---- a/coregrind/m_debuginfo/priv_image.h -+++ b/coregrind/m_debuginfo/priv_image.h -@@ -115,6 +115,10 @@ Int ML_(img_strcmp)(DiImage* img, DiOffT off1, DiOffT off2); - cast to HChar before comparison. */ - Int ML_(img_strcmp_c)(DiImage* img, DiOffT off1, const HChar* str2); - -+/* Do strncmp of a C string in the image vs a normal one. Chars are -+ cast to HChar before comparison. */ -+Int ML_(img_strcmp_n)(DiImage* img, DiOffT off1, const HChar* str2, Word n); -+ - /* Do strlen of a C string in the image. */ - SizeT ML_(img_strlen)(DiImage* img, DiOffT off); - -diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c -index fb64ed976..46f8c8343 100644 ---- a/coregrind/m_debuginfo/readelf.c -+++ b/coregrind/m_debuginfo/readelf.c -@@ -2501,8 +2501,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) - di->rodata_avma += inrw1->bias; - di->rodata_bias = inrw1->bias; - di->rodata_debug_bias = inrw1->bias; -- } -- else { -+ } else { - BAD(".rodata"); /* should not happen? */ - } - di->rodata_present = True; -@@ -2977,6 +2976,46 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di ) - return retval; - } - -+static void find_rodata(Word i, Word shnum, DiImage* dimg, struct _DebugInfo* di, DiOffT shdr_dioff, -+ UWord shdr_dent_szB, DiOffT shdr_strtab_dioff, PtrdiffT rw_dbias) -+{ -+ ElfXX_Shdr a_shdr; -+ ElfXX_Shdr a_extra_shdr; -+ ML_(img_get)(&a_shdr, dimg, -+ INDEX_BIS(shdr_dioff, i, shdr_dent_szB), -+ sizeof(a_shdr)); -+ if (di->rodata_present && -+ 0 == ML_(img_strcmp_c)(dimg, shdr_strtab_dioff -+ + a_shdr.sh_name, ".rodata")) { -+ Word sh_size = a_shdr.sh_size; -+ Word j; -+ Word next_addr = a_shdr.sh_addr + a_shdr.sh_size; -+ for (j = i + 1; j < shnum; ++j) { -+ ML_(img_get)(&a_extra_shdr, dimg, -+ INDEX_BIS(shdr_dioff, j, shdr_dent_szB), -+ sizeof(a_shdr)); -+ if (0 == ML_(img_strcmp_n)(dimg, shdr_strtab_dioff -+ + a_extra_shdr.sh_name, ".rodata", 7)) { -+ if (a_extra_shdr.sh_addr == -+ VG_ROUNDUP(next_addr, a_extra_shdr.sh_addralign)) { -+ sh_size = VG_ROUNDUP(sh_size, a_extra_shdr.sh_addralign) + a_extra_shdr.sh_size; -+ } -+ next_addr = a_extra_shdr.sh_addr + a_extra_shdr.sh_size; -+ } else { -+ break; -+ } -+ } -+ vg_assert(di->rodata_size == sh_size); -+ vg_assert(di->rodata_avma + a_shdr.sh_addr + rw_dbias); -+ di->rodata_debug_svma = a_shdr.sh_addr; -+ di->rodata_debug_bias = di->rodata_bias + -+ di->rodata_svma - di->rodata_debug_svma; -+ TRACE_SYMTAB("acquiring .rodata debug svma = %#lx .. %#lx\n", -+ di->rodata_debug_svma, -+ di->rodata_debug_svma + di->rodata_size - 1); -+ TRACE_SYMTAB("acquiring .rodata debug bias = %#lx\n", (UWord)di->rodata_debug_bias); -+ } -+} - Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) - { - Word i, j; -@@ -3391,7 +3430,11 @@ Bool ML_(read_elf_debug) ( struct _DebugInfo* di ) - FIND(text, rx) - FIND(data, rw) - FIND(sdata, rw) -- FIND(rodata, rw) -+ // https://bugs.kde.org/show_bug.cgi?id=476548 -+ // special handling for rodata as adjacent -+ // rodata sections may have been merged in ML_(read_elf_object) -+ //FIND(rodata, rw) -+ find_rodata(i, ehdr_dimg.e_shnum, dimg, di, shdr_dioff, shdr_dent_szB, shdr_strtab_dioff, rw_dbias); - FIND(bss, rw) - FIND(sbss, rw) - diff --git a/valgrind-3.22.0-set_vma_name-supp.patch b/valgrind-3.22.0-set_vma_name-supp.patch deleted file mode 100644 index 42b39a0..0000000 --- a/valgrind-3.22.0-set_vma_name-supp.patch +++ /dev/null @@ -1,24 +0,0 @@ -commit 5505e7b371f26f9f9588f4aa3a156dfa6856b90a -Author: Mark Wielaard -Date: Thu Apr 11 19:48:22 2024 +0200 - - Add __set_vma_name suppression to drd/tests/std_thread2.supp - - glibc uses a atomic var to set whether the kernel supports - PR_SET_VMA_ANON_NAME. This looks like a conflicting access to drd. - Suppress it for this testcase. - -diff --git a/drd/tests/std_thread2.supp b/drd/tests/std_thread2.supp -index 4f30560cb924..22052cf2c935 100644 ---- a/drd/tests/std_thread2.supp -+++ b/drd/tests/std_thread2.supp -@@ -44,4 +44,9 @@ - drd:ConflictingAccess - obj:/libexec/ld-elf*.so.1 - } -+{ -+ drd-glibc-set-vma-name -+ drd:ConflictingAccess -+ fun:__set_vma_name -+} - diff --git a/valgrind-3.22.0-valgrind-monitor-python-re.patch b/valgrind-3.22.0-valgrind-monitor-python-re.patch deleted file mode 100644 index 61d26cd..0000000 --- a/valgrind-3.22.0-valgrind-monitor-python-re.patch +++ /dev/null @@ -1,32 +0,0 @@ -commit 0fbfbe05028ad18efda786a256a2738d2c231ed4 -Author: Mark Wielaard -Date: Fri Nov 17 13:31:52 2023 +0100 - - valgrind-monitor.py regular expressions should use raw strings - - With python 3.12 gdb will produce the following SyntaxWarning when - loading valgrind-monitor-def.py: - - /usr/share/gdb/auto-load/valgrind-monitor-def.py:214: - SyntaxWarning: invalid escape sequence '\[' - if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): - - In a future python version this will become an SyntaxError. - - Use a raw strings for the regular expression. - - https://bugs.kde.org/show_bug.cgi?id=476708 - -diff --git a/coregrind/m_gdbserver/valgrind-monitor-def.py b/coregrind/m_gdbserver/valgrind-monitor-def.py -index b4e7b992d..d74b1590c 100644 ---- a/coregrind/m_gdbserver/valgrind-monitor-def.py -+++ b/coregrind/m_gdbserver/valgrind-monitor-def.py -@@ -211,7 +211,7 @@ class Valgrind_ADDR_LEN_opt(Valgrind_Command): - For compatibility reason with the Valgrind gdbserver monitor command, - we detect and accept usages such as 0x1234ABCD[10].""" - def invoke(self, arg_str : str, from_tty : bool) -> None: -- if re.fullmatch("^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): -+ if re.fullmatch(r"^0x[0123456789ABCDEFabcdef]+\[[^\[\]]+\]$", arg_str): - arg_str = arg_str.replace("[", " ") - arg_str = arg_str.replace("]", " ") - eval_execute_2(self, arg_str, diff --git a/valgrind-3.22.0-x86-nop.patch b/valgrind-3.22.0-x86-nop.patch deleted file mode 100644 index 421b291..0000000 --- a/valgrind-3.22.0-x86-nop.patch +++ /dev/null @@ -1,136 +0,0 @@ -From d35005cef8ad8207542738812705ceabf137d7e0 Mon Sep 17 00:00:00 2001 -From: Paul Floyd -Date: Sun, 17 Dec 2023 14:18:51 +0100 -Subject: [PATCH] Bug 478624 - Valgrind incompatibility with binutils-2.42 on - x86 with new nop patterns (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26) - -It was a bit of a struggle to get the testcase to build -with both clang and gcc (oddly enough gcc was more difficult) so -I just resorted to using .byte arrays. ---- - .gitignore | 1 + - NEWS | 2 ++ - VEX/priv/guest_x86_toIR.c | 22 +++++++++++++- - none/tests/x86/Makefile.am | 2 ++ - none/tests/x86/gnu_binutils_nop.c | 34 ++++++++++++++++++++++ - none/tests/x86/gnu_binutils_nop.stderr.exp | 0 - none/tests/x86/gnu_binutils_nop.vgtest | 2 ++ - 7 files changed, 62 insertions(+), 1 deletion(-) - create mode 100644 none/tests/x86/gnu_binutils_nop.c - create mode 100644 none/tests/x86/gnu_binutils_nop.stderr.exp - create mode 100644 none/tests/x86/gnu_binutils_nop.vgtest - -diff --git a/VEX/priv/guest_x86_toIR.c b/VEX/priv/guest_x86_toIR.c -index 5d6e6dc64..3b6efb387 100644 ---- a/VEX/priv/guest_x86_toIR.c -+++ b/VEX/priv/guest_x86_toIR.c -@@ -8198,7 +8198,7 @@ DisResult disInstr_X86_WRK ( - delta += 5; - goto decode_success; - } -- /* Don't barf on recent binutils padding, -+ /* Don't barf on recent (2010) binutils padding, - all variants of which are: nopw %cs:0x0(%eax,%eax,1) - 66 2e 0f 1f 84 00 00 00 00 00 - 66 66 2e 0f 1f 84 00 00 00 00 00 -@@ -8223,6 +8223,26 @@ DisResult disInstr_X86_WRK ( - } - } - -+ /* bug478624 GNU binutils uses a leal of esi into itself with -+ a zero offset and CS prefix as an 8 byte no-op (Dec 2023). -+ Since the CS prefix is hardly ever used we don't do much -+ to decode it, just a few cases for conditional branches. -+ So add handling here with other pseudo-no-ops. -+ */ -+ if (code[0] == 0x2E && code[1] == 0x8D) { -+ if (code[2] == 0x74 && code[3] == 0x26 && code[4] == 0x00) { -+ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n"); -+ delta += 5; -+ goto decode_success; -+ } -+ if (code[2] == 0xB4 && code[3] == 0x26 && code[4] == 0x00 -+ && code[5] == 0x00 && code[6] == 0x00 && code[7] == 0x00) { -+ DIP("leal %%cs:0(%%esi,%%eiz,1),%%esi\n"); -+ delta += 8; -+ goto decode_success; -+ } -+ } -+ - // Intel CET requires the following opcodes to be treated as NOPs - // with any prefix and ModRM, SIB and disp combination: - // "0F 19", "0F 1C", "0F 1D", "0F 1E", "0F 1F" -diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am -index 3ecd1ad3c..dbae86571 100644 ---- a/none/tests/x86/Makefile.am -+++ b/none/tests/x86/Makefile.am -@@ -52,6 +52,7 @@ EXTRA_DIST = \ - fxtract.stdout.exp fxtract.stderr.exp fxtract.vgtest \ - fxtract.stdout.exp-older-glibc \ - getseg.stdout.exp getseg.stderr.exp getseg.vgtest \ -+ gnu_binutils_nop.stderr.exp gnu_binutils_nop.vgtest \ - incdec_alt.stdout.exp incdec_alt.stderr.exp incdec_alt.vgtest \ - int.stderr.exp int.stdout.exp int.disabled \ - $(addsuffix .stderr.exp,$(INSN_TESTS)) \ -@@ -100,6 +101,7 @@ check_PROGRAMS = \ - fpu_lazy_eflags \ - fxtract \ - getseg \ -+ gnu_binutils_nop \ - incdec_alt \ - $(INSN_TESTS) \ - int \ -diff --git a/none/tests/x86/gnu_binutils_nop.c b/none/tests/x86/gnu_binutils_nop.c -new file mode 100644 -index 000000000..412a4c2cb ---- /dev/null -+++ b/none/tests/x86/gnu_binutils_nop.c -@@ -0,0 +1,34 @@ -+int main(void) -+{ -+ // GNU binutils uses various opcodes as alternatives for nop -+ // the idea is that it is faster to execute one large opcode -+ // with no side-effects than multiple repetitions of the -+ // single byte 'nop'. This gives more choice when code -+ // needs to be padded. -+ -+ // the following is based on -+ // https://sourceware.org/cgit/binutils-gdb/tree/gas/config/tc-i386.c#n1256 -+ -+ // one byte -+ __asm__ __volatile__("nop"); -+ // two bytes -+ __asm__ __volatile__("xchg %ax,%ax"); -+ // three bytes -+ //__asm__ __volatile__("leal 0(%esi),%esi"); -+ __asm__ __volatile__(".byte 0x8d,0x76,0x00"); -+ // four bytes -+ //__asm__ __volatile__("leal 0(%esi,%eiz),%esi"); -+ __asm__ __volatile__(".byte 0x8d,0x74,0x26,0x00"); -+ // five bytes -+ //__asm__ __volatile__("leal %cs:0(%esi,%eiz),%esi"); -+ __asm__ __volatile__(".byte 0x2e,0x8d,0x74,0x26,0x00"); -+ // six bytes -+ //__asm__ __volatile__("leal 0L(%esi),%esi"); -+ __asm__ __volatile__(".byte 0x8d,0xb6,0x00,0x00,0x00,0x00"); -+ // seven bytes -+ //__asm__ __volatile__("leal 0L(%esi,%eiz),%esi"); -+ __asm__ __volatile__(".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00"); -+ // eight bytes -+ //__asm__ __volatile__("leal %cs:0L(%esi,%eiz),%esi"); -+ __asm__ __volatile__(".byte 0x2e,0x8d,0xb4,0x26,0x00,0x00,0x00,0x00"); -+} -diff --git a/none/tests/x86/gnu_binutils_nop.stderr.exp b/none/tests/x86/gnu_binutils_nop.stderr.exp -new file mode 100644 -index 000000000..e69de29bb -diff --git a/none/tests/x86/gnu_binutils_nop.vgtest b/none/tests/x86/gnu_binutils_nop.vgtest -new file mode 100644 -index 000000000..7f378dd53 ---- /dev/null -+++ b/none/tests/x86/gnu_binutils_nop.vgtest -@@ -0,0 +1,2 @@ -+prog: gnu_binutils_nop -+vgopts: -q --- -2.43.0 - diff --git a/valgrind.spec b/valgrind.spec index 766d77f..f264430 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -2,8 +2,8 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind -Version: 3.22.0 -Release: 8%{?dist} +Version: 3.23.0 +Release: 0.1.RC1%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -71,7 +71,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -85,47 +85,6 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch -# valgrind-monitor.py regular expressions should use raw strings -# https://bugs.kde.org/show_bug.cgi?id=476708 -Patch5: valgrind-3.22.0-valgrind-monitor-python-re.patch - -# valgrind 3.22.0 fails on assertion when loading debuginfo -# https://bugs.kde.org/show_bug.cgi?id=476548 -Patch6: valgrind-3.22.0-rodata.patch - -# Add fchmodat2 syscall on linux -# https://bugs.kde.org/show_bug.cgi?id=477198 -Patch7: valgrind-3.22.0-fchmodat2.patch - -# Valgrind incompatibility with binutils-2.42 on x86 with new nop patterns -# (unhandled instruction bytes: 0x2E 0x8D 0xB4 0x26) -# https://bugs.kde.org/show_bug.cgi?id=478624 -Patch8: valgrind-3.22.0-x86-nop.patch - -# Handle gcc __builtin_strcmp using 128/256 bit vectors with sse4.1, avx/avx2 -# https://bugzilla.redhat.com/show_bug.cgi?id=2257546 -Patch9: valgrind-3.22.0-gcc-builtin_strcmp-128-256-bit-vector.patch - -# Upstream commit 7aa63de01a3cda2a346f90be16bd29fd7b410c63 -# Testsuite fix gdbserver_tests/filter_gdb.in: delete thread exiting -Patch10: valgrind-3.22.0-gdb-thread-exited.patch - -# Upstream commit 5505e7b371f26f9f9588f4aa3a156dfa6856b90a -# Add __set_vma_name suppression to drd/tests/std_thread2.supp -Patch11: valgrind-3.22.0-set_vma_name-supp.patch - -# Upstream commit f47109d30ca319a3bcd4288803e30a473d1506d2 -# Add new helgrind race suppression for pth_mempcpy_false_races -Patch12: valgrind-3.22.0-pth_mempcpy_false_races.patch - -# amd64: Implement VFMADD213 for Iop_MAddF32 and Iop_MAddF64 -# https://bugs.kde.org/show_bug.cgi?id=481127 -Patch13: valgrind-3.22.0-amd64-VFMADD213.patch - -# glibc built with -march=x86-64-v3 does not work due to ld.so strcmp -# https://bugs.kde.org/show_bug.cgi?id=485487 -Patch14: valgrind-3.22.0-amd64-redir-strcmp.patch - BuildRequires: make BuildRequires: glibc-devel @@ -257,23 +216,13 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 %patch -P1 -p1 %patch -P2 -p1 %patch -P3 -p1 %patch -P4 -p1 -%patch -P5 -p1 -%patch -P6 -p1 -%patch -P7 -p1 -%patch -P8 -p1 -%patch -P9 -p1 -%patch -P10 -p1 -%patch -P11 -p1 -%patch -P12 -p1 -%patch -P13 -p1 -%patch -P14 -p1 %build # LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto @@ -490,6 +439,10 @@ echo ===============END TESTING=============== %endif %changelog +* Sat Apr 20 2024 Mark Wielaard - 3.23.0-0.1.RC1 ++- Upstream 3.23.0-RC1 ++- Remove all upstreamed patches + * Sat Apr 13 2024 Mark Wielaard - 3.22.0-8 - Add BuildRequires: python3-devel for running testsuite. - Add valgrind-3.22.0-gdb-thread-exited.patch From 39592cc3ae8303ecbeb355e1dd41ac78b16b9fca Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 25 Apr 2024 01:19:54 +0200 Subject: [PATCH 158/196] 3.23.0-0.1.RC2 - Upstream 3.23.0-RC2 --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 27bdf5b..c5466af 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ /valgrind-3.22.0.RC2.tar.bz2 /valgrind-3.22.0.tar.bz2 /valgrind-3.23.0.RC1.tar.bz2 +/valgrind-3.23.0.RC2.tar.bz2 diff --git a/sources b/sources index b1c83bf..27e9604 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.23.0.RC1.tar.bz2) = 6d9b95ce919ffa1993265c2972b407beb2879b87f84efd61ada4e75f334b332917a726b053c5dbc64b970a55334189c48ccae9231934c9474b65eb6ec1e2c18f +SHA512 (valgrind-3.23.0.RC2.tar.bz2) = 36d20c08442bd00ae560693517d69ab5cc1665b210cb7510e6ab7cfa7ce7a35e0f289fdbedc0b1c682ad2698586e49c8c65e52bbe699eef3aec6b7b1fdb5b961 diff --git a/valgrind.spec b/valgrind.spec index f264430..67acdcc 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.23.0 -Release: 0.1.RC1%{?dist} +Release: 0.1.RC2%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -71,7 +71,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC1.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -216,7 +216,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC1 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 %patch -P1 -p1 %patch -P2 -p1 @@ -439,6 +439,9 @@ echo ===============END TESTING=============== %endif %changelog +* Wed Apr 25 2024 Mark Wielaard - 3.23.0-0.1.RC2 +- Upstream 3.23.0-RC2 + * Sat Apr 20 2024 Mark Wielaard - 3.23.0-0.1.RC1 +- Upstream 3.23.0-RC1 +- Remove all upstreamed patches From 06fc3212101489bb9469bc677bd8786e209ac9f1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 25 Apr 2024 13:48:20 +0200 Subject: [PATCH 159/196] 3.23.0-0.2.RC2 - configure --enable-lto --- valgrind.spec | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/valgrind.spec b/valgrind.spec index 67acdcc..f86136a 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.23.0 -Release: 0.1.RC2%{?dist} +Release: 0.2.RC2%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -225,9 +225,8 @@ Valgrind User Manual for details. %build -# LTO triggers undefined symbols in valgrind. Valgrind has a --enable-lto -# configure time option, but that doesn't seem to help. -# Disable LTO for now. +# LTO triggers undefined symbols in valgrind. But valgrind has a +# --enable-lto configure time option that we will use instead. %define _lto_cflags %{nil} # Some patches (might) touch Makefile.am or configure.ac files. @@ -288,7 +287,8 @@ export LDFLAGS --with-mpicc=%{mpiccpath} \ %{only_arch} \ GDB=%{_bindir}/gdb \ - --with-gdbscripts-dir=%{_datadir}/gdb/auto-load + --with-gdbscripts-dir=%{_datadir}/gdb/auto-load \ + --enable-lto %make_build @@ -439,7 +439,10 @@ echo ===============END TESTING=============== %endif %changelog -* Wed Apr 25 2024 Mark Wielaard - 3.23.0-0.1.RC2 +* Thu Apr 25 2024 Mark Wielaard - 3.23.0-0.2.RC2 +- configure --enable-lto + +* Wed Apr 24 2024 Mark Wielaard - 3.23.0-0.1.RC2 - Upstream 3.23.0-RC2 * Sat Apr 20 2024 Mark Wielaard - 3.23.0-0.1.RC1 From 133f5f27a5f72438a9bf548cbe03dd0701b9e4df Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 27 Apr 2024 00:42:17 +0200 Subject: [PATCH 160/196] 3.23.0-1 - Upstream 3.23.0 final --- .gitignore | 1 + sources | 2 +- valgrind.spec | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index c5466af..cf1eb9f 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ /valgrind-3.22.0.tar.bz2 /valgrind-3.23.0.RC1.tar.bz2 /valgrind-3.23.0.RC2.tar.bz2 +/valgrind-3.23.0.tar.bz2 diff --git a/sources b/sources index 27e9604..11b4f21 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (valgrind-3.23.0.RC2.tar.bz2) = 36d20c08442bd00ae560693517d69ab5cc1665b210cb7510e6ab7cfa7ce7a35e0f289fdbedc0b1c682ad2698586e49c8c65e52bbe699eef3aec6b7b1fdb5b961 +SHA512 (valgrind-3.23.0.tar.bz2) = 27d038faaaf6154cace2df18c3573291393548ba0738dbb6aba58eab6324c5beaa95fc5f3c0271663ca071baf829b15d806f7e81074f7cf087bef20ea0ed3117 diff --git a/valgrind.spec b/valgrind.spec index f86136a..58f7dcf 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.23.0 -Release: 0.2.RC2%{?dist} +Release: 1%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -71,7 +71,7 @@ URL: https://www.valgrind.org/ # So those will already have their full symbol table. %undefine _include_minidebuginfo -Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.RC2.tar.bz2 +Source0: https://sourceware.org/pub/valgrind/valgrind-%{version}.tar.bz2 # Needs investigation and pushing upstream Patch1: valgrind-3.9.0-cachegrind-improvements.patch @@ -216,7 +216,7 @@ Valgrind User Manual for details. %endif %prep -%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version}.RC2 +%setup -q -n %{?scl:%{pkg_name}}%{!?scl:%{name}}-%{version} %patch -P1 -p1 %patch -P2 -p1 @@ -439,6 +439,9 @@ echo ===============END TESTING=============== %endif %changelog +* Fri Apr 26 2024 Mark Wielaard - 3.23.0-1 +- Upstream 3.23.0 final + * Thu Apr 25 2024 Mark Wielaard - 3.23.0-0.2.RC2 - configure --enable-lto From 15d202a6456e4c731389312a878bc913d1654f8d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 10 Jun 2024 00:47:11 +0200 Subject: [PATCH 161/196] 3.23.0-2 - Add upstream VALGRIND_3_23_BRANCH patches --- 0001-Prepare-NEWS-for-branch-3.23-fixes.patch | 31 ++ ...uestArchState-has-no-member-named-gu.patch | 83 ++++++ 0003-Bug-486293-memccpy-false-positives.patch | 96 ++++++ ...-inotify_init-syscall-wrapper-missin.patch | 138 +++++++++ ...rinta-and-frinta-vector-instructions.patch | 282 ++++++++++++++++++ ...ng-shared-syscall-numbers-for-mips32.patch | 169 +++++++++++ ...ninitialized-err-in-handle_extension.patch | 45 +++ ...st_IP_AT_SYSCALL-in-handle_extension.patch | 31 ++ ...90x-Minor-fixes-in-extension-s390x.c.patch | 66 ++++ ...4-gbserver_tests-failures-in-aarch64.patch | 38 +++ ...-regtest-reallocarray-needs-malloc.h.patch | 56 ++++ valgrind.spec | 29 +- 12 files changed, 1063 insertions(+), 1 deletion(-) create mode 100644 0001-Prepare-NEWS-for-branch-3.23-fixes.patch create mode 100644 0002-486180-MIPS-VexGuestArchState-has-no-member-named-gu.patch create mode 100644 0003-Bug-486293-memccpy-false-positives.patch create mode 100644 0004-Bug-486569-linux-inotify_init-syscall-wrapper-missin.patch create mode 100644 0005-aarch64-frinta-and-frinta-vector-instructions.patch create mode 100644 0006-mips-skip-using-shared-syscall-numbers-for-mips32.patch create mode 100644 0007-Fix-uninitialized-err-in-handle_extension.patch create mode 100644 0008-Avoid-use-of-guest_IP_AT_SYSCALL-in-handle_extension.patch create mode 100644 0009-s390x-Minor-fixes-in-extension-s390x.c.patch create mode 100644 0010-Bug-453044-gbserver_tests-failures-in-aarch64.patch create mode 100644 0011-Linux-regtest-reallocarray-needs-malloc.h.patch diff --git a/0001-Prepare-NEWS-for-branch-3.23-fixes.patch b/0001-Prepare-NEWS-for-branch-3.23-fixes.patch new file mode 100644 index 0000000..327fb04 --- /dev/null +++ b/0001-Prepare-NEWS-for-branch-3.23-fixes.patch @@ -0,0 +1,31 @@ +From 2afcd730a10d61c318289bc4c39c42eebd4b35a6 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Mon, 29 Apr 2024 15:15:46 +0200 +Subject: [PATCH 01/11] Prepare NEWS for branch 3.23 fixes + +--- + NEWS | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/NEWS b/NEWS +index 11c67410fb6f..8bdd3753f7bb 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,3 +1,14 @@ ++Branch 3.23 ++~~~~~~~~~~~ ++ ++* ==================== FIXED BUGS ==================== ++ ++The following bugs have been fixed or resolved on this branch. ++ ++To see details of a given bug, visit ++ https://bugs.kde.org/show_bug.cgi?id=XXXXXX ++where XXXXXX is the bug number as listed above. ++ + Release 3.23.0 (26 Apr 2024) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +-- +2.45.2 + diff --git a/0002-486180-MIPS-VexGuestArchState-has-no-member-named-gu.patch b/0002-486180-MIPS-VexGuestArchState-has-no-member-named-gu.patch new file mode 100644 index 0000000..b8ab417 --- /dev/null +++ b/0002-486180-MIPS-VexGuestArchState-has-no-member-named-gu.patch @@ -0,0 +1,83 @@ +From 2e26af756d69c53026bf2d6d61589f754796340d Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Sat, 27 Apr 2024 13:07:07 +0200 +Subject: [PATCH 02/11] 486180 [MIPS] 'VexGuestArchState' has no member named + 'guest_IP_AT_SYSCALL' + +(cherry picked from commit 7214886886bce9029f325214156c02dcfff760d5) +--- + NEWS | 2 ++ + VEX/priv/guest_mips_helpers.c | 4 ++++ + VEX/pub/libvex_guest_mips32.h | 6 +++--- + VEX/pub/libvex_guest_mips64.h | 2 ++ + 4 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/NEWS b/NEWS +index 8bdd3753f7bb..c40e00cce46b 100644 +--- a/NEWS ++++ b/NEWS +@@ -5,6 +5,8 @@ Branch 3.23 + + The following bugs have been fixed or resolved on this branch. + ++486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' ++ + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX + where XXXXXX is the bug number as listed above. +diff --git a/VEX/priv/guest_mips_helpers.c b/VEX/priv/guest_mips_helpers.c +index 74cfb9c34caa..79197378cc74 100644 +--- a/VEX/priv/guest_mips_helpers.c ++++ b/VEX/priv/guest_mips_helpers.c +@@ -187,6 +187,8 @@ void LibVEX_GuestMIPS32_initialise( /*OUT*/ VexGuestMIPS32State * vex_state) + vex_state->guest_w1.w64[1] = 0; + vex_state->guest_w2.w64[0] = 0; + vex_state->guest_w2.w64[1] = 0; ++ ++ vex_state->guest_IP_AT_SYSCALL = 0; + } + + void LibVEX_GuestMIPS64_initialise ( /*OUT*/ VexGuestMIPS64State * vex_state ) +@@ -294,6 +296,8 @@ void LibVEX_GuestMIPS64_initialise ( /*OUT*/ VexGuestMIPS64State * vex_state ) + vex_state->guest_LLaddr = 0xFFFFFFFFFFFFFFFFULL; + vex_state->guest_LLdata = 0; + ++ vex_state->guest_IP_AT_SYSCALL = 0; ++ + vex_state->guest_MSACSR = 0; + } + +diff --git a/VEX/pub/libvex_guest_mips32.h b/VEX/pub/libvex_guest_mips32.h +index 214f63cdbe8c..e769819d75ae 100644 +--- a/VEX/pub/libvex_guest_mips32.h ++++ b/VEX/pub/libvex_guest_mips32.h +@@ -188,10 +188,10 @@ typedef + + /* 1016 */ UInt guest_MSACSR; + +- /* 1020 */ UInt _padding3; ++ /* 1020 */ UInt guest_IP_AT_SYSCALL; + +- /* 1020 */ ULong guest_LLdata64; +- /* 1028 */ ULong _padding4; ++ /* 1024 */ ULong guest_LLdata64; ++ /* 1032 */ ULong _padding3; + } VexGuestMIPS32State; + /*---------------------------------------------------------------*/ + /*--- Utility functions for MIPS32 guest stuff. ---*/ +diff --git a/VEX/pub/libvex_guest_mips64.h b/VEX/pub/libvex_guest_mips64.h +index 657fe6fa3343..a953f0ab86a2 100644 +--- a/VEX/pub/libvex_guest_mips64.h ++++ b/VEX/pub/libvex_guest_mips64.h +@@ -184,6 +184,8 @@ typedef + /* 1144 */ UInt guest_MSACSR; + + /* 1148 */ UInt _padding2; ++ /* 1152 */ ULong guest_IP_AT_SYSCALL; ++ /* 1160 */ ULong _padding3; + + } VexGuestMIPS64State; + +-- +2.45.2 + diff --git a/0003-Bug-486293-memccpy-false-positives.patch b/0003-Bug-486293-memccpy-false-positives.patch new file mode 100644 index 0000000..10c7d5e --- /dev/null +++ b/0003-Bug-486293-memccpy-false-positives.patch @@ -0,0 +1,96 @@ +From 14141bb4a6ea528b4c0b9295aa64348f7a675735 Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Wed, 1 May 2024 09:24:14 +0200 +Subject: [PATCH 03/11] Bug 486293 - memccpy false positives + +(cherry picked from commit 805c020c6e5161966e6eb0099ebe937a510cea9e) +--- + NEWS | 1 + + memcheck/tests/memccpy2.c | 20 ++++++++++++++++++++ + memcheck/tests/memccpy2.stderr.exp | 4 ++-- + shared/vg_replace_strmem.c | 4 ++-- + 4 files changed, 25 insertions(+), 4 deletions(-) + +diff --git a/NEWS b/NEWS +index c40e00cce46b..f674191a286a 100644 +--- a/NEWS ++++ b/NEWS +@@ -6,6 +6,7 @@ Branch 3.23 + The following bugs have been fixed or resolved on this branch. + + 486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' ++486293 memccpy false positives + + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +diff --git a/memcheck/tests/memccpy2.c b/memcheck/tests/memccpy2.c +index a5a1dfc9f0af..947324581715 100644 +--- a/memcheck/tests/memccpy2.c ++++ b/memcheck/tests/memccpy2.c +@@ -1,6 +1,8 @@ + #include + #include + #include ++#include ++#include + + int main(void) + { +@@ -9,5 +11,23 @@ int main(void) + memccpy(astring+10, astring, '#', len-10); + sprintf(astring, "this is a string # with something to seek"); + memccpy(astring, astring+10, '#', len); ++ ++ sprintf(astring, "this is a string # with something to seek"); ++ /* ++ * space is earlier than len, no overlap ++ * "this " gets copied (up to and including the first ' ') ++ * and it overwrites the destination starting with the 's' of "string" ++ * so res will point to the 'g' of "string" ++ */ ++ char* res = memccpy(astring+10, astring, ' ', len-10); ++ assert(res && *res == 'g'); ++ sprintf(astring, "this is a string # with something to seek"); ++ /* length is 0, nothing copied, returns NULL */ ++ res = memccpy(astring, "abcdefhhijklmnopqrstuvwxy", 'z', 0); ++ assert(NULL == res); ++ /* 'z' not found so 20 bytes copied, returns NULL */ ++ res = memccpy(astring, "abcdefhhijklmnopqrstuvwxy", 'z', 20); ++ assert(NULL == res); ++ free(astring); + } + +diff --git a/memcheck/tests/memccpy2.stderr.exp b/memcheck/tests/memccpy2.stderr.exp +index 0132ef06c56a..240ce925c182 100644 +--- a/memcheck/tests/memccpy2.stderr.exp ++++ b/memcheck/tests/memccpy2.stderr.exp +@@ -1,8 +1,8 @@ + Source and destination overlap in memccpy(0x........, 0x........, 31) + at 0x........: memccpy (vg_replace_strmem.c:...) +- by 0x........: main (memccpy2.c:9) ++ by 0x........: main (memccpy2.c:11) + + Source and destination overlap in memccpy(0x........, 0x........, 41) + at 0x........: memccpy (vg_replace_strmem.c:...) +- by 0x........: main (memccpy2.c:11) ++ by 0x........: main (memccpy2.c:13) + +diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c +index 737abbf67898..ae13a2a5f87a 100644 +--- a/shared/vg_replace_strmem.c ++++ b/shared/vg_replace_strmem.c +@@ -2364,9 +2364,9 @@ static inline void my_exit ( int x ) + \ + while (i-- > 0) \ + if ((*d++ = *s++) == x) { \ +- SizeT srclen = (i < len) ? i : len; \ ++ SizeT srclen = len - i; \ + RECORD_COPY(srclen); \ +- if (is_overlap(dst, src, srclen, srclen)) \ ++ if (is_overlap(dst, src, len, srclen)) \ + RECORD_OVERLAP_ERROR("memccpy", dst, src, len); \ + return d; \ + } \ +-- +2.45.2 + diff --git a/0004-Bug-486569-linux-inotify_init-syscall-wrapper-missin.patch b/0004-Bug-486569-linux-inotify_init-syscall-wrapper-missin.patch new file mode 100644 index 0000000..0b34908 --- /dev/null +++ b/0004-Bug-486569-linux-inotify_init-syscall-wrapper-missin.patch @@ -0,0 +1,138 @@ +From 3795a011eeb9730cda9f0beadce70aab8aa71e68 Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Sat, 4 May 2024 15:03:11 +0200 +Subject: [PATCH 04/11] Bug 486569 - linux inotify_init syscall wrapper missing + POST entry in syscall_table + +(cherry picked from commit b38115cc6087f30f872c533f93c7c31a6d73eb24) +--- + NEWS | 1 + + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 +- + coregrind/m_syswrap/syswrap-arm-linux.c | 2 +- + coregrind/m_syswrap/syswrap-mips32-linux.c | 2 +- + coregrind/m_syswrap/syswrap-mips64-linux.c | 2 +- + coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 +- + coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 +- + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 +- + coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- + 9 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/NEWS b/NEWS +index f674191a286a..b65f9206679b 100644 +--- a/NEWS ++++ b/NEWS +@@ -7,6 +7,7 @@ The following bugs have been fixed or resolved on this branch. + + 486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' + 486293 memccpy false positives ++486569 linux inotify_init syscall wrapper missing POST entry in syscall_table + + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c +index a59e01826ca2..86a47d9c2811 100644 +--- a/coregrind/m_syswrap/syswrap-amd64-linux.c ++++ b/coregrind/m_syswrap/syswrap-amd64-linux.c +@@ -773,7 +773,7 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_keyctl, sys_keyctl), // 250 + LINX_(__NR_ioprio_set, sys_ioprio_set), // 251 + LINX_(__NR_ioprio_get, sys_ioprio_get), // 252 +- LINX_(__NR_inotify_init, sys_inotify_init), // 253 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 253 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 254 + + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 255 +diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c +index 217b1c49dc9d..7b536e52cb2e 100644 +--- a/coregrind/m_syswrap/syswrap-arm-linux.c ++++ b/coregrind/m_syswrap/syswrap-arm-linux.c +@@ -922,7 +922,7 @@ static SyscallTableEntry syscall_main_table[] = { + // LINX_(__NR_ioprio_set, sys_ioprio_set), // 289 + + // LINX_(__NR_ioprio_get, sys_ioprio_get), // 290 +- LINX_(__NR_inotify_init, sys_inotify_init), // 291 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 291 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 292 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 293 + // LINX_(__NR_migrate_pages, sys_migrate_pages), // 294 +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index 3f991da0a18d..e2f499eb80f8 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1037,7 +1037,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINXY (__NR_mq_timedreceive, sys_mq_timedreceive), // 274 + LINX_ (__NR_mq_notify, sys_mq_notify), // 275 + LINXY (__NR_mq_getsetattr, sys_mq_getsetattr), // 276 +- LINX_ (__NR_inotify_init, sys_inotify_init), // 275 ++ LINXY (__NR_inotify_init, sys_inotify_init), // 275 + LINX_ (__NR_inotify_add_watch, sys_inotify_add_watch), // 276 + LINX_ (__NR_inotify_rm_watch, sys_inotify_rm_watch), // 277 + LINXY (__NR_waitid, sys_waitid), // 278 +diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c +index 9899a21cfa78..24f2bcc93956 100644 +--- a/coregrind/m_syswrap/syswrap-mips64-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips64-linux.c +@@ -759,7 +759,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_ (__NR_request_key, sys_request_key), + LINXY (__NR_keyctl, sys_keyctl), + PLAX_ (__NR_set_thread_area, sys_set_thread_area), +- LINX_ (__NR_inotify_init, sys_inotify_init), ++ LINXY (__NR_inotify_init, sys_inotify_init), + LINX_ (__NR_inotify_add_watch, sys_inotify_add_watch), + LINX_ (__NR_inotify_rm_watch, sys_inotify_rm_watch), + LINXY (__NR_openat, sys_openat), +diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c +index 0aabfbb179ec..74ba68564cd8 100644 +--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c +@@ -944,7 +944,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_ioprio_set, sys_ioprio_set), // 273 + LINX_(__NR_ioprio_get, sys_ioprio_get), // 274 + +- LINX_(__NR_inotify_init, sys_inotify_init), // 275 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 275 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 276 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 277 + PLAXY(__NR_spu_run, sys_spu_run), // 278 +diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c +index 35e3f8ec4ee4..4609e10df363 100644 +--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c ++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c +@@ -928,7 +928,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_ioprio_set, sys_ioprio_set), // 273 + LINX_(__NR_ioprio_get, sys_ioprio_get), // 274 + +- LINX_(__NR_inotify_init, sys_inotify_init), // 275 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 275 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 276 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 277 + +diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c +index f941bdd1907a..9ed2fa46888f 100644 +--- a/coregrind/m_syswrap/syswrap-s390x-linux.c ++++ b/coregrind/m_syswrap/syswrap-s390x-linux.c +@@ -751,7 +751,7 @@ static SyscallTableEntry syscall_table[] = { + LINXY(__NR_waitid, sys_waitid), // 281 + LINX_(__NR_ioprio_set, sys_ioprio_set), // 282 + LINX_(__NR_ioprio_get, sys_ioprio_get), // 283 +- LINX_(__NR_inotify_init, sys_inotify_init), // 284 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 284 + + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 285 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 286 +diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c +index c6cf682e797c..ea930bafe3ec 100644 +--- a/coregrind/m_syswrap/syswrap-x86-linux.c ++++ b/coregrind/m_syswrap/syswrap-x86-linux.c +@@ -1508,7 +1508,7 @@ static SyscallTableEntry syscall_table[] = { + LINX_(__NR_ioprio_set, sys_ioprio_set), // 289 + + LINX_(__NR_ioprio_get, sys_ioprio_get), // 290 +- LINX_(__NR_inotify_init, sys_inotify_init), // 291 ++ LINXY(__NR_inotify_init, sys_inotify_init), // 291 + LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 292 + LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 293 + // LINX_(__NR_migrate_pages, sys_migrate_pages), // 294 +-- +2.45.2 + diff --git a/0005-aarch64-frinta-and-frinta-vector-instructions.patch b/0005-aarch64-frinta-and-frinta-vector-instructions.patch new file mode 100644 index 0000000..9a9c7d9 --- /dev/null +++ b/0005-aarch64-frinta-and-frinta-vector-instructions.patch @@ -0,0 +1,282 @@ +From f5d1c336e9276dd5947ef94c9831d9d53673b75b Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Thu, 9 May 2024 21:01:52 +0200 +Subject: [PATCH 05/11] aarch64 frinta and frinta vector instructions + +The initial fix for Bug 484426 only corrected frinta and frintn +scalar instructions. This adds support for the vector variants. + +(cherry picked from commit 7b66a5b58219ac1a4865da8e371edbdb8d765f32) +--- + NEWS | 1 + + VEX/priv/guest_arm64_toIR.c | 47 ++++++---- + none/tests/arm64/frinta_frintn.cpp | 141 +++++++++++++++++++++++++++++ + 3 files changed, 171 insertions(+), 18 deletions(-) + +diff --git a/NEWS b/NEWS +index b65f9206679b..adb52169dd87 100644 +--- a/NEWS ++++ b/NEWS +@@ -8,6 +8,7 @@ The following bugs have been fixed or resolved on this branch. + 486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' + 486293 memccpy false positives + 486569 linux inotify_init syscall wrapper missing POST entry in syscall_table ++n-i-bz aarch64 frinta and frinta vector instructions + + To see details of a given bug, visit + https://bugs.kde.org/show_bug.cgi?id=XXXXXX +diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c +index c7e395b4b63d..27d945d6328d 100644 +--- a/VEX/priv/guest_arm64_toIR.c ++++ b/VEX/priv/guest_arm64_toIR.c +@@ -13821,46 +13821,57 @@ Bool dis_AdvSIMD_two_reg_misc(/*MB_OUT*/DisResult* dres, UInt insn) + /* -------- 1,1x,11000 (apparently unassigned) (7) -------- */ + /* -------- 1,1x,11001 FRINTI 2d_2d, 4s_4s, 2s_2s (8) -------- */ + /* rm plan: +- FRINTN: tieeven -- !! FIXME KLUDGED !! ++ FRINTN: tieeven + FRINTM: -inf + FRINTP: +inf + FRINTZ: zero +- FRINTA: tieaway -- !! FIXME KLUDGED !! ++ FRINTA: tieaway + FRINTX: per FPCR + "exact = TRUE" + FRINTI: per FPCR + */ + Bool isD = (size & 1) == 1; + if (bitQ == 0 && isD) return False; // implied 1d case + +- IRTemp irrmRM = mk_get_IR_rounding_mode(); +- +- UChar ch = '?'; +- IRTemp irrm = newTemp(Ity_I32); ++ UChar ch = '?'; ++ IROp op = isD ? Iop_RoundF64toInt : Iop_RoundF32toInt; ++ Bool isBinop = True; ++ IRExpr* irrmE = NULL; + switch (ix) { +- case 1: ch = 'n'; assign(irrm, mkU32(Irrm_NEAREST)); break; +- case 2: ch = 'm'; assign(irrm, mkU32(Irrm_NegINF)); break; +- case 3: ch = 'p'; assign(irrm, mkU32(Irrm_PosINF)); break; +- case 4: ch = 'z'; assign(irrm, mkU32(Irrm_ZERO)); break; ++ case 1: ch = 'n'; isBinop = False; op = isD ? Iop_RoundF64toIntE : Iop_RoundF32toIntE; break; ++ case 2: ch = 'm'; irrmE = mkU32(Irrm_NegINF); break; ++ case 3: ch = 'p'; irrmE = mkU32(Irrm_PosINF); break; ++ case 4: ch = 'z'; irrmE = mkU32(Irrm_ZERO); break; + // The following is a kludge. Should be: Irrm_NEAREST_TIE_AWAY_0 +- case 5: ch = 'a'; assign(irrm, mkU32(Irrm_NEAREST)); break; ++ case 5: ch = 'a'; isBinop = False; op = isD ? Iop_RoundF64toIntA0 : Iop_RoundF32toIntA0; break; + // I am unsure about the following, due to the "integral exact" + // description in the manual. What does it mean? (frintx, that is) +- case 6: ch = 'x'; assign(irrm, mkexpr(irrmRM)); break; +- case 8: ch = 'i'; assign(irrm, mkexpr(irrmRM)); break; ++ case 6: ch = 'x'; irrmE = mkexpr(mk_get_IR_rounding_mode()); break; ++ case 8: ch = 'i'; irrmE = mkexpr(mk_get_IR_rounding_mode()); break; + default: vassert(0); + } + +- IROp opRND = isD ? Iop_RoundF64toInt : Iop_RoundF32toInt; + if (isD) { + for (UInt i = 0; i < 2; i++) { +- putQRegLane(dd, i, binop(opRND, mkexpr(irrm), +- getQRegLane(nn, i, Ity_F64))); ++ if (isBinop) { ++ IRTemp irrm = newTemp(Ity_I32); ++ assign(irrm, irrmE); ++ putQRegLane(dd, i, binop(op, mkexpr(irrm), ++ getQRegLane(nn, i, Ity_F64))); ++ } else { ++ putQRegLane(dd, i, unop(op, getQRegLane(nn, i, Ity_F64))); ++ } + } + } else { + UInt n = bitQ==1 ? 4 : 2; + for (UInt i = 0; i < n; i++) { +- putQRegLane(dd, i, binop(opRND, mkexpr(irrm), +- getQRegLane(nn, i, Ity_F32))); ++ if (isBinop) { ++ IRTemp irrm = newTemp(Ity_I32); ++ assign(irrm, irrmE); ++ putQRegLane(dd, i, binop(op, mkexpr(irrm), ++ getQRegLane(nn, i, Ity_F32))); ++ } else { ++ putQRegLane(dd, i, unop(op, getQRegLane(nn, i, Ity_F32))); ++ } + } + if (bitQ == 0) + putQRegLane(dd, 1, mkU64(0)); // zero out lanes 2 and 3 +diff --git a/none/tests/arm64/frinta_frintn.cpp b/none/tests/arm64/frinta_frintn.cpp +index 8e13761eb966..c0803688f698 100644 +--- a/none/tests/arm64/frinta_frintn.cpp ++++ b/none/tests/arm64/frinta_frintn.cpp +@@ -36,6 +36,55 @@ void test_frinta(T input, T expected) + } + } + ++template ++void test_frinta_fullvec(T* input, T* expected) ++{ ++ T result[2*sizeof(double)/sizeof(T)]; ++ T* rp = result; ++ if constexpr (std::is_same_v == true) ++ { ++ __asm__ __volatile__( ++ "ldr q23, [%1];\n" ++ "frinta v22.2d, v23.2d;\n" ++ "str q22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++ } ++ else ++ { ++ __asm__ __volatile__( ++ "ldr q23, [%1];\n" ++ "frinta v22.4s, v23.4s;\n" ++ "str q22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++ assert(result[2] == expected[2]); ++ assert(result[3] == expected[3]); ++ } ++} ++ ++void test_frinta_halfvec(float* input, float* expected) ++{ ++ float result[2]; ++ float* rp = result; ++ __asm__ __volatile__( ++ "ldr d23, [%1];\n" ++ "frinta v22.2s, v23.2s;\n" ++ "str d22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++} ++ ++ + template + void test_frintn(T input, T expected) + { +@@ -66,6 +115,54 @@ void test_frintn(T input, T expected) + } + } + ++template ++void test_frintn_fullvec(T* input, T* expected) ++{ ++ T result[2*sizeof(double)/sizeof(T)]; ++ T* rp = result; ++ if constexpr (std::is_same_v == true) ++ { ++ __asm__ __volatile__( ++ "ldr q23, [%1];\n" ++ "frintn v22.2d, v23.2d;\n" ++ "str q22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++ } ++ else ++ { ++ __asm__ __volatile__( ++ "ldr q23, [%1];\n" ++ "frintn v22.4s, v23.4s;\n" ++ "str q22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++ assert(result[2] == expected[2]); ++ assert(result[3] == expected[3]); ++ } ++} ++ ++void test_frintn_halfvec(float* input, float* expected) ++{ ++ float result[2]; ++ float* rp = result; ++ __asm__ __volatile__( ++ "ldr d23, [%1];\n" ++ "frintn v22.2s, v23.2s;\n" ++ "str d22, [%0];\n" ++ : "+rm" (rp) ++ : "r" (input) ++ : "memory", "v22", "v23"); ++ assert(result[0] == expected[0]); ++ assert(result[1] == expected[1]); ++} ++ + int main() + { + // round "away from zero" +@@ -78,6 +175,36 @@ int main() + test_frinta(-1.5F, -2.0F); + test_frinta(-2.5F, -3.0F); + ++ double in1[] = {1.5, 1.5}; ++ double out1[] = {2.0, 2,0}; ++ test_frinta_fullvec(in1, out1); ++ double in2[] = {2.5, 2.5}; ++ double out2[] = {3.0, 3,0}; ++ test_frinta_fullvec(in2, out2); ++ double in3[] = {-1.5, -1.5}; ++ double out3[] = {-2.0, -2,0}; ++ test_frinta_fullvec(in3, out3); ++ double in4[] = {-2.5, -2.5}; ++ double out4[] = {-3.0, -3,0}; ++ test_frinta_fullvec(in4, out4); ++ ++ float in1f[] = {1.5F, 1.5F, 1.5F, 1.5F}; ++ float out1f[] = {2.0F, 2.0F, 2.0F, 2.0F}; ++ test_frinta_fullvec(in1f, out1f); ++ test_frinta_halfvec(in1f, out1f); ++ float in2f[] = {2.5F, 2.5F, 2.5F, 2.5F}; ++ float out2f[] = {3.0F, 3.0F, 3.0F, 3.0F}; ++ test_frinta_fullvec(in2f, out2f); ++ test_frinta_halfvec(in2f, out2f); ++ float in3f[] = {-1.5F, -1.5F, -1.5F, -1.5F}; ++ float out3f[] = {-2.0F, -2.0F, -2.0F, -2.0F}; ++ test_frinta_fullvec(in3f, out3f); ++ test_frinta_halfvec(in3f, out3f); ++ float in4f[] = {-2.5F, -2.5F, -2.5F, -2.5F}; ++ float out4f[] = {-3.0F, -3.0F, -3.0F, -3.0F}; ++ test_frinta_fullvec(in4f, out4f); ++ test_frinta_halfvec(in4f, out4f); ++ + // round "to even" + test_frintn(1.5, 2.0); + test_frintn(2.5, 2.0); +@@ -87,5 +214,19 @@ int main() + test_frintn(2.5F, 2.0F); + test_frintn(-1.5F, -2.0F); + test_frintn(-2.5F, -2.0F); ++ ++ test_frintn_fullvec(in1, out1); ++ test_frintn_fullvec(in2, out1); ++ test_frintn_fullvec(in3, out3); ++ test_frintn_fullvec(in4, out3); ++ ++ test_frintn_fullvec(in1f, out1f); ++ test_frintn_halfvec(in1f, out1f); ++ test_frintn_fullvec(in2f, out1f); ++ test_frintn_halfvec(in2f, out1f); ++ test_frintn_fullvec(in3f, out3f); ++ test_frintn_halfvec(in3f, out3f); ++ test_frintn_fullvec(in4f, out3f); ++ test_frintn_halfvec(in4f, out3f); + } + +-- +2.45.2 + diff --git a/0006-mips-skip-using-shared-syscall-numbers-for-mips32.patch b/0006-mips-skip-using-shared-syscall-numbers-for-mips32.patch new file mode 100644 index 0000000..d393c9c --- /dev/null +++ b/0006-mips-skip-using-shared-syscall-numbers-for-mips32.patch @@ -0,0 +1,169 @@ +From 726f930355ca74b4aa4c656979224c9b7a706244 Mon Sep 17 00:00:00 2001 +From: Aleksandar Rikalo +Date: Fri, 10 May 2024 17:59:28 +0200 +Subject: [PATCH 06/11] mips: skip using shared syscall numbers for mips32 + +mips does not use shared syscall numbers, so we can not use +vki-scnums-shared-linux.h. + +This partially fixes KDE #444781. + +Signed-off-by: Hauke Mehrtens +Signed-off-by: Aleksandar Rikalo +(cherry picked from commit 54d6ad3348fb50f5b972fe9c05d0d8757bfe73ba) +--- + coregrind/m_syswrap/syswrap-mips32-linux.c | 1 + + include/pub_tool_vkiscnums_asm.h | 2 - + include/vki/vki-scnums-mips32-linux.h | 105 ++++++++++++++++----- + 3 files changed, 83 insertions(+), 25 deletions(-) + +diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c +index e2f499eb80f8..e3498cd96f9b 100644 +--- a/coregrind/m_syswrap/syswrap-mips32-linux.c ++++ b/coregrind/m_syswrap/syswrap-mips32-linux.c +@@ -1110,6 +1110,7 @@ static SyscallTableEntry syscall_main_table[] = { + LINX_ (__NR_pwritev2, sys_pwritev2), // 362 + //.. + LINXY(__NR_statx, sys_statx), // 366 ++ GENX_(__NR_rseq, sys_ni_syscall), // 367 + + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 + LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 +diff --git a/include/pub_tool_vkiscnums_asm.h b/include/pub_tool_vkiscnums_asm.h +index 8a26f834a93e..d3d7dc19be9d 100644 +--- a/include/pub_tool_vkiscnums_asm.h ++++ b/include/pub_tool_vkiscnums_asm.h +@@ -63,8 +63,6 @@ + # include "vki/vki-scnums-arm64-linux.h" + + #elif defined(VGP_mips32_linux) +-# include "vki/vki-scnums-shared-linux.h" +-# include "vki/vki-scnums-32bit-linux.h" + # include "vki/vki-scnums-mips32-linux.h" + + #elif defined(VGP_nanomips_linux) +diff --git a/include/vki/vki-scnums-mips32-linux.h b/include/vki/vki-scnums-mips32-linux.h +index e452a2e6c8d0..d4f8de15aac7 100644 +--- a/include/vki/vki-scnums-mips32-linux.h ++++ b/include/vki/vki-scnums-mips32-linux.h +@@ -380,35 +380,94 @@ + #define __NR_setns (__NR_Linux + 343) + #define __NR_process_vm_readv (__NR_Linux + 345) + #define __NR_process_vm_writev (__NR_Linux + 346) +-#define __NR_kcmp (__NR_Linux + 347) +-#define __NR_finit_module (__NR_Linux + 348) +-#define __NR_sched_setattr (__NR_Linux + 349) +-#define __NR_sched_getattr (__NR_Linux + 350) +-#define __NR_renameat2 (__NR_Linux + 351) +-#define __NR_seccomp (__NR_Linux + 352) +-#define __NR_getrandom (__NR_Linux + 353) +-#define __NR_memfd_create (__NR_Linux + 354) +-#define __NR_bpf (__NR_Linux + 355) +-#define __NR_execveat (__NR_Linux + 356) +-#define __NR_userfaultfd (__NR_Linux + 357) +-#define __NR_membarrier (__NR_Linux + 358) +-#define __NR_mlock2 (__NR_Linux + 359) +-#define __NR_copy_file_range (__NR_Linux + 360) +-#define __NR_preadv2 (__NR_Linux + 361) +-#define __NR_pwritev2 (__NR_Linux + 362) +-#define __NR_pkey_mprotect (__NR_Linux + 363) +-#define __NR_pkey_alloc (__NR_Linux + 364) +-#define __NR_pkey_free (__NR_Linux + 365) +-#define __NR_statx (__NR_Linux + 366) +- ++#define __NR_kcmp (__NR_Linux + 347) ++#define __NR_finit_module (__NR_Linux + 348) ++#define __NR_sched_setattr (__NR_Linux + 349) ++#define __NR_sched_getattr (__NR_Linux + 350) ++#define __NR_renameat2 (__NR_Linux + 351) ++#define __NR_seccomp (__NR_Linux + 352) ++#define __NR_getrandom (__NR_Linux + 353) ++#define __NR_memfd_create (__NR_Linux + 354) ++#define __NR_bpf (__NR_Linux + 355) ++#define __NR_execveat (__NR_Linux + 356) ++#define __NR_userfaultfd (__NR_Linux + 357) ++#define __NR_membarrier (__NR_Linux + 358) ++#define __NR_mlock2 (__NR_Linux + 359) ++#define __NR_copy_file_range (__NR_Linux + 360) ++#define __NR_preadv2 (__NR_Linux + 361) ++#define __NR_pwritev2 (__NR_Linux + 362) ++#define __NR_pkey_mprotect (__NR_Linux + 363) ++#define __NR_pkey_alloc (__NR_Linux + 364) ++#define __NR_pkey_free (__NR_Linux + 365) ++#define __NR_statx (__NR_Linux + 366) ++#define __NR_rseq (__NR_Linux + 367) ++#define __NR_io_pgetevents (__NR_Linux + 368) ++#define __NR_semget (__NR_Linux + 393) ++#define __NR_semctl (__NR_Linux + 394) ++#define __NR_shmget (__NR_Linux + 395) ++#define __NR_shmctl (__NR_Linux + 396) ++#define __NR_shmat (__NR_Linux + 397) ++#define __NR_shmdt (__NR_Linux + 398) ++#define __NR_msgget (__NR_Linux + 399) ++#define __NR_msgsnd (__NR_Linux + 400) ++#define __NR_msgrcv (__NR_Linux + 401) ++#define __NR_msgctl (__NR_Linux + 402) ++#define __NR_clock_gettime64 (__NR_Linux + 403) ++#define __NR_clock_settime64 (__NR_Linux + 404) ++#define __NR_clock_adjtime64 (__NR_Linux + 405) ++#define __NR_clock_getres_time64 (__NR_Linux + 406) ++#define __NR_clock_nanosleep_time64 (__NR_Linux + 407) ++#define __NR_timer_gettime64 (__NR_Linux + 408) ++#define __NR_timer_settime64 (__NR_Linux + 409) ++#define __NR_timerfd_gettime64 (__NR_Linux + 410) ++#define __NR_timerfd_settime64 (__NR_Linux + 411) ++#define __NR_utimensat_time64 (__NR_Linux + 412) ++#define __NR_pselect6_time64 (__NR_Linux + 413) ++#define __NR_ppoll_time64 (__NR_Linux + 414) ++#define __NR_io_pgetevents_time64 (__NR_Linux + 416) ++#define __NR_recvmmsg_time64 (__NR_Linux + 417) ++#define __NR_mq_timedsend_time64 (__NR_Linux + 418) ++#define __NR_mq_timedreceive_time64 (__NR_Linux + 419) ++#define __NR_semtimedop_time64 (__NR_Linux + 420) ++#define __NR_rt_sigtimedwait_time64 (__NR_Linux + 421) ++#define __NR_futex_time64 (__NR_Linux + 422) ++#define __NR_sched_rr_get_interval_time64 (__NR_Linux + 423) ++#define __NR_pidfd_send_signal (__NR_Linux + 424) ++#define __NR_io_uring_setup (__NR_Linux + 425) ++#define __NR_io_uring_enter (__NR_Linux + 426) ++#define __NR_io_uring_register (__NR_Linux + 427) ++#define __NR_open_tree (__NR_Linux + 428) ++#define __NR_move_mount (__NR_Linux + 429) ++#define __NR_fsopen (__NR_Linux + 430) ++#define __NR_fsconfig (__NR_Linux + 431) ++#define __NR_fsmount (__NR_Linux + 432) ++#define __NR_fspick (__NR_Linux + 433) ++#define __NR_pidfd_open (__NR_Linux + 434) ++#define __NR_clone3 (__NR_Linux + 435) ++#define __NR_close_range (__NR_Linux + 436) ++#define __NR_openat2 (__NR_Linux + 437) ++#define __NR_pidfd_getfd (__NR_Linux + 438) ++#define __NR_faccessat2 (__NR_Linux + 439) ++#define __NR_process_madvise (__NR_Linux + 440) ++#define __NR_epoll_pwait2 (__NR_Linux + 441) ++#define __NR_mount_setattr (__NR_Linux + 442) ++#define __NR_quotactl_fd (__NR_Linux + 443) ++#define __NR_landlock_create_ruleset (__NR_Linux + 444) ++#define __NR_landlock_add_rule (__NR_Linux + 445) ++#define __NR_landlock_restrict_self (__NR_Linux + 446) ++#define __NR_process_mrelease (__NR_Linux + 448) ++#define __NR_futex_waitv (__NR_Linux + 449) ++#define __NR_set_mempolicy_home_node (__NR_Linux + 450) ++#define __NR_cachestat (__NR_Linux + 451) ++#define __NR_fchmodat2 (__NR_Linux + 452) + /* + * Offset of the last Linux o32 flavoured syscall + */ +-#define __NR_Linux_syscalls 366 ++#define __NR_Linux_syscalls 366 + + + #define __NR_O32_Linux 4000 +-#define __NR_O32_Linux_syscalls 366 ++#define __NR_O32_Linux_syscalls 366 + + + #endif /* __VKI_SCNUMS_MIPS32_LINUX_H */ +-- +2.45.2 + diff --git a/0007-Fix-uninitialized-err-in-handle_extension.patch b/0007-Fix-uninitialized-err-in-handle_extension.patch new file mode 100644 index 0000000..84efe6f --- /dev/null +++ b/0007-Fix-uninitialized-err-in-handle_extension.patch @@ -0,0 +1,45 @@ +From 468933f9765449c1e353c38e88555a2f1603b9ce Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 15 May 2024 14:32:42 +0200 +Subject: [PATCH 07/11] Fix uninitialized `err' in handle_extension() + +In handle_extension(), in the case of a second return from SCHEDSETJMP the +variable `err' would be used uninitialized. Fix this by avoiding any +access to `err' in this case. + +(cherry picked from commit 94c2e5c6be23c6323f24deacdad5f98fb9f0b1c2) +--- + coregrind/m_scheduler/scheduler.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c +index fc8cf7c9cb1d..29751bb28283 100644 +--- a/coregrind/m_scheduler/scheduler.c ++++ b/coregrind/m_scheduler/scheduler.c +@@ -1233,7 +1233,10 @@ static void handle_extension(ThreadId tid) + SCHEDSETJMP(tid, jumped, err = VG_(client_extension)(tid)); + vg_assert(VG_(is_running_thread)(tid)); + +- if (err != ExtErr_OK) { ++ if (jumped != (UWord)0) { ++ block_signals(); ++ VG_(poll_signals)(tid); ++ } else if (err != ExtErr_OK) { + ThreadState* tst = VG_(get_ThreadState)(tid); + Addr addr = tst->arch.vex.guest_IP_AT_SYSCALL; + switch (err) { +@@ -1244,11 +1247,6 @@ static void handle_extension(ThreadId tid) + VG_(core_panic)("scheduler: bad return code from extension"); + } + } +- +- if (jumped != (UWord)0) { +- block_signals(); +- VG_(poll_signals)(tid); +- } + } + + /* tid just requested a jump to the noredir version of its current +-- +2.45.2 + diff --git a/0008-Avoid-use-of-guest_IP_AT_SYSCALL-in-handle_extension.patch b/0008-Avoid-use-of-guest_IP_AT_SYSCALL-in-handle_extension.patch new file mode 100644 index 0000000..8e5f4ae --- /dev/null +++ b/0008-Avoid-use-of-guest_IP_AT_SYSCALL-in-handle_extension.patch @@ -0,0 +1,31 @@ +From 40b68ae8d6c869f098493e3a31d66f09170592e3 Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 15 May 2024 14:32:42 +0200 +Subject: [PATCH 08/11] Avoid use of guest_IP_AT_SYSCALL in handle_extension() + +The guest state field guest_IP_AT_SYSCALL is referenced in +handle_extension(), even though it may not be defined by all +architectures. Avoid its use altogether. + +(cherry picked from commit 16249b21456d681b5d98400287b8dbd926050c75) +--- + coregrind/m_scheduler/scheduler.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c +index 29751bb28283..cc8d070b7930 100644 +--- a/coregrind/m_scheduler/scheduler.c ++++ b/coregrind/m_scheduler/scheduler.c +@@ -1237,8 +1237,7 @@ static void handle_extension(ThreadId tid) + block_signals(); + VG_(poll_signals)(tid); + } else if (err != ExtErr_OK) { +- ThreadState* tst = VG_(get_ThreadState)(tid); +- Addr addr = tst->arch.vex.guest_IP_AT_SYSCALL; ++ Addr addr = VG_(get_IP)(tid); + switch (err) { + case ExtErr_Illop: + VG_(synth_sigill)(tid, addr); +-- +2.45.2 + diff --git a/0009-s390x-Minor-fixes-in-extension-s390x.c.patch b/0009-s390x-Minor-fixes-in-extension-s390x.c.patch new file mode 100644 index 0000000..3bb1df0 --- /dev/null +++ b/0009-s390x-Minor-fixes-in-extension-s390x.c.patch @@ -0,0 +1,66 @@ +From ebe5fd9c0aae97767a4418d2f26f3281065b3e6a Mon Sep 17 00:00:00 2001 +From: Andreas Arnez +Date: Wed, 15 May 2024 14:32:42 +0200 +Subject: [PATCH 09/11] s390x: Minor fixes in extension-s390x.c + +Some tracker names for registers are not consistent with the naming +scheme. Also, there is a dead assignment to orig_addr2 and orig_len2. +Fix both. + +(cherry picked from commit 76f2218924f85547f670969b1a0b59e5200e22ec) +--- + coregrind/m_extension/extension-s390x.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/coregrind/m_extension/extension-s390x.c b/coregrind/m_extension/extension-s390x.c +index fd45c7ee948f..735406e6e4c5 100644 +--- a/coregrind/m_extension/extension-s390x.c ++++ b/coregrind/m_extension/extension-s390x.c +@@ -37,9 +37,9 @@ + + #undef SYSNO + +-#define READ_FUNCTION_CODE(tst) \ ++#define READ_FUNCTION_CODE(tst, extname) \ + ({ \ +- PRE_REG_READ(tst, "func_code", r0, 7, sizeof(UChar)); \ ++ PRE_REG_READ(tst, extname "(func_code)", r0, 7, sizeof(UChar)); \ + tst->arch.vex.guest_r0 & 0xff; \ + }) + +@@ -141,10 +141,10 @@ static enum ExtensionError do_extension_PRNO(ThreadState* tst, ULong variant) + { + UChar r1 = variant & 0xf; + UChar r2 = (variant >> 4) & 0xf; +- UChar func = READ_FUNCTION_CODE(tst); ++ UChar func = READ_FUNCTION_CODE(tst, "PRNO"); + UChar fc = func & 0x7f; + UChar mflag = func & 128; +- ULong parms = READ_GPR(tst, "r1", 1); ++ ULong parms = READ_GPR(tst, "PRNO(r1)", 1); + ULong parms_len; + Int cc = 0; + ULong orig_addr1 = 0, orig_len1 = 0, orig_addr2 = 0, orig_len2 = 0; +@@ -175,8 +175,8 @@ static enum ExtensionError do_extension_PRNO(ThreadState* tst, ULong variant) + PRE_MEM_WRITE(tst, "PRNO(op1)", addr1, len1); + } else { + // Seed operation +- addr2 = orig_addr2 = READ_GPR(tst, "PRNO(op2_addr)", r2); +- len2 = orig_len2 = READ_GPR(tst, "PRNO(op2_len)", r2 + 1); ++ addr2 = READ_GPR(tst, "PRNO(op2_addr)", r2); ++ len2 = READ_GPR(tst, "PRNO(op2_len)", r2 + 1); + PRE_MEM_READ(tst, "PRNO(op2)", addr2, len2); + } + PRE_MEM_WRITE(tst, "PRNO(parms)", parms, parms_len); +@@ -474,7 +474,7 @@ static enum ExtensionError do_extension_NNPA(ThreadState* tst, ULong variant) + { + ULong gpr0 = READ_GPR(tst, "NNPA(r0)", 0); + UChar fc = gpr0 & 0x7f; +- ULong parms_addr = READ_GPR(tst, "r1", 1); ++ ULong parms_addr = READ_GPR(tst, "NNPA(r1)", 1); + Int cc = 0; + ULong parms_len; + +-- +2.45.2 + diff --git a/0010-Bug-453044-gbserver_tests-failures-in-aarch64.patch b/0010-Bug-453044-gbserver_tests-failures-in-aarch64.patch new file mode 100644 index 0000000..7cc4012 --- /dev/null +++ b/0010-Bug-453044-gbserver_tests-failures-in-aarch64.patch @@ -0,0 +1,38 @@ +From 70d765faa162f2f12e7771db51877649637f2c12 Mon Sep 17 00:00:00 2001 +From: Jesus Checa +Date: Sat, 25 May 2024 12:40:30 +0200 +Subject: [PATCH 10/11] Bug 453044 - gbserver_tests failures in aarch64 + +(cherry picked from commit 790abdf7d3f3df0c968605b68ca765310689b7ce) +--- + NEWS | 1 + + gdbserver_tests/filter_gdb.in | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/NEWS b/NEWS +index adb52169dd87..c2ad6a207d96 100644 +--- a/NEWS ++++ b/NEWS +@@ -5,6 +5,7 @@ Branch 3.23 + + The following bugs have been fixed or resolved on this branch. + ++453044 gbserver_tests failures in aarch64 + 486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' + 486293 memccpy false positives + 486569 linux inotify_init syscall wrapper missing POST entry in syscall_table +diff --git a/gdbserver_tests/filter_gdb.in b/gdbserver_tests/filter_gdb.in +index 4118063f6bc6..497171732b25 100755 +--- a/gdbserver_tests/filter_gdb.in ++++ b/gdbserver_tests/filter_gdb.in +@@ -152,6 +152,7 @@ s/in _select ()/in syscall .../ + /sysv\/linux\/generic\/select.c/d + /return SYSCALL_CANCEL /d + /r = SYSCALL_CANCEL /d ++/result = SYSCALL_CANCEL /d + + # a more specialised system call select stack trace part + # (on 32 bits, we have an int_80, on 64 bits, directly select) +-- +2.45.2 + diff --git a/0011-Linux-regtest-reallocarray-needs-malloc.h.patch b/0011-Linux-regtest-reallocarray-needs-malloc.h.patch new file mode 100644 index 0000000..85f4415 --- /dev/null +++ b/0011-Linux-regtest-reallocarray-needs-malloc.h.patch @@ -0,0 +1,56 @@ +From 1c2cdfd790b3e26f47e709770bdefd456d83a7cb Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Tue, 4 Jun 2024 12:49:33 +0200 +Subject: [PATCH 11/11] Linux regtest: reallocarray needs malloc.h + +Seen on Rocky 8.9 + +(cherry picked from commit a015ad2e0db40076b4841220c7ab6d6853798936) +--- + memcheck/tests/amd64-linux/reallocarray.c | 1 + + memcheck/tests/amd64-linux/reallocarray.stderr.exp | 8 ++++---- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/memcheck/tests/amd64-linux/reallocarray.c b/memcheck/tests/amd64-linux/reallocarray.c +index 8765ca4997cb..ce63b80100da 100644 +--- a/memcheck/tests/amd64-linux/reallocarray.c ++++ b/memcheck/tests/amd64-linux/reallocarray.c +@@ -2,6 +2,7 @@ + #include + #include + #include ++#include + #include "../../memcheck.h" + + int main(void) +diff --git a/memcheck/tests/amd64-linux/reallocarray.stderr.exp b/memcheck/tests/amd64-linux/reallocarray.stderr.exp +index a1c8439cc9ef..20a1c4e8b4f9 100644 +--- a/memcheck/tests/amd64-linux/reallocarray.stderr.exp ++++ b/memcheck/tests/amd64-linux/reallocarray.stderr.exp +@@ -12,19 +12,19 @@ To see them, rerun with: --leak-check=full --show-leak-kinds=all + + realloc() with size 0 + at 0x........: reallocarray (vg_replace_malloc.c:...) +- by 0x........: main (reallocarray.c:13) ++ by 0x........: main (reallocarray.c:14) + Address 0x........ is 0 bytes inside a block of size 40 alloc'd + at 0x........: reallocarray (vg_replace_malloc.c:...) +- by 0x........: main (reallocarray.c:11) ++ by 0x........: main (reallocarray.c:12) + + All heap blocks were freed -- no leaks are possible + + realloc() with size 0 + at 0x........: reallocarray (vg_replace_malloc.c:...) +- by 0x........: main (reallocarray.c:16) ++ by 0x........: main (reallocarray.c:17) + Address 0x........ is 0 bytes inside a block of size 10 alloc'd + at 0x........: malloc (vg_replace_malloc.c:...) +- by 0x........: main (reallocarray.c:15) ++ by 0x........: main (reallocarray.c:16) + + All heap blocks were freed -- no leaks are possible + +-- +2.45.2 + diff --git a/valgrind.spec b/valgrind.spec index 58f7dcf..cebb2a1 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -3,7 +3,7 @@ Summary: Dynamic analysis tools to detect memory or thread bugs and profile Name: %{?scl_prefix}valgrind Version: 3.23.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 # This ignores licenses that are only found in the test or perf sources @@ -85,6 +85,19 @@ Patch3: valgrind-3.16.0-some-stack-protector.patch # Add some -Wl,z,now. Patch4: valgrind-3.16.0-some-Wl-z-now.patch +# Patches from upstream VALGRIND_3_23_BRANCH +Patch5: 0001-Prepare-NEWS-for-branch-3.23-fixes.patch +Patch6: 0002-486180-MIPS-VexGuestArchState-has-no-member-named-gu.patch +Patch7: 0003-Bug-486293-memccpy-false-positives.patch +Patch8: 0004-Bug-486569-linux-inotify_init-syscall-wrapper-missin.patch +Patch9: 0005-aarch64-frinta-and-frinta-vector-instructions.patch +Patch10: 0006-mips-skip-using-shared-syscall-numbers-for-mips32.patch +Patch11: 0007-Fix-uninitialized-err-in-handle_extension.patch +Patch12: 0008-Avoid-use-of-guest_IP_AT_SYSCALL-in-handle_extension.patch +Patch13: 0009-s390x-Minor-fixes-in-extension-s390x.c.patch +Patch14: 0010-Bug-453044-gbserver_tests-failures-in-aarch64.patch +Patch15: 0011-Linux-regtest-reallocarray-needs-malloc.h.patch + BuildRequires: make BuildRequires: glibc-devel @@ -223,6 +236,17 @@ Valgrind User Manual for details. %patch -P3 -p1 %patch -P4 -p1 +%patch -P5 -p1 +%patch -P6 -p1 +%patch -P7 -p1 +%patch -P8 -p1 +%patch -P9 -p1 +%patch -P10 -p1 +%patch -P11 -p1 +%patch -P12 -p1 +%patch -P13 -p1 +%patch -P14 -p1 +%patch -P15 -p1 %build # LTO triggers undefined symbols in valgrind. But valgrind has a @@ -439,6 +463,9 @@ echo ===============END TESTING=============== %endif %changelog +* Mon Jun 10 2024 Mark Wielaard - 3.23.0-2 +- Add upstream VALGRIND_3_23_BRANCH patches + * Fri Apr 26 2024 Mark Wielaard - 3.23.0-1 - Upstream 3.23.0 final From 34c38e719f761bdd08f11d8e0056acb5f60cbe53 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 23 Jun 2024 22:16:52 +0200 Subject: [PATCH 162/196] 3.23.0-3 - Add more upstream VALGRIND_3_23_BRANCH patches 0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch 0013-Don-t-leave-fds-created-with-log-file-xml-file-or-lo.patch 0014-Close-both-internal-pipe-fds-after-VG_-fork-in-paren.patch 0015-Don-t-allow-programs-calling-fnctl-on-valgrind-s-own.patch --- 0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch | 184 ++++++++++++++ ...created-with-log-file-xml-file-or-lo.patch | 226 ++++++++++++++++++ ...nal-pipe-fds-after-VG_-fork-in-paren.patch | 138 +++++++++++ ...rams-calling-fnctl-on-valgrind-s-own.patch | 58 +++++ valgrind.spec | 17 +- 5 files changed, 622 insertions(+), 1 deletion(-) create mode 100644 0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch create mode 100644 0013-Don-t-leave-fds-created-with-log-file-xml-file-or-lo.patch create mode 100644 0014-Close-both-internal-pipe-fds-after-VG_-fork-in-paren.patch create mode 100644 0015-Don-t-allow-programs-calling-fnctl-on-valgrind-s-own.patch diff --git a/0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch b/0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch new file mode 100644 index 0000000..5254b37 --- /dev/null +++ b/0012-Bug-487439-SIGILL-in-JDK11-JDK17.patch @@ -0,0 +1,184 @@ +From e62c7b4f9ee0a8c20c7211a92ad512f925e9515c Mon Sep 17 00:00:00 2001 +From: Paul Floyd +Date: Sun, 16 Jun 2024 09:25:51 +0200 +Subject: [PATCH 12/15] Bug 487439 - SIGILL in JDK11, JDK17 + +(cherry picked from commit c19d19d34a6dadaf4a9d590f516f813e9cbacdd0) +--- + .gitignore | 1 + + NEWS | 1 + + VEX/priv/guest_amd64_toIR.c | 2 +- + none/tests/amd64/Makefile.am | 3 + + none/tests/amd64/bug487439.cpp | 83 +++++++++++++++++++++++++++ + none/tests/amd64/bug487439.stderr.exp | 0 + none/tests/amd64/bug487439.stdout.exp | 1 + + none/tests/amd64/bug487439.vgtest | 2 + + 8 files changed, 92 insertions(+), 1 deletion(-) + create mode 100644 none/tests/amd64/bug487439.cpp + create mode 100644 none/tests/amd64/bug487439.stderr.exp + create mode 100644 none/tests/amd64/bug487439.stdout.exp + create mode 100644 none/tests/amd64/bug487439.vgtest + +diff --git a/NEWS b/NEWS +index c2ad6a207d96..fbe0f012ef0c 100644 +--- a/NEWS ++++ b/NEWS +@@ -9,6 +9,7 @@ The following bugs have been fixed or resolved on this branch. + 486180 [MIPS] 'VexGuestArchState' has no member named 'guest_IP_AT_SYSCALL' + 486293 memccpy false positives + 486569 linux inotify_init syscall wrapper missing POST entry in syscall_table ++487439 SIGILL in JDK11, JDK17 + n-i-bz aarch64 frinta and frinta vector instructions + + To see details of a given bug, visit +diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c +index f0b1c5516267..28c37f092211 100644 +--- a/VEX/priv/guest_amd64_toIR.c ++++ b/VEX/priv/guest_amd64_toIR.c +@@ -14138,7 +14138,7 @@ Long dis_ESC_0F__SSE2 ( Bool* decode_OK, + goto decode_success; + } + /* 66 0F 73 /6 ib = PSLLQ by immediate */ +- if (have66noF2noF3(pfx) && sz == 2 ++ if (have66noF2noF3(pfx) && (sz == 2 || /* ignore redundant REX.W */ sz == 8) + && epartIsReg(getUChar(delta)) + && gregLO3ofRM(getUChar(delta)) == 6) { + delta = dis_SSE_shiftE_imm( pfx, delta, "psllq", Iop_ShlN64x2 ); +diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am +index dc0498018209..83029c15590c 100644 +--- a/none/tests/amd64/Makefile.am ++++ b/none/tests/amd64/Makefile.am +@@ -44,6 +44,7 @@ EXTRA_DIST = \ + bug156404-amd64.vgtest bug156404-amd64.stdout.exp \ + bug156404-amd64.stderr.exp \ + bug485148.vgtest bug485148.stdout.exp bug485148.stderr.exp \ ++ bug487439.vgtest bug487439.stdout.exp bug487439.stderr.exp \ + cet_nops.vgtest cet_nops.stdout.exp cet_nops.stderr.exp \ + clc.vgtest clc.stdout.exp clc.stderr.exp \ + crc32.vgtest crc32.stdout.exp crc32.stderr.exp \ +@@ -107,6 +108,7 @@ check_PROGRAMS = \ + amd64locked \ + bt_flags \ + bug127521-64 bug132813-amd64 bug132918 bug137714-amd64 \ ++ bug487439 \ + cet_nops \ + clc \ + cmpxchg \ +@@ -204,6 +206,7 @@ amd64locked_CFLAGS = $(AM_CFLAGS) -O + bug132918_LDADD = -lm + bug485148_CXXFLAGS = ${AM_CXXFLAGS} -mfma + bug485148_SOURCES = bug485148.cpp ++bug487439_SOURCES = bug487439.cpp + cmpxchg_CFLAGS = $(AM_CFLAGS) @FLAG_NO_PIE@ + fb_test_amd64_CFLAGS = $(AM_CFLAGS) -O -fno-strict-aliasing + fb_test_amd64_LDADD = -lm +diff --git a/none/tests/amd64/bug487439.cpp b/none/tests/amd64/bug487439.cpp +new file mode 100644 +index 000000000000..f86bb65ce9eb +--- /dev/null ++++ b/none/tests/amd64/bug487439.cpp +@@ -0,0 +1,83 @@ ++// This is more or less a copy/paste from the generated insn_sse2.c ++// I didn't want to mess with the perl generator because ++// GCC and clang don't agree on the asm syntax ++// Using the rex prefix looks like a bug or misfeature in OpenJDK ++// so I'm assuming that this is a one-off and not a general issue ++ ++#include ++#include ++#include ++ ++union reg128_t { ++ char sb[16]; ++ unsigned char ub[16]; ++ short sw[8]; ++ unsigned short uw[8]; ++ int sd[4]; ++ unsigned int ud[4]; ++ long long int sq[2]; ++ unsigned long long int uq[2]; ++ float ps[4]; ++ double pd[2]; ++} __attribute__ ((aligned (16))); ++ ++static sigjmp_buf catchpoint; ++ ++static void handle_sigill(int signum) ++{ ++ siglongjmp(catchpoint, 1); ++} ++ ++/* with redundant rex.W */ ++static void psllq_4(void) ++{ ++ reg128_t arg1 = { .uq = { 0x0123456789abcdefULL, 0x0123456789abcdefULL } }; ++ reg128_t result0; ++ char state[108]; ++ ++ if (sigsetjmp(catchpoint, 1) == 0) ++ { ++ asm( ++ "ffree %%st(7)\n" ++ "ffree %%st(6)\n" ++ "ffree %%st(5)\n" ++ "ffree %%st(4)\n" ++ "movlps %2, %%xmm1\n" ++ "movhps %3, %%xmm1\n" ++ // only GCC ++ //".rex.W psllq $12, %%xmm1\n" ++ // only clang ++ //"data16 rex64 psllq $12, %mm1\n" ++ ".byte 0x66,0x48,0x0f,0x73,0xf1,0x0c\n" ++ "movlps %%xmm1, %0\n" ++ "movhps %%xmm1, %1\n" ++ "cld\n" ++ : "=m" (result0.uq[0]), "=m" (result0.uq[1]) ++ : "m" (arg1.uq[0]), "m" (arg1.uq[1]), "m" (state[0]) ++ : "xmm1" ++ ); ++ ++ if (result0.uq[0] == 0x3456789abcdef000ULL && result0.uq[1] == 0x3456789abcdef000ULL ) ++ { ++ std::cout << "psllq_4 ... ok\n"; ++ } ++ else ++ { ++ std::cout << "psllq_4 ... not ok\n"; ++ std::cout << " result0.uq[0] = " << result0.uq[0] << " (expected " << 0x3456789abcdef000ULL << ")\n"; ++ std::cout << " result0.uq[1] = " << result0.uq[1] << " (expected " << 0x3456789abcdef000ULL << ")\n"; ++ } ++ } ++ else ++ { ++ std::cout << "psllq_4 ... failed\n"; ++ } ++ ++ return; ++} ++ ++int main() ++{ ++ signal(SIGILL, handle_sigill); ++ psllq_4(); ++} +diff --git a/none/tests/amd64/bug487439.stderr.exp b/none/tests/amd64/bug487439.stderr.exp +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/none/tests/amd64/bug487439.stdout.exp b/none/tests/amd64/bug487439.stdout.exp +new file mode 100644 +index 000000000000..065b518a27d7 +--- /dev/null ++++ b/none/tests/amd64/bug487439.stdout.exp +@@ -0,0 +1 @@ ++psllq_4 ... ok +diff --git a/none/tests/amd64/bug487439.vgtest b/none/tests/amd64/bug487439.vgtest +new file mode 100644 +index 000000000000..3faa1ed6b014 +--- /dev/null ++++ b/none/tests/amd64/bug487439.vgtest +@@ -0,0 +1,2 @@ ++prog: bug487439 ++vgopts: -q +-- +2.45.2 + diff --git a/0013-Don-t-leave-fds-created-with-log-file-xml-file-or-lo.patch b/0013-Don-t-leave-fds-created-with-log-file-xml-file-or-lo.patch new file mode 100644 index 0000000..bdabc23 --- /dev/null +++ b/0013-Don-t-leave-fds-created-with-log-file-xml-file-or-lo.patch @@ -0,0 +1,226 @@ +From 14cefe7c645a3148165f4b2fa6095d9446e378c7 Mon Sep 17 00:00:00 2001 +From: Mark Wielaard +Date: Sun, 16 Jun 2024 21:23:08 +0200 +Subject: [PATCH 13/15] Don't leave fds created with --log-file, --xml-file or + --log-socket open +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +prepare_sink_fd and prepare_sink_socket will create a new file +descriptor for the output sink. finalize_sink_fd then copies the fd +to the safe range, so it doesn't conflict with any application fds. + +If we created the original fd ourselves, it was a VgLogTo_File or +VgLogTo_Socket, not VgLogTo_Fd, finalize_sink_fd should close it. + +Also close socket when connecting fails in VG_(connect_via_socket). + +Add a testcase for --log-file and --xml-file which prints output to +/dev/stderr + +https://bugs.kde.org/show_bug.cgi?id=202770 +https://bugs.kde.org/show_bug.cgi?id=311655 +https://bugs.kde.org/show_bug.cgi?id=488379 + +Co-authored-by: Alexandra Hájková fd = safe_fd; ++ /* If we created the new_fd (VgLogTo_File or VgLogTo_Socket), then we ++ don't need the original file descriptor open anymore. We only need ++ to keep it open if it was an existing fd given by the user (or ++ stderr). */ ++ if (sink->type != VgLogTo_Fd) ++ VG_(close)(new_fd); + } + } + +diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am +index 185993f204bb..532cc7632a8f 100644 +--- a/none/tests/Makefile.am ++++ b/none/tests/Makefile.am +@@ -86,6 +86,7 @@ dist_noinst_SCRIPTS = \ + filter_none_discards \ + filter_stderr \ + filter_timestamp \ ++ filter_xml \ + allexec_prepare_prereq + + noinst_HEADERS = fdleak.h +@@ -229,7 +230,9 @@ EXTRA_DIST = \ + sigprocmask.stderr.exp sigprocmask.vgtest \ + socket_close.stderr.exp socket_close.vgtest \ + file_dclose.stderr.exp file_dclose.vgtest \ +- double_close_range.stderr.exp double_close_range.vgtest ++ double_close_range.stderr.exp double_close_range.vgtest \ ++ log-track-fds.stderr.exp log-track-fds.vgtest \ ++ xml-track-fds.stderr.exp xml-track-fds.vgtest + + + check_PROGRAMS = \ +diff --git a/none/tests/filter_xml b/none/tests/filter_xml +new file mode 100755 +index 000000000000..d1ef570a05b0 +--- /dev/null ++++ b/none/tests/filter_xml +@@ -0,0 +1,25 @@ ++#! /bin/sh ++ ++dir=`dirname $0` ++ ++# FreeBSD adds this one extra line ++# but after filter_xml_frames it will just be ...<\/path> ++# which matches other lines, so get rid of it while we can ++# uniquely match it ++sed "/internet<\/path>/d" | ++ ++$dir/../../tests/filter_xml_frames | ++perl -p -e "s/