%reg,%reg' (in various forms) when %reg contains undefined data.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6524
bug132146.vgtest bug132146.stderr.exp bug132146.stdout.exp \
fxsave-amd64.vgtest fxsave-amd64.stdout.exp fxsave-amd64.stderr.exp \
more_x87_fp.stderr.exp more_x87_fp.stdout.exp more_x87_fp.vgtest \
- sse_memory.stderr.exp sse_memory.stdout.exp sse_memory.vgtest
+ sse_memory.stderr.exp sse_memory.stdout.exp sse_memory.vgtest \
+ xor-undef-amd64.stderr.exp xor-undef-amd64.stdout.exp \
+ xor-undef-amd64.vgtest
-check_PROGRAMS = bt_everything bug132146 fxsave-amd64 more_x87_fp sse_memory
+check_PROGRAMS = bt_everything bug132146 fxsave-amd64 \
+ more_x87_fp sse_memory xor-undef-amd64
AM_CPPFLAGS = -I$(top_srcdir)/include
AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow -g -I$(top_srcdir)/include
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#define JZ_NEXT ".byte 0x74,0x00" /* jz the-next-insn */
+
+int main ( void )
+{
+ char* junk = malloc(48);
+ assert(junk);
+
+
+ /* --- INTEGER --- */
+
+ printf("\nComplain int64\n");
+ __asm__ __volatile__(
+ "movq 0(%0), %%rax\n\t"
+ "movq 8(%0), %%r8\n\t"
+ "xorq %%r8, %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "r8", "rax", "cc"
+ );
+
+ printf("\nNo complain int64\n");
+ __asm__ __volatile__(
+ "movq 0(%0), %%rax\n\t"
+ "movq 8(%0), %%r8\n\t"
+ "xorq %%rax, %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "r8", "rax", "cc"
+ );
+
+
+ /* --- MMX --- */
+
+ printf("\nComplain mmx\n");
+ __asm__ __volatile__(
+ "emms\n\t"
+ "movq 0(%0), %%mm0\n\t"
+ "movq 8(%0), %%mm7\n\t"
+ "pxor %%mm7, %%mm0\n\t"
+ "movq %%mm0, 16(%0)\n\t"
+ "cmpq $0,16(%0)\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "mm7", "mm0", "cc", "memory"
+ );
+
+ printf("\nNo complain mmx\n");
+ __asm__ __volatile__(
+ "emms\n\t"
+ "movq 0(%0), %%mm0\n\t"
+ "movq 8(%0), %%mm7\n\t"
+ "pxor %%mm0, %%mm0\n\t"
+ "movq %%mm0, 16(%0)\n\t"
+ "cmpq $0,16(%0)\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "mm7", "mm0", "cc", "memory"
+ );
+
+
+ /* --- SSE1 --- */
+
+ printf("\nComplain sse xorps\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "xorps %%xmm8, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse xorps\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "xorps %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+
+ /* --- SSE2 --- */
+
+ printf("\nComplain sse2 pxor\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "pxor %%xmm8, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse2 pxor\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "pxor %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+
+ printf("\nComplain sse2 xorpd\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "xorpd %%xmm8, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse2 xorpd\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm8\n\t"
+ "xorpd %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movq 32(%0), %%rax\n\t"
+ "addq 40(%0), %%rax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "rax", "xmm8", "xmm0", "cc", "memory"
+ );
+
+
+ free(junk);
+ return 0;
+}
--- /dev/null
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-amd64.c:17)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-amd64.c:38)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-amd64.c:65)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-amd64.c:92)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-amd64.c:117)
+
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 1 allocs, 1 frees, 48 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
--- /dev/null
+
+Complain int64
+
+No complain int64
+
+Complain mmx
+
+No complain mmx
+
+Complain sse xorps
+
+No complain sse xorps
+
+Complain sse2 pxor
+
+No complain sse2 pxor
+
+Complain sse2 xorpd
+
+No complain sse2 xorpd
--- /dev/null
+prog: xor-undef-amd64
sse2_memory.stderr.exp sse2_memory.stdout.exp sse2_memory.vgtest \
tronical.stderr.exp tronical.vgtest \
more_x86_fp.stderr.exp more_x86_fp.stdout.exp more_x86_fp.vgtest \
- fprem.stderr.exp fprem.stdout.exp fprem.vgtest
+ fprem.stderr.exp fprem.stdout.exp fprem.vgtest \
+ xor-undef-x86.stderr.exp xor-undef-x86.stdout.exp \
+ xor-undef-x86.vgtest
check_PROGRAMS = \
bug133694 \
espindola2 \
scalar_exit_group scalar_fork scalar_supp scalar_vfork \
fpeflags pushfpopf pushpopmem scalar sse_memory tronical \
- more_x86_fp fprem
+ more_x86_fp fprem xor-undef-x86
AM_CPPFLAGS = -I$(top_srcdir)/include
AM_CFLAGS = $(WERROR) @FLAG_M32@ -Winline -Wall -Wshadow -g \
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#define JZ_NEXT ".byte 0x74,0x00" /* jz the-next-insn */
+
+int main ( void )
+{
+ char* junk = malloc(48);
+ assert(junk);
+
+
+ /* --- INTEGER --- */
+
+ printf("\nComplain int32\n");
+ __asm__ __volatile__(
+ "movl 0(%0), %%eax\n\t"
+ "movl 8(%0), %%edi\n\t"
+ "xorl %%edi, %%eax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "edi", "eax", "cc"
+ );
+
+ printf("\nNo complain int32\n");
+ __asm__ __volatile__(
+ "movl 0(%0), %%eax\n\t"
+ "movl 8(%0), %%edi\n\t"
+ "xorl %%eax, %%eax\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "edi", "eax", "cc"
+ );
+
+
+ /* --- MMX --- */
+
+ printf("\nComplain mmx\n");
+ __asm__ __volatile__(
+ "emms\n\t"
+ "movq 0(%0), %%mm0\n\t"
+ "movq 8(%0), %%mm7\n\t"
+ "pxor %%mm7, %%mm0\n\t"
+ "movq %%mm0, 16(%0)\n\t"
+ "movl 16(%0), %%esi\n\t"
+ "addl 20(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "mm7", "mm0", "cc", "memory"
+ );
+
+ printf("\nNo complain mmx\n");
+ __asm__ __volatile__(
+ "emms\n\t"
+ "movq 0(%0), %%mm0\n\t"
+ "movq 8(%0), %%mm7\n\t"
+ "pxor %%mm0, %%mm0\n\t"
+ "movq %%mm0, 16(%0)\n\t"
+ "movl 16(%0), %%esi\n\t"
+ "addl 20(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "mm7", "mm0", "cc", "memory"
+ );
+
+
+ /* --- SSE1 --- */
+
+ printf("\nComplain sse xorps\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "xorps %%xmm7, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse xorps\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "xorps %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+
+ /* --- SSE2 --- */
+
+ printf("\nComplain sse2 pxor\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "pxor %%xmm7, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse2 pxor\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "pxor %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+
+ printf("\nComplain sse2 xorpd\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "xorpd %%xmm7, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+ printf("\nNo complain sse2 xorpd\n");
+ __asm__ __volatile__(
+ "movups 0(%0), %%xmm0\n\t"
+ "movups 16(%0), %%xmm7\n\t"
+ "xorpd %%xmm0, %%xmm0\n\t"
+ "movups %%xmm0, 32(%0)\n\t"
+ "movl 32(%0), %%esi\n\t"
+ "addl 36(%0), %%esi\n\t"
+ "addl 40(%0), %%esi\n\t"
+ "addl 44(%0), %%esi\n\t"
+ JZ_NEXT
+ : : "r"(junk) : "esi", "xmm7", "xmm0", "cc", "memory"
+ );
+
+
+ free(junk);
+ return 0;
+}
--- /dev/null
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-x86.c:17)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-x86.c:38)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-x86.c:67)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-x86.c:98)
+
+Conditional jump or move depends on uninitialised value(s)
+ at 0x........: main (xor-undef-x86.c:127)
+
+ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 1 allocs, 1 frees, 48 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
--- /dev/null
+
+Complain int32
+
+No complain int32
+
+Complain mmx
+
+No complain mmx
+
+Complain sse xorps
+
+No complain sse xorps
+
+Complain sse2 pxor
+
+No complain sse2 pxor
+
+Complain sse2 xorpd
+
+No complain sse2 xorpd
--- /dev/null
+prog: xor-undef-x86
+prereq: ../../../tests/cputest x86-sse