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
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
(4) |
2
(7) |
3
(29) |
4
(2) |
|
5
(2) |
6
(14) |
7
(4) |
8
(17) |
9
(19) |
10
(17) |
11
(18) |
|
12
(21) |
13
(22) |
14
(16) |
15
(14) |
16
(2) |
17
|
18
(3) |
|
19
|
20
(1) |
21
(14) |
22
(9) |
23
(13) |
24
|
25
|
|
26
(1) |
27
(12) |
28
(2) |
29
(17) |
30
(14) |
31
(5) |
|
|
From: <sv...@va...> - 2013-05-11 22:23:37
|
petarj 2013-05-11 23:23:27 +0100 (Sat, 11 May 2013)
New Revision: 13388
Log:
mips: define allexec files as soft links
This change is a follow up to r13385. It removes physical copies of the
allexec c-files in none/tests/mips32/ and none/tests/mips64/ and defines
them as soft-links to a common file like other arches do.
Credits to Philippe for noticing it.
Added files:
trunk/none/tests/mips32/allexec.c
trunk/none/tests/mips64/allexec.c
Removed files:
trunk/none/tests/mips32/allexec.c
trunk/none/tests/mips64/allexec.c
Property changed: trunk/none/tests/mips64/allexec.c (+0 -0)
___________________________________________________________________
Name: svn:special
+ *
Added: trunk/none/tests/mips64/allexec.c (+1 -0)
===================================================================
--- trunk/none/tests/mips64/allexec.c 2013-05-11 16:05:04 +01:00 (rev 13387)
+++ trunk/none/tests/mips64/allexec.c 2013-05-11 23:23:27 +01:00 (rev 13388)
@@ -0,0 +1 @@
+link ../allexec.c
\ No newline at end of file
Deleted: trunk/none/tests/mips64/allexec.c (+0 -50)
===================================================================
--- trunk/none/tests/mips64/allexec.c 2013-05-11 16:05:04 +01:00 (rev 13387)
+++ trunk/none/tests/mips64/allexec.c 2013-05-11 23:23:27 +01:00 (rev 13388)
@@ -1,50 +0,0 @@
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-extern char **environ;
-
-#define S(...) (fprintf(stdout, __VA_ARGS__),fflush(stdout))
-#define FORKEXECWAIT(exec_call) do { \
- int status;\
- pid_t child = fork(); \
- if (child == 0) {exec_call; perror ("exec failed");} \
- else if (child == -1) perror ("cannot fork\n"); \
- else if (child != wait (&status)) perror ("error waiting child"); \
- else S("child exited\n"); \
- } while (0)
-
-void test_allexec (char *exec)
-{
- FORKEXECWAIT (execlp(exec, exec, NULL));
- FORKEXECWAIT (execlp(exec, exec, "constant_arg1", "constant_arg2", NULL));
- FORKEXECWAIT (execve(exec, NULL, environ));
-}
-
-
-/* If a single argument "exec" is given, will execute itself
- (in bi-arch, a 32 bit and 64 bit variant) via various exec system calls.
- Note that this test can only be run after the prerequisite have been
- prepared by allexec_prepare_prereq, which will a.o. make links
- for the allexec32 and allexec64 executables. On single arch build,
- these links points to the same executable to ensure this test works
- everywhere the same.
- No arguments or more arguments means just print its args. */
-int main(int argc, char **argv, char **envp)
-{
- if ( (argc == 2) && (strcmp (argv[1], "exec") == 0)) {
- S("%s will exec ./allexec32\n", argv[0]);
- test_allexec ("./allexec32");
- S("%s will exec ./allexec64\n", argv[0]);
- test_allexec ("./allexec64");
- } else {
- int i;
- S("program exec-ed:");
- for (i = 0; i < argc; i++) S(" %s", argv[i]);
- S("\n");
- }
- return 0;
-}
Property changed: trunk/none/tests/mips32/allexec.c (+0 -0)
___________________________________________________________________
Name: svn:special
+ *
Added: trunk/none/tests/mips32/allexec.c (+1 -0)
===================================================================
--- trunk/none/tests/mips32/allexec.c 2013-05-11 16:05:04 +01:00 (rev 13387)
+++ trunk/none/tests/mips32/allexec.c 2013-05-11 23:23:27 +01:00 (rev 13388)
@@ -0,0 +1 @@
+link ../allexec.c
\ No newline at end of file
Deleted: trunk/none/tests/mips32/allexec.c (+0 -50)
===================================================================
--- trunk/none/tests/mips32/allexec.c 2013-05-11 16:05:04 +01:00 (rev 13387)
+++ trunk/none/tests/mips32/allexec.c 2013-05-11 23:23:27 +01:00 (rev 13388)
@@ -1,50 +0,0 @@
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-extern char **environ;
-
-#define S(...) (fprintf(stdout, __VA_ARGS__),fflush(stdout))
-#define FORKEXECWAIT(exec_call) do { \
- int status;\
- pid_t child = fork(); \
- if (child == 0) {exec_call; perror ("exec failed");} \
- else if (child == -1) perror ("cannot fork\n"); \
- else if (child != wait (&status)) perror ("error waiting child"); \
- else S("child exited\n"); \
- } while (0)
-
-void test_allexec (char *exec)
-{
- FORKEXECWAIT (execlp(exec, exec, NULL));
- FORKEXECWAIT (execlp(exec, exec, "constant_arg1", "constant_arg2", NULL));
- FORKEXECWAIT (execve(exec, NULL, environ));
-}
-
-
-/* If a single argument "exec" is given, will execute itself
- (in bi-arch, a 32 bit and 64 bit variant) via various exec system calls.
- Note that this test can only be run after the prerequisite have been
- prepared by allexec_prepare_prereq, which will a.o. make links
- for the allexec32 and allexec64 executables. On single arch build,
- these links points to the same executable to ensure this test works
- everywhere the same.
- No arguments or more arguments means just print its args. */
-int main(int argc, char **argv, char **envp)
-{
- if ( (argc == 2) && (strcmp (argv[1], "exec") == 0)) {
- S("%s will exec ./allexec32\n", argv[0]);
- test_allexec ("./allexec32");
- S("%s will exec ./allexec64\n", argv[0]);
- test_allexec ("./allexec64");
- } else {
- int i;
- S("program exec-ed:");
- for (i = 0; i < argc; i++) S(" %s", argv[i]);
- S("\n");
- }
- return 0;
-}
|
|
From: <sv...@va...> - 2013-05-11 15:05:14
|
florian 2013-05-11 16:05:04 +0100 (Sat, 11 May 2013)
New Revision: 13387
Log:
s390: valgrind side support for PFPO. New hwcap added.
See companion patch VEX r2719.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ #307113
Added files:
trunk/none/tests/s390x/pfpo.c
trunk/none/tests/s390x/pfpo.stderr.exp
trunk/none/tests/s390x/pfpo.stdout.exp
trunk/none/tests/s390x/pfpo.vgtest
Modified directories:
trunk/none/tests/s390x/
Modified files:
trunk/coregrind/m_machine.c
trunk/none/tests/s390x/Makefile.am
trunk/tests/s390x_features.c
Modified: trunk/none/tests/s390x/
Added: trunk/none/tests/s390x/pfpo.vgtest (+2 -0)
===================================================================
--- trunk/none/tests/s390x/pfpo.vgtest 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/none/tests/s390x/pfpo.vgtest 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -0,0 +1,2 @@
+prog: pfpo
+prereq: test -e pfpo && ../../../tests/s390x_features s390x-pfpo
Modified: trunk/coregrind/m_machine.c (+1 -0)
===================================================================
--- trunk/coregrind/m_machine.c 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/coregrind/m_machine.c 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -1252,6 +1252,7 @@
{ False, S390_FAC_STCKF, VEX_HWCAPS_S390X_STCKF, "STCKF" },
{ False, S390_FAC_FPEXT, VEX_HWCAPS_S390X_FPEXT, "FPEXT" },
{ False, S390_FAC_LSC, VEX_HWCAPS_S390X_LSC, "LSC" },
+ { False, S390_FAC_PFPO, VEX_HWCAPS_S390X_PFPO, "PFPO" },
};
/* Set hwcaps according to the detected facilities */
Added: trunk/none/tests/s390x/pfpo.stdout.exp (+182 -0)
===================================================================
--- trunk/none/tests/s390x/pfpo.stdout.exp 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/none/tests/s390x/pfpo.stdout.exp 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -0,0 +1,182 @@
+pfpo test: function=81090600 ret=0 cc=0
+pfpo test: function=81990600 ret=0 cc=3
+round=0 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=0 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=0 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=0 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=0 3c000000000001 -> 0.000000 ret=0 cc=1
+round=0 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=0 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=0 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=0 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=0 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=0 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=0 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=0 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=0 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=0 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=0 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=0 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=0 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=1 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=1 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=1 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=1 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=1 3c000000000001 -> 0.000000 ret=0 cc=1
+round=1 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=1 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=1 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=1 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=1 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=1 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=1 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=1 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=1 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=1 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=1 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=1 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=1 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=8 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=8 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=8 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=8 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=8 3c000000000001 -> 0.000000 ret=0 cc=1
+round=8 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=8 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=8 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=8 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=8 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=8 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=8 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=8 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=8 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=8 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=8 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=8 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=8 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=9 123456789999.565674 -> 262934b9c7fa7f56 ret=0 cc=1
+round=9 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=9 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b195 ret=0 cc=1
+round=9 262934b9c7fa7f57 -> 123456789999.565689 ret=0 cc=1
+round=9 3c000000000001 -> 0.000000 ret=0 cc=1
+round=9 77fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=9 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=9 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=9 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c43 ret=0 cc=1
+round=9 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=9 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=9 77ffcff3fcff3fcff3fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=9 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9778 ret=0 cc=1
+round=9 0.000000 -> d2ede220cc32483ba1962ddf1d687d2 ret=0 cc=1
+round=9 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=9 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=9 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=9 2239c0000000000000000016 -> 159999999999999999999999999999999981967451960713347652646954378648835054196656431469501071806818470701403544010634248613895135655802310342557603066270931617117849608473951398449804804366242587112112128.000000 ret=0 cc=1
+round=a 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=a 0.000000 -> 92d251ce3ea1d02 ret=0 cc=1
+round=a 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=a 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=a 3c000000000001 -> 0.000000 ret=0 cc=1
+round=a 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=a 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=a 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca05 ret=0 cc=1
+round=a 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=a 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.750000 ret=0 cc=1
+round=a 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=a 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=a 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=a 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=a 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000001 ret=0 cc=1
+round=a 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=a 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=a 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=b 123456789999.565674 -> 262934b9c7fa7f56 ret=0 cc=1
+round=b 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=b 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b195 ret=0 cc=1
+round=b 262934b9c7fa7f57 -> 123456789999.565689 ret=0 cc=1
+round=b 3c000000000001 -> 0.000000 ret=0 cc=1
+round=b 77fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=b 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=b 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=b 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c43 ret=0 cc=1
+round=b 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=b 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=b 77ffcff3fcff3fcff3fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=b 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9778 ret=0 cc=1
+round=b 0.000000 -> d2ede220cc32483ba1962ddf1d687d2 ret=0 cc=1
+round=b 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=b 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=b 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=b 2239c0000000000000000016 -> 159999999999999999999999999999999981967451960713347652646954378648835054196656431469501071806818470701403544010634248613895135655802310342557603066270931617117849608473951398449804804366242587112112128.000000 ret=0 cc=1
+round=c 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=c 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=c 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=c 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=c 3c000000000001 -> 0.000000 ret=0 cc=1
+round=c 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=c 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=c 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=c 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=c 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=c 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=c 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=c 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=c 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=c 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=c 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=c 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=c 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=d 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=d 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=d 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=d 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=d 3c000000000001 -> 0.000000 ret=0 cc=1
+round=d 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=d 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=d 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=d 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=d 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.500000 ret=0 cc=1
+round=d 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=d 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=d 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=d 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=d 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000000 ret=0 cc=1
+round=d 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=d 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=d 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=e 123456789999.565674 -> 262934b9c7fa7f57 ret=0 cc=1
+round=e 0.000000 -> 92d251ce3ea1d02 ret=0 cc=1
+round=e 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=e 262934b9c7fa7f57 -> 123456789999.565704 ret=0 cc=1
+round=e 3c000000000001 -> 0.000000 ret=0 cc=1
+round=e 77fcff3fcff3fcff -> inf ret=0 cc=1
+round=e 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=e 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca05 ret=0 cc=1
+round=e 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c44 ret=0 cc=1
+round=e 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.750000 ret=0 cc=1
+round=e 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=e 77ffcff3fcff3fcff3fcff3fcff3fcff -> inf ret=0 cc=1
+round=e 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9779 ret=0 cc=1
+round=e 0.000000 -> d2ede220cc32483ba1962ddf1d687d3 ret=0 cc=1
+round=e 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000001 ret=0 cc=1
+round=e 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=e 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=e 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
+round=f 123456789999.565674 -> 262934b9c7fa7f56 ret=0 cc=1
+round=f 0.000000 -> 92d251ce3ea1d01 ret=0 cc=1
+round=f 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 46cffbcecb45b196 ret=0 cc=1
+round=f 262934b9c7fa7f57 -> 123456789999.565689 ret=0 cc=1
+round=f 3c000000000001 -> 0.000000 ret=0 cc=1
+round=f 77fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=f 123456789999.565674 -> 22050000000028e56f3cffb97734b8a5 ret=0 cc=0
+round=f 0.000000 -> 29b2d251ce3ea1d016ac1a4cb976ca04 ret=0 cc=1
+round=f 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -> 264cffbcecb45b195e20c55d13765c43 ret=0 cc=1
+round=f 220640000000049c5de0ff3fe9fd5bcf -> 1234567899999999.750000 ret=0 cc=1
+round=f 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=f 77ffcff3fcff3fcff3fcff3fcff3fcff -> 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 ret=0 cc=1
+round=f 1234567812345678912345678912.565679 -> 2606934b9d1c71778671c5de19cb9778 ret=0 cc=1
+round=f 0.000000 -> d2ede220cc32483ba1962ddf1d687d2 ret=0 cc=1
+round=f 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 -> 2631f0000000000000000001 ret=0 cc=1
+round=f 2606934b9d1c71778671c5de19cb9779 -> 1234567812345678912345678912.565679 ret=0 cc=1
+round=f 840000000000000000001 -> 0.000000 ret=0 cc=1
+round=f 2239c0000000000000000016 -> 160000000000000000000000000000000011451533404631639467034099542619685764485103465972941918495930191370342312699297155536760176106261431760279282994113469896575542029761393840336009893684180428123013120.000000 ret=0 cc=1
Modified: trunk/none/tests/s390x/Makefile.am (+3 -2)
===================================================================
--- trunk/none/tests/s390x/Makefile.am 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/none/tests/s390x/Makefile.am 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -19,7 +19,7 @@
spechelper-icm-1 spechelper-icm-2 spechelper-tmll \
spechelper-tm laa
if BUILD_DFP_TESTS
- INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt
+ INSN_TESTS += dfp-1 dfp-2 dfp-3 dfp-4 dfptest dfpext dfpconv srnmt pfpo
endif
check_PROGRAMS = $(INSN_TESTS) \
@@ -44,7 +44,8 @@
dfptest.stderr.exp dfptest.stdout.exp dfptest.vgtest \
dfpext.stderr.exp dfpext.stdout.exp dfpext.vgtest \
dfpconv.stderr.exp dfpconv.stdout.exp dfpconv.vgtest \
- srnmt.stderr.exp srnmt.stdout.exp srnmt.vgtest
+ srnmt.stderr.exp srnmt.stdout.exp srnmt.vgtest \
+ pfpo.stderr.exp pfpo.stdout.exp pfpo.vgtest
AM_CFLAGS += @FLAG_M64@
AM_CXXFLAGS += @FLAG_M64@
Modified: trunk/tests/s390x_features.c (+2 -0)
===================================================================
--- trunk/tests/s390x_features.c 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/tests/s390x_features.c 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -227,6 +227,8 @@
match = facilities & FAC_BIT(37);
} else if (strcmp(feature, "s390x-dfp") == 0 ) {
match = facilities & FAC_BIT(42);
+ } else if (strcmp(feature, "s390x-pfpo") == 0 ) {
+ match = facilities & FAC_BIT(44);
} else {
return 2; // Unrecognised feature.
}
Added: trunk/none/tests/s390x/pfpo.c (+217 -0)
===================================================================
--- trunk/none/tests/s390x/pfpo.c 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/none/tests/s390x/pfpo.c 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -0,0 +1,217 @@
+#include <stdio.h>
+#include <stdint.h>
+#include "dfp_utils.h"
+#define __STDC_WANT_DEC_FP__ 1
+#include <float.h>
+
+#ifndef PFPO_FUNCTIONS
+#define PFPO_FUNCTIONS
+#define PFPO_F64_TO_D64 0x01090600
+#define PFPO_D64_TO_F64 0x01060900
+#define PFPO_F64_TO_D128 0x010A0600
+#define PFPO_D128_TO_F64 0x01060A00
+#define PFPO_F128_TO_D128 0x010A0700
+#define PFPO_D128_TO_F128 0x01070A00
+#endif
+
+/* Test BFP <-> DFP conversions */
+
+void pfpo_test(unsigned long fn_code)
+{
+ register _Decimal64 d64 asm("f0");
+ register unsigned long fn asm("0") = fn_code;
+ register unsigned int ret asm("1");
+ int cc;
+
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(d64),"=d"(ret), "=d" (cc)
+ :"d"(fn)
+ );
+ printf("pfpo test: function=%lx ret=%d cc=%d\n", fn_code, ret, cc);
+}
+
+void pfpo_f64_to_d64(double src, uint8_t rm)
+{
+ register double f64 asm("f4") = src;
+ register _Decimal64 d64 asm("f0");
+ register unsigned long fn asm("0") = PFPO_F64_TO_D64 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ _Decimal64 dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(d64), "=d"(ret), "=d" (cc)
+ :"f"(f64), "d"(fn)
+ );
+ ret_code = ret;
+ dest = d64;
+
+ printf("round=%x %lf -> ", rm, src);
+ DFP_VAL_PRINT(dest, _Decimal64);
+ printf(" ret=%d cc=%d\n", ret_code, cc);
+}
+
+void pfpo_d64_to_f64(_Decimal64 src, uint8_t rm)
+{
+ register _Decimal64 d64 asm("f4") = src;
+ register double f64 asm("f0");
+ register unsigned long fn asm("0") = PFPO_D64_TO_F64 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ double dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(f64), "=d"(ret), "=d" (cc)
+ :"f"(d64), "d"(fn)
+ );
+ ret_code = ret;
+ dest = f64;
+
+ printf("round=%x ", rm);
+ DFP_VAL_PRINT(src, _Decimal64);
+ printf(" -> %lf ret=%d cc=%d\n", dest, ret_code, cc);
+}
+
+void pfpo_f64_to_d128(double src, uint8_t rm)
+{
+ register double f64 asm("f4") = src;
+ register _Decimal128 d128 asm("f0");
+ register unsigned long fn asm("0") = PFPO_F64_TO_D128 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ _Decimal128 dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(d128), "=d"(ret), "=d" (cc)
+ :"f"(f64), "d"(fn)
+ );
+ ret_code = ret;
+ dest = d128;
+
+ printf("round=%x %lf -> ", rm, src);
+ DFP_VAL_PRINT(dest, _Decimal128);
+ printf(" ret=%d cc=%d\n", ret_code, cc);
+}
+
+void pfpo_d128_to_f64(_Decimal128 src, uint8_t rm)
+{
+ register _Decimal128 d128 asm("f4") = src;
+ register double f64 asm("f0");
+ register unsigned long fn asm("0") = PFPO_D128_TO_F64 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ double dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(f64), "=d"(ret), "=d" (cc)
+ :"f"(d128), "d"(fn)
+ );
+ ret_code = ret;
+ dest = f64;
+
+ printf("round=%x ", rm);
+ DFP_VAL_PRINT(src, _Decimal128);
+ printf(" -> %lf ret=%d cc=%d\n", dest, ret_code, cc);
+}
+
+void pfpo_f128_to_d128(long double src, uint8_t rm)
+{
+ register long double f128 asm("f4") = src;
+ register _Decimal128 d128 asm("f0");
+ register unsigned long fn asm("0") = PFPO_F128_TO_D128 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ _Decimal128 dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(d128), "=d"(ret), "=d" (cc)
+ :"f"(f128), "d"(fn)
+ );
+ ret_code = ret;
+ dest = d128;
+
+ printf("round=%x %Lf -> ", rm, src);
+ DFP_VAL_PRINT(dest, _Decimal128);
+ printf(" ret=%d cc=%d\n", ret_code, cc);
+}
+
+void pfpo_d128_to_f128(_Decimal128 src, uint8_t rm)
+{
+ register _Decimal128 d128 asm("f4") = src;
+ register long double f128 asm("f0");
+ register unsigned long fn asm("0") = PFPO_D128_TO_F128 | (rm & 0xf);
+ register unsigned int ret asm("1");
+ long double dest;
+ unsigned int ret_code;
+ int cc;
+ asm volatile(
+ ".short 0x010a\n\t"
+ "ipm %2\n\t"
+ "srl %2,28\n\t"
+ :"=f"(f128), "=d"(ret), "=d" (cc)
+ :"f"(d128), "d"(fn)
+ );
+ ret_code = ret;
+ dest = f128;
+
+ printf("round=%x ", rm);
+ DFP_VAL_PRINT(src, _Decimal128);
+ printf(" -> %Lf ret=%d cc=%d\n", dest, ret_code, cc);
+}
+
+int main()
+{
+ uint8_t i;
+
+ pfpo_test(0x81090600); /* valid function code */
+ pfpo_test(0x81990600); /* invalid function code */
+
+ for (i = 0; i < 16; i++) {
+ if (i < 2 || i > 7) {
+ pfpo_f64_to_d64(123456789999.5656789, i);
+ pfpo_f64_to_d64(DBL_MIN, i);
+ pfpo_f64_to_d64(DBL_MAX, i);
+
+ pfpo_d64_to_f64(123456789999.5656789DD, i);
+ pfpo_d64_to_f64(DEC64_MIN, i);
+ pfpo_d64_to_f64(DEC64_MAX, i);
+
+ pfpo_f64_to_d128(123456789999.5656789, i);
+ pfpo_f64_to_d128(DBL_MIN, i);
+ pfpo_f64_to_d128(DBL_MAX, i);
+
+ pfpo_d128_to_f64(1234567899999999.5656789DL, i);
+ pfpo_d128_to_f64(DEC128_MIN, i);
+ pfpo_d128_to_f64(DEC128_MAX, i);
+
+ pfpo_f128_to_d128(1234567812345678912345678912.5656789L, i);
+ pfpo_f128_to_d128(LDBL_MIN, i);
+ /* pfpo_f128_to_d128(LDBL_MAX, i); */
+ pfpo_f128_to_d128(1.6E+200L, i);
+
+ pfpo_d128_to_f128(1234567812345678912345678912.5656789DL, i);
+ pfpo_d128_to_f128(DEC128_MIN, i);
+ /* pfpo_d128_to_f128(DEC128_MAX, i); */
+ pfpo_d128_to_f128(1.6E+200DL, i);
+ }
+ }
+ return 0;
+}
Added: trunk/none/tests/s390x/pfpo.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/pfpo.stderr.exp 2013-05-11 14:42:08 +01:00 (rev 13386)
+++ trunk/none/tests/s390x/pfpo.stderr.exp 2013-05-11 16:05:04 +01:00 (rev 13387)
@@ -0,0 +1,2 @@
+
+
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
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
rounding-6
laa
dfp-1
dfp-2
dfp-3
dfp-4
dfptest
dfpext
dfpconv
srnmt
+ .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
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
rounding-6
laa
dfp-1
dfp-2
dfp-3
dfp-4
dfptest
dfpext
dfpconv
srnmt
pfpo
|
|
From: <sv...@va...> - 2013-05-11 15:03:10
|
florian 2013-05-11 16:02:58 +0100 (Sat, 11 May 2013)
New Revision: 2719
Log:
s390: First round of changes to support the PFPO insn.
Support these IROps:
Iop_F64toD64, Iop_D64toF64
Iop_F64toD128, Iop_D128toF64,
Iop_F128toD128, Iop_D128toF128,
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ #307113
Modified files:
trunk/priv/guest_s390_defs.h
trunk/priv/guest_s390_helpers.c
trunk/priv/guest_s390_toIR.c
trunk/priv/host_s390_defs.c
trunk/priv/host_s390_defs.h
trunk/priv/host_s390_isel.c
trunk/priv/main_main.c
trunk/priv/s390_defs.h
trunk/pub/libvex.h
trunk/pub/libvex_emnote.h
Modified: trunk/priv/s390_defs.h (+10 -0)
===================================================================
--- trunk/priv/s390_defs.h 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/s390_defs.h 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -123,6 +123,16 @@
S390_FPC_DFP_ROUND_PREPARE_SHORT = 7
} s390_fpc_dfp_round_t;
+/* PFPO function code as it is encoded in bits [33:55] of GP0
+ when PFPO insn is executed. */
+typedef enum {
+ S390_PFPO_F64_TO_D64 = 0x010906,
+ S390_PFPO_D64_TO_F64 = 0x010609,
+ S390_PFPO_F64_TO_D128 = 0x010A06,
+ S390_PFPO_D128_TO_F64 = 0x01060A,
+ S390_PFPO_F128_TO_D128 = 0x010A07,
+ S390_PFPO_D128_TO_F128 = 0x01070A
+} s390_pfpo_function_t;
/* The length of the longest mnemonic: locgrnhe */
#define S390_MAX_MNEMONIC_LEN 8
Modified: trunk/pub/libvex_emnote.h (+7 -0)
===================================================================
--- trunk/pub/libvex_emnote.h 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/pub/libvex_emnote.h 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -107,6 +107,13 @@
available on this host */
EmFail_S390X_fpext,
+ /* GPR 0 contains invalid rounding mode for PFPO instruction */
+ EmFail_S390X_invalid_PFPO_rounding_mode,
+
+ /* The function code specified in GPR 0 executed by PFPO
+ instruction is invalid */
+ EmFail_S390X_invalid_PFPO_function,
+
EmNote_NUMBER
}
VexEmNote;
Modified: trunk/priv/host_s390_defs.h (+30 -0)
===================================================================
--- trunk/priv/host_s390_defs.h 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/host_s390_defs.h 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -147,6 +147,7 @@
S390_INSN_DFP_COMPARE,
S390_INSN_DFP_CONVERT,
S390_INSN_DFP_REROUND,
+ S390_INSN_FP_CONVERT,
S390_INSN_MFENCE,
S390_INSN_MIMM, /* Assign an immediate constant to a memory location */
S390_INSN_MADD, /* Add a value to a memory location */
@@ -266,6 +267,15 @@
S390_DFP_D128_TO_U64
} s390_dfp_conv_t;
+typedef enum {
+ S390_FP_F64_TO_D64,
+ S390_FP_D64_TO_F64,
+ S390_FP_F64_TO_D128,
+ S390_FP_D128_TO_F64,
+ S390_FP_F128_TO_D128,
+ S390_FP_D128_TO_F128
+} s390_fp_conv_t;
+
/* The kind of binary DFP operations */
typedef enum {
S390_DFP_ADD,
@@ -323,6 +333,16 @@
} s390_dfp_binop;
typedef struct {
+ s390_fp_conv_t tag;
+ s390_dfp_round_t rounding_mode;
+ HReg dst_hi; /* 128-bit result high part; 32/64-bit result */
+ HReg dst_lo; /* 128-bit result low part */
+ HReg op_hi; /* 128-bit operand high part; 32/64-bit opnd */
+ HReg op_lo; /* 128-bit operand low part */
+ HReg r1; /* clobbered register GPR #1 */
+} s390_fp_convert;
+
+typedef struct {
s390_insn_tag tag;
/* Usually, this is the size of the result of an operation.
Exceptions are:
@@ -506,6 +526,9 @@
HReg op_lo; /* 128-bit operand low part */
} dfp_convert;
struct {
+ s390_fp_convert *details;
+ } fp_convert;
+ struct {
s390_dfp_cmp_t tag;
HReg dst; /* condition code in s390 encoding */
HReg op1_hi; /* 128-bit operand high part; 64-bit opnd 1 */
@@ -640,6 +663,11 @@
HReg op, s390_dfp_round_t);
s390_insn *s390_insn_dfp_reround(UChar size, HReg dst, HReg op2, HReg op3,
s390_dfp_round_t);
+s390_insn *s390_insn_fp_convert(UChar size, s390_fp_conv_t tag,
+ HReg dst, HReg op, HReg r1, s390_dfp_round_t);
+s390_insn *s390_insn_fp128_convert(UChar size, s390_fp_conv_t tag,
+ HReg dst_hi, HReg dst_lo, HReg op_hi,
+ HReg op_lo, HReg r1, s390_dfp_round_t);
s390_insn *s390_insn_dfp128_binop(UChar size, s390_dfp_binop_t, HReg dst_hi,
HReg dst_lo, HReg op2_hi, HReg op2_lo,
HReg op3_hi, HReg op3_lo,
@@ -742,6 +770,8 @@
(s390_host_hwcaps & (VEX_HWCAPS_S390X_FPEXT))
#define s390_host_has_lsc \
(s390_host_hwcaps & (VEX_HWCAPS_S390X_LSC))
+#define s390_host_has_pfpo \
+ (s390_host_hwcaps & (VEX_HWCAPS_S390X_PFPO))
#endif /* ndef __VEX_HOST_S390_DEFS_H */
Modified: trunk/priv/host_s390_defs.c (+163 -0)
===================================================================
--- trunk/priv/host_s390_defs.c 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/host_s390_defs.c 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -775,6 +775,19 @@
}
break;
+ case S390_INSN_FP_CONVERT: {
+ s390_fp_convert *fp_convert = insn->variant.fp_convert.details;
+
+ addHRegUse(u, HRmWrite, fp_convert->dst_hi);
+ if (! hregIsInvalid(fp_convert->dst_lo))
+ addHRegUse(u, HRmWrite, fp_convert->dst_lo);
+ addHRegUse(u, HRmRead, fp_convert->op_hi);
+ if (! hregIsInvalid(fp_convert->op_lo))
+ addHRegUse(u, HRmRead, fp_convert->op_lo);
+ addHRegUse(u, HRmWrite, fp_convert->r1);
+ break;
+ }
+
case S390_INSN_MIMM:
s390_amode_get_reg_usage(u, insn->variant.mimm.dst);
break;
@@ -1108,6 +1121,19 @@
}
break;
+ case S390_INSN_FP_CONVERT: {
+ s390_fp_convert *fp_convert = insn->variant.fp_convert.details;
+
+ fp_convert->dst_hi = lookupHRegRemap(m, fp_convert->dst_hi);
+ if (! hregIsInvalid(fp_convert->dst_lo))
+ fp_convert->dst_lo = lookupHRegRemap(m, fp_convert->dst_lo);
+ fp_convert->op_hi = lookupHRegRemap(m, fp_convert->op_hi);
+ if (! hregIsInvalid(fp_convert->op_lo))
+ fp_convert->op_lo = lookupHRegRemap(m, fp_convert->op_lo);
+ fp_convert->r1 = lookupHRegRemap(m, fp_convert->r1);
+ break;
+ }
+
case S390_INSN_MIMM:
s390_amode_map_regs(m, insn->variant.mimm.dst);
break;
@@ -4606,6 +4632,27 @@
static UChar *
+emit_E(UChar *p, UInt op)
+{
+ ULong the_insn = op;
+
+ return emit_2bytes(p, the_insn);
+}
+
+
+static UChar *
+s390_emit_PFPO(UChar *p)
+{
+ vassert(s390_host_has_pfpo);
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) {
+ s390_disasm(ENC1(MNM), "pfpo");
+ }
+
+ return emit_E(p, 0x010a);
+}
+
+
+static UChar *
s390_emit_QADTR(UChar *p, UChar r3, UChar m4, UChar r1, UChar r2)
{
vassert(s390_host_has_dfp);
@@ -5982,6 +6029,57 @@
s390_insn *
+s390_insn_fp_convert(UChar size, s390_fp_conv_t tag, HReg dst, HReg op,
+ HReg r1, s390_dfp_round_t rounding_mode)
+{
+ s390_insn *insn = LibVEX_Alloc(sizeof(s390_insn));
+ s390_fp_convert *fp_convert = LibVEX_Alloc(sizeof(s390_fp_convert));
+
+ vassert(size == 4 || size == 8);
+
+ insn->tag = S390_INSN_FP_CONVERT;
+ insn->size = size;
+ insn->variant.fp_convert.details = fp_convert;
+
+ fp_convert->tag = tag;
+ fp_convert->dst_hi = dst;
+ fp_convert->op_hi = op;
+ fp_convert->r1 = r1;
+ fp_convert->dst_lo = INVALID_HREG;
+ fp_convert->op_lo = INVALID_HREG;
+ fp_convert->rounding_mode = rounding_mode;
+
+ return insn;
+}
+
+
+s390_insn *
+s390_insn_fp128_convert(UChar size, s390_fp_conv_t tag, HReg dst_hi,
+ HReg dst_lo, HReg op_hi, HReg op_lo, HReg r1,
+ s390_dfp_round_t rounding_mode)
+{
+ s390_insn *insn = LibVEX_Alloc(sizeof(s390_insn));
+ s390_fp_convert *fp_convert = LibVEX_Alloc(sizeof(s390_fp_convert));
+
+ vassert(size == 16);
+
+ insn->tag = S390_INSN_FP_CONVERT;
+ insn->size = size;
+ insn->variant.fp_convert.details = fp_convert;
+
+ fp_convert->tag = tag;
+ fp_convert->dst_hi = dst_hi;
+ fp_convert->dst_lo = dst_lo;
+ fp_convert->op_hi = op_hi;
+ fp_convert->r1 = r1;
+ fp_convert->op_lo = op_lo;
+ fp_convert->rounding_mode = rounding_mode;
+
+ return insn;
+}
+
+
+s390_insn *
s390_insn_dfp128_binop(UChar size, s390_dfp_binop_t tag, HReg dst_hi,
HReg dst_lo, HReg op2_hi, HReg op2_lo, HReg op3_hi,
HReg op3_lo, s390_dfp_round_t rounding_mode)
@@ -6821,6 +6919,23 @@
insn->variant.dfp_reround.op3_hi);
break;
+ case S390_INSN_FP_CONVERT: {
+ s390_fp_convert *fp_convert = insn->variant.fp_convert.details;
+
+ switch (fp_convert->tag) {
+ case S390_FP_F64_TO_D64: op = "v-f2d"; break;
+ case S390_FP_D64_TO_F64: op = "v-d2f"; break;
+ case S390_FP_F64_TO_D128: op = "v-f2d"; break;
+ case S390_FP_D128_TO_F64: op = "v-d2f"; break;
+ case S390_FP_F128_TO_D128: op = "v-f2d"; break;
+ case S390_FP_D128_TO_F128: op = "v-d2f"; break;
+ default: goto fail;
+ }
+ s390_sprintf(buf, "%M %R,%R", op, fp_convert->dst_hi,
+ fp_convert->op_hi);
+ break;
+ }
+
case S390_INSN_MFENCE:
s390_sprintf(buf, "%M", "v-mfence");
return buf; /* avoid printing "size = ..." which is meaningless */
@@ -6977,6 +7092,21 @@
goto common;
}
+ case S390_INSN_FP_CONVERT: {
+ s390_fp_convert *fp_convert = insn->variant.fp_convert.details;
+
+ switch (fp_convert->tag) {
+ case S390_FP_F64_TO_D64:
+ case S390_FP_D64_TO_F64:
+ case S390_FP_F64_TO_D128: p += vex_sprintf(p, "8 -> "); goto common;
+ case S390_FP_D128_TO_F64:
+ case S390_FP_F128_TO_D128:
+ case S390_FP_D128_TO_F128: p += vex_sprintf(p, "16 -> "); goto common;
+ default:
+ goto common;
+ }
+ }
+
default:
goto common;
}
@@ -9178,6 +9308,35 @@
static UChar *
+s390_insn_fp_convert_emit(UChar *buf, const s390_insn *insn)
+{
+ UInt pfpo;
+ s390_fp_convert *fp_convert = insn->variant.fp_convert.details;
+ s390_dfp_round_t rm = fp_convert->rounding_mode;
+
+ vassert(rm < 2 || rm > 7);
+
+ switch (fp_convert->tag) {
+ case S390_FP_F64_TO_D64: pfpo = S390_PFPO_F64_TO_D64 << 8; break;
+ case S390_FP_D64_TO_F64: pfpo = S390_PFPO_D64_TO_F64 << 8; break;
+ case S390_FP_F64_TO_D128: pfpo = S390_PFPO_F64_TO_D128 << 8; break;
+ case S390_FP_D128_TO_F64: pfpo = S390_PFPO_D128_TO_F64 << 8; break;
+ case S390_FP_F128_TO_D128: pfpo = S390_PFPO_F128_TO_D128 << 8; break;
+ case S390_FP_D128_TO_F128: pfpo = S390_PFPO_D128_TO_F128 << 8; break;
+ default: goto fail;
+ }
+
+ pfpo = pfpo | rm;
+ buf = s390_emit_load_32imm(buf, R0, pfpo);
+ buf = s390_emit_PFPO(buf);
+ return buf;
+
+ fail:
+ vpanic("s390_insn_fp_convert_emit");
+}
+
+
+static UChar *
s390_insn_mfence_emit(UChar *buf, const s390_insn *insn)
{
return s390_emit_BCR(buf, 0xF, 0x0);
@@ -9839,6 +9998,10 @@
end = s390_insn_dfp_reround_emit(buf, insn);
break;
+ case S390_INSN_FP_CONVERT:
+ end = s390_insn_fp_convert_emit(buf, insn);
+ break;
+
case S390_INSN_MFENCE:
end = s390_insn_mfence_emit(buf, insn);
break;
Modified: trunk/pub/libvex.h (+3 -1)
===================================================================
--- trunk/pub/libvex.h 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/pub/libvex.h 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -138,6 +138,7 @@
#define VEX_HWCAPS_S390X_STCKF (1<<14) /* STCKF facility */
#define VEX_HWCAPS_S390X_FPEXT (1<<15) /* Floating point extension facility */
#define VEX_HWCAPS_S390X_LSC (1<<16) /* Conditional load/store facility */
+#define VEX_HWCAPS_S390X_PFPO (1<<17) /* Perform floating point ops facility */
/* Special value representing all available s390x hwcaps */
#define VEX_HWCAPS_S390X_ALL (VEX_HWCAPS_S390X_LDISP | \
@@ -150,7 +151,8 @@
VEX_HWCAPS_S390X_FPEXT | \
VEX_HWCAPS_S390X_LSC | \
VEX_HWCAPS_S390X_ETF3 | \
- VEX_HWCAPS_S390X_ETF2)
+ VEX_HWCAPS_S390X_ETF2 | \
+ VEX_HWCAPS_S390X_PFPO)
#define VEX_HWCAPS_S390X(x) ((x) & ~VEX_S390X_MODEL_MASK)
#define VEX_S390X_MODEL(x) ((x) & VEX_S390X_MODEL_MASK)
Modified: trunk/priv/main_main.c (+7 -0)
===================================================================
--- trunk/priv/main_main.c 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/main_main.c 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -1132,6 +1132,12 @@
return "Encountered an instruction that requires the floating "
"point extension facility.\n"
" That facility is not available on this host";
+ case EmFail_S390X_invalid_PFPO_rounding_mode:
+ return "The rounding mode specified in GPR 0 for PFPO instruction"
+ " is invalid";
+ case EmFail_S390X_invalid_PFPO_function:
+ return "The function code specified in GPR 0 for PFPO instruction"
+ " is invalid";
default:
vpanic("LibVEX_EmNote_string: unknown warning");
}
@@ -1384,6 +1390,7 @@
{ VEX_HWCAPS_S390X_STCKF, "stckf" },
{ VEX_HWCAPS_S390X_FPEXT, "fpext" },
{ VEX_HWCAPS_S390X_LSC, "lsc" },
+ { VEX_HWCAPS_S390X_PFPO, "pfpo" },
};
#define NUM_HWCAPS (sizeof hwcaps_list / sizeof hwcaps_list[0])
static HChar buf[sizeof prefix +
Modified: trunk/priv/host_s390_isel.c (+162 -9)
===================================================================
--- trunk/priv/host_s390_isel.c 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/host_s390_isel.c 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -1941,16 +1941,16 @@
/* --------- BINARY OP --------- */
case Iex_Binop: {
- HReg op_hi, op_lo, f12, f13, f14, f15;
+ switch (expr->Iex.Binop.op) {
+ case Iop_SqrtF128: {
+ HReg op_hi, op_lo, f12, f13, f14, f15;
- /* We use non-virtual registers as pairs (f13, f15) and (f12, f14)) */
- f12 = make_fpr(12);
- f13 = make_fpr(13);
- f14 = make_fpr(14);
- f15 = make_fpr(15);
+ /* We use non-virtual registers as pairs (f13, f15) and (f12, f14)) */
+ f12 = make_fpr(12);
+ f13 = make_fpr(13);
+ f14 = make_fpr(14);
+ f15 = make_fpr(15);
- switch (expr->Iex.Binop.op) {
- case Iop_SqrtF128:
s390_isel_float128_expr(&op_hi, &op_lo, env, expr->Iex.Binop.arg2);
/* operand --> (f13, f15) */
@@ -1967,12 +1967,44 @@
addInstr(env, s390_insn_move(8, *dst_hi, f12));
addInstr(env, s390_insn_move(8, *dst_lo, f14));
return;
+ }
case Iop_F64HLtoF128:
*dst_hi = s390_isel_float_expr(env, expr->Iex.Binop.arg1);
*dst_lo = s390_isel_float_expr(env, expr->Iex.Binop.arg2);
return;
+ case Iop_D128toF128: {
+ IRExpr *irrm;
+ IRExpr *left;
+ s390_dfp_round_t rm;
+ HReg op_hi, op_lo;
+ HReg f0, f2, f4, f6, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f6 = make_fpr(6); /* source */
+ f0 = make_fpr(0); /* destination */
+ f2 = make_fpr(2); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+
+ irrm = expr->Iex.Binop.arg1;
+ left = expr->Iex.Binop.arg2;
+ rm = get_dfp_rounding_mode(env, irrm);
+ s390_isel_dfp128_expr(&op_hi, &op_lo, env, left);
+ /* operand --> (f4, f6) */
+ addInstr(env, s390_insn_move(8, f4, op_hi));
+ addInstr(env, s390_insn_move(8, f6, op_lo));
+ addInstr(env, s390_insn_fp128_convert(16, S390_FP_D128_TO_F128, f0, f2,
+ f4, f6, r1, rm));
+ /* (f0, f2) --> destination */
+ *dst_hi = newVRegF(env);
+ *dst_lo = newVRegF(env);
+ addInstr(env, s390_insn_move(8, *dst_hi, f0));
+ addInstr(env, s390_insn_move(8, *dst_lo, f2));
+
+ return;
+ }
+
default:
goto irreducible;
}
@@ -2196,6 +2228,7 @@
IRExpr *left = expr->Iex.Binop.arg2;
HReg h1, dst;
s390_bfp_conv_t conv;
+ s390_fp_conv_t fpconv;
switch (op) {
case Iop_SqrtF32:
@@ -2213,6 +2246,8 @@
case Iop_I64StoF64: conv = S390_BFP_I64_TO_F64; goto convert_int;
case Iop_I64UtoF32: conv = S390_BFP_U64_TO_F32; goto convert_int;
case Iop_I64UtoF64: conv = S390_BFP_U64_TO_F64; goto convert_int;
+ case Iop_D64toF64: fpconv = S390_FP_D64_TO_F64; goto convert_dfp;
+ case Iop_D128toF64: fpconv = S390_FP_D128_TO_F64; goto convert_dfp128;
convert_float:
h1 = s390_isel_float_expr(env, left);
@@ -2237,7 +2272,47 @@
rounding_mode));
return dst;
}
-
+
+ convert_dfp: {
+ s390_dfp_round_t rm;
+ HReg f0, f4, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f0 = make_fpr(0); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+ h1 = s390_isel_dfp_expr(env, left);
+ dst = newVRegF(env);
+ rm = get_dfp_rounding_mode(env, irrm);
+ /* operand --> f4 */
+ addInstr(env, s390_insn_move(8, f4, h1));
+ addInstr(env, s390_insn_fp_convert(size, fpconv, f0, f4, r1, rm));
+ /* f0 --> destination */
+ addInstr(env, s390_insn_move(8, dst, f0));
+ return dst;
+ }
+
+ convert_dfp128: {
+ s390_dfp_round_t rm;
+ HReg op_hi, op_lo;
+ HReg f0, f4, f6, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f6 = make_fpr(6); /* source */
+ f0 = make_fpr(0); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+ s390_isel_dfp128_expr(&op_hi, &op_lo, env, left);
+ dst = newVRegF(env);
+ rm = get_dfp_rounding_mode(env, irrm);
+ /* operand --> (f4, f6) */
+ addInstr(env, s390_insn_move(8, f4, op_hi));
+ addInstr(env, s390_insn_move(8, f6, op_lo));
+ addInstr(env, s390_insn_fp128_convert(16, fpconv, f0, INVALID_HREG,
+ f4, f6, r1, rm));
+ /* f0 --> destination */
+ addInstr(env, s390_insn_move(8, dst, f0));
+ return dst;
+ }
+
default:
goto irreducible;
@@ -2563,6 +2638,64 @@
return;
}
+ case Iop_F64toD128: {
+ IRExpr *irrm;
+ IRExpr *left;
+ s390_dfp_round_t rm;
+ HReg h1; /* virtual reg. to hold source */
+ HReg f0, f2, f4, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f0 = make_fpr(0); /* destination */
+ f2 = make_fpr(2); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+ irrm = expr->Iex.Binop.arg1;
+ left = expr->Iex.Binop.arg2;
+ rm = get_dfp_rounding_mode(env, irrm);
+ h1 = s390_isel_float_expr(env, left);
+ addInstr(env, s390_insn_move(8, f4, h1));
+ addInstr(env, s390_insn_fp128_convert(16, S390_FP_F64_TO_D128, f0, f2,
+ f4, INVALID_HREG, r1, rm));
+ /* (f0, f2) --> destination */
+ *dst_hi = newVRegF(env);
+ *dst_lo = newVRegF(env);
+ addInstr(env, s390_insn_move(8, *dst_hi, f0));
+ addInstr(env, s390_insn_move(8, *dst_lo, f2));
+
+ return;
+ }
+
+ case Iop_F128toD128: {
+ IRExpr *irrm;
+ IRExpr *left;
+ s390_dfp_round_t rm;
+ HReg op_hi, op_lo;
+ HReg f0, f2, f4, f6, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f6 = make_fpr(6); /* source */
+ f0 = make_fpr(0); /* destination */
+ f2 = make_fpr(2); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+
+ irrm = expr->Iex.Binop.arg1;
+ left = expr->Iex.Binop.arg2;
+ rm = get_dfp_rounding_mode(env, irrm);
+ s390_isel_float128_expr(&op_hi, &op_lo, env, left);
+ /* operand --> (f4, f6) */
+ addInstr(env, s390_insn_move(8, f4, op_hi));
+ addInstr(env, s390_insn_move(8, f6, op_lo));
+ addInstr(env, s390_insn_fp128_convert(16, S390_FP_F128_TO_D128, f0, f2,
+ f4, f6, r1, rm));
+ /* (f0, f2) --> destination */
+ *dst_hi = newVRegF(env);
+ *dst_lo = newVRegF(env);
+ addInstr(env, s390_insn_move(8, *dst_hi, f0));
+ addInstr(env, s390_insn_move(8, *dst_lo, f2));
+
+ return;
+ }
+
default:
goto irreducible;
}
@@ -2684,11 +2817,13 @@
IRExpr *left = expr->Iex.Binop.arg2;
HReg h1, dst;
s390_dfp_conv_t conv;
+ s390_fp_conv_t fpconv;
switch (op) {
case Iop_D64toD32: conv = S390_DFP_D64_TO_D32; goto convert_dfp;
case Iop_I64StoD64: conv = S390_DFP_I64_TO_D64; goto convert_int;
case Iop_I64UtoD64: conv = S390_DFP_U64_TO_D64; goto convert_int;
+ case Iop_F64toD64: fpconv = S390_FP_F64_TO_D64; goto convert_bfp;
convert_dfp:
h1 = s390_isel_dfp_expr(env, left);
@@ -2714,6 +2849,24 @@
return dst;
}
+ convert_bfp: {
+ s390_dfp_round_t rm;
+ HReg f0, f4, r1; /* real registers used by PFPO */
+
+ f4 = make_fpr(4); /* source */
+ f0 = make_fpr(0); /* destination */
+ r1 = make_gpr(1); /* GPR #1 clobbered */
+ h1 = s390_isel_float_expr(env, left);
+ dst = newVRegF(env);
+ rm = get_dfp_rounding_mode(env, irrm);
+ /* operand --> f4 */
+ addInstr(env, s390_insn_move(8, f4, h1));
+ addInstr(env, s390_insn_fp_convert(size, fpconv, f0, f4, r1, rm));
+ /* f0 --> destination */
+ addInstr(env, s390_insn_move(8, dst, f0));
+ return dst;
+ }
+
case Iop_D128toD64: {
HReg op_hi, op_lo, f13, f15;
s390_dfp_round_t rounding_mode;
Modified: trunk/priv/guest_s390_toIR.c (+178 -1)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/guest_s390_toIR.c 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -1714,6 +1714,15 @@
}
static void
+s390_format_E(const HChar *(*irgen)(void))
+{
+ const HChar *mnm = irgen();
+
+ if (UNLIKELY(vex_traceflags & VEX_TRACE_FE))
+ s390_disasm(ENC1(MNM), mnm);
+}
+
+static void
s390_format_RI(const HChar *(*irgen)(UChar r1, UShort i2),
UChar r1, UShort i2)
{
@@ -7111,7 +7120,175 @@
return "pfdrl";
}
+static IRExpr *
+get_rounding_mode_from_gr0(void)
+{
+ IRTemp rm_bits = newTemp(Ity_I32);
+ IRExpr *s390rm;
+ IRExpr *irrm;
+
+ vassert(s390_host_has_pfpo);
+ /* The dfp/bfp rounding mode is stored in bits [60:63] of GR 0
+ when PFPO insn is called. So, extract the bits at [60:63] */
+ assign(rm_bits, binop(Iop_And32, get_gpr_w1(0), mkU32(0xf)));
+ s390rm = mkexpr(rm_bits);
+ irrm = mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0x1)),
+ mkexpr(encode_bfp_rounding_mode( S390_BFP_ROUND_PER_FPC)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0x8)),
+ mkexpr(encode_dfp_rounding_mode(S390_DFP_ROUND_NEAREST_EVEN_8)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0x9)),
+ mkexpr(encode_dfp_rounding_mode(S390_DFP_ROUND_ZERO_9)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xa)),
+ mkexpr(encode_dfp_rounding_mode(S390_DFP_ROUND_POSINF_10)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xb)),
+ mkexpr(encode_dfp_rounding_mode(S390_DFP_ROUND_NEGINF_11)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xc)),
+ mkexpr(encode_dfp_rounding_mode(
+ S390_DFP_ROUND_NEAREST_TIE_AWAY_0_12)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xd)),
+ mkexpr(encode_dfp_rounding_mode(
+ S390_DFP_ROUND_NEAREST_TIE_TOWARD_0)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xe)),
+ mkexpr(encode_dfp_rounding_mode(
+ S390_DFP_ROUND_AWAY_0)),
+ mkite(binop(Iop_CmpEQ32, s390rm, mkU32(0xf)),
+ mkexpr(encode_dfp_rounding_mode(
+ S390_DFP_ROUND_PREPARE_SHORT_15)),
+ /* if rounding mode is 0 or invalid (2-7)
+ set S390_DFP_ROUND_PER_FPC_0 */
+ mkexpr(encode_dfp_rounding_mode(
+ S390_DFP_ROUND_PER_FPC_0)))))))))));
+
+ return irrm;
+}
+
+static IRExpr *
+s390_call_pfpo_helper(IRExpr *gr0)
+{
+ IRExpr **args, *call;
+
+ args = mkIRExprVec_1(gr0);
+ call = mkIRExprCCall(Ity_I32, 0 /*regparm*/,
+ "s390_do_pfpo", &s390_do_pfpo, args);
+ /* Nothing is excluded from definedness checking. */
+ call->Iex.CCall.cee->mcx_mask = 0;
+
+ return call;
+}
+
static const HChar *
+s390_irgen_PFPO(void)
+{
+ IRTemp gr0 = newTemp(Ity_I32); /* word 1 [32:63] of GR 0 */
+ IRTemp test_bit = newTemp(Ity_I32); /* bit 32 of GR 0 - test validity */
+ IRTemp fn = newTemp(Ity_I32); /* [33:55] of GR 0 - function code */
+ IRTemp ef = newTemp(Ity_I32); /* Emulation Failure */
+ IRTemp src1 = newTemp(Ity_F64);
+ IRTemp dst1 = newTemp(Ity_D64);
+ IRTemp src2 = newTemp(Ity_D64);
+ IRTemp dst2 = newTemp(Ity_F64);
+ IRTemp src3 = newTemp(Ity_F64);
+ IRTemp dst3 = newTemp(Ity_D128);
+ IRTemp src4 = newTemp(Ity_D128);
+ IRTemp dst4 = newTemp(Ity_F64);
+ IRTemp src5 = newTemp(Ity_F128);
+ IRTemp dst5 = newTemp(Ity_D128);
+ IRTemp src6 = newTemp(Ity_D128);
+ IRTemp dst6 = newTemp(Ity_F128);
+ IRExpr *irrm;
+
+ vassert(s390_host_has_pfpo);
+
+ assign(gr0, get_gpr_w1(0));
+ /* get function code */
+ assign(fn, binop(Iop_And32, binop(Iop_Shr32, mkexpr(gr0), mkU8(8)),
+ mkU32(0x7fffff)));
+ /* get validity test bit */
+ assign(test_bit, binop(Iop_And32, binop(Iop_Shr32, mkexpr(gr0), mkU8(31)),
+ mkU32(0x1)));
+ irrm = get_rounding_mode_from_gr0();
+
+ /* test_bit is 1 */
+ assign(src1, get_fpr_dw0(4)); /* get source from FPR 4,6 */
+ s390_cc_thunk_putFZ(S390_CC_OP_PFPO_64, src1, gr0);
+
+ /* Return code set in GR1 is usually 0. Non-zero value is set only
+ when exceptions are raised. See Programming Notes point 5 in the
+ instrcution description of pfpo in POP. Since valgrind does not
+ model exception, it might be safe to just set 0 to GR 1. */
+ put_gpr_w1(1, mkU32(0x0));
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(test_bit), mkU32(0x1)));
+
+ /* Check validity of function code in GR 0 */
+ assign(ef, s390_call_pfpo_helper(unop(Iop_32Uto64, mkexpr(gr0))));
+
+ /* fixs390: Function emulation_failure can be used if it takes argument as
+ IRExpr * instead of VexEmNote. */
+ stmt(IRStmt_Put(S390X_GUEST_OFFSET(guest_EMNOTE), mkexpr(ef)));
+ dis_res->whatNext = Dis_StopHere;
+ dis_res->jk_StopHere = Ijk_EmFail;
+
+ stmt(
+ IRStmt_Exit(
+ binop(Iop_CmpNE32, mkexpr(ef), mkU32(EmNote_NONE)),
+ Ijk_EmFail,
+ IRConst_U64(guest_IA_next_instr),
+ S390X_GUEST_OFFSET(guest_IA)
+ )
+ );
+
+ /* F64 -> D64 */
+ /* get source from FPR 4,6 - already set in src1 */
+ assign(dst1, binop(Iop_F64toD64, irrm, mkexpr(src1)));
+ put_dpr_dw0(0, mkexpr(dst1)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_putFZ(S390_CC_OP_PFPO_64, src1, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_F64_TO_D64)));
+
+ /* D64 -> F64 */
+ assign(src2, get_dpr_dw0(4)); /* get source from FPR 4,6 */
+ assign(dst2, binop(Iop_D64toF64, irrm, mkexpr(src2)));
+ put_fpr_dw0(0, mkexpr(dst2)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_putFZ(S390_CC_OP_PFPO_64, src2, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_D64_TO_F64)));
+
+ /* F64 -> D128 */
+ assign(src3, get_fpr_dw0(4)); /* get source from FPR 4,6 */
+ assign(dst3, binop(Iop_F64toD128, irrm, mkexpr(src3)));
+ put_dpr_pair(0, mkexpr(dst3)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_putFZ(S390_CC_OP_PFPO_64, src3, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_F64_TO_D128)));
+
+ /* D128 -> F64 */
+ assign(src4, get_dpr_pair(4)); /* get source from FPR 4,6 */
+ assign(dst4, binop(Iop_D128toF64, irrm, mkexpr(src4)));
+ put_fpr_dw0(0, mkexpr(dst4)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_put1d128Z(S390_CC_OP_PFPO_128, src4, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_D128_TO_F64)));
+
+ /* F128 -> D128 */
+ assign(src5, get_fpr_pair(4)); /* get source from FPR 4,6 */
+ assign(dst5, binop(Iop_F128toD128, irrm, mkexpr(src5)));
+ put_dpr_pair(0, mkexpr(dst5)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_put1f128Z(S390_CC_OP_PFPO_128, src5, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_F128_TO_D128)));
+
+ /* D128 -> F128 */
+ assign(src6, get_dpr_pair(4)); /* get source from FPR 4,6 */
+ assign(dst6, binop(Iop_D128toF128, irrm, mkexpr(src6)));
+ put_fpr_pair(0, mkexpr(dst6)); /* put the result in FPR 0,2 */
+ put_gpr_w1(1, mkU32(0x0));
+ s390_cc_thunk_put1d128Z(S390_CC_OP_PFPO_128, src6, gr0);
+ next_insn_if(binop(Iop_CmpEQ32, mkexpr(fn), mkU32(S390_PFPO_D128_TO_F128)));
+
+ return "pfpo";
+}
+
+static const HChar *
s390_irgen_RLL(UChar r1, UChar r3, IRTemp op2addr)
{
IRTemp amount = newTemp(Ity_I64);
@@ -13611,7 +13788,7 @@
case 0x0102: /* UPT */ goto unimplemented;
case 0x0104: /* PTFF */ goto unimplemented;
case 0x0107: /* SCKPF */ goto unimplemented;
- case 0x010a: /* PFPO */ goto unimplemented;
+ case 0x010a: s390_format_E(s390_irgen_PFPO); goto ok;
case 0x010b: /* TAM */ goto unimplemented;
case 0x010c: /* SAM24 */ goto unimplemented;
case 0x010d: /* SAM31 */ goto unimplemented;
Modified: trunk/priv/guest_s390_defs.h (+6 -1)
===================================================================
--- trunk/priv/guest_s390_defs.h 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/guest_s390_defs.h 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -92,6 +92,7 @@
UInt s390_do_cvb(ULong decimal);
ULong s390_do_cvd(ULong binary);
ULong s390_do_ecag(ULong op2addr);
+UInt s390_do_pfpo(UInt gpr0);
/* The various ways to compute the condition code. */
enum {
@@ -152,7 +153,9 @@
S390_CC_OP_DFP_64_TO_INT_32 = 54,
S390_CC_OP_DFP_128_TO_INT_32 = 55,
S390_CC_OP_DFP_64_TO_INT_64 = 56,
- S390_CC_OP_DFP_128_TO_INT_64 = 57
+ S390_CC_OP_DFP_128_TO_INT_64 = 57,
+ S390_CC_OP_PFPO_64 = 58,
+ S390_CC_OP_PFPO_128 = 59
};
/*------------------------------------------------------------*/
@@ -226,6 +229,8 @@
| S390_CC_OP_DFP_128_TO_INT_32 | D source hi 64 bits | D source low 64 bits | Z rounding mode |
| S390_CC_OP_DFP_64_TO_INT_64 | D source | Z rounding mode | |
| S390_CC_OP_DFP_128_TO_INT_64 | D source hi 64 bits | D source low 64 bits | Z rounding mode |
+ | S390_CC_OP_PFPO_64 | F|D source | Z GR0 low 32 bits | |
+ | S390_CC_OP_PFPO_128 | F|D source hi 64 bits | F|D src low 64 bits | Z GR0 low 32 bits |
+--------------------------------+-----------------------+----------------------+-----------------+
*/
Modified: trunk/priv/guest_s390_helpers.c (+56 -0)
===================================================================
--- trunk/priv/guest_s390_helpers.c 2013-05-08 09:56:45 +01:00 (rev 2718)
+++ trunk/priv/guest_s390_helpers.c 2013-05-11 16:02:58 +01:00 (rev 2719)
@@ -908,6 +908,36 @@
#endif
/*------------------------------------------------------------*/
+/*--- Clean helper for "Perform Floating Point Operation". ---*/
+/*------------------------------------------------------------*/
+#if defined(VGA_s390x)
+UInt
+s390_do_pfpo(UInt gpr0)
+{
+ UChar rm;
+ UChar op1_ty, op2_ty;
+
+ rm = gpr0 & 0xf;
+ if (rm > 1 && rm < 8)
+ return EmFail_S390X_invalid_PFPO_rounding_mode;
+
+ op1_ty = (gpr0 >> 16) & 0xff; // gpr0[40:47]
+ op2_ty = (gpr0 >> 8) & 0xff; // gpr0[48:55]
+ /* Operand type must be BFP 32, 64, 128 or DFP 32, 64, 128
+ which correspond to 0x5, 0x6, 0x7, 0x8, 0x9, 0xa respectively.
+ Any other operand type value is unsupported */
+ if ((op1_ty == op2_ty) ||
+ (op1_ty < 0x5 || op1_ty > 0xa) ||
+ (op2_ty < 0x5 || op2_ty > 0xa))
+ return EmFail_S390X_invalid_PFPO_function;
+
+ return EmNote_NONE;
+}
+#else
+UInt s390_do_pfpo(UInt gpr0) { return 0; }
+#endif
+
+/*------------------------------------------------------------*/
/*--- Helper for condition code. ---*/
/*------------------------------------------------------------*/
@@ -1711,6 +1741,32 @@
return S390_CC_FOR_DFP128_UCONVERT(".insn rrf,0xb94a0000", cc_dep1,
cc_dep2, cc_ndep);
+ case S390_CC_OP_PFPO_64: {
+ __asm__ volatile(
+ "ldr 4, %[cc_dep1]\n\t"
+ "lr 0, %[cc_dep2]\n\t" /* 32 bit register move */
+ ".short 0x010a\n\t" /* PFPO */
+ "ipm %[psw]\n\t" : [psw] "=d"(psw)
+ : [cc_dep1] "1f"(cc_dep1),
+ [cc_dep2] "d" (cc_dep2)
+ : "r0", "r1", "f4");
+ return psw >> 28; /* cc */
+ }
+
+ case S390_CC_OP_PFPO_128: {
+ __asm__ volatile(
+ "ldr 4,%[cc_dep1]\n\t"
+ "ldr 6,%[cc_dep2]\n\t"
+ "lr 0,%[cc_ndep]\n\t" /* 32 bit register move */
+ ".short 0x010a\n\t" /* PFPO */
+ "ipm %[psw]\n\t" : [psw] "=d"(psw)
+ : [cc_dep1] "f"(cc_dep1),
+ [cc_dep2] "f"(cc_dep2),
+ [cc_ndep] "d"(cc_ndep)
+ : "r0", "r1", "f0", "f2", "f4", "f6");
+ return psw >> 28; /* cc */
+ }
+
default:
break;
}
|
|
From: <sv...@va...> - 2013-05-11 13:42:24
|
sewardj 2013-05-11 14:42:08 +0100 (Sat, 11 May 2013)
New Revision: 13386
Log:
complainIfUndefined: reinstate the 3rd argument (guard) so as to make
the definedness check and possible shadow temp set-to-defined be
optional. Use this to properly instrument IRLoadG and IRStoreG, so
that if the load/store does not happen, not only is the validity of
the address not checked, neither is the definedness.
This fixes a regression introduced by the COMEM branch on ARM, in
which conditional loads/stores with addresses which are undefined at
runtime and with guards which are false, would generate false errors.
Also extensively re-checked the check-generation machinery and updated
a bunch of comments.
Modified files:
trunk/memcheck/mc_translate.c
Modified: trunk/memcheck/mc_translate.c (+121 -115)
===================================================================
--- trunk/memcheck/mc_translate.c 2013-05-10 14:14:54 +01:00 (rev 13385)
+++ trunk/memcheck/mc_translate.c 2013-05-11 14:42:08 +01:00 (rev 13386)
@@ -43,56 +43,6 @@
#include "mc_include.h"
-/* Comments re guarded loads and stores, and conditional dirty calls
- that access memory, JRS 2012-Dec-14, for branches/COMEM, r13180.
-
- Currently Memcheck generates code that checks the definedness of
- addresses in such cases, regardless of the what the guard value is
- (at runtime). This could potentially lead to false positives if we
- ever construct IR in which a guarded memory access happens, and the
- address is undefined when the guard is false. However, at the
- moment I am not aware of any situations where such IR is generated.
-
- The obvious thing to do is generate conditionalised checking code
- in such cases. However:
-
- * it's more complex to verify
-
- * it is cheaper to always do the check -- basically a check if
- the shadow value is nonzero, and conditional call to report
- an error if so -- than it is to conditionalise the check.
-
- * currently the implementation is incomplete. complainIfUndefined
- can correctly conditionalise the check and complaint as per its
- third argument. However, the part of it that then sets the
- shadow to 'defined' (see comments at the top of said fn) ignores
- the guard.
-
- Therefore, removing this functionality in r13181 until we know we
- need it. To reinstate, do the following:
-
- * back out r13181 (which also adds this comment)
-
- * undo (== reinstate the non-NULL 3rd args) in the following two
- chunks, which were removed in r13142. These are the only two
- places where complainIfUndefined is actually used with a guard.
-
- // First, emit a definedness test for the address. This also sets
- // the address (shadow) to 'defined' following the test.
- - complainIfUndefined( mce, addr, guard );
- + complainIfUndefined( mce, addr, NULL );
-
- and
-
- IRType tyAddr;
- tl_assert(d->mAddr);
- - complainIfUndefined(mce, d->mAddr, d->guard);
- + complainIfUndefined(mce, d->mAddr, NULL);
-
- * fix complainIfUndefined to conditionalise setting the shadow temp
- to 'defined', as described above.
-*/
-
/* FIXMEs JRS 2011-June-16.
Check the interpretation for vector narrowing and widening ops,
@@ -169,6 +119,11 @@
In practice, 1 and 2 account for the vast majority of cases.
*/
+/* Generation of addr-definedness, addr-validity and
+ guard-definedness checks pertaining to loads and stores (Iex_Load,
+ Ist_Store, IRLoadG, IRStoreG, LLSC, CAS and Dirty memory
+ loads/stores) was re-checked 11 May 2013. */
+
/*------------------------------------------------------------*/
/*--- Forward decls ---*/
/*------------------------------------------------------------*/
@@ -1158,11 +1113,17 @@
original->tmp mapping accordingly; we cannot simply assign a new
value to an existing shadow tmp as this breaks SSAness.
- It may be that any resulting complaint should only be emitted
- conditionally, as defined by |guard|. If |guard| is NULL then it
- is assumed to be always-true.
+ The checks are performed, any resulting complaint emitted, and
+ |atom|'s shadow temp set to 'defined', ONLY in the case that
+ |guard| evaluates to True at run-time. If it evaluates to False
+ then no action is performed. If |guard| is NULL (the usual case)
+ then it is assumed to be always-true, and hence these actions are
+ performed unconditionally.
+
+ This routine does not generate code to check the definedness of
+ |guard|. The caller is assumed to have taken care of that already.
*/
-static void complainIfUndefined ( MCEnv* mce, IRAtom* atom )
+static void complainIfUndefined ( MCEnv* mce, IRAtom* atom, IRExpr *guard )
{
IRAtom* vatom;
IRType ty;
@@ -1179,6 +1140,9 @@
if (MC_(clo_mc_level) == 1)
return;
+ if (guard)
+ tl_assert(isOriginalAtom(mce, guard));
+
/* Since the original expression is atomic, there's no duplicated
work generated by making multiple V-expressions for it. So we
don't really care about the possibility that someone else may
@@ -1293,21 +1257,46 @@
di = unsafeIRDirty_0_N( nargs/*regparms*/, nm,
VG_(fnptr_to_fnentry)( fn ), args );
- di->guard = cond;
+ di->guard = cond; // and cond is PCast-to-1(atom#)
+ /* If the complaint is to be issued under a guard condition, AND
+ that into the guard condition for the helper call. */
+ if (guard) {
+ IRAtom *g1 = assignNew('V', mce, Ity_I32, unop(Iop_1Uto32, di->guard));
+ IRAtom *g2 = assignNew('V', mce, Ity_I32, unop(Iop_1Uto32, guard));
+ IRAtom *e = assignNew('V', mce, Ity_I32, binop(Iop_And32, g1, g2));
+ di->guard = assignNew('V', mce, Ity_I1, unop(Iop_32to1, e));
+ }
+
setHelperAnns( mce, di );
stmt( 'V', mce, IRStmt_Dirty(di));
- /* Set the shadow tmp to be defined. First, update the
- orig->shadow tmp mapping to reflect the fact that this shadow is
- getting a new value. */
+ /* If |atom| is shadowed by an IRTemp, set the shadow tmp to be
+ defined -- but only in the case where the guard evaluates to
+ True at run-time. Do the update by setting the orig->shadow
+ mapping for tmp to reflect the fact that this shadow is getting
+ a new value. */
tl_assert(isIRAtom(vatom));
/* sameKindedAtoms ... */
if (vatom->tag == Iex_RdTmp) {
tl_assert(atom->tag == Iex_RdTmp);
- newShadowTmpV(mce, atom->Iex.RdTmp.tmp);
- assign('V', mce, findShadowTmpV(mce, atom->Iex.RdTmp.tmp),
- definedOfType(ty));
+ if (guard == NULL) {
+ // guard is 'always True', hence update unconditionally
+ newShadowTmpV(mce, atom->Iex.RdTmp.tmp);
+ assign('V', mce, findShadowTmpV(mce, atom->Iex.RdTmp.tmp),
+ definedOfType(ty));
+ } else {
+ // update the temp only conditionally. Do this by copying
+ // its old value when the guard is False.
+ // The old value ..
+ IRTemp old_tmpV = findShadowTmpV(mce, atom->Iex.RdTmp.tmp);
+ newShadowTmpV(mce, atom->Iex.RdTmp.tmp);
+ IRAtom* new_tmpV
+ = assignNew('V', mce, shadowTypeV(ty),
+ IRExpr_ITE(guard, definedOfType(ty),
+ mkexpr(old_tmpV)));
+ assign('V', mce, findShadowTmpV(mce, atom->Iex.RdTmp.tmp), new_tmpV);
+ }
}
}
@@ -1426,7 +1415,7 @@
arrSize = descr->nElems * sizeofIRType(ty);
tl_assert(ty != Ity_I1);
tl_assert(isOriginalAtom(mce,ix));
- complainIfUndefined(mce, ix);
+ complainIfUndefined(mce, ix, NULL);
if (isAlwaysDefd(mce, descr->base, arrSize)) {
/* later: no ... */
/* emit code to emit a complaint if any of the vbits are 1. */
@@ -1475,7 +1464,7 @@
Int arrSize = descr->nElems * sizeofIRType(ty);
tl_assert(ty != Ity_I1);
tl_assert(isOriginalAtom(mce,ix));
- complainIfUndefined(mce, ix);
+ complainIfUndefined(mce, ix, NULL);
if (isAlwaysDefd(mce, descr->base, arrSize)) {
/* Always defined, return all zeroes of the relevant type */
return definedOfType(tyS);
@@ -2706,15 +2695,15 @@
/* IRRoundingModeDFP(I32) x I8 x D128 -> D128 */
return mkLazy3(mce, Ity_I128, vatom1, vatom2, vatom3);
case Iop_ExtractV128:
- complainIfUndefined(mce, atom3);
+ complainIfUndefined(mce, atom3, NULL);
return assignNew('V', mce, Ity_V128, triop(op, vatom1, vatom2, atom3));
case Iop_Extract64:
- complainIfUndefined(mce, atom3);
+ complainIfUndefined(mce, atom3, NULL);
return assignNew('V', mce, Ity_I64, triop(op, vatom1, vatom2, atom3));
case Iop_SetElem8x8:
case Iop_SetElem16x4:
case Iop_SetElem32x2:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I64, triop(op, vatom1, atom2, vatom3));
default:
ppIROp(op);
@@ -2781,7 +2770,7 @@
case Iop_ShlN32x2:
case Iop_ShlN8x8:
/* Same scheme as with all other shifts. */
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I64, binop(op, vatom1, atom2));
case Iop_QNarrowBin32Sto16Sx4:
@@ -2864,25 +2853,25 @@
case Iop_QShlN8Sx8:
case Iop_QShlN8x8:
case Iop_QSalN8x8:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast8x8(mce, vatom1);
case Iop_QShlN16Sx4:
case Iop_QShlN16x4:
case Iop_QSalN16x4:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast16x4(mce, vatom1);
case Iop_QShlN32Sx2:
case Iop_QShlN32x2:
case Iop_QSalN32x2:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x2(mce, vatom1);
case Iop_QShlN64Sx1:
case Iop_QShlN64x1:
case Iop_QSalN64x1:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x2(mce, vatom1);
case Iop_PwMax32Sx2:
@@ -2979,13 +2968,13 @@
return assignNew('V', mce, Ity_I64, binop(op, vatom1, vatom2));
case Iop_GetElem8x8:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I8, binop(op, vatom1, atom2));
case Iop_GetElem16x4:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I16, binop(op, vatom1, atom2));
case Iop_GetElem32x2:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I32, binop(op, vatom1, atom2));
/* Perm8x8: rearrange values in left arg using steering values
@@ -3015,7 +3004,7 @@
/* Same scheme as with all other shifts. Note: 22 Oct 05:
this is wrong now, scalar shifts are done properly lazily.
Vector shifts should be fixed too. */
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_V128, binop(op, vatom1, atom2));
/* V x V shifts/rotates are done using the standard lazy scheme. */
@@ -3062,14 +3051,14 @@
case Iop_F32ToFixed32Sx4_RZ:
case Iop_Fixed32UToF32x4_RN:
case Iop_Fixed32SToF32x4_RN:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x4(mce, vatom1);
case Iop_F32ToFixed32Ux2_RZ:
case Iop_F32ToFixed32Sx2_RZ:
case Iop_Fixed32UToF32x2_RN:
case Iop_Fixed32SToF32x2_RN:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x2(mce, vatom1);
case Iop_QSub8Ux16:
@@ -3226,25 +3215,25 @@
case Iop_QShlN8Sx16:
case Iop_QShlN8x16:
case Iop_QSalN8x16:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast8x16(mce, vatom1);
case Iop_QShlN16Sx8:
case Iop_QShlN16x8:
case Iop_QSalN16x8:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast16x8(mce, vatom1);
case Iop_QShlN32Sx4:
case Iop_QShlN32x4:
case Iop_QSalN32x4:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x4(mce, vatom1);
case Iop_QShlN64Sx2:
case Iop_QShlN64x2:
case Iop_QSalN64x2:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return mkPCast32x4(mce, vatom1);
case Iop_Mull32Sx2:
@@ -3307,16 +3296,16 @@
return assignNew('V', mce, Ity_V128, binop(op, vatom1, vatom2));
case Iop_GetElem8x16:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I8, binop(op, vatom1, atom2));
case Iop_GetElem16x8:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I16, binop(op, vatom1, atom2));
case Iop_GetElem32x4:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I32, binop(op, vatom1, atom2));
case Iop_GetElem64x2:
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_I64, binop(op, vatom1, atom2));
/* Perm8x16: rearrange values in left arg using steering values
@@ -3375,7 +3364,7 @@
/* Same scheme as with all other shifts. Note: 10 Nov 05:
this is wrong now, scalar shifts are done properly lazily.
Vector shifts should be fixed too. */
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_V128, binop(op, vatom1, atom2));
/* I128-bit data-steering */
@@ -3784,7 +3773,7 @@
/* Same scheme as with all other shifts. Note: 22 Oct 05:
this is wrong now, scalar shifts are done properly lazily.
Vector shifts should be fixed too. */
- complainIfUndefined(mce, atom2);
+ complainIfUndefined(mce, atom2, NULL);
return assignNew('V', mce, Ity_V256, binop(op, vatom1, atom2));
case Iop_QSub8Ux32:
@@ -4168,9 +4157,20 @@
}
-/* Worker function; do not call directly. See comments on
- expr2vbits_Load for the meaning of 'guard'. If 'guard' evaluates
- to False at run time, the returned value is all-ones. */
+/* Worker function -- do not call directly. See comments on
+ expr2vbits_Load for the meaning of |guard|.
+
+ Generates IR to (1) perform a definedness test of |addr|, (2)
+ perform a validity test of |addr|, and (3) return the Vbits for the
+ location indicated by |addr|. All of this only happens when
+ |guard| is NULL or |guard| evaluates to True at run time.
+
+ If |guard| evaluates to False at run time, the returned value is
+ the IR-mandated 0x55..55 value, and no checks nor shadow loads are
+ performed.
+
+ The definedness of |guard| itself is not checked. That is assumed
+ to have been done before this point, by the caller. */
static
IRAtom* expr2vbits_Load_WRK ( MCEnv* mce,
IREndness end, IRType ty,
@@ -4187,7 +4187,7 @@
/* First, emit a definedness test for the address. This also sets
the address (shadow) to 'defined' following the test. */
- complainIfUndefined( mce, addr );
+ complainIfUndefined( mce, addr, guard );
/* Now cook up a call to the relevant helper function, to read the
data V bits from shadow memory. */
@@ -4208,7 +4208,7 @@
hname = "MC_(helperc_LOADV8)";
break;
default: ppIRType(ty);
- VG_(tool_panic)("memcheck:do_shadow_Load(LE)");
+ VG_(tool_panic)("memcheck:expr2vbits_Load_WRK(LE)");
}
} else {
switch (ty) {
@@ -4225,7 +4225,7 @@
hname = "MC_(helperc_LOADV8)";
break;
default: ppIRType(ty);
- VG_(tool_panic)("memcheck:do_shadow_Load(BE)");
+ VG_(tool_panic)("memcheck:expr2vbits_Load_WRK(BE)");
}
}
@@ -4268,10 +4268,13 @@
the validity of the address and return the V bits for that address.
This can optionally be controlled by a guard, which is assumed to
be True if NULL. In the case where the guard is False at runtime,
- the helper will return the didn't-do-the-call value of all-ones.
- Since all ones means "completely undefined result", the caller of
+ the helper will return the didn't-do-the-call value of 0x55..55.
+ Since that means "completely undefined result", the caller of
this function will need to fix up the result somehow in that
case.
+
+ Caller of this function is also expected to have checked the
+ definedness of |guard| before this point.
*/
static
IRAtom* expr2vbits_Load ( MCEnv* mce,
@@ -4324,8 +4327,9 @@
/* The most general handler for guarded loads. Assumes the
- definedness of GUARD and ADDR have already been checked by the
- caller. A GUARD of NULL is assumed to mean "always True".
+ definedness of GUARD has already been checked by the caller. A
+ GUARD of NULL is assumed to mean "always True". Generates code to
+ check the definedness and validity of ADDR.
Generate IR to do a shadow load from ADDR and return the V bits.
The loaded type is TY. The loaded data is then (shadow) widened by
@@ -4390,8 +4394,8 @@
conversion operation, and the default V bit return (when the guard
evaluates to False at runtime) is "all defined". If there is no
guard expression or the guard is always TRUE this function behaves
- like expr2vbits_Load. It is assumed that definedness of GUARD and
- ADDR has already been checked at the call site. */
+ like expr2vbits_Load. It is assumed that definedness of GUARD has
+ already been checked at the call site. */
static
IRAtom* expr2vbits_Load_guarded_Simple ( MCEnv* mce,
IREndness end, IRType ty,
@@ -4553,8 +4557,8 @@
/* Generate a shadow store. |addr| is always the original address
atom. You can pass in either originals or V-bits for the data
atom, but obviously not both. This function generates a check for
- the definedness of |addr|. That check is performed regardless of
- whether |guard| is true or not.
+ the definedness and (indirectly) the validity of |addr|, but only
+ when |guard| evaluates to True at run time (or is NULL).
|guard| :: Ity_I1 controls whether the store really happens; NULL
means it unconditionally does. Note that |guard| itself is not
@@ -4617,8 +4621,9 @@
}
/* First, emit a definedness test for the address. This also sets
- the address (shadow) to 'defined' following the test. */
- complainIfUndefined( mce, addr );
+ the address (shadow) to 'defined' following the test. Both of
+ those actions are gated on |guard|. */
+ complainIfUndefined( mce, addr, guard );
/* Now decide which helper function to call to write the data V
bits into shadow memory. */
@@ -4845,7 +4850,7 @@
# endif
/* First check the guard. */
- complainIfUndefined(mce, d->guard);
+ complainIfUndefined(mce, d->guard, NULL);
/* Now round up all inputs and PCast over them. */
curr = definedOfType(Ity_I32);
@@ -4919,7 +4924,7 @@
should remove all but this test. */
IRType tyAddr;
tl_assert(d->mAddr);
- complainIfUndefined(mce, d->mAddr);
+ complainIfUndefined(mce, d->mAddr, d->guard);
tyAddr = typeOfIRExpr(mce->sb->tyenv, d->mAddr);
tl_assert(tyAddr == Ity_I32 || tyAddr == Ity_I64);
@@ -5194,7 +5199,7 @@
Note two things. Firstly, in the sequence above, we compute
"expected == old", but we don't check definedness of it. Why
not? Also, the x86 and amd64 front ends use
- Iop_CmpCas{EQ,NE}{8,16,32,64} comparisons to make the equivalent
+ Iop_CasCmp{EQ,NE}{8,16,32,64} comparisons to make the equivalent
determination (expected == old ?) for themselves, and we also
don't check definedness for those primops; we just say that the
result is defined. Why? Details follow.
@@ -5591,9 +5596,10 @@
static void do_shadow_StoreG ( MCEnv* mce, IRStoreG* sg )
{
- if (0) VG_(printf)("XXXX StoreG\n");
- complainIfUndefined(mce, sg->guard);
- /* do_shadow_Store will check the definedness of sg->addr. */
+ complainIfUndefined(mce, sg->guard, NULL);
+ /* do_shadow_Store will generate code to check the definedness and
+ validity of sg->addr, in the case where sg->guard evaluates to
+ True at run-time. */
do_shadow_Store( mce, sg->end,
sg->addr, 0/* addr bias */,
sg->data,
@@ -5603,10 +5609,10 @@
static void do_shadow_LoadG ( MCEnv* mce, IRLoadG* lg )
{
- if (0) VG_(printf)("XXXX LoadG\n");
- complainIfUndefined(mce, lg->guard);
- /* expr2vbits_Load_guarded_General will check the definedness of
- lg->addr. */
+ complainIfUndefined(mce, lg->guard, NULL);
+ /* expr2vbits_Load_guarded_General will generate code to check the
+ definedness and validity of lg->addr, in the case where
+ lg->guard evaluates to True at run-time. */
/* Look at the LoadG's built-in conversion operation, to determine
the source (actual loaded data) type, and the equivalent IROp.
@@ -5997,7 +6003,7 @@
break;
case Ist_Exit:
- complainIfUndefined( &mce, st->Ist.Exit.guard );
+ complainIfUndefined( &mce, st->Ist.Exit.guard, NULL );
break;
case Ist_IMark:
@@ -6068,7 +6074,7 @@
VG_(printf)("\n\n");
}
- complainIfUndefined( &mce, sb_in->next );
+ complainIfUndefined( &mce, sb_in->next, NULL );
if (0 && verboze) {
for (j = first_stmt; j < sb_out->stmts_used; j++) {
|
|
From: Philippe W. <phi...@sk...> - 2013-05-11 03:34:11
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-37.fc18) Assembler: GNU assembler version 2.23.51.0.1-7.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.7.2-204.fc18.ppc64 ppc64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on gcc110 ( Fedora release 18 (Spherical Cow), ppc64 ) Started at 2013-05-10 20:00:17 PDT Ended at 2013-05-10 20:33:54 PDT 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 == 552 tests, 31 stderr failures, 3 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 03:22:06
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8) GDB: Assembler: GNU assembler version 2.18.50.0.6-2 20080403 C library: GNU C Library stable release version 2.8 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 9 (Sulphur) Nightly build on bristol ( x86_64, Fedora 9 ) Started at 2013-05-11 03:51:39 BST Ended at 2013-05-11 04:21: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 == 627 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/amd64/insn-pcmpistri (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Rich C. <rc...@wi...> - 2013-05-11 03:15:14
|
valgrind revision: 13385
VEX revision: 2718
C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]
GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1)
Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1
C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537)
uname -mrs: Linux 3.7.9-1.1-desktop x86_64
Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t).
Nightly build on ultra ( gcc 4.5.1 Linux 3.7.9-1.1-desktop x86_64 )
Started at 2013-05-10 21:30:01 CDT
Ended at 2013-05-10 22:15:02 CDT
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
== 645 tests, 1 stderr failure, 0 stdout failures, 1 stderrB failure, 0 stdoutB failures, 0 post failures ==
gdbserver_tests/mssnapshot (stderrB)
memcheck/tests/origin5-bz2 (stderr)
=================================================
./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2013-05-10 22:00:28.947796881 -0500
+++ mssnapshot.stderrB.out 2013-05-10 22:06:21.843092824 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-05-10 22:01:03.206853054 -0500
+++ origin5-bz2.stderr.out 2013-05-10 22:07:55.824507712 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-05-10 22:00:57.866000814 -0500
+++ origin5-bz2.stderr.out 2013-05-10 22:07:55.824507712 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-05-10 22:01:05.191799512 -0500
+++ origin5-bz2.stderr.out 2013-05-10 22:07:55.824507712 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-05-10 22:01:17.652456925 -0500
+++ origin5-bz2.stderr.out 2013-05-10 22:07:55.824507712 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-new/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-05-10 22:01:24.831259949 -0500
+++ origin5-bz2.stderr.out 2013-05-10 22:07:55.824507712 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
=================================================
./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff
=================================================
--- mssnapshot.stderrB.exp 2013-05-10 21:36:50.807057728 -0500
+++ mssnapshot.stderrB.out 2013-05-10 21:46:37.880681886 -0500
@@ -1,5 +1,11 @@
relaying data between gdb and process ....
+Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
+Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158"
vgdb-error value changed from 0 to 999999
+Missing separate debuginfo for /lib64/libpthread.so.0
+Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef"
+Missing separate debuginfo for /lib64/libc.so.6
+Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7"
general valgrind monitor commands:
help [debug] : monitor command help. With debug: + debugging commands
v.wait [<ms>] : sleep <ms> (default 0) then continue
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc212-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc212-s390x 2013-05-10 21:37:33.179876066 -0500
+++ origin5-bz2.stderr.out 2013-05-10 21:48:09.875116011 -0500
@@ -75,17 +75,6 @@
at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
- at 0x........: mainSort (origin5-bz2.c:2859)
- by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
- by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
- by 0x........: handle_compress (origin5-bz2.c:4753)
- by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
- by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
- by 0x........: main (origin5-bz2.c:6484)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
-
-Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -131,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc234-s390x
=================================================
--- origin5-bz2.stderr.exp-glibc234-s390x 2013-05-10 21:37:29.883968234 -0500
+++ origin5-bz2.stderr.out 2013-05-10 21:48:09.875116011 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-amd64
=================================================
--- origin5-bz2.stderr.exp-glibc25-amd64 2013-05-10 21:37:29.879968453 -0500
+++ origin5-bz2.stderr.out 2013-05-10 21:48:09.875116011 -0500
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: g_serviceFn (origin5-bz2.c:6429)
+ by 0x........: default_bzalloc (origin5-bz2.c:4470)
+ by 0x........: BZ2_decompress (origin5-bz2.c:1578)
+ by 0x........: BZ2_bzDecompress (origin5-bz2.c:5192)
+ by 0x........: BZ2_bzBuffToBuffDecompress (origin5-bz2.c:5678)
+ by 0x........: main (origin5-bz2.c:6498)
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc25-x86
=================================================
--- origin5-bz2.stderr.exp-glibc25-x86 2013-05-10 21:37:13.701420321 -0500
+++ origin5-bz2.stderr.out 2013-05-10 21:48:09.875116011 -0500
@@ -12,7 +12,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -21,7 +21,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
by 0x........: handle_compress (origin5-bz2.c:4750)
by 0x........: BZ2_bzCompress (origin5-bz2.c:4822)
@@ -30,7 +30,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -41,7 +41,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -52,7 +52,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -63,7 +63,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -74,7 +74,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -85,7 +85,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
by 0x........: BZ2_blockSort (origin5-bz2.c:3105)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -96,7 +96,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -107,7 +107,7 @@
Uninitialised value was created by a client request
at 0x........: main (origin5-bz2.c:6479)
-Use of uninitialised value of size 4
+Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2275)
by 0x........: BZ2_blockSort (origin5-bz2.c:3116)
by 0x........: BZ2_compressBlock (origin5-bz2.c:4034)
@@ -120,6 +120,12 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6512)
- Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6479)
+ Uninitialised value was created by a heap allocation
+ at 0x........: malloc (vg_replace_malloc.c:...)
<truncated beyond 100 lines>
=================================================
./valgrind-old/memcheck/tests/origin5-bz2.stderr.diff-glibc27-ppc64
=================================================
--- origin5-bz2.stderr.exp-glibc27-ppc64 2013-05-10 21:37:13.704420099 -0500
+++ origin5-bz2.stderr.out 2013-05-10 21:48:09.875116011 -0500
@@ -1,7 +1,7 @@
Conditional jump or move depends on uninitialised value(s)
at 0x........: main (origin5-bz2.c:6481)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Conditional jump or move depends on uninitialised value(s)
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -10,7 +10,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -19,7 +19,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: copy_input_until_stop (origin5-bz2.c:4686)
@@ -28,7 +28,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2820)
@@ -39,7 +39,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2823)
@@ -50,7 +50,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2854)
@@ -61,7 +61,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2858)
@@ -72,7 +72,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2963)
@@ -83,7 +83,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: mainSort (origin5-bz2.c:2964)
@@ -94,7 +94,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
at 0x........: fallbackSort (origin5-bz2.c:2269)
@@ -105,7 +105,7 @@
by 0x........: BZ2_bzBuffToBuffCompress (origin5-bz2.c:5630)
by 0x........: main (origin5-bz2.c:6484)
Uninitialised value was created by a client request
- at 0x........: main (origin5-bz2.c:6481)
+ at 0x........: main (origin5-bz2.c:6479)
Use of uninitialised value of size 8
<truncated beyond 100 lines>
|
|
From: Tom H. <to...@co...> - 2013-05-11 03:12:48
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2) GDB: Assembler: GNU assembler version 2.19.51.0.14-3.fc11 20090722 C library: GNU C Library stable release version 2.10.2 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 11 (Leonidas) Nightly build on bristol ( x86_64, Fedora 11 ) Started at 2013-05-11 03:42:45 BST Ended at 2013-05-11 04:12:32 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 == 631 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/long_namespace_xml (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Tom H. <to...@co...> - 2013-05-11 03:11:34
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.1-48.fc15) Assembler: GNU assembler version 2.21.51.0.6-6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 15 (Lovelock) Nightly build on bristol ( x86_64, Fedora 15 ) Started at 2013-05-11 03:12:43 BST Ended at 2013-05-11 04:11:21 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 == 652 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 03:11:19
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) GDB: GNU gdb (GDB) Fedora (7.2-52.fc14) Assembler: GNU assembler version 2.20.51.0.7-8.fc14 20100318 C library: GNU C Library stable release version 2.13 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 14 (Laughlin) Nightly build on bristol ( x86_64, Fedora 14 ) Started at 2013-05-11 03:21:42 BST Ended at 2013-05-11 04:11:00 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 == 650 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 03:10:41
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2) GDB: Assembler: GNU assembler version 2.20.51.0.2-20.fc13 20091009 C library: GNU C Library stable release version 2.12.2 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 13 (Goddard) Nightly build on bristol ( x86_64, Fedora 13 ) Started at 2013-05-11 03:32:37 BST Ended at 2013-05-11 04:10:21 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 == 631 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 02:54:14
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Assembler: GNU assembler version 2.21.53.0.1-6.fc16 20110716 C library: GNU C Library development release version 2.14.90 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2013-05-11 03:02:35 BST Ended at 2013-05-11 03:54:00 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 == 652 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 02:45:54
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: GNU C Library stable release version 2.15 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on bristol ( x86_64, Fedora 17 (Beefy Miracle) ) Started at 2013-05-11 02:51:49 BST Ended at 2013-05-11 03:45:37 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 == 652 tests, 5 stderr failures, 1 stdout failure, 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) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Christian B. <bor...@de...> - 2013-05-11 02:15:36
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] GDB: GNU gdb (GDB) SUSE (7.3-0.6.1) Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.21.1 C library: GNU C Library stable release version 2.11.3 (20110527) uname -mrs: Linux 3.0.58-0.6.6-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP2 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) ) Started at 2013-05-11 03:45:01 CEST Ended at 2013-05-11 04:15:23 CEST 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 == 632 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/vbit-test/vbit-test (stderr) |
|
From: Christian B. <bor...@de...> - 2013-05-11 02:14:42
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9bb4) GDB: GNU gdb (GDB) Fedora (7.5-1bb1.fc15) Assembler: GNU assembler version 2.21.51.0.6-6bb6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.8.6-60.x.20130412-s390xperformance s390x Vendor version: unknown Nightly build on fedora390 ( Fedora 15 with devel libc/toolchain on z196 (s390x) ) Started at 2013-05-11 03:45:01 CEST Ended at 2013-05-11 04:14:53 CEST 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 == 633 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/vbit-test/vbit-test (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 02:14:06
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-38.fc18) Assembler: GNU assembler version 2.23.51.0.1-6.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on bristol ( x86_64, Fedora 18 (Spherical Cow) ) Started at 2013-05-11 02:42:25 BST Ended at 2013-05-11 03:13: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 == 652 tests, 2 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 02:02:53
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.8.0 20130412 (Red Hat 4.8.0-2) GDB: GNU gdb (GDB) Fedora (7.6-24.fc19) Assembler: GNU assembler version 2.23.52.0.1-8.fc19 20130226 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 19 (Schrödingerâs Cat) Nightly build on bristol ( x86_64, Fedora 19 (Schrödingerâs Cat) ) Started at 2013-05-11 02:31:23 BST Ended at 2013-05-11 03:02:39 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 == 652 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |
|
From: Tom H. <to...@co...> - 2013-05-11 01:48:37
|
valgrind revision: 13385 VEX revision: 2718 C compiler: gcc (GCC) 4.8.0 20130507 (Red Hat 4.8.0-4) GDB: GNU gdb (GDB) Fedora (7.6-27.fc20) Assembler: GNU assembler version 2.23.2 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.8.6-203.fc18.x86_64 x86_64 Vendor version: Fedora release 20 (Rawhide) Nightly build on bristol ( x86_64, Fedora 20 ) Started at 2013-05-11 02:22:28 BST Ended at 2013-05-11 02:48:24 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 == 652 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) memcheck/tests/origin5-bz2 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) |