From: Julian Seward Date: Sat, 9 Feb 2008 01:55:52 +0000 (+0000) Subject: Add SSSE3 tests. X-Git-Tag: svn/VALGRIND_3_4_0~1083 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8d76c51997f81415e115adfffd7b1fefe4e73e2e;p=thirdparty%2Fvalgrind.git Add SSSE3 tests. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7385 --- diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am index aed0889860..ca92455f45 100644 --- a/none/tests/amd64/Makefile.am +++ b/none/tests/amd64/Makefile.am @@ -5,7 +5,7 @@ CLEANFILES = $(addsuffix .c,$(INSN_TESTS)) INSN_TESTS = insn_basic insn_mmx insn_sse insn_sse2 insn_fpu if BUILD_SSE3_TESTS - INSN_TESTS += insn_sse3 + INSN_TESTS += insn_sse3 insn_ssse3 endif # Explicitly include insn_sse3 even if ! BUILD_SSE3_TESTS, @@ -26,6 +26,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ $(addsuffix .stdout.exp,$(INSN_TESTS)) \ $(addsuffix .vgtest,$(INSN_TESTS)) \ insn_sse3.stdout.exp insn_sse3.stderr.exp insn_sse3.vgtest \ + insn_ssse3.stdout.exp insn_ssse3.stderr.exp insn_ssse3.vgtest \ jrcxz.stderr.exp jrcxz.stdout.exp jrcxz.vgtest \ looper.stderr.exp looper.stdout.exp looper.vgtest \ nibz_bennee_mmap.stderr.exp nibz_bennee_mmap.stdout.exp \ @@ -35,6 +36,8 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ redundantRexW.stderr.exp \ smc1.stderr.exp smc1.stdout.exp smc1.vgtest \ shrld.stderr.exp shrld.stdout.exp shrld.vgtest \ + ssse3_misaligned.stderr.exp ssse3_misaligned.stdout.exp \ + ssse3_misaligned.vgtest \ slahf-amd64.stderr.exp slahf-amd64.stdout.exp \ slahf-amd64.vgtest @@ -45,7 +48,7 @@ check_PROGRAMS = \ faultstatus fcmovnu fxtract $(INSN_TESTS) looper jrcxz \ rcl-amd64 \ redundantRexW \ - smc1 shrld \ + smc1 shrld ssse3_misaligned \ nibz_bennee_mmap \ slahf-amd64 @@ -65,6 +68,8 @@ insn_sse2_SOURCES = insn_sse2.def insn_sse2_LDADD = -lm insn_sse3_SOURCES = insn_sse3.def insn_sse3_LDADD = -lm +insn_ssse3_SOURCES = insn_ssse3.def +insn_ssse3_LDADD = -lm insn_fpu_SOURCES = insn_fpu.def insn_fpu_LDADD = -lm fxtract_LDADD = -lm diff --git a/none/tests/amd64/insn_ssse3.def b/none/tests/amd64/insn_ssse3.def new file mode 100644 index 0000000000..4b8c98e2fa --- /dev/null +++ b/none/tests/amd64/insn_ssse3.def @@ -0,0 +1,251 @@ +psignb mm.ub[0,10,0,245,0,1,255,254] mm.ub[0,40,80,120,160,200,240,24] => 1.sb[0,40,0,-120,0,-56,16,-24] +psignb m64.ub[0,10,0,245,0,1,255,254] mm.ub[0,41,79,119,161,199,241,23] => 1.sb[0,41,0,-119,0,-57,15,-23] +# +psignb xmm.ub[0,10,0,245,0,1,255,254,1,255,254,0,10,0,245,0] xmm.ub[0,40,80,120,160,200,240,24,3,2,1,0,255,254,253,252] => 1.sb[0,40,0,-120,0,-56,16,-24,3,-2,-1,0,-1,0,3,0] +psignb m128.ub[0,10,0,245,0,1,255,254,10,0,245,0,1,254,0] xmm.ub[0,41,79,119,161,199,241,23,0,31,69,109,151,189,231,13] => 1.sb[0,41,0,-119,0,-57,15,-23,0,0,-69,0,-105,67,0] +# +# +# +psignw mm.sw[0,10,0,-11] mm.sw[999,987,986,985] => 1.sw[0,987,0,-985] +psignw m64.sw[0,1000,0,-1111] mm.sw[909,907,906,905] => 1.sw[0,907,0,-905] +# +psignw xmm.sw[0,10,0,-11,1,0,-1,0] xmm.sw[999,987,986,985,888,887,886,885] => 1.sw[0,987,0,-985,888,0,-886,0] +psignw m128.sw[0,1000,0,-1111,11,0,-11,0] xmm.sw[909,907,906,905,809,808,807,806] => 1.sw[0,907,0,-905,809,0,-807] +# +# +# +psignd mm.sd[0,10000] mm.sd[-5555,-6666] => 1.sd[0,-6666] +psignd m64.sd[-11111,0] mm.sd[-7777,-8888] => 1.sd[7777,0] +# +psignd xmm.sd[0,10000,-10000,0] xmm.sd[-5555,-6666,-7777,-8888] => 1.sd[0,-6666,7777,0] +psignd m128.sd[-11111,0,0,1111] xmm.sd[-9999,-10101,-11111,-22222] => 1.sd[9999,0,0,-22222] +# +# +# +pabsb mm.ub[0,10,0,245,0,1,255,254] mm.ub[0,40,80,120,160,200,240,24] => 1.sb[0,10,0,11,0,1,1,2] +pabsb m64.ub[0,10,0,245,0,1,255,254] mm.ub[0,41,79,119,161,199,241,23] => 1.sb[0,10,0,11,0,1,1,2] +# +pabsb xmm.ub[0,10,0,245,0,1,255,254,1,255,254,0,10,0,245,0] xmm.ub[0,40,80,120,160,200,240,24,3,2,1,0,255,254,253,252] => 1.sb[0,10,0,11,0,1,1,2,1,1,2,0,10,0,11,0] +pabsb m128.ub[0,10,0,245,0,1,255,254,10,0,245,0,1,254,0] xmm.ub[0,41,79,119,161,199,241,23,0,31,69,109,151,189,231,13] => 1.sb[0,10,0,11,0,1,1,2,10,0,11,0,1,2,0] +# +# +# +pabsw mm.sw[0,10,0,-11] mm.sw[999,987,986,985] => 1.sw[0,10,0,11] +pabsw m64.sw[0,1000,0,-1111] mm.sw[909,907,906,905] => 1.sw[0,1000,0,1111] +# +pabsw xmm.sw[0,10,0,-11,1,0,-1,0] xmm.sw[999,987,986,985,888,887,886,885] => 1.sw[0,10,0,11,1,0,1,0] +pabsw m128.sw[0,1000,0,-1111,11,0,-11,0] xmm.sw[909,907,906,905,809,808,807,806] => 1.sw[0,1000,0,1111,11,0,11] +# +# +# +pabsd mm.sd[0,10000] mm.sd[-5555,-6666] => 1.sd[0,10000] +pabsd m64.sd[-11111,0] mm.sd[-7777,-8888] => 1.sd[11111,0] +# +pabsd xmm.sd[0,14000,-10700,0] xmm.sd[-5555,-6666,-7777,-8888] => 1.sd[0,14000,10700,0] +pabsd m128.sd[-11111,0,0,1111] xmm.sd[-9999,-10101,-11111,-22222] => 1.sd[11111,0,0,1111] +# +# +# +palignr imm8[0] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0xffeeddccbbaa9988] +palignr imm8[1] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x34ffeeddccbbaa99] +palignr imm8[2] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x1134ffeeddccbbaa] +palignr imm8[3] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x221134ffeeddccbb] +palignr imm8[4] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x33221134ffeeddcc] +palignr imm8[5] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x4433221134ffeedd] +palignr imm8[6] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x554433221134ffee] +palignr imm8[7] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x66554433221134ff] +palignr imm8[8] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433221134] +palignr imm8[9] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544332211] +palignr imm8[10] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655443322] +palignr imm8[11] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433] +palignr imm8[12] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544] +palignr imm8[13] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655] +palignr imm8[14] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766] +palignr imm8[15] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77] +palignr imm8[16] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[23] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[53] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[91] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[137] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[193] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[241] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[255] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +# +palignr imm8[0] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0xffeeddccbbaa9988] +palignr imm8[1] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x34ffeeddccbbaa99] +palignr imm8[2] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x1134ffeeddccbbaa] +palignr imm8[3] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x221134ffeeddccbb] +palignr imm8[4] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x33221134ffeeddcc] +palignr imm8[5] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x4433221134ffeedd] +palignr imm8[6] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x554433221134ffee] +palignr imm8[7] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x66554433221134ff] +palignr imm8[8] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433221134] +palignr imm8[9] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544332211] +palignr imm8[10] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655443322] +palignr imm8[11] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433] +palignr imm8[12] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544] +palignr imm8[13] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655] +palignr imm8[14] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766] +palignr imm8[15] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77] +palignr imm8[16] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[23] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[53] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[91] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[137] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[193] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[241] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[255] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +# +palignr imm8[0] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[5940417471140883427,2114202203853458723] +palignr imm8[1] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2545220547074121835,440604166586370189] +palignr imm8[2] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[10170063027109847264,6991307731704737800] +palignr imm8[3] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[616187561003071328,2477267993116521456] +palignr imm8[4] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17296229551762872887,11899179844356220851] +palignr imm8[5] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12965872729475674266,11215408247145846567] +palignr imm8[6] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2860894107828703856,16905287193340550487] +palignr imm8[7] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6280186048908436306,930727406554121757] +palignr imm8[8] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2114202203853458723,7713798215990141190] +palignr imm8[9] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[440604166586370189,2840378191760400993] +palignr imm8[10] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6991307731704737800,17304917796414268706] +palignr imm8[11] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2477267993116521456,9579199748148730789] +palignr imm8[12] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11899179844356220851,3640298450912602779] +palignr imm8[13] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11215408247145846567,2103890142923787498] +palignr imm8[14] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[16905287193340550487,6061056220056742668] +palignr imm8[15] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[930727406554121757,15371943530938247019] +palignr imm8[16] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[7713798215990141190,3446753574200340519] +palignr imm8[17] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2840378191760400993,13463881149220080] +palignr imm8[18] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17304917796414268706,52593285739140] +palignr imm8[19] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[9579199748148730789,205442522418] +palignr imm8[20] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3640298450912602779,802509853] +palignr imm8[21] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2103890142923787498,3134804] +palignr imm8[22] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6061056220056742668,12245] +palignr imm8[23] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[15371943530938247019,47] +palignr imm8[24] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3446753574200340519,0] +palignr imm8[25] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[13463881149220080,0] +palignr imm8[26] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[52593285739140,0] +palignr imm8[27] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[205442522418,0] +palignr imm8[28] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[802509853,0] +palignr imm8[29] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3134804,0] +palignr imm8[30] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12245,0] +palignr imm8[31] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[47,0] +palignr imm8[32] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[33] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[53] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[91] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[137] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[193] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[241] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[255] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +# +palignr imm8[0] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[5940417471140883427,2114202203853458723] +palignr imm8[1] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2545220547074121835,440604166586370189] +palignr imm8[2] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[10170063027109847264,6991307731704737800] +palignr imm8[3] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[616187561003071328,2477267993116521456] +palignr imm8[4] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17296229551762872887,11899179844356220851] +palignr imm8[5] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12965872729475674266,11215408247145846567] +palignr imm8[6] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2860894107828703856,16905287193340550487] +palignr imm8[7] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6280186048908436306,930727406554121757] +palignr imm8[8] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2114202203853458723,7713798215990141190] +palignr imm8[9] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[440604166586370189,2840378191760400993] +palignr imm8[10] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6991307731704737800,17304917796414268706] +palignr imm8[11] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2477267993116521456,9579199748148730789] +palignr imm8[12] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11899179844356220851,3640298450912602779] +palignr imm8[13] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11215408247145846567,2103890142923787498] +palignr imm8[14] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[16905287193340550487,6061056220056742668] +palignr imm8[15] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[930727406554121757,15371943530938247019] +palignr imm8[16] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[7713798215990141190,3446753574200340519] +palignr imm8[17] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2840378191760400993,13463881149220080] +palignr imm8[18] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17304917796414268706,52593285739140] +palignr imm8[19] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[9579199748148730789,205442522418] +palignr imm8[20] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3640298450912602779,802509853] +palignr imm8[21] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2103890142923787498,3134804] +palignr imm8[22] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6061056220056742668,12245] +palignr imm8[23] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[15371943530938247019,47] +palignr imm8[24] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3446753574200340519,0] +palignr imm8[25] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[13463881149220080,0] +palignr imm8[26] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[52593285739140,0] +palignr imm8[27] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[205442522418,0] +palignr imm8[28] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[802509853,0] +palignr imm8[29] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3134804,0] +palignr imm8[30] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12245,0] +palignr imm8[31] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[47,0] +palignr imm8[32] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[33] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[53] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[91] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[137] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[193] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[241] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[255] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +# +# +# +pshufb mm.ub[14,6,4,3,1,0,255,128] mm.ub[50,51,52,53,54,55,56,57] => 1.ub[56,56,54,53,51,50,0,0] +pshufb m64.ub[14,6,4,3,1,0,255,128] mm.ub[50,51,52,53,54,55,56,57] => 1.ub[56,56,54,53,51,50,0,0] +# +pshufb xmm.ub[63,31,15,14,8,7,1,0,255,128,127,126,123,231,213,103] xmm.ub[60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77] => 1.ub[77,77,77,76,70,67,61,60,0,0,77,76,73,0,0,67] +pshufb m128.ub[63,31,15,14,8,7,1,0,255,128,127,126,123,231,213,103] xmm.ub[60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77] => 1.ub[77,77,77,76,70,67,61,60,0,0,77,76,73,0,0,67] +# +# +# +pmulhrsw mm.ub[14,26,34,173,181,200,255,128] mm.ub[50,151,52,153,54,155,56,157] => 1.uw[60075,17037,11146,25091] +pmulhrsw m64.ub[14,26,34,173,181,200,255,128] mm.ub[50,151,52,153,54,155,56,157] => 1.uw[60075,17037,11146,25091] +# +pmulhrsw xmm.ub[14,26,34,173,181,200,255,128,24,36,44,183,191,210,9,138] xmm.ub[50,151,52,153,54,155,56,157,60,161,62,163,64,165,66,167] => 1.uw[60075,17037,11146,25091,58695,13511,8214,20937] +pmulhrsw m128.ub[14,26,34,173,181,200,255,128,24,36,44,183,191,210,9,138] xmm.ub[50,151,52,153,54,155,56,157,60,161,62,163,64,165,66,167] => 1.uw[60075,17037,11146,25091,58695,13511,8214,20937] +# +# +# +pmaddubsw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[32767,-32768,-12730,27484] +pmaddubsw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[32767,-32768,-12730,27484] +# +pmaddubsw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[32767,-32768,-12730,27484,32767,-32768,-13049,27259] +pmaddubsw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[32767,-32768,-12730,27484,32767,-32768,-13049,27259] +# +# +# +phsubw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[-512,-25602,27903,23478] +phsubw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[-512,-25602,27903,23478] +# +phsubw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[-512,-25602,-3328,-30672,27903,23478,27391,23989] +phsubw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[-512,-25602,-3328,-30672,27903,23478,27391,23989] +# +# +# +phsubd mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1698235191,1082151370] +phsubd m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1698235191,1082151370] +# +phsubd xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1698235191,-1528492107,1082151370,1115705291] +phsubd m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1698235191,-1528492107,1082151370,1115705291] +# +# +# +phsubsw mm.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[-32768,-4418,32767,2457] +phsubsw m64.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[-32768,-4418,32767,2457] +# +phsubsw xmm.sw[20000,-21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,18121,134,4552,235,6356,123,75] => 1.sw[-32768,-4418,-6121,48,32767,2457,23,5554] +phsubsw m128.sw[20000,-21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,18121,134,4552,235,6356,123,75] => 1.sw[-32768,-4418,-6121,48,32767,2457,23,5554] +# +# +# +phaddw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[12798,-26002,-14337,13748] +phaddw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[12798,-26002,-14337,13748] +# +phaddw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[12798,-26002,15102,-31132,-14337,13748,-14337,13747] +phaddw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[12798,-26002,15102,-31132,-14337,13748,-14337,13747] +# +# +# +phaddd mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1724370123,444588852] +phaddd m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1724370123,444588852] +# +phaddd xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1724370123,-1558569399,444588852,444588851] +phaddd m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1724370123,-1558569399,444588852,444588851] +# +# +# +phaddsw mm.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[1121,4686,-1000,33] +phaddsw m64.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[1121,4686,-1000,33] +# +phaddsw xmm.sw[20000,21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,-18121,134,4552,235,6356,123,75] => 1.sw[-32768,4686,6591,198,32767,33,91,6022] +phaddsw m128.sw[20000,21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,-18121,134,4552,235,6356,123,75] => 1.sw[-32768,4686,6591,198,32767,33,91,6022] diff --git a/none/tests/amd64/insn_ssse3.stderr.exp b/none/tests/amd64/insn_ssse3.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/none/tests/amd64/insn_ssse3.stdout.exp b/none/tests/amd64/insn_ssse3.stdout.exp new file mode 100644 index 0000000000..8fa4d79d6a --- /dev/null +++ b/none/tests/amd64/insn_ssse3.stdout.exp @@ -0,0 +1,188 @@ +psignb_1 ... ok +psignb_2 ... ok +psignb_3 ... ok +psignb_4 ... ok +psignw_1 ... ok +psignw_2 ... ok +psignw_3 ... ok +psignw_4 ... ok +psignd_1 ... ok +psignd_2 ... ok +psignd_3 ... ok +psignd_4 ... ok +pabsb_1 ... ok +pabsb_2 ... ok +pabsb_3 ... ok +pabsb_4 ... ok +pabsw_1 ... ok +pabsw_2 ... ok +pabsw_3 ... ok +pabsw_4 ... ok +pabsd_1 ... ok +pabsd_2 ... ok +pabsd_3 ... ok +pabsd_4 ... ok +palignr_1 ... ok +palignr_2 ... ok +palignr_3 ... ok +palignr_4 ... ok +palignr_5 ... ok +palignr_6 ... ok +palignr_7 ... ok +palignr_8 ... ok +palignr_9 ... ok +palignr_10 ... ok +palignr_11 ... ok +palignr_12 ... ok +palignr_13 ... ok +palignr_14 ... ok +palignr_15 ... ok +palignr_16 ... ok +palignr_17 ... ok +palignr_18 ... ok +palignr_19 ... ok +palignr_20 ... ok +palignr_21 ... ok +palignr_22 ... ok +palignr_23 ... ok +palignr_24 ... ok +palignr_25 ... ok +palignr_26 ... ok +palignr_27 ... ok +palignr_28 ... ok +palignr_29 ... ok +palignr_30 ... ok +palignr_31 ... ok +palignr_32 ... ok +palignr_33 ... ok +palignr_34 ... ok +palignr_35 ... ok +palignr_36 ... ok +palignr_37 ... ok +palignr_38 ... ok +palignr_39 ... ok +palignr_40 ... ok +palignr_41 ... ok +palignr_42 ... ok +palignr_43 ... ok +palignr_44 ... ok +palignr_45 ... ok +palignr_46 ... ok +palignr_47 ... ok +palignr_48 ... ok +palignr_49 ... ok +palignr_50 ... ok +palignr_51 ... ok +palignr_52 ... ok +palignr_53 ... ok +palignr_54 ... ok +palignr_55 ... ok +palignr_56 ... ok +palignr_57 ... ok +palignr_58 ... ok +palignr_59 ... ok +palignr_60 ... ok +palignr_61 ... ok +palignr_62 ... ok +palignr_63 ... ok +palignr_64 ... ok +palignr_65 ... ok +palignr_66 ... ok +palignr_67 ... ok +palignr_68 ... ok +palignr_69 ... ok +palignr_70 ... ok +palignr_71 ... ok +palignr_72 ... ok +palignr_73 ... ok +palignr_74 ... ok +palignr_75 ... ok +palignr_76 ... ok +palignr_77 ... ok +palignr_78 ... ok +palignr_79 ... ok +palignr_80 ... ok +palignr_81 ... ok +palignr_82 ... ok +palignr_83 ... ok +palignr_84 ... ok +palignr_85 ... ok +palignr_86 ... ok +palignr_87 ... ok +palignr_88 ... ok +palignr_89 ... ok +palignr_90 ... ok +palignr_91 ... ok +palignr_92 ... ok +palignr_93 ... ok +palignr_94 ... ok +palignr_95 ... ok +palignr_96 ... ok +palignr_97 ... ok +palignr_98 ... ok +palignr_99 ... ok +palignr_100 ... ok +palignr_101 ... ok +palignr_102 ... ok +palignr_103 ... ok +palignr_104 ... ok +palignr_105 ... ok +palignr_106 ... ok +palignr_107 ... ok +palignr_108 ... ok +palignr_109 ... ok +palignr_110 ... ok +palignr_111 ... ok +palignr_112 ... ok +palignr_113 ... ok +palignr_114 ... ok +palignr_115 ... ok +palignr_116 ... ok +palignr_117 ... ok +palignr_118 ... ok +palignr_119 ... ok +palignr_120 ... ok +palignr_121 ... ok +palignr_122 ... ok +palignr_123 ... ok +palignr_124 ... ok +palignr_125 ... ok +palignr_126 ... ok +palignr_127 ... ok +palignr_128 ... ok +pshufb_1 ... ok +pshufb_2 ... ok +pshufb_3 ... ok +pshufb_4 ... ok +pmulhrsw_1 ... ok +pmulhrsw_2 ... ok +pmulhrsw_3 ... ok +pmulhrsw_4 ... ok +pmaddubsw_1 ... ok +pmaddubsw_2 ... ok +pmaddubsw_3 ... ok +pmaddubsw_4 ... ok +phsubw_1 ... ok +phsubw_2 ... ok +phsubw_3 ... ok +phsubw_4 ... ok +phsubd_1 ... ok +phsubd_2 ... ok +phsubd_3 ... ok +phsubd_4 ... ok +phsubsw_1 ... ok +phsubsw_2 ... ok +phsubsw_3 ... ok +phsubsw_4 ... ok +phaddw_1 ... ok +phaddw_2 ... ok +phaddw_3 ... ok +phaddw_4 ... ok +phaddd_1 ... ok +phaddd_2 ... ok +phaddd_3 ... ok +phaddd_4 ... ok +phaddsw_1 ... ok +phaddsw_2 ... ok +phaddsw_3 ... ok +phaddsw_4 ... ok diff --git a/none/tests/amd64/insn_ssse3.vgtest b/none/tests/amd64/insn_ssse3.vgtest new file mode 100644 index 0000000000..62e9f86418 --- /dev/null +++ b/none/tests/amd64/insn_ssse3.vgtest @@ -0,0 +1,3 @@ +prog: ../../../none/tests/amd64/insn_ssse3 +prereq: ../../../tests/cputest amd64-sse3 +vgopts: -q diff --git a/none/tests/amd64/ssse3_misaligned.c b/none/tests/amd64/ssse3_misaligned.c new file mode 100644 index 0000000000..5b06f2d3db --- /dev/null +++ b/none/tests/amd64/ssse3_misaligned.c @@ -0,0 +1,38 @@ + +#include +#include +#include +#include +#include +#include + +void maybe_fault ( int delta ) +{ + char* x = memalign(16/*alignment*/,32/*size*/); + assert(x); + assert(0 == ((16-1) & (unsigned long)x)); + memset(x, 0, 32); + __asm__ __volatile__( + "pabsb (%0),%%xmm7" + : /*out*/ : /*in*/ "r"(x+delta) : /*trash*/"xmm7" ); + free(x); +} + +void handler ( int signo ) +{ + assert(signo == SIGSEGV); + fprintf(stderr, "three\n"); + exit(0); +} + +int main ( void ) +{ + signal(SIGSEGV, handler); + fprintf(stderr, "you should see: \"one\\ntwo\\nthree\\n\"\n"); + fprintf(stderr, "one\n"); + maybe_fault(0); + fprintf(stderr, "two\n"); + maybe_fault(5); + fprintf(stderr, "test failed! you shouldn't see this\n"); + return 0; +} diff --git a/none/tests/amd64/ssse3_misaligned.stderr.exp b/none/tests/amd64/ssse3_misaligned.stderr.exp new file mode 100644 index 0000000000..eb02a2e52c --- /dev/null +++ b/none/tests/amd64/ssse3_misaligned.stderr.exp @@ -0,0 +1,4 @@ +you should see: "one\ntwo\nthree\n" +one +two +three diff --git a/none/tests/amd64/ssse3_misaligned.stdout.exp b/none/tests/amd64/ssse3_misaligned.stdout.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/none/tests/amd64/ssse3_misaligned.vgtest b/none/tests/amd64/ssse3_misaligned.vgtest new file mode 100644 index 0000000000..627f3da2a4 --- /dev/null +++ b/none/tests/amd64/ssse3_misaligned.vgtest @@ -0,0 +1,3 @@ +prog: ssse3_misaligned +prereq: ../../../tests/cputest amd64-sse3 +vgopts: -q diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am index 5fa56f776a..6c08f9f621 100644 --- a/none/tests/x86/Makefile.am +++ b/none/tests/x86/Makefile.am @@ -5,7 +5,7 @@ CLEANFILES = $(addsuffix .c,$(INSN_TESTS)) INSN_TESTS = insn_basic insn_fpu insn_cmov insn_mmx insn_mmxext \ insn_sse insn_sse2 if BUILD_SSE3_TESTS - INSN_TESTS += insn_sse3 + INSN_TESTS += insn_sse3 insn_ssse3 endif # Explicitly include insn_sse3 even if ! BUILD_SSE3_TESTS, @@ -35,6 +35,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ $(addsuffix .stdout.exp,$(INSN_TESTS)) \ $(addsuffix .vgtest,$(INSN_TESTS)) \ insn_sse3.stdout.exp insn_sse3.stderr.exp insn_sse3.vgtest \ + insn_ssse3.stdout.exp insn_ssse3.stderr.exp insn_ssse3.vgtest \ jcxz.stdout.exp jcxz.stderr.exp jcxz.vgtest \ lahf.stdout.exp lahf.stderr.exp lahf.vgtest \ looper.stderr.exp looper.stdout.exp looper.vgtest \ @@ -44,6 +45,8 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ seg_override.stderr.exp seg_override.stdout.exp seg_override.vgtest \ sigcontext.stdout.exp sigcontext.stderr.exp sigcontext.vgtest \ smc1.stderr.exp smc1.stdout.exp smc1.vgtest \ + ssse3_misaligned.stderr.exp ssse3_misaligned.stdout.exp \ + ssse3_misaligned.vgtest \ yield.stderr.exp yield.stdout.exp yield.disabled check_PROGRAMS = \ @@ -58,7 +61,7 @@ check_PROGRAMS = \ getseg incdec_alt $(INSN_TESTS) \ jcxz \ lahf looper movx int pushpopseg sbbmisc \ - seg_override sigcontext smc1 yield + seg_override sigcontext smc1 ssse3_misaligned yield AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow \ @FLAG_M32@ -g -I$(top_srcdir)/include \ diff --git a/none/tests/x86/insn_ssse3.def b/none/tests/x86/insn_ssse3.def new file mode 100644 index 0000000000..4b8c98e2fa --- /dev/null +++ b/none/tests/x86/insn_ssse3.def @@ -0,0 +1,251 @@ +psignb mm.ub[0,10,0,245,0,1,255,254] mm.ub[0,40,80,120,160,200,240,24] => 1.sb[0,40,0,-120,0,-56,16,-24] +psignb m64.ub[0,10,0,245,0,1,255,254] mm.ub[0,41,79,119,161,199,241,23] => 1.sb[0,41,0,-119,0,-57,15,-23] +# +psignb xmm.ub[0,10,0,245,0,1,255,254,1,255,254,0,10,0,245,0] xmm.ub[0,40,80,120,160,200,240,24,3,2,1,0,255,254,253,252] => 1.sb[0,40,0,-120,0,-56,16,-24,3,-2,-1,0,-1,0,3,0] +psignb m128.ub[0,10,0,245,0,1,255,254,10,0,245,0,1,254,0] xmm.ub[0,41,79,119,161,199,241,23,0,31,69,109,151,189,231,13] => 1.sb[0,41,0,-119,0,-57,15,-23,0,0,-69,0,-105,67,0] +# +# +# +psignw mm.sw[0,10,0,-11] mm.sw[999,987,986,985] => 1.sw[0,987,0,-985] +psignw m64.sw[0,1000,0,-1111] mm.sw[909,907,906,905] => 1.sw[0,907,0,-905] +# +psignw xmm.sw[0,10,0,-11,1,0,-1,0] xmm.sw[999,987,986,985,888,887,886,885] => 1.sw[0,987,0,-985,888,0,-886,0] +psignw m128.sw[0,1000,0,-1111,11,0,-11,0] xmm.sw[909,907,906,905,809,808,807,806] => 1.sw[0,907,0,-905,809,0,-807] +# +# +# +psignd mm.sd[0,10000] mm.sd[-5555,-6666] => 1.sd[0,-6666] +psignd m64.sd[-11111,0] mm.sd[-7777,-8888] => 1.sd[7777,0] +# +psignd xmm.sd[0,10000,-10000,0] xmm.sd[-5555,-6666,-7777,-8888] => 1.sd[0,-6666,7777,0] +psignd m128.sd[-11111,0,0,1111] xmm.sd[-9999,-10101,-11111,-22222] => 1.sd[9999,0,0,-22222] +# +# +# +pabsb mm.ub[0,10,0,245,0,1,255,254] mm.ub[0,40,80,120,160,200,240,24] => 1.sb[0,10,0,11,0,1,1,2] +pabsb m64.ub[0,10,0,245,0,1,255,254] mm.ub[0,41,79,119,161,199,241,23] => 1.sb[0,10,0,11,0,1,1,2] +# +pabsb xmm.ub[0,10,0,245,0,1,255,254,1,255,254,0,10,0,245,0] xmm.ub[0,40,80,120,160,200,240,24,3,2,1,0,255,254,253,252] => 1.sb[0,10,0,11,0,1,1,2,1,1,2,0,10,0,11,0] +pabsb m128.ub[0,10,0,245,0,1,255,254,10,0,245,0,1,254,0] xmm.ub[0,41,79,119,161,199,241,23,0,31,69,109,151,189,231,13] => 1.sb[0,10,0,11,0,1,1,2,10,0,11,0,1,2,0] +# +# +# +pabsw mm.sw[0,10,0,-11] mm.sw[999,987,986,985] => 1.sw[0,10,0,11] +pabsw m64.sw[0,1000,0,-1111] mm.sw[909,907,906,905] => 1.sw[0,1000,0,1111] +# +pabsw xmm.sw[0,10,0,-11,1,0,-1,0] xmm.sw[999,987,986,985,888,887,886,885] => 1.sw[0,10,0,11,1,0,1,0] +pabsw m128.sw[0,1000,0,-1111,11,0,-11,0] xmm.sw[909,907,906,905,809,808,807,806] => 1.sw[0,1000,0,1111,11,0,11] +# +# +# +pabsd mm.sd[0,10000] mm.sd[-5555,-6666] => 1.sd[0,10000] +pabsd m64.sd[-11111,0] mm.sd[-7777,-8888] => 1.sd[11111,0] +# +pabsd xmm.sd[0,14000,-10700,0] xmm.sd[-5555,-6666,-7777,-8888] => 1.sd[0,14000,10700,0] +pabsd m128.sd[-11111,0,0,1111] xmm.sd[-9999,-10101,-11111,-22222] => 1.sd[11111,0,0,1111] +# +# +# +palignr imm8[0] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0xffeeddccbbaa9988] +palignr imm8[1] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x34ffeeddccbbaa99] +palignr imm8[2] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x1134ffeeddccbbaa] +palignr imm8[3] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x221134ffeeddccbb] +palignr imm8[4] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x33221134ffeeddcc] +palignr imm8[5] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x4433221134ffeedd] +palignr imm8[6] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x554433221134ffee] +palignr imm8[7] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x66554433221134ff] +palignr imm8[8] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433221134] +palignr imm8[9] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544332211] +palignr imm8[10] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655443322] +palignr imm8[11] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433] +palignr imm8[12] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544] +palignr imm8[13] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655] +palignr imm8[14] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766] +palignr imm8[15] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77] +palignr imm8[16] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[23] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[53] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[91] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[137] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[193] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[241] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[255] mm.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +# +palignr imm8[0] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0xffeeddccbbaa9988] +palignr imm8[1] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x34ffeeddccbbaa99] +palignr imm8[2] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x1134ffeeddccbbaa] +palignr imm8[3] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x221134ffeeddccbb] +palignr imm8[4] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x33221134ffeeddcc] +palignr imm8[5] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x4433221134ffeedd] +palignr imm8[6] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x554433221134ffee] +palignr imm8[7] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x66554433221134ff] +palignr imm8[8] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433221134] +palignr imm8[9] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544332211] +palignr imm8[10] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655443322] +palignr imm8[11] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766554433] +palignr imm8[12] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77665544] +palignr imm8[13] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x776655] +palignr imm8[14] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x7766] +palignr imm8[15] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0x77] +palignr imm8[16] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[23] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[53] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[91] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[137] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[193] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[241] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +palignr imm8[255] m64.uq[0xFFEEDDCCBBAA9988] mm.uq[0x7766554433221134] => 2.uq[0] +# +palignr imm8[0] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[5940417471140883427,2114202203853458723] +palignr imm8[1] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2545220547074121835,440604166586370189] +palignr imm8[2] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[10170063027109847264,6991307731704737800] +palignr imm8[3] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[616187561003071328,2477267993116521456] +palignr imm8[4] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17296229551762872887,11899179844356220851] +palignr imm8[5] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12965872729475674266,11215408247145846567] +palignr imm8[6] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2860894107828703856,16905287193340550487] +palignr imm8[7] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6280186048908436306,930727406554121757] +palignr imm8[8] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2114202203853458723,7713798215990141190] +palignr imm8[9] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[440604166586370189,2840378191760400993] +palignr imm8[10] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6991307731704737800,17304917796414268706] +palignr imm8[11] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2477267993116521456,9579199748148730789] +palignr imm8[12] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11899179844356220851,3640298450912602779] +palignr imm8[13] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11215408247145846567,2103890142923787498] +palignr imm8[14] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[16905287193340550487,6061056220056742668] +palignr imm8[15] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[930727406554121757,15371943530938247019] +palignr imm8[16] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[7713798215990141190,3446753574200340519] +palignr imm8[17] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2840378191760400993,13463881149220080] +palignr imm8[18] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17304917796414268706,52593285739140] +palignr imm8[19] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[9579199748148730789,205442522418] +palignr imm8[20] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3640298450912602779,802509853] +palignr imm8[21] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2103890142923787498,3134804] +palignr imm8[22] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6061056220056742668,12245] +palignr imm8[23] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[15371943530938247019,47] +palignr imm8[24] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3446753574200340519,0] +palignr imm8[25] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[13463881149220080,0] +palignr imm8[26] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[52593285739140,0] +palignr imm8[27] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[205442522418,0] +palignr imm8[28] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[802509853,0] +palignr imm8[29] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3134804,0] +palignr imm8[30] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12245,0] +palignr imm8[31] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[47,0] +palignr imm8[32] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[33] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[53] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[91] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[137] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[193] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[241] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[255] xmm.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +# +palignr imm8[0] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[5940417471140883427,2114202203853458723] +palignr imm8[1] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2545220547074121835,440604166586370189] +palignr imm8[2] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[10170063027109847264,6991307731704737800] +palignr imm8[3] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[616187561003071328,2477267993116521456] +palignr imm8[4] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17296229551762872887,11899179844356220851] +palignr imm8[5] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12965872729475674266,11215408247145846567] +palignr imm8[6] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2860894107828703856,16905287193340550487] +palignr imm8[7] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6280186048908436306,930727406554121757] +palignr imm8[8] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2114202203853458723,7713798215990141190] +palignr imm8[9] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[440604166586370189,2840378191760400993] +palignr imm8[10] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6991307731704737800,17304917796414268706] +palignr imm8[11] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2477267993116521456,9579199748148730789] +palignr imm8[12] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11899179844356220851,3640298450912602779] +palignr imm8[13] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[11215408247145846567,2103890142923787498] +palignr imm8[14] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[16905287193340550487,6061056220056742668] +palignr imm8[15] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[930727406554121757,15371943530938247019] +palignr imm8[16] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[7713798215990141190,3446753574200340519] +palignr imm8[17] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2840378191760400993,13463881149220080] +palignr imm8[18] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[17304917796414268706,52593285739140] +palignr imm8[19] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[9579199748148730789,205442522418] +palignr imm8[20] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3640298450912602779,802509853] +palignr imm8[21] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[2103890142923787498,3134804] +palignr imm8[22] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[6061056220056742668,12245] +palignr imm8[23] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[15371943530938247019,47] +palignr imm8[24] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3446753574200340519,0] +palignr imm8[25] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[13463881149220080,0] +palignr imm8[26] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[52593285739140,0] +palignr imm8[27] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[205442522418,0] +palignr imm8[28] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[802509853,0] +palignr imm8[29] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[3134804,0] +palignr imm8[30] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[12245,0] +palignr imm8[31] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[47,0] +palignr imm8[32] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[33] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[53] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[91] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[137] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[193] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[241] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +palignr imm8[255] m128.uq[0x52709a3760e06be3,0x1d5727b3f0088d23] xmm.uq[0x6b0cea9ba5226106,0x2fd5541d3284f027] => 2.uq[0,0] +# +# +# +pshufb mm.ub[14,6,4,3,1,0,255,128] mm.ub[50,51,52,53,54,55,56,57] => 1.ub[56,56,54,53,51,50,0,0] +pshufb m64.ub[14,6,4,3,1,0,255,128] mm.ub[50,51,52,53,54,55,56,57] => 1.ub[56,56,54,53,51,50,0,0] +# +pshufb xmm.ub[63,31,15,14,8,7,1,0,255,128,127,126,123,231,213,103] xmm.ub[60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77] => 1.ub[77,77,77,76,70,67,61,60,0,0,77,76,73,0,0,67] +pshufb m128.ub[63,31,15,14,8,7,1,0,255,128,127,126,123,231,213,103] xmm.ub[60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77] => 1.ub[77,77,77,76,70,67,61,60,0,0,77,76,73,0,0,67] +# +# +# +pmulhrsw mm.ub[14,26,34,173,181,200,255,128] mm.ub[50,151,52,153,54,155,56,157] => 1.uw[60075,17037,11146,25091] +pmulhrsw m64.ub[14,26,34,173,181,200,255,128] mm.ub[50,151,52,153,54,155,56,157] => 1.uw[60075,17037,11146,25091] +# +pmulhrsw xmm.ub[14,26,34,173,181,200,255,128,24,36,44,183,191,210,9,138] xmm.ub[50,151,52,153,54,155,56,157,60,161,62,163,64,165,66,167] => 1.uw[60075,17037,11146,25091,58695,13511,8214,20937] +pmulhrsw m128.ub[14,26,34,173,181,200,255,128,24,36,44,183,191,210,9,138] xmm.ub[50,151,52,153,54,155,56,157,60,161,62,163,64,165,66,167] => 1.uw[60075,17037,11146,25091,58695,13511,8214,20937] +# +# +# +pmaddubsw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[32767,-32768,-12730,27484] +pmaddubsw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[32767,-32768,-12730,27484] +# +pmaddubsw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[32767,-32768,-12730,27484,32767,-32768,-13049,27259] +pmaddubsw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[32767,-32768,-12730,27484,32767,-32768,-13049,27259] +# +# +# +phsubw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[-512,-25602,27903,23478] +phsubw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[-512,-25602,27903,23478] +# +phsubw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[-512,-25602,-3328,-30672,27903,23478,27391,23989] +phsubw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[-512,-25602,-3328,-30672,27903,23478,27391,23989] +# +# +# +phsubd mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1698235191,1082151370] +phsubd m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1698235191,1082151370] +# +phsubd xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1698235191,-1528492107,1082151370,1115705291] +phsubd m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1698235191,-1528492107,1082151370,1115705291] +# +# +# +phsubsw mm.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[-32768,-4418,32767,2457] +phsubsw m64.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[-32768,-4418,32767,2457] +# +phsubsw xmm.sw[20000,-21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,18121,134,4552,235,6356,123,75] => 1.sw[-32768,-4418,-6121,48,32767,2457,23,5554] +phsubsw m128.sw[20000,-21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,18121,134,4552,235,6356,123,75] => 1.sw[-32768,-4418,-6121,48,32767,2457,23,5554] +# +# +# +phaddw mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[12798,-26002,-14337,13748] +phaddw m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sw[12798,-26002,-14337,13748] +# +phaddw xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[12798,-26002,15102,-31132,-14337,13748,-14337,13747] +phaddw m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sw[12798,-26002,15102,-31132,-14337,13748,-14337,13747] +# +# +# +phaddd mm.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1724370123,444588852] +phaddd m64.ub[127,26,128,173,181,200,255,108] mm.ub[255,151,255,153,54,155,56,255] => 1.sd[-1724370123,444588852] +# +phaddd xmm.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1724370123,-1558569399,444588852,444588851] +phaddd m128.ub[127,26,128,173,181,200,255,108,127,25,128,174,180,201,255,107] xmm.ub[255,151,255,153,54,155,56,255,255,150,255,163,74,135,26,255] => 1.sd[-1724370123,-1558569399,444588852,444588851] +# +# +# +phaddsw mm.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[1121,4686,-1000,33] +phaddsw m64.sw[20000,-21000,1245,-1212] mm.sw[-17000,18121,134,4552] => 1.sw[1121,4686,-1000,33] +# +phaddsw xmm.sw[20000,21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,-18121,134,4552,235,6356,123,75] => 1.sw[-32768,4686,6591,198,32767,33,91,6022] +phaddsw m128.sw[20000,21000,1245,-1212,57,34,5788,234] xmm.sw[-17000,-18121,134,4552,235,6356,123,75] => 1.sw[-32768,4686,6591,198,32767,33,91,6022] diff --git a/none/tests/x86/insn_ssse3.stderr.exp b/none/tests/x86/insn_ssse3.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/none/tests/x86/insn_ssse3.stdout.exp b/none/tests/x86/insn_ssse3.stdout.exp new file mode 100644 index 0000000000..8fa4d79d6a --- /dev/null +++ b/none/tests/x86/insn_ssse3.stdout.exp @@ -0,0 +1,188 @@ +psignb_1 ... ok +psignb_2 ... ok +psignb_3 ... ok +psignb_4 ... ok +psignw_1 ... ok +psignw_2 ... ok +psignw_3 ... ok +psignw_4 ... ok +psignd_1 ... ok +psignd_2 ... ok +psignd_3 ... ok +psignd_4 ... ok +pabsb_1 ... ok +pabsb_2 ... ok +pabsb_3 ... ok +pabsb_4 ... ok +pabsw_1 ... ok +pabsw_2 ... ok +pabsw_3 ... ok +pabsw_4 ... ok +pabsd_1 ... ok +pabsd_2 ... ok +pabsd_3 ... ok +pabsd_4 ... ok +palignr_1 ... ok +palignr_2 ... ok +palignr_3 ... ok +palignr_4 ... ok +palignr_5 ... ok +palignr_6 ... ok +palignr_7 ... ok +palignr_8 ... ok +palignr_9 ... ok +palignr_10 ... ok +palignr_11 ... ok +palignr_12 ... ok +palignr_13 ... ok +palignr_14 ... ok +palignr_15 ... ok +palignr_16 ... ok +palignr_17 ... ok +palignr_18 ... ok +palignr_19 ... ok +palignr_20 ... ok +palignr_21 ... ok +palignr_22 ... ok +palignr_23 ... ok +palignr_24 ... ok +palignr_25 ... ok +palignr_26 ... ok +palignr_27 ... ok +palignr_28 ... ok +palignr_29 ... ok +palignr_30 ... ok +palignr_31 ... ok +palignr_32 ... ok +palignr_33 ... ok +palignr_34 ... ok +palignr_35 ... ok +palignr_36 ... ok +palignr_37 ... ok +palignr_38 ... ok +palignr_39 ... ok +palignr_40 ... ok +palignr_41 ... ok +palignr_42 ... ok +palignr_43 ... ok +palignr_44 ... ok +palignr_45 ... ok +palignr_46 ... ok +palignr_47 ... ok +palignr_48 ... ok +palignr_49 ... ok +palignr_50 ... ok +palignr_51 ... ok +palignr_52 ... ok +palignr_53 ... ok +palignr_54 ... ok +palignr_55 ... ok +palignr_56 ... ok +palignr_57 ... ok +palignr_58 ... ok +palignr_59 ... ok +palignr_60 ... ok +palignr_61 ... ok +palignr_62 ... ok +palignr_63 ... ok +palignr_64 ... ok +palignr_65 ... ok +palignr_66 ... ok +palignr_67 ... ok +palignr_68 ... ok +palignr_69 ... ok +palignr_70 ... ok +palignr_71 ... ok +palignr_72 ... ok +palignr_73 ... ok +palignr_74 ... ok +palignr_75 ... ok +palignr_76 ... ok +palignr_77 ... ok +palignr_78 ... ok +palignr_79 ... ok +palignr_80 ... ok +palignr_81 ... ok +palignr_82 ... ok +palignr_83 ... ok +palignr_84 ... ok +palignr_85 ... ok +palignr_86 ... ok +palignr_87 ... ok +palignr_88 ... ok +palignr_89 ... ok +palignr_90 ... ok +palignr_91 ... ok +palignr_92 ... ok +palignr_93 ... ok +palignr_94 ... ok +palignr_95 ... ok +palignr_96 ... ok +palignr_97 ... ok +palignr_98 ... ok +palignr_99 ... ok +palignr_100 ... ok +palignr_101 ... ok +palignr_102 ... ok +palignr_103 ... ok +palignr_104 ... ok +palignr_105 ... ok +palignr_106 ... ok +palignr_107 ... ok +palignr_108 ... ok +palignr_109 ... ok +palignr_110 ... ok +palignr_111 ... ok +palignr_112 ... ok +palignr_113 ... ok +palignr_114 ... ok +palignr_115 ... ok +palignr_116 ... ok +palignr_117 ... ok +palignr_118 ... ok +palignr_119 ... ok +palignr_120 ... ok +palignr_121 ... ok +palignr_122 ... ok +palignr_123 ... ok +palignr_124 ... ok +palignr_125 ... ok +palignr_126 ... ok +palignr_127 ... ok +palignr_128 ... ok +pshufb_1 ... ok +pshufb_2 ... ok +pshufb_3 ... ok +pshufb_4 ... ok +pmulhrsw_1 ... ok +pmulhrsw_2 ... ok +pmulhrsw_3 ... ok +pmulhrsw_4 ... ok +pmaddubsw_1 ... ok +pmaddubsw_2 ... ok +pmaddubsw_3 ... ok +pmaddubsw_4 ... ok +phsubw_1 ... ok +phsubw_2 ... ok +phsubw_3 ... ok +phsubw_4 ... ok +phsubd_1 ... ok +phsubd_2 ... ok +phsubd_3 ... ok +phsubd_4 ... ok +phsubsw_1 ... ok +phsubsw_2 ... ok +phsubsw_3 ... ok +phsubsw_4 ... ok +phaddw_1 ... ok +phaddw_2 ... ok +phaddw_3 ... ok +phaddw_4 ... ok +phaddd_1 ... ok +phaddd_2 ... ok +phaddd_3 ... ok +phaddd_4 ... ok +phaddsw_1 ... ok +phaddsw_2 ... ok +phaddsw_3 ... ok +phaddsw_4 ... ok diff --git a/none/tests/x86/insn_ssse3.vgtest b/none/tests/x86/insn_ssse3.vgtest new file mode 100644 index 0000000000..19bfa7329e --- /dev/null +++ b/none/tests/x86/insn_ssse3.vgtest @@ -0,0 +1,3 @@ +prog: ../../../none/tests/x86/insn_ssse3 +prereq: ../../../tests/cputest x86-sse3 +vgopts: -q diff --git a/none/tests/x86/ssse3_misaligned.c b/none/tests/x86/ssse3_misaligned.c new file mode 100644 index 0000000000..5b06f2d3db --- /dev/null +++ b/none/tests/x86/ssse3_misaligned.c @@ -0,0 +1,38 @@ + +#include +#include +#include +#include +#include +#include + +void maybe_fault ( int delta ) +{ + char* x = memalign(16/*alignment*/,32/*size*/); + assert(x); + assert(0 == ((16-1) & (unsigned long)x)); + memset(x, 0, 32); + __asm__ __volatile__( + "pabsb (%0),%%xmm7" + : /*out*/ : /*in*/ "r"(x+delta) : /*trash*/"xmm7" ); + free(x); +} + +void handler ( int signo ) +{ + assert(signo == SIGSEGV); + fprintf(stderr, "three\n"); + exit(0); +} + +int main ( void ) +{ + signal(SIGSEGV, handler); + fprintf(stderr, "you should see: \"one\\ntwo\\nthree\\n\"\n"); + fprintf(stderr, "one\n"); + maybe_fault(0); + fprintf(stderr, "two\n"); + maybe_fault(5); + fprintf(stderr, "test failed! you shouldn't see this\n"); + return 0; +} diff --git a/none/tests/x86/ssse3_misaligned.stderr.exp b/none/tests/x86/ssse3_misaligned.stderr.exp new file mode 100644 index 0000000000..eb02a2e52c --- /dev/null +++ b/none/tests/x86/ssse3_misaligned.stderr.exp @@ -0,0 +1,4 @@ +you should see: "one\ntwo\nthree\n" +one +two +three diff --git a/none/tests/x86/ssse3_misaligned.stdout.exp b/none/tests/x86/ssse3_misaligned.stdout.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/none/tests/x86/ssse3_misaligned.vgtest b/none/tests/x86/ssse3_misaligned.vgtest new file mode 100644 index 0000000000..90a97e3161 --- /dev/null +++ b/none/tests/x86/ssse3_misaligned.vgtest @@ -0,0 +1,3 @@ +prog: ssse3_misaligned +prereq: ../../../tests/cputest x86-sse3 +vgopts: -q