You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(32) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
(22) |
2
(32) |
3
(34) |
4
(27) |
|
5
(36) |
6
(30) |
7
(19) |
8
(30) |
9
(28) |
10
(13) |
11
(1) |
|
12
|
13
(1) |
14
(2) |
15
(14) |
16
(21) |
17
(16) |
18
(19) |
|
19
(2) |
20
(9) |
21
(19) |
22
(15) |
23
(30) |
24
(28) |
25
(22) |
|
26
(23) |
27
(18) |
28
(35) |
29
(24) |
30
(24) |
31
(16) |
|
|
From: Christian B. <bor...@de...> - 2012-08-06 02:12:00
|
valgrind revision: 12851 VEX revision: 2461 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.20.0.20100122-0.7.9 C library: GNU C Library stable release version 2.11.1 (20100118) uname -mrs: Linux 2.6.32.59-0.7-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP1 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) ) Started at 2012-08-06 03:45:01 CEST Ended at 2012-08-06 04:11:50 CEST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 560 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 557 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Aug 6 03:58:30 2012 --- new.short Mon Aug 6 04:11:50 2012 *************** *** 8,10 **** ! == 557 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/tc18_semabuse (stderr) --- 8,10 ---- ! == 560 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/tc18_semabuse (stderr) |
|
From: Christian B. <bor...@de...> - 2012-08-06 02:04:48
|
valgrind revision: 12851 VEX revision: 2461 C compiler: gcc (GCC) 4.5.3 20110121 (Red Hat 4.5.3-5) Assembler: GNU assembler version 2.20.51.0.7-4bb6.fc13 20100318 C library: GNU C Library stable release version 2.12.1 uname -mrs: Linux 3.3.4-53.x.20120504-s390xperformance s390x Vendor version: unknown Nightly build on fedora390 ( Fedora 13/14/15 mix with gcc 3.5.3 on z196 (s390x) ) Started at 2012-08-06 03:45:01 CEST Ended at 2012-08-06 04:04:23 CEST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 559 tests, 5 stderr failures, 2 stdout failures, 1 stderrB failure, 1 stdoutB failure, 0 post failures == gdbserver_tests/mcinvokeWS (stdoutB) gdbserver_tests/mcinvokeWS (stderrB) none/tests/s390x/cu12 (stdout) none/tests/s390x/cu14 (stdout) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) drd/tests/tc21_pthonce (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 556 tests, 5 stderr failures, 1 stdout failure, 1 stderrB failure, 1 stdoutB failure, 0 post failures == gdbserver_tests/mcinvokeWS (stdoutB) gdbserver_tests/mcinvokeWS (stderrB) none/tests/s390x/cu12 (stdout) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) drd/tests/tc21_pthonce (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Mon Aug 6 03:54:44 2012 --- new.short Mon Aug 6 04:04:23 2012 *************** *** 8,10 **** ! == 556 tests, 5 stderr failures, 1 stdout failure, 1 stderrB failure, 1 stdoutB failure, 0 post failures == gdbserver_tests/mcinvokeWS (stdoutB) --- 8,10 ---- ! == 559 tests, 5 stderr failures, 2 stdout failures, 1 stderrB failure, 1 stdoutB failure, 0 post failures == gdbserver_tests/mcinvokeWS (stdoutB) *************** *** 12,13 **** --- 12,14 ---- none/tests/s390x/cu12 (stdout) + none/tests/s390x/cu14 (stdout) helgrind/tests/tc18_semabuse (stderr) |
|
From: Tom H. <to...@co...> - 2012-08-06 01:58:13
|
valgrind revision: 12851 VEX revision: 2461 C compiler: gcc (GCC) 4.7.1 20120720 (Red Hat 4.7.1-5) Assembler: GNU assembler version 2.22.52.0.4-6.fc18 20120604 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.4.0-1.fc17.x86_64 x86_64 Vendor version: Fedora release 18 (Rawhide) Nightly build on bristol ( x86_64, Fedora 18 ) Started at 2012-08-06 02:31:23 BST Ended at 2012-08-06 02:57:51 BST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 624 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/origin5-bz2 (stderr) memcheck/tests/overlap (stderr) |
|
From: <sv...@va...> - 2012-08-06 00:11:00
|
florian 2012-08-06 01:10:53 +0100 (Mon, 06 Aug 2012)
New Revision: 12851
Log:
Add a testcase for the cu41 insn. Update opcode list, NEWS and bugstatus.
#289839 is finally fixed.
Added files:
trunk/none/tests/s390x/cu41.c
trunk/none/tests/s390x/cu41.stderr.exp
trunk/none/tests/s390x/cu41.stdout.exp
trunk/none/tests/s390x/cu41.vgtest
Modified directories:
trunk/none/tests/s390x/
Modified files:
trunk/NEWS
trunk/docs/internals/3_7_BUGSTATUS.txt
trunk/docs/internals/s390-opcodes.csv
trunk/none/tests/s390x/Makefile.am
Modified: trunk/none/tests/s390x/
Added: trunk/none/tests/s390x/cu41.stdout.exp (+218 -0)
===================================================================
--- trunk/none/tests/s390x/cu41.stdout.exp 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/none/tests/s390x/cu41.stdout.exp 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -0,0 +1,218 @@
+
+------------- test1 ----------------
+UTF8: <none>
+ cc = 0
+ dst len: 0
+ src len: 0
+
+------------- test2.1 ----------------
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src len: 0
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src len: 1
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src len: 2
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src len: 3
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 0
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 1
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 2
+UTF8: <none>
+ cc = 0
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 3
+
+------------- test2.2 ----------------
+UTF8: 00
+ cc = 0
+ dst address difference: 1 dst len: 999
+ src address difference: 4 src len: 0
+UTF8: c2 80 df bf
+ cc = 0
+ dst address difference: 4 dst len: 996
+ src address difference: 8 src len: 2
+UTF8: e0 a0 80
+ cc = 0
+ dst address difference: 3 dst len: 997
+ src address difference: 4 src len: 1
+UTF8: f0 90 80 80 f4 8f bf bf f0 90 80 81 f4 8f bf be f0 92 8d 85
+ cc = 0
+ dst address difference: 20 dst len: 980
+ src address difference: 20 src len: 1
+
+------------- test3.1 ----------------
+UTF8: <none>
+ cc = 1
+ dst len: 0
+ src address difference: 0 src len: 24
+UTF8: <none>
+ cc = 1
+ dst len: 0
+ src address difference: 0 src len: 32
+UTF8: <none>
+ cc = 1
+ dst len: 1
+ src address difference: 0 src len: 32
+UTF8: <none>
+ cc = 1
+ dst len: 0
+ src address difference: 0 src len: 36
+UTF8: <none>
+ cc = 1
+ dst len: 1
+ src address difference: 0 src len: 36
+UTF8: <none>
+ cc = 1
+ dst len: 0
+ src address difference: 0 src len: 28
+UTF8: <none>
+ cc = 1
+ dst len: 1
+ src address difference: 0 src len: 28
+UTF8: <none>
+ cc = 1
+ dst len: 2
+ src address difference: 0 src len: 28
+UTF8: <none>
+ cc = 1
+ dst len: 3
+ src address difference: 0 src len: 28
+
+------------- test4 ----------------
+UTF8: 00 7f
+ cc = 0
+ dst address difference: 2 dst len: 0
+ src address difference: 8 src len: 0
+
+------------- test5 ----------------
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 1000
+ src address difference: 0 src len: 4
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 0
+ src address difference: 0 src len: 44
+UTF8: <none>
+ cc = 2
+ dst address difference: 0 dst len: 100
+ src address difference: 0 src len: 44
+
+------------- test6 ----------------
+UTF8: 00 7f 01 7e 30 5e
+ cc = 0
+ dst address difference: 6 dst len: 994
+ src address difference: 24 src len: 0
+UTF8: c2 80 df bf c2 81 df be c4 80 cc b3 d5 95 da aa
+ cc = 0
+ dst address difference: 16 dst len: 984
+ src address difference: 32 src len: 0
+UTF8: e0 a0 80 ed 9f bf ed b0 80 ef bf bf ed b0 81 ef bf be ed ba a0 ed 80 8d ee 95 95
+ cc = 0
+ dst address difference: 27 dst len: 973
+ src address difference: 36 src len: 0
+UTF8: f0 90 80 80 f4 8f bf bf f0 90 80 81 f4 8f bf be f0 92 8d 85 f0 a3 91 96 f3 be b7 8b
+ cc = 0
+ dst address difference: 28 dst len: 972
+ src address difference: 28 src len: 0
+UTF8: 78 c4 91 e1 88 b4 f1 80 90 84
+ cc = 0
+ dst address difference: 10 dst len: 990
+ src address difference: 16 src len: 0
+
+------------- test7.0 ----------------
+UTF8: 01
+ cc = 0
+ dst address difference: 1 dst len: 999
+ src address difference: 4 src len: 0
+UTF8: 01
+ cc = 0
+ dst address difference: 1 dst len: 999
+ src address difference: 4 src len: 0
+
+------------- test7.1 ----------------
+UTF8: df be
+ cc = 0
+ dst address difference: 2 dst len: 998
+ src address difference: 4 src len: 0
+UTF8: df be
+ cc = 0
+ dst address difference: 2 dst len: 998
+ src address difference: 4 src len: 0
+
+------------- test7.2 ----------------
+UTF8: ed ba a0
+ cc = 0
+ dst address difference: 3 dst len: 997
+ src address difference: 4 src len: 0
+UTF8: ed ba a0
+ cc = 0
+ dst address difference: 3 dst len: 997
+ src address difference: 4 src len: 0
+
+------------- test7.3 ----------------
+UTF8: f0 a3 91 96
+ cc = 0
+ dst address difference: 4 dst len: 996
+ src address difference: 4 src len: 0
+UTF8: f0 a3 91 96
+ cc = 0
+ dst address difference: 4 dst len: 996
+ src address difference: 4 src len: 0
Property changed: trunk/none/tests/s390x (+0 -0)
___________________________________________________________________
Name: svn:ignore
- .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
+ .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
Added: trunk/none/tests/s390x/cu41.c (+259 -0)
===================================================================
--- trunk/none/tests/s390x/cu41.c 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/none/tests/s390x/cu41.c 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -0,0 +1,259 @@
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include "opcodes.h"
+
+/* The abstracted result of an CU41 insn */
+typedef struct {
+ uint64_t addr1; // target
+ uint64_t len1;
+ uint64_t addr2; // source
+ uint64_t len2;
+ uint32_t cc;
+} cu41_t;
+
+/* Define various input buffers. */
+
+/* 0000 to 00ff: Result is 1 byte for each uint32_t */
+uint32_t pattern1[] = {
+ 0x0000, 0x007f, /* corner cases */
+ 0x0001, 0x007e, 0x0030, 0x005e /* misc */
+};
+
+/* 0080 to 07ff: Result is 2 bytes for each uint32_t */
+uint32_t pattern2[] = {
+ 0x0080, 0x07ff, /* corner cases */
+ 0x0081, 0x07fe, 0x100, 0x333, 0x555, 0x6aa /* misc */
+};
+
+/* 0800 to d7ff: Result is 3 bytes for each uint32_t */
+/* dc00 to ffff: Result is 3 bytes for each uint32_t */
+uint32_t pattern3[] = {
+ 0x0800, 0xd7ff, /* corner cases */
+ 0xdc00, 0xffff, /* corner cases */
+ 0xdc01, 0xfffe, 0xdea0, 0xd00d, 0xe555 /* misc */
+};
+
+/* 10000 to 10ffff: Result is 4 bytes for each uint32_t */
+uint32_t pattern4[] = {
+ 0x10000, 0x10ffff, /* corner cases */
+ 0x10001, 0x10fffe, 0x12345, 0x23456, 0xfedcb /* misc */
+};
+
+/* Invalid UTF-32 character */
+uint32_t invalid[] = {
+ 0x0000d800, 0x0000dbff, /* corner cases */
+ 0x00110000, 0xffffffff, /* corner cases */
+ 0x0000daad, 0x0000d901, 0x0000d8ff, /* misc */
+ 0x00110011, 0x01000000, 0x10000000, 0xdeadbeef /* misc */
+};
+
+/* Mixed bytes */
+uint32_t mixed[] = {
+ 0x00000078 /* 1 byte */,
+ 0x00000111 /* 2 bytes */,
+ 0x00001234 /* 3 bytes */,
+ 0x00040404 /* 4 bytes */,
+};
+
+/* This is the buffer for the converted bytes. */
+uint8_t buff[1000]; /* Large so we con'don't have to worry about it */
+
+void write_and_check(uint32_t *, unsigned, unsigned);
+
+
+static cu41_t
+do_cu41(uint8_t *dst, uint64_t dst_len, uint32_t *src, uint64_t src_len)
+{
+ int cc = 42;
+ cu41_t regs;
+
+ /* build up the register pairs */
+ register uint32_t *source asm("4") = src;
+ register uint64_t source_len asm("5") = src_len;
+ register uint8_t *dest asm("2") = dst;
+ register uint64_t dest_len asm("3") = dst_len;
+
+ asm volatile(
+ CU41(2,4)
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ : "+d"(dest), "+d"(source), "=d"(cc),
+ "+d"(source_len), "+d"(dest_len)
+ :
+ : "memory", "cc");
+
+ /* Capture register contents at end of cu41 */
+ regs.addr1 = (uint64_t)dest;
+ regs.len1 = dest_len;
+ regs.addr2 = (uint64_t)source;
+ regs.len2 = source_len;
+ regs.cc = cc;
+
+ return regs;
+}
+
+void
+run_test(uint8_t *dst, uint64_t dst_len, uint32_t *src, uint64_t src_len)
+{
+ int i;
+ cu41_t result;
+
+ result = do_cu41(dst, dst_len, src, src_len);
+
+ // Write out the converted values, if any
+ printf("UTF8: ");
+ if (dst_len - result.len1 == 0)
+ printf(" <none>");
+ else
+ for (i = 0; i < dst_len - result.len1; ++i) {
+ printf(" %02x", dst[i]);
+ }
+ printf("\n");
+
+ printf(" cc = %d\n", result.cc);
+ if (dst != NULL)
+ printf(" dst address difference: %"PRId64, result.addr1 - (uint64_t)dst);
+ printf(" dst len: %"PRId64"\n", result.len1);
+
+ if (src != NULL)
+ printf(" src address difference: %"PRId64, result.addr2 - (uint64_t)src);
+ printf(" src len: %"PRId64"\n", result.len2);
+}
+
+int main()
+{
+ int i;
+
+ /* Length == 0, no memory should be read or written */
+ printf("\n------------- test1 ----------------\n");
+ run_test(NULL, 0, NULL, 0);
+
+ /* Test exhaustion of source length (source bytes are valid) */
+ printf("\n------------- test2.1 ----------------\n");
+
+ /* No character will be written to BUFF, i.e. loop in jitted code
+ is not iterated */
+ run_test(buff, sizeof buff, NULL, 0);
+ run_test(buff, sizeof buff, NULL, 1);
+ run_test(buff, sizeof buff, NULL, 2);
+ run_test(buff, sizeof buff, NULL, 3);
+ run_test(buff, sizeof buff, pattern1, 0);
+ run_test(buff, sizeof buff, pattern1, 1);
+ run_test(buff, sizeof buff, pattern1, 2);
+ run_test(buff, sizeof buff, pattern1, 3);
+
+ printf("\n------------- test2.2 ----------------\n");
+ /* At least one character will be written to BUFF, i.e. loop in jitted
+ code is iterated */
+ run_test(buff, sizeof buff, pattern1, 4); /* 1 utf32 -> 1 1-byte utf8 */
+ run_test(buff, sizeof buff, pattern2, 10); /* 2 utf32 -> 2 2-byte utf8 */
+ run_test(buff, sizeof buff, pattern3, 5); /* 1 utf32 -> 1 3-byte utf8 */
+ run_test(buff, sizeof buff, pattern4, 21); /* 5 utf32 -> 5 4-byte utf8 */
+
+ /* Test exhaustion of destination length (source bytes are valid) */
+ printf("\n------------- test3.1 ----------------\n");
+
+ /* No character will be written to BUFF, i.e. loop in jitted code
+ is not iterated */
+
+ /* Want to write at least 1 byte */
+ run_test(NULL, 0, pattern1, sizeof pattern1);
+
+ /* Want to write at least 2 bytes */
+ run_test(NULL, 0, pattern2, sizeof pattern2);
+ run_test(NULL, 1, pattern2, sizeof pattern2);
+
+ /* Want to write at least 3 bytes */
+ run_test(NULL, 0, pattern3, sizeof pattern3);
+ run_test(NULL, 1, pattern3, sizeof pattern3);
+
+ /* Want to write at least 4 bytes */
+ run_test(NULL, 0, pattern4, sizeof pattern4);
+ run_test(NULL, 1, pattern4, sizeof pattern4);
+ run_test(NULL, 2, pattern4, sizeof pattern4);
+ run_test(NULL, 3, pattern4, sizeof pattern4);
+
+ /* When both operands are exhausted, cc=0 takes precedence.
+ (test1 tests this for len == 0) */
+ printf("\n------------- test4 ----------------\n");
+ run_test(buff, 2, pattern1, 8);
+
+ /* Input contains invalid characters */
+
+ // As conversion stops upon encountering an invalid character, we
+ // need to test each invalid character separately, to make sure it
+ // is recognized as invalid.
+
+ printf("\n------------- test5 ----------------\n");
+ for (i = 0; i < sizeof invalid / 4; ++i) {
+ run_test(buff, sizeof buff, invalid + i, 4);
+ }
+ run_test(buff, 0, invalid, sizeof invalid); // cc = 2
+ run_test(buff, 100, invalid, sizeof invalid);
+
+ /* Convert all pattern buffers */
+ printf("\n------------- test6 ----------------\n");
+ run_test(buff, sizeof buff, pattern1, sizeof pattern1);
+ run_test(buff, sizeof buff, pattern2, sizeof pattern2);
+ run_test(buff, sizeof buff, pattern3, sizeof pattern3);
+ run_test(buff, sizeof buff, pattern4, sizeof pattern4);
+ run_test(buff, sizeof buff, mixed, sizeof mixed);
+
+ /* Make sure we only write the exact number of bytes (and not more) */
+
+ /* Write 1 byte */
+ printf("\n------------- test7.0 ----------------\n");
+ write_and_check(pattern1 + 2, 4, 1);
+
+ /* Write 2 bytes */
+ printf("\n------------- test7.1 ----------------\n");
+ write_and_check(pattern2 + 3, 4, 2);
+
+ /* Write 3 bytes */
+ printf("\n------------- test7.2 ----------------\n");
+ write_and_check(pattern3 + 6, 4, 3);
+
+ /* Write 4 bytes */
+ printf("\n------------- test7.3 ----------------\n");
+ write_and_check(pattern4 + 5, 4, 4);
+
+ return 0;
+}
+
+
+void
+write_and_check_aux(uint32_t *input, unsigned num_input_bytes,
+ unsigned num_expected_output_bytes,
+ unsigned fill_byte)
+{
+ int num_errors, i;
+
+ /* Fill output buffer with FILL_BYTE */
+ memset(buff, fill_byte, sizeof buff);
+
+ /* Execute cu41 */
+ run_test(buff, sizeof buff, input, num_input_bytes);
+
+ /* Make sure the rest of the buffer is unmodified. */
+ num_errors = 0;
+ for (i = num_expected_output_bytes; i < sizeof buff; ++i)
+ if (((unsigned char *)buff)[i] != fill_byte) ++num_errors;
+ if (num_errors)
+ fprintf(stderr, "*** wrote more than %d bytes\n",
+ num_expected_output_bytes);
+}
+
+void
+write_and_check(uint32_t *input, unsigned num_input_bytes,
+ unsigned num_expected_output_bytes)
+{
+ write_and_check_aux(input, num_input_bytes, num_expected_output_bytes, 0x0);
+
+ /* Run again with different fill pattern to make sure we did not write
+ an extra 0x0 byte */
+ write_and_check_aux(input, num_input_bytes, num_expected_output_bytes, 0xFF);
+}
Modified: trunk/docs/internals/s390-opcodes.csv (+1 -1)
===================================================================
--- trunk/docs/internals/s390-opcodes.csv 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/docs/internals/s390-opcodes.csv 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -662,7 +662,7 @@
cu24,"convert utf-16 to utf-32",implemented
cu21,"convert utf-16 to utf-8",implemented
cu42,"convert utf-32 to utf-16",implemented
-cu41,"convert utf-32 to utf-8","not implemented","open bugzilla"
+cu41,"convert utf-32 to utf-8",implemented
cu12,"convert utf-8 to utf-16",implemented
cu14,"convert utf-8 to utf-32",implemented
srstu,"search string unicode","not implemented",
Modified: trunk/NEWS (+1 -0)
===================================================================
--- trunk/NEWS 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/NEWS 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -182,6 +182,7 @@
289656 == 273475 (Add support for AVX instructions)
289699 vgdb connection in relay mode erroneously closed due to buffer overrun
289823 == 293754 (PCMPxSTRx not implemented for 16-bit characters)
+289839 s390x: Provide support for unicode conversion instructions
289939 monitor cmd 'leak_check' with details about leaked or reachable blocks
290006 memcheck doesn't mark %xmm as initialized after "pcmpeqw %xmm %xmm"
290655 Add support for AESKEYGENASSIST instruction
Modified: trunk/docs/internals/3_7_BUGSTATUS.txt (+0 -4)
===================================================================
--- trunk/docs/internals/3_7_BUGSTATUS.txt 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/docs/internals/3_7_BUGSTATUS.txt 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -71,10 +71,6 @@
289836 Unhanded instructions mfatbu and mfatbl
ppc e500 insns
-289839 s390x:Provide support for unicode conversion instruction
- like cu21,cu12,cu42 etc.
- s390 This will not be ready for 3.8.0
-
289912 link_tool_exe_darwin should not use relative paths
unsupported build configuration; low prio
Added: trunk/none/tests/s390x/cu41.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/cu41.stderr.exp 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/none/tests/s390x/cu41.stderr.exp 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/cu41.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/cu41.vgtest 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/none/tests/s390x/cu41.vgtest 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -0,0 +1 @@
+prog: cu41
Modified: trunk/none/tests/s390x/Makefile.am (+1 -1)
===================================================================
--- trunk/none/tests/s390x/Makefile.am 2012-08-05 22:35:02 +01:00 (rev 12850)
+++ trunk/none/tests/s390x/Makefile.am 2012-08-06 01:10:53 +01:00 (rev 12851)
@@ -8,7 +8,7 @@
op_exception fgx stck stckf stcke stfle cksm mvcl clcl troo \
trto trot trtt tr tre cij cgij clij clgij crj cgrj clrj clgrj \
cs csg cds cdsg cu21 cu21_1 cu24 cu24_1 cu42 cu12 cu12_1 \
- ex_sig ex_clone cu14 cu14_1
+ ex_sig ex_clone cu14 cu14_1 cu41
check_PROGRAMS = $(INSN_TESTS) \
allexec \
|
|
From: <sv...@va...> - 2012-08-06 00:08:02
|
florian 2012-08-06 01:07:54 +0100 (Mon, 06 Aug 2012)
New Revision: 2461
Log:
Add support for the cu41 insn. This completes the unicode conversion
insns and fixes #289839.
Modified files:
trunk/priv/guest_s390_defs.h
trunk/priv/guest_s390_helpers.c
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_helpers.c (+70 -0)
===================================================================
--- trunk/priv/guest_s390_helpers.c 2012-08-05 16:36:51 +01:00 (rev 2460)
+++ trunk/priv/guest_s390_helpers.c 2012-08-06 01:07:54 +01:00 (rev 2461)
@@ -531,6 +531,76 @@
/*------------------------------------------------------------*/
+/*--- Clean helper for CU41. ---*/
+/*------------------------------------------------------------*/
+
+/* The function performs a CU41 operation. It returns three things
+ encoded in an ULong value:
+ - the converted bytes (at most 4)
+ - the number of converted bytes (1, 2, 3, or 4; 0 if invalid character)
+ - an indication whether the UTF-32 character is invalid
+
+ 64 48 16 8 0
+ +-------+-----------------+-----------+-------------------+
+ | 0x0 | converted bytes | num_bytes | invalid_character |
+ +-------+-----------------+-----------+-------------------+
+*/
+ULong
+s390_do_cu41(UInt srcval)
+{
+ ULong retval;
+ UInt num_bytes, invalid_character = 0;
+
+ if (srcval <= 0x7f) {
+ retval = srcval;
+ num_bytes = 1;
+ } else if (srcval >= 0x80 && srcval <= 0x7ff) {
+ UInt fghij = srcval >> 6;
+ UInt klmnop = srcval & 0x3f;
+ UInt byte1 = (0xc0 | fghij);
+ UInt byte2 = (0x80 | klmnop);
+
+ retval = (byte1 << 8) | byte2;
+ num_bytes = 2;
+ } else if ((srcval >= 0x800 && srcval <= 0xd7ff) ||
+ (srcval >= 0xdc00 && srcval <= 0xffff)) {
+ UInt abcd = srcval >> 12;
+ UInt efghij = (srcval >> 6) & 0x3f;
+ UInt klmnop = srcval & 0x3f;
+ UInt byte1 = 0xe0 | abcd;
+ UInt byte2 = 0x80 | efghij;
+ UInt byte3 = 0x80 | klmnop;
+
+ retval = (byte1 << 16) | (byte2 << 8) | byte3;
+ num_bytes = 3;
+ } else if (srcval >= 0x10000 && srcval <= 0x10ffff) {
+ UInt uvw = (srcval >> 18) & 0x7;
+ UInt xy = (srcval >> 16) & 0x3;
+ UInt efgh = (srcval >> 12) & 0xf;
+ UInt ijklmn = (srcval >> 6) & 0x3f;
+ UInt opqrst = srcval & 0x3f;
+ UInt byte1 = 0xf0 | uvw;
+ UInt byte2 = 0x80 | (xy << 4) | efgh;
+ UInt byte3 = 0x80 | ijklmn;
+ UInt byte4 = 0x80 | opqrst;
+
+ retval = (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4;
+ num_bytes = 4;
+ } else {
+ /* d800 ... dbff or 00110000 ... ffffffff */
+ invalid_character = 1;
+
+ retval = 0;
+ num_bytes = 0;
+ }
+
+ /* At this point RETVAL contains the converted bytes.
+ Build up the final return value. */
+ return (retval << 16) | (num_bytes << 8) | invalid_character;
+}
+
+
+/*------------------------------------------------------------*/
/*--- Clean helpers for CU12. ---*/
/*------------------------------------------------------------*/
Modified: trunk/priv/guest_s390_toIR.c (+93 -1)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2012-08-05 16:36:51 +01:00 (rev 2460)
+++ trunk/priv/guest_s390_toIR.c 2012-08-06 01:07:54 +01:00 (rev 2461)
@@ -11472,6 +11472,97 @@
}
static IRExpr *
+s390_call_cu41(IRExpr *srcval)
+{
+ IRExpr **args, *call;
+ args = mkIRExprVec_1(srcval);
+ call = mkIRExprCCall(Ity_I64, 0 /*regparm*/,
+ "s390_do_cu41", &s390_do_cu41, args);
+
+ /* Nothing is excluded from definedness checking. */
+ call->Iex.CCall.cee->mcx_mask = 0;
+
+ return call;
+}
+
+static HChar *
+s390_irgen_CU41(UChar r1, UChar r2)
+{
+ IRTemp addr1 = newTemp(Ity_I64);
+ IRTemp addr2 = newTemp(Ity_I64);
+ IRTemp len1 = newTemp(Ity_I64);
+ IRTemp len2 = newTemp(Ity_I64);
+
+ assign(addr1, get_gpr_dw0(r1));
+ assign(addr2, get_gpr_dw0(r2));
+ assign(len1, get_gpr_dw0(r1 + 1));
+ assign(len2, get_gpr_dw0(r2 + 1));
+
+ /* We're processing the 2nd operand 4 bytes at a time. Therefore, if
+ there are less than 4 bytes left, then the 2nd operand is exhausted
+ and we're done here. cc = 0 */
+ s390_cc_set(0);
+ next_insn_if(binop(Iop_CmpLT64U, mkexpr(len2), mkU64(4)));
+
+ /* Read the 2nd operand. */
+ IRTemp srcval = newTemp(Ity_I32);
+ assign(srcval, load(Ity_I32, mkexpr(addr2)));
+
+ /* Call the helper */
+ IRTemp retval = newTemp(Ity_I64);
+ assign(retval, s390_call_cu41(mkexpr(srcval)));
+
+ /* If the UTF-32 character was invalid, set cc=2 and we're done.
+ cc=2 outranks cc=1 (1st operand exhausted) */
+ IRExpr *invalid_character = binop(Iop_And64, mkexpr(retval), mkU64(0xff));
+
+ s390_cc_set(2);
+ next_insn_if(binop(Iop_CmpEQ64, invalid_character, mkU64(1)));
+
+ /* Now test whether the 1st operand is exhausted */
+ IRTemp num_bytes = newTemp(Ity_I64);
+ assign(num_bytes, binop(Iop_And64,
+ binop(Iop_Shr64, mkexpr(retval), mkU8(8)),
+ mkU64(0xff)));
+ s390_cc_set(1);
+ next_insn_if(binop(Iop_CmpLT64U, mkexpr(len1), mkexpr(num_bytes)));
+
+ /* Extract the bytes to be stored at addr1 */
+ IRTemp data = newTemp(Ity_I64);
+ assign(data, binop(Iop_Shr64, mkexpr(retval), mkU8(16)));
+
+ /* To store the bytes construct 4 dirty helper calls. The helper calls
+ are guarded (num_bytes == 1, num_bytes == 2, etc) such that only
+ one of them will be called at runtime. */
+ int i;
+ for (i = 1; i <= 4; ++i) {
+ IRDirty *d;
+
+ d = unsafeIRDirty_0_N(0 /* regparms */, "s390x_dirtyhelper_CUxy",
+ &s390x_dirtyhelper_CUxy,
+ mkIRExprVec_3(mkexpr(addr1), mkexpr(data),
+ mkexpr(num_bytes)));
+ d->guard = binop(Iop_CmpEQ64, mkexpr(num_bytes), mkU64(i));
+ d->mFx = Ifx_Write;
+ d->mAddr = mkexpr(addr1);
+ d->mSize = i;
+ stmt(IRStmt_Dirty(d));
+ }
+
+ /* Update source address and length */
+ put_gpr_dw0(r2, binop(Iop_Add64, mkexpr(addr2), mkU64(4)));
+ put_gpr_dw0(r2 + 1, binop(Iop_Sub64, mkexpr(len2), mkU64(4)));
+
+ /* Update destination address and length */
+ put_gpr_dw0(r1, binop(Iop_Add64, mkexpr(addr1), mkexpr(num_bytes)));
+ put_gpr_dw0(r1 + 1, binop(Iop_Sub64, mkexpr(len1), mkexpr(num_bytes)));
+
+ iterate();
+
+ return "cu41";
+}
+
+static IRExpr *
s390_call_cu12_cu14_helper1(IRExpr *byte1, IRExpr *etf3_and_m3_is_1)
{
IRExpr **args, *call;
@@ -12497,7 +12588,8 @@
case 0xb9b1: s390_format_RRF_M0RERE(s390_irgen_CU24, ovl.fmt.RRF3.r3,
ovl.fmt.RRF3.r1, ovl.fmt.RRF3.r2);
goto ok;
- case 0xb9b2: /* CU41 */ goto unimplemented;
+ case 0xb9b2: s390_format_RRE_RR(s390_irgen_CU41, ovl.fmt.RRE.r1,
+ ovl.fmt.RRE.r2); goto ok;
case 0xb9b3: s390_format_RRE_RR(s390_irgen_CU42, ovl.fmt.RRE.r1,
ovl.fmt.RRE.r2); goto ok;
case 0xb9bd: /* TRTRE */ goto unimplemented;
Modified: trunk/priv/guest_s390_defs.h (+1 -0)
===================================================================
--- trunk/priv/guest_s390_defs.h 2012-08-05 16:36:51 +01:00 (rev 2460)
+++ trunk/priv/guest_s390_defs.h 2012-08-06 01:07:54 +01:00 (rev 2461)
@@ -88,6 +88,7 @@
ULong stuff);
ULong s390_do_cu21(UInt srcvalue, UInt low_surrogate);
ULong s390_do_cu24(UInt srcvalue, UInt low_surrogate);
+ULong s390_do_cu41(UInt srcvalue);
ULong s390_do_cu42(UInt srcvalue);
UInt s390_do_cvb(ULong decimal);
ULong s390_do_cvd(ULong binary);
|