bt_everything.stderr.exp bt_everything.stdout.exp \
bt_everything.vgtest \
bug132146.vgtest bug132146.stderr.exp bug132146.stdout.exp \
+ bug279698.vgtest bug279698.stderr.exp bug279698.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 \
check_PROGRAMS = \
bt_everything \
bug132146 \
+ bug279698 \
fxsave-amd64 \
more_x87_fp \
sse_memory \
--- /dev/null
+/* A very trivial test for undefinedness propagation through
+ saturating narrowing. Obviously need a much more thorough test.
+*/
+#include <stdio.h>
+#include <assert.h>
+#include "../../memcheck.h"
+int main()
+{
+ unsigned char data[32], vbits[32];
+ __asm__ __volatile__
+ ("movdqu (%0), %%xmm0 \n"
+ "packuswb %%xmm0, %%xmm0 \n"
+ "movdqu %%xmm0, 16(%0) \n"
+ ::"r"(data)
+ :"memory","xmm0"
+ );
+ unsigned int res =
+ VALGRIND_GET_VBITS( data, vbits, 32 );
+ assert(res == 1); /* 1 == success */
+ int i, j;
+ for(i=0; i<2; i++) {
+ for(j=0; j<16; j++)
+ printf("%02x ", vbits[i*16+j]);
+ printf("\n");
+ }
+ return 0;
+}